<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script> <script src="data:application/x-javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAvLyB3aGVuIHVwZ3JhZGluZyBwbG90bHkuanMsCiAgICAvLyB1bmNvbW1lbnQgdGhpcyBjb25zb2xlLmxvZygpLCB0aGVuIGRvIGBsb2FkX2FsbCgpOyBwbG90X2x5KClgIAogICAgLy8gb3BlbiBpbiBjaHJvbWUsIHJpZ2h0LWNsaWNrIG9uIGNvbnNvbGUgb3V0cHV0OiAic2F2ZS1hcyIgLT4gInNjaGVtYS5qc29uIgogICAgLy8gU2NoZW1hIDwtIGpzb25saXRlOjpmcm9tSlNPTigifi9Eb3dubG9hZHMvc2NoZW1hLmpzb24iKQogICAgLy8gZGV2dG9vbHM6OnVzZV9kYXRhKFNjaGVtYSwgb3ZlcndyaXRlID0gVCwgaW50ZXJuYWwgPSBUKQogICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoUGxvdGx5LlBsb3RTY2hlbWEuZ2V0KCkpKTsKICAgIAogICAgcmV0dXJuIHt9OwogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICBpZiAoaW5zdGFuY2UuYXV0b3NpemUpIHsKICAgICAgdmFyIHdpZHRoID0gaW5zdGFuY2Uud2lkdGggfHwgd2lkdGg7CiAgICAgIHZhciBoZWlnaHQgPSBpbnN0YW5jZS5oZWlnaHQgfHwgaGVpZ2h0OwogICAgICBQbG90bHkucmVsYXlvdXQoZWwuaWQsIHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICB9CiAgfSwgIAogIAogIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgCiAgICBpZiAodHlwZW9mKHdpbmRvdykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIC8vIG1ha2Ugc3VyZSBwbG90cyBkb24ndCBnZXQgY3JlYXRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIChmb3Igb24tcHJlbSkKICAgICAgd2luZG93LlBMT1RMWUVOViA9IHdpbmRvdy5QTE9UTFlFTlYgfHwge307CiAgICAgIHdpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkwgPSB4LmJhc2VfdXJsOwogICAgfQoKICAgIHZhciBncmFwaERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsLmlkKTsKICAgIAogICAgLy8gVE9ETzogbW92ZSB0aGUgY29udHJvbCBwYW5lbCBpbmplY3Rpb24gc3RyYXRlZ3kgaW5zaWRlIGhlcmUuLi4KICAgIEhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyKGZ1bmN0aW9uKCkgewogICAgICAKICAgICAgLy8gbG93ZXIgdGhlIHotaW5kZXggb2YgdGhlIG1vZGViYXIgdG8gcHJldmVudCBpdCBmcm9tIGhpZ2hqYWNraW5nIGhvdmVyCiAgICAgIC8vIChUT0RPOiBkbyB0aGlzIHZpYSBDU1M/KQogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcm9wZW5zY2kvcGxvdGx5L2lzc3Vlcy85NTYKICAgICAgLy8gaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9qc3JlZi9wcm9wX3N0eWxlX3ppbmRleC5hc3AKICAgICAgdmFyIG1vZGViYXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmpzLXBsb3RseS1wbG90IC5wbG90bHkgLm1vZGViYXIiKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlYmFycy5sZW5ndGg7IGkrKykgewogICAgICAgIG1vZGViYXJzW2ldLnN0eWxlLnpJbmRleCA9IDE7CiAgICAgIH0KICAgIH0pOwogICAgICAKICAgICAgLy8gaW5qZWN0IGEgImNvbnRyb2wgcGFuZWwiIGhvbGRpbmcgc2VsZWN0aXplL2R5bmFtaWMgY29sb3Igd2lkZ2V0KHMpCiAgICBpZiAoeC5zZWxlY3RpemUgfHwgeC5oaWdobGlnaHQuZHluYW1pYyAmJiAhaW5zdGFuY2UucGxvdGx5KSB7CiAgICAgIHZhciBmbGV4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGZsZXguY2xhc3MgPSAicGxvdGx5LWNyb3NzdGFsay1jb250cm9sLXBhbmVsIjsKICAgICAgZmxleC5zdHlsZSA9ICJkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXAiOwogICAgICAKICAgICAgLy8gaW5qZWN0IHRoZSBjb2xvdXJwaWNrZXIgSFRNTCBjb250YWluZXIgaW50byB0aGUgZmxleGJveAogICAgICBpZiAoeC5oaWdobGlnaHQuZHluYW1pYykgewogICAgICAgIHZhciBwaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VySW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICAgIHBpY2tlcklucHV0LmlkID0gZWwuaWQgKyAiLWNvbG91cnBpY2tlciI7CiAgICAgICAgcGlja2VySW5wdXQucGxhY2Vob2xkZXIgPSAiYXNkYXNkIjsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VyTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgIHBpY2tlckxhYmVsLmZvciA9IHBpY2tlcklucHV0LmlkOwogICAgICAgIHBpY2tlckxhYmVsLmlubmVySFRNTCA9ICJCcnVzaCBjb2xvciZuYnNwOyZuYnNwOyI7CiAgICAgICAgCiAgICAgICAgcGlja2VyRGl2LmFwcGVuZENoaWxkKHBpY2tlckxhYmVsKTsKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VySW5wdXQpOwogICAgICAgIGZsZXguYXBwZW5kQ2hpbGQocGlja2VyRGl2KTsKICAgICAgfQogICAgICAKICAgICAgLy8gaW5qZWN0IHNlbGVjdGl6ZSBIVE1MIGNvbnRhaW5lcnMgKG9uZSBmb3IgZXZlcnkgY3Jvc3N0YWxrIGdyb3VwKQogICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICB2YXIgaWRzID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICBjb250YWluZXIuaWQgPSBpZHNbaV07CiAgICAgICAgICBjb250YWluZXIuc3R5bGUgPSAid2lkdGg6IDgwJTsgaGVpZ2h0OiAxMCUiOwogICAgICAgICAgY29udGFpbmVyLmNsYXNzID0gImZvcm0tZ3JvdXAgY3Jvc3N0YWxrLWlucHV0LXBsb3RseS1oaWdobGlnaHQiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgICAgbGFiZWwuZm9yID0gaWRzW2ldOwogICAgICAgICAgbGFiZWwuaW5uZXJIVE1MID0geC5zZWxlY3RpemVbaWRzW2ldXS5ncm91cDsKICAgICAgICAgIGxhYmVsLmNsYXNzID0gImNvbnRyb2wtbGFiZWwiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgc2VsZWN0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CiAgICAgICAgICBzZWxlY3QubXVsdGlwbGUgPSB0cnVlOwogICAgICAgICAgCiAgICAgICAgICBzZWxlY3REaXYuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RGl2KTsKICAgICAgICAgIGZsZXguYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC8vIGZpbmFsbHksIGluc2VydCB0aGUgZmxleGJveCBpbnNpZGUgdGhlIGh0bWx3aWRnZXQgY29udGFpbmVyLAogICAgICAvLyBidXQgYmVmb3JlIHRoZSBwbG90bHkgZ3JhcGggZGl2CiAgICAgIGdyYXBoRGl2LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZsZXgsIGdyYXBoRGl2KTsKICAgICAgCiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlciA9ICQoIiMiICsgcGlja2VySW5wdXQuaWQpOwogICAgICAgIHZhciBjb2xvcnMgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgICAgICAvLyBUT0RPOiBsZXQgdXNlcnMgc3BlY2lmeSBvcHRpb25zPwogICAgICAgIHZhciBvcHRzID0gewogICAgICAgICAgdmFsdWU6IGNvbG9yc1swXSwKICAgICAgICAgIHNob3dDb2xvdXI6ICJib3RoIiwKICAgICAgICAgIHBhbGV0dGU6ICJsaW1pdGVkIiwKICAgICAgICAgIGFsbG93ZWRDb2xzOiBjb2xvcnMuam9pbigiICIpLAogICAgICAgICAgd2lkdGg6ICIyMCUiLAogICAgICAgICAgaGVpZ2h0OiAiMTAlIgogICAgICAgIH07CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcih7Y2hhbmdlRGVsYXk6IDB9KTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKCJzZXR0aW5ncyIsIG9wdHMpOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInZhbHVlIiwgb3B0cy52YWx1ZSk7CiAgICAgICAgLy8gaW5mb3JtIGNyb3NzdGFsayBhYm91dCBhIGNoYW5nZSBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gY29sb3VyCiAgICAgICAgdmFyIGdycHMgPSB4LmhpZ2hsaWdodC5jdEdyb3VwcyB8fCBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNyb3NzdGFsay5ncm91cChncnBzW2ldKS52YXIoJ3Bsb3RseVNlbGVjdGlvbkNvbG91cicpCiAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgfQogICAgICAgIHBpY2tlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgICAuc2V0KHBpY2tlci5jb2xvdXJwaWNrZXIoJ3ZhbHVlJykpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vIHJlbW92ZSAic2VuZERhdGFUb0Nsb3VkIiwgdW5sZXNzIHVzZXIgaGFzIHNwZWNpZmllZCB0aGV5IHdhbnQgaXQKICAgIHguY29uZmlnID0geC5jb25maWcgfHwge307CiAgICBpZiAoIXguY29uZmlnLmNsb3VkKSB7CiAgICAgIHguY29uZmlnLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUgPSB4LmNvbmZpZy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlIHx8IFtdOwogICAgICB4LmNvbmZpZy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLnB1c2goInNlbmREYXRhVG9DbG91ZCIpOwogICAgfQogICAgCiAgICAvLyBpZiBubyBwbG90IGV4aXN0cyB5ZXQsIGNyZWF0ZSBvbmUgd2l0aCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbgogICAgaWYgKCFpbnN0YW5jZS5wbG90bHkpIHsKICAgICAgCiAgICAgIHZhciBwbG90ID0gUGxvdGx5LnBsb3QoZ3JhcGhEaXYsIHgpOwogICAgICBpbnN0YW5jZS5wbG90bHkgPSB0cnVlOwogICAgICBpbnN0YW5jZS5hdXRvc2l6ZSA9IHgubGF5b3V0LmF1dG9zaXplIHx8IHRydWU7CiAgICAgIGluc3RhbmNlLndpZHRoID0geC5sYXlvdXQud2lkdGg7CiAgICAgIGluc3RhbmNlLmhlaWdodCA9IHgubGF5b3V0LmhlaWdodDsKICAgICAgCiAgICB9IGVsc2UgewogICAgICAKICAgICAgLy8gdGhpcyBpcyBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIFBsb3RseS5uZXdQbG90KCksIGJ1dCBhdm9pZHMgY3JlYXRpbmcgCiAgICAgIC8vIGEgbmV3IHdlYmdsIGNvbnRleHQKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9wbG90bHkuanMvYmxvYi8yYjI0ZjlkZWY5MDE4MzFlNjEyODIwNzZjZjNmODM1NTk4ZDU2ZjBlL3NyYy9wbG90X2FwaS9wbG90X2FwaS5qcyNMNTMxLUw1MzIKICAgICAgCiAgICAgIC8vIFRPRE86IHJlc3RvcmUgY3Jvc3N0YWxrIHNlbGVjdGlvbnM/CiAgICAgIFBsb3RseS5wdXJnZShncmFwaERpdik7CiAgICAgIC8vIFRPRE86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeSB0byBnZXQgY3Jvc3N0YWxrIHdvcmtpbmc/CiAgICAgIGdyYXBoRGl2LmRhdGEgPSB1bmRlZmluZWQ7CiAgICAgIGdyYXBoRGl2LmxheW91dCA9IHVuZGVmaW5lZDsKICAgICAgdmFyIHBsb3QgPSBQbG90bHkucGxvdChncmFwaERpdiwgeCk7CiAgICAgIAogICAgfQogICAgCiAgICAvLyBUcmlnZ2VyIHBsb3RseS5qcyBjYWxscyBkZWZpbmVkIHZpYSBgcGxvdGx5UHJveHkoKWAKICAgIHBsb3QudGhlbihmdW5jdGlvbigpIHsKICAgICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSkgewogICAgICAgIFNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJwbG90bHktY2FsbHMiLCBmdW5jdGlvbihtc2cpIHsKICAgICAgICAgIHZhciBnZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1zZy5pZCk7CiAgICAgICAgICBpZiAoIWdkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgZmluZCBwbG90bHkgZ3JhcGggd2l0aCBpZDogIiArIG1zZy5pZCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIVBsb3RseVttc2cubWV0aG9kXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWV0aG9kICIgKyBtc2cubWV0aG9kKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBhcmdzID0gW2dkXS5jb25jYXQobXNnLmFyZ3MpOwogICAgICAgICAgUGxvdGx5W21zZy5tZXRob2RdLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIAogICAgLy8gQXR0YWNoIGF0dHJpYnV0ZXMgKGUuZy4sICJrZXkiLCAieiIpIHRvIHBsb3RseSBldmVudCBkYXRhCiAgICBmdW5jdGlvbiBldmVudERhdGFXaXRoS2V5KGV2ZW50RGF0YSkgewogICAgICBpZiAoZXZlbnREYXRhID09PSB1bmRlZmluZWQgfHwgIWV2ZW50RGF0YS5oYXNPd25Qcm9wZXJ0eSgicG9pbnRzIikpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gZXZlbnREYXRhLnBvaW50cy5tYXAoZnVuY3Rpb24ocHQpIHsKICAgICAgICB2YXIgb2JqID0gewogICAgICAgICAgY3VydmVOdW1iZXI6IHB0LmN1cnZlTnVtYmVyLCAKICAgICAgICAgIHBvaW50TnVtYmVyOiBwdC5wb2ludE51bWJlciwgCiAgICAgICAgICB4OiBwdC54LAogICAgICAgICAgeTogcHQueQogICAgICAgIH07CiAgICAgICAgLyogCiAgICAgICAgICBUTDtEUjogKEkgdGhpbmspIHdlIGhhdmUgdG8gc2VsZWN0IHRoZSBncmFwaCBkaXYgKGFnYWluKSB0byBhdHRhY2gga2V5cy4uLgogICAgICAgICAgCiAgICAgICAgICBXaHk/IFJlbWVtYmVyIHRoYXQgY3Jvc3N0YWxrIHdpbGwgZHluYW1pY2FsbHkgYWRkL2RlbGV0ZSB0cmFjZXMgCiAgICAgICAgICAoc2VlIHRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uKCkgYmVsb3cpCiAgICAgICAgICBGb3IgdGhpcyByZWFzb24sIHdlIGNhbid0IHNpbXBseSBncmFiIGtleXMgZnJvbSB4LmRhdGEgKGxpa2Ugd2UgZGlkIHByZXZpb3VzbHkpCiAgICAgICAgICBNb3Jlb3Zlciwgd2UgY2FuJ3QgdXNlIF9mdWxsRGF0YSwgc2luY2UgdGhhdCBkb2Vzbid0IGluY2x1ZGUgCiAgICAgICAgICB1bm9mZmljaWFsIGF0dHJpYnV0ZXMuIEl0J3MgdHJ1ZSB0aGF0IGNsaWNrL2hvdmVyIGV2ZW50cyBmaXJlIHdpdGggCiAgICAgICAgICBwdC5kYXRhLCBidXQgZHJhZyBldmVudHMgZG9uJ3QuLi4KICAgICAgICAqLwogICAgICAgIHZhciBnZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsLmlkKTsKICAgICAgICB2YXIgdHJhY2UgPSBnZC5kYXRhW3B0LmN1cnZlTnVtYmVyXTsKICAgICAgICAKICAgICAgICAvLyBBZGQgb3RoZXIgYXR0cmlidXRlcyBoZXJlLCBpZiBkZXNpcmVkCiAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgIHZhciBhdHRyc1RvQXR0YWNoID0gWyJrZXkiLCAieiJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBzaW1wbGUga2V5cyBmaXJlIHRoZSB3aG9sZSBrZXkKICAgICAgICAgIG9iai5rZXkgPSB0cmFjZS5rZXk7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFsieiJdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzVG9BdHRhY2gubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBhdHRyID0gdHJhY2VbYXR0cnNUb0F0dGFjaFtpXV07CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyKSkgewogICAgICAgICAgICAgIC8vIHBvaW50TnVtYmVyIGNhbiBiZSBhbiBhcnJheSAoZS5nLiwgaGVhdG1hcHMpCiAgICAgICAgICAgICAgLy8gVE9ETzogY2FuIHBvaW50TnVtYmVyIGJlIDNEPwogICAgICAgICAgICAgIG9ialthdHRyc1RvQXR0YWNoW2ldXSA9IHR5cGVvZiBwdC5wb2ludE51bWJlciA9PT0gIm51bWJlciIgPyAKICAgICAgICAgICAgICAgIGF0dHJbcHQucG9pbnROdW1iZXJdIDogYXR0cltwdC5wb2ludE51bWJlclswXV1bcHQucG9pbnROdW1iZXJbMV1dOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqOwogICAgICB9KTsKICAgIH0KICAgIAogICAgLy8gc2VuZCB1c2VyIGlucHV0IGV2ZW50IGRhdGEgdG8gc2hpbnkKICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgLy8gaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvem9vbS1ldmVudHMvCiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfcmVsYXlvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgKICAgICAgICAgICIuY2xpZW50VmFsdWUtcGxvdGx5X3JlbGF5b3V0LSIgKyB4LnNvdXJjZSwgCiAgICAgICAgICBKU09OLnN0cmluZ2lmeShkKQogICAgICAgICk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X2hvdmVyJywgZnVuY3Rpb24oZCkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoCiAgICAgICAgICAiLmNsaWVudFZhbHVlLXBsb3RseV9ob3Zlci0iICsgeC5zb3VyY2UsIAogICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnREYXRhV2l0aEtleShkKSkKICAgICAgICApOwogICAgICB9KTsKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9jbGljaycsIGZ1bmN0aW9uKGQpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKAogICAgICAgICAgIi5jbGllbnRWYWx1ZS1wbG90bHlfY2xpY2stIiArIHguc291cmNlLCAKICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVdpdGhLZXkoZCkpCiAgICAgICAgKTsKICAgICAgfSk7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfc2VsZWN0ZWQnLCBmdW5jdGlvbihkKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgKICAgICAgICAgICIuY2xpZW50VmFsdWUtcGxvdGx5X3NlbGVjdGVkLSIgKyB4LnNvdXJjZSwgCiAgICAgICAgICBKU09OLnN0cmluZ2lmeShldmVudERhdGFXaXRoS2V5KGQpKQogICAgICAgICk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X3VuaG92ZXInLCBmdW5jdGlvbihldmVudERhdGEpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtcGxvdGx5X2hvdmVyLSIgKyB4LnNvdXJjZSwgbnVsbCk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X2RvdWJsZWNsaWNrJywgZnVuY3Rpb24oZXZlbnREYXRhKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLXBsb3RseV9jbGljay0iICsgeC5zb3VyY2UsIG51bGwpOwogICAgICB9KTsKICAgICAgLy8gJ3Bsb3RseV9kZXNlbGVjdCcgaXMgY29kZSBmb3IgZG91YmxlY2xpY2sgd2hlbiBpbiBzZWxlY3QgbW9kZQogICAgICBncmFwaERpdi5vbigncGxvdGx5X2Rlc2VsZWN0JywgZnVuY3Rpb24oZXZlbnREYXRhKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLXBsb3RseV9zZWxlY3RlZC0iICsgeC5zb3VyY2UsIG51bGwpOwogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoIi5jbGllbnRWYWx1ZS1wbG90bHlfY2xpY2stIiArIHguc291cmNlLCBudWxsKTsKICAgICAgfSk7CiAgICB9IAogICAgCiAgICAKICAgIC8vIEdpdmVuIGFuIGFycmF5IG9mIHtjdXJ2ZU51bWJlcjogeCwgcG9pbnROdW1iZXI6IHl9IG9iamVjdHMsCiAgICAvLyByZXR1cm4gYSBoYXNoIG9mIHsKICAgIC8vICAgc2V0MToge3ZhbHVlOiBba2V5MSwga2V5MiwgLi4uXSwgX2lzU2ltcGxlS2V5OiBmYWxzZX0sIAogICAgLy8gICBzZXQyOiB7dmFsdWU6IFtrZXkzLCBrZXk0LCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfQogICAgLy8gfQogICAgZnVuY3Rpb24gcG9pbnRzVG9LZXlzKHBvaW50cykgewogICAgICB2YXIga2V5c0J5U2V0ID0ge307CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgCiAgICAgICAgdmFyIHRyYWNlID0gZ3JhcGhEaXYuZGF0YVtwb2ludHNbaV0uY3VydmVOdW1iZXJdOwogICAgICAgIGlmICghdHJhY2Uua2V5IHx8ICF0cmFjZS5zZXQpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBzZXQgZGVmYXVsdHMgZm9yIHRoaXMga2V5U2V0CiAgICAgICAgLy8gbm90ZSB0aGF0IHdlIGRvbid0IHRyYWNrIHRoZSBuZXN0ZWQgcHJvcGVydHkgKHlldCkgc2luY2Ugd2UgYWx3YXlzIAogICAgICAgIC8vIGVtaXQgdGhlIHVuaW9uIC0tIGh0dHA6Ly9jcHNpZXZlcnQuZ2l0aHViLmlvL3RhbGtzLzIwMTYxMjEyYi8jMjEKICAgICAgICBrZXlzQnlTZXRbdHJhY2Uuc2V0XSA9IGtleXNCeVNldFt0cmFjZS5zZXRdIHx8IHsKICAgICAgICAgIHZhbHVlOiBbXSwKICAgICAgICAgIF9pc1NpbXBsZUtleTogdHJhY2UuX2lzU2ltcGxlS2V5CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyBzZWxlY3RpbmcgYSBwb2ludCBvZiBhICJzaW1wbGUiIHRyYWNlIG1lYW5zOiBzZWxlY3QgdGhlIAogICAgICAgIC8vIGVudGlyZSBrZXkgYXR0YWNoZWQgdG8gdGhpcyB0cmFjZSwgd2hpY2ggaXMgdXNlZnVsIGZvciwKICAgICAgICAvLyBzYXkgY2xpY2tpbmcgb24gYSBmaXR0ZWQgbGluZSB0byBzZWxlY3QgY29ycmVzcG9uZGluZyBvYnNlcnZhdGlvbnMgCiAgICAgICAgdmFyIGtleSA9IHRyYWNlLl9pc1NpbXBsZUtleSA/IHRyYWNlLmtleSA6IHRyYWNlLmtleVtwb2ludHNbaV0ucG9pbnROdW1iZXJdOwogICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA4NjUwMjUvbWVyZ2UtZmxhdHRlbi1hbi1hcnJheS1vZi1hcnJheXMtaW4tamF2YXNjcmlwdAogICAgICAgIHZhciBrZXlGbGF0ID0gdHJhY2UuX2lzTmVzdGVkS2V5ID8gW10uY29uY2F0LmFwcGx5KFtdLCBrZXkpIDoga2V5OwogICAgICAgIAogICAgICAgIC8vIFRPRE86IGJldHRlciB0byBvbmx5IGFkZCBuZXcgdmFsdWVzPwogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdLnZhbHVlID0ga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUuY29uY2F0KGtleUZsYXQpOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4ga2V5c0J5U2V0OwogICAgfQogICAgCiAgICAKICAgIHguaGlnaGxpZ2h0LmNvbG9yID0geC5oaWdobGlnaHQuY29sb3IgfHwgW107CiAgICAvLyBtYWtlIHN1cmUgaGlnaGxpZ2h0IGNvbG9yIGlzIGFuIGFycmF5CiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeC5oaWdobGlnaHQuY29sb3IpKSB7CiAgICAgIHguaGlnaGxpZ2h0LmNvbG9yID0gW3guaGlnaGxpZ2h0LmNvbG9yXTsKICAgIH0KCiAgICB2YXIgdHJhY2VNYW5hZ2VyID0gbmV3IFRyYWNlTWFuYWdlcihncmFwaERpdiwgeC5oaWdobGlnaHQpOwoKICAgIC8vIEdhdGhlciBhbGwgKnVuaXF1ZSogc2V0cy4KICAgIHZhciBhbGxTZXRzID0gW107CiAgICBmb3IgKHZhciBjdXJ2ZUlkeCA9IDA7IGN1cnZlSWR4IDwgeC5kYXRhLmxlbmd0aDsgY3VydmVJZHgrKykgewogICAgICB2YXIgbmV3U2V0ID0geC5kYXRhW2N1cnZlSWR4XS5zZXQ7CiAgICAgIGlmIChuZXdTZXQpIHsKICAgICAgICBpZiAoYWxsU2V0cy5pbmRleE9mKG5ld1NldCkgPT09IC0xKSB7CiAgICAgICAgICBhbGxTZXRzLnB1c2gobmV3U2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyByZWdpc3RlciBldmVudCBsaXN0ZW5lcnMgZm9yIGFsbCBzZXRzCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFNldHMubGVuZ3RoOyBpKyspIHsKICAgICAgCiAgICAgIHZhciBzZXQgPSBhbGxTZXRzW2ldOwogICAgICB2YXIgc2VsZWN0aW9uID0gbmV3IGNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoc2V0KTsKICAgICAgdmFyIGZpbHRlciA9IG5ldyBjcm9zc3RhbGsuRmlsdGVySGFuZGxlKHNldCk7CiAgICAgIAogICAgICB2YXIgZmlsdGVyQ2hhbmdlID0gZnVuY3Rpb24oZSkgewogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlRmlsdGVyKHNldCwgZS52YWx1ZSk7CiAgICAgIH07CiAgICAgIGZpbHRlci5vbigiY2hhbmdlIiwgZmlsdGVyQ2hhbmdlKTsKICAgICAgCiAgICAgIAogICAgICB2YXIgc2VsZWN0aW9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgewogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICBncmFwaERpdi5vbih4LmhpZ2hsaWdodC5vbiwgZnVuY3Rpb24gdHVybk9uKGUpIHsKICAgICAgICBpZiAoZSkgewogICAgICAgICAgdmFyIHNlbGVjdGVkS2V5cyA9IHBvaW50c1RvS2V5cyhlLnBvaW50cyk7CiAgICAgICAgICAvLyBLZXlzIGFyZSBncm91cCBuYW1lcywgdmFsdWVzIGFyZSBhcnJheSBvZiBzZWxlY3RlZCBrZXlzIGZyb20gZ3JvdXAuCiAgICAgICAgICBmb3IgKHZhciBzZXQgaW4gc2VsZWN0ZWRLZXlzKSB7CiAgICAgICAgICAgIGlmIChzZWxlY3RlZEtleXMuaGFzT3duUHJvcGVydHkoc2V0KSkgewogICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXQoc2VsZWN0ZWRLZXlzW3NldF0udmFsdWUsIHtzZW5kZXI6IGVsfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgICAgICAKICAgICAgCiAgICAgIAogICAgfQogICAgCiAgfSAvLyBlbmQgb2YgcmVuZGVyVmFsdWUKfSk7IC8vIGVuZCBvZiB3aWRnZXQgZGVmaW5pdGlvbgoKLyoqCiAqIEBwYXJhbSBncmFwaERpdiBUaGUgUGxvdGx5IGdyYXBoIGRpdgogKiBAcGFyYW0gaGlnaGxpZ2h0IEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHNlbGVjdGlvbihzKQogKi8KZnVuY3Rpb24gVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCBoaWdobGlnaHQpIHsKICAvLyBUaGUgUGxvdGx5IGdyYXBoIGRpdgogIHRoaXMuZ2QgPSBncmFwaERpdjsKCiAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGRhdGEuCiAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9wbG90bHkuanMvcHVsbC8xMTM2IAogIHRoaXMub3JpZ0RhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyYXBoRGl2LmRhdGEpKTsKICAKICAvLyBhdm9pZCBkb2luZyB0aGlzIG92ZXIgYW5kIG92ZXIKICB0aGlzLm9yaWdPcGFjaXR5ID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICB0aGlzLm9yaWdPcGFjaXR5W2ldID0gdGhpcy5vcmlnRGF0YVtpXS5vcGFjaXR5IHx8IDE7CiAgfQoKICAvLyBrZXk6IGdyb3VwIG5hbWUsIHZhbHVlOiBudWxsIG9yIGFycmF5IG9mIGtleXMgcmVwcmVzZW50aW5nIHRoZQogIC8vIG1vc3QgcmVjZW50bHkgcmVjZWl2ZWQgc2VsZWN0aW9uIGZvciB0aGF0IGdyb3VwLgogIHRoaXMuZ3JvdXBTZWxlY3Rpb25zID0ge307CiAgCiAgLy8gc2VsZWN0aW9uIHBhcmFtZXRlcnMgKGUuZy4sIHRyYW5zaWVudCB2ZXJzdXMgcGVyc2lzdGVudCBzZWxlY3Rpb24pCiAgdGhpcy5oaWdobGlnaHQgPSBoaWdobGlnaHQ7Cn0KClRyYWNlTWFuYWdlci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKICAvLyBUT0RPOiBVbmhvb2sgYWxsIGV2ZW50IGhhbmRsZXJzCn07CgpUcmFjZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUZpbHRlciA9IGZ1bmN0aW9uKGdyb3VwLCBrZXlzKSB7CgogIGlmICh0eXBlb2Yoa2V5cykgPT09ICJ1bmRlZmluZWQiIHx8IGtleXMgPT09IG51bGwpIHsKICAgIAogICAgdGhpcy5nZC5kYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9yaWdEYXRhKSk7CiAgICAKICB9IGVsc2UgewogIAogICAgdmFyIHRyYWNlcyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB0cmFjZSA9IHRoaXMub3JpZ0RhdGFbaV07CiAgICAgIGlmICghdHJhY2Uua2V5IHx8IHRyYWNlLnNldCAhPT0gZ3JvdXApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKHRyYWNlKTsKICAgICAgdmFyIG1hdGNoZXMgPSBtYXRjaEZ1bmModHJhY2Uua2V5LCBrZXlzKTsKICAgICAgCiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHsKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgLy8gc3Vic2V0QXJyYXlBdHRycyBkb2Vzbid0IG11dGF0ZSB0cmFjZSAoaXQgbWFrZXMgYSBtb2RpZmllZCBjbG9uZSkKICAgICAgICAgIHRyYWNlID0gc3Vic2V0QXJyYXlBdHRycyh0cmFjZSwgbWF0Y2hlcyk7CiAgICAgICAgfQogICAgICAgIHRyYWNlcy5wdXNoKHRyYWNlKTsKICAgICAgfQogICAgfQogIH0KICAKICB0aGlzLmdkLmRhdGEgPSB0cmFjZXM7CiAgUGxvdGx5LnJlZHJhdyh0aGlzLmdkKTsKICAKICAvLyBOT1RFOiB3ZSBwdXJwb3NlbHkgZG8gX25vdF8gcmVzdG9yZSBzZWxlY3Rpb24ocyksIHNpbmNlIG9uIGZpbHRlciwKICAvLyBheGlzIGxpa2VseSB3aWxsIHVwZGF0ZSwgY2hhbmdpbmcgdGhlIHBpeGVsIC0+IGRhdGEgbWFwcGluZywgbGVhZGluZyAKICAvLyB0byBhIGxpa2VseSBtaXNtYXRjaCBpbiB0aGUgYnJ1c2ggb3V0bGluZSBhbmQgaGlnaGxpZ2h0ZWQgbWFya3MKICAKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKICAKICBpZiAoa2V5cyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShrZXlzKSkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtleXMgYXJndW1lbnQ7IG51bGwgb3IgYXJyYXkgZXhwZWN0ZWQiKTsKICB9CiAgCiAgLy8gaWYgc2VsZWN0aW9uIGhhcyBiZWVuIGNsZWFyZWQsIG9yIGlmIHRoaXMgaXMgdHJhbnNpZW50CiAgLy8gc2VsZWN0aW9uLCBkZWxldGUgdGhlICJzZWxlY3Rpb24gdHJhY2VzIgogIHZhciBuTmV3VHJhY2VzID0gdGhpcy5nZC5kYXRhLmxlbmd0aCAtIHRoaXMub3JpZ0RhdGEubGVuZ3RoOwogIGlmIChrZXlzID09PSBudWxsIHx8ICF0aGlzLmhpZ2hsaWdodC5wZXJzaXN0ZW50ICYmIG5OZXdUcmFjZXMgPiAwKSB7CiAgICB2YXIgdHJhY2VzVG9SZW1vdmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSA8IHRoaXMuZ2QuZGF0YS5sZW5ndGg7IGkrKykgewogICAgICB0cmFjZXNUb1JlbW92ZS5wdXNoKGkpOwogICAgfQogICAgUGxvdGx5LmRlbGV0ZVRyYWNlcyh0aGlzLmdkLCB0cmFjZXNUb1JlbW92ZSk7CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSBrZXlzOwogIH0gZWxzZSB7CiAgICAvLyBhZGQgdG8gdGhlIGdyb3VwU2VsZWN0aW9uLCByYXRoZXIgdGhhbiBvdmVyd3JpdGluZyBpdAogICAgLy8gVE9ETzogY2FuIHRoaXMgYmUgcmVtb3ZlZD8KICAgIHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXSA9IHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXSB8fCBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgayA9IGtleXNbaV07CiAgICAgIGlmICh0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0uaW5kZXhPZihrKSA8IDApIHsKICAgICAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0ucHVzaChrKTsKICAgICAgfQogICAgfQogIH0KICAKICBpZiAoa2V5cyA9PT0gbnVsbCkgewogICAgCiAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7Im9wYWNpdHkiOiB0aGlzLm9yaWdPcGFjaXR5fSk7CiAgICAKICB9IGVsc2UgaWYgKGtleXMubGVuZ3RoID49IDEpIHsKICAgIAogICAgLy8gcGxhY2Vob2xkZXIgZm9yIG5ldyAic2VsZWN0aW9uIHRyYWNlcyIKICAgIHZhciB0cmFjZXMgPSBbXTsKICAgIC8vIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIFIvaGlnaGxpZ2h0LlIKICAgIHZhciBzZWxlY3Rpb25Db2xvdXIgPSBjcm9zc3RhbGsuZ3JvdXAoZ3JvdXApLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkgfHwgCiAgICAgIHRoaXMuaGlnaGxpZ2h0LmNvbG9yWzBdOwoKICAgIC8vIHNlbGVjdGlvbiBicnVzaCBhdHRyaWJ1dGVzCiAgICB2YXIgc2VsZWN0QXR0cnMgPSBPYmplY3Qua2V5cyh0aGlzLmhpZ2hsaWdodC5zZWxlY3RlZCk7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIC8vIFRPRE86IHRyeSB1c2luZyBMaWIuZXh0ZW5kRmxhdCgpIGFzIGRvbmUgaW4gIAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgICAgIHZhciB0cmFjZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5nZC5kYXRhW2ldKSk7CiAgICAgIGlmICghdHJhY2Uua2V5IHx8IHRyYWNlLnNldCAhPT0gZ3JvdXApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBHZXQgc29ydGVkIGFycmF5IG9mIG1hdGNoaW5nIGluZGljZXMgaW4gdHJhY2Uua2V5CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIC8vIElmIHRoaXMgaXMgYSAic2ltcGxlIiBrZXksIHRoYXQgbWVhbnMgc2VsZWN0IHRoZSBlbnRpcmUgdHJhY2UKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgLy8gQXBwbHkgc2VsZWN0aW9uIGJydXNoIGF0dHJpYnV0ZXMgKHN1cHBsaWVkIGZyb20gUikKICAgICAgICAvLyBUT0RPOiBpdCB3b3VsZCBiZSBuZWF0IHRvIGhhdmUgYSBkcm9wZG93biB0byBkeW5hbWljYWxseSBzcGVjaWZ5IHRoZXNlCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxlY3RBdHRycy5sZW5ndGg7IGorKykgewogICAgICAgICAgdmFyIGF0dHIgPSBzZWxlY3RBdHRyc1tqXTsKICAgICAgICAgIHRyYWNlW2F0dHJdID0gdGhpcy5oaWdobGlnaHQuc2VsZWN0ZWRbYXR0cl07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGlmIGl0IGlzIGRlZmluZWQsIG92ZXJyaWRlIGNvbG9yIHdpdGggdGhlICJkeW5hbWljIGJydXNoIGNvbG9yIiIKICAgICAgICAvLyBUT0RPOiBEUlkgdGhpcyB1cAogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICAgIAogICAgICAgICAgLy8gYWRvcHQgYW55IHVzZXItZGVmaW5lZCBzdHlsaW5nIGZvciB0aGUgc2VsZWN0aW9uCiAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLmhpZ2hsaWdodC5zZWxlY3RlZC5tYXJrZXIgfHwge307CiAgICAgICAgICB2YXIgYXR0cnMgPSBPYmplY3Qua2V5cyhzZWxlY3RlZCk7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHRyYWNlLm1hcmtlclthdHRyc1tqXV0gPSBzZWxlY3RlZFthdHRyc1tqXV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChkLmxpbmUpIHsKICAgICAgICAgIHRyYWNlLmxpbmUgPSB0cmFjZS5saW5lIHx8IHt9OwogICAgICAgICAgdHJhY2UubGluZS5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UubGluZS5jb2xvciB8fCBkLmxpbmUuY29sb3I7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkb3B0IGFueSB1c2VyLWRlZmluZWQgc3R5bGluZyBmb3IgdGhlIHNlbGVjdGlvbgogICAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5oaWdobGlnaHQuc2VsZWN0ZWQubGluZSB8fCB7fTsKICAgICAgICAgIHZhciBhdHRycyA9IE9iamVjdC5rZXlzKHNlbGVjdGVkKTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgdHJhY2UubGluZVthdHRyc1tqXV0gPSBzZWxlY3RlZFthdHRyc1tqXV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChkLnRleHRmb250KSB7CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udCA9IHRyYWNlLnRleHRmb250IHx8IHt9OwogICAgICAgICAgdHJhY2UudGV4dGZvbnQuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLnRleHRmb250LmNvbG9yIHx8IGQudGV4dGZvbnQuY29sb3I7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkb3B0IGFueSB1c2VyLWRlZmluZWQgc3R5bGluZyBmb3IgdGhlIHNlbGVjdGlvbgogICAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5oaWdobGlnaHQuc2VsZWN0ZWQudGV4dGZvbnQgfHwge307CiAgICAgICAgICB2YXIgYXR0cnMgPSBPYmplY3Qua2V5cyhzZWxlY3RlZCk7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHRyYWNlLnRleHRmb250W2F0dHJzW2pdXSA9IHNlbGVjdGVkW2F0dHJzW2pdXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlcy5wdXNoKHRyYWNlKTsKICAgICAgfQogICAgfQogICAgCiAgICBpZiAodHJhY2VzLmxlbmd0aCA+IDApIHsKICAgICAgCiAgICAgIFBsb3RseS5hZGRUcmFjZXModGhpcy5nZCwgdHJhY2VzKS50aGVuKGZ1bmN0aW9uKGdkKSB7CiAgICAgICAgLy8gaW5jcmVtZW50YWxseSBhZGQgc2VsZWN0aW9uIHRyYWNlcyB0byBmcmFtZXMKICAgICAgICAvLyAodGhpcyBpcyBoZWF2aWx5IGluc3BpcmVkIGJ5IFBsb3RseS5QbG90cy5tb2RpZnlGcmFtZXMoKSAKICAgICAgICAvLyBpbiBzcmMvcGxvdHMvcGxvdHMuanMpCiAgICAgICAgdmFyIF9oYXNoID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7CiAgICAgICAgdmFyIF9mcmFtZXMgPSBnZC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyB8fCBbXTsKICAgICAgICAKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9mcmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIAogICAgICAgICAgLy8gYWRkIHRvIF9mcmFtZXNbaV0udHJhY2VzICppZiogdGhpcyBmcmFtZSByZWZlcmVuY2VzIHNlbGVjdGVkIHRyYWNlKHMpCiAgICAgICAgICB2YXIgbmV3SW5kaWNlcyA9IFtdOwogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0cmFjZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgdmFyIHRyID0gdHJhY2VzW2pdOwogICAgICAgICAgICBpZiAoX2ZyYW1lc1tpXS50cmFjZXMuaW5kZXhPZih0ci5fb3JpZ2luYWxJbmRleCkgPiAtMSkgewogICAgICAgICAgICAgIG5ld0luZGljZXMucHVzaCh0ci5fbmV3SW5kZXgpOwogICAgICAgICAgICAgIF9mcmFtZXNbaV0udHJhY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLi4uCiAgICAgICAgICBpZiAobmV3SW5kaWNlcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIHZhciBjdHIgPSAwOwogICAgICAgICAgdmFyIG5GcmFtZVRyYWNlcyA9IF9mcmFtZXNbaV0uZGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbkZyYW1lVHJhY2VzOyBqKyspIHsKICAgICAgICAgICAgdmFyIGZyYW1lVHJhY2UgPSBfZnJhbWVzW2ldLmRhdGFbal07CiAgICAgICAgICAgIGlmICghZnJhbWVUcmFjZS5rZXkgfHwgZnJhbWVUcmFjZS5zZXQgIT09IGdyb3VwKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmMoZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKGZyYW1lVHJhY2Uua2V5LCBrZXlzKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZSA9IHN1YnNldEFycmF5QXR0cnMoZnJhbWVUcmFjZSwgbWF0Y2hlcyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBkID0gZ2QuX2Z1bGxEYXRhW25ld0luZGljZXNbY3RyXV07CiAgICAgICAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICAgICAgICBmcmFtZVRyYWNlLm1hcmtlciA9IGQubWFya2VyOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC5saW5lKSB7CiAgICAgICAgICAgICAgICBmcmFtZVRyYWNlLmxpbmUgPSBkLmxpbmU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChkLnRleHRmb250KSB7CiAgICAgICAgICAgICAgICBmcmFtZVRyYWNlLnRleHRmb250ID0gZC50ZXh0Zm9udDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY3RyID0gY3RyICsgMTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLmRhdGEucHVzaChmcmFtZVRyYWNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAvLyB1cGRhdGUgZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2gKICAgICAgICAgIF9oYXNoW19mcmFtZXNbaV0ubmFtZV0gPSBfZnJhbWVzW2ldOwogICAgICAgIH0KICAgICAgCiAgICAgIH0pOwogICAgICAKICAgICAgLy8gZGltIHRyYWNlcyB0aGF0IGhhdmUgYSBzZXQgbWF0Y2hpbmcgdGhlIHNldCBvZiBzZWxlY3Rpb24gc2V0cwogICAgICB2YXIgdHJhY2VzVG9EaW0gPSBbXSwKICAgICAgICAgIG9wYWNpdGllcyA9IFtdLAogICAgICAgICAgc2V0cyA9IE9iamVjdC5rZXlzKHRoaXMuZ3JvdXBTZWxlY3Rpb25zKSwKICAgICAgICAgIG4gPSB0aGlzLm9yaWdEYXRhLmxlbmd0aDsKICAgICAgICAgIAogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIHZhciBvcGFjaXR5ID0gdGhpcy5vcmlnT3BhY2l0eVtpXSB8fCAxOwogICAgICAgIC8vIGhhdmUgd2UgYWxyZWFkeSBkaW1tZWQgdGhpcyB0cmFjZT8gT3IgaXMgdGhpcyBldmVuIHdvcnRoIGRvaW5nPwogICAgICAgIGlmIChvcGFjaXR5ICE9PSB0aGlzLmdkLl9mdWxsRGF0YVtpXS5vcGFjaXR5IHx8IHRoaXMuaGlnaGxpZ2h0Lm9wYWNpdHlEaW0gPT09IDEpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAvLyBpcyB0aGlzIHNldCBhbiBlbGVtZW50IG9mIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHM/CiAgICAgICAgdmFyIG1hdGNoZXMgPSBmaW5kTWF0Y2hlcyhzZXRzLCBbdGhpcy5nZC5kYXRhW2ldLnNldF0pOwogICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCkgewogICAgICAgICAgdHJhY2VzVG9EaW0ucHVzaChpKTsKICAgICAgICAgIG9wYWNpdGllcy5wdXNoKG9wYWNpdHkgKiB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGlmICh0cmFjZXNUb0RpbS5sZW5ndGggPiAwKSB7CiAgICAgICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5Ijogb3BhY2l0aWVzfSwgdHJhY2VzVG9EaW0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQo="></script> <script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw=="></script> <script src="data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMS4zIHwgKGMpIDIwMDUsIDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPXt9LGw9IjEuMTEuMyIsbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbS5mbi5pbml0KGEsYil9LG49L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLG89L14tbXMtLyxwPS8tKFtcZGEtel0pL2dpLHE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTttLmZuPW0ucHJvdG90eXBlPXtqcXVlcnk6bCxjb25zdHJ1Y3RvcjptLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpkLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1tLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZWFjaCh0aGlzLGEsYil9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbS5leHRlbmQ9bS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG0uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihtLmlzUGxhaW5PYmplY3QoYyl8fChiPW0uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbS5pc0FycmF5KGEpP2E6W10pOmY9YSYmbS5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1tLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKGwrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW0udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bS50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hbS5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSkrMT49MH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2lmKCFhfHwib2JqZWN0IiE9PW0udHlwZShhKXx8YS5ub2RlVHlwZXx8bS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIWouY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhai5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9aWYoay5vd25MYXN0KWZvcihiIGluIGEpcmV0dXJuIGouY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxqLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aFtpLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZtLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UobywibXMtIikucmVwbGFjZShwLHEpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9MCxmPWEubGVuZ3RoLGc9cihhKTtpZihjKXtpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgZm9yKGUgaW4gYSlpZihkPWIuYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBpZihnKXtmb3IoO2Y+ZTtlKyspaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmNhbGwoYVtlXSxlLGFbZV0pLGQ9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShuLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihyKE9iamVjdChhKSk/bS5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zi5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGcpcmV0dXJuIGcuY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxmPTAsZz1hLmxlbmd0aCxoPXIoYSksaT1bXTtpZihoKWZvcig7Zz5mO2YrKylkPWIoYVtmXSxmLGMpLG51bGwhPWQmJmkucHVzaChkKTtlbHNlIGZvcihmIGluIGEpZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7cmV0dXJuIGUuYXBwbHkoW10saSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9ZiksbS5pc0Z1bmN0aW9uKGEpPyhjPWQuY2FsbChhcmd1bWVudHMsMiksZT1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0sZS5ndWlkPWEuZ3VpZD1hLmd1aWR8fG0uZ3VpZCsrLGUpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omt9KSxtLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtoWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHIoYSl7dmFyIGI9Imxlbmd0aCJpbiBhJiZhLmxlbmd0aCxjPW0udHlwZShhKTtyZXR1cm4iZnVuY3Rpb24iPT09Y3x8bS5pc1dpbmRvdyhhKT8hMToxPT09YS5ub2RlVHlwZSYmYj8hMDoiYXJyYXkiPT09Y3x8MD09PWJ8fCJudW1iZXIiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYX12YXIgcz1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1PSJzaXp6bGUiKzEqbmV3IERhdGUsdj1hLmRvY3VtZW50LHc9MCx4PTAseT1oYSgpLHo9aGEoKSxBPWhhKCksQj1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09YiYmKGw9ITApLDB9LEM9MTw8MzEsRD17fS5oYXNPd25Qcm9wZXJ0eSxFPVtdLEY9RS5wb3AsRz1FLnB1c2gsSD1FLnB1c2gsST1FLnNsaWNlLEo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspaWYoYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9LEs9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixMPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixNPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTj1NLnJlcGxhY2UoInciLCJ3IyIpLE89IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitOKyIpKXwpIitMKyIqXFxdIixQPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTysiKSopfC4qKVxcKXwpIixRPW5ldyBSZWdFeHAoTCsiKyIsImciKSxSPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUz1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxVPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChQKSxXPW5ldyBSZWdFeHAoIl4iK04rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTS5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrTyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1ApLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTCsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTCsiKig/OihbKy1dfCkiK0wrIiooXFxkKyl8KSkiK0wrIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK0srIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitMKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK0wrIiooKD86LVxcZCk/XFxkKikiK0wrIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9eaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYT0vWyt+XS8sYmE9Lyd8XFwvZyxjYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksZGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGVhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChmYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZ2EoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3LHg7aWYoKGI/Yi5vd25lckRvY3VtZW50fHxiOnYpIT09biYmbShiKSxiPWJ8fG4sZD1kfHxbXSxrPWIubm9kZVR5cGUsInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PWsmJjkhPT1rJiYxMSE9PWspcmV0dXJuIGQ7aWYoIWUmJnApe2lmKDExIT09ayYmKGY9Xy5leGVjKGEpKSlpZihqPWZbMV0pe2lmKDk9PT1rKXtpZihoPWIuZ2V0RWxlbWVudEJ5SWQoaiksIWh8fCFoLnBhcmVudE5vZGUpcmV0dXJuIGQ7aWYoaC5pZD09PWopcmV0dXJuIGQucHVzaChoKSxkfWVsc2UgaWYoYi5vd25lckRvY3VtZW50JiYoaD1iLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaikpJiZ0KGIsaCkmJmguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNle2lmKGZbMl0pcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSxkO2lmKChqPWZbM10pJiZjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11LHc9Yix4PTEhPT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIucmVwbGFjZShiYSwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lkPSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3JhKG9bbF0pO3c9YWEudGVzdChhKSYmcGEoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBILmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgpKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGhhKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGphKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24gbGEoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEMpLSh+YS5zb3VyY2VJbmRleHx8Qyk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBvYShhKXtyZXR1cm4gaWEoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaWEoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBwYShhKXtyZXR1cm4gYSYmInVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhfWM9Z2Euc3VwcG9ydD17fSxmPWdhLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWdhLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGUsZz1hP2Eub3duZXJEb2N1bWVudHx8YTp2O3JldHVybiBnIT09biYmOT09PWcubm9kZVR5cGUmJmcuZG9jdW1lbnRFbGVtZW50PyhuPWcsbz1nLmRvY3VtZW50RWxlbWVudCxlPWcuZGVmYXVsdFZpZXcsZSYmZSE9PWUudG9wJiYoZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixlYSwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hFdmVudCgib251bmxvYWQiLGVhKSkscD0hZihnKSxjLmF0dHJpYnV0ZXM9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1qYShmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChnLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT0kLnRlc3QoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxjLmdldEJ5SWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIG8uYXBwZW5kQ2hpbGQoYSkuaWQ9dSwhZy5nZXRFbGVtZW50c0J5TmFtZXx8IWcuZ2V0RWxlbWVudHNCeU5hbWUodSkubGVuZ3RofSksYy5nZXRCeUlkPyhkLmZpbmQuSUQ9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQmJnApe3ZhciBjPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGMmJmMucGFyZW50Tm9kZT9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuIHA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRlc3QoZy5xdWVyeVNlbGVjdG9yQWxsKSkmJihqYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXGZdJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK0wrIiooPzonJ3xcIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK0wrIiooPzp2YWx1ZXwiK0srIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49Iit1KyItXSIpLmxlbmd0aHx8cS5wdXNoKCJ+PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHEucHVzaCgiOmNoZWNrZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIit1KyIrKiIpLmxlbmd0aHx8cS5wdXNoKCIuIy4rWyt+XSIpfSksamEoZnVuY3Rpb24oYSl7dmFyIGI9Zy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2Iuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksYS5hcHBlbmRDaGlsZChiKS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmcS5wdXNoKCJuYW1lIitMKyIqWypeJHwhfl0/PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fHEucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxxLnB1c2goIiwuKjoiKX0pKSwoYy5tYXRjaGVzU2VsZWN0b3I9JC50ZXN0KHM9by5tYXRjaGVzfHxvLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8by5tb3pNYXRjaGVzU2VsZWN0b3J8fG8ub01hdGNoZXNTZWxlY3Rvcnx8by5tc01hdGNoZXNTZWxlY3RvcikpJiZqYShmdW5jdGlvbihhKXtjLmRpc2Nvbm5lY3RlZE1hdGNoPXMuY2FsbChhLCJkaXYiKSxzLmNhbGwoYSwiW3MhPScnXTp4Iiksci5wdXNoKCIhPSIsUCl9KSxxPXEubGVuZ3RoJiZuZXcgUmVnRXhwKHEuam9pbigifCIpKSxyPXIubGVuZ3RoJiZuZXcgUmVnRXhwKHIuam9pbigifCIpKSxiPSQudGVzdChvLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSx0PWJ8fCQudGVzdChvLmNvbnRhaW5zKT9mdW5jdGlvbihhLGIpe3ZhciBjPTk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7cmV0dXJuIGE9PT1kfHwhKCFkfHwxIT09ZC5ub2RlVHlwZXx8IShjLmNvbnRhaW5zP2MuY29udGFpbnMoZCk6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSkpfTpmdW5jdGlvbihhLGIpe2lmKGIpd2hpbGUoYj1iLnBhcmVudE5vZGUpaWYoYj09PWEpcmV0dXJuITA7cmV0dXJuITF9LEI9Yj9mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGQ9IWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247cmV0dXJuIGQ/ZDooZD0oYS5vd25lckRvY3VtZW50fHxhKT09PShiLm93bmVyRG9jdW1lbnR8fGIpP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYik6MSwxJmR8fCFjLnNvcnREZXRhY2hlZCYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKT09PWQ/YT09PWd8fGEub3duZXJEb2N1bWVudD09PXYmJnQodixhKT8tMTpiPT09Z3x8Yi5vd25lckRvY3VtZW50PT09diYmdCh2LGIpPzE6az9KKGssYSktSihrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGU9YS5wYXJlbnROb2RlLGY9Yi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFlfHwhZilyZXR1cm4gYT09PWc/LTE6Yj09PWc/MTplPy0xOmY/MTprP0ooayxhKS1KKGssYik6MDtpZihlPT09ZilyZXR1cm4gbGEoYSxiKTtjPWE7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO2M9Yjt3aGlsZShjPWMucGFyZW50Tm9kZSlpLnVuc2hpZnQoYyk7d2hpbGUoaFtkXT09PWlbZF0pZCsrO3JldHVybiBkP2xhKGhbZF0saVtkXSk6aFtkXT09PXY/LTE6aVtkXT09PXY/MTowfSxnKTpufSxnYS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdhKGEsbnVsbCxudWxsLGIpfSxnYS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZigoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSksYj1iLnJlcGxhY2UoVSwiPSckMSddIiksISghYy5tYXRjaGVzU2VsZWN0b3J8fCFwfHxyJiZyLnRlc3QoYil8fHEmJnEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGdhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGdhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZ2EuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGdhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZ2EudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWdhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1nYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzppYSxtYXRjaDpYLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoY2EsZGEpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGNhLGRhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8Z2EuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZ2EuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFguQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVi50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9Z2EuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShRLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoO2lmKHEpe2lmKGYpe3doaWxlKHApe2w9Yjt3aGlsZShsPWxbcF0paWYoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKXJldHVybiExO289cD0ib25seSI9PT1hJiYhbyYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmcyl7az1xW3VdfHwocVt1XT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLG09alswXT09PXcmJmpbMl0sbD1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobD0rK24mJmwmJmxbcF18fChtPW49MCl8fG8ucG9wKCkpaWYoMT09PWwubm9kZVR5cGUmJisrbSYmbD09PWIpe2tbYV09W3csbixtXTticmVha319ZWxzZSBpZihzJiYoaj0oYlt1XXx8KGJbdV09e30pKVthXSkmJmpbMF09PT13KW09alsxXTtlbHNlIHdoaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKChoP2wubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PWwubm9kZVR5cGUpJiYrK20mJihzJiYoKGxbdV18fChsW3VdPXt9KSlbYV09W3csbV0pLGw9PT1iKSlicmVhaztyZXR1cm4gbS09ZSxtPT09ZHx8bSVkPT09MCYmbS9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIithKTtyZXR1cm4gZVt1XT9lKGIpOmUubGVuZ3RoPjE/KGM9W2EsYSwiIixiXSxkLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT9pYShmdW5jdGlvbihhLGMpe3ZhciBkLGY9ZShhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWQ9SihhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDppYShmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aWEoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksYlswXT1udWxsLCFjLnBvcCgpfX0pLGhhczppYShmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGdhKGEsYikubGVuZ3RoPjB9fSksY29udGFpbnM6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKGNhLGRhKSxmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGUoYikpLmluZGV4T2YoYSk+LTF9fSksbGFuZzppYShmdW5jdGlvbihhKXtyZXR1cm4gVy50ZXN0KGF8fCIiKXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrYSksYT1hLnJlcGxhY2UoY2EsZGEpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7dmFyIGM7ZG8gaWYoYz1wP2IubGFuZzpiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8Yi5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYSsiLSIpO3doaWxlKChiPWIucGFyZW50Tm9kZSkmJjE9PT1iLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS5sb2NhdGlvbiYmYS5sb2NhdGlvbi5oYXNoO3JldHVybiBjJiZjLnNsaWNlKDEpPT09Yi5pZH0scm9vdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW99LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09bi5hY3RpdmVFbGVtZW50JiYoIW4uaGFzRm9jdXN8fG4uaGFzRm9jdXMoKSkmJiEhKGEudHlwZXx8YS5ocmVmfHx+YS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiEhYS5jaGVja2VkfHwib3B0aW9uIj09PWImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihhKXtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpaWYoYS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWQucHNldWRvcy5lbXB0eShhKX0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBaLnRlc3QoYS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBZLnRlc3QoYS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiJidXR0b24iPT09YS50eXBlfHwiYnV0dG9uIj09PWJ9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuImlucHV0Ij09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PWIudG9Mb3dlckNhc2UoKSl9LGZpcnN0Om9hKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpvYShmdW5jdGlvbihhLGIpe3JldHVybltiLTFdfSksZXE6b2EoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswPmM/YytiOmNdfSksZXZlbjpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLG9kZDpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLGx0Om9hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOy0tZD49MDspYS5wdXNoKGQpO3JldHVybiBhfSksZ3Q6b2EoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7KytkPGI7KWEucHVzaChkKTtyZXR1cm4gYX0pfX0sZC5wc2V1ZG9zLm50aD1kLnBzZXVkb3MuZXE7Zm9yKGIgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pZC5wc2V1ZG9zW2JdPW1hKGIpO2ZvcihiIGlue3N1Ym1pdDohMCxyZXNldDohMH0pZC5wc2V1ZG9zW2JdPW5hKGIpO2Z1bmN0aW9uIHFhKCl7fXFhLnByb3RvdHlwZT1kLmZpbHRlcnM9ZC5wc2V1ZG9zLGQuc2V0RmlsdGVycz1uZXcgcWEsZz1nYS50b2tlbml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGgsaSxqLGs9elthKyIgIl07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1kLnByZUZpbHRlcjt3aGlsZShoKXsoIWN8fChlPVMuZXhlYyhoKSkpJiYoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1ULmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFIsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1YW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/Z2EuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiByYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHNhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGo9W3csZl07aWYoZyl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZSkmJmEoYixjLGcpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXtpZihpPWJbdV18fChiW3VdPXt9KSwoaD1pW2RdKSYmaFswXT09PXcmJmhbMV09PT1mKXJldHVybiBqWzJdPWhbMl07aWYoaVtkXT1qLGpbMl09YShiLGMsZykpcmV0dXJuITB9fX1mdW5jdGlvbiB0YShhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiB1YShhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtlPmQ7ZCsrKWdhKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB2YShhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtpPmg7aCsrKShmPWFbaF0pJiYoIWN8fGMoZixkLGUpKSYmKGcucHVzaChmKSxqJiZiLnB1c2goaCkpO3JldHVybiBnfWZ1bmN0aW9uIHdhKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbdV0mJihkPXdhKGQpKSxlJiYhZVt1XSYmKGU9d2EoZSxmKSksaWEoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8dWEoYnx8IioiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6dmEocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXZhKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9KKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj12YShyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SC5hcHBseShnLHIpfSl9ZnVuY3Rpb24geGEoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1zYShmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9c2EoZnVuY3Rpb24oYSl7cmV0dXJuIEooYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3ZhciBlPSFnJiYoZHx8YyE9PWopfHwoKGI9Yykubm9kZVR5cGU/ayhhLGMsZCk6bChhLGMsZCkpO3JldHVybiBiPW51bGwsZX1dO2Y+aTtpKyspaWYoYz1kLnJlbGF0aXZlW2FbaV0udHlwZV0pbT1bc2EodGEobSksYyldO2Vsc2V7aWYoYz1kLmZpbHRlclthW2ldLnR5cGVdLmFwcGx5KG51bGwsYVtpXS5tYXRjaGVzKSxjW3VdKXtmb3IoZT0rK2k7Zj5lO2UrKylpZihkLnJlbGF0aXZlW2FbZV0udHlwZV0pYnJlYWs7cmV0dXJuIHdhKGk+MSYmdGEobSksaT4xJiZyYShhLnNsaWNlKDAsaS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWFbaS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFIsIiQxIiksYyxlPmkmJnhhKGEuc2xpY2UoaSxlKSksZj5lJiZ4YShhPWEuc2xpY2UoZSkpLGY+ZSYmcmEoYSkpfW0ucHVzaChjKX1yZXR1cm4gdGEobSl9ZnVuY3Rpb24geWEoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxoLGksayl7dmFyIGwsbSxvLHA9MCxxPSIwIixyPWYmJltdLHM9W10sdD1qLHU9Znx8ZSYmZC5maW5kLlRBRygiKiIsayksdj13Kz1udWxsPT10PzE6TWF0aC5yYW5kb20oKXx8LjEseD11Lmxlbmd0aDtmb3IoayYmKGo9ZyE9PW4mJmcpO3EhPT14JiZudWxsIT0obD11W3FdKTtxKyspe2lmKGUmJmwpe209MDt3aGlsZShvPWFbbSsrXSlpZihvKGwsZyxoKSl7aS5wdXNoKGwpO2JyZWFrfWsmJih3PXYpfWMmJigobD0hbyYmbCkmJnAtLSxmJiZyLnB1c2gobCkpfWlmKHArPXEsYyYmcSE9PXApe209MDt3aGlsZShvPWJbbSsrXSlvKHIscyxnLGgpO2lmKGYpe2lmKHA+MCl3aGlsZShxLS0pcltxXXx8c1txXXx8KHNbcV09Ri5jYWxsKGkpKTtzPXZhKHMpfUguYXBwbHkoaSxzKSxrJiYhZiYmcy5sZW5ndGg+MCYmcCtiLmxlbmd0aD4xJiZnYS51bmlxdWVTb3J0KGkpfXJldHVybiBrJiYodz12LGo9dCkscn07cmV0dXJuIGM/aWEoZik6Zn1yZXR1cm4gaD1nYS5jb21waWxlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPVtdLGY9QVthKyIgIl07aWYoIWYpe2J8fChiPWcoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9eGEoYltjXSksZlt1XT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9QShhLHlhKGUsZCkpLGYuc2VsZWN0b3I9YX1yZXR1cm4gZn0saT1nYS5zZWxlY3Q9ZnVuY3Rpb24oYSxiLGUsZil7dmFyIGksaixrLGwsbSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhLG89IWYmJmcoYT1uLnNlbGVjdG9yfHxhKTtpZihlPWV8fFtdLDE9PT1vLmxlbmd0aCl7aWYoaj1vWzBdPW9bMF0uc2xpY2UoMCksai5sZW5ndGg+MiYmIklEIj09PShrPWpbMF0pLnR5cGUmJmMuZ2V0QnlJZCYmOT09PWIubm9kZVR5cGUmJnAmJmQucmVsYXRpdmVbalsxXS50eXBlXSl7aWYoYj0oZC5maW5kLklEKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNhLGRhKSxiKXx8W10pWzBdLCFiKXJldHVybiBlO24mJihiPWIucGFyZW50Tm9kZSksYT1hLnNsaWNlKGouc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWk9WC5uZWVkc0NvbnRleHQudGVzdChhKT8wOmoubGVuZ3RoO3doaWxlKGktLSl7aWYoaz1qW2ldLGQucmVsYXRpdmVbbD1rLnR5cGVdKWJyZWFrO2lmKChtPWQuZmluZFtsXSkmJihmPW0oay5tYXRjaGVzWzBdLnJlcGxhY2UoY2EsZGEpLGFhLnRlc3QoalswXS50eXBlKSYmcGEoYi5wYXJlbnROb2RlKXx8YikpKXtpZihqLnNwbGljZShpLDEpLGE9Zi5sZW5ndGgmJnJhKGopLCFhKXJldHVybiBILmFwcGx5KGUsZiksZTticmVha319fXJldHVybihufHxoKGEsbykpKGYsYiwhcCxlLGFhLnRlc3QoYSkmJnBhKGIucGFyZW50Tm9kZSl8fGIpLGV9LGMuc29ydFN0YWJsZT11LnNwbGl0KCIiKS5zb3J0KEIpLmpvaW4oIiIpPT09dSxjLmRldGVjdER1cGxpY2F0ZXM9ISFsLG0oKSxjLnNvcnREZXRhY2hlZD1qYShmdW5jdGlvbihhKXtyZXR1cm4gMSZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4uY3JlYXRlRWxlbWVudCgiZGl2IikpfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8a2EoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz92b2lkIDA6YS5nZXRBdHRyaWJ1dGUoYiwidHlwZSI9PT1iLnRvTG93ZXJDYXNlKCk/MToyKX0pLGMuYXR0cmlidXRlcyYmamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8aW5wdXQvPiIsYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8a2EoInZhbHVlIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGN8fCJpbnB1dCIhPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dm9pZCAwOmEuZGVmYXVsdFZhbHVlfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWEuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGthKEssZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDphW2JdPT09ITA/Yi50b0xvd2VyQ2FzZSgpOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmQuc3BlY2lmaWVkP2QudmFsdWU6bnVsbH0pLGdhfShhKTttLmZpbmQ9cyxtLmV4cHI9cy5zZWxlY3RvcnMsbS5leHByWyI6Il09bS5leHByLnBzZXVkb3MsbS51bmlxdWU9cy51bmlxdWVTb3J0LG0udGV4dD1zLmdldFRleHQsbS5pc1hNTERvYz1zLmlzWE1MLG0uY29udGFpbnM9cy5jb250YWluczt2YXIgdD1tLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHU9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyx2PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24gdyhhLGIsYyl7aWYobS5pc0Z1bmN0aW9uKGIpKXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih2LnRlc3QoYikpcmV0dXJuIG0uZmlsdGVyKGIsYSxjKTtiPW0uZmlsdGVyKGIsYSl9cmV0dXJuIG0uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBtLmluQXJyYXkoYSxiKT49MCE9PWN9KX1tLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9tLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm0uZmluZC5tYXRjaGVzKGEsbS5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxtLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ9dGhpcyxlPWQubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobShhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2U+YjtiKyspaWYobS5jb250YWlucyhkW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7ZT5iO2IrKyltLmZpbmQoYSxkW2JdLGMpO3JldHVybiBjPXRoaXMucHVzaFN0YWNrKGU+MT9tLnVuaXF1ZShjKTpjKSxjLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyh0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhdyh0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdC50ZXN0KGEpP20oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgeCx5PWEuZG9jdW1lbnQsej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEE9bS5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YS5jaGFyQXQoMCkmJiI+Ij09PWEuY2hhckF0KGEubGVuZ3RoLTEpJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOnouZXhlYyhhKSwhY3x8IWNbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHx4KS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihjWzFdKXtpZihiPWIgaW5zdGFuY2VvZiBtP2JbMF06YixtLm1lcmdlKHRoaXMsbS5wYXJzZUhUTUwoY1sxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8Yjp5LCEwKSksdS50ZXN0KGNbMV0pJiZtLmlzUGxhaW5PYmplY3QoYikpZm9yKGMgaW4gYiltLmlzRnVuY3Rpb24odGhpc1tjXSk/dGhpc1tjXShiW2NdKTp0aGlzLmF0dHIoYyxiW2NdKTtyZXR1cm4gdGhpc31pZihkPXkuZ2V0RWxlbWVudEJ5SWQoY1syXSksZCYmZC5wYXJlbnROb2RlKXtpZihkLmlkIT09Y1syXSlyZXR1cm4geC5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1kfXJldHVybiB0aGlzLmNvbnRleHQ9eSx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0uaXNGdW5jdGlvbihhKT8idW5kZWZpbmVkIiE9dHlwZW9mIHgucmVhZHk/eC5yZWFkeShhKTphKG0pOih2b2lkIDAhPT1hLnNlbGVjdG9yJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpLG0ubWFrZUFycmF5KGEsdGhpcykpfTtBLnByb3RvdHlwZT1tLmZuLHg9bSh5KTt2YXIgQj0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxDPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O20uZXh0ZW5kKHtkaXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9YVtiXTt3aGlsZShlJiY5IT09ZS5ub2RlVHlwZSYmKHZvaWQgMD09PWN8fDEhPT1lLm5vZGVUeXBlfHwhbShlKS5pcyhjKSkpMT09PWUubm9kZVR5cGUmJmQucHVzaChlKSxlPWVbYl07cmV0dXJuIGR9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YTthPWEubmV4dFNpYmxpbmcpMT09PWEubm9kZVR5cGUmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSksbS5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYixjPW0oYSx0aGlzKSxkPWMubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZD5iO2IrKylpZihtLmNvbnRhaW5zKHRoaXMsY1tiXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dC50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bShhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbS5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP20udW5pcXVlKGYpOmYpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/bS5pbkFycmF5KHRoaXNbMF0sbShhKSk6bS5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhtLnVuaXF1ZShtLm1lcmdlKHRoaXMuZ2V0KCksbShhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBEKGEsYil7ZG8gYT1hW2JdO3doaWxlKGEmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1tLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRChhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIG0uc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50Om0ubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPW0ubWFwKHRoaXMsYixjKTtyZXR1cm4iVW50aWwiIT09YS5zbGljZSgtNSkmJihkPWMpLGQmJiJzdHJpbmciPT10eXBlb2YgZCYmKGU9bS5maWx0ZXIoZCxlKSksdGhpcy5sZW5ndGg+MSYmKENbYV18fChlPW0udW5pcXVlKGUpKSxCLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKSksdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIEU9L1xTKy9nLEY9e307ZnVuY3Rpb24gRyhhKXt2YXIgYj1GW2FdPXt9O3JldHVybiBtLmVhY2goYS5tYXRjaChFKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1tLkNhbGxiYWNrcz1mdW5jdGlvbihhKXthPSJzdHJpbmciPT10eXBlb2YgYT9GW2FdfHxHKGEpOm0uZXh0ZW5kKHt9LGEpO3ZhciBiLGMsZCxlLGYsZyxoPVtdLGk9IWEub25jZSYmW10saj1mdW5jdGlvbihsKXtmb3IoYz1hLm1lbW9yeSYmbCxkPSEwLGY9Z3x8MCxnPTAsZT1oLmxlbmd0aCxiPSEwO2gmJmU+ZjtmKyspaWYoaFtmXS5hcHBseShsWzBdLGxbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2Upe2M9ITE7YnJlYWt9Yj0hMSxoJiYoaT9pLmxlbmd0aCYmaihpLnNoaWZ0KCkpOmM/aD1bXTprLmRpc2FibGUoKSl9LGs9e2FkZDpmdW5jdGlvbigpe2lmKGgpe3ZhciBkPWgubGVuZ3RoOyFmdW5jdGlvbiBmKGIpe20uZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9bS50eXBlKGMpOyJmdW5jdGlvbiI9PT1kP2EudW5pcXVlJiZrLmhhcyhjKXx8aC5wdXNoKGMpOmMmJmMubGVuZ3RoJiYic3RyaW5nIiE9PWQmJmYoYyl9KX0oYXJndW1lbnRzKSxiP2U9aC5sZW5ndGg6YyYmKGc9ZCxqKGMpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGgmJm0uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oYSxjKXt2YXIgZDt3aGlsZSgoZD1tLmluQXJyYXkoYyxoLGQpKT4tMSloLnNwbGljZShkLDEpLGImJihlPj1kJiZlLS0sZj49ZCYmZi0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihhKXtyZXR1cm4gYT9tLmluQXJyYXkoYSxoKT4tMTohKCFofHwhaC5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBoPVtdLGU9MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGg9aT1jPXZvaWQgMCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFofSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGk9dm9pZCAwLGN8fGsuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiFpfSxmaXJlV2l0aDpmdW5jdGlvbihhLGMpe3JldHVybiFofHxkJiYhaXx8KGM9Y3x8W10sYz1bYSxjLnNsaWNlP2Muc2xpY2UoKTpjXSxiP2kucHVzaChjKTpqKGMpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGsuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFkfX07cmV0dXJuIGt9LG0uZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihhKXt2YXIgYj1bWyJyZXNvbHZlIiwiZG9uZSIsbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixtLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIixtLkNhbGxiYWNrcygibWVtb3J5IildXSxjPSJwZW5kaW5nIixkPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBjfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHM7cmV0dXJuIG0uRGVmZXJyZWQoZnVuY3Rpb24oYyl7bS5lYWNoKGIsZnVuY3Rpb24oYixmKXt2YXIgZz1tLmlzRnVuY3Rpb24oYVtiXSkmJmFbYl07ZVtmWzFdXShmdW5jdGlvbigpe3ZhciBhPWcmJmcuYXBwbHkodGhpcyxhcmd1bWVudHMpO2EmJm0uaXNGdW5jdGlvbihhLnByb21pc2UpP2EucHJvbWlzZSgpLmRvbmUoYy5yZXNvbHZlKS5mYWlsKGMucmVqZWN0KS5wcm9ncmVzcyhjLm5vdGlmeSk6Y1tmWzBdKyJXaXRoIl0odGhpcz09PWQ/Yy5wcm9taXNlKCk6dGhpcyxnP1thXTphcmd1bWVudHMpfSl9KSxhPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/bS5leHRlbmQoYSxkKTpkfX0sZT17fTtyZXR1cm4gZC5waXBlPWQudGhlbixtLmVhY2goYixmdW5jdGlvbihhLGYpe3ZhciBnPWZbMl0saD1mWzNdO2RbZlsxXV09Zy5hZGQsaCYmZy5hZGQoZnVuY3Rpb24oKXtjPWh9LGJbMV5hXVsyXS5kaXNhYmxlLGJbMl1bMl0ubG9jayksZVtmWzBdXT1mdW5jdGlvbigpe3JldHVybiBlW2ZbMF0rIldpdGgiXSh0aGlzPT09ZT9kOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxlW2ZbMF0rIldpdGgiXT1nLmZpcmVXaXRofSksZC5wcm9taXNlKGUpLGEmJmEuY2FsbChlLGUpLGV9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPWQuY2FsbChhcmd1bWVudHMpLGU9Yy5sZW5ndGgsZj0xIT09ZXx8YSYmbS5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/ZTowLGc9MT09PWY/YTptLkRlZmVycmVkKCksaD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGUpe2JbYV09dGhpcyxjW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTplLGM9PT1pP2cubm90aWZ5V2l0aChiLGMpOi0tZnx8Zy5yZXNvbHZlV2l0aChiLGMpfX0saSxqLGs7aWYoZT4xKWZvcihpPW5ldyBBcnJheShlKSxqPW5ldyBBcnJheShlKSxrPW5ldyBBcnJheShlKTtlPmI7YisrKWNbYl0mJm0uaXNGdW5jdGlvbihjW2JdLnByb21pc2UpP2NbYl0ucHJvbWlzZSgpLmRvbmUoaChiLGssYykpLmZhaWwoZy5yZWplY3QpLnByb2dyZXNzKGgoYixqLGkpKTotLWY7cmV0dXJuIGZ8fGcucmVzb2x2ZVdpdGgoayxjKSxnLnByb21pc2UoKX19KTt2YXIgSDttLmZuLnJlYWR5PWZ1bmN0aW9uKGEpe3JldHVybiBtLnJlYWR5LnByb21pc2UoKS5kb25lKGEpLHRoaXN9LG0uZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP20ucmVhZHlXYWl0Kys6bS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMD8hLS1tLnJlYWR5V2FpdDohbS5pc1JlYWR5KXtpZigheS5ib2R5KXJldHVybiBzZXRUaW1lb3V0KG0ucmVhZHkpO20uaXNSZWFkeT0hMCxhIT09ITAmJi0tbS5yZWFkeVdhaXQ+MHx8KEgucmVzb2x2ZVdpdGgoeSxbbV0pLG0uZm4udHJpZ2dlckhhbmRsZXImJihtKHkpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG0oeSkub2ZmKCJyZWFkeSIpKSl9fX0pO2Z1bmN0aW9uIEkoKXt5LmFkZEV2ZW50TGlzdGVuZXI/KHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSiwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixKLCExKSk6KHkuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSiksYS5kZXRhY2hFdmVudCgib25sb2FkIixKKSl9ZnVuY3Rpb24gSigpeyh5LmFkZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWV2ZW50LnR5cGV8fCJjb21wbGV0ZSI9PT15LnJlYWR5U3RhdGUpJiYoSSgpLG0ucmVhZHkoKSl9bS5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKGIpe2lmKCFIKWlmKEg9bS5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT15LnJlYWR5U3RhdGUpc2V0VGltZW91dChtLnJlYWR5KTtlbHNlIGlmKHkuYWRkRXZlbnRMaXN0ZW5lcil5LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEosITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsSiwhMSk7ZWxzZXt5LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEopLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsSik7dmFyIGM9ITE7dHJ5e2M9bnVsbD09YS5mcmFtZUVsZW1lbnQmJnkuZG9jdW1lbnRFbGVtZW50fWNhdGNoKGQpe31jJiZjLmRvU2Nyb2xsJiYhZnVuY3Rpb24gZSgpe2lmKCFtLmlzUmVhZHkpe3RyeXtjLmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7cmV0dXJuIHNldFRpbWVvdXQoZSw1MCl9SSgpLG0ucmVhZHkoKX19KCl9cmV0dXJuIEgucHJvbWlzZShiKX07dmFyIEs9InVuZGVmaW5lZCIsTDtmb3IoTCBpbiBtKGspKWJyZWFrO2sub3duTGFzdD0iMCIhPT1MLGsuaW5saW5lQmxvY2tOZWVkc0xheW91dD0hMSxtKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQ7Yz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSx0eXBlb2YgYi5zdHlsZS56b29tIT09SyYmKGIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWE9Mz09PWIub2Zmc2V0V2lkdGgsYSYmKGMuc3R5bGUuem9vbT0xKSksYy5yZW1vdmVDaGlsZChkKSl9KSxmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYobnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2goYil7ay5kZWxldGVFeHBhbmRvPSExfX1hPW51bGx9KCksbS5hY2NlcHREYXRhPWZ1bmN0aW9uKGEpe3ZhciBiPW0ubm9EYXRhWyhhLm5vZGVOYW1lKyIgIikudG9Mb3dlckNhc2UoKV0sYz0rYS5ub2RlVHlwZXx8MTtyZXR1cm4gMSE9PWMmJjkhPT1jPyExOiFifHxiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifTt2YXIgTT0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLE49LyhbQS1aXSkvZztmdW5jdGlvbiBPKGEsYixjKXtpZih2b2lkIDA9PT1jJiYxPT09YS5ub2RlVHlwZSl7dmFyIGQ9ImRhdGEtIitiLnJlcGxhY2UoTiwiLSQxIikudG9Mb3dlckNhc2UoKTtpZihjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmciPT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToibnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk0udGVzdChjKT9tLnBhcnNlSlNPTihjKTpjfWNhdGNoKGUpe31tLmRhdGEoYSxiLGMpfWVsc2UgYz12b2lkIDB9cmV0dXJuIGN9ZnVuY3Rpb24gUChhKXt2YXIgYjtmb3IoYiBpbiBhKWlmKCgiZGF0YSIhPT1ifHwhbS5pc0VtcHR5T2JqZWN0KGFbYl0pKSYmInRvSlNPTiIhPT1iKXJldHVybiExOwoKcmV0dXJuITB9ZnVuY3Rpb24gUShhLGIsZCxlKXtpZihtLmFjY2VwdERhdGEoYSkpe3ZhciBmLGcsaD1tLmV4cGFuZG8saT1hLm5vZGVUeXBlLGo9aT9tLmNhY2hlOmEsaz1pP2FbaF06YVtoXSYmaDtpZihrJiZqW2tdJiYoZXx8altrXS5kYXRhKXx8dm9pZCAwIT09ZHx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBrfHwoaz1pP2FbaF09Yy5wb3AoKXx8bS5ndWlkKys6aCksaltrXXx8KGpba109aT97fTp7dG9KU09OOm0ubm9vcH0pLCgib2JqZWN0Ij09dHlwZW9mIGJ8fCJmdW5jdGlvbiI9PXR5cGVvZiBiKSYmKGU/altrXT1tLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1tLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbS5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbS5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFIoYSxiLGMpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxmPWEubm9kZVR5cGUsZz1mP20uY2FjaGU6YSxoPWY/YVttLmV4cGFuZG9dOm0uZXhwYW5kbztpZihnW2hdKXtpZihiJiYoZD1jP2dbaF06Z1toXS5kYXRhKSl7bS5pc0FycmF5KGIpP2I9Yi5jb25jYXQobS5tYXAoYixtLmNhbWVsQ2FzZSkpOmIgaW4gZD9iPVtiXTooYj1tLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5zcGxpdCgiICIpKSxlPWIubGVuZ3RoO3doaWxlKGUtLSlkZWxldGUgZFtiW2VdXTtpZihjPyFQKGQpOiFtLmlzRW1wdHlPYmplY3QoZCkpcmV0dXJufShjfHwoZGVsZXRlIGdbaF0uZGF0YSxQKGdbaF0pKSkmJihmP20uY2xlYW5EYXRhKFthXSwhMCk6ay5kZWxldGVFeHBhbmRvfHxnIT1nLndpbmRvdz9kZWxldGUgZ1toXTpnW2hdPW51bGwpfX19bS5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP20uY2FjaGVbYVttLmV4cGFuZG9dXTphW20uZXhwYW5kb10sISFhJiYhUChhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFIoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBRKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUihhLGIsITApfX0pLG0uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bS5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbS5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW0uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLE8oZixkLGVbZF0pKSk7bS5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhLGIpfSk6Zj9PKGYsYSxtLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG0uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1tLl9kYXRhKGEsYiksYyYmKCFkfHxtLmlzQXJyYXkoYyk/ZD1tLl9kYXRhKGEsYixtLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW0ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bS5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXttLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbS5fZGF0YShhLGMpfHxtLl9kYXRhKGEsYyx7ZW1wdHk6bS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bS5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbS5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxtLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bS5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1tLnF1ZXVlKHRoaXMsYSxiKTttLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm0uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1tLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW0uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSk7dmFyIFM9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PW0uY3NzKGEsImRpc3BsYXkiKXx8IW0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfSxWPW0uYWNjZXNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1tLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYyltLmFjY2VzcyhhLGIsaCxjW2hdLCEwLGYsZyl9ZWxzZSBpZih2b2lkIDAhPT1kJiYoZT0hMCxtLmlzRnVuY3Rpb24oZCl8fChnPSEwKSxqJiYoZz8oYi5jYWxsKGEsZCksYj1udWxsKTooaj1iLGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwobShhKSxjKX0pKSxiKSlmb3IoO2k+aDtoKyspYihhW2hdLGMsZz9kOmQuY2FsbChhW2hdLGgsYihhW2hdLGMpKSk7cmV0dXJuIGU/YTpqP2IuY2FsbChhKTppP2IoYVswXSxjKTpmfSxXPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyFmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYz15LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixrLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1iLmZpcnN0Q2hpbGQubm9kZVR5cGUsay50Ym9keT0hYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsay5odG1sU2VyaWFsaXplPSEhYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxrLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09eS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxhLnR5cGU9ImNoZWNrYm94IixhLmNoZWNrZWQ9ITAsYy5hcHBlbmRDaGlsZChhKSxrLmFwcGVuZENoZWNrZWQ9YS5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYy5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPSdjaGVja2VkJyBuYW1lPSd0Jy8+IixrLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsay5ub0Nsb25lRXZlbnQ9ITAsYi5hdHRhY2hFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7ay5ub0Nsb25lRXZlbnQ9ITF9KSxiLmNsb25lTm9kZSghMCkuY2xpY2soKSksbnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goZCl7ay5kZWxldGVFeHBhbmRvPSExfX19KCksZnVuY3Rpb24oKXt2YXIgYixjLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IoYiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWM9Im9uIitiLChrW2IrIkJ1YmJsZXMiXT1jIGluIGEpfHwoZC5zZXRBdHRyaWJ1dGUoYywidCIpLGtbYisiQnViYmxlcyJdPWQuYXR0cmlidXRlc1tjXS5leHBhbmRvPT09ITEpO2Q9bnVsbH0oKTt2YXIgWD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksWT0vXmtleS8sWj0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywkPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxfPS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVuY3Rpb24gYWEoKXtyZXR1cm4hMH1mdW5jdGlvbiBiYSgpe3JldHVybiExfWZ1bmN0aW9uIGNhKCl7dHJ5e3JldHVybiB5LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1tLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixvLHAscSxyPW0uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW0uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgbT09PUt8fGEmJm0uZXZlbnQudHJpZ2dlcmVkPT09YS50eXBlP3ZvaWQgMDptLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpfSxrLmVsZW09YSksYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGg9Yi5sZW5ndGg7d2hpbGUoaC0tKWY9Xy5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW0uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChuPWdbb10pfHwobj1nW29dPVtdLG4uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP24uc3BsaWNlKG4uZGVsZWdhdGVDb3VudCsrLDAsbCk6bi5wdXNoKGwpLG0uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLG8scCxxLHI9bS5oYXNEYXRhKGEpJiZtLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9Xy5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1tLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbj1rW29dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksaT1mPW4ubGVuZ3RoO3doaWxlKGYtLSlnPW5bZl0sIWUmJnEhPT1nLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1nLmd1aWR8fGgmJiFoLnRlc3QoZy5uYW1lc3BhY2UpfHxkJiZkIT09Zy5zZWxlY3RvciYmKCIqKiIhPT1kfHwhZy5zZWxlY3Rvcil8fChuLnNwbGljZShmLDEpLGcuc2VsZWN0b3ImJm4uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsZykpO2kmJiFuLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09ITF8fG0ucmVtb3ZlRXZlbnQoYSxvLHIuaGFuZGxlKSxkZWxldGUga1tvXSl9ZWxzZSBmb3IobyBpbiBrKW0uZXZlbnQucmVtb3ZlKGEsbytiW2pdLGMsZCwhMCk7bS5pc0VtcHR5T2JqZWN0KGspJiYoZGVsZXRlIHIuaGFuZGxlLG0uX3JlbW92ZURhdGEoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxrLGwsbixvPVtkfHx5XSxwPWouY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscT1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihoPWw9ZD1kfHx5LDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmISQudGVzdChwK20uZXZlbnQudHJpZ2dlcmVkKSYmKHAuaW5kZXhPZigiLiIpPj0wJiYocT1wLnNwbGl0KCIuIikscD1xLnNoaWZ0KCkscS5zb3J0KCkpLGc9cC5pbmRleE9mKCI6Iik8MCYmIm9uIitwLGI9YlttLmV4cGFuZG9dP2I6bmV3IG0uRXZlbnQocCwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPXEuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Euam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm0ubWFrZUFycmF5KGMsW2JdKSxrPW0uZXZlbnQuc3BlY2lhbFtwXXx8e30sZXx8IWsudHJpZ2dlcnx8ay50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhay5ub0J1YmJsZSYmIW0uaXNXaW5kb3coZCkpe2ZvcihpPWsuZGVsZWdhdGVUeXBlfHxwLCQudGVzdChpK3ApfHwoaD1oLnBhcmVudE5vZGUpO2g7aD1oLnBhcmVudE5vZGUpby5wdXNoKGgpLGw9aDtsPT09KGQub3duZXJEb2N1bWVudHx8eSkmJm8ucHVzaChsLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvd3x8YSl9bj0wO3doaWxlKChoPW9bbisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPW4+MT9pOmsuYmluZFR5cGV8fHAsZj0obS5fZGF0YShoLCJldmVudHMiKXx8e30pW2IudHlwZV0mJm0uX2RhdGEoaCwiaGFuZGxlIiksZiYmZi5hcHBseShoLGMpLGY9ZyYmaFtnXSxmJiZmLmFwcGx5JiZtLmFjY2VwdERhdGEoaCkmJihiLnJlc3VsdD1mLmFwcGx5KGgsYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtpZihiLnR5cGU9cCwhZSYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJighay5fZGVmYXVsdHx8ay5fZGVmYXVsdC5hcHBseShvLnBvcCgpLGMpPT09ITEpJiZtLmFjY2VwdERhdGEoZCkmJmcmJmRbcF0mJiFtLmlzV2luZG93KGQpKXtsPWRbZ10sbCYmKGRbZ109bnVsbCksbS5ldmVudC50cmlnZ2VyZWQ9cDt0cnl7ZFtwXSgpfWNhdGNoKHIpe31tLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbCYmKGRbZ109bCl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1tLmV2ZW50LmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxqPShtLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1tLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1tLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGc9MDt3aGlsZSgoZT1mLmhhbmRsZXJzW2crK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZS5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWUsYS5kYXRhPWUuZGF0YSxjPSgobS5ldmVudC5zcGVjaWFsW2Uub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxlLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1jJiYoYS5yZXN1bHQ9Yyk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHwiY2xpY2siIT09YS50eXBlKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZT1bXSxmPTA7aD5mO2YrKylkPWJbZl0sYz1kLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1lW2NdJiYoZVtjXT1kLm5lZWRzQ29udGV4dD9tKGMsdGhpcykuaW5kZXgoaSk+PTA6bS5maW5kKGMsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxlW2NdJiZlLnB1c2goZCk7ZS5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmV9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW20uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Z3x8KHRoaXMuZml4SG9va3NbZV09Zz1aLnRlc3QoZSk/dGhpcy5tb3VzZUhvb2tzOlkudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBtLkV2ZW50KGYpLGI9ZC5sZW5ndGg7d2hpbGUoYi0tKWM9ZFtiXSxhW2NdPWZbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9Zi5zcmNFbGVtZW50fHx5KSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9ISFhLm1ldGFLZXksZy5maWx0ZXI/Zy5maWx0ZXIoYSxmKTphfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b24sZz1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihkPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fHksZT1kLmRvY3VtZW50RWxlbWVudCxjPWQuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZSYmZS5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGUmJmUuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmcmJihhLnJlbGF0ZWRUYXJnZXQ9Zz09PWEudGFyZ2V0P2IudG9FbGVtZW50OmcpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09Y2EoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1jYSgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5leHRlbmQobmV3IG0uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP20uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6bS5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbS5yZW1vdmVFdmVudD15LnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT09SyYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbS5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbS5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/YWE6YmEpOnRoaXMudHlwZT1hLGImJm0uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG0ubm93KCksdm9pZCh0aGlzW20uZXhwYW5kb109ITApKTpuZXcgbS5FdmVudChhLGIpfSxtLkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOmJhLGlzUHJvcGFnYXRpb25TdG9wcGVkOmJhLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmJhLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWFhLGEmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YWEsYSYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9YWEsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG0uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXttLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFtLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLnN1Ym1pdEJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG0uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1tLm5vZGVOYW1lKGIsImlucHV0Iil8fG0ubm9kZU5hbWUoYiwiYnV0dG9uIik/Yi5mb3JtOnZvaWQgMDtjJiYhbS5fZGF0YShjLCJzdWJtaXRCdWJibGVzIikmJihtLmV2ZW50LmFkZChjLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZT0hMH0pLG0uX2RhdGEoYywic3VibWl0QnViYmxlcyIsITApKX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBhLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZtLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbS5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxrLmNoYW5nZUJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBYLnRlc3QodGhpcy5ub2RlTmFtZSk/KCgiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlKSYmKG0uZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyJjaGVja2VkIj09PWEub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksbS5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhYS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLG0uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhLCEwKX0pKSwhMSk6dm9pZCBtLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtYLnRlc3QoYi5ub2RlTmFtZSkmJiFtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiKSYmKG0uZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXshdGhpcy5wYXJlbnROb2RlfHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8bS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBtLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFYLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksay5mb2N1c2luQnViYmxlc3x8bS5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe20uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxtLmV2ZW50LmZpeChhKSwhMCl9O20uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1tLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbS5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW0uX2RhdGEoZCxiKS0xO2U/bS5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG0uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG0uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWN8fGIsYj12b2lkIDApO2ZvcihmIGluIGEpdGhpcy5vbihmLGIsYyxhW2ZdLGUpO3JldHVybiB0aGlzfWlmKG51bGw9PWMmJm51bGw9PWQ/KGQ9YixjPWI9dm9pZCAwKTpudWxsPT1kJiYoInN0cmluZyI9PXR5cGVvZiBiPyhkPWMsYz12b2lkIDApOihkPWMsYz1iLGI9dm9pZCAwKSksZD09PSExKWQ9YmE7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihnPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbSgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1tLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixtKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWJhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXttLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO3JldHVybiBjP20uZXZlbnQudHJpZ2dlcihhLGIsYywhMCk6dm9pZCAwfX0pO2Z1bmN0aW9uIGRhKGEpe3ZhciBiPWVhLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfXZhciBlYT0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsZmE9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxnYT1uZXcgUmVnRXhwKCI8KD86IitlYSsiKVtcXHMvPl0iLCJpIiksaGE9L15ccysvLGlhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksamE9LzwoW1x3Ol0rKS8sa2E9Lzx0Ym9keS9pLGxhPS88fCYjP1x3KzsvLG1hPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksbmE9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksb2E9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHBhPS9edHJ1ZVwvKC4qKS8scWE9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLHJhPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDprLmh0bWxTZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX0sc2E9ZGEoeSksdGE9c2EuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7cmEub3B0Z3JvdXA9cmEub3B0aW9uLHJhLnRib2R5PXJhLnRmb290PXJhLmNvbGdyb3VwPXJhLmNhcHRpb249cmEudGhlYWQscmEudGg9cmEudGQ7ZnVuY3Rpb24gdWEoYSxiKXt2YXIgYyxkLGU9MCxmPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Sz9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9PUs/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fCIqIik6dm9pZCAwO2lmKCFmKWZvcihmPVtdLGM9YS5jaGlsZE5vZGVzfHxhO251bGwhPShkPWNbZV0pO2UrKykhYnx8bS5ub2RlTmFtZShkLGIpP2YucHVzaChkKTptLm1lcmdlKGYsdWEoZCxiKSk7cmV0dXJuIHZvaWQgMD09PWJ8fGImJm0ubm9kZU5hbWUoYSxiKT9tLm1lcmdlKFthXSxmKTpmfWZ1bmN0aW9uIHZhKGEpe1cudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIHdhKGEsYil7cmV0dXJuIG0ubm9kZU5hbWUoYSwidGFibGUiKSYmbS5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiB4YShhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bS5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24geWEoYSl7dmFyIGI9cGEuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiB6YShhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW0uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG0uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBBYShhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZtLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW0uX2RhdGEoYSksZz1tLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyltLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW0uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBCYShhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWsubm9DbG9uZUV2ZW50JiZiW20uZXhwYW5kb10pe2U9bS5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyltLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobS5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oeGEoYikudGV4dD1hLnRleHQseWEoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGsuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFtLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmVy50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOigiaW5wdXQiPT09Y3x8InRleHRhcmVhIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfX1tLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1tLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihrLmh0bWw1Q2xvbmV8fG0uaXNYTUxEb2MoYSl8fCFnYS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KHRhLmlubmVySFRNTD1hLm91dGVySFRNTCx0YS5yZW1vdmVDaGlsZChmPXRhLmZpcnN0Q2hpbGQpKSwhKGsubm9DbG9uZUV2ZW50JiZrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxtLmlzWE1MRG9jKGEpKSlmb3IoZD11YShmKSxoPXVhKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmQmEoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8dWEoYSksZD1kfHx1YShmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUFhKGUsZFtnXSk7ZWxzZSBBYShhLGYpO3JldHVybiBkPXVhKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJnphKGQsIWkmJnVhKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixsLG49YS5sZW5ndGgsbz1kYShiKSxwPVtdLHE9MDtuPnE7cSsrKWlmKGY9YVtxXSxmfHwwPT09ZilpZigib2JqZWN0Ij09PW0udHlwZShmKSltLm1lcmdlKHAsZi5ub2RlVHlwZT9bZl06Zik7ZWxzZSBpZihsYS50ZXN0KGYpKXtoPWh8fG8uYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaT0oamEuZXhlYyhmKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxsPXJhW2ldfHxyYS5fZGVmYXVsdCxoLmlubmVySFRNTD1sWzFdK2YucmVwbGFjZShpYSwiPCQxPjwvJDI+IikrbFsyXSxlPWxbMF07d2hpbGUoZS0tKWg9aC5sYXN0Q2hpbGQ7aWYoIWsubGVhZGluZ1doaXRlc3BhY2UmJmhhLnRlc3QoZikmJnAucHVzaChiLmNyZWF0ZVRleHROb2RlKGhhLmV4ZWMoZilbMF0pKSwhay50Ym9keSl7Zj0idGFibGUiIT09aXx8a2EudGVzdChmKT8iPHRhYmxlPiIhPT1sWzFdfHxrYS50ZXN0KGYpPzA6aDpoLmZpcnN0Q2hpbGQsZT1mJiZmLmNoaWxkTm9kZXMubGVuZ3RoO3doaWxlKGUtLSltLm5vZGVOYW1lKGo9Zi5jaGlsZE5vZGVzW2VdLCJ0Ym9keSIpJiYhai5jaGlsZE5vZGVzLmxlbmd0aCYmZi5yZW1vdmVDaGlsZChqKX1tLm1lcmdlKHAsaC5jaGlsZE5vZGVzKSxoLnRleHRDb250ZW50PSIiO3doaWxlKGguZmlyc3RDaGlsZCloLnJlbW92ZUNoaWxkKGguZmlyc3RDaGlsZCk7aD1vLmxhc3RDaGlsZH1lbHNlIHAucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtoJiZvLnJlbW92ZUNoaWxkKGgpLGsuYXBwZW5kQ2hlY2tlZHx8bS5ncmVwKHVhKHAsImlucHV0IiksdmEpLHE9MDt3aGlsZShmPXBbcSsrXSlpZigoIWR8fC0xPT09bS5pbkFycmF5KGYsZCkpJiYoZz1tLmNvbnRhaW5zKGYub3duZXJEb2N1bWVudCxmKSxoPXVhKG8uYXBwZW5kQ2hpbGQoZiksInNjcmlwdCIpLGcmJnphKGgpLGMpKXtlPTA7d2hpbGUoZj1oW2UrK10pb2EudGVzdChmLnR5cGV8fCIiKSYmYy5wdXNoKGYpfXJldHVybiBoPW51bGwsb30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkLGUsZixnLGg9MCxpPW0uZXhwYW5kbyxqPW0uY2FjaGUsbD1rLmRlbGV0ZUV4cGFuZG8sbj1tLmV2ZW50LnNwZWNpYWw7bnVsbCE9KGQ9YVtoXSk7aCsrKWlmKChifHxtLmFjY2VwdERhdGEoZCkpJiYoZj1kW2ldLGc9ZiYmaltmXSkpe2lmKGcuZXZlbnRzKWZvcihlIGluIGcuZXZlbnRzKW5bZV0/bS5ldmVudC5yZW1vdmUoZCxlKTptLnJlbW92ZUV2ZW50KGQsZSxnLmhhbmRsZSk7altmXSYmKGRlbGV0ZSBqW2ZdLGw/ZGVsZXRlIGRbaV06dHlwZW9mIGQucmVtb3ZlQXR0cmlidXRlIT09Sz9kLnJlbW92ZUF0dHJpYnV0ZShpKTpkW2ldPW51bGwsYy5wdXNoKGYpKX19fSksbS5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9tLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHx5KS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj13YSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXdhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9YT9tLmZpbHRlcihhLHRoaXMpOnRoaXMsZT0wO251bGwhPShjPWRbZV0pO2UrKylifHwxIT09Yy5ub2RlVHlwZXx8bS5jbGVhbkRhdGEodWEoYykpLGMucGFyZW50Tm9kZSYmKGImJm0uY29udGFpbnMoYy5vd25lckRvY3VtZW50LGMpJiZ6YSh1YShjLCJzY3JpcHQiKSksYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm0uY2xlYW5EYXRhKHVhKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbS5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbS5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UoZmEsIiIpOnZvaWQgMDtpZighKCJzdHJpbmciIT10eXBlb2YgYXx8bWEudGVzdChhKXx8IWsuaHRtbFNlcmlhbGl6ZSYmZ2EudGVzdChhKXx8IWsubGVhZGluZ1doaXRlc3BhY2UmJmhhLnRlc3QoYSl8fHJhWyhqYS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkpe2E9YS5yZXBsYWNlKGlhLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihtLmNsZWFuRGF0YSh1YShiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYil7YT10aGlzLnBhcmVudE5vZGUsbS5jbGVhbkRhdGEodWEodGhpcykpLGEmJmEucmVwbGFjZUNoaWxkKGIsdGhpcyl9KSxhJiYoYS5sZW5ndGh8fGEubm9kZVR5cGUpP3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiKXthPWUuYXBwbHkoW10sYSk7dmFyIGMsZCxmLGcsaCxpLGo9MCxsPXRoaXMubGVuZ3RoLG49dGhpcyxvPWwtMSxwPWFbMF0scT1tLmlzRnVuY3Rpb24ocCk7aWYocXx8bD4xJiYic3RyaW5nIj09dHlwZW9mIHAmJiFrLmNoZWNrQ2xvbmUmJm5hLnRlc3QocCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZD1uLmVxKGMpO3EmJihhWzBdPXAuY2FsbCh0aGlzLGMsZC5odG1sKCkpKSxkLmRvbU1hbmlwKGEsYil9KTtpZihsJiYoaT1tLmJ1aWxkRnJhZ21lbnQoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksYz1pLmZpcnN0Q2hpbGQsMT09PWkuY2hpbGROb2Rlcy5sZW5ndGgmJihpPWMpLGMpKXtmb3IoZz1tLm1hcCh1YShpLCJzY3JpcHQiKSx4YSksZj1nLmxlbmd0aDtsPmo7aisrKWQ9aSxqIT09byYmKGQ9bS5jbG9uZShkLCEwLCEwKSxmJiZtLm1lcmdlKGcsdWEoZCwic2NyaXB0IikpKSxiLmNhbGwodGhpc1tqXSxkLGopO2lmKGYpZm9yKGg9Z1tnLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG0ubWFwKGcseWEpLGo9MDtmPmo7aisrKWQ9Z1tqXSxvYS50ZXN0KGQudHlwZXx8IiIpJiYhbS5fZGF0YShkLCJnbG9iYWxFdmFsIikmJm0uY29udGFpbnMoaCxkKSYmKGQuc3JjP20uX2V2YWxVcmwmJm0uX2V2YWxVcmwoZC5zcmMpOm0uZ2xvYmFsRXZhbCgoZC50ZXh0fHxkLnRleHRDb250ZW50fHxkLmlubmVySFRNTHx8IiIpLnJlcGxhY2UocWEsIiIpKSk7aT1jPW51bGx9cmV0dXJuIHRoaXN9fSksbS5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXttLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPTAsZT1bXSxnPW0oYSksaD1nLmxlbmd0aC0xO2g+PWQ7ZCsrKWM9ZD09PWg/dGhpczp0aGlzLmNsb25lKCEwKSxtKGdbZF0pW2JdKGMpLGYuYXBwbHkoZSxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIENhLERhPXt9O2Z1bmN0aW9uIEVhKGIsYyl7dmFyIGQsZT1tKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTptLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiBGYShhKXt2YXIgYj15LGM9RGFbYV07cmV0dXJuIGN8fChjPUVhKGEsYiksIm5vbmUiIT09YyYmY3x8KENhPShDYXx8bSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj0oQ2FbMF0uY29udGVudFdpbmRvd3x8Q2FbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9RWEoYSxiKSxDYS5kZXRhY2goKSksRGFbYV09YyksY30hZnVuY3Rpb24oKXt2YXIgYTtrLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxkO3JldHVybiBjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChkKSxhKTp2b2lkIDB9fSgpO3ZhciBHYT0vXm1hcmdpbi8sSGE9bmV3IFJlZ0V4cCgiXigiK1MrIikoPyFweClbYS16JV0rJCIsImkiKSxJYSxKYSxLYT0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhJYT1mdW5jdGlvbihiKXtyZXR1cm4gYi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Lm9wZW5lcj9iLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmEuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpfSxKYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fElhKGEpLGc9Yz9jLmdldFByb3BlcnR5VmFsdWUoYil8fGNbYl06dm9pZCAwLGMmJigiIiE9PWd8fG0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1tLnN0eWxlKGEsYikpLEhhLnRlc3QoZykmJkdhLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9ZikpLHZvaWQgMD09PWc/ZzpnKyIifSk6eS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoSWE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY3VycmVudFN0eWxlfSxKYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fElhKGEpLGc9Yz9jW2JdOnZvaWQgMCxudWxsPT1nJiZoJiZoW2JdJiYoZz1oW2JdKSxIYS50ZXN0KGcpJiYhS2EudGVzdChiKSYmKGQ9aC5sZWZ0LGU9YS5ydW50aW1lU3R5bGUsZj1lJiZlLmxlZnQsZiYmKGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxoLmxlZnQ9ImZvbnRTaXplIj09PWI/IjFlbSI6ZyxnPWgucGl4ZWxMZWZ0KyJweCIsaC5sZWZ0PWQsZiYmKGUubGVmdD1mKSksdm9pZCAwPT09Zz9nOmcrIiJ8fCJhdXRvIn0pO2Z1bmN0aW9uIExhKGEsYil7cmV0dXJue2dldDpmdW5jdGlvbigpe3ZhciBjPWEoKTtpZihudWxsIT1jKXJldHVybiBjP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0hZnVuY3Rpb24oKXt2YXIgYixjLGQsZSxmLGcsaDtpZihiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsZD1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sYz1kJiZkLnN0eWxlKXtjLmNzc1RleHQ9ImZsb2F0OmxlZnQ7b3BhY2l0eTouNSIsay5vcGFjaXR5PSIwLjUiPT09Yy5vcGFjaXR5LGsuY3NzRmxvYXQ9ISFjLmNzc0Zsb2F0LGIuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixiLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsay5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWIuc3R5bGUuYmFja2dyb3VuZENsaXAsay5ib3hTaXppbmc9IiI9PT1jLmJveFNpemluZ3x8IiI9PT1jLk1vekJveFNpemluZ3x8IiI9PT1jLldlYmtpdEJveFNpemluZyxtLmV4dGVuZChrLHtyZWxpYWJsZUhpZGRlbk9mZnNldHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09ZyYmaSgpLGd9LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWYmJmkoKSxmfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWUmJmkoKSxlfSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWgmJmkoKSxofX0pO2Z1bmN0aW9uIGkoKXt2YXIgYixjLGQsaTtjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlJiYoYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4IixjLmFwcGVuZENoaWxkKGQpLmFwcGVuZENoaWxkKGIpLGIuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxJTt0b3A6MSU7Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGUiLGU9Zj0hMSxoPSEwLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGU9IjElIiE9PShhLmdldENvbXB1dGVkU3R5bGUoYixudWxsKXx8e30pLnRvcCxmPSI0cHgiPT09KGEuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aCxpPWIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSksaS5zdHlsZS5jc3NUZXh0PWIuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixpLnN0eWxlLm1hcmdpblJpZ2h0PWkuc3R5bGUud2lkdGg9IjAiLGIuc3R5bGUud2lkdGg9IjFweCIsaD0hcGFyc2VGbG9hdCgoYS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt9KS5tYXJnaW5SaWdodCksYi5yZW1vdmVDaGlsZChpKSksYi5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iLGk9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxpWzBdLnN0eWxlLmNzc1RleHQ9Im1hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MDtkaXNwbGF5Om5vbmUiLGc9MD09PWlbMF0ub2Zmc2V0SGVpZ2h0LGcmJihpWzBdLnN0eWxlLmRpc3BsYXk9IiIsaVsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixnPTA9PT1pWzBdLm9mZnNldEhlaWdodCksYy5yZW1vdmVDaGlsZChkKSl9fX0oKSxtLnN3YXA9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPXt9O2ZvcihmIGluIGIpZ1tmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuYXBwbHkoYSxkfHxbXSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWdbZl07cmV0dXJuIGV9O3ZhciBNYT0vYWxwaGFcKFteKV0qXCkvaSxOYT0vb3BhY2l0eVxzKj1ccyooW14pXSopLyxPYT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sUGE9bmV3IFJlZ0V4cCgiXigiK1MrIikoLiopJCIsImkiKSxRYT1uZXcgUmVnRXhwKCJeKFsrLV0pPSgiK1MrIikiLCJpIiksUmE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFNhPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifSxUYT1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIFVhKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1UYS5sZW5ndGg7d2hpbGUoZS0tKWlmKGI9VGFbZV0rYyxiIGluIGEpcmV0dXJuIGI7cmV0dXJuIGR9ZnVuY3Rpb24gVmEoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wLGg9YS5sZW5ndGg7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGZbZ109bS5fZGF0YShkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlUoZCkmJihmW2ddPW0uX2RhdGEoZCwib2xkZGlzcGxheSIsRmEoZC5ub2RlTmFtZSkpKSk6KGU9VShkKSwoYyYmIm5vbmUiIT09Y3x8IWUpJiZtLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGU/YzptLmNzcyhkLCJkaXNwbGF5IikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmIm5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5JiYiIiE9PWQuc3R5bGUuZGlzcGxheXx8KGQuc3R5bGUuZGlzcGxheT1iP2ZbZ118fCIiOiJub25lIikpO3JldHVybiBhfWZ1bmN0aW9uIFdhKGEsYixjKXt2YXIgZD1QYS5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIFhhKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1tLmNzcyhhLGMrVFtmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW0uY3NzKGEsInBhZGRpbmciK1RbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW0uY3NzKGEsImJvcmRlciIrVFtmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW0uY3NzKGEsInBhZGRpbmciK1RbZl0sITAsZSksInBhZGRpbmciIT09YyYmKGcrPW0uY3NzKGEsImJvcmRlciIrVFtmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gWWEoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPUlhKGEpLGc9ay5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PW0uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT1KYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLEhhLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYoay5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK1hhKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1tLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPUphKGEsIm9wYWNpdHkiKTtyZXR1cm4iIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ay5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1tLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7aWYoYj1tLmNzc1Byb3BzW2hdfHwobS5jc3NQcm9wc1toXT1VYShpLGgpKSxnPW0uY3NzSG9va3NbYl18fG0uY3NzSG9va3NbaF0sdm9pZCAwPT09YylyZXR1cm4gZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl07aWYoZj10eXBlb2YgYywic3RyaW5nIj09PWYmJihlPVFhLmV4ZWMoYykpJiYoYz0oZVsxXSsxKSplWzJdK3BhcnNlRmxvYXQobS5jc3MoYSxiKSksZj0ibnVtYmVyIiksbnVsbCE9YyYmYz09PWMmJigibnVtYmVyIiE9PWZ8fG0uY3NzTnVtYmVyW2hdfHwoYys9InB4Iiksay5jbGVhckNsb25lU3R5bGV8fCIiIT09Y3x8MCE9PWIuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwoaVtiXT0iaW5oZXJpdCIpLCEoZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpKSkpdHJ5e2lbYl09Y31jYXRjaChqKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW0uY2FtZWxDYXNlKGIpO3JldHVybiBiPW0uY3NzUHJvcHNbaF18fChtLmNzc1Byb3BzW2hdPVVhKGEuc3R5bGUsaCkpLGc9bS5jc3NIb29rc1tiXXx8bS5jc3NIb29rc1toXSxnJiYiZ2V0ImluIGcmJihmPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWYmJihmPUphKGEsYixkKSksIm5vcm1hbCI9PT1mJiZiIGluIFNhJiYoZj1TYVtiXSksIiI9PT1jfHxjPyhlPXBhcnNlRmxvYXQoZiksYz09PSEwfHxtLmlzTnVtZXJpYyhlKT9lfHwwOmYpOmZ9fSksbS5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe20uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/T2EudGVzdChtLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9tLnN3YXAoYSxSYSxmdW5jdGlvbigpe3JldHVybiBZYShhLGIsZCl9KTpZYShhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJklhKGEpO3JldHVybiBXYShhLGMsZD9YYShhLGIsZCxrLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bS5jc3MoYSwiYm94U2l6aW5nIiwhMSxlKSxlKTowKX19fSksay5vcGFjaXR5fHwobS5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTmEudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPW0uaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrMTAwKmIrIikiOiIiLGY9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MSwoYj49MXx8IiI9PT1iKSYmIiI9PT1tLnRyaW0oZi5yZXBsYWNlKE1hLCIiKSkmJmMucmVtb3ZlQXR0cmlidXRlJiYoYy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpLCIiPT09Ynx8ZCYmIWQuZmlsdGVyKXx8KGMuZmlsdGVyPU1hLnRlc3QoZik/Zi5yZXBsYWNlKE1hLGUpOmYrIiAiK2UpfX0pLG0uY3NzSG9va3MubWFyZ2luUmlnaHQ9TGEoay5yZWxpYWJsZU1hcmdpblJpZ2h0LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/bS5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LEphLFthLCJtYXJnaW5SaWdodCJdKTp2b2lkIDB9KSxtLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihhLGIpe20uY3NzSG9va3NbYStiXT17ZXhwYW5kOmZ1bmN0aW9uKGMpe2Zvcih2YXIgZD0wLGU9e30sZj0ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgiICIpOltjXTs0PmQ7ZCsrKWVbYStUW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTtyZXR1cm4gZX19LEdhLnRlc3QoYSl8fChtLmNzc0hvb2tzW2ErYl0uc2V0PVdhKX0pLG0uZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e30sZz0wO2lmKG0uaXNBcnJheShiKSl7Zm9yKGQ9SWEoYSksZT1iLmxlbmd0aDtlPmc7ZysrKWZbYltnXV09bS5jc3MoYSxiW2ddLCExLGQpO3JldHVybiBmfXJldHVybiB2b2lkIDAhPT1jP20uc3R5bGUoYSxiLGMpOm0uY3NzKGEsYil9LGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIFZhKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIFZhKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYT9hP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe1UodGhpcyk/bSh0aGlzKS5zaG93KCk6bSh0aGlzKS5oaWRlKCl9KX19KTtmdW5jdGlvbiBaYShhLGIsYyxkLGUpewpyZXR1cm4gbmV3IFphLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bS5Ud2Vlbj1aYSxaYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlphLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJzd2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChtLmNzc051bWJlcltjXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9WmEucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOlphLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPVphLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9Yj1tLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz1iPWEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6WmEucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sWmEucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVphLnByb3RvdHlwZSxaYS5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG51bGw9PWEuZWxlbVthLnByb3BdfHxhLmVsZW0uc3R5bGUmJm51bGwhPWEuZWxlbS5zdHlsZVthLnByb3BdPyhiPW0uY3NzKGEuZWxlbSxhLnByb3AsIiIpLGImJiJhdXRvIiE9PWI/YjowKTphLmVsZW1bYS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGEpe20uZnguc3RlcFthLnByb3BdP20uZnguc3RlcFthLnByb3BdKGEpOmEuZWxlbS5zdHlsZSYmKG51bGwhPWEuZWxlbS5zdHlsZVttLmNzc1Byb3BzW2EucHJvcF1dfHxtLmNzc0hvb2tzW2EucHJvcF0pP20uc3R5bGUoYS5lbGVtLGEucHJvcCxhLm5vdythLnVuaXQpOmEuZWxlbVthLnByb3BdPWEubm93fX19LFphLnByb3BIb29rcy5zY3JvbGxUb3A9WmEucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sbS5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sbS5meD1aYS5wcm90b3R5cGUuaW5pdCxtLmZ4LnN0ZXA9e307dmFyICRhLF9hLGFiPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxiYj1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUysiKShbYS16JV0qKSQiLCJpIiksY2I9L3F1ZXVlSG9va3MkLyxkYj1baWJdLGViPXsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGQ9Yy5jdXIoKSxlPWJiLmV4ZWMoYiksZj1lJiZlWzNdfHwobS5jc3NOdW1iZXJbYV0/IiI6InB4IiksZz0obS5jc3NOdW1iZXJbYV18fCJweCIhPT1mJiYrZCkmJmJiLmV4ZWMobS5jc3MoYy5lbGVtLGEpKSxoPTEsaT0yMDtpZihnJiZnWzNdIT09Zil7Zj1mfHxnWzNdLGU9ZXx8W10sZz0rZHx8MTtkbyBoPWh8fCIuNSIsZy89aCxtLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtmdW5jdGlvbiBmYigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGE9dm9pZCAwfSksJGE9bS5ub3coKX1mdW5jdGlvbiBnYihhLGIpe3ZhciBjLGQ9e2hlaWdodDphfSxlPTA7Zm9yKGI9Yj8xOjA7ND5lO2UrPTItYiljPVRbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBoYihhLGIsYyl7Zm9yKHZhciBkLGU9KGViW2JdfHxbXSkuY29uY2F0KGViWyIqIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIGliKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixsLG49dGhpcyxvPXt9LHA9YS5zdHlsZSxxPWEubm9kZVR5cGUmJlUoYSkscj1tLl9kYXRhKGEsImZ4c2hvdyIpO2MucXVldWV8fChoPW0uX3F1ZXVlSG9va3MoYSwiZngiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxuLmFsd2F5cyhmdW5jdGlvbigpe24uYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLG0ucXVldWUoYSwiZngiKS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEubm9kZVR5cGUmJigiaGVpZ2h0ImluIGJ8fCJ3aWR0aCJpbiBiKSYmKGMub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLGo9bS5jc3MoYSwiZGlzcGxheSIpLGw9Im5vbmUiPT09aj9tLl9kYXRhKGEsIm9sZGRpc3BsYXkiKXx8RmEoYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWwmJiJub25lIj09PW0uY3NzKGEsImZsb2F0IikmJihrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJiJpbmxpbmUiIT09RmEoYS5ub2RlTmFtZSk/cC56b29tPTE6cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksYy5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsay5zaHJpbmtXcmFwQmxvY2tzKCl8fG4uYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSxhYi5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fCJ0b2dnbGUiPT09ZSxlPT09KHE/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWV8fCFyfHx2b2lkIDA9PT1yW2RdKWNvbnRpbnVlO3E9ITB9b1tkXT1yJiZyW2RdfHxtLnN0eWxlKGEsZCl9ZWxzZSBqPXZvaWQgMDtpZihtLmlzRW1wdHlPYmplY3QobykpImlubGluZSI9PT0oIm5vbmUiPT09aj9GYShhLm5vZGVOYW1lKTpqKSYmKHAuZGlzcGxheT1qKTtlbHNle3I/ImhpZGRlbiJpbiByJiYocT1yLmhpZGRlbik6cj1tLl9kYXRhKGEsImZ4c2hvdyIse30pLGYmJihyLmhpZGRlbj0hcSkscT9tKGEpLnNob3coKTpuLmRvbmUoZnVuY3Rpb24oKXttKGEpLmhpZGUoKX0pLG4uZG9uZShmdW5jdGlvbigpe3ZhciBiO20uX3JlbW92ZURhdGEoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbyltLnN0eWxlKGEsYixvW2JdKX0pO2ZvcihkIGluIG8pZz1oYihxP3JbZF06MCxkLG4pLGQgaW4gcnx8KHJbZF09Zy5zdGFydCxxJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uIGpiKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bS5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxtLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW0uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24ga2IoYSxiLGMpe3ZhciBkLGUsZj0wLGc9ZGIubGVuZ3RoLGg9bS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9JGF8fGZiKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm0uZXh0ZW5kKHt9LGIpLG9wdHM6bS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTokYXx8ZmIoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW0uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKGpiKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1kYltmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIG0ubWFwKGssaGIsaiksbS5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbS5meC50aW1lcihtLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1tLkFuaW1hdGlvbj1tLmV4dGVuZChrYix7dHdlZW5lcjpmdW5jdGlvbihhLGIpe20uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxlYltjXT1lYltjXXx8W10sZWJbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9kYi51bnNoaWZ0KGEpOmRiLnB1c2goYSl9fSksbS5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP20uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bS5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFtLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW0uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBtLmZ4LnNwZWVkcz9tLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTptLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bS5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZtLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoVSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5pc0VtcHR5T2JqZWN0KGEpLGY9bS5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWtiKHRoaXMsbS5leHRlbmQoe30sYSksZik7KGV8fG0uX2RhdGEodGhpcywiZmluaXNoIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYz1iLGI9YSxhPXZvaWQgMCksYiYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYSsicXVldWVIb29rcyIsZj1tLnRpbWVycyxnPW0uX2RhdGEodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmY2IudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTsoYnx8IWMpJiZtLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1tLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1tLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbS5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxtLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bS5mbltiXTttLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoZ2IoYiwhMCksYSxkLGUpfX0pLG0uZWFjaCh7c2xpZGVEb3duOmdiKCJzaG93Iiksc2xpZGVVcDpnYigiaGlkZSIpLHNsaWRlVG9nZ2xlOmdiKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxtLnRpbWVycz1bXSxtLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW0udGltZXJzLGM9MDtmb3IoJGE9bS5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxtLmZ4LnN0b3AoKSwkYT12b2lkIDB9LG0uZngudGltZXI9ZnVuY3Rpb24oYSl7bS50aW1lcnMucHVzaChhKSxhKCk/bS5meC5zdGFydCgpOm0udGltZXJzLnBvcCgpfSxtLmZ4LmludGVydmFsPTEzLG0uZnguc3RhcnQ9ZnVuY3Rpb24oKXtfYXx8KF9hPXNldEludGVydmFsKG0uZngudGljayxtLmZ4LmludGVydmFsKSl9LG0uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoX2EpLF9hPW51bGx9LG0uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG0uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1tLmZ4P20uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZTtiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxjPXkuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZT1jLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxkLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGsuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWIuY2xhc3NOYW1lLGsuc3R5bGU9L3RvcC8udGVzdChkLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksay5ocmVmTm9ybWFsaXplZD0iL2EiPT09ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSxrLmNoZWNrT249ISFhLnZhbHVlLGsub3B0U2VsZWN0ZWQ9ZS5zZWxlY3RlZCxrLmVuY3R5cGU9ISF5LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGMuZGlzYWJsZWQ9ITAsay5vcHREaXNhYmxlZD0hZS5kaXNhYmxlZCxhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxrLmlucHV0PSIiPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYS52YWx1ZT0idCIsYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBsYj0vXHIvZzttLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bS5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG0odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjptLmlzQXJyYXkoZSkmJihlPW0ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW0udmFsSG9va3NbdGhpcy50eXBlXXx8bS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW0udmFsSG9va3NbZS50eXBlXXx8bS52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UobGIsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG0uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bS5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm0udHJpbShtLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZtLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bShjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW0ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWlmKGQ9ZVtnXSxtLmluQXJyYXkobS52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPj0wKXRyeXtkLnNlbGVjdGVkPWM9ITB9Y2F0Y2goaCl7ZC5zY3JvbGxIZWlnaHR9ZWxzZSBkLnNlbGVjdGVkPSExO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxlfX19fSksbS5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7bS52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uaXNBcnJheShiKT9hLmNoZWNrZWQ9bS5pbkFycmF5KG0oYSkudmFsKCksYik+PTA6dm9pZCAwfX0say5jaGVja09ufHwobS52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pO3ZhciBtYixuYixvYj1tLmV4cHIuYXR0ckhhbmRsZSxwYj0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLHFiPWsuZ2V0U2V0QXR0cmlidXRlLHJiPWsuaW5wdXQ7bS5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxtLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoYSYmMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gdHlwZW9mIGEuZ2V0QXR0cmlidXRlPT09Sz9tLnByb3AoYSxiLGMpOigxPT09ZiYmbS5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGQ9bS5hdHRySG9va3NbYl18fChtLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP25iOm1iKSksdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW0uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBtLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1tLnByb3BGaXhbY118fGMsbS5leHByLm1hdGNoLmJvb2wudGVzdChjKT9yYiYmcWJ8fCFwYi50ZXN0KGMpP2FbZF09ITE6YVttLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2RdPSExOm0uYXR0cihhLGMsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHFiP2M6ZCl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWsucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm0ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksbmI9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9tLnJlbW92ZUF0dHIoYSxjKTpyYiYmcWJ8fCFwYi50ZXN0KGMpP2Euc2V0QXR0cmlidXRlKCFxYiYmbS5wcm9wRml4W2NdfHxjLGMpOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtjXT0hMCxjfX0sbS5lYWNoKG0uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9b2JbYl18fG0uZmluZC5hdHRyO29iW2JdPXJiJiZxYnx8IXBiLnRlc3QoYik/ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPW9iW2JdLG9iW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxvYltiXT1mKSxlfTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitiKV0/Yi50b0xvd2VyQ2FzZSgpOm51bGx9fSkscmImJnFifHwobS5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaW5wdXQiKT92b2lkKGEuZGVmYXVsdFZhbHVlPWIpOm1iJiZtYi5zZXQoYSxiLGMpfX0pLHFifHwobWI9e3NldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHxhLnNldEF0dHJpYnV0ZU5vZGUoZD1hLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGMpKSxkLnZhbHVlPWIrPSIiLCJ2YWx1ZSI9PT1jfHxiPT09YS5nZXRBdHRyaWJ1dGUoYyk/Yjp2b2lkIDB9fSxvYi5pZD1vYi5uYW1lPW9iLmNvb3Jkcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJiIiIT09ZC52YWx1ZT9kLnZhbHVlOm51bGx9LG0udmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoYik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP2MudmFsdWU6dm9pZCAwfSxzZXQ6bWIuc2V0fSxtLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihhLGIsYyl7bWIuc2V0KGEsIiI9PT1iPyExOmIsYyl9fSxtLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7bS5hdHRySG9va3NbYl09e3NldDpmdW5jdGlvbihhLGMpe3JldHVybiIiPT09Yz8oYS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpLGMpOnZvaWQgMH19fSkpLGsuc3R5bGV8fChtLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHR8fHZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD1iKyIifX0pO3ZhciBzYj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSx0Yj0vXig/OmF8YXJlYSkkL2k7bS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1tLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09dm9pZCAwLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGIpe319KX19KSxtLmV4dGVuZCh7cHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IW0uaXNYTUxEb2MoYSksZiYmKGI9bS5wcm9wRml4W2JdfHxiLGU9bS5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW0uZmluZC5hdHRyKGEsInRhYmluZGV4Iik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6c2IudGVzdChhLm5vZGVOYW1lKXx8dGIudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX19KSxrLmhyZWZOb3JtYWxpemVkfHxtLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXttLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxrLm9wdFNlbGVjdGVkfHwobS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSxtLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe20ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxrLmVuY3R5cGV8fChtLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKTt2YXIgdWI9L1tcdFxyXG5cZl0vZzttLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9InN0cmluZyI9PXR5cGVvZiBhJiZhO2lmKG0uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoailmb3IoYj0oYXx8IiIpLm1hdGNoKEUpfHxbXTtpPmg7aCsrKWlmKGM9dGhpc1toXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWIsIiAiKToiICIpKXtmPTA7d2hpbGUoZT1iW2YrK10pZC5pbmRleE9mKCIgIitlKyIgIik8MCYmKGQrPWUrIiAiKTtnPW0udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgYSYmYTtpZihtLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXttKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGopZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aT5oO2grKylpZihjPXRoaXNbaF0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHViLCIgIik6IiIpKXtmPTA7d2hpbGUoZT1iW2YrK10pd2hpbGUoZC5pbmRleE9mKCIgIitlKyIgIik+PTApZD1kLnJlcGxhY2UoIiAiK2UrIiAiLCIgIik7Zz1hP20udHJpbShkKToiIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXttKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1jKXt2YXIgYixkPTAsZT1tKHRoaXMpLGY9YS5tYXRjaChFKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZShjPT09S3x8ImJvb2xlYW4iPT09YykmJih0aGlzLmNsYXNzTmFtZSYmbS5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjptLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWIsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pLG0uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG0uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9fSk7dmFyIHZiPW0ubm93KCksd2I9L1w/Lyx4Yj0vKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nO20ucGFyc2VKU09OPWZ1bmN0aW9uKGIpe2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYisiIik7dmFyIGMsZD1udWxsLGU9bS50cmltKGIrIiIpO3JldHVybiBlJiYhbS50cmltKGUucmVwbGFjZSh4YixmdW5jdGlvbihhLGIsZSxmKXtyZXR1cm4gYyYmYiYmKGQ9MCksMD09PWQ/YTooYz1lfHxiLGQrPSFmLSFlLCIiKX0pKT9GdW5jdGlvbigicmV0dXJuICIrZSkoKTptLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LG0ucGFyc2VYTUw9ZnVuY3Rpb24oYil7dmFyIGMsZDtpZighYnx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZD1uZXcgRE9NUGFyc2VyLGM9ZC5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIHliLHpiLEFiPS8jLiokLyxCYj0vKFs/Jl0pXz1bXiZdKi8sQ2I9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxEYj0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxFYj0vXig/OkdFVHxIRUFEKSQvLEZiPS9eXC9cLy8sR2I9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sSGI9e30sSWI9e30sSmI9IiovIi5jb25jYXQoIioiKTt0cnl7emI9bG9jYXRpb24uaHJlZn1jYXRjaChLYil7emI9eS5jcmVhdGVFbGVtZW50KCJhIiksemIuaHJlZj0iIix6Yj16Yi5ocmVmfXliPUdiLmV4ZWMoemIudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIExiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbXTtpZihtLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gTWIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09SWI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxtLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBOYihhLGIpe3ZhciBjLGQsZT1tLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZtLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gT2IoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gUGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1tLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6emIsdHlwZToiR0VUIixpc0xvY2FsOkRiLnRlc3QoeWJbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6SmIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjptLnBhcnNlSlNPTiwidGV4dCB4bWwiOm0ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP05iKE5iKGEsbS5hamF4U2V0dGluZ3MpLGIpOk5iKG0uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOkxiKEhiKSxhamF4VHJhbnNwb3J0OkxiKEliKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1tLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxuPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9tKGwpOm0uZXZlbnQsbz1tLkRlZmVycmVkKCkscD1tLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighail7aj17fTt3aGlsZShiPUNiLmV4ZWMoZikpaltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1qW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZjpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gaSYmaS5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fHpiKSsiIikucmVwbGFjZShBYiwiIikucmVwbGFjZShGYix5YlsxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1tLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihjPUdiLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFjfHxjWzFdPT09eWJbMV0mJmNbMl09PT15YlsyXSYmKGNbM118fCgiaHR0cDoiPT09Y1sxXT8iODAiOiI0NDMiKSk9PT0oeWJbM118fCgiaHR0cDoiPT09eWJbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1tLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSksTWIoSGIsayxiLHYpLDI9PT10KXJldHVybiB2O2g9bS5ldmVudCYmay5nbG9iYWwsaCYmMD09PW0uYWN0aXZlKysmJm0uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0hRWIudGVzdChrLnR5cGUpLGU9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZT1rLnVybCs9KHdiLnRlc3QoZSk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPUJiLnRlc3QoZSk/ZS5yZXBsYWNlKEJiLCIkMV89Iit2YisrKTplKyh3Yi50ZXN0KGUpPyImIjoiPyIpKyJfPSIrdmIrKykpLGsuaWZNb2RpZmllZCYmKG0ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixtLmxhc3RNb2RpZmllZFtlXSksbS5ldGFnW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG0uZXRhZ1tlXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK0piKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoZCBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGQsay5oZWFkZXJzW2RdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihkIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbZF0oa1tkXSk7aWYoaT1NYihJYixrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGgmJm4udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxpLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGMsZCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGk9dm9pZCAwLGY9ZHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJih1PU9iKGssdixjKSksdT1QYihrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobS5sYXN0TW9kaWZpZWRbZV09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG0uZXRhZ1tlXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxoJiZuLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGgmJihuLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbS5hY3RpdmV8fG0uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG0uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe21bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG0uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG0uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG0uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG0uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbS5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7aWYobS5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPW0oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJjE9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXttKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9bSh0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1tLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXttKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bS5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG0odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG0uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB8fCFrLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpJiYibm9uZSI9PT0oYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxtLmNzcyhhLCJkaXNwbGF5IikpfSxtLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFtLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciBRYj0vJTIwL2csUmI9L1xbXF0kLyxTYj0vXHI/XG4vZyxUYj0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksVWI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIFZiKGEsYixjLGQpe3ZhciBlO2lmKG0uaXNBcnJheShiKSltLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fFJiLnRlc3QoYSk/ZChhLGUpOlZiKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1tLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilWYihhKyJbIitlKyJdIixiW2VdLGMsZCl9bS5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bS5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW0uYWpheFNldHRpbmdzJiZtLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbS5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW0uaXNQbGFpbk9iamVjdChhKSltLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKVZiKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKFFiLCIrIil9LG0uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW0ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP20ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW0odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZVYi50ZXN0KHRoaXMubm9kZU5hbWUpJiYhVGIudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVcudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1tKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bS5pc0FycmF5KGMpP20ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShTYiwiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoU2IsIlxyXG4iKX19KS5nZXQoKX19KSxtLmFqYXhTZXR0aW5ncy54aHI9dm9pZCAwIT09YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmWmIoKXx8JGIoKX06WmI7dmFyIFdiPTAsWGI9e30sWWI9bS5hamF4U2V0dGluZ3MueGhyKCk7YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIFhiKVhiW2FdKHZvaWQgMCwhMCl9KSxrLmNvcnM9ISFZYiYmIndpdGhDcmVkZW50aWFscyJpbiBZYixZYj1rLmFqYXg9ISFZYixZYiYmbS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxrLmNvcnMpe3ZhciBiO3JldHVybntzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytXYjtpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZSBpbiBjKXZvaWQgMCE9PWNbZV0mJmYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0rIiIpO2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYj1mdW5jdGlvbihjLGUpe3ZhciBoLGksajtpZihiJiYoZXx8ND09PWYucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIFhiW2ddLGI9dm9pZCAwLGYub25yZWFkeXN0YXRlY2hhbmdlPW0ubm9vcCxlKTQhPT1mLnJlYWR5U3RhdGUmJmYuYWJvcnQoKTtlbHNle2o9e30saD1mLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0JiYoai50ZXh0PWYucmVzcG9uc2VUZXh0KTt0cnl7aT1mLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1ofHwhYS5pc0xvY2FsfHxhLmNyb3NzRG9tYWluPzEyMjM9PT1oJiYoaD0yMDQpOmg9ai50ZXh0PzIwMDo0MDR9aiYmZChoLGksaixmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYS5hc3luYz80PT09Zi5yZWFkeVN0YXRlP3NldFRpbWVvdXQoYik6Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9WGJbZ109YjpiKCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYih2b2lkIDAsITApfX19fSk7ZnVuY3Rpb24gWmIoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gJGIoKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1tLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBtLmdsb2JhbEV2YWwoYSksYX19fSksbS5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG0uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPXkuaGVhZHx8bSgiaGVhZCIpWzBdfHx5LmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9eS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxlKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgX2I9W10sYWM9Lyg9KVw/KD89JnwkKXxcP1w/LzttLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9X2IucG9wKCl8fG0uZXhwYW5kbysiXyIrdmIrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG0uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGFjLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmYWMudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW0uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGFjLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPSh3Yi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bS5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssX2IucHVzaChlKSksZyYmbS5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbS5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fHk7dmFyIGQ9dS5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPW0uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmbShlKS5yZW1vdmUoKSxtLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgYmM9bS5mbi5sb2FkO20uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZiYylyZXR1cm4gYmMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD49MCYmKGQ9bS50cmltKGEuc2xpY2UoaCxhLmxlbmd0aCkpLGE9YS5zbGljZSgwLGgpKSxtLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoZj0iUE9TVCIpLGcubGVuZ3RoPjAmJm0uYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2U9YXJndW1lbnRzLGcuaHRtbChkP20oIjxkaXY+IikuYXBwZW5kKG0ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuY29tcGxldGUoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goYyxlfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KSx0aGlzfSxtLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxtLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gbS5ncmVwKG0udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTt2YXIgY2M9YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gZGMoYSl7cmV0dXJuIG0uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1tLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW0uY3NzKGEsInBvc2l0aW9uIiksbD1tKGEpLG49e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1tLmNzcyhhLCJ0b3AiKSxpPW0uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZtLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbS5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG4udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG4ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG4pOmwuY3NzKG4pfX0sbS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9e3RvcDowLGxlZnQ6MH0sZT10aGlzWzBdLGY9ZSYmZS5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsbS5jb250YWlucyhiLGUpPyh0eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1LJiYoZD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxjPWRjKGYpLHt0b3A6ZC50b3ArKGMucGFnZVlPZmZzZXR8fGIuc2Nyb2xsVG9wKS0oYi5jbGllbnRUb3B8fDApLGxlZnQ6ZC5sZWZ0KyhjLnBhZ2VYT2Zmc2V0fHxiLnNjcm9sbExlZnQpLShiLmNsaWVudExlZnR8fDApfSk6ZH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9e3RvcDowLGxlZnQ6MH0sZD10aGlzWzBdO3JldHVybiJmaXhlZCI9PT1tLmNzcyhkLCJwb3NpdGlvbiIpP2I9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxtLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGM9YS5vZmZzZXQoKSksYy50b3ArPW0uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksYy5sZWZ0Kz1tLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1jLnRvcC1tLmNzcyhkLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1jLmxlZnQtbS5jc3MoZCwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjYzt3aGlsZShhJiYhbS5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bS5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxjY30pfX0pLG0uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO20uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9ZGMoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bShmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bShmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT1MYShrLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1KYShhLGIpLEhhLnRlc3QoYyk/bShhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxtLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe20uZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24oYyxkKXttLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJib29sZWFuIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gbS5pc1dpbmRvdyhiKT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZVsic2Nyb2xsIithXSxiLmJvZHlbIm9mZnNldCIrYV0sZVsib2Zmc2V0IithXSxlWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09ZD9tLmNzcyhiLGMsZyk6bS5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVsbCl9fSl9KSxtLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LG0uZm4uYW5kU2VsZj1tLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG19KTt2YXIgZWM9YS5qUXVlcnksZmM9YS4kO3JldHVybiBtLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW0mJihhLiQ9ZmMpLGImJmEualF1ZXJ5PT09bSYmKGEualF1ZXJ5PWVjKSxtfSx0eXBlb2YgYj09PUsmJihhLmpRdWVyeT1hLiQ9bSksbX0pOwo="></script> <link href="data:text/css;charset=utf-8,%0A%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20%2D30px%3B%0Amargin%2Dright%3A%20%2D30px%3B%0Awhite%2Dspace%3A%20normal%3B%0A%7D%0A%0Abody%20%3E%20%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20auto%3B%0Amargin%2Dright%3A%20auto%3B%0A%7D%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%2Dright%3A%2012px%3B%0Avertical%2Dalign%3A%20top%3B%0A%7D%0A%40media%20only%20screen%20and%20%28max%2Dwidth%3A480px%29%20%7B%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20block%3B%0Apadding%2Dright%3A%20inherit%3B%0A%7D%0A%7D%0A" rel="stylesheet" /> <script src="data:application/x-javascript;base64,IWZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QodGhpcyxhKSx0aGlzLl90eXBlcz17fSx0aGlzLl9zZXE9MH1yZXR1cm4gZShhLFt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl90eXBlc1thXTtjfHwoYz10aGlzLl90eXBlc1thXT17fSk7dmFyIGQ9InN1YiIrdGhpcy5fc2VxKys7cmV0dXJuIGNbZF09YixkfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3R5cGVzW2FdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBiKXtmb3IodmFyIGQgaW4gYylpZihjLmhhc093blByb3BlcnR5KGQpJiZjW2RdPT09YilyZXR1cm4gZGVsZXRlIGNbZF0sZDtyZXR1cm4hMX1pZigic3RyaW5nIj09dHlwZW9mIGIpcmV0dXJuISghY3x8IWNbYl0pJiYoZGVsZXRlIGNbYl0sYik7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGxpc3RlbmVyIil9fSx7a2V5OiJ0cmlnZ2VyIix2YWx1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fdHlwZXNbYV07Zm9yKHZhciBlIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShlKSYmZFtlXS5jYWxsKGMsYil9fV0pLGF9KCk7Yy5kZWZhdWx0PWZ9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSl7aWYoYSYmYS5fX2VzTW9kdWxlKXJldHVybiBhO3ZhciBiPXt9O2lmKG51bGwhPWEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihiW2NdPWFbY10pO3JldHVybiBiLmRlZmF1bHQ9YSxifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEmJmEuX19lc01vZHVsZT9hOntkZWZhdWx0OmF9fWZ1bmN0aW9uIGYoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBnKGEpe3ZhciBiPWEudmFyKCJmaWx0ZXJzZXQiKSxjPWIuZ2V0KCk7cmV0dXJuIGN8fChjPW5ldyBtLmRlZmF1bHQsYi5zZXQoYykpLGN9ZnVuY3Rpb24gaCgpe3JldHVybiByKyt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMuRmlsdGVySGFuZGxlPXZvaWQgMDt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxqPWEoIi4vZXZlbnRzIiksaz1lKGopLGw9YSgiLi9maWx0ZXJzZXQiKSxtPWUobCksbj1hKCIuL2dyb3VwIiksbz1lKG4pLHA9YSgiLi91dGlsIikscT1kKHApLHI9MTtjLkZpbHRlckhhbmRsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtmKHRoaXMsYSksdGhpcy5fZXZlbnRSZWxheT1uZXcgay5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sYyksdGhpcy5faWQ9ImZpbHRlciIraCgpLHRoaXMuc2V0R3JvdXAoYil9cmV0dXJuIGkoYSxbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYodGhpcy5fZ3JvdXAhPT1hJiYodGhpcy5fZ3JvdXB8fGEpJiYodGhpcy5fZmlsdGVyVmFyJiYodGhpcy5fZmlsdGVyVmFyLm9mZigiY2hhbmdlIix0aGlzLl92YXJPbkNoYW5nZVN1YiksdGhpcy5jbGVhcigpLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZmlsdGVyVmFyPW51bGwsdGhpcy5fZmlsdGVyU2V0PW51bGwpLHRoaXMuX2dyb3VwPWEsYSkpe2E9KDAsby5kZWZhdWx0KShhKSx0aGlzLl9maWx0ZXJTZXQ9ZyhhKSx0aGlzLl9maWx0ZXJWYXI9KDAsby5kZWZhdWx0KShhKS52YXIoImZpbHRlciIpO3ZhciBjPXRoaXMuX2ZpbHRlclZhci5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9ldmVudFJlbGF5LnRyaWdnZXIoImNoYW5nZSIsYSxiKX0pO3RoaXMuX3Zhck9uQ2hhbmdlU3ViPWN9fX0se2tleToiX21lcmdlRXh0cmFJbmZvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gcS5leHRlbmQoe30sdGhpcy5fZXh0cmFJbmZvP3RoaXMuX2V4dHJhSW5mbzpudWxsLGE/YTpudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShhKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxhKSx0aGlzLl9vbkNoYW5nZShiKSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihhLGIpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihhLGIpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGEpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksYX0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGE9PT1iPzA6YTxiPy0xOmE+Yj8xOnZvaWQgMH1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLmtleSxkKX19cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYyYmYShiLnByb3RvdHlwZSxjKSxkJiZhKGIsZCksYn19KCksZz1hKCIuL3V0aWwiKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QodGhpcyxhKSx0aGlzLnJlc2V0KCl9cmV0dXJuIGYoYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faGFuZGxlcz17fSx0aGlzLl9rZXlzPXt9LHRoaXMuX3ZhbHVlPW51bGwsdGhpcy5fYWN0aXZlSGFuZGxlcz0wfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihhLGIpe251bGwhPT1iJiYoYj1iLnNsaWNlKDApLGIuc29ydChlKSk7dmFyIGM9KDAsZy5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbYV0sYiksZD1jLmFkZGVkLGY9Yy5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbYV09Yjtmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl0aGlzLl9rZXlzW2RbaF1dPSh0aGlzLl9rZXlzW2RbaF1dfHwwKSsxO2Zvcih2YXIgaT0wO2k8Zi5sZW5ndGg7aSsrKXRoaXMuX2tleXNbZltpXV0tLTt0aGlzLl91cGRhdGVWYWx1ZShiKX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyxiPU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09Yil0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuX2tleXNbYVtjXV07ZD09PWImJnRoaXMuX3ZhbHVlLnB1c2goYVtjXSl9fX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbihhKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuX2hhbmRsZXNbYV0pe3ZhciBiPXRoaXMuX2hhbmRsZXNbYV07Ynx8KGI9W10pO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuX2tleXNbYltjXV0tLTtkZWxldGUgdGhpcy5faGFuZGxlc1thXSx0aGlzLl91cGRhdGVWYWx1ZSgpfX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWV9fSx7a2V5OiJfYWxsS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmtleXModGhpcy5fa2V5cyk7cmV0dXJuIGEuc29ydChlKSxhfX1dKSxhfSgpO2MuZGVmYXVsdD1ofSx7Ii4vdXRpbCI6MTF9XSw0OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfX1mdW5jdGlvbiBlKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZihhKXtpZihhJiYic3RyaW5nIj09dHlwZW9mIGEpcmV0dXJuIGsuaGFzT3duUHJvcGVydHkoYSl8fChrW2FdPW5ldyBsKGEpKSxrW2FdO2lmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgYT8idW5kZWZpbmVkIjpoKGEpKSYmYS5fdmFycyYmYS52YXIpcmV0dXJuIGE7aWYoQXJyYXkuaXNBcnJheShhKSYmMT09YS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYVswXSlyZXR1cm4gZihhWzBdKTt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZ3JvdXBOYW1lIGFyZ3VtZW50Iil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZC5rZXksZCl9fXJldHVybiBmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGMmJmEoYi5wcm90b3R5cGUsYyksZCYmYShiLGQpLGJ9fSgpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2MuZGVmYXVsdD1mO3ZhciBpPWEoIi4vdmFyIiksaj1kKGkpO2IuX19jcm9zc3RhbGtfZ3JvdXBzPWIuX19jcm9zc3RhbGtfZ3JvdXBzfHx7fTt2YXIgaz1iLl9fY3Jvc3N0YWxrX2dyb3VwcyxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtlKHRoaXMsYSksdGhpcy5uYW1lPWIsdGhpcy5fdmFycz17fX1yZXR1cm4gZyhhLFt7a2V5OiJ2YXIiLHZhbHVlOmZ1bmN0aW9uKGEpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoYSl8fCh0aGlzLl92YXJzW2FdPW5ldyBqLmRlZmF1bHQodGhpcyxhKSksdGhpcy5fdmFyc1thXX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFyIG5hbWUiKTtyZXR1cm4gdGhpcy5fdmFycy5oYXNPd25Qcm9wZXJ0eShhKX19XSksYX0oKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3ZhciI6MTJ9XSw1OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfX1mdW5jdGlvbiBlKGEpe3JldHVybiBrLnZhcihhKX1mdW5jdGlvbiBmKGEpe3JldHVybiBrLmhhcyhhKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGc9YSgiLi9ncm91cCIpLGg9ZChnKSxpPWEoIi4vc2VsZWN0aW9uIiksaj1hKCIuL2ZpbHRlciIpO2EoIi4vaW5wdXQiKSxhKCIuL2lucHV0X3NlbGVjdGl6ZSIpLGEoIi4vaW5wdXRfY2hlY2tib3hncm91cCIpLGEoIi4vaW5wdXRfc2xpZGVyIik7dmFyIGs9KDAsaC5kZWZhdWx0KSgiZGVmYXVsdCIpO2IuU2hpbnkmJmIuU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoInVwZGF0ZS1jbGllbnQtdmFsdWUiLGZ1bmN0aW9uKGEpeyJzdHJpbmciPT10eXBlb2YgYS5ncm91cD8oMCxoLmRlZmF1bHQpKGEuZ3JvdXApLnZhcihhLm5hbWUpLnNldChhLnZhbHVlKTplKGEubmFtZSkuc2V0KGEudmFsdWUpfSk7dmFyIGw9e2dyb3VwOmguZGVmYXVsdCx2YXI6ZSxoYXM6ZixTZWxlY3Rpb25IYW5kbGU6aS5TZWxlY3Rpb25IYW5kbGUsRmlsdGVySGFuZGxlOmouRmlsdGVySGFuZGxlfTtjLmRlZmF1bHQ9bCxiLmNyb3NzdGFsaz1sfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2dyb3VwIjo0LCIuL2lucHV0Ijo2LCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiOjcsIi4vaW5wdXRfc2VsZWN0aXplIjo4LCIuL2lucHV0X3NsaWRlciI6OSwiLi9zZWxlY3Rpb24iOjEwfV0sNjpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtpW2IuY2xhc3NOYW1lXT1iLGEuZG9jdW1lbnQmJiJjb21wbGV0ZSIhPT1hLmRvY3VtZW50LnJlYWR5U3RhdGU/aChmdW5jdGlvbigpe2QoKX0pOmEuZG9jdW1lbnQmJnNldFRpbWVvdXQoZCwxMDApfWZ1bmN0aW9uIGQoKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWlbYV07aCgiLiIrYi5jbGFzc05hbWUpLm5vdCgiLmNyb3NzdGFsay1pbnB1dC1ib3VuZCIpLmVhY2goZnVuY3Rpb24oYSxjKXtnKGIsYyl9KX0pfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEucmVwbGFjZSgvKFshIiMkJSYnKCkqKywuXC86Ozw9Pj9AXFtcXFxdXmB7fH1+XSkvZywiXFwkMSIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9aChhKTtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGIuaGFzQ2xhc3MoYykmJiFiLmhhc0NsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKSl7dmFyIGQ9aVtjXTtnKGQsYSl9fSl9ZnVuY3Rpb24gZyhhLGIpe3ZhciBjPWgoYikuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIitlKGIuaWQpKyInXSIpLGQ9SlNPTi5wYXJzZShjWzBdLmlubmVyVGV4dCksZj1hLmZhY3RvcnkoYixkKTtoKGIpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIsZiksaChiKS5hZGRDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMucmVnaXN0ZXI9Yjt2YXIgaD1hLmpRdWVyeSxpPXt9O2EuU2hpbnkmJiFmdW5jdGlvbigpe3ZhciBiPW5ldyBhLlNoaW55LklucHV0QmluZGluZyxjPWEualF1ZXJ5O2MuZXh0ZW5kKGIse2ZpbmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGMoYSkuZmluZCgiLmNyb3NzdGFsay1pbnB1dCIpfSxpbml0aWFsaXplOmZ1bmN0aW9uKGEpe2MoYSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHxmKGEpfSxnZXRJZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pZH0sZ2V0VmFsdWU6ZnVuY3Rpb24oYSl7fSxzZXRWYWx1ZTpmdW5jdGlvbihhLGIpe30scmVjZWl2ZU1lc3NhZ2U6ZnVuY3Rpb24oYSxiKXt9LHN1YnNjcmliZTpmdW5jdGlvbihhLGIpe2MoYSkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIikucmVzdW1lKCl9LHVuc3Vic2NyaWJlOmZ1bmN0aW9uKGEpe2MoYSkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIikuc3VzcGVuZCgpfX0pLGEuU2hpbnkuaW5wdXRCaW5kaW5ncy5yZWdpc3RlcihiLCJjcm9zc3RhbGsuaW5wdXRCaW5kaW5nIil9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEpe2lmKGEmJmEuX19lc01vZHVsZSlyZXR1cm4gYTt2YXIgYj17fTtpZihudWxsIT1hKWZvcih2YXIgYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiYoYltjXT1hW2NdKTtyZXR1cm4gYi5kZWZhdWx0PWEsYn12YXIgZD1hKCIuL2lucHV0IiksZT1jKGQpLGY9YSgiLi9maWx0ZXIiKSxnPWIualF1ZXJ5O2UucmVnaXN0ZXIoe2NsYXNzTmFtZToiY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZi5GaWx0ZXJIYW5kbGUoYi5ncm91cCksZD12b2lkIDAsZT1nKGEpO3JldHVybiBlLm9uKCJjaGFuZ2UiLCJpbnB1dFt0eXBlPSdjaGVja2JveCddIixmdW5jdGlvbigpe3ZhciBhPWUuZmluZCgiaW5wdXRbdHlwZT0nY2hlY2tib3gnXTpjaGVja2VkIik7MD09PWEubGVuZ3RoPyhkPW51bGwsYy5jbGVhcigpKTohZnVuY3Rpb24oKXt2YXIgZT17fTthLmVhY2goZnVuY3Rpb24oKXtiLm1hcFt0aGlzLnZhbHVlXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2VbYV09ITB9KX0pO3ZhciBmPU9iamVjdC5rZXlzKGUpO2Yuc29ydCgpLGQ9ZixjLnNldChmKX0oKX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7Yy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtkJiZjLnNldChkKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sODpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhKXtpZihhJiZhLl9fZXNNb2R1bGUpcmV0dXJuIGE7dmFyIGI9e307aWYobnVsbCE9YSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGJbY109YVtjXSk7cmV0dXJuIGIuZGVmYXVsdD1hLGJ9dmFyIGQ9YSgiLi9pbnB1dCIpLGU9YyhkKSxmPWEoIi4vdXRpbCIpLGc9YyhmKSxoPWEoIi4vZmlsdGVyIiksaT1iLmpRdWVyeTtlLnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zZWxlY3QiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1be3ZhbHVlOiIiLGxhYmVsOiIoQWxsKSJ9XSxkPWcuZGF0YWZyYW1lVG9EMyhiLml0ZW1zKSxlPXtvcHRpb25zOmMuY29uY2F0KGQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0sZj1pKGEpLmZpbmQoInNlbGVjdCIpWzBdLGo9aShmKS5zZWxlY3RpemUoZSlbMF0uc2VsZWN0aXplLGs9bmV3IGguRmlsdGVySGFuZGxlKGIuZ3JvdXApLGw9dm9pZCAwO3JldHVybiBqLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7MD09PWouaXRlbXMubGVuZ3RoPyhsPW51bGwsay5jbGVhcigpKTohZnVuY3Rpb24oKXt2YXIgYT17fTtqLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oYyl7Yi5tYXBbY10uZm9yRWFjaChmdW5jdGlvbihiKXthW2JdPSEwfSl9KTt2YXIgYz1PYmplY3Qua2V5cyhhKTtjLnNvcnQoKSxsPWMsay5zZXQoYyl9KCl9KSx7c3VzcGVuZDpmdW5jdGlvbigpe2suY2xlYXIoKX0scmVzdW1lOmZ1bmN0aW9uKCl7bCYmay5zZXQobCl9fX19KX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9pbnB1dCI6NiwiLi91dGlsIjoxMX1dLDk6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSl7aWYoYSYmYS5fX2VzTW9kdWxlKXJldHVybiBhO3ZhciBiPXt9O2lmKG51bGwhPWEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihiW2NdPWFbY10pO3JldHVybiBiLmRlZmF1bHQ9YSxifWZ1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9YS50b1N0cmluZygpO2MubGVuZ3RoPGI7KWM9IjAiK2M7cmV0dXJuIGN9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIERhdGU/YS5nZXRVVENGdWxsWWVhcigpKyItIitkKGEuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitkKGEuZ2V0VVRDRGF0ZSgpLDIpOm51bGx9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9W10sZD0hMCxlPSExLGY9dm9pZCAwO3RyeXtmb3IodmFyIGcsaD1hW1N5bWJvbC5pdGVyYXRvcl0oKTshKGQ9KGc9aC5uZXh0KCkpLmRvbmUpJiYoYy5wdXNoKGcudmFsdWUpLCFifHxjLmxlbmd0aCE9PWIpO2Q9ITApO31jYXRjaChhKXtlPSEwLGY9YX1maW5hbGx5e3RyeXshZCYmaC5yZXR1cm4mJmgucmV0dXJuKCl9ZmluYWxseXtpZihlKXRocm93IGZ9fXJldHVybiBjfXJldHVybiBmdW5jdGlvbihiLGMpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGI7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChiKSlyZXR1cm4gYShiLGMpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksZz1hKCIuL2lucHV0IiksaD1jKGcpLGk9YSgiLi9maWx0ZXIiKSxqPWIualF1ZXJ5LGs9Yi5zdHJmdGltZTtoLnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7dmFyIGE9aC5kYXRhKCJpb25SYW5nZVNsaWRlciIpLnJlc3VsdCxiPXZvaWQgMCxjPWguZGF0YSgiZGF0YS10eXBlIik7cmV0dXJuIGI9ImRhdGUiPT09Yz9mdW5jdGlvbihhKXtyZXR1cm4gZShuZXcgRGF0ZSgrYSkpfToiZGF0ZXRpbWUiPT09Yz9mdW5jdGlvbihhKXtyZXR1cm4rYS8xZTN9OmZ1bmN0aW9uKGEpe3JldHVybithfSwiZG91YmxlIj09PWguZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5vcHRpb25zLnR5cGU/W2IoYS5mcm9tKSxiKGEudG8pXTpiKGEuZnJvbSl9dmFyIGQ9bmV3IGkuRmlsdGVySGFuZGxlKGIuZ3JvdXApLGc9e30saD1qKGEpLmZpbmQoImlucHV0IiksbD1oLmRhdGEoImRhdGEtdHlwZSIpLG09aC5kYXRhKCJ0aW1lLWZvcm1hdCIpLG49dm9pZCAwO2lmKCJkYXRlIj09PWwpbj1rLnV0YygpLGcucHJldHRpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4obSxuZXcgRGF0ZShhKSl9O2Vsc2UgaWYoImRhdGV0aW1lIj09PWwpe3ZhciBvPWguZGF0YSgidGltZXpvbmUiKTtuPW8/ay50aW1lem9uZShvKTprLGcucHJldHRpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4obSxuZXcgRGF0ZShhKSl9fWguaW9uUmFuZ2VTbGlkZXIoZyk7dmFyIHA9bnVsbDtyZXR1cm4gaC5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihhKXtpZighaC5kYXRhKCJ1cGRhdGluZyIpJiYhaC5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciBlPWMoKSxnPWYoZSwyKSxpPWdbMF0saj1nWzFdLGs9W10sbD0wO2w8Yi52YWx1ZXMubGVuZ3RoO2wrKyl7dmFyIG09Yi52YWx1ZXNbbF07bT49aSYmbTw9aiYmay5wdXNoKGIua2V5c1tsXSl9ay5zb3J0KCksZC5zZXQoaykscD1rfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7ZC5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtwJiZkLnNldChwKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtpZihhJiZhLl9fZXNNb2R1bGUpcmV0dXJuIGE7dmFyIGI9e307aWYobnVsbCE9YSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGJbY109YVtjXSk7cmV0dXJuIGIuZGVmYXVsdD1hLGJ9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZihhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxjLlNlbGVjdGlvbkhhbmRsZT12b2lkIDA7dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLmtleSxkKX19cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYyYmYShiLnByb3RvdHlwZSxjKSxkJiZhKGIsZCksYn19KCksaD1hKCIuL2V2ZW50cyIpLGk9ZShoKSxqPWEoIi4vZ3JvdXAiKSxrPWUoaiksbD1hKCIuL3V0aWwiKSxtPWQobCk7Yy5TZWxlY3Rpb25IYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtmKHRoaXMsYSksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IG0uU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPW0uZXh0ZW5kKHtzZW5kZXI6dGhpc30sYyksdGhpcy5zZXRHcm91cChiKX1yZXR1cm4gZyhhLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih0aGlzLl9ncm91cCE9PWEmJih0aGlzLl9ncm91cHx8YSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1hLGEpKXt0aGlzLl92YXI9KDAsay5kZWZhdWx0KShhKS52YXIoInNlbGVjdGlvbiIpO3ZhciBjPXRoaXMuX3Zhci5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9ldmVudFJlbGF5LnRyaWdnZXIoImNoYW5nZSIsYSxiKX0pO3RoaXMuX3Zhck9uQ2hhbmdlU3ViPWN9fX0se2tleToiX21lcmdlRXh0cmFJbmZvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gbS5leHRlbmQoe30sdGhpcy5fZXh0cmFJbmZvP3RoaXMuX2V4dHJhSW5mbzpudWxsLGE/YTpudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoYSx0aGlzLl9tZXJnZUV4dHJhSW5mbyhiKSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oYSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oYSxiKX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoYSxiKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxhfSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGUoYSl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsYz1BcnJheShiPjE/Yi0xOjApLGQ9MTtkPGI7ZCsrKWNbZC0xXT1hcmd1bWVudHNbZF07Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBmJiZudWxsIT09Zilmb3IodmFyIGcgaW4gZilmLmhhc093blByb3BlcnR5KGcpJiYoYVtnXT1mW2ddKX1yZXR1cm4gYX1mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWlmKGFbYl08PWFbYi0xXSl0aHJvdyBuZXcgRXJyb3IoIkxpc3QgaXMgbm90IHNvcnRlZCBvciBjb250YWlucyBkdXBsaWNhdGUiKX1mdW5jdGlvbiBnKGEsYil7dmFyIGM9MCxkPTA7YXx8KGE9W10pLGJ8fChiPVtdKTt2YXIgZT1bXSxnPVtdO2ZvcihmKGEpLGYoYik7YzxhLmxlbmd0aCYmZDxiLmxlbmd0aDspYVtjXT09PWJbZF0/KGMrKyxkKyspOmFbY108YltkXT9lLnB1c2goYVtjKytdKTpnLnB1c2goYltkKytdKTtyZXR1cm4gYzxhLmxlbmd0aCYmKGU9ZS5jb25jYXQoYS5zbGljZShjKSkpLGQ8Yi5sZW5ndGgmJihnPWcuY29uY2F0KGIuc2xpY2UoZCkpKSx7cmVtb3ZlZDplLGFkZGVkOmd9fWZ1bmN0aW9uIGgoYSl7dmFyIGI9W10sYz12b2lkIDA7Zm9yKHZhciBkIGluIGEpe2lmKGEuaGFzT3duUHJvcGVydHkoZCkmJmIucHVzaChkKSwib2JqZWN0IiE9PWooYVtkXSl8fCJ1bmRlZmluZWQiPT10eXBlb2YgYVtkXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjJiZjIT09YVtkXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO2M9YVtkXS5sZW5ndGh9Zm9yKHZhciBlPVtdLGY9dm9pZCAwLGc9MDtnPGM7ZysrKXtmPXt9O2Zvcih2YXIgaD0wO2g8Yi5sZW5ndGg7aCsrKWZbYltoXV09YVtiW2hdXVtnXTtlLnB1c2goZil9cmV0dXJuIGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZC5rZXksZCl9fXJldHVybiBmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGMmJmEoYi5wcm90b3R5cGUsYyksZCYmYShiLGQpLGJ9fSgpLGo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2MuZXh0ZW5kPWUsYy5jaGVja1NvcnRlZD1mLGMuZGlmZlNvcnRlZExpc3RzPWcsYy5kYXRhZnJhbWVUb0QzPWg7Yy5TdWJzY3JpcHRpb25UcmFja2VyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtkKHRoaXMsYSksdGhpcy5fZW1pdHRlcj1iLHRoaXMuX3N1YnM9e319cmV0dXJuIGkoYSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fZW1pdHRlci5vbihhLGIpO3JldHVybiB0aGlzLl9zdWJzW2NdPWEsY319LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9lbWl0dGVyLm9mZihhLGIpO3JldHVybiBjJiZkZWxldGUgdGhpcy5fc3Vic1tjXSxjfX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMoYikuZm9yRWFjaChmdW5jdGlvbihjKXthLl9lbWl0dGVyLm9mZihiW2NdLGMpfSl9fV0pLGF9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZShhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYX0sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxoPWEoIi4vZXZlbnRzIiksaT1kKGgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyxkKXtlKHRoaXMsYSksdGhpcy5fZ3JvdXA9Yix0aGlzLl9uYW1lPWMsdGhpcy5fdmFsdWU9ZCx0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gZyhhLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihhLGMpe2lmKHRoaXMuX3ZhbHVlIT09YSl7dmFyIGQ9dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9YTt2YXIgZT17fTtpZihjJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGM/InVuZGVmaW5lZCI6ZihjKSkpZm9yKHZhciBnIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShnKSYmKGVbZ109Y1tnXSk7ZS5vbGRWYWx1ZT1kLGUudmFsdWU9YSx0aGlzLl9ldmVudHMudHJpZ2dlcigiY2hhbmdlIixlLHRoaXMpLGIuU2hpbnkmJmIuU2hpbnkub25JbnB1dENoYW5nZSYmYi5TaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtIisobnVsbCE9PXRoaXMuX2dyb3VwLm5hbWU/dGhpcy5fZ3JvdXAubmFtZSsiLSI6IiIpK3RoaXMuX25hbWUsInVuZGVmaW5lZCI9PXR5cGVvZiBhP251bGw6YSl9fX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2V2ZW50cy5vbihhLGIpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9ldmVudHMub2ZmKGEsYil9fV0pLGF9KCk7Yy5kZWZhdWx0PWp9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9ldmVudHMiOjF9XX0se30sWzVdKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3Jvc3N0YWxrLm1pbi5qcy5tYXA="></script> <link href="data:text/css;charset=utf-8,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A" rel="stylesheet" /> <script src="data:application/x-javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjI5LjIKKiBDb3B5cmlnaHQgMjAxMi0yMDE3LCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBlO2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGUuUGxvdGx5PXQoKX19KGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe2Z1bmN0aW9uIGkobyxzKXtpZighcltvXSl7aWYoIWVbb10pe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFzJiZsKXJldHVybiBsKG8sITApO2lmKGEpcmV0dXJuIGEobywhMCk7dmFyIHU9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IHUuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsdX12YXIgYz1yW29dPXtleHBvcnRzOnt9fTtlW29dWzBdLmNhbGwoYy5leHBvcnRzLGZ1bmN0aW9uKHQpe3ZhciByPWVbb11bMV1bdF07cmV0dXJuIGkocnx8dCl9LGMsYy5leHBvcnRzLHQsZSxyLG4pfXJldHVybiByW29dLmV4cG9ydHN9Zm9yKHZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLG89MDtvPG4ubGVuZ3RoO28rKylpKG5bb10pO3JldHVybiBpfSh7MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zcmMvbGliIiksaT17IlgsWCBkaXYiOiJmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7bWFyZ2luOjA7cGFkZGluZzowOyIsIlggaW5wdXQsWCBidXR0b24iOiJmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7IiwiWCBpbnB1dDpmb2N1cyxYIGJ1dHRvbjpmb2N1cyI6Im91dGxpbmU6bm9uZTsiLCJYIGEiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIGE6aG92ZXIiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIC5jcmlzcCI6InNoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnVzZXItc2VsZWN0LW5vbmUiOiItd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTsiLCJYIHN2ZyI6Im92ZXJmbG93OmhpZGRlbjsiLCJYIHN2ZyBhIjoiZmlsbDojNDQ3YWRiOyIsIlggc3ZnIGE6aG92ZXIiOiJmaWxsOiMzYzZkYzU7IiwiWCAubWFpbi1zdmciOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTsiLCJYIC5tYWluLXN2ZyAuZHJhZ2xheWVyIjoicG9pbnRlci1ldmVudHM6YWxsOyIsIlggLmN1cnNvci1kZWZhdWx0IjoiY3Vyc29yOmRlZmF1bHQ7IiwiWCAuY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3I6cG9pbnRlcjsiLCJYIC5jdXJzb3ItY3Jvc3NoYWlyIjoiY3Vyc29yOmNyb3NzaGFpcjsiLCJYIC5jdXJzb3ItbW92ZSI6ImN1cnNvcjptb3ZlOyIsIlggLmN1cnNvci1jb2wtcmVzaXplIjoiY3Vyc29yOmNvbC1yZXNpemU7IiwiWCAuY3Vyc29yLXJvdy1yZXNpemUiOiJjdXJzb3I6cm93LXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnMtcmVzaXplIjoiY3Vyc29yOm5zLXJlc2l6ZTsiLCJYIC5jdXJzb3ItZXctcmVzaXplIjoiY3Vyc29yOmV3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itc3ctcmVzaXplIjoiY3Vyc29yOnN3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itcy1yZXNpemUiOiJjdXJzb3I6cy1yZXNpemU7IiwiWCAuY3Vyc29yLXNlLXJlc2l6ZSI6ImN1cnNvcjpzZS1yZXNpemU7IiwiWCAuY3Vyc29yLXctcmVzaXplIjoiY3Vyc29yOnctcmVzaXplOyIsIlggLmN1cnNvci1lLXJlc2l6ZSI6ImN1cnNvcjplLXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnctcmVzaXplIjoiY3Vyc29yOm53LXJlc2l6ZTsiLCJYIC5jdXJzb3Itbi1yZXNpemUiOiJjdXJzb3I6bi1yZXNpemU7IiwiWCAuY3Vyc29yLW5lLXJlc2l6ZSI6ImN1cnNvcjpuZS1yZXNpemU7IiwiWCAubW9kZWJhciI6InBvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7cmlnaHQ6MnB4O3otaW5kZXg6MTAwMTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC43KTsiLCJYIC5tb2RlYmFyLS1ob3ZlciI6Im9wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tcy10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1vLXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczsiLCJYOmhvdmVyIC5tb2RlYmFyLS1ob3ZlciI6Im9wYWNpdHk6MTsiLCJYIC5tb2RlYmFyLWdyb3VwIjoiZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luLWxlZnQ6OHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7IiwiWCAubW9kZWJhci1ncm91cDpmaXJzdC1jaGlsZCI6Im1hcmdpbi1sZWZ0OjBweDsiLCJYIC5tb2RlYmFyLWJ0biI6InBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94OyIsIlggLm1vZGViYXItYnRuIHN2ZyI6InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHg7IiwiWCAubW9kZWJhci1idG4gcGF0aCI6ImZpbGw6cmdiYSgwLDMxLDk1LDAuMyk7IiwiWCAubW9kZWJhci1idG4uYWN0aXZlIHBhdGgsWCAubW9kZWJhci1idG46aG92ZXIgcGF0aCI6ImZpbGw6cmdiYSgwLDIyLDcyLDAuNSk7IiwiWCAubW9kZWJhci1idG4ubW9kZWJhci1idG4tLWxvZ28iOiJwYWRkaW5nOjNweCAxcHg7IiwiWCAubW9kZWJhci1idG4ubW9kZWJhci1idG4tLWxvZ28gcGF0aCI6ImZpbGw6IzQ0N2FkYiAhaW1wb3J0YW50OyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTphZnRlciI6InBvc2l0aW9uOmFic29sdXRlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTtkaXNwbGF5Om5vbmU7b3BhY2l0eTowO3otaW5kZXg6MTAwMTtwb2ludGVyLWV2ZW50czpub25lO3RvcDoxMTAlO3JpZ2h0OjUwJTsiLCJYIFtkYXRhLXRpdGxlXTpob3ZlcjpiZWZvcmUsWCBbZGF0YS10aXRsZV06aG92ZXI6YWZ0ZXIiOiJkaXNwbGF5OmJsb2NrO29wYWNpdHk6MTsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDt6LWluZGV4OjEwMDI7bWFyZ2luLXRvcDotMTJweDtib3JkZXItYm90dG9tLWNvbG9yOiM2OTczOGE7bWFyZ2luLXJpZ2h0Oi02cHg7IiwiWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJjb250ZW50OmF0dHIoZGF0YS10aXRsZSk7YmFja2dyb3VuZDojNjk3MzhhO2NvbG9yOndoaXRlO3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTJweDt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLXJpZ2h0Oi0xOHB4O2JvcmRlci1yYWRpdXM6MnB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6d2hpdGU7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7IixZOiJmb250LWZhbWlseTonT3BlbiBTYW5zJztwb3NpdGlvbjpmaXhlZDt0b3A6NTBweDtyaWdodDoyMHB4O3otaW5kZXg6MTAwMDA7Zm9udC1zaXplOjEwcHQ7bWF4LXdpZHRoOjE4MHB4OyIsIlkgcCI6Im1hcmdpbjowOyIsIlkgLm5vdGlmaWVyLW5vdGUiOiJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwwLjkpO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlIjoiY29sb3I6I2ZmZjtvcGFjaXR5OjAuODtmbG9hdDpyaWdodDtwYWRkaW5nOjAgNXB4O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MjBweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7IiwiWSAubm90aWZpZXItY2xvc2U6aG92ZXIiOiJjb2xvcjojNDQ0O3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyOyJ9O2Zvcih2YXIgYSBpbiBpKXt2YXIgbz1hLnJlcGxhY2UoL14sLywiICwiKS5yZXBsYWNlKC9YL2csIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IikucmVwbGFjZSgvWS9nLCIucGxvdGx5LW5vdGlmaWVyIik7bi5hZGRTdHlsZVJ1bGUobyxpW2FdKX19LHsiLi4vc3JjL2xpYiI6NzI0fV0sMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3VuZG86e3dpZHRoOjg1Ny4xLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGhvbWU6e3dpZHRoOjkyOC42LHBhdGg6Im03ODYgMjk2di0yNjdxMC0xNS0xMS0yNnQtMjUtMTBoLTIxNHYyMTRoLTE0M3YtMjE0aC0yMTRxLTE1IDAtMjUgMTB0LTExIDI2djI2N3EwIDEgMCAydDAgMmwzMjEgMjY0IDMyMS0yNjRxMS0xIDEtNHogbTEyNCAzOWwtMzQtNDFxLTUtNS0xMi02aC0ycS03IDAtMTIgM2wtMzg2IDMyMi0zODYtMzIycS03LTQtMTMtNC03IDItMTIgN2wtMzUgNDFxLTQgNS0zIDEzdDYgMTJsNDAxIDMzNHExOCAxNSA0MiAxNXQ0My0xNWwxMzYtMTE0djEwOXEwIDggNSAxM3QxMyA1aDEwN3E4IDAgMTMtNXQ1LTEzdi0yMjdsMTIyLTEwMnE1LTUgNi0xMnQtNC0xM3oiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLHBhdGg6Im01MTggMzg2cTAgOC01IDEzdC0xMyA1cS0zNyAwLTYzLTI3dC0yNi02M3EwLTggNS0xM3QxMy01IDEyIDUgNSAxM3EwIDIzIDE2IDM4dDM4IDE2cTggMCAxMyA1dDUgMTN6IG0xMjUtNzNxMC01OS00Mi0xMDF0LTEwMS00Mi0xMDEgNDItNDIgMTAxIDQyIDEwMSAxMDEgNDIgMTAxLTQyIDQyLTEwMXogbS01NzItMzIwaDg1OHY3MWgtODU4di03MXogbTY0MyAzMjBxMCA4OS02MiAxNTJ0LTE1MiA2Mi0xNTEtNjItNjMtMTUyIDYzLTE1MSAxNTEtNjMgMTUyIDYzIDYyIDE1MXogbS01NzEgMzU4aDIxNHY3MmgtMjE0di03MnogbS03Mi0xMDdoODU4djE0M2gtNDYybC0zNi03MWgtMzYwdi03MnogbTkyOSAxNDN2LTcxNHEwLTMwLTIxLTUxdC01MC0yMWgtODU4cS0yOSAwLTUwIDIxdC0yMSA1MXY3MTRxMCAzMCAyMSA1MXQ1MCAyMWg4NThxMjkgMCA1MC0yMXQyMS01MXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSx6b29tYm94Ont3aWR0aDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0scGFuOnt3aWR0aDoxZTMscGF0aDoibTEwMDAgMzUwbC0xODcgMTg4IDAtMTI1LTI1MCAwIDAgMjUwIDEyNSAwLTE4OCAxODctMTg3LTE4NyAxMjUgMCAwLTI1MC0yNTAgMCAwIDEyNS0xODgtMTg4IDE4Ni0xODcgMCAxMjUgMjUyIDAgMC0yNTAtMTI1IDAgMTg3LTE4OCAxODggMTg4LTEyNSAwIDAgMjUwIDI1MCAwIDAtMTI2IDE4NyAxODh6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sem9vbV9wbHVzOnt3aWR0aDoxZTMscGF0aDoibTEgNzg3bDAtODc1IDg3NSAwIDAgODc1LTg3NSAweiBtNjg3LTUwMGwtMTg3IDAgMC0xODctMTI1IDAgMCAxODctMTg4IDAgMCAxMjUgMTg4IDAgMCAxODcgMTI1IDAgMC0xODcgMTg3IDAgMC0xMjV6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sem9vbV9taW51czp7d2lkdGg6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGF1dG9zY2FsZTp7d2lkdGg6MWUzLHBhdGg6Im0yNTAgODUwbC0xODcgMC02MyAwIDAtNjIgMC0xODggNjMgMCAwIDE4OCAxODcgMCAwIDYyeiBtNjg4IDBsLTE4OCAwIDAtNjIgMTg4IDAgMC0xODggNjIgMCAwIDE4OCAwIDYyLTYyIDB6IG0tODc1LTkzOGwwIDE4OC02MyAwIDAtMTg4IDAtNjIgNjMgMCAxODcgMCAwIDYyLTE4NyAweiBtODc1IDE4OGwwLTE4OC0xODggMCAwLTYyIDE4OCAwIDYyIDAgMCA2MiAwIDE4OC02MiAweiBtLTEyNSAxODhsLTEgMC05My05NC0xNTYgMTU2IDE1NiAxNTYgOTItOTMgMiAwIDAgMjUwLTI1MCAwIDAtMiA5My05Mi0xNTYtMTU2LTE1NiAxNTYgOTQgOTIgMCAyLTI1MCAwIDAtMjUwIDAgMCA5MyA5MyAxNTctMTU2LTE1Ny0xNTYtOTMgOTQgMCAwIDAtMjUwIDI1MCAwIDAgMC05NCA5MyAxNTYgMTU3IDE1Ni0xNTctOTMtOTMgMCAwIDI1MCAwIDAgMjUweiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAscGF0aDoibTM3NSA3MjVsMCAwLTM3NS0zNzUgMzc1LTM3NCAwLTEgMTEyNSAwIDAgNzUwLTExMjUgMHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSx0b29sdGlwX2NvbXBhcmU6e3dpZHRoOjExMjUscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxwbG90bHlsb2dvOnt3aWR0aDoxNTQyLHBhdGg6Im0wLTEwaDE4MnYtMTQwaC0xODJ2MTQweiBtMjI4IDE0NmgxODN2LTI4NmgtMTgzdjI4NnogbTIyNSA3MTRoMTgydi0xMDAwaC0xODJ2MTAwMHogbTIyNS0yODVoMTgydi03MTVoLTE4MnY3MTV6IG0yMjUgMTQyaDE4M3YtODU3aC0xODN2ODU3eiBtMjMxLTQyOGgxODJ2LTQyOWgtMTgydjQyOXogbTIyNS0yOTFoMTgzdi0xMzhoLTE4M3YxMzh6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sInotYXhpcyI6e3dpZHRoOjFlMyxwYXRoOiJtODMzIDVsLTE3IDEwOHY0MWwtMTMwLTY1IDEzMC02NmMwIDAgMCAzOCAwIDM5IDAtMSAzNi0xNCAzOS0yNSA0LTE1LTYtMjItMTYtMzAtMTUtMTItMzktMTYtNTYtMjAtOTAtMjItMTg3LTIzLTI3OS0yMy0yNjEgMC0zNDEgMzQtMzUzIDU5IDMgNjAgMjI4IDExMCAyMjggMTEwLTE0MC04LTM1MS0zNS0zNTEtMTE2IDAtMTIwIDI5My0xNDIgNDc0LTE0MiAxNTUgMCA0NzcgMjIgNDc3IDE0MiAwIDUwLTc0IDc5LTE2MyA5NnogbS0zNzQgOTRjLTU4LTUtOTktMjEtOTktNDAgMC0yNCA2NS00MyAxNDQtNDMgNzkgMCAxNDMgMTkgMTQzIDQzIDAgMTktNDIgMzQtOTggNDB2MjE2aDg3bC0xMzIgMTM1LTEzMy0xMzVoODh2LTIxNnogbTE2NyA1MTVoLTEzNnYxYzE2IDE2IDMxIDM0IDQ2IDUybDg0IDEwOXY1NGgtMjMwdi03MWgxMjR2LTFjLTE2LTE3LTI4LTMyLTQ0LTUxbC04OS0xMTR2LTUxaDI0NXY3MnoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSwiM2Rfcm90YXRlIjp7d2lkdGg6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGNhbWVyYTp7d2lkdGg6MWUzLHBhdGg6Im01MDAgNDUwYy04MyAwLTE1MC02Ny0xNTAtMTUwIDAtODMgNjctMTUwIDE1MC0xNTAgODMgMCAxNTAgNjcgMTUwIDE1MCAwIDgzLTY3IDE1MC0xNTAgMTUweiBtNDAwIDE1MGgtMTIwYy0xNiAwLTM0IDEzLTM5IDI5bC0zMSA5M2MtNiAxNS0yMyAyOC00MCAyOGgtMzQwYy0xNiAwLTM0LTEzLTM5LTI4bC0zMS05NGMtNi0xNS0yMy0yOC00MC0yOGgtMTIwYy01NSAwLTEwMC00NS0xMDAtMTAwdi00NTBjMC01NSA0NS0xMDAgMTAwLTEwMGg4MDBjNTUgMCAxMDAgNDUgMTAwIDEwMHY0NTBjMCA1NS00NSAxMDAtMTAwIDEwMHogbS00MDAtNTUwYy0xMzggMC0yNTAgMTEyLTI1MCAyNTAgMCAxMzggMTEyIDI1MCAyNTAgMjUwIDEzOCAwIDI1MC0xMTIgMjUwLTI1MCAwLTEzOC0xMTItMjUwLTI1MC0yNTB6IG0zNjUgMzgwYy0xOSAwLTM1IDE2LTM1IDM1IDAgMTkgMTYgMzUgMzUgMzUgMTkgMCAzNS0xNiAzNS0zNSAwLTE5LTE2LTM1LTM1LTM1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LG1vdmllOnt3aWR0aDoxZTMscGF0aDoibTkzOCA0MTNsLTE4OC0xMjVjMCAzNy0xNyA3MS00NCA5NCA2NCAzOCAxMDcgMTA3IDEwNyAxODcgMCAxMjEtOTggMjE5LTIxOSAyMTktMTIxIDAtMjE5LTk4LTIxOS0yMTkgMC02MSAyNS0xMTcgNjYtMTU2aC0xMTVjMzAgMzMgNDkgNzYgNDkgMTI1IDAgMTAzLTg0IDE4Ny0xODcgMTg3cy0xODgtODQtMTg4LTE4N2MwLTU3IDI2LTEwNyA2NS0xNDEtMzgtMjItNjUtNjItNjUtMTA5di0yNTBjMC03MCA1Ni0xMjYgMTI1LTEyNmg1MDBjNjkgMCAxMjUgNTYgMTI1IDEyNmwxODgtMTI2YzM0IDAgNjIgMjggNjIgNjN2Mzc1YzAgMzUtMjggNjMtNjIgNjN6IG0tNzUwIDBjLTY5IDAtMTI1IDU2LTEyNSAxMjVzNTYgMTI1IDEyNSAxMjUgMTI1LTU2IDEyNS0xMjUtNTYtMTI1LTEyNS0xMjV6IG00MDYtMWMtODcgMC0xNTcgNzAtMTU3IDE1NyAwIDg2IDcwIDE1NiAxNTcgMTU2czE1Ni03MCAxNTYtMTU2LTcwLTE1Ny0xNTYtMTU3eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHF1ZXN0aW9uOnt3aWR0aDo4NTcuMSxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGRpc2s6e3dpZHRoOjg1Ny4xLHBhdGg6Im0yMTQtN2g0Mjl2MjE0aC00Mjl2LTIxNHogbTUwMCAwaDcydjUwMHEwIDgtNiAyMXQtMTEgMjBsLTE1NyAxNTZxLTUgNi0xOSAxMnQtMjIgNXYtMjMycTAtMjItMTUtMzh0LTM4LTE2aC0zMjJxLTIyIDAtMzcgMTZ0LTE2IDM4djIzMmgtNzJ2LTcxNGg3MnYyMzJxMCAyMiAxNiAzOHQzNyAxNmg0NjVxMjIgMCAzOC0xNnQxNS0zOHYtMjMyeiBtLTIxNCA1MTh2MTc4cTAgOC01IDEzdC0xMyA1aC0xMDdxLTcgMC0xMy01dC01LTEzdi0xNzhxMC04IDUtMTN0MTMtNWgxMDdxNyAwIDEzIDV0NSAxM3ogbTM1Ny0xOHYtNTE4cTAtMjItMTUtMzh0LTM4LTE2aC03NTBxLTIzIDAtMzggMTZ0LTE2IDM4djc1MHEwIDIyIDE2IDM4dDM4IDE2aDUxN3EyMyAwIDUwLTEydDQyLTI2bDE1Ni0xNTdxMTYtMTUgMjctNDJ0MTEtNDl6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sbGFzc286e3dpZHRoOjEwMzEscGF0aDoibTEwMTggNTM4Yy0zNiAyMDctMjkwIDMzNi01NjggMjg2LTI3Ny00OC00NzMtMjU2LTQzNi00NjMgMTAtNTcgMzYtMTA4IDc2LTE1MS0xMy02NiAxMS0xMzcgNjgtMTgzIDM0LTI4IDc1LTQxIDExNC00MmwtNTUtNzAgMCAwYy0yLTEtMy0yLTQtMy0xMC0xNC04LTM0IDUtNDUgMTQtMTEgMzQtOCA0NSA0IDEgMSAyIDMgMiA1bDAgMCAxMTMgMTQwYzE2IDExIDMxIDI0IDQ1IDQwIDQgMyA2IDcgOCAxMSA0OC0zIDEwMCAwIDE1MSA5IDI3OCA0OCA0NzMgMjU1IDQzNiA0NjJ6IG0tNjI0LTM3OWMtODAgMTQtMTQ5IDQ4LTE5NyA5NiA0MiA0MiAxMDkgNDcgMTU2IDkgMzMtMjYgNDctNjYgNDEtMTA1eiBtLTE4Ny03NGMtMTkgMTYtMzMgMzctMzkgNjAgNTAtMzIgMTA5LTU1IDE3NC02OC00Mi0yNS05NS0yNC0xMzUgOHogbTM2MCA3NWMtMzQtNy02OS05LTEwMi04IDggNjItMTYgMTI4LTY4IDE3MC03MyA1OS0xNzUgNTQtMjQ0LTUtOSAyMC0xNiA0MC0yMCA2MS0yOCAxNTkgMTIxIDMxNyAzMzMgMzU0czQwNy02MCA0MzQtMjE3YzI4LTE1OS0xMjEtMzE4LTMzMy0zNTV6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sc2VsZWN0Ym94Ont3aWR0aDoxZTMscGF0aDoibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxzcGlrZWxpbmU6e3dpZHRoOjFlMyxwYXRoOiJNNTEyIDQwOWMwLTU3LTQ2LTEwNC0xMDMtMTA0LTU3IDAtMTA0IDQ3LTEwNCAxMDQgMCA1NyA0NyAxMDMgMTA0IDEwMyA1NyAwIDEwMy00NiAxMDMtMTAzeiBtLTMyNy0zOWw5MiAwIDAgOTItOTIgMHogbS0xODUgMGw5MiAwIDAgOTItOTIgMHogbTM3MC0xODZsOTIgMCAwIDkzLTkyIDB6IG0wLTE4NGw5MiAwIDAgOTItOTIgMHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfX19LHt9XSwzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhciIpfSx7Ii4uL3NyYy90cmFjZXMvYmFyIjo4NTZ9XSw0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JveCIpfSx7Ii4uL3NyYy90cmFjZXMvYm94Ijo4Njh9XSw1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiKX0seyIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiOjYwMH1dLDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2siKX0seyIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIjo4NzZ9XSw3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY2FycGV0Ijo4OTd9XSw4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiOjkxMn1dLDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91ciIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91ciI6OTIzfV0sMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCI6OTM4fV0sMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjcwN31dLDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiOjEwOTd9XSwxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiOjEwOTh9XSwxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIil9LHsiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIjo5NTF9XSwxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2wiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCI6OTYwfV0sMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjk2OH1dLDE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCI6OTczfV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiOjk3N31dLDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29yZSIpO24ucmVnaXN0ZXIoW3QoIi4vYmFyIiksdCgiLi9ib3giKSx0KCIuL2hlYXRtYXAiKSx0KCIuL2hpc3RvZ3JhbSIpLHQoIi4vaGlzdG9ncmFtMmQiKSx0KCIuL2hpc3RvZ3JhbTJkY29udG91ciIpLHQoIi4vcGllIiksdCgiLi9jb250b3VyIiksdCgiLi9zY2F0dGVydGVybmFyeSIpLHQoIi4vc2Fua2V5IiksdCgiLi9zY2F0dGVyM2QiKSx0KCIuL3N1cmZhY2UiKSx0KCIuL21lc2gzZCIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9wb2ludGNsb3VkIiksdCgiLi9oZWF0bWFwZ2wiKSx0KCIuL3BhcmNvb3JkcyIpLHQoIi4vc2NhdHRlcm1hcGJveCIpLHQoIi4vY2FycGV0IiksdCgiLi9zY2F0dGVyY2FycGV0IiksdCgiLi9jb250b3VyY2FycGV0IiksdCgiLi9vaGxjIiksdCgiLi9jYW5kbGVzdGljayIpXSksbi5yZWdpc3RlcihbdCgiLi9maWx0ZXIiKSx0KCIuL2dyb3VwYnkiKSx0KCIuL3NvcnQiKV0pLG4ucmVnaXN0ZXIoW3QoIi4vY2FsZW5kYXJzIildKSxlLmV4cG9ydHM9bn0seyIuL2JhciI6MywiLi9ib3giOjQsIi4vY2FsZW5kYXJzIjo1LCIuL2NhbmRsZXN0aWNrIjo2LCIuL2NhcnBldCI6NywiLi9jaG9yb3BsZXRoIjo4LCIuL2NvbnRvdXIiOjksIi4vY29udG91cmNhcnBldCI6MTAsIi4vY29yZSI6MTEsIi4vZmlsdGVyIjoxMiwiLi9ncm91cGJ5IjoxMywiLi9oZWF0bWFwIjoxNCwiLi9oZWF0bWFwZ2wiOjE1LCIuL2hpc3RvZ3JhbSI6MTYsIi4vaGlzdG9ncmFtMmQiOjE3LCIuL2hpc3RvZ3JhbTJkY29udG91ciI6MTgsIi4vbWVzaDNkIjoyMCwiLi9vaGxjIjoyMSwiLi9wYXJjb29yZHMiOjIyLCIuL3BpZSI6MjMsIi4vcG9pbnRjbG91ZCI6MjQsIi4vc2Fua2V5IjoyNSwiLi9zY2F0dGVyM2QiOjI2LCIuL3NjYXR0ZXJjYXJwZXQiOjI3LCIuL3NjYXR0ZXJnZW8iOjI4LCIuL3NjYXR0ZXJnbCI6MjksIi4vc2NhdHRlcm1hcGJveCI6MzAsIi4vc2NhdHRlcnRlcm5hcnkiOjMxLCIuL3NvcnQiOjMyLCIuL3N1cmZhY2UiOjMzfV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvbWVzaDNkIil9LHsiLi4vc3JjL3RyYWNlcy9tZXNoM2QiOjk4M31dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL29obGMiKX0seyIuLi9zcmMvdHJhY2VzL29obGMiOjk4OH1dLDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyIpfSx7Ii4uL3NyYy90cmFjZXMvcGFyY29vcmRzIjo5OTd9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9waWUiKX0seyIuLi9zcmMvdHJhY2VzL3BpZSI6MTAwNn1dLDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiKX0seyIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiOjEwMTV9XSwyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zYW5rZXkiKX0seyIuLi9zcmMvdHJhY2VzL3NhbmtleSI6MTAyMX1dLDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIjoxMDUzfV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCI6MTA1OH1dLDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iOjEwNjd9XSwyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCI6MTA3M31dLDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giOjEwODB9XSwzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiOjEwODd9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvc29ydCIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiOjEwOTl9XSwzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIjoxMDk2fV0sMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Z1bmN0aW9uIHIoZSxyLG4sYSl7dmFyIG89MS90LmNsaWVudEhlaWdodCxzPW8qKHItbSksbD1vKihuLXYpLGM9cC5mbGlwWD8xOi0xLGY9cC5mbGlwWT8xOi0xLGQ9TWF0aC5QSSpwLnJvdGF0ZVNwZWVkLHk9aSgpO2lmKDEmZSlhLnNoaWZ0P3Uucm90YXRlKHksMCwwLC1zKmQpOnUucm90YXRlKHksYypkKnMsLWYqZCpsLDApO2Vsc2UgaWYoMiZlKXUucGFuKHksLXAudHJhbnNsYXRlU3BlZWQqcypoLHAudHJhbnNsYXRlU3BlZWQqbCpoLDApO2Vsc2UgaWYoNCZlKXt2YXIgYj1wLnpvb21TcGVlZCpsL3dpbmRvdy5pbm5lckhlaWdodCooeS11Lmxhc3RUKCkpKjUwO3UucGFuKHksMCwwLGgqKE1hdGguZXhwKGIpLTEpKX1tPXIsdj1uLGc9YX10PXR8fGRvY3VtZW50LmJvZHksZT1lfHx7fTt2YXIgbj1bLjAxLDEvMF07ImRpc3RhbmNlTGltaXRzImluIGUmJihuWzBdPWUuZGlzdGFuY2VMaW1pdHNbMF0sblsxXT1lLmRpc3RhbmNlTGltaXRzWzFdKSwiem9vbU1pbiJpbiBlJiYoblswXT1lLnpvb21NaW4pLCJ6b29tTWF4ImluIGUmJihuWzFdPWUuem9vbU1heCk7dmFyIHU9YSh7Y2VudGVyOmUuY2VudGVyfHxbMCwwLDBdLHVwOmUudXB8fFswLDEsMF0sZXllOmUuZXllfHxbMCwwLDEwXSxtb2RlOmUubW9kZXx8Im9yYml0IixkaXN0YW5jZUxpbWl0czpufSksYz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0saD0wLGY9dC5jbGllbnRXaWR0aCxkPXQuY2xpZW50SGVpZ2h0LHA9e3ZpZXc6dSxlbGVtZW50OnQsZGVsYXk6ZS5kZWxheXx8MTYscm90YXRlU3BlZWQ6ZS5yb3RhdGVTcGVlZHx8MSx6b29tU3BlZWQ6ZS56b29tU3BlZWR8fDEsdHJhbnNsYXRlU3BlZWQ6ZS50cmFuc2xhdGVTcGVlZHx8MSxmbGlwWDohIWUuZmxpcFgsZmxpcFk6ISFlLmZsaXBZLG1vZGVzOnUubW9kZXMsdGljazpmdW5jdGlvbigpe3ZhciBlPWkoKSxyPXRoaXMuZGVsYXk7dS5pZGxlKGUtciksdS5mbHVzaChlLSgxMDArMipyKSk7dmFyIG49ZS0yKnI7dS5yZWNhbGNNYXRyaXgobik7Zm9yKHZhciBhPSEwLG89dS5jb21wdXRlZE1hdHJpeCxzPTA7czwxNjsrK3MpYT1hJiZjW3NdPT09b1tzXSxjW3NdPW9bc107dmFyIGw9dC5jbGllbnRXaWR0aD09PWYmJnQuY2xpZW50SGVpZ2h0PT09ZDtyZXR1cm4gZj10LmNsaWVudFdpZHRoLGQ9dC5jbGllbnRIZWlnaHQsYT8hbDooaD1NYXRoLmV4cCh1LmNvbXB1dGVkUmFkaXVzWzBdKSwhMCl9LGxvb2tBdDpmdW5jdGlvbih0LGUscil7dS5sb29rQXQodS5sYXN0VCgpLHQsZSxyKX0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXt1LnJvdGF0ZSh1Lmxhc3RUKCksdCxlLHIpfSxwYW46ZnVuY3Rpb24odCxlLHIpe3UucGFuKHUubGFzdFQoKSx0LGUscil9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7dS50cmFuc2xhdGUodS5sYXN0VCgpLHQsZSxyKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHAse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5zZXRNYXRyaXgodS5sYXN0VCgpLHQpLHUuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB1LmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1LnNldE1vZGUodCksdS5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5sb29rQXQodS5sYXN0VCgpLHQpLHUuY29tcHV0ZWRDZW50ZXJ9LGVudW1lcmFibGU6ITB9LGV5ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuY29tcHV0ZWRFeWV9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5sb29rQXQodS5sYXN0VCgpLG51bGwsdCksdS5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiB1LmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5sb29rQXQodS5sYXN0VCgpLG51bGwsbnVsbCx0KSx1LmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1LnNldERpc3RhbmNlKHUubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuZ2V0RGlzdGFuY2VMaW1pdHMobil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCksITF9KTt2YXIgbT0wLHY9MCxnPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfTtyZXR1cm4gbyh0LHIpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24oZSl7dmFyIG49bChlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3IoMCxuWzBdLG5bMV0sZykscigxLG5bMF0sblsxXSxnKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbihlKXt2YXIgbj1sKGUuY2hhbmdlZFRvdWNoZXNbMF0sdCk7cigxLG5bMF0sblsxXSxnKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGZ1bmN0aW9uKGUpe2woZS5jaGFuZ2VkVG91Y2hlc1swXSx0KTtyKDAsbSx2LGcpfSkscyh0LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1wLmZsaXBYPzE6LTEsYT1wLmZsaXBZPzE6LTEsbz1pKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpdS5yb3RhdGUobywwLDAsLXQqbipNYXRoLlBJKnAucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2V7dmFyIHM9cC56b29tU3BlZWQqYSplL3dpbmRvdy5pbm5lckhlaWdodCooby11Lmxhc3RUKCkpLzEwMDt1LnBhbihvLDAsMCxoKihNYXRoLmV4cChzKS0xKSl9fSwhMCkscH1lLmV4cG9ydHM9bjt2YXIgaT10KCJyaWdodC1ub3ciKSxhPXQoIjNkLXZpZXciKSxvPXQoIm1vdXNlLWNoYW5nZSIpLHM9dCgibW91c2Utd2hlZWwiKSxsPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpfSx7IjNkLXZpZXciOjM1LCJtb3VzZS1jaGFuZ2UiOjQ1MCwibW91c2UtZXZlbnQtb2Zmc2V0Ijo0NTEsIm1vdXNlLXdoZWVsIjo0NTMsInJpZ2h0LW5vdyI6NTAwfV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSksdGhpcy5fbW9kZT1lLHRoaXMuX2FjdGl2ZT10W2VdLHRoaXMuX2FjdGl2ZXx8KHRoaXMuX21vZGU9InR1cm50YWJsZSIsdGhpcy5fYWN0aXZlPXQudHVybnRhYmxlKSx0aGlzLm1vZGVzPXRoaXMuX2NvbnRyb2xsZXJOYW1lcyx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9ZnVuY3Rpb24gaSh0KXt0PXR8fHt9O3ZhciBlPXQuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0saT10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSx1PXQubW9kZXx8InR1cm50YWJsZSIsYz1hKCksaD1vKCksZj1zKCk7cmV0dXJuIGMuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxjLmxvb2tBdCgwLGUscixpKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIsaSksZi5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGYubG9va0F0KDAsZSxyLGkpLG5ldyBuKHt0dXJudGFibGU6YyxvcmJpdDpoLG1hdHJpeDpmfSx1KX1lLmV4cG9ydHM9aTt2YXIgYT10KCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiKSxvPXQoIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIikscz10KCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiKSxsPW4ucHJvdG90eXBlO1tbImZsdXNoIiwxXSxbImlkbGUiLDFdLFsibG9va0F0Iiw0XSxbInJvdGF0ZSIsNF0sWyJwYW4iLDRdLFsidHJhbnNsYXRlIiw0XSxbInNldE1hdHJpeCIsMl0sWyJzZXREaXN0YW5jZUxpbWl0cyIsMl0sWyJzZXREaXN0YW5jZSIsMl1dLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0scj1bXSxuPTA7bjx0WzFdOysrbilyLnB1c2goImEiK24pO3ZhciBpPSJ2YXIgY2M9dGhpcy5fY29udHJvbGxlckxpc3Q7Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7KytpKXtjY1tpXS4iK3RbMF0rIigiK3Iuam9pbigpKyIpfSI7bFtlXT1GdW5jdGlvbi5hcHBseShudWxsLHIuY29uY2F0KGkpKX0pLGwucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZS5yZWNhbGNNYXRyaXgodCl9LGwuZ2V0RGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZSh0KX0sbC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlTGltaXRzKHQpfSxsLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5sYXN0VCgpfSxsLnNldE1vZGU9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuX21vZGUpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5pbmRleE9mKHQpO2lmKCEoZTwwKSl7dmFyIHI9dGhpcy5fYWN0aXZlLG49dGhpcy5fY29udHJvbGxlckxpc3RbZV0saT1NYXRoLm1heChyLmxhc3RUKCksbi5sYXN0VCgpKTtyLnJlY2FsY01hdHJpeChpKSxuLnNldE1hdHJpeChpLHIuY29tcHV0ZWRNYXRyaXgpLHRoaXMuX2FjdGl2ZT1uLHRoaXMuX21vZGU9dCx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9fX0sbC5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9fSx7Im1hdHJpeC1jYW1lcmEtY29udHJvbGxlciI6NDQ4LCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciI6NDcxLCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiOjUzNn1dLDM2OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGksYSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2EobixlKCJkMy1hcnJheSIpLGUoImQzLWNvbGxlY3Rpb24iKSxlKCJkMy1pbnRlcnBvbGF0ZSIpKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiLCJkMy1hcnJheSIsImQzLWNvbGxlY3Rpb24iLCJkMy1pbnRlcnBvbGF0ZSJdLGEpOmEoaS5kMz1pLmQzfHx7fSxpLmQzLGkuZDMsaS5kMyl9KHRoaXMsZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3YuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KSxnLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcj10LnNvdXJjZSxuPXQudGFyZ2V0OyJudW1iZXIiPT10eXBlb2YgciYmKHI9dC5zb3VyY2U9dlt0LnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2YgbiYmKG49dC50YXJnZXQ9dlt0LnRhcmdldF0pLHQub3JpZ2luYWxJbmRleD1lLHIuc291cmNlTGlua3MucHVzaCh0KSxuLnRhcmdldExpbmtzLnB1c2godCl9KX1mdW5jdGlvbiBpKCl7di5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyxoKSxlLnN1bSh0LnRhcmdldExpbmtzLGgpKX0pfWZ1bmN0aW9uIGEoKXtmb3IodmFyIHQsZT12LHI9MDtlLmxlbmd0aDspdD1bXSxlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS54PXIsZS5keD1kLGUuc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbihlKXt0LmluZGV4T2YoZS50YXJnZXQpPDAmJnQucHVzaChlLnRhcmdldCl9KX0pLGU9dCwrK3I7byhyKSxzKChtWzBdLWQpLyhyLTEpKX1mdW5jdGlvbiBvKHQpe3YuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNvdXJjZUxpbmtzLmxlbmd0aHx8KGUueD10LTEpfSl9ZnVuY3Rpb24gcyh0KXt2LmZvckVhY2goZnVuY3Rpb24oZSl7ZS54Kj10fSl9ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBuKCl7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhPTAsbz10Lmxlbmd0aDtmb3IodC5zb3J0KGkpLG49MDtuPG87KytuKWU9dFtuXSxyPWEtZS55LHI+MCYmKGUueSs9ciksYT1lLnkrZS5keStwO2lmKChyPWEtcC1tWzFdKT4wKWZvcihhPWUueS09cixuPW8tMjtuPj0wOy0tbillPXRbbl0scj1lLnkrZS5keStwLWEscj4wJiYoZS55LT1yKSxhPWUueX0pfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC55LWUueX12YXIgYT1yLm5lc3QoKS5rZXkoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKHYpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KTshZnVuY3Rpb24oKXt2YXIgdD1lLm1pbihhLGZ1bmN0aW9uKHQpe3JldHVybihtWzFdLSh0Lmxlbmd0aC0xKSpwKS9lLnN1bSh0LGgpfSk7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlLHIpe2UueT1yLGUuZHk9ZS52YWx1ZSp0fSl9KSxnLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5keT1lLnZhbHVlKnR9KX0oKSxuKCk7Zm9yKHZhciBvPTE7dD4wOy0tdCkhZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gYyh0LnRhcmdldCkqdC52YWx1ZX1hLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uc291cmNlTGlua3MubGVuZ3RoKXt2YXIgaT1lLnN1bShuLnNvdXJjZUxpbmtzLHIpL2Uuc3VtKG4uc291cmNlTGlua3MsaCk7bi55Kz0oaS1jKG4pKSp0fX0pfSl9KG8qPS45OSksbigpLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGModC5zb3VyY2UpKnQudmFsdWV9YS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uZm9yRWFjaChmdW5jdGlvbihuKXtpZihuLnRhcmdldExpbmtzLmxlbmd0aCl7dmFyIGk9ZS5zdW0obi50YXJnZXRMaW5rcyxyKS9lLnN1bShuLnRhcmdldExpbmtzLGgpO24ueSs9KGktYyhuKSkqdH19KX0pfShvKSxuKCl9ZnVuY3Rpb24gdSgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gdC5zb3VyY2UueS1lLnNvdXJjZS55fHx0Lm9yaWdpbmFsSW5kZXgtZS5vcmlnaW5hbEluZGV4fWZ1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC50YXJnZXQueS1lLnRhcmdldC55fHx0Lm9yaWdpbmFsSW5kZXgtZS5vcmlnaW5hbEluZGV4fXYuZm9yRWFjaChmdW5jdGlvbihyKXtyLnNvdXJjZUxpbmtzLnNvcnQoZSksci50YXJnZXRMaW5rcy5zb3J0KHQpfSksdi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnN5PWUsZSs9dC5keX0pLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnR5PXIscis9dC5keX0pfSl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC55K3QuZHkvMn1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnZhbHVlfXZhciBmPXt9LGQ9MjQscD04LG09WzEsMV0sdj1bXSxnPVtdO3JldHVybiBmLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxmKTpkfSxmLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0LGYpOnB9LGYubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCxmKTp2fSxmLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPXQsZik6Z30sZi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXQsZik6bX0sZi5sYXlvdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKSxpKCksYSgpLGwoZSksdSgpLGZ9LGYucmVsYXlvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdSgpLGZ9LGYubGluaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIHI9dC5zb3VyY2UueCt0LnNvdXJjZS5keCxpPXQudGFyZ2V0LngsYT1uLmludGVycG9sYXRlTnVtYmVyKHIsaSksbz1hKGUpLHM9YSgxLWUpLGw9dC5zb3VyY2UueSt0LnN5LHU9bCt0LmR5LGM9dC50YXJnZXQueSt0LnR5LGg9Yyt0LmR5O3JldHVybiJNIityKyIsIitsKyJDIitvKyIsIitsKyIgIitzKyIsIitjKyIgIitpKyIsIitjKyJMIitpKyIsIitoKyJDIitzKyIsIitoKyIgIitvKyIsIit1KyIgIityKyIsIit1KyJaIn12YXIgZT0uNTtyZXR1cm4gdC5jdXJ2YXR1cmU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3IsdCk6ZX0sdH0sZn07dC5zYW5rZXk9aSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0seyJkMy1hcnJheSI6MTEyLCJkMy1jb2xsZWN0aW9uIjoxMTMsImQzLWludGVycG9sYXRlIjoxMTd9XSwzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXMuZ2V0KHQpLHI9ZSYmKGUuX3RyaWFuZ2xlQnVmZmVyLmhhbmRsZXx8ZS5fdHJpYW5nbGVCdWZmZXIuYnVmZmVyKTtpZighcnx8IXQuaXNCdWZmZXIocikpe3ZhciBuPWEodCxuZXcgRmxvYXQzMkFycmF5KFstMSwtMSwtMSw0LDQsLTFdKSk7ZT1vKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLGUuX3RyaWFuZ2xlQnVmZmVyPW4scy5zZXQodCxlKX1lLmJpbmQoKSx0LmRyYXdBcnJheXModC5UUklBTkdMRVMsMCwzKSxlLnVuYmluZCgpfXZhciBpPSJ1bmRlZmluZWQiPT10eXBlb2YgV2Vha01hcD90KCJ3ZWFrLW1hcCIpOldlYWtNYXAsYT10KCJnbC1idWZmZXIiKSxvPXQoImdsLXZhbyIpLHM9bmV3IGk7ZS5leHBvcnRzPW59LHsiZ2wtYnVmZmVyIjoxNTQsImdsLXZhbyI6MjY5LCJ3ZWFrLW1hcCI6NTU3fV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtlPSJudW1iZXIiPT10eXBlb2YgZT9lOjEscj1yfHwiOiAiO3ZhciBuPXQuc3BsaXQoL1xyP1xuLyksYT1TdHJpbmcobi5sZW5ndGgrZS0xKS5sZW5ndGg7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKHQsbil7dmFyIG89bitlLHM9U3RyaW5nKG8pLmxlbmd0aDtyZXR1cm4gaShvLGEtcykrcit0fSkuam9pbigiXG4iKX12YXIgaT10KCJwYWQtbGVmdCIpO2UuZXhwb3J0cz1ufSx7InBhZC1sZWZ0Ijo0NzJ9XSwzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLG49MDtuPHQubGVuZ3RoOysrbilyW25dPXRbbl07Zm9yKHZhciBuPTA7bjw9dC5sZW5ndGg7KytuKXtmb3IodmFyIGk9dC5sZW5ndGg7aTw9ZTsrK2kpe2Zvcih2YXIgbz1uZXcgQXJyYXkoZSkscz0wO3M8ZTsrK3Mpb1tzXT1NYXRoLnBvdyhpKzEtbixzKTtyW2ldPW99aWYoYS5hcHBseSh2b2lkIDAscikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bMF07Zm9yKHZhciByPXRbMF0ubGVuZ3RoLGk9W3RbMF1dLGE9WzBdLG89MTtvPGU7KytvKWlmKGkucHVzaCh0W29dKSxuKGkscikpe2lmKGEucHVzaChvKSxhLmxlbmd0aD09PXIrMSlyZXR1cm4gYX1lbHNlIGkucG9wKCk7cmV0dXJuIGF9ZS5leHBvcnRzPWk7dmFyIGE9dCgicm9idXN0LW9yaWVudGF0aW9uIil9LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDZ9XSw0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkoZSkuZmlsdGVyKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpLGk9MDtpPHIubGVuZ3RoOysraSluW2ldPWVbcltpXV07cmV0dXJuIGEobikqdDwxfSl9ZS5leHBvcnRzPW47dmFyIGk9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxhPXQoImNpcmN1bXJhZGl1cyIpfSx7Y2lyY3VtcmFkaXVzOjg1LCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6MTIxfV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEoaSh0LGUpKX1lLmV4cG9ydHM9bjt2YXIgaT10KCJhbHBoYS1jb21wbGV4IiksYT10KCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiKX0seyJhbHBoYS1jb21wbGV4Ijo0MCwic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Ijo1MTR9XSw0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGk9LTEvMCxhPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmkmJihpPXRbb10pLHRbb108YSYmKGE9dFtvXSk7cltuXT1hLHJbZStuXT1pfXJldHVybiByfWUuZXhwb3J0cz1ufSx7fV0sNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtudWxsPT1lJiYoZT0xKSxudWxsPT1yJiYocj1pKHQsZSkpO2Zvcih2YXIgbj0wO248ZTtuKyspe3ZhciBhPXJbZStuXSxvPXJbbl0scz1uLGw9dC5sZW5ndGg7aWYoYT09PTEvMCYmbz09PS0xLzApZm9yKHM9bjtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9bjtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tMS8wKWZvcihzPW47czxsO3MrPWUpdFtzXT10W3NdPT09bz8wOjE7ZWxzZXt2YXIgdT1hLW87Zm9yKHM9bjtzPGw7cys9ZSl0W3NdPSh0W3NdLW8pL3V9fXJldHVybiB0fXZhciBpPXQoImFycmF5LWJvdW5kcyIpO2UuZXhwb3J0cz1ufSx7ImFycmF5LWJvdW5kcyI6NDJ9XSw0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiZudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGUodCxlLHIpe2Zvcih2YXIgbj0oZS10KS9NYXRoLm1heChyLTEsMSksaT1bXSxhPTA7YTxyO2ErKylpLnB1c2godCthKm4pO3JldHVybiBpfWZ1bmN0aW9uIHIoKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLGU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSkscj1NYXRoLm1pbi5hcHBseShudWxsLGUpLG49W10saT0wO2k8cjtpKyspe25baV09W107Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2EpbltpXVthXT10W2FdW2ldfXJldHVybiBufWZ1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj1NYXRoLm1pbi5hcHBseShudWxsLFt0Lmxlbmd0aCxlLmxlbmd0aCxyLmxlbmd0aF0pLGk9W10sYT0wO2E8bjthKyspaS5wdXNoKFt0W2FdLGVbYV0sclthXV0pO3JldHVybiBpfWZ1bmN0aW9uIGkodCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylBcnJheS5pc0FycmF5KHRbbl0pP2UodFtuXSxyKTpyKz10W25dfXZhciByPTA7cmV0dXJuIGUodCxyKSxyfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcil7ZVtyXT1bXTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoOysrbillW3JdW25dPXRbcl1bbl19cmV0dXJuIGV9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWVbcl09dFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBzKHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZih0W3JdIT09ZVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbjtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7aWYocj1bXSwiIyI9PT10WzBdPyh0PXQuc3Vic3RyKDEpLDM9PT10Lmxlbmd0aCYmKHQrPXQpLG49cGFyc2VJbnQodCwxNiksclswXT1uPj4xNiYyNTUsclsxXT1uPj44JjI1NSxyWzJdPTI1NSZuKTpoLnRlc3QodCkmJihuPXQubWF0Y2goZiksclswXT1wYXJzZUludChuWzFdKSxyWzFdPXBhcnNlSW50KG5bMl0pLHJbMl09cGFyc2VJbnQoblszXSkpLCFlKWZvcih2YXIgaT0wO2k8MzsrK2kpcltpXT1yW2ldLzI1NTtyZXR1cm4gcn1mdW5jdGlvbiB1KHQsZSl7dmFyIHIsbjtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7aWYocj1bXSwiIyI9PT10WzBdPyh0PXQuc3Vic3RyKDEpLDM9PT10Lmxlbmd0aCYmKHQrPXQpLG49cGFyc2VJbnQodCwxNiksclswXT1uPj4xNiYyNTUsclsxXT1uPj44JjI1NSxyWzJdPTI1NSZuKTpoLnRlc3QodCkmJihuPXQubWF0Y2goZiksclswXT1wYXJzZUludChuWzFdKSxyWzFdPXBhcnNlSW50KG5bMl0pLHJbMl09cGFyc2VJbnQoblszXSksbls0XT9yWzNdPXBhcnNlRmxvYXQobls0XSk6clszXT0xKSwhZSlmb3IodmFyIGk9MDtpPDM7KytpKXJbaV09cltpXS8yNTU7cmV0dXJuIHJ9dmFyIGM9e30saD0vXnJnYmE/XChccypcZHsxLDN9XHMqLFxzKlxkezEsM31ccyosXHMqXGR7MSwzfVxzKigsLiopP1wpJC8sZj0vXnJnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiw/XHMqKC4qKT9cKSQvO3JldHVybiBjLmlzUGxhaW5PYmplY3Q9dCxjLmxpbnNwYWNlPWUsYy56aXAzPW4sYy5zdW09aSxjLnppcD1yLGMuaXNFcXVhbD1zLGMuY29weTJEPWEsYy5jb3B5MUQ9byxjLnN0cjJSZ2JBcnJheT1sLGMuc3RyMlJnYmFBcnJheT11LGN9KCl9LHt9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5CdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIWkodCkmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5BcnJheUJ1ZmZlciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfWZ1bmN0aW9uIHModCl7aWYoeC5pc0Z1bmN0aW9uKHQpKXtpZihNKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLHI9ZS5tYXRjaChBKTtyZXR1cm4gciYmclsxXX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90Lmxlbmd0aDxlP3Q6dC5zbGljZSgwLGUpOnR9ZnVuY3Rpb24gdSh0KXtpZihNfHwheC5pc0Z1bmN0aW9uKHQpKXJldHVybiB4Lmluc3BlY3QodCk7dmFyIGU9cyh0KTtyZXR1cm4iW0Z1bmN0aW9uIisoZT8iOiAiK2U6IiIpKyJdIn1mdW5jdGlvbiBjKHQpe3JldHVybiBsKHUodC5hY3R1YWwpLDEyOCkrIiAiK3Qub3BlcmF0b3IrIiAiK2wodSh0LmV4cGVjdGVkKSwxMjgpfWZ1bmN0aW9uIGgodCxlLHIsbixpKXt0aHJvdyBuZXcgay5Bc3NlcnRpb25FcnJvcih7bWVzc2FnZTpyLGFjdHVhbDp0LGV4cGVjdGVkOmUsb3BlcmF0b3I6bixzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWZ1bmN0aW9uIGYodCxlKXt0fHxoKHQsITAsZSwiPT0iLGsub2spfWZ1bmN0aW9uIGQodCxlLHIscyl7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZih4LmlzRGF0ZSh0KSYmeC5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoeC5pc1JlZ0V4cCh0KSYmeC5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKG8odCkmJm8oZSkmJmEodCk9PT1hKGUpJiYhKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKXJldHVybiAwPT09bihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKTtpZihpKHQpIT09aShlKSlyZXR1cm4hMTtzPXN8fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119O3ZhciBsPXMuYWN0dWFsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1sJiZsPT09cy5leHBlY3RlZC5pbmRleE9mKGUpfHwocy5hY3R1YWwucHVzaCh0KSxzLmV4cGVjdGVkLnB1c2goZSksbSh0LGUscixzKSl9cmV0dXJuIHI/dD09PWU6dD09ZX1mdW5jdGlvbiBwKHQpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbSh0LGUscixuKXtpZihudWxsPT09dHx8dm9pZCAwPT09dHx8bnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuITE7aWYoeC5pc1ByaW1pdGl2ZSh0KXx8eC5pc1ByaW1pdGl2ZShlKSlyZXR1cm4gdD09PWU7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiExO3ZhciBpPXAodCksYT1wKGUpO2lmKGkmJiFhfHwhaSYmYSlyZXR1cm4hMTtpZihpKXJldHVybiB0PXcuY2FsbCh0KSxlPXcuY2FsbChlKSxkKHQsZSxyKTt2YXIgbyxzLGw9VCh0KSx1PVQoZSk7aWYobC5sZW5ndGghPT11Lmxlbmd0aClyZXR1cm4hMTtmb3IobC5zb3J0KCksdS5zb3J0KCkscz1sLmxlbmd0aC0xO3M+PTA7cy0tKWlmKGxbc10hPT11W3NdKXJldHVybiExO2ZvcihzPWwubGVuZ3RoLTE7cz49MDtzLS0paWYobz1sW3NdLCFkKHRbb10sZVtvXSxyLG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHYodCxlLHIpe2QodCxlLCEwKSYmaCh0LGUsciwibm90RGVlcFN0cmljdEVxdWFsIix2KX1mdW5jdGlvbiBnKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKCJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX0KZnVuY3Rpb24geSh0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT15KGUpLG49KHImJnIubmFtZT8iICgiK3IubmFtZSsiKS4iOiIuIikrKG4/IiAiK246Ii4iKSx0JiYhaSYmaChpLHIsIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uIituKTt2YXIgYT0ic3RyaW5nIj09dHlwZW9mIG4sbz0hdCYmeC5pc0Vycm9yKGkpLHM9IXQmJmkmJiFyO2lmKChvJiZhJiZnKGkscil8fHMpJiZoKGksciwiR290IHVud2FudGVkIGV4Y2VwdGlvbiIrbiksdCYmaSYmciYmIWcoaSxyKXx8IXQmJmkpdGhyb3cgaX12YXIgeD10KCJ1dGlsLyIpLF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx3PUFycmF5LnByb3RvdHlwZS5zbGljZSxNPWZ1bmN0aW9uKCl7cmV0dXJuImZvbyI9PT1mdW5jdGlvbigpe30ubmFtZX0oKSxrPWUuZXhwb3J0cz1mLEE9L1xzKmZ1bmN0aW9uXHMrKFteXChcc10qKVxzKi87ay5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9Yyh0aGlzKSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITApO3ZhciBlPXQuc3RhY2tTdGFydEZ1bmN0aW9ufHxoO2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZSk7ZWxzZXt2YXIgcj1uZXcgRXJyb3I7aWYoci5zdGFjayl7dmFyIG49ci5zdGFjayxpPXMoZSksYT1uLmluZGV4T2YoIlxuIitpKTtpZihhPj0wKXt2YXIgbz1uLmluZGV4T2YoIlxuIixhKzEpO249bi5zdWJzdHJpbmcobysxKX10aGlzLnN0YWNrPW59fX0seC5pbmhlcml0cyhrLkFzc2VydGlvbkVycm9yLEVycm9yKSxrLmZhaWw9aCxrLm9rPWYsay5lcXVhbD1mdW5jdGlvbih0LGUscil7dCE9ZSYmaCh0LGUsciwiPT0iLGsuZXF1YWwpfSxrLm5vdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT1lJiZoKHQsZSxyLCIhPSIsay5ub3RFcXVhbCl9LGsuZGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtkKHQsZSwhMSl8fGgodCxlLHIsImRlZXBFcXVhbCIsay5kZWVwRXF1YWwpfSxrLmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7ZCh0LGUsITApfHxoKHQsZSxyLCJkZWVwU3RyaWN0RXF1YWwiLGsuZGVlcFN0cmljdEVxdWFsKX0say5ub3REZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe2QodCxlLCExKSYmaCh0LGUsciwibm90RGVlcEVxdWFsIixrLm5vdERlZXBFcXVhbCl9LGsubm90RGVlcFN0cmljdEVxdWFsPXYsay5zdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dCE9PWUmJmgodCxlLHIsIj09PSIsay5zdHJpY3RFcXVhbCl9LGsubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PT1lJiZoKHQsZSxyLCIhPT0iLGsubm90U3RyaWN0RXF1YWwpfSxrLnRocm93cz1mdW5jdGlvbih0LGUscil7YighMCx0LGUscil9LGsuZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXtiKCExLHQsZSxyKX0say5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH07dmFyIFQ9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KV8uY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7InV0aWwvIjo1NDd9XSw0NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYXRvYih0KX19LHt9XSw0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdO3JldHVybiBlfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBzPW5ldyBBcnJheShyKzEpLGw9MDtsPD1yOysrbClzW2xdPXRbbF1bb107aVtvXT1zfWlbcl09bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBvPTA7bzw9cjsrK28paVtyXVtvXT0xO2Zvcih2YXIgdT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl1W29dPWVbb107dVtyXT0xO3ZhciBjPWEoaSx1KSxoPW4oY1tyKzFdKTswPT09aCYmKGg9MSk7Zm9yKHZhciBmPW5ldyBBcnJheShyKzEpLG89MDtvPD1yOysrbylmW29dPW4oY1tvXSkvaDtyZXR1cm4gZn1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3QtbGluZWFyLXNvbHZlIil9LHsicm9idXN0LWxpbmVhci1zb2x2ZSI6NTA1fV0sNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBpKHRbMF0ubXVsKGVbMV0pLmFkZChlWzBdLm11bCh0WzFdKSksdFsxXS5tdWwoZVsxXSkpfXZhciBpPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPW59LHsiLi9saWIvcmF0aW9uYWxpemUiOjU4fV0sNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0WzBdLm11bChlWzFdKS5jbXAoZVswXS5tdWwodFsxXSkpfWUuZXhwb3J0cz1ufSx7fV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBpKHRbMF0ubXVsKGVbMV0pLHRbMV0ubXVsKGVbMF0pKX12YXIgaT10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL3JhdGlvbmFsaXplIjo1OH1dLDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZihpKHQpKXJldHVybiBlP3UodCxuKGUpKTpbdFswXS5jbG9uZSgpLHRbMV0uY2xvbmUoKV07dmFyIHIsYyxoPTA7aWYoYSh0KSlyPXQuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdClyPXModCk7ZWxzZXtpZigwPT09dClyZXR1cm5bbygwKSxvKDEpXTtpZih0PT09TWF0aC5mbG9vcih0KSlyPW8odCk7ZWxzZXtmb3IoO3QhPT1NYXRoLmZsb29yKHQpOyl0Kj1NYXRoLnBvdygyLDI1NiksaC09MjU2O3I9byh0KX19aWYoaShlKSlyLm11bChlWzFdKSxjPWVbMF0uY2xvbmUoKTtlbHNlIGlmKGEoZSkpYz1lLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpYz1zKGUpO2Vsc2UgaWYoZSlpZihlPT09TWF0aC5mbG9vcihlKSljPW8oZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksaCs9MjU2O2M9byhlKX1lbHNlIGM9bygxKTtyZXR1cm4gaD4wP3I9ci51c2hsbihoKTpoPDAmJihjPWMudXNobG4oLWgpKSxsKHIsYyl9dmFyIGk9dCgiLi9pcy1yYXQiKSxhPXQoIi4vbGliL2lzLWJuIiksbz10KCIuL2xpYi9udW0tdG8tYm4iKSxzPXQoIi4vbGliL3N0ci10by1ibiIpLGw9dCgiLi9saWIvcmF0aW9uYWxpemUiKSx1PXQoIi4vZGl2Iik7ZS5leHBvcnRzPW59LHsiLi9kaXYiOjUwLCIuL2lzLXJhdCI6NTIsIi4vbGliL2lzLWJuIjo1NiwiLi9saWIvbnVtLXRvLWJuIjo1NywiLi9saWIvcmF0aW9uYWxpemUiOjU4LCIuL2xpYi9zdHItdG8tYm4iOjU5fV0sNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoJiZpKHRbMF0pJiZpKHRbMV0pfXZhciBpPXQoIi4vbGliL2lzLWJuIik7ZS5leHBvcnRzPW59LHsiLi9saWIvaXMtYm4iOjU2fV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5jbXAobmV3IGkoMCkpfXZhciBpPXQoImJuLmpzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjY2fV0sNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsbj0wO2lmKDE9PT1lKW49clswXTtlbHNlIGlmKDI9PT1lKW49clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIG89clthXTtuKz1vKk1hdGgucG93KDY3MTA4ODY0LGEpfXJldHVybiBpKHQpKm59dmFyIGk9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPW59LHsiLi9ibi1zaWduIjo1M31dLDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9YShpLmxvKHQpKTtpZihlPDMyKXJldHVybiBlO3ZhciByPWEoaS5oaSh0KSk7cmV0dXJuIHI+MjA/NTI6ciszMn12YXIgaT10KCJkb3VibGUtYml0cyIpLGE9dCgiYml0LXR3aWRkbGUiKS5jb3VudFRyYWlsaW5nWmVyb3M7ZS5leHBvcnRzPW59LHsiYml0LXR3aWRkbGUiOjY1LCJkb3VibGUtYml0cyI6MTIyfV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfXQoImJuLmpzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjY2fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1hLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBpKHQpOm5ldyBpKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9dmFyIGk9dCgiYm4uanMiKSxhPXQoImRvdWJsZS1iaXRzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjY2LCJkb3VibGUtYml0cyI6MTIyfV0sNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWEodCksbj1hKGUpO2lmKDA9PT1yKXJldHVybltpKDApLGkoMSldO2lmKDA9PT1uKXJldHVybltpKDApLGkoMCldO248MCYmKHQ9dC5uZWcoKSxlPWUubmVnKCkpO3ZhciBvPXQuZ2NkKGUpO3JldHVybiBvLmNtcG4oMSk/W3QuZGl2KG8pLGUuZGl2KG8pXTpbdCxlXX12YXIgaT10KCIuL251bS10by1ibiIpLGE9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPW59LHsiLi9ibi1zaWduIjo1MywiLi9udW0tdG8tYm4iOjU3fV0sNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IGkodCl9dmFyIGk9dCgiYm4uanMiKTtlLmV4cG9ydHM9bn0seyJibi5qcyI6NjZ9XSw2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodFswXS5tdWwoZVswXSksdFsxXS5tdWwoZVsxXSkpfXZhciBpPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPW59LHsiLi9saWIvcmF0aW9uYWxpemUiOjU4fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gaSh0WzBdKSppKHRbMV0pfXZhciBpPXQoIi4vbGliL2JuLXNpZ24iKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9ibi1zaWduIjo1M31dLDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gaSh0WzBdLm11bChlWzFdKS5zdWIodFsxXS5tdWwoZVswXSkpLHRbMV0ubXVsKGVbMV0pKX12YXIgaT10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL3JhdGlvbmFsaXplIjo1OH1dLDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dFswXSxyPXRbMV07aWYoMD09PWUuY21wbigwKSlyZXR1cm4gMDt2YXIgbj1lLmFicygpLmRpdm1vZChyLmFicygpKSxvPW4uZGl2LHM9aShvKSxsPW4ubW9kLHU9ZS5uZWdhdGl2ZSE9PXIubmVnYXRpdmU/LTE6MTtpZigwPT09bC5jbXBuKDApKXJldHVybiB1KnM7aWYocyl7dmFyIGM9YShzKSs0LGg9aShsLnVzaGxuKGMpLmRpdlJvdW5kKHIpKTtyZXR1cm4gdSoocytoKk1hdGgucG93KDIsLWMpKX12YXIgZj1yLmJpdExlbmd0aCgpLWwuYml0TGVuZ3RoKCkrNTMsaD1pKGwudXNobG4oZikuZGl2Um91bmQocikpO3JldHVybiBmPDEwMjM/dSpoKk1hdGgucG93KDIsLWYpOihoKj1NYXRoLnBvdygyLC0xMDIzKSx1KmgqTWF0aC5wb3coMiwxMDIzLWYpKX12YXIgaT10KCIuL2xpYi9ibi10by1udW0iKSxhPXQoIi4vbGliL2N0eiIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL2JuLXRvLW51bSI6NTQsIi4vbGliL2N0eiI6NTV9XSw2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgbz1bImZ1bmN0aW9uICIsdCwiKGEsbCxoLCIsbi5qb2luKCIsIiksIil7IixhPyIiOiJ2YXIgaT0iLHI/ImwtMSI6ImgrMSIsIjt3aGlsZShsPD1oKXt2YXIgbT0obCtoKT4+PjEseD1hIixpPyIuZ2V0KG0pIjoiW21dIl07cmV0dXJuIGE/ZS5pbmRleE9mKCJjIik8MD9vLnB1c2goIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXsiKTpvLnB1c2goIjt2YXIgcD1jKHgseSk7aWYocD09PTApe3JldHVybiBtfWVsc2UgaWYocDw9MCl7Iik6by5wdXNoKCI7aWYoIixlLCIpe2k9bTsiKSxyP28ucHVzaCgibD1tKzF9ZWxzZXtoPW0tMX0iKTpvLnB1c2goImg9bS0xfWVsc2V7bD1tKzF9Iiksby5wdXNoKCJ9IiksYT9vLnB1c2goInJldHVybiAtMX07Iik6by5wdXNoKCJyZXR1cm4gaX07Iiksby5qb2luKCIiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oIkEiLCJ4Iit0KyJ5IixlLFsieSJdLCExLGkpLG4oIkIiLCJ4Iit0KyJ5IixlLFsieSJdLCEwLGkpLG4oIlAiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCExLGkpLG4oIlEiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCEwLGkpLCJmdW5jdGlvbiBkaXNwYXRjaEJzZWFyY2giLHIsIihhLHksYyxsLGgpe2lmKGEuc2hhcGUpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBRKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQihhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmx8MCx5KX19ZWxzZXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmx8MCx5KX19fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSw2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsidXNlIHJlc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPTMyO3JldHVybiB0Jj0tdCx0JiZlLS0sNjU1MzUmdCYmKGUtPTE2KSwxNjcxMTkzNSZ0JiYoZS09OCksMjUyNjQ1MTM1JnQmJihlLT00KSw4NTg5OTM0NTkmdCYmKGUtPTIpLDE0MzE2NTU3NjUmdCYmKGUtPTEpLGV9ci5JTlRfQklUUz0zMixyLklOVF9NQVg9MjE0NzQ4MzY0NyxyLklOVF9NSU49LTE8PDMxLHIuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4odD4wKS0odDwwKX0sci5hYnM9ZnVuY3Rpb24odCl7dmFyIGU9dD4+MzE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKHQ8ZSl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLSh0PGUpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCx0Pj4+PWUscj0odD4yNTUpPDwzLHQ+Pj49cixlfD1yLHI9KHQ+MTUpPDwyLHQ+Pj49cixlfD1yLHI9KHQ+Myk8PDEsdD4+Pj1yLChlfD1yKXx0Pj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQtPXQ+Pj4xJjE0MzE2NTU3NjUsMTY4NDMwMDkqKCh0PSg4NTg5OTM0NTkmdCkrKHQ+Pj4yJjg1ODk5MzQ1OSkpKyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KSsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KS0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LDI3MDMwPj4+KHQmPTE1KSYxfTt2YXIgaT1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwyNTY7KytlKXt2YXIgcj1lLG49ZSxpPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1pO3RbZV09bjw8aSYyNTV9fShpKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGlbMjU1JnRdPDwyNHxpW3Q+Pj44JjI1NV08PDE2fGlbdD4+PjE2JjI1NV08PDh8aVt0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybiB0Jj02NTUzNSx0PTE2NzExOTM1Jih0fHQ8PDgpLHQ9MjUyNjQ1MTM1Jih0fHQ8PDQpLHQ9ODU4OTkzNDU5Jih0fHQ8PDIpLHQ9MTQzMTY1NTc2NSYodHx0PDwxKSxlJj02NTUzNSxlPTE2NzExOTM1JihlfGU8PDgpLGU9MjUyNjQ1MTM1JihlfGU8PDQpLGU9ODU4OTkzNDU5JihlfGU8PDIpLGU9MTQzMTY1NTc2NSYoZXxlPDwxKSx0fGU8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybiB0PXQ+Pj5lJjE0MzE2NTU3NjUsdD04NTg5OTM0NTkmKHR8dD4+PjEpLHQ9MjUyNjQ1MTM1Jih0fHQ+Pj4yKSx0PTE2NzExOTM1Jih0fHQ+Pj40KSwodD02NTUzNSYodHx0Pj4+MTYpKTw8MTY+PjE2fSxyLmludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCY9MTAyMyx0PTQyNzgxOTAzMzUmKHR8dDw8MTYpLHQ9MjUxNzE5Njk1Jih0fHQ8PDgpLHQ9MzI3MjM1NjAzNSYodHx0PDw0KSx0PTEyMjcxMzM1MTMmKHR8dDw8MiksZSY9MTAyMyxlPTQyNzgxOTAzMzUmKGV8ZTw8MTYpLGU9MjUxNzE5Njk1JihlfGU8PDgpLGU9MzI3MjM1NjAzNSYoZXxlPDw0KSxlPTEyMjcxMzM1MTMmKGV8ZTw8MiksdHw9ZTw8MSxyJj0xMDIzLHI9NDI3ODE5MDMzNSYocnxyPDwxNikscj0yNTE3MTk2OTUmKHJ8cjw8OCkscj0zMjcyMzU2MDM1JihyfHI8PDQpLHI9MTIyNzEzMzUxMyYocnxyPDwyKSx0fHI8PDJ9LHIuZGVpbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUpe3JldHVybiB0PXQ+Pj5lJjEyMjcxMzM1MTMsdD0zMjcyMzU2MDM1Jih0fHQ+Pj4yKSx0PTI1MTcxOTY5NSYodHx0Pj4+NCksdD00Mjc4MTkwMzM1Jih0fHQ+Pj44KSwodD0xMDIzJih0fHQ+Pj4xNikpPDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw2NjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gYSh0LGUscil7aWYoYS5pc0JOKHQpKXJldHVybiB0O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT10JiYoImxlIiE9PWUmJiJiZSIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHwiYmUiKSl9ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxpO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpLTQ4O248PD00LG58PW8+PTQ5JiZvPD01ND9vLTQ5KzEwOm8+PTE3JiZvPD0yMj9vLTE3KzEwOjE1Jm99cmV0dXJuIG59ZnVuY3Rpb24gcyh0LGUscixuKXtmb3IodmFyIGk9MCxhPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGE7bysrKXt2YXIgcz10LmNoYXJDb2RlQXQobyktNDg7aSo9bixpKz1zPj00OT9zLTQ5KzEwOnM+PTE3P3MtMTcrMTA6c31yZXR1cm4gaX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxhPTB8ZS53b3Jkc1swXSxvPWkqYSxzPTY3MTA4ODYzJm8sbD1vLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1zO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgYz1sPj4+MjYsaD02NzEwODg2MyZsLGY9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxkPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtkPD1mO2QrKyl7dmFyIHA9dS1kfDA7aT0wfHQud29yZHNbcF0sYT0wfGUud29yZHNbZF0sbz1pKmEraCxjKz1vLzY3MTA4ODY0fDAsaD02NzEwODg2MyZvfXIud29yZHNbdV09MHxoLGw9MHxjfXJldHVybiAwIT09bD9yLndvcmRzW3VdPTB8bDpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsYT0wO2E8ci5sZW5ndGgtMTthKyspe3ZhciBvPWk7aT0wO2Zvcih2YXIgcz02NzEwODg2MyZuLGw9TWF0aC5taW4oYSxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsYS10Lmxlbmd0aCsxKTt1PD1sO3UrKyl7dmFyIGM9YS11LGg9MHx0LndvcmRzW2NdLGY9MHxlLndvcmRzW3VdLGQ9aCpmLHA9NjcxMDg4NjMmZDtvPW8rKGQvNjcxMDg4NjR8MCl8MCxwPXArc3wwLHM9NjcxMDg4NjMmcCxvPW8rKHA+Pj4yNil8MCxpKz1vPj4+MjYsbyY9NjcxMDg4NjN9ci53b3Jkc1thXT1zLG49byxvPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbYV09bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4obmV3IGYpLm11bHAodCxlLHIpfWZ1bmN0aW9uIGYodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBkKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBhKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBhKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBwKCl7ZC5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG0oKXtkLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gdigpe2QuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBnKCl7ZC5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHkodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT1hLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBiKHQpe3kuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGEoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9Im9iamVjdCI9PXR5cGVvZiBlP2UuZXhwb3J0cz1hOnIuQk49YSxhLkJOPWEsYS53b3JkU2l6ZT0yNjt2YXIgeDt0cnl7eD10KCJidWZmZXIiKS5CdWZmZXJ9Y2F0Y2godCl7fWEuaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGF8fG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3Iud29yZFNpemU9PT1hLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHQud29yZHMpfSxhLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKT4wP3Q6ZX0sYS5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk8MD90OmV9LGEucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKCJvYmplY3QiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTsiaGV4Ij09PWUmJihlPTE2KSxuKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpLHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKTt2YXIgaT0wOyItIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLCItIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSwibGUiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LGEucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBhLG8scz0wO2lmKCJiZSI9PT1yKWZvcihpPXQubGVuZ3RoLTEsYT0wO2k+PTA7aS09MylvPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO2Vsc2UgaWYoImxlIj09PXIpZm9yKGk9MCxhPTA7aTx0Lmxlbmd0aDtpKz0zKW89dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksYT0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPW8odCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMsKGErPTI0KT49MjYmJihhLT0yNixuKyspO3IrNiE9PWUmJihpPW8odCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBhPXQubGVuZ3RoLXIsbz1hJW4sbD1NYXRoLm1pbihhLGEtbykrcix1PTAsYz1yO2M8bDtjKz1uKXU9cyh0LGMsYytuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PW8pe3ZhciBoPTE7Zm9yKHU9cyh0LGMsdC5sZW5ndGgsZSksYz0wO2M8bztjKyspaCo9ZTt0aGlzLmltdWxuKGgpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sYS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LGEucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sYS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIF89WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sdz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxNPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dD10fHwxMCxlPTB8ZXx8MTt2YXIgcjtpZigxNj09PXR8fCJoZXgiPT09dCl7cj0iIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7YT1zPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1hfHxvIT09dGhpcy5sZW5ndGgtMT9fWzYtbC5sZW5ndGhdK2wrcjpsK3IsaSs9MixpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIHU9d1t0XSxjPU1bdF07cj0iIjt2YXIgaD10aGlzLmNsb25lKCk7Zm9yKGgubmVnYXRpdmU9MDshaC5pc1plcm8oKTspe3ZhciBmPWgubW9kbihjKS50b1N0cmluZyh0KTtoPWguaWRpdm4oYykscj1oLmlzWmVybygpP2YrcjpfW3UtZi5sZW5ndGhdK2Yrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9IjAiK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1uKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxhLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKHZvaWQgMCE9PXgpLHRoaXMudG9BcnJheUxpa2UoeCx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLGE9cnx8TWF0aC5tYXgoMSxpKTtuKGk8PWEsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxuKGE+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBvLHMsbD0ibGUiPT09ZSx1PW5ldyB0KGEpLGM9dGhpcy5jbG9uZSgpO2lmKGwpe2ZvcihzPTA7IWMuaXNaZXJvKCk7cysrKW89Yy5hbmRsbigyNTUpLGMuaXVzaHJuKDgpLHVbc109bztmb3IoO3M8YTtzKyspdVtzXT0wfWVsc2V7Zm9yKHM9MDtzPGEtaTtzKyspdVtzXT0wO2ZvcihzPTA7IWMuaXNaZXJvKCk7cysrKW89Yy5hbmRsbigyNTUpLGMuaXVzaHJuKDgpLHVbYS1zLTFdPW99cmV0dXJuIHV9LE1hdGguY2x6MzI/YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LGEucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09KDEmZSkmJnIrKyxyfSxhLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sYS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LGEucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGEucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxhLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sYS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sYS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LGEucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LGEucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LGEucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LGEucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LGEucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LGEucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxhLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxhLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxhLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxhLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl09ZT90aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pKygwfG4ud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJmE8ci5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDthPHIubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPXIud29yZHNbYV07cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxhLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIGE9MCxvPTA7bzxpLmxlbmd0aDtvKyspZT0oMHxuLndvcmRzW29dKS0oMHxpLndvcmRzW29dKSthLGE9ZT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2Zvcig7MCE9PWEmJm88bi5sZW5ndGg7bysrKWU9KDB8bi53b3Jkc1tvXSkrYSxhPWU+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtpZigwPT09YSYmbzxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDtvPG4ubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPW4ud29yZHNbb107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLG8pLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbz10LndvcmRzLHM9ZS53b3JkcyxsPXIud29yZHMsdT0wLGM9MHxvWzBdLGg9ODE5MSZjLGY9Yz4+PjEzLGQ9MHxvWzFdLHA9ODE5MSZkLG09ZD4+PjEzLHY9MHxvWzJdLGc9ODE5MSZ2LHk9dj4+PjEzLGI9MHxvWzNdLHg9ODE5MSZiLF89Yj4+PjEzLHc9MHxvWzRdLE09ODE5MSZ3LGs9dz4+PjEzLEE9MHxvWzVdLFQ9ODE5MSZBLFM9QT4+PjEzLEU9MHxvWzZdLEw9ODE5MSZFLEM9RT4+PjEzLHo9MHxvWzddLEk9ODE5MSZ6LEQ9ej4+PjEzLFA9MHxvWzhdLE89ODE5MSZQLFI9UD4+PjEzLEY9MHxvWzldLGo9ODE5MSZGLE49Rj4+PjEzLEI9MHxzWzBdLFU9ODE5MSZCLFY9Qj4+PjEzLEg9MHxzWzFdLHE9ODE5MSZILEc9SD4+PjEzLFk9MHxzWzJdLFg9ODE5MSZZLFc9WT4+PjEzLFo9MHxzWzNdLEo9ODE5MSZaLEs9Wj4+PjEzLFE9MHxzWzRdLCQ9ODE5MSZRLHR0PVE+Pj4xMyxldD0wfHNbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8c1s2XSxhdD04MTkxJml0LG90PWl0Pj4+MTMsc3Q9MHxzWzddLGx0PTgxOTEmc3QsdXQ9c3Q+Pj4xMyxjdD0wfHNbOF0saHQ9ODE5MSZjdCxmdD1jdD4+PjEzLGR0PTB8c1s5XSxwdD04MTkxJmR0LG10PWR0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoaCxVKSxpPU1hdGguaW11bChoLFYpLGk9aStNYXRoLmltdWwoZixVKXwwLGE9TWF0aC5pbXVsKGYsVik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLFUpLGk9TWF0aC5pbXVsKHAsViksaT1pK01hdGguaW11bChtLFUpfDAsYT1NYXRoLmltdWwobSxWKSxuPW4rTWF0aC5pbXVsKGgscSl8MCxpPWkrTWF0aC5pbXVsKGgsRyl8MCxpPWkrTWF0aC5pbXVsKGYscSl8MCxhPWErTWF0aC5pbXVsKGYsRyl8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KGErKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGcsVSksaT1NYXRoLmltdWwoZyxWKSxpPWkrTWF0aC5pbXVsKHksVSl8MCxhPU1hdGguaW11bCh5LFYpLG49bitNYXRoLmltdWwocCxxKXwwLGk9aStNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwobSxxKXwwLGE9YStNYXRoLmltdWwobSxHKXwwLG49bitNYXRoLmltdWwoaCxYKXwwLGk9aStNYXRoLmltdWwoaCxXKXwwLGk9aStNYXRoLmltdWwoZixYKXwwLGE9YStNYXRoLmltdWwoZixXKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeCxVKSxpPU1hdGguaW11bCh4LFYpLGk9aStNYXRoLmltdWwoXyxVKXwwLGE9TWF0aC5pbXVsKF8sViksbj1uK01hdGguaW11bChnLHEpfDAsaT1pK01hdGguaW11bChnLEcpfDAsaT1pK01hdGguaW11bCh5LHEpfDAsYT1hK01hdGguaW11bCh5LEcpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFcpfDAsaT1pK01hdGguaW11bChtLFgpfDAsYT1hK01hdGguaW11bChtLFcpfDAsbj1uK01hdGguaW11bChoLEopfDAsaT1pK01hdGguaW11bChoLEspfDAsaT1pK01hdGguaW11bChmLEopfDAsYT1hK01hdGguaW11bChmLEspfDA7dmFyIGJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhidD4+PjI2KXwwLGJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChNLFUpLGk9TWF0aC5pbXVsKE0sViksaT1pK01hdGguaW11bChrLFUpfDAsYT1NYXRoLmltdWwoayxWKSxuPW4rTWF0aC5pbXVsKHgscSl8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxpPWkrTWF0aC5pbXVsKF8scSl8MCxhPWErTWF0aC5pbXVsKF8sRyl8MCxuPW4rTWF0aC5pbXVsKGcsWCl8MCxpPWkrTWF0aC5pbXVsKGcsVyl8MCxpPWkrTWF0aC5pbXVsKHksWCl8MCxhPWErTWF0aC5pbXVsKHksVyl8MCxuPW4rTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKHAsSyl8MCxpPWkrTWF0aC5pbXVsKG0sSil8MCxhPWErTWF0aC5pbXVsKG0sSyl8MCxuPW4rTWF0aC5pbXVsKGgsJCl8MCxpPWkrTWF0aC5pbXVsKGgsdHQpfDAsaT1pK01hdGguaW11bChmLCQpfDAsYT1hK01hdGguaW11bChmLHR0KXwwO3ZhciB4dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVCxVKSxpPU1hdGguaW11bChULFYpLGk9aStNYXRoLmltdWwoUyxVKXwwLGE9TWF0aC5pbXVsKFMsViksbj1uK01hdGguaW11bChNLHEpfDAsaT1pK01hdGguaW11bChNLEcpfDAsaT1pK01hdGguaW11bChrLHEpfDAsYT1hK01hdGguaW11bChrLEcpfDAsbj1uK01hdGguaW11bCh4LFgpfDAsaT1pK01hdGguaW11bCh4LFcpfDAsaT1pK01hdGguaW11bChfLFgpfDAsYT1hK01hdGguaW11bChfLFcpfDAsbj1uK01hdGguaW11bChnLEopfDAsaT1pK01hdGguaW11bChnLEspfDAsaT1pK01hdGguaW11bCh5LEopfDAsYT1hK01hdGguaW11bCh5LEspfDAsbj1uK01hdGguaW11bChwLCQpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwobSwkKXwwLGE9YStNYXRoLmltdWwobSx0dCl8MCxuPW4rTWF0aC5pbXVsKGgscnQpfDAsaT1pK01hdGguaW11bChoLG50KXwwLGk9aStNYXRoLmltdWwoZixydCl8MCxhPWErTWF0aC5pbXVsKGYsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChMLFUpLGk9TWF0aC5pbXVsKEwsViksaT1pK01hdGguaW11bChDLFUpfDAsYT1NYXRoLmltdWwoQyxWKSxuPW4rTWF0aC5pbXVsKFQscSl8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxpPWkrTWF0aC5pbXVsKFMscSl8MCxhPWErTWF0aC5pbXVsKFMsRyl8MCxuPW4rTWF0aC5pbXVsKE0sWCl8MCxpPWkrTWF0aC5pbXVsKE0sVyl8MCxpPWkrTWF0aC5pbXVsKGssWCl8MCxhPWErTWF0aC5pbXVsKGssVyl8MCxuPW4rTWF0aC5pbXVsKHgsSil8MCxpPWkrTWF0aC5pbXVsKHgsSyl8MCxpPWkrTWF0aC5pbXVsKF8sSil8MCxhPWErTWF0aC5pbXVsKF8sSyl8MCxuPW4rTWF0aC5pbXVsKGcsJCl8MCxpPWkrTWF0aC5pbXVsKGcsdHQpfDAsaT1pK01hdGguaW11bCh5LCQpfDAsYT1hK01hdGguaW11bCh5LHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLGE9YStNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKGgsYXQpfDAsaT1pK01hdGguaW11bChoLG90KXwwLGk9aStNYXRoLmltdWwoZixhdCl8MCxhPWErTWF0aC5pbXVsKGYsb3QpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChJLFUpLGk9TWF0aC5pbXVsKEksViksaT1pK01hdGguaW11bChELFUpfDAsYT1NYXRoLmltdWwoRCxWKSxuPW4rTWF0aC5pbXVsKEwscSl8MCxpPWkrTWF0aC5pbXVsKEwsRyl8MCxpPWkrTWF0aC5pbXVsKEMscSl8MCxhPWErTWF0aC5pbXVsKEMsRyl8MCxuPW4rTWF0aC5pbXVsKFQsWCl8MCxpPWkrTWF0aC5pbXVsKFQsVyl8MCxpPWkrTWF0aC5pbXVsKFMsWCl8MCxhPWErTWF0aC5pbXVsKFMsVyl8MCxuPW4rTWF0aC5pbXVsKE0sSil8MCxpPWkrTWF0aC5pbXVsKE0sSyl8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxhPWErTWF0aC5pbXVsKGssSyl8MCxuPW4rTWF0aC5pbXVsKHgsJCl8MCxpPWkrTWF0aC5pbXVsKHgsdHQpfDAsaT1pK01hdGguaW11bChfLCQpfDAsYT1hK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoZyxydCl8MCxpPWkrTWF0aC5pbXVsKGcsbnQpfDAsaT1pK01hdGguaW11bCh5LHJ0KXwwLGE9YStNYXRoLmltdWwoeSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChwLG90KXwwLGk9aStNYXRoLmltdWwobSxhdCl8MCxhPWErTWF0aC5pbXVsKG0sb3QpfDAsbj1uK01hdGguaW11bChoLGx0KXwwLGk9aStNYXRoLmltdWwoaCx1dCl8MCxpPWkrTWF0aC5pbXVsKGYsbHQpfDAsYT1hK01hdGguaW11bChmLHV0KXwwO3ZhciBNdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTyxVKSxpPU1hdGguaW11bChPLFYpLGk9aStNYXRoLmltdWwoUixVKXwwLGE9TWF0aC5pbXVsKFIsViksbj1uK01hdGguaW11bChJLHEpfDAsaT1pK01hdGguaW11bChJLEcpfDAsaT1pK01hdGguaW11bChELHEpfDAsYT1hK01hdGguaW11bChELEcpfDAsbj1uK01hdGguaW11bChMLFgpfDAsaT1pK01hdGguaW11bChMLFcpfDAsaT1pK01hdGguaW11bChDLFgpfDAsYT1hK01hdGguaW11bChDLFcpfDAsbj1uK01hdGguaW11bChULEopfDAsaT1pK01hdGguaW11bChULEspfDAsaT1pK01hdGguaW11bChTLEopfDAsYT1hK01hdGguaW11bChTLEspfDAsbj1uK01hdGguaW11bChNLCQpfDAsaT1pK01hdGguaW11bChNLHR0KXwwLGk9aStNYXRoLmltdWwoaywkKXwwLGE9YStNYXRoLmltdWwoayx0dCl8MCxuPW4rTWF0aC5pbXVsKHgscnQpfDAsaT1pK01hdGguaW11bCh4LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxhPWErTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bChnLGF0KXwwLGk9aStNYXRoLmltdWwoZyxvdCl8MCxpPWkrTWF0aC5pbXVsKHksYXQpfDAsYT1hK01hdGguaW11bCh5LG90KXwwLG49bitNYXRoLmltdWwocCxsdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChtLGx0KXwwLGE9YStNYXRoLmltdWwobSx1dCl8MCxuPW4rTWF0aC5pbXVsKGgsaHQpfDAsaT1pK01hdGguaW11bChoLGZ0KXwwLGk9aStNYXRoLmltdWwoZixodCl8MCxhPWErTWF0aC5pbXVsKGYsZnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLFUpLGk9TWF0aC5pbXVsKGosViksaT1pK01hdGguaW11bChOLFUpfDAsYT1NYXRoLmltdWwoTixWKSxuPW4rTWF0aC5pbXVsKE8scSl8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxpPWkrTWF0aC5pbXVsKFIscSl8MCxhPWErTWF0aC5pbXVsKFIsRyl8MCxuPW4rTWF0aC5pbXVsKEksWCl8MCxpPWkrTWF0aC5pbXVsKEksVyl8MCxpPWkrTWF0aC5pbXVsKEQsWCl8MCxhPWErTWF0aC5pbXVsKEQsVyl8MCxuPW4rTWF0aC5pbXVsKEwsSil8MCxpPWkrTWF0aC5pbXVsKEwsSyl8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxhPWErTWF0aC5pbXVsKEMsSyl8MCxuPW4rTWF0aC5pbXVsKFQsJCl8MCxpPWkrTWF0aC5pbXVsKFQsdHQpfDAsaT1pK01hdGguaW11bChTLCQpfDAsYT1hK01hdGguaW11bChTLHR0KXwwLG49bitNYXRoLmltdWwoTSxydCl8MCxpPWkrTWF0aC5pbXVsKE0sbnQpfDAsaT1pK01hdGguaW11bChrLHJ0KXwwLGE9YStNYXRoLmltdWwoayxudCl8MCxuPW4rTWF0aC5pbXVsKHgsYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLGk9aStNYXRoLmltdWwoXyxhdCl8MCxhPWErTWF0aC5pbXVsKF8sb3QpfDAsbj1uK01hdGguaW11bChnLGx0KXwwLGk9aStNYXRoLmltdWwoZyx1dCl8MCxpPWkrTWF0aC5pbXVsKHksbHQpfDAsYT1hK01hdGguaW11bCh5LHV0KXwwLG49bitNYXRoLmltdWwocCxodCl8MCxpPWkrTWF0aC5pbXVsKHAsZnQpfDAsaT1pK01hdGguaW11bChtLGh0KXwwLGE9YStNYXRoLmltdWwobSxmdCl8MCxuPW4rTWF0aC5pbXVsKGgscHQpfDAsaT1pK01hdGguaW11bChoLG10KXwwLGk9aStNYXRoLmltdWwoZixwdCl8MCxhPWErTWF0aC5pbXVsKGYsbXQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLHEpLGk9TWF0aC5pbXVsKGosRyksaT1pK01hdGguaW11bChOLHEpfDAsYT1NYXRoLmltdWwoTixHKSxuPW4rTWF0aC5pbXVsKE8sWCl8MCxpPWkrTWF0aC5pbXVsKE8sVyl8MCxpPWkrTWF0aC5pbXVsKFIsWCl8MCxhPWErTWF0aC5pbXVsKFIsVyl8MCxuPW4rTWF0aC5pbXVsKEksSil8MCxpPWkrTWF0aC5pbXVsKEksSyl8MCxpPWkrTWF0aC5pbXVsKEQsSil8MCxhPWErTWF0aC5pbXVsKEQsSyl8MCxuPW4rTWF0aC5pbXVsKEwsJCl8MCxpPWkrTWF0aC5pbXVsKEwsdHQpfDAsaT1pK01hdGguaW11bChDLCQpfDAsYT1hK01hdGguaW11bChDLHR0KXwwLG49bitNYXRoLmltdWwoVCxydCl8MCxpPWkrTWF0aC5pbXVsKFQsbnQpfDAsaT1pK01hdGguaW11bChTLHJ0KXwwLGE9YStNYXRoLmltdWwoUyxudCl8MCxuPW4rTWF0aC5pbXVsKE0sYXQpfDAsaT1pK01hdGguaW11bChNLG90KXwwLGk9aStNYXRoLmltdWwoayxhdCl8MCxhPWErTWF0aC5pbXVsKGssb3QpfDAsbj1uK01hdGguaW11bCh4LGx0KXwwLGk9aStNYXRoLmltdWwoeCx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sbHQpfDAsYT1hK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoZyxodCl8MCxpPWkrTWF0aC5pbXVsKGcsZnQpfDAsaT1pK01hdGguaW11bCh5LGh0KXwwLGE9YStNYXRoLmltdWwoeSxmdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLG10KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxhPWErTWF0aC5pbXVsKG0sbXQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLFgpLGk9TWF0aC5pbXVsKGosVyksaT1pK01hdGguaW11bChOLFgpfDAsYT1NYXRoLmltdWwoTixXKSxuPW4rTWF0aC5pbXVsKE8sSil8MCxpPWkrTWF0aC5pbXVsKE8sSyl8MCxpPWkrTWF0aC5pbXVsKFIsSil8MCxhPWErTWF0aC5pbXVsKFIsSyl8MCxuPW4rTWF0aC5pbXVsKEksJCl8MCxpPWkrTWF0aC5pbXVsKEksdHQpfDAsaT1pK01hdGguaW11bChELCQpfDAsYT1hK01hdGguaW11bChELHR0KXwwLG49bitNYXRoLmltdWwoTCxydCl8MCxpPWkrTWF0aC5pbXVsKEwsbnQpfDAsaT1pK01hdGguaW11bChDLHJ0KXwwLGE9YStNYXRoLmltdWwoQyxudCl8MCxuPW4rTWF0aC5pbXVsKFQsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLGk9aStNYXRoLmltdWwoUyxhdCl8MCxhPWErTWF0aC5pbXVsKFMsb3QpfDAsbj1uK01hdGguaW11bChNLGx0KXwwLGk9aStNYXRoLmltdWwoTSx1dCl8MCxpPWkrTWF0aC5pbXVsKGssbHQpfDAsYT1hK01hdGguaW11bChrLHV0KXwwLG49bitNYXRoLmltdWwoeCxodCl8MCxpPWkrTWF0aC5pbXVsKHgsZnQpfDAsaT1pK01hdGguaW11bChfLGh0KXwwLGE9YStNYXRoLmltdWwoXyxmdCl8MCxuPW4rTWF0aC5pbXVsKGcscHQpfDAsaT1pK01hdGguaW11bChnLG10KXwwLGk9aStNYXRoLmltdWwoeSxwdCl8MCxhPWErTWF0aC5pbXVsKHksbXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLEopLGk9TWF0aC5pbXVsKGosSyksaT1pK01hdGguaW11bChOLEopfDAsYT1NYXRoLmltdWwoTixLKSxuPW4rTWF0aC5pbXVsKE8sJCl8MCxpPWkrTWF0aC5pbXVsKE8sdHQpfDAsaT1pK01hdGguaW11bChSLCQpfDAsYT1hK01hdGguaW11bChSLHR0KXwwLG49bitNYXRoLmltdWwoSSxydCl8MCxpPWkrTWF0aC5pbXVsKEksbnQpfDAsaT1pK01hdGguaW11bChELHJ0KXwwLGE9YStNYXRoLmltdWwoRCxudCl8MCxuPW4rTWF0aC5pbXVsKEwsYXQpfDAsaT1pK01hdGguaW11bChMLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxhPWErTWF0aC5pbXVsKEMsb3QpfDAsbj1uK01hdGguaW11bChULGx0KXwwLGk9aStNYXRoLmltdWwoVCx1dCl8MCxpPWkrTWF0aC5pbXVsKFMsbHQpfDAsYT1hK01hdGguaW11bChTLHV0KXwwLG49bitNYXRoLmltdWwoTSxodCl8MCxpPWkrTWF0aC5pbXVsKE0sZnQpfDAsaT1pK01hdGguaW11bChrLGh0KXwwLGE9YStNYXRoLmltdWwoayxmdCl8MCxuPW4rTWF0aC5pbXVsKHgscHQpfDAsaT1pK01hdGguaW11bCh4LG10KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxhPWErTWF0aC5pbXVsKF8sbXQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLCQpLGk9TWF0aC5pbXVsKGosdHQpLGk9aStNYXRoLmltdWwoTiwkKXwwLGE9TWF0aC5pbXVsKE4sdHQpLG49bitNYXRoLmltdWwoTyxydCl8MCxpPWkrTWF0aC5pbXVsKE8sbnQpfDAsaT1pK01hdGguaW11bChSLHJ0KXwwLGE9YStNYXRoLmltdWwoUixudCl8MCxuPW4rTWF0aC5pbXVsKEksYXQpfDAsaT1pK01hdGguaW11bChJLG90KXwwLGk9aStNYXRoLmltdWwoRCxhdCl8MCxhPWErTWF0aC5pbXVsKEQsb3QpfDAsbj1uK01hdGguaW11bChMLGx0KXwwLGk9aStNYXRoLmltdWwoTCx1dCl8MCxpPWkrTWF0aC5pbXVsKEMsbHQpfDAsYT1hK01hdGguaW11bChDLHV0KXwwLG49bitNYXRoLmltdWwoVCxodCl8MCxpPWkrTWF0aC5pbXVsKFQsZnQpfDAsaT1pK01hdGguaW11bChTLGh0KXwwLGE9YStNYXRoLmltdWwoUyxmdCl8MCxuPW4rTWF0aC5pbXVsKE0scHQpfDAsaT1pK01hdGguaW11bChNLG10KXwwLGk9aStNYXRoLmltdWwoayxwdCl8MCxhPWErTWF0aC5pbXVsKGssbXQpfDA7dmFyIEx0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhMdD4+PjI2KXwwLEx0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLHJ0KSxpPU1hdGguaW11bChqLG50KSxpPWkrTWF0aC5pbXVsKE4scnQpfDAsYT1NYXRoLmltdWwoTixudCksbj1uK01hdGguaW11bChPLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxpPWkrTWF0aC5pbXVsKFIsYXQpfDAsYT1hK01hdGguaW11bChSLG90KXwwLG49bitNYXRoLmltdWwoSSxsdCl8MCxpPWkrTWF0aC5pbXVsKEksdXQpfDAsaT1pK01hdGguaW11bChELGx0KXwwLGE9YStNYXRoLmltdWwoRCx1dCl8MCxuPW4rTWF0aC5pbXVsKEwsaHQpfDAsaT1pK01hdGguaW11bChMLGZ0KXwwLGk9aStNYXRoLmltdWwoQyxodCl8MCxhPWErTWF0aC5pbXVsKEMsZnQpfDAsbj1uK01hdGguaW11bChULHB0KXwwLGk9aStNYXRoLmltdWwoVCxtdCl8MCxpPWkrTWF0aC5pbXVsKFMscHQpfDAsYT1hK01hdGguaW11bChTLG10KXwwO3ZhciBDdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoQ3Q+Pj4yNil8MCxDdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixhdCksaT1NYXRoLmltdWwoaixvdCksaT1pK01hdGguaW11bChOLGF0KXwwLAphPU1hdGguaW11bChOLG90KSxuPW4rTWF0aC5pbXVsKE8sbHQpfDAsaT1pK01hdGguaW11bChPLHV0KXwwLGk9aStNYXRoLmltdWwoUixsdCl8MCxhPWErTWF0aC5pbXVsKFIsdXQpfDAsbj1uK01hdGguaW11bChJLGh0KXwwLGk9aStNYXRoLmltdWwoSSxmdCl8MCxpPWkrTWF0aC5pbXVsKEQsaHQpfDAsYT1hK01hdGguaW11bChELGZ0KXwwLG49bitNYXRoLmltdWwoTCxwdCl8MCxpPWkrTWF0aC5pbXVsKEwsbXQpfDAsaT1pK01hdGguaW11bChDLHB0KXwwLGE9YStNYXRoLmltdWwoQyxtdCl8MDt2YXIgenQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KGErKGk+Pj4xMyl8MCkrKHp0Pj4+MjYpfDAsenQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGosbHQpLGk9TWF0aC5pbXVsKGosdXQpLGk9aStNYXRoLmltdWwoTixsdCl8MCxhPU1hdGguaW11bChOLHV0KSxuPW4rTWF0aC5pbXVsKE8saHQpfDAsaT1pK01hdGguaW11bChPLGZ0KXwwLGk9aStNYXRoLmltdWwoUixodCl8MCxhPWErTWF0aC5pbXVsKFIsZnQpfDAsbj1uK01hdGguaW11bChJLHB0KXwwLGk9aStNYXRoLmltdWwoSSxtdCl8MCxpPWkrTWF0aC5pbXVsKEQscHQpfDAsYT1hK01hdGguaW11bChELG10KXwwO3ZhciBJdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixodCksaT1NYXRoLmltdWwoaixmdCksaT1pK01hdGguaW11bChOLGh0KXwwLGE9TWF0aC5pbXVsKE4sZnQpLG49bitNYXRoLmltdWwoTyxwdCl8MCxpPWkrTWF0aC5pbXVsKE8sbXQpfDAsaT1pK01hdGguaW11bChSLHB0KXwwLGE9YStNYXRoLmltdWwoUixtdCl8MDt2YXIgRHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KGErKGk+Pj4xMyl8MCkrKER0Pj4+MjYpfDAsRHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGoscHQpLGk9TWF0aC5pbXVsKGosbXQpLGk9aStNYXRoLmltdWwoTixwdCl8MCxhPU1hdGguaW11bChOLG10KTt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3JldHVybiB1PShhKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxsWzBdPXZ0LGxbMV09Z3QsbFsyXT15dCxsWzNdPWJ0LGxbNF09eHQsbFs1XT1fdCxsWzZdPXd0LGxbN109TXQsbFs4XT1rdCxsWzldPUF0LGxbMTBdPVR0LGxbMTFdPVN0LGxbMTJdPUV0LGxbMTNdPUx0LGxbMTRdPUN0LGxbMTVdPXp0LGxbMTZdPUl0LGxbMTddPUR0LGxbMThdPVB0LDAhPT11JiYobFsxOV09dSxyLmxlbmd0aCsrKSxyfTtNYXRoLmltdWx8fChrPXUpLGEucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/ayh0aGlzLHQsZSk6cjw2Mz91KHRoaXMsdCxlKTpyPDEwMjQ/Yyh0aGlzLHQsZSk6aCh0aGlzLHQsZSl9LGYucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPWEucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGYucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288YTtvKyspbltvXT1lW3Rbb11dLGlbb109clt0W29dXX0sZi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnBlcm11dGUoYSx0LGUscixuLGkpO2Zvcih2YXIgbz0xO288aTtvPDw9MSlmb3IodmFyIHM9bzw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS9zKSx1PU1hdGguc2luKDIqTWF0aC5QSS9zKSxjPTA7YzxpO2MrPXMpZm9yKHZhciBoPWwsZj11LGQ9MDtkPG87ZCsrKXt2YXIgcD1yW2MrZF0sbT1uW2MrZF0sdj1yW2MrZCtvXSxnPW5bYytkK29dLHk9aCp2LWYqZztnPWgqZytmKnYsdj15LHJbYytkXT1wK3YsbltjK2RdPW0rZyxyW2MrZCtvXT1wLXYsbltjK2Qrb109bS1nLGQhPT1zJiYoeT1sKmgtdSpmLGY9bCpmK3UqaCxoPXkpfX0sZi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGYucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGYucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGYucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPTAsbz0wO288ZTtvKyspYSs9MHx0W29dLHJbMipvXT04MTkxJmEsYT4+Pj0xMyxyWzIqbysxXT04MTkxJmEsYT4+Pj0xMztmb3Iobz0yKmU7bzxpOysrbylyW29dPTA7bigwPT09YSksbigwPT0oLTgxOTImYSkpfSxmLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxmLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLGE9dGhpcy5zdHViKG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGY9ci53b3JkcztmLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLG8sbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShvLGEscyxsLG4saSksdGhpcy50cmFuc2Zvcm0odSxhLGMsaCxuLGkpO2Zvcih2YXIgZD0wO2Q8bjtkKyspe3ZhciBwPXNbZF0qY1tkXS1sW2RdKmhbZF07bFtkXT1zW2RdKmhbZF0rbFtkXSpjW2RdLHNbZF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocyxsLG4pLHRoaXMudHJhbnNmb3JtKHMsbCxmLGEsbixpKSx0aGlzLmNvbmp1Z2F0ZShmLGEsbiksdGhpcy5ub3JtYWxpemUxM2IoZixuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LGEucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sYS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGgodGhpcyx0LGUpfSxhLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sYS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LGE9KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPWE+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJmF9cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sYS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxhLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxhLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9bCh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBhKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LGEucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsYT02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBvPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHM9dGhpcy53b3Jkc1tlXSZhLGw9KDB8dGhpcy53b3Jkc1tlXSktczw8cjt0aGlzLndvcmRzW2VdPWx8byxvPXM+Pj4yNi1yfW8mJih0aGlzLndvcmRzW2VdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LGEucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBhPXQlMjYsbz1NYXRoLm1pbigodC1hKS8yNix0aGlzLmxlbmd0aCkscz02NzEwODg2M142NzEwODg2Mz4+PmE8PGEsbD1yO2lmKGktPW8saT1NYXRoLm1heCgwLGkpLGwpe2Zvcih2YXIgdT0wO3U8bzt1KyspbC53b3Jkc1t1XT10aGlzLndvcmRzW3VdO2wubGVuZ3RoPW99aWYoMD09PW8pO2Vsc2UgaWYodGhpcy5sZW5ndGg+bylmb3IodGhpcy5sZW5ndGgtPW8sdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K29dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGM9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09Y3x8dT49aSk7dS0tKXt2YXIgaD0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1jPDwyNi1hfGg+Pj5hLGM9aCZzfXJldHVybiBsJiYwIT09YyYmKGwud29yZHNbbC5sZW5ndGgrK109YyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LGEucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sYS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LGEucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sYS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LGEucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO3JldHVybiEodGhpcy5sZW5ndGg8PXIpJiYhISh0aGlzLndvcmRzW3JdJmkpfSxhLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sYS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sYS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LGEucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LGEucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sYS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sYS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGEucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksYT10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChhKTt2YXIgbyxzPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7bz0oMHx0aGlzLndvcmRzW2krcl0pK3M7dmFyIGw9KDB8dC53b3Jkc1tpXSkqZTtvLT02NzEwODg2MyZsLHM9KG8+PjI2KS0obC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmb31mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspbz0oMHx0aGlzLndvcmRzW2krcl0pK3Mscz1vPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmbztpZigwPT09cylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKC0xPT09cykscz0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylvPS0oMHx0aGlzLndvcmRzW2ldKStzLHM9bz4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZvO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLXQubGVuZ3RoLG49dGhpcy5jbG9uZSgpLGk9dCxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsbD1uLmxlbmd0aC1pLmxlbmd0aDtpZigibW9kIiE9PWUpe3M9bmV3IGEobnVsbCkscy5sZW5ndGg9bCsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKylzLndvcmRzW3VdPTB9dmFyIGM9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsbCk7MD09PWMubmVnYXRpdmUmJihuPWMscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgaD1sLTE7aD49MDtoLS0pe3ZhciBmPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgraF0pKygwfG4ud29yZHNbaS5sZW5ndGgraC0xXSk7Zm9yKGY9TWF0aC5taW4oZi9vfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksZixoKTswIT09bi5uZWdhdGl2ZTspZi0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsaCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2hdPWYpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LGEucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBhKDApLG1vZDpuZXcgYSgwKX07dmFyIGksbyxzO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KHM9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSwibW9kIiE9PWUmJihpPXMuZGl2Lm5lZygpKSwiZGl2IiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlhZGQodCkpLHtkaXY6aSxtb2Q6b30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8ocz10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6cy5tb2R9KTowIT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8ocz10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaXN1Yih0KSkse2RpdjpzLmRpdixtb2Q6b30pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IGEoMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD8iZGl2Ij09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSl9LGEucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwiZGl2IiwhMSkuZGl2fSxhLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITEpLm1vZH0sYS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMCkubW9kfSxhLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxhPXIuY21wKG4pO3JldHVybiBhPDB8fDE9PT1pJiYwPT09YT9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGEucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxhLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgYSgxKSxvPW5ldyBhKDApLHM9bmV3IGEoMCksbD1uZXcgYSgxKSx1PTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKyt1O2Zvcih2YXIgYz1yLmNsb25lKCksaD1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGY9MCxkPTE7MD09KGUud29yZHNbMF0mZCkmJmY8MjY7KytmLGQ8PD0xKTtpZihmPjApZm9yKGUuaXVzaHJuKGYpO2YtLSA+MDspKGkuaXNPZGQoKXx8by5pc09kZCgpKSYmKGkuaWFkZChjKSxvLmlzdWIoaCkpLGkuaXVzaHJuKDEpLG8uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLG09MTswPT0oci53b3Jkc1swXSZtKSYmcDwyNjsrK3AsbTw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykocy5pc09kZCgpfHxsLmlzT2RkKCkpJiYocy5pYWRkKGMpLGwuaXN1YihoKSkscy5pdXNocm4oMSksbC5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIocyksby5pc3ViKGwpKTooci5pc3ViKGUpLHMuaXN1YihpKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpyLml1c2hsbih1KX19LGEucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IGEoMSksbz1uZXcgYSgwKSxzPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIGw9MCx1PTE7MD09KGUud29yZHNbMF0mdSkmJmw8MjY7KytsLHU8PD0xKTtpZihsPjApZm9yKGUuaXVzaHJuKGwpO2wtLSA+MDspaS5pc09kZCgpJiZpLmlhZGQocyksaS5pdXNocm4oMSk7Zm9yKHZhciBjPTAsaD0xOzA9PShyLndvcmRzWzBdJmgpJiZjPDI2OysrYyxoPDw9MSk7aWYoYz4wKWZvcihyLml1c2hybihjKTtjLS0gPjA7KW8uaXNPZGQoKSYmby5pYWRkKHMpLG8uaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKG8pKTooci5pc3ViKGUpLG8uaXN1YihpKSl9dmFyIGY7cmV0dXJuIGY9MD09PWUuY21wbigxKT9pOm8sZi5jbXBuKDApPDAmJmYuaWFkZCh0KSxmfSxhLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIGE9ZTtlPXIscj1hfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sYS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sYS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sYS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIGE9aSxvPXI7MCE9PWEmJm88dGhpcy5sZW5ndGg7bysrKXt2YXIgcz0wfHRoaXMud29yZHNbb107cys9YSxhPXM+Pj4yNixzJj02NzEwODg2Myx0aGlzLndvcmRzW29dPXN9cmV0dXJuIDAhPT1hJiYodGhpcy53b3Jkc1tvXT1hLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxhLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxhLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LGEucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxhLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxhLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sYS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sYS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxhLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHkodCl9LGEucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG4oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sYS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGEucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sYS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGEucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtkLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxkLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpfXdoaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGQucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGQpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLDkpLG49MDtuPHI7bisrKWUud29yZHNbbl09dC53b3Jkc1tuXTtpZihlLmxlbmd0aD1yLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgaT10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPTQxOTQzMDMmaSxuPTEwO248dC5sZW5ndGg7bisrKXt2YXIgYT0wfHQud29yZHNbbl07dC53b3Jkc1tuLTEwXT0oNDE5NDMwMyZhKTw8NHxpPj4+MjIsaT1hfWk+Pj49MjIsdC53b3Jkc1tuLTEwXT1pLDA9PT1pJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShtLGQpLGkodixkKSxpKGcsZCksZy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxhLl9wcmltZT1mdW5jdGlvbih0KXtpZihBW3RdKXJldHVybiBBW3RdO3ZhciBlO2lmKCJrMjU2Ij09PXQpZT1uZXcgcDtlbHNlIGlmKCJwMjI0Ij09PXQpZT1uZXcgbTtlbHNlIGlmKCJwMTkyIj09PXQpZT1uZXcgdjtlbHNle2lmKCJwMjU1MTkiIT09dCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit0KTtlPW5ldyBnfXJldHVybiBBW3RdPWUsZX0seS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHkucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHkucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSx5LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0seS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSx5LnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LHkucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSx5LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LHkucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LHkucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0seS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgYSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxvPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylvKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIHM9bmV3IGEoMSkudG9SZWQodGhpcyksbD1zLnJlZE5lZygpLHU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGM9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihjPW5ldyBhKDIqYypjKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coYyx1KS5jbXAobCk7KWMucmVkSUFkZChsKTtmb3IodmFyIGg9dGhpcy5wb3coYyxpKSxmPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSksZD10aGlzLnBvdyh0LGkpLHA9bzswIT09ZC5jbXAocyk7KXtmb3IodmFyIG09ZCx2PTA7MCE9PW0uY21wKHMpO3YrKyltPW0ucmVkU3FyKCk7bih2PHApO3ZhciBnPXRoaXMucG93KGgsbmV3IGEoMSkuaXVzaGxuKHAtdi0xKSk7Zj1mLnJlZE11bChnKSxoPWcucmVkU3FyKCksZD1kLnJlZE11bChoKSxwPXZ9cmV0dXJuIGZ9LHkucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0seS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMSk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPW5ldyBBcnJheSgxNik7clswXT1uZXcgYSgxKS50b1JlZCh0aGlzKSxyWzFdPXQ7Zm9yKHZhciBuPTI7bjxyLmxlbmd0aDtuKyspcltuXT10aGlzLm11bChyW24tMV0sdCk7dmFyIGk9clswXSxvPTAscz0wLGw9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2Zvcih2YXIgdT1lLndvcmRzW25dLGM9bC0xO2M+PTA7Yy0tKXt2YXIgaD11Pj5jJjE7aSE9PXJbMF0mJihpPXRoaXMuc3FyKGkpKSwwIT09aHx8MCE9PW8/KG88PD0xLG98PWgsKDQ9PT0rK3N8fDA9PT1uJiYwPT09YykmJihpPXRoaXMubXVsKGkscltvXSkscz0wLG89MCkpOnM9MH1sPTI2fXJldHVybiBpfSx5LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSx5LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sYS5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYih0KX0saShiLHkpLGIucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxiLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sYi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBhKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHZvaWQgMD09PWV8fGUsdGhpcyl9LHt9XSw2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9MDtmb3IoZT0wO2U8aTsrK2UpYSs9dFtlXS5sZW5ndGg7dmFyIG89bmV3IEFycmF5KGEpLHM9MDtmb3IoZT0wO2U8aTsrK2Upe3ZhciBsPXRbZV0sdT1sLmxlbmd0aDtmb3Iocj0wO3I8dTsrK3Ipe3ZhciBjPW9bcysrXT1uZXcgQXJyYXkodS0xKSxoPTA7Zm9yKG49MDtuPHU7KytuKW4hPT1yJiYoY1toKytdPWxbbl0pO2lmKDEmcil7dmFyIGY9Y1sxXTtjWzFdPWNbMF0sY1swXT1mfX19cmV0dXJuIG99ZS5leHBvcnRzPW59LHt9XSw2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPTA7cjx0OysrcilpZighKGVbcl08PWVbcit0XSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaSh0LGUscixpKXtmb3IodmFyIGE9MCxvPTAscz0wLGw9dC5sZW5ndGg7czxsOysrcyl7dmFyIHU9dFtzXTtpZighbihlLHUpKXtmb3IodmFyIGM9MDtjPDIqZTsrK2MpclthKytdPXVbY107aVtvKytdPXN9fXJldHVybiBvfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGE9dC5sZW5ndGgsbz1lLmxlbmd0aDtpZighKGE8PTB8fG88PTApKXt2YXIgcz10WzBdLmxlbmd0aD4+PjE7aWYoIShzPD0wKSl7dmFyIGwsdT1oLm1hbGxvY0RvdWJsZSgyKnMqYSksYz1oLm1hbGxvY0ludDMyKGEpO2lmKChhPWkodCxzLHUsYykpPjApe2lmKDE9PT1zJiZuKWYuaW5pdChhKSxsPWYuc3dlZXBDb21wbGV0ZShzLHIsMCxhLHUsYywwLGEsdSxjKTtlbHNle3ZhciBwPWgubWFsbG9jRG91YmxlKDIqcypvKSxtPWgubWFsbG9jSW50MzIobyk7bz1pKGUscyxwLG0pLG8+MCYmKGYuaW5pdChhK28pLGw9MT09PXM/Zi5zd2VlcEJpcGFydGl0ZShzLHIsMCxhLHUsYywwLG8scCxtKTpkKHMscixuLGEsdSxjLG8scCxtKSxoLmZyZWUocCksaC5mcmVlKG0pKX1oLmZyZWUodSksaC5mcmVlKGMpfXJldHVybiBsfX19ZnVuY3Rpb24gbyh0LGUpe2MucHVzaChbdCxlXSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYz1bXSxhKHQsdCxvLCEwKSxjfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYz1bXSxhKHQsZSxvLCExKSxjfWZ1bmN0aW9uIHUodCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIHModCk7Y2FzZSAyOnJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2EodCx0LGUsITApOmwodCxlKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIsITEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJib3gtaW50ZXJzZWN0OiBJbnZhbGlkIGFyZ3VtZW50cyIpfX1lLmV4cG9ydHM9dTt2YXIgYyxoPXQoInR5cGVkYXJyYXktcG9vbCIpLGY9dCgiLi9saWIvc3dlZXAiKSxkPXQoIi4vbGliL2ludGVyc2VjdCIpfSx7Ii4vbGliL2ludGVyc2VjdCI6NzAsIi4vbGliL3N3ZWVwIjo3NCwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSw2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj0iYnJ1dGVGb3JjZSIrKHQ/IlJlZCI6IkJsdWUiKSsoZT8iRmxpcCI6IiIpKyhyPyJGdWxsIjoiIiksaT1bImZ1bmN0aW9uICIsbiwiKCIsdy5qb2luKCksIil7IiwidmFyICIsdSwiPTIqIixhLCI7Il0sbD0iZm9yKHZhciBpPSIrYysiLCIrcCsiPSIrdSsiKiIrYysiO2k8IitoKyI7KytpLCIrcCsiKz0iK3UrIil7dmFyIHgwPSIrZisiWyIrbysiKyIrcCsiXSx4MT0iK2YrIlsiK28rIisiK3ArIisiK2ErIl0seGk9IitkKyJbaV07IixNPSJmb3IodmFyIGo9IittKyIsIitiKyI9Iit1KyIqIittKyI7ajwiK3YrIjsrK2osIitiKyIrPSIrdSsiKXt2YXIgeTA9IitnKyJbIitvKyIrIitiKyJdLCIrKHI/InkxPSIrZysiWyIrbysiKyIrYisiKyIrYSsiXSwiOiIiKSsieWk9Iit5KyJbal07IjtyZXR1cm4gdD9pLnB1c2gobCxfLCI6IixNKTppLnB1c2goTSxfLCI6IixsKSxyP2kucHVzaCgiaWYoeTE8eDB8fHgxPHkwKWNvbnRpbnVlOyIpOmU/aS5wdXNoKCJpZih5MDw9eDB8fHgxPHkwKWNvbnRpbnVlOyIpOmkucHVzaCgiaWYoeTA8eDB8fHgxPHkwKWNvbnRpbnVlOyIpLGkucHVzaCgiZm9yKHZhciBrPSIrbysiKzE7azwiK2ErIjsrK2spe3ZhciByMD0iK2YrIltrKyIrcCsiXSxyMT0iK2YrIltrKyIrYSsiKyIrcCsiXSxiMD0iK2crIltrKyIrYisiXSxiMT0iK2crIltrKyIrYSsiKyIrYisiXTtpZihyMTxiMHx8YjE8cjApY29udGludWUgIitfKyI7fXZhciAiK3grIj0iK3MrIigiKSxlP2kucHVzaCgieWkseGkiKTppLnB1c2goInhpLHlpIiksaS5wdXNoKCIpO2lmKCIreCsiIT09dm9pZCAwKXJldHVybiAiK3grIjt9fX0iKSx7bmFtZTpuLGNvZGU6aS5qb2luKCIiKX19ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKGUscil7dmFyIGE9bihlLHIsdCk7aS5wdXNoKGEuY29kZSksby5wdXNoKCJyZXR1cm4gIithLm5hbWUrIigiK3cuam9pbigpKyIpOyIpfXZhciByPSJicnV0ZUZvcmNlIisodD8iRnVsbCI6IlBhcnRpYWwiKSxpPVtdLGE9dy5zbGljZSgpO3R8fGEuc3BsaWNlKDMsMCxsKTt2YXIgbz1bImZ1bmN0aW9uICIrcisiKCIrYS5qb2luKCkrIil7Il07by5wdXNoKCJpZigiK2grIi0iK2MrIj4iK3YrIi0iK20rIil7IiksdD8oZSghMCwhMSksby5wdXNoKCJ9ZWxzZXsiKSxlKCExLCExKSk6KG8ucHVzaCgiaWYoIitsKyIpeyIpLGUoITAsITApLG8ucHVzaCgifWVsc2V7IiksZSghMCwhMSksby5wdXNoKCJ9fWVsc2V7aWYoIitsKyIpeyIpLGUoITEsITApLG8ucHVzaCgifWVsc2V7IiksZSghMSwhMSksby5wdXNoKCJ9IikpLG8ucHVzaCgifX1yZXR1cm4gIityKTt2YXIgcz1pLmpvaW4oIiIpK28uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbihzKSgpfXZhciBhPSJkIixvPSJheCIscz0idnYiLGw9ImZwIix1PSJlcyIsYz0icnMiLGg9InJlIixmPSJyYiIsZD0icmkiLHA9InJwIixtPSJicyIsdj0iYmUiLGc9ImJiIix5PSJiaSIsYj0iYnAiLHg9InJ2IixfPSJRIix3PVthLG8scyxjLGgsZixkLG0sdixnLHldO3IucGFydGlhbD1pKCExKSxyLmZ1bGw9aSghMCl9LHt9XSw3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9OCp1LmxvZzIoZSsxKSoodCsxKXwwLG49dS5uZXh0UG93MihBKnIpO1MubGVuZ3RoPG4mJihsLmZyZWUoUyksUz1sLm1hbGxvY0ludDMyKG4pKTt2YXIgaT11Lm5leHRQb3cyKFQqcik7RTxpJiYobC5mcmVlKEUpLEU9bC5tYWxsb2NEb3VibGUoaSkpfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEsbyxzLGwpe3ZhciB1PUEqdDtTW3VdPWUsU1t1KzFdPXIsU1t1KzJdPW4sU1t1KzNdPWksU1t1KzRdPWEsU1t1KzVdPW87dmFyIGM9VCp0O0VbY109cyxFW2MrMV09bH1mdW5jdGlvbiBhKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7dmFyIGg9Mip0LGY9bCpoLGQ9dVtmK2VdO3Q6Zm9yKHZhciBwPWksbT1pKmg7cDxhOysrcCxtKz1oKXt2YXIgdj1vW20rZV0sZz1vW20rZSt0XTtpZighKGQ8dnx8ZzxkKSYmKCFufHxkIT09dikpe2Zvcih2YXIgeT1zW3BdLGI9ZSsxO2I8dDsrK2Ipe3ZhciB2PW9bbStiXSxnPW9bbStiK3RdLHg9dVtmK2JdLF89dVtmK2IrdF07aWYoZzx4fHxfPHYpY29udGludWUgdH12YXIgdztpZih2b2lkIDAhPT0odz1uP3IoYyx5KTpyKHksYykpKXJldHVybiB3fX19ZnVuY3Rpb24gbyh0LGUscixuLGksYSxvLHMsbCx1KXt2YXIgYz0yKnQsaD1zKmMsZj1sW2grZV07dDpmb3IodmFyIGQ9bixwPW4qYztkPGk7KytkLHArPWMpe3ZhciBtPW9bZF07aWYobSE9PXUpe3ZhciB2PWFbcCtlXSxnPWFbcCtlK3RdO2lmKCEoZjx2fHxnPGYpKXtmb3IodmFyIHk9ZSsxO3k8dDsrK3kpe3ZhciB2PWFbcCt5XSxnPWFbcCt5K3RdLGI9bFtoK3ldLHg9bFtoK3krdF07aWYoZzxifHx4PHYpY29udGludWUgdH12YXIgXz1yKG0sdSk7aWYodm9pZCAwIT09XylyZXR1cm4gX319fX1mdW5jdGlvbiBzKHQsZSxyLHMsbCx1LGMsbSxMKXtuKHQscytjKTt2YXIgQyx6PTAsST0yKnQ7Zm9yKGkoeisrLDAsMCxzLDAsYyxyPzE2OjAsLTEvMCwxLzApLHJ8fGkoeisrLDAsMCxjLDAscywxLC0xLzAsMS8wKTt6PjA7KXt6LT0xO3ZhciBEPXoqQSxQPVNbRF0sTz1TW0QrMV0sUj1TW0QrMl0sRj1TW0QrM10saj1TW0QrNF0sTj1TW0QrNV0sQj16KlQsVT1FW0JdLFY9RVtCKzFdLEg9MSZOLHE9ISEoMTYmTiksRz1sLFk9dSxYPW0sVz1MO2lmKEgmJihHPW0sWT1MLFg9bCxXPXUpLCEoMiZOJiYoUj1fKHQsUCxPLFIsRyxZLFYpLE8+PVIpfHw0Jk4mJihPPXcodCxQLE8sUixHLFksVSkpPj1SKSl7dmFyIFo9Ui1PLEo9ai1GO2lmKHEpe2lmKHQqWiooWitKKTx5KXtpZih2b2lkIDAhPT0oQz1kLnNjYW5Db21wbGV0ZSh0LFAsZSxPLFIsRyxZLEYsaixYLFcpKSlyZXR1cm4gQztjb250aW51ZX19ZWxzZXtpZih0Kk1hdGgubWluKFosSik8dil7aWYodm9pZCAwIT09KEM9aCh0LFAsZSxILE8sUixHLFksRixqLFgsVykpKXJldHVybiBDO2NvbnRpbnVlfWlmKHQqWipKPGcpe2lmKHZvaWQgMCE9PShDPWQuc2NhbkJpcGFydGl0ZSh0LFAsZSxILE8sUixHLFksRixqLFgsVykpKXJldHVybiBDO2NvbnRpbnVlfX12YXIgSz1iKHQsUCxPLFIsRyxZLFUsVik7aWYoTzxLKWlmKHQqKEstTyk8dil7aWYodm9pZCAwIT09KEM9Zih0LFArMSxlLE8sSyxHLFksRixqLFgsVykpKXJldHVybiBDfWVsc2UgaWYoUD09PXQtMil7aWYodm9pZCAwIT09KEM9SD9kLnN3ZWVwQmlwYXJ0aXRlKHQsZSxGLGosWCxXLE8sSyxHLFkpOmQuc3dlZXBCaXBhcnRpdGUodCxlLE8sSyxHLFksRixqLFgsVykpKXJldHVybiBDfWVsc2UgaSh6KyssUCsxLE8sSyxGLGosSCwtMS8wLDEvMCksaSh6KyssUCsxLEYsaixPLEssMV5ILC0xLzAsMS8wKTtpZihLPFIpe3ZhciBRPXAodCxQLEYsaixYLFcpLCQ9WFtJKlErUF0sdHQ9eCh0LFAsUSxqLFgsVywkKTtpZih0dDxqJiZpKHorKyxQLEssUix0dCxqLCg0fEgpKyhxPzE2OjApLCQsViksRjxRJiZpKHorKyxQLEssUixGLFEsKDJ8SCkrKHE/MTY6MCksVSwkKSxRKzE9PT10dCl7aWYodm9pZCAwIT09KEM9cT9vKHQsUCxlLEssUixHLFksUSxYLFdbUV0pOmEodCxQLGUsSCxLLFIsRyxZLFEsWCxXW1FdKSkpcmV0dXJuIEN9ZWxzZSBpZihRPHR0KXt2YXIgZXQ7aWYocSl7aWYoZXQ9TSh0LFAsSyxSLEcsWSwkKSxLPGV0KXt2YXIgcnQ9eCh0LFAsSyxldCxHLFksJCk7aWYoUD09PXQtMil7aWYoSzxydCYmdm9pZCAwIT09KEM9ZC5zd2VlcENvbXBsZXRlKHQsZSxLLHJ0LEcsWSxRLHR0LFgsVykpKXJldHVybiBDO2lmKHJ0PGV0JiZ2b2lkIDAhPT0oQz1kLnN3ZWVwQmlwYXJ0aXRlKHQsZSxydCxldCxHLFksUSx0dCxYLFcpKSlyZXR1cm4gQ31lbHNlIEs8cnQmJmkoeisrLFArMSxLLHJ0LFEsdHQsMTYsLTEvMCwxLzApLHJ0PGV0JiYoaSh6KyssUCsxLHJ0LGV0LFEsdHQsMCwtMS8wLDEvMCksaSh6KyssUCsxLFEsdHQscnQsZXQsMSwtMS8wLDEvMCkpfX1lbHNlIGV0PUg/ayh0LFAsSyxSLEcsWSwkKTpNKHQsUCxLLFIsRyxZLCQpLEs8ZXQmJihQPT09dC0yP0M9SD9kLnN3ZWVwQmlwYXJ0aXRlKHQsZSxRLHR0LFgsVyxLLGV0LEcsWSk6ZC5zd2VlcEJpcGFydGl0ZSh0LGUsSyxldCxHLFksUSx0dCxYLFcpOihpKHorKyxQKzEsSyxldCxRLHR0LEgsLTEvMCwxLzApLGkoeisrLFArMSxRLHR0LEssZXQsMV5ILC0xLzAsMS8wKSkpfX19fX1lLmV4cG9ydHM9czt2YXIgbD10KCJ0eXBlZGFycmF5LXBvb2wiKSx1PXQoImJpdC10d2lkZGxlIiksYz10KCIuL2JydXRlIiksaD1jLnBhcnRpYWwsZj1jLmZ1bGwsZD10KCIuL3N3ZWVwIikscD10KCIuL21lZGlhbiIpLG09dCgiLi9wYXJ0aXRpb24iKSx2PTEyOCxnPTE8PDIyLHk9MTw8MjIsYj1tKCIhKGxvPj1wMCkmJiEocDE+PWhpKSIsWyJwMCIsInAxIl0pLHg9bSgibG89PT1wMCIsWyJwMCJdKSxfPW0oImxvPHAwIixbInAwIl0pLHc9bSgiaGk8PXAwIixbInAwIl0pLE09bSgibG88PXAwJiZwMDw9aGkiLFsicDAiXSksaz1tKCJsbzxwMCYmcDA8PWhpIixbInAwIl0pLEE9NixUPTIsUz1sLm1hbGxvY0ludDMyKDEwMjQpLEU9bC5tYWxsb2NEb3VibGUoMTAyNCl9LHsiLi9icnV0ZSI6NjksIi4vbWVkaWFuIjo3MSwiLi9wYXJ0aXRpb24iOjcyLCIuL3N3ZWVwIjo3NCwiYml0LXR3aWRkbGUiOjY1LCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgdT1pW3NdLGM9bCxoPW8qKGwtMSk7Yz5yJiZpW2grZV0+dTstLWMsaC09byl7Zm9yKHZhciBmPWgsZD1oK28scD0wO3A8bzsrK3AsKytmLCsrZCl7dmFyIG09aVtmXTtpW2ZdPWlbZF0saVtkXT1tfXZhciB2PWFbY107YVtjXT1hW2MtMV0sYVtjLTFdPXZ9fWZ1bmN0aW9uIGkodCxlLHIsaSxhLGwpe2lmKGk8PXIrMSlyZXR1cm4gcjtmb3IodmFyIHU9cixjPWksaD1pK3I+Pj4xLGY9Mip0LGQ9aCxwPWFbZipoK2VdO3U8Yzspe2lmKGMtdTxzKXtuKHQsZSx1LGMsYSxsKSxwPWFbZipoK2VdO2JyZWFrfXZhciBtPWMtdSx2PU1hdGgucmFuZG9tKCkqbSt1fDAsZz1hW2YqditlXSx5PU1hdGgucmFuZG9tKCkqbSt1fDAsYj1hW2YqeStlXSx4PU1hdGgucmFuZG9tKCkqbSt1fDAsXz1hW2YqeCtlXTtnPD1iP18+PWI/KGQ9eSxwPWIpOmc+PV8/KGQ9dixwPWcpOihkPXgscD1fKTpiPj1fPyhkPXkscD1iKTpfPj1nPyhkPXYscD1nKTooZD14LHA9Xyk7Zm9yKHZhciB3PWYqKGMtMSksTT1mKmQsaz0wO2s8ZjsrK2ssKyt3LCsrTSl7dmFyIEE9YVt3XTthW3ddPWFbTV0sYVtNXT1BfXZhciBUPWxbYy0xXTtsW2MtMV09bFtkXSxsW2RdPVQsZD1vKHQsZSx1LGMtMSxhLGwscCk7Zm9yKHZhciB3PWYqKGMtMSksTT1mKmQsaz0wO2s8ZjsrK2ssKyt3LCsrTSl7dmFyIEE9YVt3XTthW3ddPWFbTV0sYVtNXT1BfXZhciBUPWxbYy0xXTtpZihsW2MtMV09bFtkXSxsW2RdPVQsaDxkKXtmb3IoYz1kLTE7dTxjJiZhW2YqKGMtMSkrZV09PT1wOyljLT0xO2MrPTF9ZWxzZXtpZighKGQ8aCkpYnJlYWs7Zm9yKHU9ZCsxO3U8YyYmYVtmKnUrZV09PT1wOyl1Kz0xfX1yZXR1cm4gbyh0LGUscixoLGEsbCxhW2YqaCtlXSl9ZS5leHBvcnRzPWk7dmFyIGE9dCgiLi9wYXJ0aXRpb24iKSxvPWEoImxvPHAwIixbInAwIl0pLHM9OH0seyIuL3BhcnRpdGlvbiI6NzJ9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ImFiY2RlZiIuc3BsaXQoIiIpLmNvbmNhdChlKSxuPVtdO3JldHVybiB0LmluZGV4T2YoImxvIik+PTAmJm4ucHVzaCgibG89ZVtrK25dIiksdC5pbmRleE9mKCJoaSIpPj0wJiZuLnB1c2goImhpPWVbaytvXSIpLHIucHVzaChpLnJlcGxhY2UoIl8iLG4uam9pbigpKS5yZXBsYWNlKCIkIix0KSksRnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpfWUuZXhwb3J0cz1uO3ZhciBpPSJmb3IodmFyIGo9MiphLGs9aipjLGw9ayxtPWMsbj1iLG89YStiLHA9YztkPnA7KytwLGsrPWope3ZhciBfO2lmKCQpaWYobT09PXApbSs9MSxsKz1qO2Vsc2V7Zm9yKHZhciBzPTA7aj5zOysrcyl7dmFyIHQ9ZVtrK3NdO2VbaytzXT1lW2xdLGVbbCsrXT10fXZhciB1PWZbcF07ZltwXT1mW21dLGZbbSsrXT11fX1yZXR1cm4gbSJ9LHt9XSw3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZTw9NCpmP2koMCxlLTEsdCk6aCgwLGUtMSx0KX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MioodCsxKSxpPXQrMTtpPD1lOysraSl7Zm9yKHZhciBhPXJbbisrXSxvPXJbbisrXSxzPWksbD1uLTI7cy0tID50Oyl7dmFyIHU9cltsLTJdLGM9cltsLTFdO2lmKHU8YSlicmVhaztpZih1PT09YSYmYzxvKWJyZWFrO3JbbF09dSxyW2wrMV09YyxsLT0yfXJbbF09YSxyW2wrMV09b319ZnVuY3Rpb24gYSh0LGUscil7dCo9MixlKj0yO3ZhciBuPXJbdF0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIG8odCxlLHIpe3QqPTIsZSo9MixyW3RdPXJbZV0sclt0KzFdPXJbZSsxXX1mdW5jdGlvbiBzKHQsZSxyLG4pe3QqPTIsZSo9MixyKj0yO3ZhciBpPW5bdF0sYT1uW3QrMV07blt0XT1uW2VdLG5bdCsxXT1uW2UrMV0sbltlXT1uW3JdLG5bZSsxXT1uW3IrMV0sbltyXT1pLG5bcisxXT1hfWZ1bmN0aW9uIGwodCxlLHIsbixpKXt0Kj0yLGUqPTIsaVt0XT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIHUodCxlLHIpe3QqPTIsZSo9Mjt2YXIgbj1yW3RdLGk9cltlXTtyZXR1cm4hKG48aSkmJihuIT09aXx8clt0KzFdPnJbZSsxXSl9ZnVuY3Rpb24gYyh0LGUscixuKXt0Kj0yO3ZhciBpPW5bdF07cmV0dXJuIGk8ZXx8aT09PWUmJm5bdCsxXTxyfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPShlLXQrMSkvNnwwLGQ9dCtuLHA9ZS1uLG09dCtlPj4xLHY9bS1uLGc9bStuLHk9ZCxiPXYseD1tLF89Zyx3PXAsTT10KzEsaz1lLTEsQT0wO3UoeSxiLHIpJiYoQT15LHk9YixiPUEpLHUoXyx3LHIpJiYoQT1fLF89dyx3PUEpLHUoeSx4LHIpJiYoQT15LHk9eCx4PUEpLHUoYix4LHIpJiYoQT1iLGI9eCx4PUEpLHUoeSxfLHIpJiYoQT15LHk9XyxfPUEpLHUoeCxfLHIpJiYoQT14LHg9XyxfPUEpLHUoYix3LHIpJiYoQT1iLGI9dyx3PUEpLHUoYix4LHIpJiYoQT1iLGI9eCx4PUEpLHUoXyx3LHIpJiYoQT1fLF89dyx3PUEpO2Zvcih2YXIgVD1yWzIqYl0sUz1yWzIqYisxXSxFPXJbMipfXSxMPXJbMipfKzFdLEM9Mip5LHo9Mip4LEk9Mip3LEQ9MipkLFA9MiptLE89MipwLFI9MDtSPDI7KytSKXt2YXIgRj1yW0MrUl0saj1yW3orUl0sTj1yW0krUl07cltEK1JdPUYscltQK1JdPWoscltPK1JdPU59byh2LHQsciksbyhnLGUscik7Zm9yKHZhciBCPU07Qjw9azsrK0IpaWYoYyhCLFQsUyxyKSlCIT09TSYmYShCLE0sciksKytNO2Vsc2UgaWYoIWMoQixFLEwscikpZm9yKDs7KXtpZihjKGssRSxMLHIpKXtjKGssVCxTLHIpPyhzKEIsTSxrLHIpLCsrTSwtLWspOihhKEIsayxyKSwtLWspO2JyZWFrfWlmKC0tazxCKWJyZWFrfWwodCxNLTEsVCxTLHIpLGwoZSxrKzEsRSxMLHIpLE0tMi10PD1mP2kodCxNLTIscik6aCh0LE0tMixyKSxlLShrKzIpPD1mP2koaysyLGUscik6aChrKzIsZSxyKSxrLU08PWY/aShNLGsscik6aChNLGsscil9ZS5leHBvcnRzPW47dmFyIGY9MzJ9LHt9XSw3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWgubmV4dFBvdzIodCk7cC5sZW5ndGg8ZSYmKGMuZnJlZShwKSxwPWMubWFsbG9jSW50MzIoZSkpLG0ubGVuZ3RoPGUmJihjLmZyZWUobSksbT1jLm1hbGxvY0ludDMyKGUpKSx2Lmxlbmd0aDxlJiYoYy5mcmVlKHYpLHY9Yy5tYWxsb2NJbnQzMihlKSksZy5sZW5ndGg8ZSYmKGMuZnJlZShnKSxnPWMubWFsbG9jSW50MzIoZSkpLHkubGVuZ3RoPGUmJihjLmZyZWUoeSkseT1jLm1hbGxvY0ludDMyKGUpKSxiLmxlbmd0aDxlJiYoYy5mcmVlKGIpLGI9Yy5tYWxsb2NJbnQzMihlKSk7dmFyIHI9OCplO3gubGVuZ3RoPHImJihjLmZyZWUoeCkseD1jLm1hbGxvY0RvdWJsZShyKSl9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gYSh0LGUscixuKXt0W3JdPW4sZVtuXT1yfWZ1bmN0aW9uIG8odCxlLHIsbixvLHMsbCx1LGMsaCl7Zm9yKHZhciB5PTAsYj0yKnQsXz10LTEsdz1iLTEsTT1yO008bjsrK00pe3ZhciBrPXNbTV0sQT1iKk07eFt5KytdPW9bQStfXSx4W3krK109LShrKzEpLHhbeSsrXT1vW0Erd10seFt5KytdPWt9Zm9yKHZhciBNPWw7TTx1OysrTSl7dmFyIGs9aFtNXStkLFQ9YipNO3hbeSsrXT1jW1QrX10seFt5KytdPS1rLHhbeSsrXT1jW1Qrd10seFt5KytdPWt9dmFyIFM9eT4+PjE7Zih4LFMpO2Zvcih2YXIgRT0wLEw9MCxNPTA7TTxTOysrTSl7dmFyIEM9MHx4WzIqTSsxXTtpZihDPj1kKUM9Qy1kfDAsaSh2LGcsTC0tLEMpO2Vsc2UgaWYoQz49MClpKHAsbSxFLS0sQyk7ZWxzZSBpZihDPD0tZCl7Qz0tQy1kfDA7Zm9yKHZhciB6PTA7ejxFOysreil7dmFyIEk9ZShwW3pdLEMpO2lmKHZvaWQgMCE9PUkpcmV0dXJuIEl9YSh2LGcsTCsrLEMpfWVsc2V7Qz0tQy0xfDA7Zm9yKHZhciB6PTA7ejxMOysreil7dmFyIEk9ZShDLHZbel0pO2lmKHZvaWQgMCE9PUkpcmV0dXJuIEl9YShwLG0sRSsrLEMpfX19ZnVuY3Rpb24gcyh0LGUscixuLG8scyxsLHUsYyxoKXtmb3IodmFyIGQ9MCxfPTIqdCx3PXQtMSxNPV8tMSxrPXI7azxuOysrayl7dmFyIEE9c1trXSsxPDwxLFQ9XyprO3hbZCsrXT1vW1Qrd10seFtkKytdPS1BLHhbZCsrXT1vW1QrTV0seFtkKytdPUF9Zm9yKHZhciBrPWw7azx1Oysrayl7dmFyIEE9aFtrXSsxPDwxLFM9XyprO3hbZCsrXT1jW1Mrd10seFtkKytdPTF8LUEseFtkKytdPWNbUytNXSx4W2QrK109MXxBfXZhciBFPWQ+Pj4xO2YoeCxFKTtmb3IodmFyIEw9MCxDPTAsej0wLGs9MDtrPEU7KytrKXt2YXIgST0wfHhbMiprKzFdLEQ9MSZJO2lmKGs8RS0xJiZJPj4xPT14WzIqayszXT4+MSYmKEQ9MixrKz0xKSxJPDApe2Zvcih2YXIgUD0tKEk+PjEpLTEsTz0wO088ejsrK08pe3ZhciBSPWUoeVtPXSxQKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfWlmKDAhPT1EKWZvcih2YXIgTz0wO088TDsrK08pe3ZhciBSPWUocFtPXSxQKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfWlmKDEhPT1EKWZvcih2YXIgTz0wO088QzsrK08pe3ZhciBSPWUodltPXSxQKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfTA9PT1EP2EocCxtLEwrKyxQKToxPT09RD9hKHYsZyxDKyssUCk6Mj09PUQmJmEoeSxiLHorKyxQKX1lbHNle3ZhciBQPShJPj4xKS0xOzA9PT1EP2kocCxtLEwtLSxQKToxPT09RD9pKHYsZyxDLS0sUCk6Mj09PUQmJmkoeSxiLHotLSxQKX19fWZ1bmN0aW9uIGwodCxlLHIsbixvLHMsbCx1LGMsaCx2LGcpe3ZhciB5PTAsYj0yKnQsXz1lLHc9ZSt0LE09MSxrPTE7bj9rPWQ6TT1kO2Zvcih2YXIgQT1vO0E8czsrK0Epe3ZhciBUPUErTSxTPWIqQTt4W3krK109bFtTK19dLHhbeSsrXT0tVCx4W3krK109bFtTK3ddLHhbeSsrXT1UfWZvcih2YXIgQT1jO0E8aDsrK0Epe3ZhciBUPUErayxFPWIqQTt4W3krK109dltFK19dLHhbeSsrXT0tVH12YXIgTD15Pj4+MTtmKHgsTCk7Zm9yKHZhciBDPTAsQT0wO0E8TDsrK0Epe3ZhciB6PTB8eFsyKkErMV07aWYoejwwKXt2YXIgVD0teixJPSExO2lmKFQ+PWQ/KEk9IW4sVC09ZCk6KEk9ISFuLFQtPTEpLEkpYShwLG0sQysrLFQpO2Vsc2V7CnZhciBEPWdbVF0sUD1iKlQsTz12W1ArZSsxXSxSPXZbUCtlKzErdF07dDpmb3IodmFyIEY9MDtGPEM7KytGKXt2YXIgaj1wW0ZdLE49YipqO2lmKCEoUjxsW04rZSsxXXx8bFtOK2UrMSt0XTxPKSl7Zm9yKHZhciBCPWUrMjtCPHQ7KytCKWlmKHZbUCtCK3RdPGxbTitCXXx8bFtOK0IrdF08dltQK0JdKWNvbnRpbnVlIHQ7dmFyIFUsVj11W2pdO2lmKHZvaWQgMCE9PShVPW4/cihELFYpOnIoVixEKSkpcmV0dXJuIFV9fX19ZWxzZSBpKHAsbSxDLS0sei1NKX19ZnVuY3Rpb24gdSh0LGUscixuLGksYSxvLHMsbCx1LGMpe2Zvcih2YXIgaD0wLG09Mip0LHY9ZSxnPWUrdCx5PW47eTxpOysreSl7dmFyIGI9eStkLF89bSp5O3hbaCsrXT1hW18rdl0seFtoKytdPS1iLHhbaCsrXT1hW18rZ10seFtoKytdPWJ9Zm9yKHZhciB5PXM7eTxsOysreSl7dmFyIGI9eSsxLHc9bSp5O3hbaCsrXT11W3crdl0seFtoKytdPS1ifXZhciBNPWg+Pj4xO2YoeCxNKTtmb3IodmFyIGs9MCx5PTA7eTxNOysreSl7dmFyIEE9MHx4WzIqeSsxXTtpZihBPDApe3ZhciBiPS1BO2lmKGI+PWQpcFtrKytdPWItZDtlbHNle2ItPTE7dmFyIFQ9Y1tiXSxTPW0qYixFPXVbUytlKzFdLEw9dVtTK2UrMSt0XTt0OmZvcih2YXIgQz0wO0M8azsrK0Mpe3ZhciB6PXBbQ10sST1vW3pdO2lmKEk9PT1UKWJyZWFrO3ZhciBEPW0qejtpZighKEw8YVtEK2UrMV18fGFbRCtlKzErdF08RSkpe2Zvcih2YXIgUD1lKzI7UDx0OysrUClpZih1W1MrUCt0XTxhW0QrUF18fGFbRCtQK3RdPHVbUytQXSljb250aW51ZSB0O3ZhciBPPXIoSSxUKTtpZih2b2lkIDAhPT1PKXJldHVybiBPfX19fWVsc2V7Zm9yKHZhciBiPUEtZCxDPWstMTtDPj0wOy0tQylpZihwW0NdPT09Yil7Zm9yKHZhciBQPUMrMTtQPGs7KytQKXBbUC0xXT1wW1BdO2JyZWFrfS0ta319fWUuZXhwb3J0cz17aW5pdDpuLHN3ZWVwQmlwYXJ0aXRlOm8sc3dlZXBDb21wbGV0ZTpzLHNjYW5CaXBhcnRpdGU6bCxzY2FuQ29tcGxldGU6dX07dmFyIGM9dCgidHlwZWRhcnJheS1wb29sIiksaD10KCJiaXQtdHdpZGRsZSIpLGY9dCgiLi9zb3J0IiksZD0xPDwyOCxwPWMubWFsbG9jSW50MzIoMTAyNCksbT1jLm1hbGxvY0ludDMyKDEwMjQpLHY9Yy5tYWxsb2NJbnQzMigxMDI0KSxnPWMubWFsbG9jSW50MzIoMTAyNCkseT1jLm1hbGxvY0ludDMyKDEwMjQpLGI9Yy5tYWxsb2NJbnQzMigxMDI0KSx4PWMubWFsbG9jRG91YmxlKDgxOTIpfSx7Ii4vc29ydCI6NzMsImJpdC10d2lkZGxlIjo2NSwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSw3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHQ+Wil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189aS5wcm90b3R5cGUsZX1mdW5jdGlvbiBpKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIGwodCl9cmV0dXJuIGEodCxlLHIpfWZ1bmN0aW9uIGEodCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9oKHQsZSxyKToic3RyaW5nIj09dHlwZW9mIHQ/dSh0LGUpOmYodCl9ZnVuY3Rpb24gbyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBvKHQpLHQ8PTA/bih0KTp2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9uKHQpLmZpbGwoZSxyKTpuKHQpLmZpbGwoZSk6bih0KX1mdW5jdGlvbiBsKHQpe3JldHVybiBvKHQpLG4odDwwPzA6MHxkKHQpKX1mdW5jdGlvbiB1KHQsZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWV8fChlPSJ1dGY4IiksIWkuaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfG0odCxlKSxhPW4ociksbz1hLndyaXRlKHQsZSk7cmV0dXJuIG8hPT1yJiYoYT1hLnNsaWNlKDAsbykpLGF9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8ZCh0Lmxlbmd0aCkscj1uKGUpLGk9MDtpPGU7aSs9MSlyW2ldPTI1NSZ0W2ldO3JldHVybiByfWZ1bmN0aW9uIGgodCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt2YXIgbjtyZXR1cm4gbj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUsciksbi5fX3Byb3RvX189aS5wcm90b3R5cGUsbn1mdW5jdGlvbiBmKHQpe2lmKGkuaXNCdWZmZXIodCkpe3ZhciBlPTB8ZCh0Lmxlbmd0aCkscj1uKGUpO3JldHVybiAwPT09ci5sZW5ndGg/cjoodC5jb3B5KHIsMCwwLGUpLHIpfWlmKHQpe2lmKEcodCl8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxZKHQubGVuZ3RoKT9uKDApOmModCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gYyh0LmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX1mdW5jdGlvbiBkKHQpe2lmKHQ+PVopdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK1oudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIHAodCl7cmV0dXJuK3QhPXQmJih0PTApLGkuYWxsb2MoK3QpfWZ1bmN0aW9uIG0odCxlKXtpZihpLmlzQnVmZmVyKHQpKXJldHVybiB0Lmxlbmd0aDtpZihHKHQpfHx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIHQuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIHQmJih0PSIiK3QpO3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaChlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIEIodCkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBIKHQpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIEIodCkubGVuZ3RoO2U9KCIiK2UpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gdih0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZihyPj4+PTAsZT4+Pj0wLHI8PWUpcmV0dXJuIiI7Zm9yKHR8fCh0PSJ1dGY4Iik7Oylzd2l0Y2godCl7Y2FzZSJoZXgiOnJldHVybiB6KHRoaXMsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBTKHRoaXMsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4gTCh0aGlzLGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gQyh0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEkodGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIHkodCxlLHIsbixhKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLFkocikmJihyPWE/MDp0Lmxlbmd0aC0xKSxyPDAmJihyPXQubGVuZ3RoK3IpLHI+PXQubGVuZ3RoKXtpZihhKXJldHVybi0xO3I9dC5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWEpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9aS5mcm9tKGUsbikpLGkuaXNCdWZmZXIoZSkpcmV0dXJuIDA9PT1lLmxlbmd0aD8tMTpiKHQsZSxyLG4sYSk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiBlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/YT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodCxlLHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwodCxlLHIpOmIodCxbZV0scixuLGEpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIGIodCxlLHIsbixpKXtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIDE9PT1vP3RbZV06dC5yZWFkVUludDE2QkUoZSpvKX12YXIgbz0xLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLGwvPTIsci89Mn12YXIgdTtpZihpKXt2YXIgYz0tMTtmb3IodT1yO3U8czt1KyspaWYoYSh0LHUpPT09YShlLC0xPT09Yz8wOnUtYykpe2lmKC0xPT09YyYmKGM9dSksdS1jKzE9PT1sKXJldHVybiBjKm99ZWxzZS0xIT09YyYmKHUtPXUtYyksYz0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSx1PXI7dT49MDt1LS0pe2Zvcih2YXIgaD0hMCxmPTA7ZjxsO2YrKylpZihhKHQsdStmKSE9PWEoZSxmKSl7aD0hMTticmVha31pZihoKXJldHVybiB1fXJldHVybi0xfWZ1bmN0aW9uIHgodCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBhPWUubGVuZ3RoO2lmKGElMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPmEvMiYmKG49YS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKFkocykpcmV0dXJuIG87dFtyK29dPXN9cmV0dXJuIG99ZnVuY3Rpb24gXyh0LGUscixuKXtyZXR1cm4gcShCKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHcodCxlLHIsbil7cmV0dXJuIHEoVShlKSx0LHIsbil9ZnVuY3Rpb24gTSh0LGUscixuKXtyZXR1cm4gdyh0LGUscixuKX1mdW5jdGlvbiBrKHQsZSxyLG4pe3JldHVybiBxKEgoZSksdCxyLG4pfWZ1bmN0aW9uIEEodCxlLHIsbil7cmV0dXJuIHEoVihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBUKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9YLmZyb21CeXRlQXJyYXkodCk6WC5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gUyh0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBhPXRbaV0sbz1udWxsLHM9YT4yMzk/NDphPjIyMz8zOmE+MTkxPzI6MTtpZihpK3M8PXIpe3ZhciBsLHUsYyxoO3N3aXRjaChzKXtjYXNlIDE6YTwxMjgmJihvPWEpO2JyZWFrO2Nhc2UgMjpsPXRbaSsxXSwxMjg9PSgxOTImbCkmJihoPSgzMSZhKTw8Nnw2MyZsKT4xMjcmJihvPWgpO2JyZWFrO2Nhc2UgMzpsPXRbaSsxXSx1PXRbaSsyXSwxMjg9PSgxOTImbCkmJjEyOD09KDE5MiZ1KSYmKGg9KDE1JmEpPDwxMnwoNjMmbCk8PDZ8NjMmdSk+MjA0NyYmKGg8NTUyOTZ8fGg+NTczNDMpJiYobz1oKTticmVhaztjYXNlIDQ6bD10W2krMV0sdT10W2krMl0sYz10W2krM10sMTI4PT0oMTkyJmwpJiYxMjg9PSgxOTImdSkmJjEyOD09KDE5MiZjKSYmKGg9KDE1JmEpPDwxOHwoNjMmbCk8PDEyfCg2MyZ1KTw8Nnw2MyZjKT42NTUzNSYmaDwxMTE0MTEyJiYobz1oKX19bnVsbD09PW8/KG89NjU1MzMscz0xKTpvPjY1NTM1JiYoby09NjU1MzYsbi5wdXNoKG8+Pj4xMCYxMDIzfDU1Mjk2KSxvPTU2MzIwfDEwMjMmbyksbi5wdXNoKG8pLGkrPXN9cmV0dXJuIEUobil9ZnVuY3Rpb24gRSh0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD1KKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0KTtmb3IodmFyIHI9IiIsbj0wO248ZTspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdC5zbGljZShuLG4rPUopKTtyZXR1cm4gcn1mdW5jdGlvbiBMKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gQyh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUodFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5sZW5ndGg7KCFlfHxlPDApJiYoZT0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLGE9ZTthPHI7KythKWkrPU4odFthXSk7cmV0dXJuIGl9ZnVuY3Rpb24gSSh0LGUscil7Zm9yKHZhciBuPXQuc2xpY2UoZSxyKSxpPSIiLGE9MDthPG4ubGVuZ3RoO2ErPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW2FdKzI1NipuW2ErMV0pO3JldHVybiBpfWZ1bmN0aW9uIEQodCxlLHIpe2lmKHQlMSE9MHx8dDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZih0K2U+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIFAodCxlLHIsbixhLG8pe2lmKCFpLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihlPmF8fGU8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBPKHQsZSxyLG4saSxhKXtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUih0LGUscixuLGkpe3JldHVybiBlPStlLHI+Pj49MCxpfHxPKHQsZSxyLDQsMy40MDI4MjM0NjYzODUyODg2ZTM4LC0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgpLFcud3JpdGUodCxlLHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gRih0LGUscixuLGkpe3JldHVybiBlPStlLHI+Pj49MCxpfHxPKHQsZSxyLDgsMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCwtMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCksVy53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1mdW5jdGlvbiBqKHQpe2lmKHQ9dC50cmltKCkucmVwbGFjZShLLCIiKSx0Lmxlbmd0aDwyKXJldHVybiIiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9Ij0iO3JldHVybiB0fWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQ8MTY/IjAiK3QudG9TdHJpbmcoMTYpOnQudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEIodCxlKXtlPWV8fDEvMDtmb3IodmFyIHIsbj10Lmxlbmd0aCxpPW51bGwsYT1bXSxvPTA7bzxuOysrbyl7aWYoKHI9dC5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhazthLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO2EucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhazthLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChlLT00KTwwKWJyZWFrO2EucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIGF9ZnVuY3Rpb24gVSh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCgyNTUmdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBWKHQsZSl7Zm9yKHZhciByLG4saSxhPVtdLG89MDtvPHQubGVuZ3RoJiYhKChlLT0yKTwwKTsrK28pcj10LmNoYXJDb2RlQXQobyksbj1yPj44LGk9ciUyNTYsYS5wdXNoKGkpLGEucHVzaChuKTtyZXR1cm4gYX1mdW5jdGlvbiBIKHQpe3JldHVybiBYLnRvQnl0ZUFycmF5KGoodCkpfWZ1bmN0aW9uIHEodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCl9ZnVuY3Rpb24gWSh0KXtyZXR1cm4gdCE9PXR9dmFyIFg9dCgiYmFzZTY0LWpzIiksVz10KCJpZWVlNzU0Iik7ci5CdWZmZXI9aSxyLlNsb3dCdWZmZXI9cCxyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBaPTIxNDc0ODM2NDc7ci5rTWF4TGVuZ3RoPVosaS5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiB0Ll9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09dC5mb28oKX1jYXRjaCh0KXtyZXR1cm4hMX19KCksaS5UWVBFRF9BUlJBWV9TVVBQT1JUfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJmlbU3ltYm9sLnNwZWNpZXNdPT09aSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITF9KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSh0LGUscil9LGkucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxpLl9fcHJvdG9fXz1VaW50OEFycmF5LGkuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBzKHQsZSxyKX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0saS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LGkuaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiEwPT09dC5faXNCdWZmZXJ9LGkuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKCFpLmlzQnVmZmVyKHQpfHwhaS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsYT0wLG89TWF0aC5taW4ocixuKTthPG87KythKWlmKHRbYV0hPT1lW2FdKXtyPXRbYV0sbj1lW2FdO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGkuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09ZSlmb3IoZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdLmxlbmd0aDt2YXIgbj1pLmFsbG9jVW5zYWZlKGUpLGE9MDtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbz10W3JdO2lmKCFpLmlzQnVmZmVyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixhKSxhKz1vLmxlbmd0aH1yZXR1cm4gbn0saS5ieXRlTGVuZ3RoPW0saS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilnKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpZyh0aGlzLGUsZSszKSxnKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9OClnKHRoaXMsZSxlKzcpLGcodGhpcyxlKzEsZSs2KSxnKHRoaXMsZSsyLGUrNSksZyh0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9TKHRoaXMsMCx0KTp2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe2lmKCFpLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1pLmNvbXBhcmUodGhpcyx0KX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PSIiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLGUpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5lJiYodCs9IiAuLi4gIikpLCI8QnVmZmVyICIrdCsiPiJ9LGkucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixhKXtpZighaS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1hJiYoYT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGE+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWEmJmU+PXIpcmV0dXJuIDA7aWYobj49YSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKGU+Pj49MCxyPj4+PTAsbj4+Pj0wLGE+Pj49MCx0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIG89YS1uLHM9ci1lLGw9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixhKSxjPXQuc2xpY2UoZSxyKSxoPTA7aDxsOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGkucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0LGUscil9LGkucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB5KHRoaXMsdCxlLHIsITApfSxpLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHkodGhpcyx0LGUsciwhMSl9LGkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PWUpbj0idXRmOCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlPj4+PTAsaXNGaW5pdGUocik/KHI+Pj49MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBhPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBfKHRoaXMsdCxlLHIpO2Nhc2UiYXNjaWkiOnJldHVybiB3KHRoaXMsdCxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIE0odGhpcyx0LGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBrKHRoaXMsdCxlLHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gQSh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGE9ITB9fSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBKPTQwOTY7aS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0PX5+dCxlPXZvaWQgMD09PWU/cjp+fmUsdDwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLGU8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSxlPHQmJihlPXQpO3ZhciBuPXRoaXMuc3ViYXJyYXkodCxlKTtyZXR1cm4gbi5fX3Byb3RvX189aS5wcm90b3R5cGUsbn0saS5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxEKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBufSxpLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEQodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0Ky0tZV0saT0xO2U+MCYmKGkqPTI1Nik7KW4rPXRoaXNbdCstLWVdKmk7cmV0dXJuIG59LGkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RCh0LDEsdGhpcy5sZW5ndGgpLHRoaXNbdF19LGkucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RCh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEQodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdPDw4fHRoaXNbdCsxXX0saS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdCszXX0saS5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1t0XSsodGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdKX0saS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEQodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIGkqPTEyOCxuPj1pJiYobi09TWF0aC5wb3coMiw4KmUpKSxufSxpLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj1lLGk9MSxhPXRoaXNbdCstLW5dO24+MCYmKGkqPTI1Nik7KWErPXRoaXNbdCstLW5dKmk7cmV0dXJuIGkqPTEyOCxhPj1pJiYoYS09TWF0aC5wb3coMiw4KmUpKSxhfSxpLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RCh0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3RdPy0xKigyNTUtdGhpc1t0XSsxKTp0aGlzW3RdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxEKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0XXx0aGlzW3QrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGkucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEQodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3QrMV18dGhpc1t0XTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0saS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEQodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2fHRoaXNbdCszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XTw8MjR8dGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdfSxpLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RCh0LDQsdGhpcy5sZW5ndGgpLFcucmVhZCh0aGlzLHQsITAsMjMsNCl9LGkucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsNCx0aGlzLmxlbmd0aCksVy5yZWFkKHRoaXMsdCwhMSwyMyw0KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsOCx0aGlzLmxlbmd0aCksVy5yZWFkKHRoaXMsdCwhMCw1Miw4KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsOCx0aGlzLmxlbmd0aCksVy5yZWFkKHRoaXMsdCwhMSw1Miw4KX0saS5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlPj4+PTAscj4+Pj0wLCFuKXtQKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCl9dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxpLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCxyPj4+PTAsIW4pe1AodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKX12YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0saS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LGkucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxpLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UCh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0saS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LGkucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxpLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtQKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxpLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtQKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGkucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UCh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxpLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGkucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0saS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUih0aGlzLHQsZSwhMCxyKX0saS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUih0aGlzLHQsZSwhMSxyKX0saS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEYodGhpcyx0LGUsITAscil9LGkucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBGKHRoaXMsdCxlLCExLHIpfSxpLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksdC5sZW5ndGgtZTxuLXImJihuPXQubGVuZ3RoLWUrcik7dmFyIGksYT1uLXI7aWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcihpPWEtMTtpPj0wOy0taSl0W2krZV09dGhpc1tpK3JdO2Vsc2UgaWYoYTwxZTMpZm9yKGk9MDtpPGE7KytpKXRbaStlXT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkocixyK2EpLGUpO3JldHVybiBhfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlPyhuPWUsZT0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09dC5sZW5ndGgpe3ZhciBhPXQuY2hhckNvZGVBdCgwKTthPDI1NiYmKHQ9YSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFpLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiB0JiYodCY9MjU1KTtpZihlPDB8fHRoaXMubGVuZ3RoPGV8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PWUpcmV0dXJuIHRoaXM7ZT4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCx0fHwodD0wKTt2YXIgbztpZigibnVtYmVyIj09dHlwZW9mIHQpZm9yKG89ZTtvPHI7KytvKXRoaXNbb109dDtlbHNle3ZhciBzPWkuaXNCdWZmZXIodCk/dDpuZXcgaSh0LG4pLGw9cy5sZW5ndGg7Zm9yKG89MDtvPHItZTsrK28pdGhpc1tvK2VdPXNbbyVsXX1yZXR1cm4gdGhpc307dmFyIEs9L1teK1wvMC05QS1aYS16LV9dL2d9LHsiYmFzZTY0LWpzIjo3NixpZWVlNzU0OjI4N31dLDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7cmV0dXJuIj0iPT09dFtlLTJdPzI6Ij0iPT09dFtlLTFdPzE6MH1mdW5jdGlvbiBpKHQpe3JldHVybiAzKnQubGVuZ3RoLzQtbih0KX1mdW5jdGlvbiBhKHQpe3ZhciBlLHIsaSxhLG8scyxsPXQubGVuZ3RoO289bih0KSxzPW5ldyBoKDMqbC80LW8pLGk9bz4wP2wtNDpsO3ZhciB1PTA7Zm9yKGU9MCxyPTA7ZTxpO2UrPTQscis9MylhPWNbdC5jaGFyQ29kZUF0KGUpXTw8MTh8Y1t0LmNoYXJDb2RlQXQoZSsxKV08PDEyfGNbdC5jaGFyQ29kZUF0KGUrMildPDw2fGNbdC5jaGFyQ29kZUF0KGUrMyldLHNbdSsrXT1hPj4xNiYyNTUsc1t1KytdPWE+PjgmMjU1LHNbdSsrXT0yNTUmYTtyZXR1cm4gMj09PW8/KGE9Y1t0LmNoYXJDb2RlQXQoZSldPDwyfGNbdC5jaGFyQ29kZUF0KGUrMSldPj40LHNbdSsrXT0yNTUmYSk6MT09PW8mJihhPWNbdC5jaGFyQ29kZUF0KGUpXTw8MTB8Y1t0LmNoYXJDb2RlQXQoZSsxKV08PDR8Y1t0LmNoYXJDb2RlQXQoZSsyKV0+PjIsc1t1KytdPWE+PjgmMjU1LHNbdSsrXT0yNTUmYSksc31mdW5jdGlvbiBvKHQpe3JldHVybiB1W3Q+PjE4JjYzXSt1W3Q+PjEyJjYzXSt1W3Q+PjYmNjNdK3VbNjMmdF19ZnVuY3Rpb24gcyh0LGUscil7Zm9yKHZhciBuLGk9W10sYT1lO2E8cjthKz0zKW49KHRbYV08PDE2KSsodFthKzFdPDw4KSt0W2ErMl0saS5wdXNoKG8obikpO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj1yJTMsaT0iIixhPVtdLG89MCxsPXItbjtvPGw7bys9MTYzODMpYS5wdXNoKHModCxvLG8rMTYzODM+bD9sOm8rMTYzODMpKTtyZXR1cm4gMT09PW4/KGU9dFtyLTFdLGkrPXVbZT4+Ml0saSs9dVtlPDw0JjYzXSxpKz0iPT0iKToyPT09biYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGkrPXVbZT4+MTBdLGkrPXVbZT4+NCY2M10saSs9dVtlPDwyJjYzXSxpKz0iPSIpLGEucHVzaChpKSxhLmpvaW4oIiIpfXIuYnl0ZUxlbmd0aD1pLHIudG9CeXRlQXJyYXk9YSxyLmZyb21CeXRlQXJyYXk9bDtmb3IodmFyIHU9W10sYz1bXSxoPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGY9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGQ9MCxwPWYubGVuZ3RoO2Q8cDsrK2QpdVtkXT1mW2RdLGNbZi5jaGFyQ29kZUF0KGQpXT1kO2NbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGNbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm5bTWF0aC5taW4odFswXSx0WzFdKSxNYXRoLm1heCh0WzBdLHRbMV0pXX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQubWFwKG4pLnNvcnQoaSl9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9ZnVuY3Rpb24gcyh0LGUscil7QXJyYXkuaXNBcnJheShlKT8ocj1yfHx7fSxlPWV8fFtdKToocj1lfHx7fSxlPVtdKTt2YXIgbj0hIW8ociwiZGVsYXVuYXkiLCEwKSxpPSEhbyhyLCJpbnRlcmlvciIsITApLHM9ISFvKHIsImV4dGVyaW9yIiwhMCksZj0hIW8ociwiaW5maW5pdHkiLCExKTtpZighaSYmIXN8fDA9PT10Lmxlbmd0aClyZXR1cm5bXTt2YXIgZD1sKHQsZSk7aWYobnx8aSE9PXN8fGYpe2Zvcih2YXIgcD11KHQubGVuZ3RoLGEoZSkpLG09MDttPGQubGVuZ3RoOysrbSl7dmFyIHY9ZFttXTtwLmFkZFRyaWFuZ2xlKHZbMF0sdlsxXSx2WzJdKX1yZXR1cm4gbiYmYyh0LHApLHM/aT9mP2gocCwwLGYpOnAuY2VsbHMoKTpoKHAsMSxmKTpoKHAsLTEpfXJldHVybiBkfXZhciBsPXQoIi4vbGliL21vbm90b25lIiksdT10KCIuL2xpYi90cmlhbmd1bGF0aW9uIiksYz10KCIuL2xpYi9kZWxhdW5heSIpLGg9dCgiLi9saWIvZmlsdGVyIik7ZS5leHBvcnRzPXN9LHsiLi9saWIvZGVsYXVuYXkiOjc4LCIuL2xpYi9maWx0ZXIiOjc5LCIuL2xpYi9tb25vdG9uZSI6ODAsIi4vbGliL3RyaWFuZ3VsYXRpb24iOjgxfV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksbyl7dmFyIHM9ZS5vcHBvc2l0ZShuLGkpO2lmKCEoczwwKSl7aWYoaTxuKXt2YXIgbD1uO249aSxpPWwsbD1vLG89cyxzPWx9ZS5pc0NvbnN0cmFpbnQobixpKXx8YSh0W25dLHRbaV0sdFtvXSx0W3NdKTwwJiZyLnB1c2gobixpKX19ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1bXSxpPXQubGVuZ3RoLG89ZS5zdGFycyxzPTA7czxpOysrcylmb3IodmFyIGw9b1tzXSx1PTE7dTxsLmxlbmd0aDt1Kz0yKXt2YXIgYz1sW3VdO2lmKCEoYzxzKSYmIWUuaXNDb25zdHJhaW50KHMsYykpe2Zvcih2YXIgaD1sW3UtMV0sZj0tMSxkPTE7ZDxsLmxlbmd0aDtkKz0yKWlmKGxbZC0xXT09PWMpe2Y9bFtkXTticmVha31mPDB8fGEodFtzXSx0W2NdLHRbaF0sdFtmXSk8MCYmci5wdXNoKHMsYyl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgYz1yLnBvcCgpLHM9ci5wb3AoKSxoPS0xLGY9LTEsbD1vW3NdLHA9MTtwPGwubGVuZ3RoO3ArPTIpe3ZhciBtPWxbcC0xXSx2PWxbcF07bT09PWM/Zj12OnY9PT1jJiYoaD1tKX1oPDB8fGY8MHx8KGEodFtzXSx0W2NdLHRbaF0sdFtmXSk+PTB8fChlLmZsaXAocyxjKSxuKHQsZSxyLGgscyxmKSxuKHQsZSxyLHMsZixoKSxuKHQsZSxyLGYsYyxoKSxuKHQsZSxyLGMsaCxmKSkpfX12YXIgYT10KCJyb2J1c3QtaW4tc3BoZXJlIilbNF07dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtlLmV4cG9ydHM9aX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6ODIsInJvYnVzdC1pbi1zcGhlcmUiOjUwNH1dLDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dGhpcy5jZWxscz10LHRoaXMubmVpZ2hib3I9ZSx0aGlzLmZsYWdzPW4sdGhpcy5jb25zdHJhaW50PXIsdGhpcy5hY3RpdmU9aSx0aGlzLm5leHQ9YSx0aGlzLmJvdW5kYXJ5PW99ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXXx8dFsyXS1lWzJdfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9dC5jZWxscygpLGE9ci5sZW5ndGgsbz0wO288YTsrK28pe3ZhciBzPXJbb10sbD1zWzBdLHU9c1sxXSxjPXNbMl07dTxjP3U8bCYmKHNbMF09dSxzWzFdPWMsc1syXT1sKTpjPGwmJihzWzBdPWMsc1sxXT1sLHNbMl09dSl9ci5zb3J0KGkpO2Zvcih2YXIgaD1uZXcgQXJyYXkoYSksbz0wO288aC5sZW5ndGg7KytvKWhbb109MDt2YXIgZj1bXSxkPVtdLHA9bmV3IEFycmF5KDMqYSksbT1uZXcgQXJyYXkoMyphKSx2PW51bGw7ZSYmKHY9W10pO2Zvcih2YXIgZz1uZXcgbihyLHAsbSxoLGYsZCx2KSxvPTA7bzxhOysrbylmb3IodmFyIHM9cltvXSx5PTA7eTwzOysreSl7dmFyIGw9c1t5XSx1PXNbKHkrMSklM10sYj1wWzMqbyt5XT1nLmxvY2F0ZSh1LGwsdC5vcHBvc2l0ZSh1LGwpKSx4PW1bMypvK3ldPXQuaXNDb25zdHJhaW50KGwsdSk7YjwwJiYoeD9kLnB1c2gobyk6KGYucHVzaChvKSxoW29dPTEpLGUmJnYucHVzaChbdSxsLC0xXSkpfXJldHVybiBnfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSllW2ldPT09ciYmKHRbbisrXT10W2ldKTtyZXR1cm4gdC5sZW5ndGg9bix0fWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuPWEodCxyKTtpZigwPT09ZSlyZXR1cm4gcj9uLmNlbGxzLmNvbmNhdChuLmJvdW5kYXJ5KTpuLmNlbGxzO2Zvcih2YXIgaT0xLHM9bi5hY3RpdmUsbD1uLm5leHQsdT1uLmZsYWdzLGM9bi5jZWxscyxoPW4uY29uc3RyYWludCxmPW4ubmVpZ2hib3I7cy5sZW5ndGg+MHx8bC5sZW5ndGg+MDspe2Zvcig7cy5sZW5ndGg+MDspe3ZhciBkPXMucG9wKCk7aWYodVtkXSE9PS1pKXt1W2RdPWk7Zm9yKHZhciBwPShjW2RdLDApO3A8MzsrK3Ape3ZhciBtPWZbMypkK3BdO20+PTAmJjA9PT11W21dJiYoaFszKmQrcF0/bC5wdXNoKG0pOihzLnB1c2gobSksdVttXT1pKSl9fX12YXIgdj1sO2w9cyxzPXYsbC5sZW5ndGg9MCxpPS1pfXZhciBnPW8oYyx1LGUpO3JldHVybiByP2cuY29uY2F0KG4uYm91bmRhcnkpOmd9dmFyIGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtlLmV4cG9ydHM9cyxuLnByb3RvdHlwZS5sb2NhdGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwLDBdO3JldHVybiBmdW5jdGlvbihlLHIsbil7dmFyIGE9ZSxvPXIscz1uO3JldHVybiByPG4/cjxlJiYoYT1yLG89bixzPWUpOm48ZSYmKGE9bixvPWUscz1yKSxhPDA/LTE6KHRbMF09YSx0WzFdPW8sdFsyXT1zLGwuZXEodGhpcy5jZWxscyx0LGkpKX19KCl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgyfV0sODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuaWR4PXIsdGhpcy5sb3dlcklkcz1uLHRoaXMudXBwZXJJZHM9aX1mdW5jdGlvbiBpKHQsZSxyLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMudHlwZT1yLHRoaXMuaWR4PW59ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQuYVswXS1lLmFbMF18fHQuYVsxXS1lLmFbMV18fHQudHlwZS1lLnR5cGU7cmV0dXJuIHJ8fCh0LnR5cGUhPT1wJiYocj1kKHQuYSx0LmIsZS5iKSk/cjp0LmlkeC1lLmlkeCl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBkKHQuYSx0LmIsZSl9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2Zvcih2YXIgYT1mLmx0KGUsbixvKSxzPWYuZ3QoZSxuLG8pLGw9YTtsPHM7KytsKXtmb3IodmFyIHU9ZVtsXSxjPXUubG93ZXJJZHMsaD1jLmxlbmd0aDtoPjEmJmQocltjW2gtMl1dLHJbY1toLTFdXSxuKT4wOyl0LnB1c2goW2NbaC0xXSxjW2gtMl0saV0pLGgtPTE7Yy5sZW5ndGg9aCxjLnB1c2goaSk7Zm9yKHZhciBwPXUudXBwZXJJZHMsaD1wLmxlbmd0aDtoPjEmJmQocltwW2gtMl1dLHJbcFtoLTFdXSxuKTwwOyl0LnB1c2goW3BbaC0yXSxwW2gtMV0saV0pLGgtPTE7cC5sZW5ndGg9aCxwLnB1c2goaSl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2QodC5hLHQuYixlLmEpOmQoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/ZCh0LmEsdC5iLGUuYik6ZChlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiB1KHQsZSxyKXt2YXIgaT1mLmxlKHQscixsKSxhPXRbaV0sbz1hLnVwcGVySWRzLHM9b1tvLmxlbmd0aC0xXTthLnVwcGVySWRzPVtzXSx0LnNwbGljZShpKzEsMCxuZXcgbihyLmEsci5iLHIuaWR4LFtzXSxvKSl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ci5hO3IuYT1yLmIsci5iPW47dmFyIGk9Zi5lcSh0LHIsbCksYT10W2ldO3RbaS0xXS51cHBlcklkcz1hLnVwcGVySWRzLHQuc3BsaWNlKGksMSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPWUubGVuZ3RoLGw9W10saD0wO2g8cjsrK2gpbC5wdXNoKG5ldyBpKHRbaF0sbnVsbCxwLGgpKTtmb3IodmFyIGg9MDtoPG87KytoKXt2YXIgZj1lW2hdLGQ9dFtmWzBdXSxnPXRbZlsxXV07ZFswXTxnWzBdP2wucHVzaChuZXcgaShkLGcsdixoKSxuZXcgaShnLGQsbSxoKSk6ZFswXT5nWzBdJiZsLnB1c2gobmV3IGkoZyxkLHYsaCksbmV3IGkoZCxnLG0saCkpfWwuc29ydChhKTtmb3IodmFyIHk9bFswXS5hWzBdLSgxK01hdGguYWJzKGxbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSxiPVtuZXcgbihbeSwxXSxbeSwwXSwtMSxbXSxbXSxbXSxbXSldLHg9W10saD0wLF89bC5sZW5ndGg7aDxfOysraCl7dmFyIHc9bFtoXSxNPXcudHlwZTtNPT09cD9zKHgsYix0LHcuYSx3LmlkeCk6TT09PXY/dShiLHQsdyk6YyhiLHQsdyl9cmV0dXJuIHh9dmFyIGY9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxkPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdLHA9MCxtPTEsdj0yO2UuZXhwb3J0cz1ofSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo4Miwicm9idXN0LW9yaWVudGF0aW9uIjo1MDZ9XSw4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MSxpPXQubGVuZ3RoO248aTtuKz0yKWlmKHRbbi0xXT09PWUmJnRbbl09PT1yKXJldHVybiB0W24tMV09dFtpLTJdLHRbbl09dFtpLTFdLHZvaWQodC5sZW5ndGg9aS0yKX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxpPTA7aTx0OysraSlyW2ldPVtdO3JldHVybiBuZXcgbihyLGUpfXZhciBvPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZS5leHBvcnRzPWE7dmFyIHM9bi5wcm90b3R5cGU7cy5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXZhciBlPVswLDBdO3JldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBlWzBdPU1hdGgubWluKHIsbiksZVsxXT1NYXRoLm1heChyLG4pLG8uZXEodGhpcy5lZGdlcyxlLHQpPj0wfX0oKSxzLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO2koblt0XSxlLHIpLGkobltlXSxyLHQpLGkobltyXSx0LGUpfSxzLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxzLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGk9ci5sZW5ndGg7bjxpO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0scy5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxzLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzthKz0yKWUucHVzaChbaVthXSxpW2ErMV1dKTtyZXR1cm4gZX0scy5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgyfV0sODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPVsiZnVuY3Rpb24gIix0LCIoYSxsLGgsIixuLmpvaW4oIiwiKSwiKXsiLGk/IiI6InZhciBpPSIscj8ibC0xIjoiaCsxIiwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV0iXTtyZXR1cm4gaT9lLmluZGV4T2YoImMiKTwwP2EucHVzaCgiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpeyIpOmEucHVzaCgiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXsiKTphLnB1c2goIjtpZigiLGUsIil7aT1tOyIpLHI/YS5wdXNoKCJsPW0rMX1lbHNle2g9bS0xfSIpOmEucHVzaCgiaD1tLTF9ZWxzZXtsPW0rMX0iKSxhLnB1c2goIn0iKSxpP2EucHVzaCgicmV0dXJuIC0xfTsiKTphLnB1c2goInJldHVybiBpfTsiKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG5ldyBGdW5jdGlvbihbbigiQSIsIngiK3QrInkiLGUsWyJ5Il0saSksbigiUCIsImMoeCx5KSIrdCsiMCIsZSxbInkiLCJjIl0saSksImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaCIsciwiKGEseSxjLGwsaCl7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXZvaWQgMCk/MDpsfDAsKGg9PT12b2lkIDApP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dm9pZCAwKT8wOmN8MCwobD09PXZvaWQgMCk/YS5sZW5ndGgtMTpsfDAseSl9fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSw4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9ZS5leHBvcnRzPW59LHt9XSw4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxpPTA7aTxuOysraSlyKz10W2ldKmVbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTt2YXIgcj0odFswXS5sZW5ndGgsbyhbdC5sZW5ndGgrMSx0Lmxlbmd0aCsxXSwxKSksaT1vKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBhPTA7YTxlOysrYSl7Zm9yKHZhciBsPTA7bDw9YTsrK2wpcltsXVthXT1yW2FdW2xdPTIqbih0W2FdLHRbbF0pO2lbYV09bih0W2FdLHRbYV0pfWZvcih2YXIgdT1zKHIsaSksYz0wLGg9dVtlKzFdLGE9MDthPGgubGVuZ3RoOysrYSljKz1oW2FdO2Zvcih2YXIgZj1uZXcgQXJyYXkoZSksYT0wO2E8ZTsrK2Epe2Zvcih2YXIgaD11W2FdLGQ9MCxsPTA7bDxoLmxlbmd0aDsrK2wpZCs9aFtsXTtmW2FdPWQvY31yZXR1cm4gZn1mdW5jdGlvbiBhKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1vKFtlXSksbj1pKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qblthXTtyZXR1cm4gcn12YXIgbz10KCJkdXAiKSxzPXQoInJvYnVzdC1saW5lYXItc29sdmUiKTthLmJhcnljZW5ldHJpYz1pLGUuZXhwb3J0cz1hfSx7ZHVwOjEyMywicm9idXN0LWxpbmVhci1zb2x2ZSI6NTA1fV0sODU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1pKHQpLHI9MCxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfWUuZXhwb3J0cz1uO3ZhciBpPXQoImNpcmN1bWNlbnRlciIpfSx7Y2lyY3VtY2VudGVyOjg0fV0sODY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gZTxyP3Q8ZT9lOnQ+cj9yOnQ6dDxyP3I6dD5lP2U6dH1lLmV4cG9ydHM9bn0se31dLDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9Xyh0KTtyZXR1cm5bTShlLC0xLzApLE0oZSwxLzApXX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgaT1lW25dLGE9dFtpWzBdXSxvPXRbaVsxXV07cltuXT1bTShNYXRoLm1pbihhWzBdLG9bMF0pLC0xLzApLE0oTWF0aC5taW4oYVsxXSxvWzFdKSwtMS8wKSxNKE1hdGgubWF4KGFbMF0sb1swXSksMS8wKSxNKE1hdGgubWF4KGFbMV0sb1sxXSksMS8wKV19cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl07ZVtyXT1bTShuWzBdLC0xLzApLE0oblsxXSwtMS8wKSxNKG5bMF0sMS8wKSxNKG5bMV0sMS8wKV19cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49W107cmV0dXJuIGcocixmdW5jdGlvbihyLGkpe3ZhciBhPWVbcl0sbz1lW2ldO2lmKGFbMF0hPT1vWzBdJiZhWzBdIT09b1sxXSYmYVsxXSE9PW9bMF0mJmFbMV0hPT1vWzFdKXt2YXIgcz10W2FbMF1dLGw9dFthWzFdXSx1PXRbb1swXV0sYz10W29bMV1dO3kocyxsLHUsYykmJm4ucHVzaChbcixpXSl9fSksbn1mdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBpPVtdO3JldHVybiBnKHIsbixmdW5jdGlvbihyLG4pe3ZhciBhPWVbcl07aWYoYVswXSE9PW4mJmFbMV0hPT1uKXt2YXIgbz10W25dLHM9dFthWzBdXSxsPXRbYVsxXV07eShzLGwsbyxvKSYmaS5wdXNoKFtyLG5dKX19KSxpfWZ1bmN0aW9uIGwodCxlLHIsbixpKXt2YXIgYSxvLHM9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW2IodFswXSksYih0WzFdKV19KTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbD1yW2FdO289bFswXTt2YXIgdT1sWzFdLGM9ZVtvXSxoPWVbdV0sZj1rKHcodFtjWzBdXSksdyh0W2NbMV1dKSx3KHRbaFswXV0pLHcodFtoWzFdXSkpO2lmKGYpe3ZhciBkPXQubGVuZ3RoO3QucHVzaChbXyhmWzBdKSxfKGZbMV0pXSkscy5wdXNoKGYpLG4ucHVzaChbbyxkXSxbdSxkXSl9fWZvcihuLnNvcnQoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPXNbdFsxXV0sbj1zW2VbMV1dO3JldHVybiB4KHJbMF0sblswXSl8fHgoclsxXSxuWzFdKX0pLGE9bi5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHA9blthXTtvPXBbMF07dmFyIG09ZVtvXSx2PW1bMF0sZz1tWzFdLHk9dFt2XSxNPXRbZ107aWYoKHlbMF0tTVswXXx8eVsxXS1NWzFdKTwwKXt2YXIgQT12O3Y9ZyxnPUF9bVswXT12O3ZhciBULFM9bVsxXT1wWzFdO2ZvcihpJiYoVD1tWzJdKTthPjAmJm5bYS0xXVswXT09PW87KXt2YXIgcD1uWy0tYV0sRT1wWzFdO2k/ZS5wdXNoKFtTLEUsVF0pOmUucHVzaChbUyxFXSksUz1FfWk/ZS5wdXNoKFtTLGcsVF0pOmUucHVzaChbUyxnXSl9cmV0dXJuIHN9ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBpPWUubGVuZ3RoLGE9bmV3IHYoaSksbz1bXSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPWVbc10sdT1uKGxbMF0pLGM9bihsWzFdKTtvLnB1c2goW00odVswXSwtMS8wKSxNKGNbMF0sLTEvMCksTSh1WzFdLDEvMCksTShjWzFdLDEvMCldKX1nKG8sZnVuY3Rpb24odCxlKXthLmxpbmsodCxlKX0pO2Zvcih2YXIgaD0hMCxmPW5ldyBBcnJheShpKSxzPTA7czxpOysrcyl7dmFyIGQ9YS5maW5kKHMpO2QhPT1zJiYoaD0hMSx0W2RdPVtNYXRoLm1pbih0W3NdWzBdLHRbZF1bMF0pLE1hdGgubWluKHRbc11bMV0sdFtkXVsxXSldKX1pZihoKXJldHVybiBudWxsO2Zvcih2YXIgcD0wLHM9MDtzPGk7KytzKXt2YXIgZD1hLmZpbmQocyk7ZD09PXM/KGZbc109cCx0W3ArK109dFtzXSk6ZltzXT0tMX10Lmxlbmd0aD1wO2Zvcih2YXIgcz0wO3M8aTsrK3MpZltzXTwwJiYoZltzXT1mW2EuZmluZChzKV0pO3JldHVybiBmfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gaCh0LGUpe3ZhciByPXRbMF0tZVswXXx8dFsxXS1lWzFdO3JldHVybiByfHwodFsyXTxlWzJdPy0xOnRbMl0+ZVsyXT8xOjApfWZ1bmN0aW9uIGYodCxlLHIpe2lmKDAhPT10Lmxlbmd0aCl7aWYoZSlmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWVbaVswXV0sbz1lW2lbMV1dO2lbMF09TWF0aC5taW4oYSxvKSxpWzFdPU1hdGgubWF4KGEsbyl9ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWlbMF0sbz1pWzFdO2lbMF09TWF0aC5taW4oYSxvKSxpWzFdPU1hdGgubWF4KGEsbyl9cj90LnNvcnQoaCk6dC5zb3J0KGMpO2Zvcih2YXIgcz0xLG49MTtuPHQubGVuZ3RoOysrbil7CnZhciBsPXRbbi0xXSx1PXRbbl07KHVbMF0hPT1sWzBdfHx1WzFdIT09bFsxXXx8ciYmdVsyXSE9PWxbMl0pJiYodFtzKytdPXUpfXQubGVuZ3RoPXN9fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPXUodCxbXSxhKHQpKTtyZXR1cm4gZihlLG4sciksISFufWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPWkodCxlKSxjPW8odCxlLG4pLGg9YSh0KSxkPXModCxlLG4saCkscD1sKHQsZSxjLGQsciksbT11KHQscCxoKTtyZXR1cm4gZihlLG0sciksISFtfHwoYy5sZW5ndGg+MHx8ZC5sZW5ndGg+MCl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG47aWYocil7bj1lO2Zvcih2YXIgaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG89ZVthXTtpW2FdPVtvWzBdLG9bMV0sclthXV19ZT1pfWZvcih2YXIgcz1kKHQsZSwhIXIpO3AodCxlLCEhcik7KXM9ITA7aWYociYmcyl7bi5sZW5ndGg9MCxyLmxlbmd0aD0wO2Zvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKXt2YXIgbz1lW2FdO24ucHVzaChbb1swXSxvWzFdXSksci5wdXNoKG9bMl0pfX1yZXR1cm4gc31lLmV4cG9ydHM9bTt2YXIgdj10KCJ1bmlvbi1maW5kIiksZz10KCJib3gtaW50ZXJzZWN0IikseT10KCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiKSxiPXQoImJpZy1yYXQiKSx4PXQoImJpZy1yYXQvY21wIiksXz10KCJiaWctcmF0L3RvLWZsb2F0Iiksdz10KCJyYXQtdmVjIiksTT10KCJuZXh0YWZ0ZXIiKSxrPXQoIi4vbGliL3JhdC1zZWctaW50ZXJzZWN0Iil9LHsiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3QiOjg4LCJiaWctcmF0Ijo1MSwiYmlnLXJhdC9jbXAiOjQ5LCJiaWctcmF0L3RvLWZsb2F0Ijo2MywiYm94LWludGVyc2VjdCI6NjgsbmV4dGFmdGVyOjQ2NiwicmF0LXZlYyI6NDkzLCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjUwOSwidW5pb24tZmluZCI6NTQwfV0sODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBzKGEodFswXSxlWzFdKSxhKHRbMV0sZVswXSkpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIGE9dShlLHQpLHM9dShpLHIpLGY9bihhLHMpO2lmKDA9PT1sKGYpKXJldHVybiBudWxsO3ZhciBkPXUodCxyKSxwPW4ocyxkKSxtPW8ocCxmKSx2PWgoYSxtKTtyZXR1cm4gYyh0LHYpfWUuZXhwb3J0cz1pO3ZhciBhPXQoImJpZy1yYXQvbXVsIiksbz10KCJiaWctcmF0L2RpdiIpLHM9dCgiYmlnLXJhdC9zdWIiKSxsPXQoImJpZy1yYXQvc2lnbiIpLHU9dCgicmF0LXZlYy9zdWIiKSxjPXQoInJhdC12ZWMvYWRkIiksaD10KCJyYXQtdmVjL211bHMiKX0seyJiaWctcmF0L2RpdiI6NTAsImJpZy1yYXQvbXVsIjo2MCwiYmlnLXJhdC9zaWduIjo2MSwiYmlnLXJhdC9zdWIiOjYyLCJyYXQtdmVjL2FkZCI6NDkyLCJyYXQtdmVjL211bHMiOjQ5NCwicmF0LXZlYy9zdWIiOjQ5NX1dLDg5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUocixuLGksYSl7ZnVuY3Rpb24gcyhyLGkpe2lmKG51bGw9PT1yKXJldHVybiBudWxsO2lmKDA9PWkpcmV0dXJuIHI7dmFyIGgsZjtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7aWYoZS5fX2lzQXJyYXkocikpaD1bXTtlbHNlIGlmKGUuX19pc1JlZ0V4cChyKSloPW5ldyBSZWdFeHAoci5zb3VyY2UsbyhyKSksci5sYXN0SW5kZXgmJihoLmxhc3RJbmRleD1yLmxhc3RJbmRleCk7ZWxzZSBpZihlLl9faXNEYXRlKHIpKWg9bmV3IERhdGUoci5nZXRUaW1lKCkpO2Vsc2V7aWYoYyYmdC5pc0J1ZmZlcihyKSlyZXR1cm4gaD1uZXcgdChyLmxlbmd0aCksci5jb3B5KGgpLGg7dm9pZCAwPT09YT8oZj1PYmplY3QuZ2V0UHJvdG90eXBlT2YociksaD1PYmplY3QuY3JlYXRlKGYpKTooaD1PYmplY3QuY3JlYXRlKGEpLGY9YSl9aWYobil7dmFyIGQ9bC5pbmRleE9mKHIpO2lmKC0xIT1kKXJldHVybiB1W2RdO2wucHVzaChyKSx1LnB1c2goaCl9Zm9yKHZhciBwIGluIHIpe3ZhciBtO2YmJihtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZixwKSksbSYmbnVsbD09bS5zZXR8fChoW3BdPXMocltwXSxpLTEpKX1yZXR1cm4gaH0ib2JqZWN0Ij09dHlwZW9mIG4mJihpPW4uZGVwdGgsYT1uLnByb3RvdHlwZSxuLmZpbHRlcixuPW4uY2lyY3VsYXIpO3ZhciBsPVtdLHU9W10sYz12b2lkIDAhPT10O3JldHVybiB2b2lkIDA9PT1uJiYobj0hMCksdm9pZCAwPT09aSYmKGk9MS8wKSxzKHIsaSl9ZnVuY3Rpb24gcih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYiW29iamVjdCBEYXRlXSI9PT1yKHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYiW29iamVjdCBBcnJheV0iPT09cih0KX1mdW5jdGlvbiBhKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmIltvYmplY3QgUmVnRXhwXSI9PT1yKHQpfWZ1bmN0aW9uIG8odCl7dmFyIGU9IiI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSxlfXJldHVybiBlLmNsb25lUHJvdG90eXBlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO3ZhciBlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZS5wcm90b3R5cGU9dCxuZXcgZX0sZS5fX29ialRvU3RyPXIsZS5fX2lzRGF0ZT1uLGUuX19pc0FycmF5PWksZS5fX2lzUmVnRXhwPWEsZS5fX2dldFJlZ0V4cEZsYWdzPW8sZX0oKTsib2JqZWN0Ij09dHlwZW9mIGUmJmUuZXhwb3J0cyYmKGUuZXhwb3J0cz1yKX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjc1fV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe251bGw9PWUmJihlPSEwKTt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdO3JldHVybiBudWxsPT1vJiYobz1lPzE6MjU1KSxlJiYocio9MjU1LG4qPTI1NSxpKj0yNTUsbyo9MjU1KSxyPTI1NSZhKHIsMCwyNTUpLG49MjU1JmEobiwwLDI1NSksaT0yNTUmYShpLDAsMjU1KSxvPTI1NSZhKG8sMCwyNTUpLDE2Nzc3MjE2KnIrKG48PDE2KSsoaTw8OCkrb31mdW5jdGlvbiBpKHQsZSl7dD0rdDt2YXIgcj10Pj4+MjQsbj0oMTY3MTE2ODAmdCk+Pj4xNixpPSg2NTI4MCZ0KT4+PjgsYT0yNTUmdDtyZXR1cm4hMT09PWU/W3IsbixpLGFdOltyLzI1NSxuLzI1NSxpLzI1NSxhLzI1NV19dmFyIGE9dCgiY2xhbXAiKTtlLmV4cG9ydHM9bixlLmV4cG9ydHMudG89bixlLmV4cG9ydHMuZnJvbT1pfSx7Y2xhbXA6ODZ9XSw5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSw5MjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZSxuLHM9W10sbD0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihpW3RdKXM9aVt0XS5zbGljZSgpLG49InJnYiI7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT09dClsPTAsbj0icmdiIixzPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT10LnNsaWNlKDEpLGM9dS5sZW5ndGgsaD1jPD00O2w9MSxoPyhzPVtwYXJzZUludCh1WzBdK3VbMF0sMTYpLHBhcnNlSW50KHVbMV0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzJdLDE2KV0sND09PWMmJihsPXBhcnNlSW50KHVbM10rdVszXSwxNikvMjU1KSk6KHM9W3BhcnNlSW50KHVbMF0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzNdLDE2KSxwYXJzZUludCh1WzRdK3VbNV0sMTYpXSw4PT09YyYmKGw9cGFyc2VJbnQodVs2XSt1WzddLDE2KS8yNTUpKSxzWzBdfHwoc1swXT0wKSxzWzFdfHwoc1sxXT0wKSxzWzJdfHwoc1syXT0wKSxuPSJyZ2IifWVsc2UgaWYoZT0vXigoPzpyZ2J8aHNbbHZiXXxod2J8Y215az98eHlbenldfGdyYXl8bGFifGxjaHU/dj98W2x5XXV2fGxtcylhPylccypcKChbXlwpXSopXCkvLmV4ZWModCkpe3ZhciBmPWVbMV0sdT1mLnJlcGxhY2UoL2EkLywiIik7bj11O3ZhciBjPSJjbXlrIj09PXU/NDoiZ3JheSI9PT11PzE6MztzPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uKHQsZSl7aWYoLyUkLy50ZXN0KHQpKXJldHVybiBlPT09Yz9wYXJzZUZsb2F0KHQpLzEwMDoicmdiIj09PXU/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoImgiPT09dVtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09b1t0XSlyZXR1cm4gb1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pLGY9PT11JiZzLnB1c2goMSksbD12b2lkIDA9PT1zW2NdPzE6c1tjXSxzPXMuc2xpY2UoMCxjKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihzPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pLG49dC5tYXRjaCgvKFthLXpdKS9naSkuam9pbigiIikudG9Mb3dlckNhc2UoKSk7ZWxzZSJudW1iZXIiPT10eXBlb2YgdD8obj0icmdiIixzPVt0Pj4+MTYsKDY1MjgwJnQpPj4+OCwyNTUmdF0pOmEodCk/KG51bGwhPXQucj8ocz1bdC5yLHQuZyx0LmJdLG49InJnYiIpOm51bGwhPXQucmVkPyhzPVt0LnJlZCx0LmdyZWVuLHQuYmx1ZV0sbj0icmdiIik6bnVsbCE9dC5oPyhzPVt0LmgsdC5zLHQubF0sbj0iaHNsIik6bnVsbCE9dC5odWUmJihzPVt0Lmh1ZSx0LnNhdHVyYXRpb24sdC5saWdodG5lc3NdLG49ImhzbCIpLG51bGwhPXQuYT9sPXQuYTpudWxsIT10LmFscGhhP2w9dC5hbHBoYTpudWxsIT10Lm9wYWNpdHkmJihsPXQub3BhY2l0eS8xMDApKTooQXJyYXkuaXNBcnJheSh0KXx8ci5BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCkpJiYocz1bdFswXSx0WzFdLHRbMl1dLG49InJnYiIsbD00PT09dC5sZW5ndGg/dFszXToxKTtyZXR1cm57c3BhY2U6bix2YWx1ZXM6cyxhbHBoYTpsfX1lLmV4cG9ydHM9bjt2YXIgaT10KCJjb2xvci1uYW1lIiksYT10KCJpcy1wbGFpbi1vYmoiKSxvPXtyZWQ6MCxvcmFuZ2U6NjAseWVsbG93OjEyMCxncmVlbjoxODAsYmx1ZToyNDAscHVycGxlOjMwMH19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiY29sb3ItbmFtZSI6OTEsImlzLXBsYWluLW9iaiI6Mjk1fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcGFyc2UiKSxpPXQoImNvbG9yLXNwYWNlL2hzbCIpLGE9dCgiY2xhbXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0O251bGw9PWUmJihlPSEwKTt2YXIgcj1uKHQpO2lmKCFyLnNwYWNlKXJldHVybltdO3ZhciBvLHM9ci52YWx1ZXMsbD1zLmxlbmd0aDtmb3Iobz0wO288bDtvKyspc1tvXT1hKHNbb10sMCwyNTUpO2lmKCJoIj09PXIuc3BhY2VbMF0mJihzPWkucmdiKHMpKSxlKWZvcihvPTA7bzxsO28rKylzW29dLz0yNTU7cmV0dXJuIHMucHVzaChhKHIuYWxwaGEsMCwxKSksc319LHtjbGFtcDo4NiwiY29sb3ItcGFyc2UiOjkyLCJjb2xvci1zcGFjZS9oc2wiOjk0fV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZ2IiKTtlLmV4cG9ydHM9e25hbWU6ImhzbCIsbWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sY2hhbm5lbDpbImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiXSxhbGlhczpbIkhTTCJdLHJnYjpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dFswXS8zNjAscz10WzFdLzEwMCxsPXRbMl0vMTAwO2lmKDA9PT1zKXJldHVybiBhPTI1NSpsLFthLGEsYV07cj1sPC41P2wqKDErcyk6bCtzLWwqcyxlPTIqbC1yLGk9WzAsMCwwXTtmb3IodmFyIHU9MDt1PDM7dSsrKW49bysxLzMqLSh1LTEpLG48MD9uKys6bj4xJiZuLS0sYT02Km48MT9lKzYqKHItZSkqbjoyKm48MT9yOjMqbjwyP2UrKHItZSkqKDIvMy1uKSo2OmUsaVt1XT0yNTUqYTtyZXR1cm4gaX19LG4uaHNsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRbMF0vMjU1LGE9dFsxXS8yNTUsbz10WzJdLzI1NSxzPU1hdGgubWluKGksYSxvKSxsPU1hdGgubWF4KGksYSxvKSx1PWwtcztyZXR1cm4gbD09PXM/ZT0wOmk9PT1sP2U9KGEtbykvdTphPT09bD9lPTIrKG8taSkvdTpvPT09bCYmKGU9NCsoaS1hKS91KSxlPU1hdGgubWluKDYwKmUsMzYwKSxlPDAmJihlKz0zNjApLG49KHMrbCkvMixyPWw9PT1zPzA6bjw9LjU/dS8obCtzKTp1LygyLWwtcyksW2UsMTAwKnIsMTAwKm5dfX0seyIuL3JnYiI6OTV9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJnYiIsbWluOlswLDAsMF0sbWF4OlsyNTUsMjU1LDI1NV0sY2hhbm5lbDpbInJlZCIsImdyZWVuIiwiYmx1ZSJdLGFsaWFzOlsiUkdCIl19fSx7fV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzAsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sInJhaW5ib3ctc29mdCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSwiZnJlZXN1cmZhY2UtYmx1ZSI6W3tpbmRleDowLHJnYjpbMzAsNCwxMTBdfSx7aW5kZXg6LjEzLHJnYjpbNDcsMTQsMTc2XX0se2luZGV4Oi4yNSxyZ2I6WzQxLDQ1LDIzNl19LHtpbmRleDouMzgscmdiOlsyNSw5OSwyMTJdfSx7aW5kZXg6LjUscmdiOls2OCwxMzEsMjAwXX0se2luZGV4Oi42MyxyZ2I6WzExNCwxNTYsMTk3XX0se2luZGV4Oi43NSxyZ2I6WzE1NywxODEsMjAzXX0se2luZGV4Oi44OCxyZ2I6WzIwMCwyMDgsMjE2XX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSwiZnJlZXN1cmZhY2UtcmVkIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLCJ2ZWxvY2l0eS1ibHVlIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLCJ2ZWxvY2l0eS1ncmVlbiI6W3tpbmRleDowLHJnYjpbMjMsMzUsMTldfSx7aW5kZXg6LjEzLHJnYjpbMjQsNjQsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTEsOTUsNDVdfSx7aW5kZXg6LjM4LHJnYjpbMzksMTIzLDM1XX0se2luZGV4Oi41LHJnYjpbOTUsMTQ2LDEyXX0se2luZGV4Oi42MyxyZ2I6WzE1MiwxNjUsMThdfSx7aW5kZXg6Ljc1LHJnYjpbMjAxLDE4Niw2OV19LHtpbmRleDouODgscmdiOlsyMzMsMjE2LDEzN119LHtpbmRleDoxLHJnYjpbMjU1LDI1MywyMDVdfV0sY3ViZWhlbGl4Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4wNyxyZ2I6WzIyLDUsNTldfSx7aW5kZXg6LjEzLHJnYjpbNjAsNCwxMDVdfSx7aW5kZXg6LjIscmdiOlsxMDksMSwxMzVdfSx7aW5kZXg6LjI3LHJnYjpbMTYxLDAsMTQ3XX0se2luZGV4Oi4zMyxyZ2I6WzIxMCwyLDE0Ml19LHtpbmRleDouNCxyZ2I6WzI1MSwxMSwxMjNdfSx7aW5kZXg6LjQ3LHJnYjpbMjU1LDI5LDk3XX0se2luZGV4Oi41MyxyZ2I6WzI1NSw1NCw2OV19LHtpbmRleDouNixyZ2I6WzI1NSw4NSw0Nl19LHtpbmRleDouNjcscmdiOlsyNTUsMTIwLDM0XX0se2luZGV4Oi43MyxyZ2I6WzI1NSwxNTcsMzddfSx7aW5kZXg6LjgscmdiOlsyNDEsMTkxLDU3XX0se2luZGV4Oi44NyxyZ2I6WzIyNCwyMjAsOTNdfSx7aW5kZXg6LjkzLHJnYjpbMjE4LDI0MSwxNDJdfSx7aW5kZXg6MSxyZ2I6WzIyNywyNTMsMTk4XX1dfX0se31dLDk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGUscixuLHUsYyxoLGYsZCxwLG0sdixnLHksYj1bXSx4PVtdLF89W10sdz1bXTtpZihvLmlzUGxhaW5PYmplY3QodCl8fCh0PXt9KSxwPXQubnNoYWRlc3x8NzIsZD10LmZvcm1hdHx8ImhleCIsZj10LmNvbG9ybWFwLGZ8fChmPSJqZXQiKSwic3RyaW5nIj09dHlwZW9mIGYpe2lmKGY9Zi50b0xvd2VyQ2FzZSgpLCFsW2ZdKXRocm93IEVycm9yKGYrIiBub3QgYSBzdXBwb3J0ZWQgY29sb3JzY2FsZSIpO2g9cyhsW2ZdKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KGYpKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcm1hcCBvcHRpb24iLGYpO2g9cyhmKX1pZihoLmxlbmd0aD5wKXRocm93IG5ldyBFcnJvcihmKyIgbWFwIHJlcXVpcmVzIG5zaGFkZXMgdG8gYmUgYXQgbGVhc3Qgc2l6ZSAiK2gubGVuZ3RoKTtmb3Iodj1BcnJheS5pc0FycmF5KHQuYWxwaGEpPzIhPT10LmFscGhhLmxlbmd0aD9bMSwxXTpzKHQuYWxwaGEpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXSxlPWgubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqcCl9KSx2WzBdPDAmJih2WzBdPTApLHZbMV08MCYmKHZbMF09MCksdlswXT4xJiYodlswXT0xKSx2WzFdPjEmJih2WzBdPTEpLHk9MDt5PGUubGVuZ3RoOysreSlnPWhbeV0uaW5kZXgscj1oW3ldLnJnYiw0PT09ci5sZW5ndGgmJnJbM10+PTAmJnJbM108PTF8fChyWzNdPXZbMF0rKHZbMV0tdlswXSkqZyk7Zm9yKHk9MDt5PGUubGVuZ3RoLTE7Kyt5KWM9ZVt5KzFdLWVbeV0sbj1oW3ldLnJnYix1PWhbeSsxXS5yZ2IsYj1iLmNvbmNhdChvLmxpbnNwYWNlKG5bMF0sdVswXSxjKSkseD14LmNvbmNhdChvLmxpbnNwYWNlKG5bMV0sdVsxXSxjKSksXz1fLmNvbmNhdChvLmxpbnNwYWNlKG5bMl0sdVsyXSxjKSksdz13LmNvbmNhdChvLmxpbnNwYWNlKG5bM10sdVszXSxjKSk7cmV0dXJuIGI9Yi5tYXAoTWF0aC5yb3VuZCkseD14Lm1hcChNYXRoLnJvdW5kKSxfPV8ubWFwKE1hdGgucm91bmQpLG09by56aXAoYix4LF8sdyksImhleCI9PT1kJiYobT1tLm1hcChpKSksInJnYmFTdHJpbmciPT09ZCYmKG09bS5tYXAoYSkpLG19ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGUscj0iIyIsbj0wO248MzsrK24pZT10W25dLGU9ZS50b1N0cmluZygxNikscis9KCIwMCIrZSkuc3Vic3RyKGUubGVuZ3RoKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3JldHVybiJyZ2JhKCIrdC5qb2luKCIsIikrIikifXZhciBvPXQoImFycmF5dG9vbHMiKSxzPXQoImNsb25lIiksbD10KCIuL2NvbG9yU2NhbGVzIik7ZS5leHBvcnRzPW59LHsiLi9jb2xvclNjYWxlcyI6OTYsYXJyYXl0b29sczo0NCxjbG9uZTo4OX1dLDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXModFswXSwtZVswXSksaT1zKHRbMV0sLWVbMV0pLGE9cyhyWzBdLC1lWzBdKSxvPXMoclsxXSwtZVsxXSksYz11KGwobixhKSxsKGksbykpO3JldHVybiBjW2MubGVuZ3RoLTFdPj0wfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIHM9YShlLHIsaSk7aWYoMD09PXMpe3ZhciBsPW8oYSh0LGUscikpLHU9byhhKHQsZSxpKSk7aWYobD09PXUpe2lmKDA9PT1sKXt2YXIgYz1uKHQsZSxyKTtyZXR1cm4gYz09PW4odCxlLGkpPzA6Yz8xOi0xfXJldHVybiAwfXJldHVybiAwPT09dT9sPjA/LTE6bih0LGUsaSk/LTE6MTowPT09bD91PjA/MTpuKHQsZSxyKT8xOi0xOm8odS1sKX12YXIgaD1hKHQsZSxyKTtyZXR1cm4gaD4wP3M+MCYmYSh0LGUsaSk+MD8xOi0xOmg8MD9zPjB8fGEodCxlLGkpPjA/MTotMTphKHQsZSxpKT4wPzE6bih0LGUscik/MTotMX1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxvPXQoInNpZ251bSIpLHM9dCgidHdvLXN1bSIpLGw9dCgicm9idXN0LXByb2R1Y3QiKSx1PXQoInJvYnVzdC1zdW0iKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUwNiwicm9idXN0LXByb2R1Y3QiOjUwNywicm9idXN0LXN1bSI6NTExLHNpZ251bTo1MTMsInR3by1zdW0iOjUzOH1dLDk5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQubGVuZ3RoLGk9dC5sZW5ndGgtZS5sZW5ndGg7aWYoaSlyZXR1cm4gaTtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjpyZXR1cm4gdFswXSt0WzFdLWVbMF0tZVsxXXx8YSh0WzBdLHRbMV0pLWEoZVswXSxlWzFdKTtjYXNlIDM6dmFyIG89dFswXSt0WzFdLHM9ZVswXStlWzFdO2lmKGk9byt0WzJdLShzK2VbMl0pKXJldHVybiBpO3ZhciBsPWEodFswXSx0WzFdKSx1PWEoZVswXSxlWzFdKTtyZXR1cm4gYShsLHRbMl0pLWEodSxlWzJdKXx8YShsK3RbMl0sbyktYSh1K2VbMl0scyk7Y2FzZSA0OnZhciBjPXRbMF0saD10WzFdLGY9dFsyXSxkPXRbM10scD1lWzBdLG09ZVsxXSx2PWVbMl0sZz1lWzNdO3JldHVybiBjK2grZitkLShwK20rditnKXx8YShjLGgsZixkKS1hKHAsbSx2LGcscCl8fGEoYytoLGMrZixjK2QsaCtmLGgrZCxmK2QpLWEocCttLHArdixwK2csbSt2LG0rZyx2K2cpfHxhKGMraCtmLGMraCtkLGMrZitkLGgrZitkKS1hKHArbSt2LHArbStnLHArditnLG0rditnKTtkZWZhdWx0OmZvcih2YXIgeT10LnNsaWNlKCkuc29ydChuKSxiPWUuc2xpY2UoKS5zb3J0KG4pLHg9MDt4PHI7Kyt4KWlmKGk9eVt4XS1iW3hdKXJldHVybiBpO3JldHVybiAwfX1lLmV4cG9ydHM9aTt2YXIgYT1NYXRoLm1pbn0se31dLDEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodCxlKXx8YSh0KS1hKGUpfXZhciBpPXQoImNvbXBhcmUtY2VsbCIpLGE9dCgiY2VsbC1vcmllbnRhdGlvbiIpO2UuZXhwb3J0cz1ufSx7ImNlbGwtb3JpZW50YXRpb24iOjgzLCJjb21wYXJlLWNlbGwiOjk5fV0sMTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7cmV0dXJuIDA9PT1yP1tdOjE9PT1yP2kodCk6Mj09PXI/YSh0KTpvKHQscil9dmFyIGk9dCgiLi9saWIvY2gxZCIpLGE9dCgiLi9saWIvY2gyZCIpLG89dCgiLi9saWIvY2huZCIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL2NoMWQiOjEwMiwiLi9saWIvY2gyZCI6MTAzLCIuL2xpYi9jaG5kIjoxMDR9XSwxMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MCxyPTAsbj0xO248dC5sZW5ndGg7KytuKXRbbl1bMF08dFtlXVswXSYmKGU9biksdFtuXVswXT50W3JdWzBdJiYocj1uKTtyZXR1cm4gZTxyP1tbZV0sW3JdXTplPnI/W1tyXSxbZV1dOltbZV1dfWUuZXhwb3J0cz1ufSx7fV0sMTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9aSh0KSxyPWUubGVuZ3RoO2lmKHI8PTIpcmV0dXJuW107Zm9yKHZhciBuPW5ldyBBcnJheShyKSxhPWVbci0xXSxvPTA7bzxyOysrbyl7dmFyIHM9ZVtvXTtuW29dPVthLHNdLGE9c31yZXR1cm4gbn1lLmV4cG9ydHM9bjt2YXIgaT10KCJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCIpfSx7Im1vbm90b25lLWNvbnZleC1odWxsLTJkIjo0NDl9XSwxMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxlLmxlbmd0aDsrK2kpbltpXT10W2VbaV1dO2Zvcih2YXIgYT1lLmxlbmd0aCxpPTA7aTxyOysraSllLmluZGV4T2YoaSk8MCYmKG5bYSsrXT10W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288YS5sZW5ndGg7KytvKXt2YXIgcz1hW29dO2lmKHM8bilhW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2Fbb109c319cmV0dXJuIHR9ZnVuY3Rpb24gYSh0LGUpe3RyeXtyZXR1cm4gbyh0LCEwKX1jYXRjaCh1KXt2YXIgcj1zKHQpO2lmKHIubGVuZ3RoPD1lKXJldHVybltdO3ZhciBhPW4odCxyKSxsPW8oYSwhMCk7cmV0dXJuIGkobCxyKX19ZS5leHBvcnRzPWE7dmFyIG89dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxzPXQoImFmZmluZS1odWxsIil9LHsiYWZmaW5lLWh1bGwiOjM5LCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6Mjg4fV0sMTA1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtBRkc6ImFmZ2hhbiIsQUxBOiJcXGJcXHdsYW5kIixBTEI6ImFsYmFuaWEiLERaQToiYWxnZXJpYSIsQVNNOiJeKD89LiphbWVyaWMpLipzYW1vYSIsQU5EOiJhbmRvcnJhIixBR086ImFuZ29sYSIsQUlBOiJhbmd1aWxsP2EiLEFUQToiYW50YXJjdGljYSIsQVRHOiJhbnRpZ3VhIixBUkc6ImFyZ2VudGluIixBUk06ImFybWVuaWEiLEFCVzoiXig/IS4qYm9uYWlyZSkuKlxcYmFydWJhIixBVVM6ImF1c3RyYWxpYSIsQVVUOiJeKD8hLipodW5nYXJ5KS4qYXVzdHJpYXxcXGJhdXN0cmkuKlxcYmVtcCIsQVpFOiJhemVyYmFpamFuIixCSFM6ImJhaGFtYXMiLEJIUjoiYmFocmFpbiIsQkdEOiJiYW5nbGFkZXNofF4oPz0uKmVhc3QpLipwYWtpP3N0YW4iLEJSQjoiYmFyYmFkb3MiLEJMUjoiYmVsYXJ1c3xieWVsbyIsQkVMOiJeKD8hLipsdXhlbSkuKmJlbGdpdW0iLEJMWjoiYmVsaXplfF4oPz0uKmJyaXRpc2gpLipob25kdXJhcyIsQkVOOiJiZW5pbnxkYWhvbWUiLEJNVToiYmVybXVkYSIsQlROOiJiaHV0YW4iLEJPTDoiYm9saXZpYSIsQkVTOiJeKD89Lipib25haXJlKS4qZXVzdGF0aXVzfF4oPz0uKmNhcmliKS4qbmV0aGVybGFuZHN8XFxiYmVzLj9pc2xhbmRzIixCSUg6ImhlcnplZ292aW5hfGJvc25pYSIsQldBOiJib3Rzd2FuYXxiZWNodWFuYSIsQlZUOiJib3V2ZXQiLEJSQToiYnJhemlsIixJT1Q6ImJyaXRpc2guP2luZGlhbi4/b2NlYW4iLEJSTjoiYnJ1bmVpIixCR1I6ImJ1bGdhcmlhIixCRkE6ImJ1cmtpbmF8XFxiZmFzb3x1cHBlci4/dm9sdGEiLEJESToiYnVydW5kaSIsQ1BWOiJ2ZXJkZSIsS0hNOiJjYW1ib2RpYXxrYW1wdWNoZWF8a2htZXIiLENNUjoiY2FtZXJvb24iLENBTjoiY2FuYWRhIixDWU06ImNheW1hbiIsQ0FGOiJcXGJjZW50cmFsLmFmcmljYW4ucmVwdWJsaWMiLFRDRDoiXFxiY2hhZCIsQ0hMOiJcXGJjaGlsZSIsQ0hOOiJeKD8hLipcXGJtYWMpKD8hLipcXGJob25nKSg/IS4qXFxidGFpKSg/IS4qXFxicmVwKS4qY2hpbmF8Xig/PS4qcGVvKSg/PS4qcmVwKS4qY2hpbmEiLENYUjoiY2hyaXN0bWFzIixDQ0s6IlxcYmNvY29zfGtlZWxpbmciLENPTDoiY29sb21iaWEiLENPTToiY29tb3JvIixDT0c6Il4oPyEuKlxcYmRlbSkoPyEuKlxcYmRbXFwuXT9yKSg/IS4qa2luc2hhc2EpKD8hLip6YWlyZSkoPyEuKmJlbGcpKD8hLipsLm9wb2xkdmlsbGUpKD8hLipmcmVlKS4qXFxiY29uZ28iLENPSzoiXFxiY29vayIsQ1JJOiJjb3N0YS4/cmljYSIsQ0lWOiJpdm9pcmV8aXZvcnkiLEhSVjoiY3JvYXRpYSIsQ1VCOiJcXGJjdWJhIixDVVc6Il4oPyEuKmJvbmFpcmUpLipcXGJjdXJhKGN8XHhlNylhbyIsQ1lQOiJjeXBydXMiLENTSzoiY3plY2hvc2xvdmFraWEiLENaRToiXig/PS4qcmVwKS4qY3plY2h8Y3plY2hpYXxib2hlbWlhIixDT0Q6IlxcYmRlbS4qY29uZ298Y29uZ28uKlxcYmRlbXxjb25nby4qXFxiZFtcXC5dP3J8XFxiZFtcXC5dP3IuKmNvbmdvfGJlbGdpYW4uP2NvbmdvfGNvbmdvLj9mcmVlLj9zdGF0ZXxraW5zaGFzYXx6YWlyZXxsLm9wb2xkdmlsbGV8ZHJjfGRyb2N8cmRjIixETks6ImRlbm1hcmsiLERKSToiZGppYm91dGkiLERNQToiZG9taW5pY2EoPyFuKSIsRE9NOiJkb21pbmljYW4ucmVwIixFQ1U6ImVjdWFkb3IiLEVHWToiZWd5cHQiLFNMVjoiZWwuP3NhbHZhZG9yIixHTlE6Imd1aW5lLiplcXxlcS4qZ3VpbmV8Xig/PS4qc3BhbikuKmd1aW5lYSIsRVJJOiJlcml0cmVhIixFU1Q6ImVzdG9uaWEiLEVUSDoiZXRoaW9waWF8YWJ5c3NpbmlhIixGTEs6ImZhbGtsYW5kfG1hbHZpbmFzIixGUk86ImZhcm9lfGZhZXJvZSIsRkpJOiJmaWppIixGSU46ImZpbmxhbmQiLEZSQToiXig/IS4qXFxiZGVwKSg/IS4qbWFydGluaXF1ZSkuKmZyYW5jZXxmcmVuY2guP3JlcHVibGljfFxcYmdhdWwiLEdVRjoiXig/PS4qZnJlbmNoKS4qZ3VpYW5hIixQWUY6ImZyZW5jaC4/cG9seW5lc2lhfHRhaGl0aSIsQVRGOiJmcmVuY2guP3NvdXRoZXJuIixHQUI6ImdhYm9uIixHTUI6ImdhbWJpYSIsR0VPOiJeKD8hLipzb3V0aCkuKmdlb3JnaWEiLEREUjoiZ2VybWFuLj9kZW1vY3JhdGljLj9yZXB1YmxpY3xkZW1vY3JhdGljLj9yZXB1YmxpYy4qZ2VybWFueXxlYXN0Lmdlcm1hbnkiLERFVToiXig/IS4qZWFzdCkuKmdlcm1hbnl8Xig/PS4qXFxiZmVkLipcXGJyZXApLipnZXJtYW4iLEdIQToiZ2hhbmF8Z29sZC4/Y29hc3QiLEdJQjoiZ2licmFsdGFyIixHUkM6ImdyZWVjZXxoZWxsZW5pY3xoZWxsYXMiLEdSTDoiZ3JlZW5sYW5kIixHUkQ6ImdyZW5hZGEiLEdMUDoiZ3VhZGVsb3VwZSIsR1VNOiJcXGJndWFtIixHVE06Imd1YXRlbWFsYSIsR0dZOiJndWVybnNleSIsR0lOOiJeKD8hLiplcSkoPyEuKnNwYW4pKD8hLipiaXNzYXUpKD8hLipwb3J0dSkoPyEuKm5ldykuKmd1aW5lYSIsR05COiJiaXNzYXV8Xig/PS4qcG9ydHUpLipndWluZWEiLEdVWToiZ3V5YW5hfGJyaXRpc2guP2d1aWFuYSIsSFRJOiJoYWl0aSIsSE1EOiJoZWFyZC4qbWNkb25hbGQiLFZBVDoiaG9seS4/c2VlfHZhdGljYW58cGFwYWwuP3N0IixITkQ6Il4oPyEuKmJyaXQpLipob25kdXJhcyIsSEtHOiJob25nLj9rb25nIixIVU46Il4oPyEuKmF1c3RyKS4qaHVuZ2FyeSIsSVNMOiJpY2VsYW5kIixJTkQ6ImluZGlhKD8hLipvY2VhKSIsSUROOiJpbmRvbmVzaWEiLElSTjoiXFxiaXJhbnxwZXJzaWEiLElSUToiXFxiaXJhcXxtZXNvcG90YW1pYSIsSVJMOiIoXmlyZWxhbmQpfChecmVwdWJsaWMuKmlyZWxhbmQpIixJTU46Il4oPz0uKmlzbGUpLipcXGJtYW4iLElTUjoiaXNyYWVsIixJVEE6Iml0YWx5IixKQU06ImphbWFpY2EiLEpQTjoiamFwYW4iLEpFWToiamVyc2V5IixKT1I6ImpvcmRhbiIsS0FaOiJrYXphayIsS0VOOiJrZW55YXxicml0aXNoLj9lYXN0Lj9hZnJpY2F8ZWFzdC4/YWZyaWNhLj9wcm90IixLSVI6ImtpcmliYXRpIixQUks6Il4oPz0uKmRlbW9jcmF0fHBlb3BsZXxub3J0aHxkLipwLioucikuKlxcYmtvcmVhfGRwcmt8a29yZWEuKihkLipwLipyKSIsS1dUOiJrdXdhaXQiLEtHWjoia3lyZ3l6fGtpcmdoaXoiLExBTzoiXFxibGFvcz9cXGIiLExWQToibGF0dmlhIixMQk46ImxlYmFub24iLExTTzoibGVzb3Rob3xiYXN1dG8iLExCUjoibGliZXJpYSIsTEJZOiJsaWJ5YSIsTElFOiJsaWVjaHRlbnN0ZWluIixMVFU6ImxpdGh1YW5pYSIsTFVYOiJeKD8hLipiZWxnKS4qbHV4ZW0iLE1BQzoibWFjYShvfHUpIixNREc6Im1hZGFnYXNjYXJ8bWFsYWdhc3kiLE1XSToibWFsYXdpfG55YXNhIixNWVM6Im1hbGF5c2lhIixNRFY6Im1hbGRpdmUiLE1MSToiXFxibWFsaVxcYiIsTUxUOiJcXGJtYWx0YSIsTUhMOiJtYXJzaGFsbCIsTVRROiJtYXJ0aW5pcXVlIixNUlQ6Im1hdXJpdGFuaWEiLE1VUzoibWF1cml0aXVzIixNWVQ6IlxcYm1heW90dGUiLE1FWDoiXFxibWV4aWMiLEZTTToiZmVkLiptaWNyb25lc2lhfG1pY3JvbmVzaWEuKmZlZCIsTUNPOiJtb25hY28iLE1ORzoibW9uZ29saWEiLE1ORToiXig/IS4qc2VyYmlhKS4qbW9udGVuZWdybyIsTVNSOiJtb250c2VycmF0IixNQVI6Im1vcm9jY298XFxibWFyb2MiLE1PWjoibW96YW1iaXF1ZSIsTU1SOiJteWFubWFyfGJ1cm1hIixOQU06Im5hbWliaWEiLE5SVToibmF1cnUiLE5QTDoibmVwYWwiLE5MRDoiXig/IS4qXFxiYW50KSg/IS4qXFxiY2FyaWIpLipuZXRoZXJsYW5kcyIsQU5UOiJeKD89LipcXGJhbnQpLioobmV0aGVyfGR1dGNoKSIsTkNMOiJuZXcuP2NhbGVkb25pYSIsTlpMOiJuZXcuP3plYWxhbmQiLE5JQzoibmljYXJhZ3VhIixORVI6IlxcYm5pZ2VyKD8haWEpIixOR0E6Im5pZ2VyaWEiLE5JVToibml1ZSIsTkZLOiJub3Jmb2xrIixNTlA6Im1hcmlhbmEiLE5PUjoibm9yd2F5IixPTU46IlxcYm9tYW58dHJ1Y2lhbCIsUEFLOiJeKD8hLiplYXN0KS4qcGFraT9zdGFuIixQTFc6InBhbGF1IixQU0U6InBhbGVzdGlufFxcYmdhemF8d2VzdC4/YmFuayIsUEFOOiJwYW5hbWEiLFBORzoicGFwdWF8bmV3Lj9ndWluZWEiLFBSWToicGFyYWd1YXkiLFBFUjoicGVydSIsUEhMOiJwaGlsaXBwaW5lcyIsUENOOiJwaXRjYWlybiIsUE9MOiJwb2xhbmQiLFBSVDoicG9ydHVnYWwiLFBSSToicHVlcnRvLj9yaWNvIixRQVQ6InFhdGFyIixLT1I6Il4oPyEuKmQuKnAuKnIpKD8hLipkZW1vY3JhdCkoPyEuKnBlb3BsZSkoPyEuKm5vcnRoKS4qXFxia29yZWEoPyEuKmQuKnAuKnIpIixNREE6Im1vbGRvdnxiKGF8ZSlzc2FyYWJpYSIsUkVVOiJyKGV8XHhlOSl1bmlvbiIsUk9VOiJyKG98dXxvdSltYW5pYSIsUlVTOiJcXGJydXNzaWF8c292aWV0Lj91bmlvbnx1XFwuP3NcXC4/c1xcLj9yfHNvY2lhbGlzdC4/cmVwdWJsaWNzIixSV0E6InJ3YW5kYSIsQkxNOiJiYXJ0aChlfFx4ZTkpbGVteSIsU0hOOiJoZWxlbmEiLEtOQToia2l0dHN8XFxibmV2aXMiLExDQToiXFxibHVjaWEiLE1BRjoiXig/PS4qY29sbGVjdGl2aXR5KS4qbWFydGlufF4oPz0uKmZyYW5jZSkuKm1hcnRpbig/IWlxdWUpfF4oPz0uKmZyZW5jaCkuKm1hcnRpbig/IWlxdWUpIixTUE06Im1pcXVlbG9uIixWQ1Q6InZpbmNlbnQiLFdTTToiXig/IS4qYW1lcikuKnNhbW9hIixTTVI6InNhbi4/bWFyaW5vIixTVFA6IlxcYnMoYXxceGUzKW8uP3RvbShlfFx4ZTkpIixTQVU6IlxcYnNhXFx3Ki4/YXJhYmlhIixTRU46InNlbmVnYWwiLFNSQjoiXig/IS4qbW9udGUpLipzZXJiaWEiLFNZQzoic2V5Y2hlbGwiLFNMRToic2llcnJhIixTR1A6InNpbmdhcG9yZSIsU1hNOiJeKD8hLiptYXJ0aW4pKD8hLipzYWJhKS4qbWFhcnRlbiIsU1ZLOiJeKD8hLipjemUpLipzbG92YWsiLFNWTjoic2xvdmVuaWEiLFNMQjoic29sb21vbiIsU09NOiJzb21hbGkiLFpBRjoic291dGguYWZyaWNhfHNcXFxcLi4/YWZyaWNhIixTR1M6InNvdXRoLj9nZW9yZ2lhfHNhbmR3aWNoIixTU0Q6IlxcYnNcXHcqLj9zdWRhbiIsRVNQOiJzcGFpbiIsTEtBOiJzcmkuP2xhbmthfGNleWxvbiIsU0ROOiJeKD8hLipcXGJzKD8hdSkpLipzdWRhbiIsU1VSOiJzdXJpbmFtfGR1dGNoLj9ndWlhbmEiLFNKTToic3ZhbGJhcmQiLFNXWjoic3dhemlsYW5kIixTV0U6InN3ZWRlbiIsQ0hFOiJzd2l0enxzd2lzcyIsU1lSOiJzeXJpYSIsVFdOOiJ0YWl3YW58dGFpcGVpfGZvcm1vc2F8Xig/IS4qcGVvKSg/PS4qcmVwKS4qY2hpbmEiLFRKSzoidGFqaWsiLFRIQToidGhhaWxhbmR8XFxic2lhbSIsTUtEOiJtYWNlZG9uaWF8Znlyb20iLFRMUzoiXig/PS4qbGVzdGUpLip0aW1vcnxeKD89LiplYXN0KS4qdGltb3IiLFRHTzoidG9nbyIsVEtMOiJ0b2tlbGF1IixUT046InRvbmdhIixUVE86InRyaW5pZGFkfHRvYmFnbyIsVFVOOiJ0dW5pc2lhIixUVVI6InR1cmtleSIsVEtNOiJ0dXJrbWVuIixUQ0E6InR1cmtzIixUVVY6InR1dmFsdSIsVUdBOiJ1Z2FuZGEiLFVLUjoidWtyYWluIixBUkU6ImVtaXJhdGVzfF51XFwuP2FcXC4/ZVxcLj8kfHVuaXRlZC4/YXJhYi4/ZW0iLEdCUjoidW5pdGVkLj9raW5nZG9tfGJyaXRhaW58XnVcXC4/a1xcLj8kIixUWkE6InRhbnphbmlhIixVU0E6InVuaXRlZC4/c3RhdGVzXFxiKD8hLippc2xhbmRzKXxcXGJ1XFwuP3NcXC4/YVxcLj9cXGJ8Xlxccyp1XFwuP3NcXC4/XFxiKD8hLippc2xhbmRzKSIsVU1JOiJtaW5vci4/b3V0bHlpbmcuP2lzIixVUlk6InVydWd1YXkiLFVaQjoidXpiZWsiLFZVVDoidmFudWF0dXxuZXcuP2hlYnJpZGVzIixWRU46InZlbmV6dWVsYSIsVk5NOiJeKD8hLipyZXB1YmxpYykuKnZpZXQuP25hbXxeKD89Lipzb2NpYWxpc3QpLip2aWV0Lj9uYW0iLFZHQjoiXig/PS4qXFxidVxcLj9cXHM/aykuKnZpcmdpbnxeKD89Lipicml0KS4qdmlyZ2lufF4oPz0uKmtpbmdkb20pLip2aXJnaW4iLFZJUjoiXig/PS4qXFxidVxcLj9cXHM/cykuKnZpcmdpbnxeKD89LipzdGF0ZXMpLip2aXJnaW4iLFdMRjoiZnV0dW5hfHdhbGxpcyIsRVNIOiJ3ZXN0ZXJuLnNhaGFyYSIsWUVNOiJeKD8hLiphcmFiKSg/IS4qbm9ydGgpKD8hLipzYW5hKSg/IS4qcGVvKSg/IS4qZGVtKSg/IS4qc291dGgpKD8hLiphZGVuKSg/IS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWU1EOiJeKD89LipwZW8pLip5ZW1lbnxeKD8hLipyZXApKD89LipkZW0pLip5ZW1lbnxeKD89Lipzb3V0aCkuKnllbWVufF4oPz0uKmFkZW4pLip5ZW1lbnxeKD89LipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZVUc6Inl1Z29zbGF2aWEiLFpNQjoiemFtYmlhfG5vcnRoZXJuLj9yaG9kZXNpYSIsRUFaOiJ6YW56aWJhciIsWldFOiJ6aW1iYWJ3ZXxeKD8hLipub3J0aGVybikuKnJob2Rlc2lhIn19LHt9XSwxMDY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0PU1hdGgucm91bmQodCksdDwwPzA6dD4yNTU/MjU1OnR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDwwPzA6dD4xPzE6dH1mdW5jdGlvbiBhKHQpe3JldHVybiBuKCIlIj09PXRbdC5sZW5ndGgtMV0/cGFyc2VGbG9hdCh0KS8xMDAqMjU1OnBhcnNlSW50KHQpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBpKCIlIj09PXRbdC5sZW5ndGgtMV0/cGFyc2VGbG9hdCh0KS8xMDA6cGFyc2VGbG9hdCh0KSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHI8MD9yKz0xOnI+MSYmKHItPTEpLDYqcjwxP3QrKGUtdCkqcio2OjIqcjwxP2U6MypyPDI/dCsoZS10KSooMi8zLXIpKjY6dH1mdW5jdGlvbiBsKHQpe3ZhciBlPXQucmVwbGFjZSgvIC9nLCIiKS50b0xvd2VyQ2FzZSgpO2lmKGUgaW4gdSlyZXR1cm4gdVtlXS5zbGljZSgpO2lmKCIjIj09PWVbMF0pe2lmKDQ9PT1lLmxlbmd0aCl7dmFyIHI9cGFyc2VJbnQoZS5zdWJzdHIoMSksMTYpO3JldHVybiByPj0wJiZyPD00MDk1P1soMzg0MCZyKT4+NHwoMzg0MCZyKT4+OCwyNDAmcnwoMjQwJnIpPj40LDE1JnJ8KDE1JnIpPDw0LDFdOm51bGx9aWYoNz09PWUubGVuZ3RoKXt2YXIgcj1wYXJzZUludChlLnN1YnN0cigxKSwxNik7cmV0dXJuIHI+PTAmJnI8PTE2Nzc3MjE1P1soMTY3MTE2ODAmcik+PjE2LCg2NTI4MCZyKT4+OCwyNTUmciwxXTpudWxsfXJldHVybiBudWxsfXZhciBpPWUuaW5kZXhPZigiKCIpLGw9ZS5pbmRleE9mKCIpIik7aWYoLTEhPT1pJiZsKzE9PT1lLmxlbmd0aCl7dmFyIGM9ZS5zdWJzdHIoMCxpKSxoPWUuc3Vic3RyKGkrMSxsLShpKzEpKS5zcGxpdCgiLCIpLGY9MTtzd2l0Y2goYyl7Y2FzZSJyZ2JhIjppZig0IT09aC5sZW5ndGgpcmV0dXJuIG51bGw7Zj1vKGgucG9wKCkpO2Nhc2UicmdiIjpyZXR1cm4gMyE9PWgubGVuZ3RoP251bGw6W2EoaFswXSksYShoWzFdKSxhKGhbMl0pLGZdO2Nhc2UiaHNsYSI6aWYoNCE9PWgubGVuZ3RoKXJldHVybiBudWxsO2Y9byhoLnBvcCgpKTtjYXNlImhzbCI6aWYoMyE9PWgubGVuZ3RoKXJldHVybiBudWxsO3ZhciBkPShwYXJzZUZsb2F0KGhbMF0pJTM2MCszNjApJTM2MC8zNjAscD1vKGhbMV0pLG09byhoWzJdKSx2PW08PS41P20qKHArMSk6bStwLW0qcCxnPTIqbS12O3JldHVybltuKDI1NSpzKGcsdixkKzEvMykpLG4oMjU1KnMoZyx2LGQpKSxuKDI1NSpzKGcsdixkLTEvMykpLGZdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXJldHVybiBudWxsfXZhciB1PXt0cmFuc3BhcmVudDpbMCwwLDAsMF0sYWxpY2VibHVlOlsyNDAsMjQ4LDI1NSwxXSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1LDFdLGFxdWE6WzAsMjU1LDI1NSwxXSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMiwxXSxhenVyZTpbMjQwLDI1NSwyNTUsMV0sYmVpZ2U6WzI0NSwyNDUsMjIwLDFdLGJpc3F1ZTpbMjU1LDIyOCwxOTYsMV0sYmxhY2s6WzAsMCwwLDFdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNSwxXSxibHVlOlswLDAsMjU1LDFdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjYsMV0sYnJvd246WzE2NSw0Miw0MiwxXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1LDFdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MCwxXSxjaGFydHJldXNlOlsxMjcsMjU1LDAsMV0sY2hvY29sYXRlOlsyMTAsMTA1LDMwLDFdLGNvcmFsOlsyNTUsMTI3LDgwLDFdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzNywxXSxjb3Juc2lsazpbMjU1LDI0OCwyMjAsMV0sY3JpbXNvbjpbMjIwLDIwLDYwLDFdLGN5YW46WzAsMjU1LDI1NSwxXSxkYXJrYmx1ZTpbMCwwLDEzOSwxXSxkYXJrY3lhbjpbMCwxMzksMTM5LDFdLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTEsMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5LDFdLGRhcmtncmVlbjpbMCwxMDAsMCwxXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjksMV0sZGFya2toYWtpOlsxODksMTgzLDEwNywxXSwKZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTt0cnl7ci5wYXJzZUNTU0NvbG9yPWx9Y2F0Y2godCl7fX0se31dLDEwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgbz02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksdT0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgYz10Lmxlbmd0aC0xO2M+PTA7LS1jKWFbY109byp0W2NdK3MqZVtjXStsKnJbY10rdSpuW2NdO3JldHVybiBhfXJldHVybiBvKnQrcyplK2wqcltjXSt1Km59ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dmFyIG89aS0xLHM9aSppLGw9bypvLHU9KDErMippKSpsLGM9aSpsLGg9cyooMy0yKmkpLGY9cypvO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIGQ9dC5sZW5ndGgtMTtkPj0wOy0tZClhW2RdPXUqdFtkXStjKmVbZF0raCpyW2RdK2YqbltkXTtyZXR1cm4gYX1yZXR1cm4gdSp0K2MqZStoKnIrZipufWUuZXhwb3J0cz1pLGUuZXhwb3J0cy5kZXJpdmF0aXZlPW59LHt9XSwxMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuYXJnVHlwZXM9W10sdGhpcy5zaGltQXJncz1bXSx0aGlzLmFycmF5QXJncz1bXSx0aGlzLmFycmF5QmxvY2tJbmRpY2VzPVtdLHRoaXMuc2NhbGFyQXJncz1bXSx0aGlzLm9mZnNldEFyZ3M9W10sdGhpcy5vZmZzZXRBcmdJbmRleD1bXSx0aGlzLmluZGV4QXJncz1bXSx0aGlzLnNoYXBlQXJncz1bXSx0aGlzLmZ1bmNOYW1lPSIiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1mdW5jdGlvbiBpKHQpe3ZhciBlPW5ldyBuO2UucHJlPXQucHJlLGUuYm9keT10LmJvZHksZS5wb3N0PXQucG9zdDt2YXIgcj10LmFyZ3Muc2xpY2UoMCk7ZS5hcmdUeXBlcz1yO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldO2lmKCJhcnJheSI9PT1vfHwib2JqZWN0Ij09dHlwZW9mIG8mJm8uYmxvY2tJbmRpY2VzKXtpZihlLmFyZ1R5cGVzW2ldPSJhcnJheSIsZS5hcnJheUFyZ3MucHVzaChpKSxlLmFycmF5QmxvY2tJbmRpY2VzLnB1c2goby5ibG9ja0luZGljZXM/by5ibG9ja0luZGljZXM6MCksZS5zaGltQXJncy5wdXNoKCJhcnJheSIraSksaTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3MiKTtpZihpPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpfWVsc2UgaWYoInNjYWxhciI9PT1vKWUuc2NhbGFyQXJncy5wdXNoKGkpLGUuc2hpbUFyZ3MucHVzaCgic2NhbGFyIitpKTtlbHNlIGlmKCJpbmRleCI9PT1vKXtpZihlLmluZGV4QXJncy5wdXNoKGkpLGk8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwcmUoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpO2lmKGk8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1tpXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgaW5kZXgiKTtpZihpPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgaW5kZXgiKX1lbHNlIGlmKCJzaGFwZSI9PT1vKXtpZihlLnNoYXBlQXJncy5wdXNoKGkpLGk8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbaV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihpPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbaV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IGJvZHkoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIik7aWYoaTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2ldLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpfWVsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBvfHwhby5vZmZzZXQpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVW5rbm93biBhcmd1bWVudCB0eXBlICIrcltpXSk7ZS5hcmdUeXBlc1tpXT0ib2Zmc2V0IixlLm9mZnNldEFyZ3MucHVzaCh7YXJyYXk6by5hcnJheSxvZmZzZXQ6by5vZmZzZXR9KSxlLm9mZnNldEFyZ0luZGV4LnB1c2goaSl9fWlmKGUuYXJyYXlBcmdzLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBObyBhcnJheSBhcmd1bWVudHMgc3BlY2lmaWVkIik7aWYoZS5wcmUuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHByZSgpIGJsb2NrIik7aWYoZS5ib2R5LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBib2R5KCkgYmxvY2siKTtpZihlLnBvc3QuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHBvc3QoKSBibG9jayIpO3JldHVybiBlLmRlYnVnPSEhdC5wcmludENvZGV8fCEhdC5kZWJ1ZyxlLmZ1bmNOYW1lPXQuZnVuY05hbWV8fCJjd2lzZSIsZS5ibG9ja1NpemU9dC5ibG9ja1NpemV8fDY0LGEoZSl9dmFyIGE9dCgiLi9saWIvdGh1bmsuanMiKTtlLmV4cG9ydHM9aX0seyIuL2xpYi90aHVuay5qcyI6MTEwfV0sMTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGksYT10Lmxlbmd0aCxvPWUuYXJyYXlBcmdzLmxlbmd0aCxzPWUuaW5kZXhBcmdzLmxlbmd0aD4wLGw9W10sdT1bXSxjPTAsaD0wO2ZvcihuPTA7bjxhOysrbil1LnB1c2goWyJpIixuLCI9MCJdLmpvaW4oIiIpKTtmb3IoaT0wO2k8bzsrK2kpZm9yKG49MDtuPGE7KytuKWg9YyxjPXRbbl0sMD09PW4/dS5wdXNoKFsiZCIsaSwicyIsbiwiPXQiLGksInAiLGNdLmpvaW4oIiIpKTp1LnB1c2goWyJkIixpLCJzIixuLCI9KHQiLGksInAiLGMsIi1zIixoLCIqdCIsaSwicCIsaCwiKSJdLmpvaW4oIiIpKTtmb3IodS5sZW5ndGg+MCYmbC5wdXNoKCJ2YXIgIit1LmpvaW4oIiwiKSksbj1hLTE7bj49MDstLW4pYz10W25dLGwucHVzaChbImZvcihpIixuLCI9MDtpIixuLCI8cyIsYywiOysraSIsbiwiKXsiXS5qb2luKCIiKSk7Zm9yKGwucHVzaChyKSxuPTA7bjxhOysrbil7Zm9yKGg9YyxjPXRbbl0saT0wO2k8bzsrK2kpbC5wdXNoKFsicCIsaSwiKz1kIixpLCJzIixuXS5qb2luKCIiKSk7cyYmKG4+MCYmbC5wdXNoKFsiaW5kZXhbIixoLCJdLT1zIixoXS5qb2luKCIiKSksbC5wdXNoKFsiKytpbmRleFsiLGMsIl0iXS5qb2luKCIiKSkpLGwucHVzaCgifSIpfXJldHVybiBsLmpvaW4oIlxuIil9ZnVuY3Rpb24gaSh0LGUscixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1yLmFycmF5QXJncy5sZW5ndGgscz1yLmJsb2NrU2l6ZSxsPXIuaW5kZXhBcmdzLmxlbmd0aD4wLHU9W10sYz0wO2M8bzsrK2MpdS5wdXNoKFsidmFyIG9mZnNldCIsYywiPXAiLGNdLmpvaW4oIiIpKTtmb3IodmFyIGM9dDtjPGE7KytjKXUucHVzaChbImZvcih2YXIgaiIrYysiPVNTWyIsZVtjXSwiXXwwO2oiLGMsIj4wOyl7Il0uam9pbigiIikpLHUucHVzaChbImlmKGoiLGMsIjwiLHMsIil7Il0uam9pbigiIikpLHUucHVzaChbInMiLGVbY10sIj1qIixjXS5qb2luKCIiKSksdS5wdXNoKFsiaiIsYywiPTAiXS5qb2luKCIiKSksdS5wdXNoKFsifWVsc2V7cyIsZVtjXSwiPSIsc10uam9pbigiIikpLHUucHVzaChbImoiLGMsIi09IixzLCJ9Il0uam9pbigiIikpLGwmJnUucHVzaChbImluZGV4WyIsZVtjXSwiXT1qIixjXS5qb2luKCIiKSk7Zm9yKHZhciBjPTA7YzxvOysrYyl7Zm9yKHZhciBoPVsib2Zmc2V0IitjXSxmPXQ7ZjxhOysrZiloLnB1c2goWyJqIixmLCIqdCIsYywicCIsZVtmXV0uam9pbigiIikpO3UucHVzaChbInAiLGMsIj0oIixoLmpvaW4oIisiKSwiKSJdLmpvaW4oIiIpKX11LnB1c2gobihlLHIsaSkpO2Zvcih2YXIgYz10O2M8YTsrK2MpdS5wdXNoKCJ9Iik7cmV0dXJuIHUuam9pbigiXG4iKX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0wLHI9dFswXS5sZW5ndGg7ZTxyOyl7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aDsrK24paWYodFtuXVtlXSE9PXRbMF1bZV0pcmV0dXJuIGU7KytlfXJldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj10LmJvZHksaT1bXSxhPVtdLG89MDtvPHQuYXJncy5sZW5ndGg7KytvKXt2YXIgcz10LmFyZ3Nbb107aWYoIShzLmNvdW50PD0wKSl7dmFyIGw9bmV3IFJlZ0V4cChzLm5hbWUsImciKSx1PSIiLGM9ZS5hcnJheUFyZ3MuaW5kZXhPZihvKTtzd2l0Y2goZS5hcmdUeXBlc1tvXSl7Y2FzZSJvZmZzZXQiOnZhciBoPWUub2Zmc2V0QXJnSW5kZXguaW5kZXhPZihvKTtjPWUub2Zmc2V0QXJnc1toXS5hcnJheSx1PSIrcSIraDtjYXNlImFycmF5Ijp1PSJwIitjK3U7dmFyIGY9ImwiK28sZD0iYSIrYztpZigwPT09ZS5hcnJheUJsb2NrSW5kaWNlc1tjXSkxPT09cy5jb3VudD8iZ2VuZXJpYyI9PT1yW2NdP3MubHZhbHVlPyhpLnB1c2goWyJ2YXIgIixmLCI9IixkLCIuZ2V0KCIsdSwiKSJdLmpvaW4oIiIpKSxuPW4ucmVwbGFjZShsLGYpLGEucHVzaChbZCwiLnNldCgiLHUsIiwiLGYsIikiXS5qb2luKCIiKSkpOm49bi5yZXBsYWNlKGwsW2QsIi5nZXQoIix1LCIpIl0uam9pbigiIikpOm49bi5yZXBsYWNlKGwsW2QsIlsiLHUsIl0iXS5qb2luKCIiKSk6ImdlbmVyaWMiPT09cltjXT8oaS5wdXNoKFsidmFyICIsZiwiPSIsZCwiLmdldCgiLHUsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxmKSxzLmx2YWx1ZSYmYS5wdXNoKFtkLCIuc2V0KCIsdSwiLCIsZiwiKSJdLmpvaW4oIiIpKSk6KGkucHVzaChbInZhciAiLGYsIj0iLGQsIlsiLHUsIl0iXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxmKSxzLmx2YWx1ZSYmYS5wdXNoKFtkLCJbIix1LCJdPSIsZl0uam9pbigiIikpKTtlbHNle2Zvcih2YXIgcD1bcy5uYW1lXSxtPVt1XSx2PTA7djxNYXRoLmFicyhlLmFycmF5QmxvY2tJbmRpY2VzW2NdKTt2KyspcC5wdXNoKCJcXHMqXFxbKFteXFxdXSspXFxdIiksbS5wdXNoKCIkIisodisxKSsiKnQiK2MrImIiK3YpO2lmKGw9bmV3IFJlZ0V4cChwLmpvaW4oIiIpLCJnIiksdT1tLmpvaW4oIisiKSwiZ2VuZXJpYyI9PT1yW2NdKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IEdlbmVyaWMgYXJyYXlzIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBibG9ja3MhIik7bj1uLnJlcGxhY2UobCxbZCwiWyIsdSwiXSJdLmpvaW4oIiIpKX1icmVhaztjYXNlInNjYWxhciI6bj1uLnJlcGxhY2UobCwiWSIrZS5zY2FsYXJBcmdzLmluZGV4T2YobykpO2JyZWFrO2Nhc2UiaW5kZXgiOm49bi5yZXBsYWNlKGwsImluZGV4Iik7YnJlYWs7Y2FzZSJzaGFwZSI6bj1uLnJlcGxhY2UobCwic2hhcGUiKX19fXJldHVybltpLmpvaW4oIlxuIiksbixhLmpvaW4oIlxuIildLmpvaW4oIlxuIikudHJpbSgpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0hMCxuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sYT1pLm1hdGNoKC9cZCsvKTthPWE/YVswXToiIiwwPT09aS5jaGFyQXQoMCk/ZVtuXT0idSIraS5jaGFyQXQoMSkrYTplW25dPWkuY2hhckF0KDApK2Esbj4wJiYocj1yJiZlW25dPT09ZVtuLTFdKX1yZXR1cm4gcj9lWzBdOmUuam9pbigiIil9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLGw9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksYz1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxoPTA7aDx0LmFycmF5QXJncy5sZW5ndGg7KytoKWNbaF09ZVsyKmhdLGxbaF09ZVsyKmgrMV07Zm9yKHZhciBmPVtdLGQ9W10scD1bXSxtPVtdLHY9W10saD0wO2g8dC5hcnJheUFyZ3MubGVuZ3RoOysraCl7dC5hcnJheUJsb2NrSW5kaWNlc1toXTwwPyhwLnB1c2goMCksbS5wdXNoKHIpLGYucHVzaChyKSxkLnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2hdKSk6KHAucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2hdKSxtLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1toXStyKSxmLnB1c2goMCksZC5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbaF0pKTtmb3IodmFyIGc9W10seT0wO3k8bFtoXS5sZW5ndGg7eSsrKXBbaF08PWxbaF1beV0mJmxbaF1beV08bVtoXSYmZy5wdXNoKGxbaF1beV0tcFtoXSk7di5wdXNoKGcpfWZvcih2YXIgYj1bIlNTIl0seD1bIid1c2Ugc3RyaWN0JyJdLF89W10seT0wO3k8cjsrK3kpXy5wdXNoKFsicyIseSwiPVNTWyIseSwiXSJdLmpvaW4oIiIpKTtmb3IodmFyIGg9MDtoPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2gpe2IucHVzaCgiYSIraCksYi5wdXNoKCJ0IitoKSxiLnB1c2goInAiK2gpO2Zvcih2YXIgeT0wO3k8cjsrK3kpXy5wdXNoKFsidCIsaCwicCIseSwiPXQiLGgsIlsiLHBbaF0reSwiXSJdLmpvaW4oIiIpKTtmb3IodmFyIHk9MDt5PE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbaF0pOysreSlfLnB1c2goWyJ0IixoLCJiIix5LCI9dCIsaCwiWyIsZltoXSt5LCJdIl0uam9pbigiIikpfWZvcih2YXIgaD0wO2g8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2gpYi5wdXNoKCJZIitoKTtpZih0LnNoYXBlQXJncy5sZW5ndGg+MCYmXy5wdXNoKCJzaGFwZT1TUy5zbGljZSgwKSIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXtmb3IodmFyIHc9bmV3IEFycmF5KHIpLGg9MDtoPHI7KytoKXdbaF09IjAiO18ucHVzaChbImluZGV4PVsiLHcuam9pbigiLCIpLCJdIl0uam9pbigiIikpfWZvcih2YXIgaD0wO2g8dC5vZmZzZXRBcmdzLmxlbmd0aDsrK2gpe2Zvcih2YXIgTT10Lm9mZnNldEFyZ3NbaF0saz1bXSx5PTA7eTxNLm9mZnNldC5sZW5ndGg7Kyt5KTAhPT1NLm9mZnNldFt5XSYmKDE9PT1NLm9mZnNldFt5XT9rLnB1c2goWyJ0IixNLmFycmF5LCJwIix5XS5qb2luKCIiKSk6ay5wdXNoKFtNLm9mZnNldFt5XSwiKnQiLE0uYXJyYXksInAiLHldLmpvaW4oIiIpKSk7MD09PWsubGVuZ3RoP18ucHVzaCgicSIraCsiPTAiKTpfLnB1c2goWyJxIixoLCI9IixrLmpvaW4oIisiKV0uam9pbigiIikpfXZhciBBPXUoW10uY29uY2F0KHQucHJlLnRoaXNWYXJzKS5jb25jYXQodC5ib2R5LnRoaXNWYXJzKS5jb25jYXQodC5wb3N0LnRoaXNWYXJzKSk7Xz1fLmNvbmNhdChBKSxfLmxlbmd0aD4wJiZ4LnB1c2goInZhciAiK18uam9pbigiLCIpKTtmb3IodmFyIGg9MDtoPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2gpeC5wdXNoKCJwIitoKyJ8PTAiKTt0LnByZS5ib2R5Lmxlbmd0aD4zJiZ4LnB1c2gobyh0LnByZSx0LGMpKTt2YXIgVD1vKHQuYm9keSx0LGMpLFM9YSh2KTtTPHI/eC5wdXNoKGkoUyx2WzBdLHQsVCkpOngucHVzaChuKHZbMF0sdCxUKSksdC5wb3N0LmJvZHkubGVuZ3RoPjMmJngucHVzaChvKHQucG9zdCx0LGMpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgY3dpc2Ugcm91dGluZSBmb3IgIixlLCI6XG4iK3guam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIik7dmFyIEU9W3QuZnVuY05hbWV8fCJ1bm5hbWVkIiwiX2N3aXNlX2xvb3BfIixsWzBdLmpvaW4oInMiKSwibSIsUyxzKGMpXS5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFsiZnVuY3Rpb24gIixFLCIoIixiLmpvaW4oIiwiKSwiKXsiLHguam9pbigiXG4iKSwifSByZXR1cm4gIixFXS5qb2luKCIiKSkoKX12YXIgdT10KCJ1bmlxIik7ZS5leHBvcnRzPWx9LHt1bmlxOjU0MX1dLDExMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPVsiJ3VzZSBzdHJpY3QnIiwidmFyIENBQ0hFRD17fSJdLHI9W10sbj10LmZ1bmNOYW1lKyJfY3dpc2VfdGh1bmsiO2UucHVzaChbInJldHVybiBmdW5jdGlvbiAiLG4sIigiLHQuc2hpbUFyZ3Muam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGE9W10sbz1bXSxzPVtbImFycmF5Iix0LmFycmF5QXJnc1swXSwiLnNoYXBlLnNsaWNlKCIsTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSx0LmFycmF5QmxvY2tJbmRpY2VzWzBdPDA/IiwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rIikiOiIpIl0uam9pbigiIildLGw9W10sdT1bXSxjPTA7Yzx0LmFycmF5QXJncy5sZW5ndGg7KytjKXt2YXIgaD10LmFycmF5QXJnc1tjXTtyLnB1c2goWyJ0IixoLCI9YXJyYXkiLGgsIi5kdHlwZSwiLCJyIixoLCI9YXJyYXkiLGgsIi5vcmRlciJdLmpvaW4oIiIpKSxhLnB1c2goInQiK2gpLGEucHVzaCgiciIraCksby5wdXNoKCJ0IitoKSxvLnB1c2goInIiK2grIi5qb2luKCkiKSxzLnB1c2goImFycmF5IitoKyIuZGF0YSIpLHMucHVzaCgiYXJyYXkiK2grIi5zdHJpZGUiKSxzLnB1c2goImFycmF5IitoKyIub2Zmc2V0fDAiKSxjPjAmJihsLnB1c2goImFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlLmxlbmd0aD09PWFycmF5IitoKyIuc2hhcGUubGVuZ3RoKyIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbY10pKSksdS5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZVtzaGFwZUluZGV4KyIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiXT09PWFycmF5IitoKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1tjXSkrIl0iKSl9dC5hcnJheUFyZ3MubGVuZ3RoPjEmJihlLnB1c2goImlmICghKCIrbC5qb2luKCIgJiYgIikrIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uYWxpdHkhJykiKSxlLnB1c2goImZvcih2YXIgc2hhcGVJbmRleD1hcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZS5sZW5ndGgtIitNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiOyBzaGFwZUluZGV4LS1ceDNlMDspIHsiKSxlLnB1c2goImlmICghKCIrdS5qb2luKCIgJiYgIikrIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgc2hhcGUhJykiKSxlLnB1c2goIn0iKSk7Zm9yKHZhciBjPTA7Yzx0LnNjYWxhckFyZ3MubGVuZ3RoOysrYylzLnB1c2goInNjYWxhciIrdC5zY2FsYXJBcmdzW2NdKTtyZXR1cm4gci5wdXNoKFsidHlwZT1bIixvLmpvaW4oIiwiKSwiXS5qb2luKCkiXS5qb2luKCIiKSksci5wdXNoKCJwcm9jPUNBQ0hFRFt0eXBlXSIpLGUucHVzaCgidmFyICIrci5qb2luKCIsIikpLGUucHVzaChbImlmKCFwcm9jKXsiLCJDQUNIRURbdHlwZV09cHJvYz1jb21waWxlKFsiLGEuam9pbigiLCIpLCJdKX0iLCJyZXR1cm4gcHJvYygiLHMuam9pbigiLCIpLCIpfSJdLmpvaW4oIiIpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgdGh1bms6XG4iK2Uuam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIiksbmV3IEZ1bmN0aW9uKCJjb21waWxlIixlLmpvaW4oIlxuIikpKGkuYmluZCh2b2lkIDAsdCkpfXZhciBpPXQoIi4vY29tcGlsZS5qcyIpO2UuZXhwb3J0cz1ufSx7Ii4vY29tcGlsZS5qcyI6MTA5fV0sMTExOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIil9LHsiY3dpc2UtY29tcGlsZXIiOjEwOH1dLDExMjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS5kMz1lLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIG8odChlKSxyKX19ZnVuY3Rpb24gcih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIG4odCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1rPzEwOmE+PUE/NTphPj1UPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49az8xMDphPj1BPzU6YT49VD8yOjEpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PWs/aSo9MTA6YT49QT9pKj01OmE+PVQmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiBhKHQpe3JldHVybiB0Lmxlbmd0aH12YXIgbz1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0scz1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodD1lKHQpKSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19LGw9cyhvKSx1PWwucmlnaHQsYz1sLmxlZnQsaD1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPXIpO2Zvcih2YXIgbj0wLGk9dC5sZW5ndGgtMSxhPXRbMF0sbz1uZXcgQXJyYXkoaTwwPzA6aSk7bjxpOylvW25dPWUoYSxhPXRbKytuXSk7cmV0dXJuIG99LGY9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGw9dC5sZW5ndGgsdT1lLmxlbmd0aCxjPW5ldyBBcnJheShsKnUpO2ZvcihudWxsPT1uJiYobj1yKSxpPW89MDtpPGw7KytpKWZvcihzPXRbaV0sYT0wO2E8dTsrK2EsKytvKWNbb109bihzLGVbYV0pO3JldHVybiBjfSxkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxwPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9LG09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0wLG89LTEscz0wLGw9MDtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKHI9cCh0W29dKSl8fChuPXItcyxzKz1uLysrYSxsKz1uKihyLXMpKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKHI9cChlKHRbb10sbyx0KSkpfHwobj1yLXMscys9bi8rK2EsbCs9biooci1zKSk7aWYoYT4xKXJldHVybiBsLyhhLTEpfSx2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bSh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfSxnPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxhOylpZihudWxsIT0ocj10W29dKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPXRbb10pJiYobj5yJiYobj1yKSxpPHImJihpPXIpKX1lbHNlIGZvcig7KytvPGE7KWlmKG51bGwhPShyPWUodFtvXSxvLHQpKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPWUodFtvXSxvLHQpKSYmKG4+ciYmKG49ciksaTxyJiYoaT1yKSk7cmV0dXJuW24saV19LHk9QXJyYXkucHJvdG90eXBlLGI9eS5zbGljZSx4PXkubWFwLF89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSx3PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxNPWZ1bmN0aW9uKHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfSxrPU1hdGguc3FydCg1MCksQT1NYXRoLnNxcnQoMTApLFQ9TWF0aC5zcXJ0KDIpLFM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPWU8dCxsPS0xO2lmKHMmJihpPXQsdD1lLGU9aSksMD09PShvPW4odCxlLHIpKXx8IWlzRmluaXRlKG8pKXJldHVybltdO2lmKG8+MClmb3IodD1NYXRoLmNlaWwodC9vKSxlPU1hdGguZmxvb3IoZS9vKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrbDxpOylhW2xdPSh0K2wpKm87ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqbyksZT1NYXRoLmNlaWwoZSpvKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrbDxpOylhW2xdPSh0LWwpL287cmV0dXJuIHMmJmEucmV2ZXJzZSgpLGF9LEU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBhLG8scz10Lmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3IoYT0wO2E8czsrK2EpbFthXT1lKHRbYV0sYSx0KTt2YXIgYz1yKGwpLGg9Y1swXSxmPWNbMV0sZD1uKGwsaCxmKTtBcnJheS5pc0FycmF5KGQpfHwoZD1pKGgsZixkKSxkPU0oTWF0aC5jZWlsKGgvZCkqZCxNYXRoLmZsb29yKGYvZCkqZCxkKSk7Zm9yKHZhciBwPWQubGVuZ3RoO2RbMF08PWg7KWQuc2hpZnQoKSwtLXA7Zm9yKDtkW3AtMV0+ZjspZC5wb3AoKSwtLXA7dmFyIG0sdj1uZXcgQXJyYXkocCsxKTtmb3IoYT0wO2E8PXA7KythKW09dlthXT1bXSxtLngwPWE+MD9kW2EtMV06aCxtLngxPWE8cD9kW2FdOmY7Zm9yKGE9MDthPHM7KythKW89bFthXSxoPD1vJiZvPD1mJiZ2W3UoZCxvLDAscCldLnB1c2godFthXSk7cmV0dXJuIHZ9dmFyIGU9dyxyPWcsbj1FO3JldHVybiB0LnZhbHVlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiByP3I6XyhyKSx0KTplfSx0LmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOl8oW2VbMF0sZVsxXV0pLHQpOnJ9LHQudGhyZXNob2xkcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOl8oQXJyYXkuaXNBcnJheShlKT9iLmNhbGwoZSk6ZSksdCk6bn0sdH0sQz1mdW5jdGlvbih0LGUscil7aWYobnVsbD09ciYmKHI9cCksbj10Lmxlbmd0aCl7aWYoKGU9K2UpPD0wfHxuPDIpcmV0dXJuK3IodFswXSwwLHQpO2lmKGU+PTEpcmV0dXJuK3IodFtuLTFdLG4tMSx0KTt2YXIgbixpPShuLTEpKmUsYT1NYXRoLmZsb29yKGkpLG89K3IodFthXSxhLHQpO3JldHVybiBvKygrcih0W2ErMV0sYSsxLHQpLW8pKihpLWEpfX0sej1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9eC5jYWxsKHQscCkuc29ydChvKSxNYXRoLmNlaWwoKHItZSkvKDIqKEModCwuNzUpLUModCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSxJPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLWUpLygzLjUqdih0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSxEPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSxQPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPW4sYT0tMSxvPTA7aWYobnVsbD09ZSlmb3IoOysrYTxuOylpc05hTihyPXAodFthXSkpPy0taTpvKz1yO2Vsc2UgZm9yKDsrK2E8bjspaXNOYU4ocj1wKGUodFthXSxhLHQpKSk/LS1pOm8rPXI7aWYoaSlyZXR1cm4gby9pfSxPPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPS0xLGE9W107aWYobnVsbD09ZSlmb3IoOysraTxuOylpc05hTihyPXAodFtpXSkpfHxhLnB1c2gocik7ZWxzZSBmb3IoOysraTxuOylpc05hTihyPXAoZSh0W2ldLGksdCkpKXx8YS5wdXNoKHIpO3JldHVybiBDKGEuc29ydChvKSwuNSl9LFI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3Iobj10W2ldLGU9bi5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sRj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn0saj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sTj1mdW5jdGlvbih0LGUpe2lmKHI9dC5sZW5ndGgpe3ZhciByLG4saT0wLGE9MCxzPXRbYV07Zm9yKG51bGw9PWUmJihlPW8pOysraTxyOykoZShuPXRbaV0scyk8MHx8MCE9PWUocyxzKSkmJihzPW4sYT1pKTtyZXR1cm4gMD09PWUocyxzKT9hOnZvaWQgMH19LEI9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9KG51bGw9PXI/dC5sZW5ndGg6ciktKGU9bnVsbD09ZT8wOitlKTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sVT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sVj1mdW5jdGlvbih0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxyPUYodCxhKSxuPW5ldyBBcnJheShyKTsrK2U8cjspZm9yKHZhciBpLG89LTEscz1uW2VdPW5ldyBBcnJheShpKTsrK288aTspc1tvXT10W29dW2VdO3JldHVybiBufSxIPWZ1bmN0aW9uKCl7cmV0dXJuIFYoYXJndW1lbnRzKX07dC5iaXNlY3Q9dSx0LmJpc2VjdFJpZ2h0PXUsdC5iaXNlY3RMZWZ0PWMsdC5hc2NlbmRpbmc9byx0LmJpc2VjdG9yPXMsdC5jcm9zcz1mLHQuZGVzY2VuZGluZz1kLHQuZGV2aWF0aW9uPXYsdC5leHRlbnQ9Zyx0Lmhpc3RvZ3JhbT1MLHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz16LHQudGhyZXNob2xkU2NvdHQ9SSx0LnRocmVzaG9sZFN0dXJnZXM9RSx0Lm1heD1ELHQubWVhbj1QLHQubWVkaWFuPU8sdC5tZXJnZT1SLHQubWluPUYsdC5wYWlycz1oLHQucGVybXV0ZT1qLHQucXVhbnRpbGU9Qyx0LnJhbmdlPU0sdC5zY2FuPU4sdC5zaHVmZmxlPUIsdC5zdW09VSx0LnRpY2tzPVMsdC50aWNrSW5jcmVtZW50PW4sdC50aWNrU3RlcD1pLHQudHJhbnNwb3NlPVYsdC52YXJpYW5jZT1tLHQuemlwPUgsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSwxMTM6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/aShuKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiXSxpKTppKGUuZDM9ZS5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKCl7fWZ1bmN0aW9uIHIodCxyKXt2YXIgbj1uZXcgZTtpZih0IGluc3RhbmNlb2YgZSl0LmVhY2goZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiBuKCl7cmV0dXJue319ZnVuY3Rpb24gaSh0LGUscil7dFtlXT1yfWZ1bmN0aW9uIGEoKXtyZXR1cm4gcigpfWZ1bmN0aW9uIG8odCxlLHIpe3Quc2V0KGUscil9ZnVuY3Rpb24gcygpe31mdW5jdGlvbiBsKHQsZSl7dmFyIHI9bmV3IHM7aWYodCBpbnN0YW5jZW9mIHMpdC5lYWNoKGZ1bmN0aW9uKHQpe3IuYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgbj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK248aTspci5hZGQodFtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLmFkZChlKHRbbl0sbix0KSl9cmV0dXJuIHJ9ZS5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbixpLGEpe2lmKG4+PWMubGVuZ3RoKXJldHVybiBudWxsIT1sP2woZSk6bnVsbCE9cz9lLnNvcnQocyk6ZTtmb3IodmFyIG8sdSxoLGY9LTEsZD1lLmxlbmd0aCxwPWNbbisrXSxtPXIoKSx2PWkoKTsrK2Y8ZDspKGg9bS5nZXQobz1wKHU9ZVtmXSkrIiIpKT9oLnB1c2godSk6bS5zZXQobyxbdV0pO3JldHVybiBtLmVhY2goZnVuY3Rpb24oZSxyKXthKHYscix0KGUsbixpLGEpKX0pLHZ9ZnVuY3Rpb24gZSh0LHIpe2lmKCsrcj5jLmxlbmd0aClyZXR1cm4gdDt2YXIgbixpPWhbci0xXTtyZXR1cm4gbnVsbCE9bCYmcj49Yy5sZW5ndGg/bj10LmVudHJpZXMoKToobj1bXSx0LmVhY2goZnVuY3Rpb24odCxpKXtuLnB1c2goe2tleTppLHZhbHVlczplKHQscil9KX0pKSxudWxsIT1pP24uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBpKHQua2V5LGUua2V5KX0pOm59dmFyIHMsbCx1LGM9W10saD1bXTtyZXR1cm4gdT17b2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiB0KGUsMCxuLGkpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSwwLGEsbyl9LGVudHJpZXM6ZnVuY3Rpb24ocil7cmV0dXJuIGUodChyLDAsYSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBjLnB1c2godCksdX0sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGhbYy5sZW5ndGgtMV09dCx1fSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBzPXQsdX0scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBsPXQsdX19fSxjPXIucHJvdG90eXBlO3MucHJvdG90eXBlPWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpjLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQrPSIiLHRoaXNbIiQiK3RdPXQsdGhpc30scmVtb3ZlOmMucmVtb3ZlLGNsZWFyOmMuY2xlYXIsdmFsdWVzOmMua2V5cyxzaXplOmMuc2l6ZSxlbXB0eTpjLmVtcHR5LGVhY2g6Yy5lYWNofTt2YXIgaD1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LGY9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSxkPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfTt0Lm5lc3Q9dSx0LnNldD1sLHQubWFwPXIsdC5rZXlzPWgsdC52YWx1ZXM9Zix0LmVudHJpZXM9ZCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDExNDpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS5kMz1lLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBuKHQpe3ZhciBlO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT16LmV4ZWModCkpPyhlPXBhcnNlSW50KGVbMV0sMTYpLG5ldyBsKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKSk6KGU9SS5leGVjKHQpKT9pKHBhcnNlSW50KGVbMV0sMTYpKTooZT1ELmV4ZWModCkpP25ldyBsKGVbMV0sZVsyXSxlWzNdLDEpOihlPVAuZXhlYyh0KSk/bmV3IGwoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9Ty5leGVjKHQpKT9hKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPVIuZXhlYyh0KSk/YSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1GLmV4ZWModCkpP3UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1qLmV4ZWModCkpP3UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpOLmhhc093blByb3BlcnR5KHQpP2koTlt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IGwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgbCh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IGwodCxlLHIsbil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHJ8fCh0PW4odCkpLHQ/KHQ9dC5yZ2IoKSxuZXcgbCh0LnIsdC5nLHQuYix0Lm9wYWNpdHkpKTpuZXcgbH1mdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9vKHQpOm5ldyBsKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBsKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgZih0LGUscixuKX1mdW5jdGlvbiBjKHQpe2lmKHQgaW5zdGFuY2VvZiBmKXJldHVybiBuZXcgZih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiByfHwodD1uKHQpKSwhdClyZXR1cm4gbmV3IGY7aWYodCBpbnN0YW5jZW9mIGYpcmV0dXJuIHQ7dD10LnJnYigpO3ZhciBlPXQuci8yNTUsaT10LmcvMjU1LGE9dC5iLzI1NSxvPU1hdGgubWluKGUsaSxhKSxzPU1hdGgubWF4KGUsaSxhKSxsPU5hTix1PXMtbyxjPShzK28pLzI7cmV0dXJuIHU/KGw9ZT09PXM/KGktYSkvdSs2KihpPGEpOmk9PT1zPyhhLWUpL3UrMjooZS1pKS91KzQsdS89YzwuNT9zK286Mi1zLW8sbCo9NjApOnU9Yz4wJiZjPDE/MDpsLG5ldyBmKGwsdSxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gaCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Yyh0KTpuZXcgZih0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gZih0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuIDI1NSoodDw2MD9lKyhyLWUpKnQvNjA6dDwxODA/cjp0PDI0MD9lKyhyLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gcCh0KXtpZih0IGluc3RhbmNlb2YgdilyZXR1cm4gbmV3IHYodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgTSl7dmFyIGU9dC5oKkI7cmV0dXJuIG5ldyB2KHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIGx8fCh0PW8odCkpO3ZhciByPXgodC5yKSxuPXgodC5nKSxpPXgodC5iKSxhPWcoKC40MTI0NTY0KnIrLjM1NzU3NjEqbisuMTgwNDM3NSppKS9WKSxzPWcoKC4yMTI2NzI5KnIrLjcxNTE1MjIqbisuMDcyMTc1KmkpL0gpO3JldHVybiBuZXcgdigxMTYqcy0xNiw1MDAqKGEtcyksMjAwKihzLWcoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL3EpKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIG0odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3AodCk6bmV3IHYodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHYodCxlLHIsbil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQ+Vz9NYXRoLnBvdyh0LDEvMyk6dC9YK0d9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdD5ZP3QqdCp0OlgqKHQtRyl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIHgodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gXyh0KXtpZih0IGluc3RhbmNlb2YgTSlyZXR1cm4gbmV3IE0odC5oLHQuYyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2Ygdnx8KHQ9cCh0KSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpVO3JldHVybiBuZXcgTShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiB3KHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9fKHQpOm5ldyBNKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBNKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBrKHQpe2lmKHQgaW5zdGFuY2VvZiBUKXJldHVybiBuZXcgVCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBsfHwodD1vKHQpKTt2YXIgZT10LnIvMjU1LHI9dC5nLzI1NSxuPXQuYi8yNTUsaT0ocnQqbit0dCplLWV0KnIpLyhydCt0dC1ldCksYT1uLWkscz0oJCooci1pKS1LKmEpL1EsdT1NYXRoLnNxcnQocypzK2EqYSkvKCQqaSooMS1pKSksYz11P01hdGguYXRhbjIocyxhKSpVLTEyMDpOYU47cmV0dXJuIG5ldyBUKGM8MD9jKzM2MDpjLHUsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEEodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2sodCk6bmV3IFQodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIFQodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufXZhciBTPWZ1bmN0aW9uKHQsZSxyKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9dH0sRT0iXFxzKihbKy1dP1xcZCspXFxzKiIsTD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIix6PS9eIyhbMC05YS1mXXszfSkkLyxJPS9eIyhbMC05YS1mXXs2fSkkLyxEPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tFLEUsRV0rIlxcKSQiKSxQPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tDLEMsQ10rIlxcKSQiKSxPPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbRSxFLEUsTF0rIlxcKSQiKSxSPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQyxDLEMsTF0rIlxcKSQiKSxGPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tMLEMsQ10rIlxcKSQiKSxqPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbTCxDLEMsTF0rIlxcKSQiKSxOPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O1MocixuLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksUyhsLHMsZShyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgbCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgbCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybiB0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSwoMT09PXQ/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKSxTKGYsaCxlKHIse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IGYodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyBsKGQodD49MjQwP3QtMjQwOnQrMTIwLGksbiksZCh0LGksbiksZCh0PDEyMD90KzI0MDp0LTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgQj1NYXRoLlBJLzE4MCxVPTE4MC9NYXRoLlBJLFY9Ljk1MDQ3LEg9MSxxPTEuMDg4ODMsRz00LzI5LFk9Ni8yOSxYPTMqWSpZLFc9WSpZKlk7Uyh2LG0sZShyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHYodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2KHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIHQ9SCp5KHQpLGU9Vip5KGUpLHI9cSp5KHIpLG5ldyBsKGIoMy4yNDA0NTQyKmUtMS41MzcxMzg1KnQtLjQ5ODUzMTQqciksYigtLjk2OTI2NiplKzEuODc2MDEwOCp0Ky4wNDE1NTYqciksYiguMDU1NjQzNCplLS4yMDQwMjU5KnQrMS4wNTcyMjUyKnIpLHRoaXMub3BhY2l0eSl9fSkpLFMoTSx3LGUocix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBwKHRoaXMpLnJnYigpfX0pKTt2YXIgWj0tLjE0ODYxLEo9MS43ODI3NyxLPS0uMjkyMjcsUT0tLjkwNjQ5LCQ9MS45NzI5NCx0dD0kKlEsZXQ9JCpKLHJ0PUoqSy1RKlo7UyhULEEsZShyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgVCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBUKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpCLGU9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBsKDI1NSooZStyKihaKm4rSippKSksMjU1KihlK3IqKEsqbitRKmkpKSwyNTUqKGUrciooJCpuKSksdGhpcy5vcGFjaXR5KX19KSksdC5jb2xvcj1uLHQucmdiPXMsdC5oc2w9aCx0LmxhYj1tLHQuaGNsPXcsdC5jdWJlaGVsaXg9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDExNTpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS5kMz1lLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IHIoaSl9ZnVuY3Rpb24gcih0KXt0aGlzLl89dH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO2lmKG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcixuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKChyPXRbbl0pLm5hbWU9PT1lKXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOysrbilpZih0W25dLm5hbWU9PT1lKXt0W25dPW8sdD10LnNsaWNlKDAsbikuY29uY2F0KHQuc2xpY2UobisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPXImJnQucHVzaCh7bmFtZTplLHZhbHVlOnJ9KSx0fXZhciBvPXt2YWx1ZTpmdW5jdGlvbigpe319O3IucHJvdG90eXBlPWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbz10aGlzLl8scz1uKHQrIiIsbyksbD0tMSx1PXMubGVuZ3RoO3tpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbDx1OylpZihyPSh0PXNbbF0pLnR5cGUpb1tyXT1hKG9bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBvKW9bcl09YShvW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDx1OylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9aShvW3JdLHQubmFtZSkpKXJldHVybiByfX0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fCjtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHIodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihuPXRoaXMuX1t0XSxhPTAscj1uLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBuPXRoaXMuX1t0XSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW5baV0udmFsdWUuYXBwbHkoZSxyKX19LHQuZGlzcGF0Y2g9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDExNjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihpLGEpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9hKG4sZSgiZDMtcXVhZHRyZWUiKSxlKCJkMy1jb2xsZWN0aW9uIiksZSgiZDMtZGlzcGF0Y2giKSxlKCJkMy10aW1lciIpKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiLCJkMy1xdWFkdHJlZSIsImQzLWNvbGxlY3Rpb24iLCJkMy1kaXNwYXRjaCIsImQzLXRpbWVyIl0sYSk6YShpLmQzPWkuZDN8fHt9LGkuZDMsaS5kMyxpLmQzLGkuZDMpfSh0aGlzLGZ1bmN0aW9uKHQsZSxyLG4saSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIHModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB1KHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC55fXZhciBoPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3ZhciByLGksYT1uLmxlbmd0aCxvPTAscz0wO2ZvcihyPTA7cjxhOysrcilpPW5bcl0sbys9aS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLHI9MDtyPGE7KytyKWk9bltyXSxpLngtPW8saS55LT1zfXZhciBuO3JldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Uscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHIpOmV9LHJ9LGY9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxkPWZ1bmN0aW9uKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiB0KHQsZSxyLG4saSl7dmFyIGE9dC5kYXRhLG89dC5yLHM9bStvO3tpZighYSlyZXR1cm4gZT5mK3N8fG48Zi1zfHxyPnArc3x8aTxwLXM7aWYoYS5pbmRleD5oLmluZGV4KXt2YXIgbD1mLWEueC1hLnZ4LGM9cC1hLnktYS52eSxnPWwqbCtjKmM7ZzxzKnMmJigwPT09bCYmKGw9ZCgpLGcrPWwqbCksMD09PWMmJihjPWQoKSxnKz1jKmMpLGc9KHMtKGc9TWF0aC5zcXJ0KGcpKSkvZyp1LGgudngrPShsKj1nKSoocz0obyo9bykvKHYrbykpLGgudnkrPShjKj1nKSpzLGEudngtPWwqKHM9MS1zKSxhLnZ5LT1jKnMpfX19Zm9yKHZhciByLGksaCxmLHAsbSx2LGc9cy5sZW5ndGgseT0wO3k8YzsrK3kpZm9yKGk9ZS5xdWFkdHJlZShzLGEsbykudmlzaXRBZnRlcihuKSxyPTA7cjxnOysrciloPXNbcl0sbT1sW2guaW5kZXhdLHY9bSptLGY9aC54K2gudngscD1oLnkraC52eSxpLnZpc2l0KHQpfWZ1bmN0aW9uIG4odCl7aWYodC5kYXRhKXJldHVybiB0LnI9bFt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBpKCl7aWYocyl7dmFyIGUscixuPXMubGVuZ3RoO2ZvcihsPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXNbZV0sbFtyLmluZGV4XT0rdChyLGUscyl9fXZhciBzLGwsdT0xLGM9MTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZihudWxsPT10PzE6K3QpKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cz10LGkoKX0sci5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LHIpOmN9LHIuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qscik6dX0sci5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmKCtlKSxpKCkscik6dH0scn0sbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiAxL01hdGgubWluKHBbdC5zb3VyY2UuaW5kZXhdLHBbdC50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBuKGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxiOysrcilmb3IodmFyIGksYSxvLHMsbCxoLGYscD0wO3A8bjsrK3ApaT10W3BdLGE9aS5zb3VyY2Usbz1pLnRhcmdldCxzPW8ueCtvLnZ4LWEueC1hLnZ4fHxkKCksbD1vLnkrby52eS1hLnktYS52eXx8ZCgpLGg9TWF0aC5zcXJ0KHMqcytsKmwpLGg9KGgtY1twXSkvaCplKnVbcF0scyo9aCxsKj1oLG8udngtPXMqKGY9bVtwXSksby52eS09bCpmLGEudngrPXMqKGY9MS1mKSxhLnZ5Kz1sKmZ9ZnVuY3Rpb24gaSgpe2lmKGgpe3ZhciBlLG4saT1oLmxlbmd0aCxzPXQubGVuZ3RoLGY9ci5tYXAoaCx2KTtmb3IoZT0wLHA9bmV3IEFycmF5KGkpO2U8czsrK2Upbj10W2VdLG4uaW5kZXg9ZSwib2JqZWN0IiE9dHlwZW9mIG4uc291cmNlJiYobi5zb3VyY2U9bChmLG4uc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBuLnRhcmdldCYmKG4udGFyZ2V0PWwoZixuLnRhcmdldCkpLHBbbi5zb3VyY2UuaW5kZXhdPShwW24uc291cmNlLmluZGV4XXx8MCkrMSxwW24udGFyZ2V0LmluZGV4XT0ocFtuLnRhcmdldC5pbmRleF18fDApKzE7Zm9yKGU9MCxtPW5ldyBBcnJheShzKTtlPHM7KytlKW49dFtlXSxtW2VdPXBbbi5zb3VyY2UuaW5kZXhdLyhwW24uc291cmNlLmluZGV4XStwW24udGFyZ2V0LmluZGV4XSk7dT1uZXcgQXJyYXkocyksYSgpLGM9bmV3IEFycmF5KHMpLG8oKX19ZnVuY3Rpb24gYSgpe2lmKGgpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXVbZV09K2codFtlXSxlLHQpfWZ1bmN0aW9uIG8oKXtpZihoKWZvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSljW2VdPSt5KHRbZV0sZSx0KX12YXIgdSxjLGgscCxtLHY9cyxnPWUseT1mKDMwKSxiPTE7cmV0dXJuIG51bGw9PXQmJih0PVtdKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aD10LGkoKX0sbi5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkoKSxuKTp0fSxuLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQsbik6dn0sbi5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LG4pOmJ9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmKCt0KSxhKCksbik6Z30sbi5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmYoK3QpLG8oKSxuKTp5fSxufSx2PTEwLGc9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2EoKSx5LmNhbGwoInRpY2siLGwpLHU8YyYmKG0uc3RvcCgpLHkuY2FsbCgiZW5kIixsKSl9ZnVuY3Rpb24gYSgpe3ZhciBlLHIsbj10Lmxlbmd0aDtmb3IodSs9KGYtdSkqaCxwLmVhY2goZnVuY3Rpb24odCl7dCh1KX0pLGU9MDtlPG47KytlKXI9dFtlXSxudWxsPT1yLmZ4P3IueCs9ci52eCo9ZDooci54PXIuZngsci52eD0wKSxudWxsPT1yLmZ5P3IueSs9ci52eSo9ZDooci55PXIuZnksci52eT0wKX1mdW5jdGlvbiBvKCl7Zm9yKHZhciBlLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipe2lmKGU9dFtyXSxlLmluZGV4PXIsaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9dipNYXRoLnNxcnQociksYT1yKmc7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9dmFyIGwsdT0xLGM9LjAwMSxoPTEtTWF0aC5wb3coYywxLzMwMCksZj0wLGQ9LjYscD1yLm1hcCgpLG09aS50aW1lcihlKSx5PW4uZGlzcGF0Y2goInRpY2siLCJlbmQiKTtyZXR1cm4gbnVsbD09dCYmKHQ9W10pLG8oKSxsPXt0aWNrOmEscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBtLnJlc3RhcnQoZSksbH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBtLnN0b3AoKSxsfSxub2RlczpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8oKSxwLmVhY2gocyksbCk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsbCk6dX0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCk6Y30sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxsKToraH0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3QsbCk6Zn0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0xLXQsbCk6MS1kfSxmb3JjZTpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PWU/cC5yZW1vdmUodCk6cC5zZXQodCxzKGUpKSxsKTpwLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLHIsbil7dmFyIGksYSxvLHMsbCx1PTAsYz10Lmxlbmd0aDtmb3IobnVsbD09bj9uPTEvMDpuKj1uLHU9MDt1PGM7Kyt1KXM9dFt1XSxpPWUtcy54LGE9ci1zLnksKG89aSppK2EqYSk8biYmKGw9cyxuPW8pO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KHkub24odCxlKSxsKTp5Lm9uKHQpfX19LGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciByLGw9YS5sZW5ndGgsaD1lLnF1YWR0cmVlKGEsdSxjKS52aXNpdEFmdGVyKG4pO2ZvcihzPXQscj0wO3I8bDsrK3Ipbz1hW3JdLGgudmlzaXQoaSl9ZnVuY3Rpb24gcigpe2lmKGEpe3ZhciB0LGUscj1hLmxlbmd0aDtmb3IobD1uZXcgQXJyYXkociksdD0wO3Q8cjsrK3QpZT1hW3RdLGxbZS5pbmRleF09K2goZSx0LGEpfX1mdW5jdGlvbiBuKHQpe3ZhciBlLHIsbixpLGEsbz0wO2lmKHQubGVuZ3RoKXtmb3Iobj1pPWE9MDthPDQ7KythKShlPXRbYV0pJiYocj1lLnZhbHVlKSYmKG8rPXIsbis9ciplLngsaSs9ciplLnkpO3QueD1uL28sdC55PWkvb31lbHNle2U9dCxlLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve28rPWxbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1vfWZ1bmN0aW9uIGkodCxlLHIsbil7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGk9dC54LW8ueCxhPXQueS1vLnksdT1uLWUsYz1pKmkrYSphO2lmKHUqdS92PGMpcmV0dXJuIGM8bSYmKDA9PT1pJiYoaT1kKCksYys9aSppKSwwPT09YSYmKGE9ZCgpLGMrPWEqYSksYzxwJiYoYz1NYXRoLnNxcnQocCpjKSksby52eCs9aSp0LnZhbHVlKnMvYyxvLnZ5Kz1hKnQudmFsdWUqcy9jKSwhMDtpZighKHQubGVuZ3RofHxjPj1tKSl7KHQuZGF0YSE9PW98fHQubmV4dCkmJigwPT09aSYmKGk9ZCgpLGMrPWkqaSksMD09PWEmJihhPWQoKSxjKz1hKmEpLGM8cCYmKGM9TWF0aC5zcXJ0KHAqYykpKTtkb3t0LmRhdGEhPT1vJiYodT1sW3QuZGF0YS5pbmRleF0qcy9jLG8udngrPWkqdSxvLnZ5Kz1hKnUpfXdoaWxlKHQ9dC5uZXh0KX19dmFyIGEsbyxzLGwsaD1mKC0zMCkscD0xLG09MS8wLHY9LjgxO3JldHVybiB0LmluaXRpYWxpemU9ZnVuY3Rpb24odCl7YT10LHIoKX0sdC5zdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmYoK2UpLHIoKSx0KTpofSx0LmRpc3RhbmNlTWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUqZSx0KTpNYXRoLnNxcnQocCl9LHQuZGlzdGFuY2VNYXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ZSplLHQpOk1hdGguc3FydChtKX0sdC50aGV0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1lKmUsdCk6TWF0aC5zcXJ0KHYpfSx0fSx4PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlLHI9MCxvPW4ubGVuZ3RoO3I8bzsrK3IpZT1uW3JdLGUudngrPShhW3JdLWUueCkqaVtyXSp0fWZ1bmN0aW9uIHIoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlpW2VdPWlzTmFOKGFbZV09K3QobltlXSxlLG4pKT8wOitvKG5bZV0sZSxuKX19dmFyIG4saSxhLG89ZiguMSk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWYobnVsbD09dD8wOit0KSksZS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxyKCl9LGUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmKCt0KSxyKCksZSk6b30sZS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZigrbikscigpLGUpOnR9LGV9LF89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGUscj0wLG89bi5sZW5ndGg7cjxvOysrcillPW5bcl0sZS52eSs9KGFbcl0tZS55KSppW3JdKnR9ZnVuY3Rpb24gcigpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKWlbZV09aXNOYU4oYVtlXT0rdChuW2VdLGUsbikpPzA6K28obltlXSxlLG4pfX12YXIgbixpLGEsbz1mKC4xKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZihudWxsPT10PzA6K3QpKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LHIoKX0sZS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmYoK3QpLHIoKSxlKTpvfSxlLnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmKCtuKSxyKCksZSk6dH0sZX07dC5mb3JjZUNlbnRlcj1oLHQuZm9yY2VDb2xsaWRlPXAsdC5mb3JjZUxpbms9bSx0LmZvcmNlTWFueUJvZHk9Yix0LmZvcmNlU2ltdWxhdGlvbj15LHQuZm9yY2VYPXgsdC5mb3JjZVk9XyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0seyJkMy1jb2xsZWN0aW9uIjoxMTMsImQzLWRpc3BhdGNoIjoxMTUsImQzLXF1YWR0cmVlIjoxMTgsImQzLXRpbWVyIjoxMTl9XSwxMTc6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oaSxhKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/YShuLGUoImQzLWNvbG9yIikpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyIsImQzLWNvbG9yIl0sYSk6YShpLmQzPWkuZDN8fHt9LGkuZDMpfSh0aGlzLGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlLHIsbixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpyKygxKzMqdCszKmEtMypvKSpuK28qaSkvNn1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0K3IqZX19ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHQ9TWF0aC5wb3codCxyKSxlPU1hdGgucG93KGUsciktdCxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCtuKmUscil9fWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/bih0LHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6Uyhpc05hTih0KT9lOnQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIDE9PSh0PSt0KT9zOmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9pKGUscix0KTpTKGlzTmFOKGUpP3I6ZSl9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/bih0LHIpOlMoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixpLGE9ci5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSk7Zm9yKG49MDtuPGE7KytuKWk9ZS5yZ2IocltuXSksb1tuXT1pLnJ8fDAsc1tuXT1pLmd8fDAsbFtuXT1pLmJ8fDA7cmV0dXJuIG89dChvKSxzPXQocyksbD10KGwpLGkub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBpLnI9byh0KSxpLmc9cyh0KSxpLmI9bCh0KSxpKyIifX19ZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fWZ1bmN0aW9uIGgodCl7cmV0dXJuIm5vbmUiPT09dD9VOihffHwoXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxNPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxfLnN0eWxlLnRyYW5zZm9ybT10LHQ9TS5nZXRDb21wdXRlZFN0eWxlKHcuYXBwZW5kQ2hpbGQoXyksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksdy5yZW1vdmVDaGlsZChfKSx0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxWKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbnVsbD09dD9VOihrfHwoaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxrLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1rLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyh0PXQubWF0cml4LFYodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTpVKX1mdW5jdGlvbiBkKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifWZ1bmN0aW9uIGEodCxuLGksYSxvLHMpe2lmKHQhPT1pfHxuIT09YSl7dmFyIGw9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxyKTtzLnB1c2goe2k6bC00LHg6RCh0LGkpfSx7aTpsLTIseDpEKG4sYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goInRyYW5zbGF0ZSgiK2krZSthK3IpfWZ1bmN0aW9uIG8odCxlLHIsYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpyLnB1c2goaShyKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6RCh0LGUpfSkpOmUmJnIucHVzaChpKHIpKyJyb3RhdGUoIitlK24pfWZ1bmN0aW9uIHModCxlLHIsYSl7dCE9PWU/YS5wdXNoKHtpOnIucHVzaChpKHIpKyJza2V3WCgiLG51bGwsbiktMix4OkQodCxlKX0pOmUmJnIucHVzaChpKHIpKyJza2V3WCgiK2Urbil9ZnVuY3Rpb24gbCh0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OkQodCxyKX0se2k6cy0yLHg6RChlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpKyJzY2FsZSgiK3IrIiwiK24rIikiKX1yZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1bXSxpPVtdO3JldHVybiBlPXQoZSkscj10KHIpLGEoZS50cmFuc2xhdGVYLGUudHJhbnNsYXRlWSxyLnRyYW5zbGF0ZVgsci50cmFuc2xhdGVZLG4saSksbyhlLnJvdGF0ZSxyLnJvdGF0ZSxuLGkpLHMoZS5za2V3WCxyLnNrZXdYLG4saSksbChlLnNjYWxlWCxlLnNjYWxlWSxyLnNjYWxlWCxyLnNjYWxlWSxuLGkpLGU9cj1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLGE9aS5sZW5ndGg7KytyPGE7KW5bKGU9aVtyXSkuaV09ZS54KHQpO3JldHVybiBuLmpvaW4oIiIpfX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBtKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfWZ1bmN0aW9uIHYodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhzbChyKSkuaCwobj1lLmhzbChuKSkuaCksYT1zKHIucyxuLnMpLG89cyhyLmwsbi5sKSxsPXMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLnM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9bCh0KSxyKyIifX19ZnVuY3Rpb24geSh0LHIpe3ZhciBuPXMoKHQ9ZS5sYWIodCkpLmwsKHI9ZS5sYWIocikpLmwpLGk9cyh0LmEsci5hKSxhPXModC5iLHIuYiksbz1zKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19ZnVuY3Rpb24gYih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaGNsKHIpKS5oLChuPWUuaGNsKG4pKS5oKSxhPXMoci5jLG4uYyksbz1zKHIubCxuLmwpLGw9cyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIuYz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1sKHQpLHIrIiJ9fX1mdW5jdGlvbiB4KHQpe3JldHVybiBmdW5jdGlvbiByKG4pe2Z1bmN0aW9uIGkocixpKXt2YXIgYT10KChyPWUuY3ViZWhlbGl4KHIpKS5oLChpPWUuY3ViZWhlbGl4KGkpKS5oKSxvPXMoci5zLGkucyksbD1zKHIubCxpLmwpLHU9cyhyLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz1vKHQpLHIubD1sKE1hdGgucG93KHQsbikpLHIub3BhY2l0eT11KHQpLHIrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9cixpfSgxKX12YXIgXyx3LE0sayxBPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxhPXRbaV0sbz10W2krMV0scz1pPjA/dFtpLTFdOjIqYS1vLGw9aTxlLTE/dFtpKzJdOjIqby1hO3JldHVybiByKChuLWkvZSkqZSxzLGEsbyxsKX19LFQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxhPXRbKGkrZS0xKSVlXSxvPXRbaSVlXSxzPXRbKGkrMSklZV0sbD10WyhpKzIpJWVdO3JldHVybiByKChuLWkvZSkqZSxhLG8scyxsKX19LFM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxFPWZ1bmN0aW9uIHQocil7ZnVuY3Rpb24gbih0LHIpe3ZhciBuPWkoKHQ9ZS5yZ2IodCkpLnIsKHI9ZS5yZ2IocikpLnIpLGE9aSh0Lmcsci5nKSxvPWkodC5iLHIuYiksbD1zKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPW4oZSksdC5nPWEoZSksdC5iPW8oZSksdC5vcGFjaXR5PWwoZSksdCsiIn19dmFyIGk9byhyKTtyZXR1cm4gbi5nYW1tYT10LG59KDEpLEw9bChBKSxDPWwoVCksej1mdW5jdGlvbih0LGUpe3ZhciByLG49ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihuLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihyPTA7cjxpOysrcilhW3JdPWoodFtyXSxlW3JdKTtmb3IoO3I8bjsrK3Ipb1tyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8aTsrK3Ipb1tyXT1hW3JdKHQpO3JldHVybiBvfX0sST1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiB0PSt0LGUtPXQsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0K2Uqbikscn19LEQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlLT10LGZ1bmN0aW9uKHIpe3JldHVybiB0K2Uqcn19LFA9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXt9LGk9e307bnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KTtmb3IociBpbiBlKXIgaW4gdD9uW3JdPWoodFtyXSxlW3JdKTppW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyIGluIG4paVtyXT1uW3JdKHQpO3JldHVybiBpfX0sTz0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csUj1uZXcgUmVnRXhwKE8uc291cmNlLCJnIiksRj1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU8ubGFzdEluZGV4PVIubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhyPU8uZXhlYyh0KSkmJihuPVIuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OkQocixuKX0pKSxhPVIubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9sWzBdP2MobFswXS54KTp1KGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTA7bjxlOysrbilzWyhyPWxbbl0pLmldPXIueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfSxqPWZ1bmN0aW9uKHQscil7dmFyIG4saT10eXBlb2YgcjtyZXR1cm4gbnVsbD09cnx8ImJvb2xlYW4iPT09aT9TKHIpOigibnVtYmVyIj09PWk/RDoic3RyaW5nIj09PWk/KG49ZS5jb2xvcihyKSk/KHI9bixFKTpGOnIgaW5zdGFuY2VvZiBlLmNvbG9yP0U6ciBpbnN0YW5jZW9mIERhdGU/STpBcnJheS5pc0FycmF5KHIpP3o6ImZ1bmN0aW9uIiE9dHlwZW9mIHIudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHIudG9TdHJpbmd8fGlzTmFOKHIpP1A6RCkodCxyKX0sTj1mdW5jdGlvbih0LGUpe3JldHVybiB0PSt0LGUtPXQsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX0sQj0xODAvTWF0aC5QSSxVPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LFY9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbDtyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwobD10KnIrZSpuKSYmKHItPXQqbCxuLT1lKmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksdCpuPGUqciYmKHQ9LXQsZT0tZSxsPS1sLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqQixza2V3WDpNYXRoLmF0YW4obCkqQixzY2FsZVg6byxzY2FsZVk6c319LEg9ZChoLCJweCwgIiwicHgpIiwiZGVnKSIpLHE9ZChmLCIsICIsIikiLCIpIiksRz1NYXRoLlNRUlQyLFk9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sdT1lWzJdLGM9cy1pLGg9bC1hLGY9YypjK2gqaDtpZihmPDFlLTEyKW49TWF0aC5sb2codS9vKS9HLHI9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCpjLGErdCpoLG8qTWF0aC5leHAoRyp0Km4pXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZiksZz0odSp1LW8qbys0KmYpLygyKm8qMipkKSx5PSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLGI9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKSx4PU1hdGgubG9nKE1hdGguc3FydCh5KnkrMSkteSk7bj0oeC1iKS9HLHI9ZnVuY3Rpb24odCl7dmFyIGU9dCpuLHI9cChiKSxzPW8vKDIqZCkqKHIqdihHKmUrYiktbShiKSk7cmV0dXJuW2krcypjLGErcypoLG8qci9wKEcqZStiKV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LFg9ZyhhKSxXPWcocyksWj1iKGEpLEo9YihzKSxLPXgoYSksUT14KHMpLCQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn07dC5pbnRlcnBvbGF0ZT1qLHQuaW50ZXJwb2xhdGVBcnJheT16LHQuaW50ZXJwb2xhdGVCYXNpcz1BLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1ULHQuaW50ZXJwb2xhdGVEYXRlPUksdC5pbnRlcnBvbGF0ZU51bWJlcj1ELHQuaW50ZXJwb2xhdGVPYmplY3Q9UCx0LmludGVycG9sYXRlUm91bmQ9Tix0LmludGVycG9sYXRlU3RyaW5nPUYsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1ILHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9cSx0LmludGVycG9sYXRlWm9vbT1ZLHQuaW50ZXJwb2xhdGVSZ2I9RSx0LmludGVycG9sYXRlUmdiQmFzaXM9TCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9Qyx0LmludGVycG9sYXRlSHNsPVgsdC5pbnRlcnBvbGF0ZUhzbExvbmc9Vyx0LmludGVycG9sYXRlTGFiPXksdC5pbnRlcnBvbGF0ZUhjbD1aLHQuaW50ZXJwb2xhdGVIY2xMb25nPUosdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1LLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPVEsdC5xdWFudGl6ZT0kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7ImQzLWNvbG9yIjoxMTR9XSwxMTg6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/aShuKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiXSxpKTppKGUuZDM9ZS5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZD10Ll9yb290LHA9e2RhdGE6bn0sbT10Ll94MCx2PXQuX3kwLGc9dC5feDEseT10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKHU9ZT49KGE9KG0rZykvMikpP209YTpnPWEsKGM9cj49KG89KHYreSkvMikpP3Y9bzp5PW8saT1kLCEoZD1kW2g9Yzw8MXx1XSkpcmV0dXJuIGlbaF09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksbD0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIHAubmV4dD1kLGk/aVtoXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwodT1lPj0oYT0obStnKS8yKSk/bT1hOmc9YSwoYz1yPj0obz0odit5KS8yKSk/dj1vOnk9b313aGlsZSgoaD1jPDwxfHUpPT0oZj0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2ZdPWQsaVtoXT1wLHR9ZnVuY3Rpb24gcih0KXt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLHU9MS8wLGM9MS8wLGg9LTEvMCxmPS0xLzA7Zm9yKG49MDtuPG87KytuKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHI9dFtuXSkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCxyKSl8fChzW25dPWksbFtuXT1hLGk8dSYmKHU9aSksaT5oJiYoaD1pKSxhPGMmJihjPWEpLGE+ZiYmKGY9YSkpO2ZvcihoPHUmJih1PXRoaXMuX3gwLGg9dGhpcy5feDEpLGY8YyYmKGM9dGhpcy5feTAsZj10aGlzLl95MSksdGhpcy5jb3Zlcih1LGMpLmNvdmVyKGgsZiksbj0wO248bzsrK24pZSh0aGlzLHNbbl0sbFtuXSx0W25dKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBpKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49bmV3IHMobnVsbD09ZT9pOmUsbnVsbD09cj9hOnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9uOm4uYWRkQWxsKHQpfWZ1bmN0aW9uIHModCxlLHIsbixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LHI9ZTt0PXQubmV4dDspcj1yLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgdT1mdW5jdGlvbih0KXt2YXIgcj0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGUodGhpcy5jb3ZlcihyLG4pLHIsbix0KX0sYz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsYT10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IodCkpKzEsYT0obj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7aWYoIShyPnR8fHQ+aXx8bj5lfHxlPmEpKXJldHVybiB0aGlzO3ZhciBvLHMsbD1pLXIsdT10aGlzLl9yb290O3N3aXRjaChzPShlPChuK2EpLzIpPDwxfHQ8KHIraSkvMil7Y2FzZSAwOmRve289bmV3IEFycmF5KDQpLG9bc109dSx1PW99d2hpbGUobCo9MixpPXIrbCxhPW4rbCx0Pml8fGU+YSk7YnJlYWs7Y2FzZSAxOmRve289bmV3IEFycmF5KDQpLG9bc109dSx1PW99d2hpbGUobCo9MixyPWktbCxhPW4rbCxyPnR8fGU+YSk7YnJlYWs7Y2FzZSAyOmRve289bmV3IEFycmF5KDQpLG9bc109dSx1PW99d2hpbGUobCo9MixpPXIrbCxuPWEtbCx0Pml8fG4+ZSk7YnJlYWs7Y2FzZSAzOmRve289bmV3IEFycmF5KDQpLG9bc109dSx1PW99d2hpbGUobCo9MixyPWktbCxuPWEtbCxyPnR8fG4+ZSl9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PXUpfXJldHVybiB0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LGg9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sZj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sZD1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX0scD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLHUsYz10aGlzLl94MCxoPXRoaXMuX3kwLGY9dGhpcy5feDEscD10aGlzLl95MSxtPVtdLHY9dGhpcy5fcm9vdDtmb3IodiYmbS5wdXNoKG5ldyBkKHYsYyxoLGYscCkpLG51bGw9PXI/cj0xLzA6KGM9dC1yLGg9ZS1yLGY9dCtyLHA9ZStyLHIqPXIpO2w9bS5wb3AoKTspaWYoISghKHY9bC5ub2RlKXx8KGk9bC54MCk+Znx8KGE9bC55MCk+cHx8KG89bC54MSk8Y3x8KHM9bC55MSk8aCkpaWYodi5sZW5ndGgpe3ZhciBnPShpK28pLzIseT0oYStzKS8yO20ucHVzaChuZXcgZCh2WzNdLGcseSxvLHMpLG5ldyBkKHZbMl0saSx5LGcscyksbmV3IGQodlsxXSxnLGEsbyx5KSxuZXcgZCh2WzBdLGksYSxnLHkpKSwodT0oZT49eSk8PDF8dD49ZykmJihsPW1bbS5sZW5ndGgtMV0sbVttLmxlbmd0aC0xXT1tW20ubGVuZ3RoLTEtdV0sbVttLmxlbmd0aC0xLXVdPWwpfWVsc2V7dmFyIGI9dC0rdGhpcy5feC5jYWxsKG51bGwsdi5kYXRhKSx4PWUtK3RoaXMuX3kuY2FsbChudWxsLHYuZGF0YSksXz1iKmIreCp4O2lmKF88cil7dmFyIHc9TWF0aC5zcXJ0KHI9Xyk7Yz10LXcsaD1lLXcsZj10K3cscD1lK3csbj12LmRhdGF9fXJldHVybiBufSxtPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLHIsbixpLGEsbyxzLGwsdSxjLGgsZixkPXRoaXMuX3Jvb3QscD10aGlzLl94MCxtPXRoaXMuX3kwLHY9dGhpcy5feDEsZz10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKCh1PWE+PShzPShwK3YpLzIpKT9wPXM6dj1zLChjPW8+PShsPShtK2cpLzIpKT9tPWw6Zz1sLGU9ZCwhKGQ9ZFtoPWM8PDF8dV0pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihyPWUsZj1oKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKG49ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LG4/KGk/bi5uZXh0PWk6ZGVsZXRlIG4ubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwoZD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmZD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIWQubGVuZ3RoJiYocj9yW2ZdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSx2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGc9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSksdH0seT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz1bXSxsPXRoaXMuX3Jvb3Q7Zm9yKGwmJnMucHVzaChuZXcgZChsLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdChsPWUubm9kZSxuPWUueDAsaT1lLnkwLGE9ZS54MSxvPWUueTEpJiZsLmxlbmd0aCl7dmFyIHU9KG4rYSkvMixjPShpK28pLzI7KHI9bFszXSkmJnMucHVzaChuZXcgZChyLHUsYyxhLG8pKSwocj1sWzJdKSYmcy5wdXNoKG5ldyBkKHIsbixjLHUsbykpLChyPWxbMV0pJiZzLnB1c2gobmV3IGQocix1LGksYSxjKSksKHI9bFswXSkmJnMucHVzaChuZXcgZChyLG4saSx1LGMpKX1yZXR1cm4gdGhpc30sYj1mdW5jdGlvbih0KXt2YXIgZSxyPVtdLG49W107Zm9yKHRoaXMuX3Jvb3QmJnIucHVzaChuZXcgZCh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1yLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgYSxvPWUueDAscz1lLnkwLGw9ZS54MSx1PWUueTEsYz0obytsKS8yLGg9KHMrdSkvMjsoYT1pWzBdKSYmci5wdXNoKG5ldyBkKGEsbyxzLGMsaCkpLChhPWlbMV0pJiZyLnB1c2gobmV3IGQoYSxjLHMsbCxoKSksKGE9aVsyXSkmJnIucHVzaChuZXcgZChhLG8saCxjLHUpKSwoYT1pWzNdKSYmci5wdXNoKG5ldyBkKGEsYyxoLGwsdSkpfW4ucHVzaChlKX1mb3IoO2U9bi5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LHg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxfPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sdz1vLnByb3RvdHlwZT1zLnByb3RvdHlwZTt3LmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IHModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PWwobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1sKGUpKTtyZXR1cm4gcn0sdy5hZGQ9dSx3LmFkZEFsbD1yLHcuY292ZXI9Yyx3LmRhdGE9aCx3LmV4dGVudD1mLHcuZmluZD1wLHcucmVtb3ZlPW0sdy5yZW1vdmVBbGw9bix3LnJvb3Q9dix3LnNpemU9Zyx3LnZpc2l0PXksdy52aXNpdEFmdGVyPWIsdy54PXgsdy55PV8sdC5xdWFkdHJlZT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7fV0sMTE5OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2kobik6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoWyJleHBvcnRzIl0saSk6aShlLmQzPWUuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe3JldHVybiBnfHwoeChyKSxnPWIubm93KCkreSl9ZnVuY3Rpb24gcigpe2c9MH1mdW5jdGlvbiBuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgaT1uZXcgbjtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxyKSxpfWZ1bmN0aW9uIGEoKXtlKCksKytmO2Zvcih2YXIgdCxyPWM7cjspKHQ9Zy1yLl90aW1lKT49MCYmci5fY2FsbC5jYWxsKG51bGwsdCkscj1yLl9uZXh0Oy0tZn1mdW5jdGlvbiBvKCl7Zz0odj1iLm5vdygpKSt5LGY9ZD0wO3RyeXthKCl9ZmluYWxseXtmPTAsbCgpLGc9MH19ZnVuY3Rpb24gcygpe3ZhciB0PWIubm93KCksZT10LXY7ZT5tJiYoeS09ZSx2PXQpfWZ1bmN0aW9uIGwoKXtmb3IodmFyIHQsZSxyPWMsbj0xLzA7cjspci5fY2FsbD8obj5yLl90aW1lJiYobj1yLl90aW1lKSx0PXIscj1yLl9uZXh0KTooZT1yLl9uZXh0LHIuX25leHQ9bnVsbCxyPXQ/dC5fbmV4dD1lOmM9ZSk7aD10LHUobil9ZnVuY3Rpb24gdSh0KXtpZighZil7ZCYmKGQ9Y2xlYXJUaW1lb3V0KGQpKTt2YXIgZT10LWc7ZT4yND8odDwxLzAmJihkPXNldFRpbWVvdXQobyxlKSkscCYmKHA9Y2xlYXJJbnRlcnZhbChwKSkpOihwfHwodj1nLHA9c2V0SW50ZXJ2YWwocyxtKSksZj0xLHgobykpfX12YXIgYyxoLGY9MCxkPTAscD0wLG09MWUzLHY9MCxnPTAseT0wLGI9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUseD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3JlcXVlc3RBbmltYXRpb25GcmFtZTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtuLnByb3RvdHlwZT1pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bixyZXN0YXJ0OmZ1bmN0aW9uKHQscixuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/ZSgpOituKSsobnVsbD09cj8wOityKSx0aGlzLl9uZXh0fHxoPT09dGhpc3x8KGg/aC5fbmV4dD10aGlzOmM9dGhpcyxoPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sdSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx1KCkpfX07dmFyIF89ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW5ldyBuO3JldHVybiBlPW51bGw9PWU/MDorZSxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksdChyK2UpfSxlLHIpLGl9LHc9ZnVuY3Rpb24odCxyLGkpe3ZhciBhPW5ldyBuLG89cjtyZXR1cm4gbnVsbD09cj8oYS5yZXN0YXJ0KHQscixpKSxhKToocj0rcixpPW51bGw9PWk/ZSgpOitpLGEucmVzdGFydChmdW5jdGlvbiBlKG4pe24rPW8sYS5yZXN0YXJ0KGUsbys9cixpKSx0KG4pfSxyLGkpLGEpfTt0Lm5vdz1lLHQudGltZXI9aSx0LnRpbWVyRmx1c2g9YSx0LnRpbWVvdXQ9Xyx0LmludGVydmFsPXcsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSwxMjA6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50fHx0LmRvY3VtZW50fHx0KS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmKHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3KX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBvKHQpe3JldHVybiFpc05hTih0KX1mdW5jdGlvbiBzKHQpe3JldHVybntsZWZ0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKT4wP2k9YTpuPWErMX1yZXR1cm4gbn19fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQubGVuZ3RofWZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTE7dCplJTE7KWUqPTEwO3JldHVybiBlfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHIgaW4gZSlPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUscix7dmFsdWU6ZVtyXSxlbnVtZXJhYmxlOiExfSl9ZnVuY3Rpb24gaCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQrPSIiKT09PV9vfHx0WzBdPT09d28/d28rdDp0fWZ1bmN0aW9uIGQodCl7cmV0dXJuKHQrPSIiKVswXT09PXdvP3Quc2xpY2UoMSk6dH1mdW5jdGlvbiBwKHQpe3JldHVybiBmKHQpaW4gdGhpcy5ffWZ1bmN0aW9uIG0odCl7cmV0dXJuKHQ9Zih0KSlpbiB0aGlzLl8mJmRlbGV0ZSB0aGlzLl9bdF19ZnVuY3Rpb24gdigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKGQoZSkpO3JldHVybiB0fWZ1bmN0aW9uIGcoKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzLl8pKyt0O3JldHVybiB0fWZ1bmN0aW9uIHkoKXtmb3IodmFyIHQgaW4gdGhpcy5fKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGIoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0fWZ1bmN0aW9uIF8odCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBuPT09ZT90Om59fWZ1bmN0aW9uIHcodCxlKXtpZihlIGluIHQpcmV0dXJuIGU7ZT1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7Zm9yKHZhciByPTAsbj1Nby5sZW5ndGg7cjxuOysrcil7dmFyIGk9TW9bcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fWZ1bmN0aW9uIE0oKXt9ZnVuY3Rpb24gaygpe31mdW5jdGlvbiBBKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGUsbj1yLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspKGU9bltpXS5vbikmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0fXZhciByPVtdLG49bmV3IGg7cmV0dXJuIGUub249ZnVuY3Rpb24oZSxpKXt2YXIgYSxvPW4uZ2V0KGUpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/byYmby5vbjoobyYmKG8ub249bnVsbCxyPXIuc2xpY2UoMCxhPXIuaW5kZXhPZihvKSkuY29uY2F0KHIuc2xpY2UoYSsxKSksbi5yZW1vdmUoZSkpLGkmJnIucHVzaChuLnNldChlLHtvbjppfSkpLHQpfSxlfWZ1bmN0aW9uIFQoKXt1by5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIFMoKXtmb3IodmFyIHQsZT11by5ldmVudDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiBFKHQpe2Zvcih2YXIgZT1uZXcgayxyPTAsbj1hcmd1bWVudHMubGVuZ3RoOysrcjxuOyllW2FyZ3VtZW50c1tyXV09QShlKTtyZXR1cm4gZS5vZj1mdW5jdGlvbihyLG4pe3JldHVybiBmdW5jdGlvbihpKXt0cnl7dmFyIGE9aS5zb3VyY2VFdmVudD11by5ldmVudDtpLnRhcmdldD10LHVvLmV2ZW50PWksZVtpLnR5cGVdLmFwcGx5KHIsbil9ZmluYWxseXt1by5ldmVudD1hfX19LGV9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gQW8odCxMbyksdH1mdW5jdGlvbiBDKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gVG8odCx0aGlzKX19ZnVuY3Rpb24geih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIFNvKHQsdGhpcyl9fWZ1bmN0aW9uIEkodCxlKXtmdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9ZnVuY3Rpb24gbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX1mdW5jdGlvbiBpKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX1mdW5jdGlvbiBhKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9ZnVuY3Rpb24gbygpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxyKX1mdW5jdGlvbiBzKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscil9cmV0dXJuIHQ9dW8ubnMucXVhbGlmeSh0KSxudWxsPT1lP3QubG9jYWw/bjpyOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3QubG9jYWw/czpvOnQubG9jYWw/YTppfWZ1bmN0aW9uIEQodCl7cmV0dXJuIHQudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrdW8ucmVxdW90ZSh0KSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiBPKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gUih0LGUpe2Z1bmN0aW9uIHIoKXtmb3IodmFyIHI9LTE7KytyPGk7KXRbcl0odGhpcyxlKX1mdW5jdGlvbiBuKCl7Zm9yKHZhciByPS0xLG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytyPGk7KXRbcl0odGhpcyxuKX10PU8odCkubWFwKEYpO3ZhciBpPXQubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP246cn1mdW5jdGlvbiBGKHQpe3ZhciBlPVAodCk7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoaT1yLmNsYXNzTGlzdClyZXR1cm4gbj9pLmFkZCh0KTppLnJlbW92ZSh0KTt2YXIgaT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoaSl8fHIuc2V0QXR0cmlidXRlKCJjbGFzcyIsRChpKyIgIit0KSkpOnIuc2V0QXR0cmlidXRlKCJjbGFzcyIsRChpLnJlcGxhY2UoZSwiICIpKSl9fWZ1bmN0aW9uIGoodCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfWZ1bmN0aW9uIGkoKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxyKX1mdW5jdGlvbiBhKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfXJldHVybiBudWxsPT1lP246ImZ1bmN0aW9uIj09dHlwZW9mIGU/YTppfWZ1bmN0aW9uIE4odCxlKXtmdW5jdGlvbiByKCl7ZGVsZXRlIHRoaXNbdF19ZnVuY3Rpb24gbigpe3RoaXNbdF09ZX1mdW5jdGlvbiBpKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9cmV0dXJuIG51bGw9PWU/cjoiZnVuY3Rpb24iPT10eXBlb2YgZT9pOm59ZnVuY3Rpb24gQih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1DbyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Q28/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKHIsdCl9ZnVuY3Rpb24gcigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDoodD11by5ucy5xdWFsaWZ5KHQpKS5sb2NhbD9yOmV9ZnVuY3Rpb24gVSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIFYodCl7cmV0dXJue19fZGF0YV9fOnR9fWZ1bmN0aW9uIEgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEVvKHRoaXMsdCl9fWZ1bmN0aW9uIHEodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGh8fCh0PWkpLGZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJnI/dChlLl9fZGF0YV9fLHIuX19kYXRhX18pOiFlLSFyfX1mdW5jdGlvbiBHKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSxhPXRbcl0sbz0wLHM9YS5sZW5ndGg7bzxzO28rKykoaT1hW29dKSYmZShpLG8scik7cmV0dXJuIHR9ZnVuY3Rpb24gWSh0KXtyZXR1cm4gQW8odCxJbyksdH1mdW5jdGlvbiBYKHQpe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKG4saSxhKXt2YXIgbyxzPXRbYV0udXBkYXRlLGw9cy5sZW5ndGg7Zm9yKGEhPXImJihyPWEsZT0wKSxpPj1lJiYoZT1pKzEpOyEobz1zW2VdKSYmKytlPGw7KTtyZXR1cm4gb319ZnVuY3Rpb24gVyh0LGUscil7ZnVuY3Rpb24gbigpe3ZhciBlPXRoaXNbb107ZSYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsZS4kKSxkZWxldGUgdGhpc1tvXSl9ZnVuY3Rpb24gaSgpe3ZhciBpPWwoZSxobyhhcmd1bWVudHMpKTtuLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKHQsdGhpc1tvXT1pLGkuJD1yKSxpLl89ZX1mdW5jdGlvbiBhKCl7dmFyIGUscj1uZXcgUmVnRXhwKCJeX19vbihbXi5dKykiK3VvLnJlcXVvdGUodCkrIiQiKTtmb3IodmFyIG4gaW4gdGhpcylpZihlPW4ubWF0Y2gocikpe3ZhciBpPXRoaXNbbl07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGVbMV0saSxpLiQpLGRlbGV0ZSB0aGlzW25dfX12YXIgbz0iX19vbiIrdCxzPXQuaW5kZXhPZigiLiIpLGw9WjtzPjAmJih0PXQuc2xpY2UoMCxzKSk7dmFyIHU9RG8uZ2V0KHQpO3JldHVybiB1JiYodD11LGw9Sikscz9lP2k6bjplP006YX1mdW5jdGlvbiBaKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXVvLmV2ZW50O3VvLmV2ZW50PXIsZVswXT10aGlzLl9fZGF0YV9fO3RyeXt0LmFwcGx5KHRoaXMsZSl9ZmluYWxseXt1by5ldmVudD1ufX19ZnVuY3Rpb24gSih0LGUpe3ZhciByPVoodCxlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQucmVsYXRlZFRhcmdldDtuJiYobj09PWV8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSl8fHIuY2FsbChlLHQpfX1mdW5jdGlvbiBLKHQpe3ZhciByPSIuZHJhZ3N1cHByZXNzLSIrICsrT28saT0iY2xpY2siK3IsYT11by5zZWxlY3Qobih0KSkub24oInRvdWNobW92ZSIrcixUKS5vbigiZHJhZ3N0YXJ0IityLFQpLm9uKCJzZWxlY3RzdGFydCIrcixUKTtpZihudWxsPT1QbyYmKFBvPSEoIm9uc2VsZWN0c3RhcnQiaW4gdCkmJncodC5zdHlsZSwidXNlclNlbGVjdCIpKSxQbyl7dmFyIG89ZSh0KS5zdHlsZSxzPW9bUG9dO29bUG9dPSJub25lIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoYS5vbihyLG51bGwpLFBvJiYob1tQb109cyksdCl7dmFyIGU9ZnVuY3Rpb24oKXthLm9uKGksbnVsbCl9O2Eub24oaSxmdW5jdGlvbigpe1QoKSxlKCl9LCEwKSxzZXRUaW1lb3V0KGUsMCl9fX1mdW5jdGlvbiBRKHQsZSl7ZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIHI9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIGk9ci5jcmVhdGVTVkdQb2ludCgpO2lmKFJvPDApe3ZhciBhPW4odCk7aWYoYS5zY3JvbGxYfHxhLnNjcm9sbFkpe3I9dW8uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKTt2YXIgbz1yWzBdWzBdLmdldFNjcmVlbkNUTSgpO1JvPSEoby5mfHxvLmUpLHIucmVtb3ZlKCl9fXJldHVybiBSbz8oaS54PWUucGFnZVgsaS55PWUucGFnZVkpOihpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFkpLGk9aS5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtpLngsaS55XX12YXIgcz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtcy5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktcy50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uICQoKXtyZXR1cm4gdW8uZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcn1mdW5jdGlvbiB0dCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gZXQodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIHJ0KHQpe3JldHVybiB0PjE/MDp0PC0xP05vOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBudCh0KXtyZXR1cm4gdD4xP1ZvOnQ8LTE/LVZvOk1hdGguYXNpbih0KX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn1mdW5jdGlvbiBhdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBvdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAoMip0KSktMSkvKHQrMSl9ZnVuY3Rpb24gc3QodCl7cmV0dXJuKHQ9TWF0aC5zaW4odC8yKSkqdH1mdW5jdGlvbiBsdCgpe31mdW5jdGlvbiB1dCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB1dD8odGhpcy5oPSt0LHRoaXMucz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgdXQ/bmV3IHV0KHQuaCx0LnMsdC5sKTpNdCgiIit0LGt0LHV0KTpuZXcgdXQodCxlLHIpfWZ1bmN0aW9uIGN0KHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP2ErKG8tYSkqdC82MDp0PDE4MD9vOnQ8MjQwP2ErKG8tYSkqKDI0MC10KS82MDphfWZ1bmN0aW9uIGkodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Km4odCkpfXZhciBhLG87cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKT8wOmU8MD8wOmU+MT8xOmUscj1yPDA/MDpyPjE/MTpyLG89cjw9LjU/ciooMStlKTpyK2UtciplLGE9MipyLW8sbmV3IGJ0KGkodCsxMjApLGkodCksaSh0LTEyMCkpfWZ1bmN0aW9uIGh0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGh0Pyh0aGlzLmg9K3QsdGhpcy5jPStlLHZvaWQodGhpcy5sPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBodD9uZXcgaHQodC5oLHQuYyx0LmwpOnQgaW5zdGFuY2VvZiBkdD9tdCh0LmwsdC5hLHQuYik6bXQoKHQ9QXQoKHQ9dW8ucmdiKHQpKS5yLHQuZyx0LmIpKS5sLHQuYSx0LmIpOm5ldyBodCh0LGUscil9ZnVuY3Rpb24gZnQodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBkdChyLE1hdGguY29zKHQqPUhvKSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIGR0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGR0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBkdD9uZXcgZHQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBodD9mdCh0LmgsdC5jLHQubCk6QXQoKHQ9YnQodCkpLnIsdC5nLHQuYik6bmV3IGR0KHQsZSxyKX1mdW5jdGlvbiBwdCh0LGUscil7dmFyIG49KHQrMTYpLzExNixpPW4rZS81MDAsYT1uLXIvMjAwO3JldHVybiBpPXZ0KGkpKlFvLG49dnQobikqJG8sYT12dChhKSp0cyxuZXcgYnQoeXQoMy4yNDA0NTQyKmktMS41MzcxMzg1Km4tLjQ5ODUzMTQqYSkseXQoLS45NjkyNjYqaSsxLjg3NjAxMDgqbisuMDQxNTU2KmEpLHl0KC4wNTU2NDM0KmktLjIwNDAyNTkqbisxLjA1NzIyNTIqYSkpfWZ1bmN0aW9uIG10KHQsZSxyKXtyZXR1cm4gdD4wP25ldyBodChNYXRoLmF0YW4yKHIsZSkqcW8sTWF0aC5zcXJ0KGUqZStyKnIpLHQpOm5ldyBodChOYU4sTmFOLHQpfWZ1bmN0aW9uIHZ0KHQpe3JldHVybiB0Pi4yMDY4OTMwMzQ/dCp0KnQ6KHQtNC8yOSkvNy43ODcwMzd9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHQ+LjAwODg1Nj9NYXRoLnBvdyh0LDEvMyk6Ny43ODcwMzcqdCs0LzI5fWZ1bmN0aW9uIHl0KHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSoodDw9LjAwMzA0PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSkpfWZ1bmN0aW9uIGJ0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJ0Pyh0aGlzLnI9fn50LHRoaXMuZz1+fmUsdm9pZCh0aGlzLmI9fn5yKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBidD9uZXcgYnQodC5yLHQuZyx0LmIpOk10KCIiK3QsYnQsY3QpOm5ldyBidCh0LGUscil9ZnVuY3Rpb24geHQodCl7cmV0dXJuIG5ldyBidCh0Pj4xNix0Pj44JjI1NSwyNTUmdCl9ZnVuY3Rpb24gX3QodCl7cmV0dXJuIHh0KHQpKyIifWZ1bmN0aW9uIHd0KHQpe3JldHVybiB0PDE2PyIwIitNYXRoLm1heCgwLHQpLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUsdCkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE10KHQsZSxyKXt2YXIgbixpLGEsbz0wLHM9MCxsPTA7aWYobj0vKFthLXpdKylcKCguKilcKS8uZXhlYyh0PXQudG9Mb3dlckNhc2UoKSkpc3dpdGNoKGk9blsyXS5zcGxpdCgiLCIpLG5bMV0pe2Nhc2UiaHNsIjpyZXR1cm4gcihwYXJzZUZsb2F0KGlbMF0pLHBhcnNlRmxvYXQoaVsxXSkvMTAwLHBhcnNlRmxvYXQoaVsyXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIGUoU3QoaVswXSksU3QoaVsxXSksU3QoaVsyXSkpfXJldHVybihhPW5zLmdldCh0KSk/ZShhLnIsYS5nLGEuYik6KG51bGw9PXR8fCIjIiE9PXQuY2hhckF0KDApfHxpc05hTihhPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpKXx8KDQ9PT10Lmxlbmd0aD8obz0oMzg0MCZhKT4+NCxvfD1vPj40LHM9MjQwJmEsc3w9cz4+NCxsPTE1JmEsbHw9bDw8NCk6Nz09PXQubGVuZ3RoJiYobz0oMTY3MTE2ODAmYSk+PjE2LHM9KDY1MjgwJmEpPj44LGw9MjU1JmEpKSxlKG8scyxsKSl9ZnVuY3Rpb24ga3QodCxlLHIpe3ZhciBuLGksYT1NYXRoLm1pbih0Lz0yNTUsZS89MjU1LHIvPTI1NSksbz1NYXRoLm1heCh0LGUscikscz1vLWEsbD0obythKS8yO3JldHVybiBzPyhpPWw8LjU/cy8obythKTpzLygyLW8tYSksbj10PT1vPyhlLXIpL3MrKGU8cj82OjApOmU9PW8/KHItdCkvcysyOih0LWUpL3MrNCxuKj02MCk6KG49TmFOLGk9bD4wJiZsPDE/MDpuKSxuZXcgdXQobixpLGwpfWZ1bmN0aW9uIEF0KHQsZSxyKXt0PVR0KHQpLGU9VHQoZSkscj1UdChyKTt2YXIgbj1ndCgoLjQxMjQ1NjQqdCsuMzU3NTc2MSplKy4xODA0Mzc1KnIpL1FvKSxpPWd0KCguMjEyNjcyOSp0Ky43MTUxNTIyKmUrLjA3MjE3NSpyKS8kbyk7cmV0dXJuIGR0KDExNippLTE2LDUwMCoobi1pKSwyMDAqKGktZ3QoKC4wMTkzMzM5KnQrLjExOTE5MiplKy45NTAzMDQxKnIpL3RzKSkpfWZ1bmN0aW9uIFR0KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFN0KHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIiUiPT09dC5jaGFyQXQodC5sZW5ndGgtMSk/TWF0aC5yb3VuZCgyLjU1KmUpOmV9ZnVuY3Rpb24gRXQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBMdCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxDdChlLHIsdCxuKX19ZnVuY3Rpb24gQ3QodCxlLHIsbil7ZnVuY3Rpb24gaSgpe3ZhciB0LGU9bC5zdGF0dXM7aWYoIWUmJkl0KGwpfHxlPj0yMDAmJmU8MzAwfHwzMDQ9PT1lKXt0cnl7dD1yLmNhbGwoYSxsKQp9Y2F0Y2godCl7cmV0dXJuIHZvaWQgby5lcnJvci5jYWxsKGEsdCl9by5sb2FkLmNhbGwoYSx0KX1lbHNlIG8uZXJyb3IuY2FsbChhLGwpfXZhciBhPXt9LG89dW8uZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLHM9e30sbD1uZXcgWE1MSHR0cFJlcXVlc3QsdT1udWxsO3JldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGx8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3QodCl8fChsPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBsP2wub25sb2FkPWwub25lcnJvcj1pOmwub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bC5yZWFkeVN0YXRlPjMmJmkoKX0sbC5vbnByb2dyZXNzPWZ1bmN0aW9uKHQpe3ZhciBlPXVvLmV2ZW50O3VvLmV2ZW50PXQ7dHJ5e28ucHJvZ3Jlc3MuY2FsbChhLGwpfWZpbmFsbHl7dW8uZXZlbnQ9ZX19LGEuaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP3NbdF06KG51bGw9PWU/ZGVsZXRlIHNbdF06c1t0XT1lKyIiLGEpfSxhLm1pbWVUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDp0KyIiLGEpOmV9LGEucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsYSk6dX0sYS5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gcj10LGF9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24odCl7YVt0XT1mdW5jdGlvbigpe3JldHVybiBhLnNlbmQuYXBwbHkoYSxbdF0uY29uY2F0KGhvKGFyZ3VtZW50cykpKX19KSxhLnNlbmQ9ZnVuY3Rpb24ocixuLGkpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKGk9bixuPW51bGwpLGwub3BlbihyLHQsITApLG51bGw9PWV8fCJhY2NlcHQiaW4gc3x8KHMuYWNjZXB0PWUrIiwqLyoiKSxsLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBjIGluIHMpbC5zZXRSZXF1ZXN0SGVhZGVyKGMsc1tjXSk7cmV0dXJuIG51bGwhPWUmJmwub3ZlcnJpZGVNaW1lVHlwZSYmbC5vdmVycmlkZU1pbWVUeXBlKGUpLG51bGwhPXUmJihsLnJlc3BvbnNlVHlwZT11KSxudWxsIT1pJiZhLm9uKCJlcnJvciIsaSkub24oImxvYWQiLGZ1bmN0aW9uKHQpe2kobnVsbCx0KX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGEsbCksbC5zZW5kKG51bGw9PW4/bnVsbDpuKSxhfSxhLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWJvcnQoKSxhfSx1by5yZWJpbmQoYSxvLCJvbiIpLG51bGw9PW4/YTphLmdldCh6dChuKSl9ZnVuY3Rpb24genQodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3QobnVsbD09ZT9yOm51bGwpfTp0fWZ1bmN0aW9uIEl0KHQpe3ZhciBlPXQucmVzcG9uc2VUeXBlO3JldHVybiBlJiYidGV4dCIhPT1lP3QucmVzcG9uc2U6dC5yZXNwb25zZVRleHR9ZnVuY3Rpb24gRHQodCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYoZT0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBpPXIrZSxhPXtjOnQsdDppLG46bnVsbH07cmV0dXJuIGFzP2FzLm49YTppcz1hLGFzPWEsb3N8fChzcz1jbGVhclRpbWVvdXQoc3MpLG9zPTEsbHMoUHQpKSxhfWZ1bmN0aW9uIFB0KCl7dmFyIHQ9T3QoKSxlPVJ0KCktdDtlPjI0Pyhpc0Zpbml0ZShlKSYmKGNsZWFyVGltZW91dChzcyksc3M9c2V0VGltZW91dChQdCxlKSksb3M9MCk6KG9zPTEsbHMoUHQpKX1mdW5jdGlvbiBPdCgpe2Zvcih2YXIgdD1EYXRlLm5vdygpLGU9aXM7ZTspdD49ZS50JiZlLmModC1lLnQpJiYoZS5jPW51bGwpLGU9ZS5uO3JldHVybiB0fWZ1bmN0aW9uIFJ0KCl7Zm9yKHZhciB0LGU9aXMscj0xLzA7ZTspZS5jPyhlLnQ8ciYmKHI9ZS50KSxlPSh0PWUpLm4pOmU9dD90Lm49ZS5uOmlzPWUubjtyZXR1cm4gYXM9dCxyfWZ1bmN0aW9uIEZ0KHQsZSl7cmV0dXJuIGUtKHQ/TWF0aC5jZWlsKE1hdGgubG9nKHQpL01hdGguTE4xMCk6MSl9ZnVuY3Rpb24ganQodCxlKXt2YXIgcj1NYXRoLnBvdygxMCwzKnhvKDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fWZ1bmN0aW9uIE50KHQpe3ZhciBlPXQuZGVjaW1hbCxyPXQudGhvdXNhbmRzLG49dC5ncm91cGluZyxpPXQuY3VycmVuY3ksYT1uJiZyP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPXQubGVuZ3RoLGE9W10sbz0wLHM9blswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5lJiYocz1NYXRoLm1heCgxLGUtbCkpLGEucHVzaCh0LnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+ZSkpOylzPW5bbz0obysxKSVuLmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4ocil9Ong7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWNzLmV4ZWModCksbj1yWzFdfHwiICIsbz1yWzJdfHwiPiIscz1yWzNdfHwiLSIsbD1yWzRdfHwiIix1PXJbNV0sYz0rcls2XSxoPXJbN10sZj1yWzhdLGQ9cls5XSxwPTEsbT0iIix2PSIiLGc9ITEseT0hMDtzd2l0Y2goZiYmKGY9K2Yuc3Vic3RyaW5nKDEpKSwodXx8IjAiPT09biYmIj0iPT09bykmJih1PW49IjAiLG89Ij0iKSxkKXtjYXNlIm4iOmg9ITAsZD0iZyI7YnJlYWs7Y2FzZSIlIjpwPTEwMCx2PSIlIixkPSJmIjticmVhaztjYXNlInAiOnA9MTAwLHY9IiUiLGQ9InIiO2JyZWFrO2Nhc2UiYiI6Y2FzZSJvIjpjYXNlIngiOmNhc2UiWCI6IiMiPT09bCYmKG09IjAiK2QudG9Mb3dlckNhc2UoKSk7Y2FzZSJjIjp5PSExO2Nhc2UiZCI6Zz0hMCxmPTA7YnJlYWs7Y2FzZSJzIjpwPS0xLGQ9InIifSIkIj09PWwmJihtPWlbMF0sdj1pWzFdKSwiciIhPWR8fGZ8fChkPSJnIiksbnVsbCE9ZiYmKCJnIj09ZD9mPU1hdGgubWF4KDEsTWF0aC5taW4oMjEsZikpOiJlIiE9ZCYmImYiIT1kfHwoZj1NYXRoLm1heCgwLE1hdGgubWluKDIwLGYpKSkpLGQ9aHMuZ2V0KGQpfHxCdDt2YXIgYj11JiZoO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj12O2lmKGcmJnQlMSlyZXR1cm4iIjt2YXIgaT10PDB8fDA9PT10JiYxL3Q8MD8odD0tdCwiLSIpOiItIj09PXM/IiI6cztpZihwPDApe3ZhciBsPXVvLmZvcm1hdFByZWZpeCh0LGYpO3Q9bC5zY2FsZSh0KSxyPWwuc3ltYm9sK3Z9ZWxzZSB0Kj1wO3Q9ZCh0LGYpO3ZhciB4LF8sdz10Lmxhc3RJbmRleE9mKCIuIik7aWYodzwwKXt2YXIgTT15P3QubGFzdEluZGV4T2YoImUiKTotMTtNPDA/KHg9dCxfPSIiKTooeD10LnN1YnN0cmluZygwLE0pLF89dC5zdWJzdHJpbmcoTSkpfWVsc2UgeD10LnN1YnN0cmluZygwLHcpLF89ZSt0LnN1YnN0cmluZyh3KzEpOyF1JiZoJiYoeD1hKHgsMS8wKSk7dmFyIGs9bS5sZW5ndGgreC5sZW5ndGgrXy5sZW5ndGgrKGI/MDppLmxlbmd0aCksQT1rPGM/bmV3IEFycmF5KGs9Yy1rKzEpLmpvaW4obik6IiI7cmV0dXJuIGImJih4PWEoQSt4LEEubGVuZ3RoP2MtXy5sZW5ndGg6MS8wKSksaSs9bSx0PXgrXywoIjwiPT09bz9pK3QrQToiPiI9PT1vP0EraSt0OiJeIj09PW8/QS5zdWJzdHJpbmcoMCxrPj49MSkraSt0K0Euc3Vic3RyaW5nKGspOmkrKGI/dDpBK3QpKStyfX19ZnVuY3Rpb24gQnQodCl7cmV0dXJuIHQrIiJ9ZnVuY3Rpb24gVXQoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfWZ1bmN0aW9uIFZ0KHQsZSxyKXtmdW5jdGlvbiBuKGUpe3ZhciByPXQoZSksbj1hKHIsMSk7cmV0dXJuIGUtcjxuLWU/cjpufWZ1bmN0aW9uIGkocil7cmV0dXJuIGUocj10KG5ldyBkcyhyLTEpKSwxKSxyfWZ1bmN0aW9uIGEodCxyKXtyZXR1cm4gZSh0PW5ldyBkcygrdCksciksdH1mdW5jdGlvbiBvKHQsbixhKXt2YXIgbz1pKHQpLHM9W107aWYoYT4xKWZvcig7bzxuOylyKG8pJWF8fHMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtlbHNlIGZvcig7bzxuOylzLnB1c2gobmV3IERhdGUoK28pKSxlKG8sMSk7cmV0dXJuIHN9ZnVuY3Rpb24gcyh0LGUscil7dHJ5e2RzPVV0O3ZhciBuPW5ldyBVdDtyZXR1cm4gbi5fPXQsbyhuLGUscil9ZmluYWxseXtkcz1EYXRlfX10LmZsb29yPXQsdC5yb3VuZD1uLHQuY2VpbD1pLHQub2Zmc2V0PWEsdC5yYW5nZT1vO3ZhciBsPXQudXRjPUh0KHQpO3JldHVybiBsLmZsb29yPWwsbC5yb3VuZD1IdChuKSxsLmNlaWw9SHQoaSksbC5vZmZzZXQ9SHQoYSksbC5yYW5nZT1zLHR9ZnVuY3Rpb24gSHQodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dHJ5e2RzPVV0O3ZhciBuPW5ldyBVdDtyZXR1cm4gbi5fPWUsdChuLHIpLl99ZmluYWxseXtkcz1EYXRlfX19ZnVuY3Rpb24gcXQodCl7ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBlKGUpe2Zvcih2YXIgcixpLGEsbz1bXSxzPS0xLGw9MDsrK3M8bjspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShsLHMpKSxudWxsIT0oaT1tc1tyPXQuY2hhckF0KCsrcyldKSYmKHI9dC5jaGFyQXQoKytzKSksKGE9RVtyXSkmJihyPWEoZSxudWxsPT1pPyJlIj09PXI/IiAiOiIwIjppKSksby5wdXNoKHIpLGw9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UobCxzKSksby5qb2luKCIiKX12YXIgbj10Lmxlbmd0aDtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihlKXt2YXIgbj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH07aWYocihuLHQsZSwwKSE9ZS5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4gbiYmKG4uSD1uLkglMTIrMTIqbi5wKTt2YXIgaT1udWxsIT1uLlomJmRzIT09VXQsYT1uZXcoaT9VdDpkcyk7cmV0dXJuImoiaW4gbj9hLnNldEZ1bGxZZWFyKG4ueSwwLG4uaik6IlciaW4gbnx8IlUiaW4gbj8oInciaW4gbnx8KG4udz0iVyJpbiBuPzE6MCksYS5zZXRGdWxsWWVhcihuLnksMCwxKSxhLnNldEZ1bGxZZWFyKG4ueSwwLCJXImluIG4/KG4udys2KSU3Kzcqbi5XLShhLmdldERheSgpKzUpJTc6bi53Kzcqbi5VLShhLmdldERheSgpKzYpJTcpKTphLnNldEZ1bGxZZWFyKG4ueSxuLm0sbi5kKSxhLnNldEhvdXJzKG4uSCsobi5aLzEwMHwwKSxuLk0rbi5aJTEwMCxuLlMsbi5MKSxpP2EuXzphfSxlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9ZnVuY3Rpb24gcih0LGUscixuKXtmb3IodmFyIGksYSxvLHM9MCxsPWUubGVuZ3RoLHU9ci5sZW5ndGg7czxsOyl7aWYobj49dSlyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChzKyspKSl7aWYobz1lLmNoYXJBdChzKyspLCEoYT1MW28gaW4gbXM/ZS5jaGFyQXQocysrKTpvXSl8fChuPWEodCxyLG4pKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ci5jaGFyQ29kZUF0KG4rKykpcmV0dXJuLTF9cmV0dXJuIG59ZnVuY3Rpb24gbih0LGUscil7dy5sYXN0SW5kZXg9MDt2YXIgbj13LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1NLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGkodCxlLHIpe3gubGFzdEluZGV4PTA7dmFyIG49eC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9Xy5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhKHQsZSxyKXtULmxhc3RJbmRleD0wO3ZhciBuPVQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPVMuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbyh0LGUscil7ay5sYXN0SW5kZXg9MDt2YXIgbj1rLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1BLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHModCxlLG4pe3JldHVybiByKHQsRS5jLnRvU3RyaW5nKCksZSxuKX1mdW5jdGlvbiBsKHQsZSxuKXtyZXR1cm4gcih0LEUueC50b1N0cmluZygpLGUsbil9ZnVuY3Rpb24gdSh0LGUsbil7cmV0dXJuIHIodCxFLlgudG9TdHJpbmcoKSxlLG4pfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPWIuZ2V0KGUuc2xpY2UocixyKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09bj8tMToodC5wPW4scil9dmFyIGg9dC5kYXRlVGltZSxmPXQuZGF0ZSxkPXQudGltZSxwPXQucGVyaW9kcyxtPXQuZGF5cyx2PXQuc2hvcnREYXlzLGc9dC5tb250aHMseT10LnNob3J0TW9udGhzO2UudXRjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7dHJ5e2RzPVV0O3ZhciBlPW5ldyBkcztyZXR1cm4gZS5fPXQsbihlKX1maW5hbGx5e2RzPURhdGV9fXZhciBuPWUodCk7cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCl7dHJ5e2RzPVV0O3ZhciBlPW4ucGFyc2UodCk7cmV0dXJuIGUmJmUuX31maW5hbGx5e2RzPURhdGV9fSxyLnRvU3RyaW5nPW4udG9TdHJpbmcscn0sZS5tdWx0aT1lLnV0Yy5tdWx0aT1jZTt2YXIgYj11by5tYXAoKSx4PVl0KG0pLF89WHQobSksdz1ZdCh2KSxNPVh0KHYpLGs9WXQoZyksQT1YdChnKSxUPVl0KHkpLFM9WHQoeSk7cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7Yi5zZXQodC50b0xvd2VyQ2FzZSgpLGUpfSk7dmFyIEU9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHZbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG1bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHlbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gZ1t0LmdldE1vbnRoKCldfSxjOmUoaCksZDpmdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LmdldERhdGUoKSxlLDIpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0RGF0ZSgpLGUsMil9LEg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRIb3VycygpLGUsMil9LEk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfSxqOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KDErZnMuZGF5T2ZZZWFyKHQpLGUsMyl9LEw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfSxtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0TW9udGgoKSsxLGUsMil9LE06ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRNaW51dGVzKCksZSwyKX0scDpmdW5jdGlvbih0KXtyZXR1cm4gcFsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LmdldFNlY29uZHMoKSxlLDIpfSxVOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KGZzLnN1bmRheU9mWWVhcih0KSxlLDIpfSx3OmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpfSxXOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KGZzLm1vbmRheU9mWWVhcih0KSxlLDIpfSx4OmUoZiksWDplKGQpLHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfSxZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX0sWjpsZSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxMPXthOm4sQTppLGI6YSxCOm8sYzpzLGQ6cmUsZTpyZSxIOmllLEk6aWUsajpuZSxMOnNlLG06ZWUsTTphZSxwOmMsUzpvZSxVOlp0LHc6V3QsVzpKdCx4OmwsWDp1LHk6UXQsWTpLdCxaOiR0LCIlIjp1ZX07cmV0dXJuIGV9ZnVuY3Rpb24gR3QodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gWXQodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKHVvLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBYdCh0KXtmb3IodmFyIGU9bmV3IGgscj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gV3QodCxlLHIpe3ZzLmxhc3RJbmRleD0wO3ZhciBuPXZzLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWnQodCxlLHIpe3ZzLmxhc3RJbmRleD0wO3ZhciBuPXZzLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKdCh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEt0KHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFF0KHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC55PXRlKCtuWzBdKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkdCh0LGUscil7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiB0ZSh0KXtyZXR1cm4gdCsodD42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gZWUodCxlLHIpe3ZzLmxhc3RJbmRleD0wO3ZhciBuPXZzLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJlKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5lKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5qPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGllKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFlKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9lKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNlKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxlKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSxyPWU+MD8iLSI6IisiLG49eG8oZSkvNjB8MCxpPXhvKGUpJTYwO3JldHVybiByK0d0KG4sIjAiLDIpK0d0KGksIjAiLDIpfWZ1bmN0aW9uIHVlKHQsZSxyKXtncy5sYXN0SW5kZXg9MDt2YXIgbj1ncy5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGNlKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fWZ1bmN0aW9uIGhlKCl7fWZ1bmN0aW9uIGZlKHQsZSxyKXt2YXIgbj1yLnM9dCtlLGk9bi10LGE9bi1pO3IudD10LWErKGUtaSl9ZnVuY3Rpb24gZGUodCxlKXt0JiZfcy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZfc1t0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gcGUodCxlLHIpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aC1yO2ZvcihlLmxpbmVTdGFydCgpOysraTxhOyluPXRbaV0sZS5wb2ludChuWzBdLG5bMV0sblsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gbWUodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOylwZSh0W3JdLGUsMSk7ZS5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gdmUoKXtmdW5jdGlvbiB0KHQsZSl7dCo9SG8sZT1lKkhvLzIrTm8vNDt2YXIgcj10LW4sbz1yPj0wPzE6LTEscz1vKnIsbD1NYXRoLmNvcyhlKSx1PU1hdGguc2luKGUpLGM9YSp1LGg9aSpsK2MqTWF0aC5jb3MocyksZj1jKm8qTWF0aC5zaW4ocyk7TXMuYWRkKE1hdGguYXRhbjIoZixoKSksbj10LGk9bCxhPXV9dmFyIGUscixuLGksYTtrcy5wb2ludD1mdW5jdGlvbihvLHMpe2tzLnBvaW50PXQsbj0oZT1vKSpIbyxpPU1hdGguY29zKHM9KHI9cykqSG8vMitOby80KSxhPU1hdGguc2luKHMpfSxrcy5saW5lRW5kPWZ1bmN0aW9uKCl7dChlLHIpfX1mdW5jdGlvbiBnZSh0KXt2YXIgZT10WzBdLHI9dFsxXSxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfWZ1bmN0aW9uIHllKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIGJlKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiB4ZSh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIF9lKHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiB3ZSh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfWZ1bmN0aW9uIE1lKHQpe3JldHVybltNYXRoLmF0YW4yKHRbMV0sdFswXSksbnQodFsyXSldfWZ1bmN0aW9uIGtlKHQsZSl7cmV0dXJuIHhvKHRbMF0tZVswXSk8Rm8mJnhvKHRbMV0tZVsxXSk8Rm99ZnVuY3Rpb24gQWUodCxlKXt0Kj1Ibzt2YXIgcj1NYXRoLmNvcyhlKj1Ibyk7VGUocipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKGUpKX1mdW5jdGlvbiBUZSh0LGUscil7KytBcyxTcys9KHQtU3MpL0FzLEVzKz0oZS1FcykvQXMsTHMrPShyLUxzKS9Bc31mdW5jdGlvbiBTZSgpe2Z1bmN0aW9uIHQodCxpKXt0Kj1Ibzt2YXIgYT1NYXRoLmNvcyhpKj1Ibyksbz1hKk1hdGguY29zKHQpLHM9YSpNYXRoLnNpbih0KSxsPU1hdGguc2luKGkpLHU9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHU9cipsLW4qcykqdSsodT1uKm8tZSpsKSp1Kyh1PWUqcy1yKm8pKnUpLGUqbytyKnMrbipsKTtUcys9dSxDcys9dSooZSsoZT1vKSksenMrPXUqKHIrKHI9cykpLElzKz11KihuKyhuPWwpKSxUZShlLHIsbil9dmFyIGUscixuO1JzLnBvaW50PWZ1bmN0aW9uKGksYSl7aSo9SG87dmFyIG89TWF0aC5jb3MoYSo9SG8pO2U9bypNYXRoLmNvcyhpKSxyPW8qTWF0aC5zaW4oaSksbj1NYXRoLnNpbihhKSxScy5wb2ludD10LFRlKGUscixuKX19ZnVuY3Rpb24gRWUoKXtScy5wb2ludD1BZX1mdW5jdGlvbiBMZSgpe2Z1bmN0aW9uIHQodCxlKXt0Kj1Ibzt2YXIgcj1NYXRoLmNvcyhlKj1Ibyksbz1yKk1hdGguY29zKHQpLHM9cipNYXRoLnNpbih0KSxsPU1hdGguc2luKGUpLHU9aSpsLWEqcyxjPWEqby1uKmwsaD1uKnMtaSpvLGY9TWF0aC5zcXJ0KHUqdStjKmMraCpoKSxkPW4qbytpKnMrYSpsLHA9ZiYmLXJ0KGQpL2YsbT1NYXRoLmF0YW4yKGYsZCk7RHMrPXAqdSxQcys9cCpjLE9zKz1wKmgsVHMrPW0sQ3MrPW0qKG4rKG49bykpLHpzKz1tKihpKyhpPXMpKSxJcys9bSooYSsoYT1sKSksVGUobixpLGEpfXZhciBlLHIsbixpLGE7UnMucG9pbnQ9ZnVuY3Rpb24obyxzKXtlPW8scj1zLFJzLnBvaW50PXQsbyo9SG87dmFyIGw9TWF0aC5jb3Mocyo9SG8pO249bCpNYXRoLmNvcyhvKSxpPWwqTWF0aC5zaW4obyksYT1NYXRoLnNpbihzKSxUZShuLGksYSl9LFJzLmxpbmVFbmQ9ZnVuY3Rpb24oKXt0KGUsciksUnMubGluZUVuZD1FZSxScy5wb2ludD1BZX19ZnVuY3Rpb24gQ2UodCxlKXtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHI9dChyLG4pLGUoclswXSxyWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYoci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4ocj1lLmludmVydChyLG4pKSYmdC5pbnZlcnQoclswXSxyWzFdKX0pLHJ9ZnVuY3Rpb24gemUoKXtyZXR1cm4hMH1mdW5jdGlvbiBJZSh0LGUscixuLGkpe3ZhciBhPVtdLG89W107aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxyPXRbMF0sbj10W2VdO2lmKGtlKHIsbikpe2kubGluZVN0YXJ0KCk7Zm9yKHZhciBzPTA7czxlOysrcylpLnBvaW50KChyPXRbc10pWzBdLHJbMV0pO3JldHVybiB2b2lkIGkubGluZUVuZCgpfXZhciBsPW5ldyBQZShyLHQsbnVsbCwhMCksdT1uZXcgUGUocixudWxsLGwsITEpO2wubz11LGEucHVzaChsKSxvLnB1c2godSksbD1uZXcgUGUobix0LG51bGwsITEpLHU9bmV3IFBlKG4sbnVsbCxsLCEwKSxsLm89dSxhLnB1c2gobCksby5wdXNoKHUpfX0pLG8uc29ydChlKSxEZShhKSxEZShvKSxhLmxlbmd0aCl7Zm9yKHZhciBzPTAsbD1yLHU9by5sZW5ndGg7czx1OysrcylvW3NdLmU9bD0hbDtmb3IodmFyIGMsaCxmPWFbMF07Oyl7Zm9yKHZhciBkPWYscD0hMDtkLnY7KWlmKChkPWQubik9PT1mKXJldHVybjtjPWQueixpLmxpbmVTdGFydCgpO2Rve2lmKGQudj1kLm8udj0hMCxkLmUpe2lmKHApZm9yKHZhciBzPTAsdT1jLmxlbmd0aDtzPHU7KytzKWkucG9pbnQoKGg9Y1tzXSlbMF0saFsxXSk7ZWxzZSBuKGQueCxkLm4ueCwxLGkpO2Q9ZC5ufWVsc2V7aWYocCl7Yz1kLnAuejtmb3IodmFyIHM9Yy5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPWNbc10pWzBdLGhbMV0pfWVsc2UgbihkLngsZC5wLngsLTEsaSk7ZD1kLnB9ZD1kLm8sYz1kLnoscD0hcH13aGlsZSghZC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIERlKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxyLG49MCxpPXRbMF07KytuPGU7KWkubj1yPXRbbl0sci5wPWksaT1yO2kubj1yPXRbMF0sci5wPWl9fWZ1bmN0aW9uIFBlKHQsZSxyLG4pe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gT2UodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gbyhlLHIpe3ZhciBuPWkoZSxyKTt0KGU9blswXSxyPW5bMV0pJiZhLnBvaW50KGUscil9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWkodCxlKTt2LnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gbCgpe3kucG9pbnQ9cyx2LmxpbmVTdGFydCgpfWZ1bmN0aW9uIHUoKXt5LnBvaW50PW8sdi5saW5lRW5kKCl9ZnVuY3Rpb24gYyh0LGUpe20ucHVzaChbdCxlXSk7dmFyIHI9aSh0LGUpO3gucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBoKCl7eC5saW5lU3RhcnQoKSxtPVtdfWZ1bmN0aW9uIGYoKXtjKG1bMF1bMF0sbVswXVsxXSkseC5saW5lRW5kKCk7dmFyIHQsZT14LmNsZWFuKCkscj1iLmJ1ZmZlcigpLG49ci5sZW5ndGg7aWYobS5wb3AoKSxwLnB1c2gobSksbT1udWxsLG4paWYoMSZlKXt0PXJbMF07dmFyIGksbj10Lmxlbmd0aC0xLG89LTE7aWYobj4wKXtmb3IoX3x8KGEucG9seWdvblN0YXJ0KCksXz0hMCksYS5saW5lU3RhcnQoKTsrK288bjspYS5wb2ludCgoaT10W29dKVswXSxpWzFdKTthLmxpbmVFbmQoKX19ZWxzZSBuPjEmJjImZSYmci5wdXNoKHIucG9wKCkuY29uY2F0KHIuc2hpZnQoKSkpLGQucHVzaChyLmZpbHRlcihSZSkpfXZhciBkLHAsbSx2PWUoYSksZz1pLmludmVydChuWzBdLG5bMV0pLHk9e3BvaW50Om8sbGluZVN0YXJ0OmwsbGluZUVuZDp1LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3kucG9pbnQ9Yyx5LmxpbmVTdGFydD1oLHkubGluZUVuZD1mLGQ9W10scD1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3kucG9pbnQ9byx5LmxpbmVTdGFydD1sLHkubGluZUVuZD11LGQ9dW8ubWVyZ2UoZCk7dmFyIHQ9VmUoZyxwKTtkLmxlbmd0aD8oX3x8KGEucG9seWdvblN0YXJ0KCksXz0hMCksSWUoZCxqZSx0LHIsYSkpOnQmJihffHwoYS5wb2x5Z29uU3RhcnQoKSxfPSEwKSxhLmxpbmVTdGFydCgpLHIobnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLF8mJihhLnBvbHlnb25FbmQoKSxfPSExKSxkPXA9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7YS5wb2x5Z29uU3RhcnQoKSxhLmxpbmVTdGFydCgpLHIobnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCksYS5wb2x5Z29uRW5kKCl9fSxiPUZlKCkseD1lKGIpLF89ITE7cmV0dXJuIHl9fWZ1bmN0aW9uIFJlKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIEZlKCl7dmFyIHQsZT1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChbZSxyXSl9LGxpbmVFbmQ6TSxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgcj1lO3JldHVybiBlPVtdLHQ9bnVsbCxyfSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9fX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1Wby1GbzpWby10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tVm8tRm86Vm8tZVsxXSl9ZnVuY3Rpb24gTmUodCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLG8pe3ZhciBzPWE+MD9ObzotTm8sbD14byhhLXIpO3hvKGwtTm8pPEZvPyh0LnBvaW50KHIsbj0obitvKS8yPjA/Vm86LVZvKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksdC5wb2ludChhLG4pLGU9MCk6aSE9PXMmJmw+PU5vJiYoeG8oci1pKTxGbyYmKHItPWkqRm8pLHhvKGEtcyk8Rm8mJihhLT1zKkZvKSxuPUJlKHIsbixhLG8pLHQucG9pbnQoaSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxuKSxlPTApLHQucG9pbnQocj1hLG49byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCkscj1uPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19ZnVuY3Rpb24gQmUodCxlLHIsbil7dmFyIGksYSxvPU1hdGguc2luKHQtcik7cmV0dXJuIHhvKG8pPkZvP01hdGguYXRhbigoTWF0aC5zaW4oZSkqKGE9TWF0aC5jb3MobikpKk1hdGguc2luKHIpLU1hdGguc2luKG4pKihpPU1hdGguY29zKGUpKSpNYXRoLnNpbih0KSkvKGkqYSpvKSk6KGUrbikvMn1mdW5jdGlvbiBVZSh0LGUscixuKXt2YXIgaTtpZihudWxsPT10KWk9cipWbyxuLnBvaW50KC1ObyxpKSxuLnBvaW50KDAsaSksbi5wb2ludChObyxpKSxuLnBvaW50KE5vLDApLG4ucG9pbnQoTm8sLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtTm8sLWkpLG4ucG9pbnQoLU5vLDApLG4ucG9pbnQoLU5vLGkpO2Vsc2UgaWYoeG8odFswXS1lWzBdKT5Gbyl7dmFyIGE9dFswXTxlWzBdP05vOi1ObztpPXIqYS8yLG4ucG9pbnQoLWEsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoYSxpKX1lbHNlIG4ucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBWZSh0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9W01hdGguc2luKHIpLC1NYXRoLmNvcyhyKSwwXSxhPTAsbz0wO01zLnJlc2V0KCk7Zm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7KytzKXt2YXIgdT1lW3NdLGM9dS5sZW5ndGg7aWYoYylmb3IodmFyIGg9dVswXSxmPWhbMF0sZD1oWzFdLzIrTm8vNCxwPU1hdGguc2luKGQpLG09TWF0aC5jb3MoZCksdj0xOzspe3Y9PT1jJiYodj0wKSx0PXVbdl07dmFyIGc9dFswXSx5PXRbMV0vMitOby80LGI9TWF0aC5zaW4oeSkseD1NYXRoLmNvcyh5KSxfPWctZix3PV8+PTA/MTotMSxNPXcqXyxrPU0+Tm8sQT1wKmI7aWYoTXMuYWRkKE1hdGguYXRhbjIoQSp3Kk1hdGguc2luKE0pLG0qeCtBKk1hdGguY29zKE0pKSksYSs9az9fK3cqQm86XyxrXmY+PXJeZz49cil7dmFyIFQ9YmUoZ2UoaCksZ2UodCkpO3dlKFQpO3ZhciBTPWJlKGksVCk7d2UoUyk7dmFyIEU9KGteXz49MD8tMToxKSpudChTWzJdKTsobj5FfHxuPT09RSYmKFRbMF18fFRbMV0pKSYmKG8rPWteXz49MD8xOi0xKX1pZighdisrKWJyZWFrO2Y9ZyxwPWIsbT14LGg9dH19cmV0dXJuKGE8LUZvfHxhPEZvJiZNczwtRm8pXjEmb31mdW5jdGlvbiBIZSh0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIE1hdGguY29zKHQpKk1hdGguY29zKGUpPmF9ZnVuY3Rpb24gcih0KXt2YXIgcixhLGwsdSxjO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt1PWw9ITEsYz0xfSxwb2ludDpmdW5jdGlvbihoLGYpe3ZhciBkLHA9W2gsZl0sbT1lKGgsZiksdj1vP20/MDppKGgsZik6bT9pKGgrKGg8MD9ObzotTm8pLGYpOjA7aWYoIXImJih1PWw9bSkmJnQubGluZVN0YXJ0KCksbSE9PWwmJihkPW4ocixwKSwoa2UocixkKXx8a2UocCxkKSkmJihwWzBdKz1GbyxwWzFdKz1GbyxtPWUocFswXSxwWzFdKSkpLG0hPT1sKWM9MCxtPyh0LmxpbmVTdGFydCgpLGQ9bihwLHIpLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9bihyLHApLHQucG9pbnQoZFswXSxkWzFdKSx0LmxpbmVFbmQoKSkscj1kO2Vsc2UgaWYocyYmciYmb15tKXt2YXIgZzt2JmF8fCEoZz1uKHAsciwhMCkpfHwoYz0wLG8/KHQubGluZVN0YXJ0KCksdC5wb2ludChnWzBdWzBdLGdbMF1bMV0pLHQucG9pbnQoZ1sxXVswXSxnWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQoZ1sxXVswXSxnWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQoZ1swXVswXSxnWzBdWzFdKSkpfSFtfHxyJiZrZShyLHApfHx0LnBvaW50KHBbMF0scFsxXSkscj1wLGw9bSxhPXZ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxyPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGN8KHUmJmwpPDwxfX19ZnVuY3Rpb24gbih0LGUscil7dmFyIG49Z2UodCksaT1nZShlKSxvPVsxLDAsMF0scz1iZShuLGkpLGw9eWUocyxzKSx1PXNbMF0sYz1sLXUqdTtpZighYylyZXR1cm4hciYmdDt2YXIgaD1hKmwvYyxmPS1hKnUvYyxkPWJlKG8scykscD1fZShvLGgpO3hlKHAsX2UocyxmKSk7dmFyIG09ZCx2PXllKHAsbSksZz15ZShtLG0pLHk9dip2LWcqKHllKHAscCktMSk7aWYoISh5PDApKXt2YXIgYj1NYXRoLnNxcnQoeSkseD1fZShtLCgtdi1iKS9nKTtpZih4ZSh4LHApLHg9TWUoeCksIXIpcmV0dXJuIHg7dmFyIF8sdz10WzBdLE09ZVswXSxrPXRbMV0sQT1lWzFdO008dyYmKF89dyx3PU0sTT1fKTt2YXIgVD1NLXcsUz14byhULU5vKTxGbyxFPVN8fFQ8Rm87aWYoIVMmJkE8ayYmKF89ayxrPUEsQT1fKSxFP1M/aytBPjBeeFsxXTwoeG8oeFswXS13KTxGbz9rOkEpOms8PXhbMV0mJnhbMV08PUE6VD5Ob14odzw9eFswXSYmeFswXTw9TSkpe3ZhciBMPV9lKG0sKC12K2IpL2cpO3JldHVybiB4ZShMLHApLFt4LE1lKEwpXX19fWZ1bmN0aW9uIGkoZSxyKXt2YXIgbj1vP3Q6Tm8tdCxpPTA7cmV0dXJuIGU8LW4/aXw9MTplPm4mJihpfD0yKSxyPC1uP2l8PTQ6cj5uJiYoaXw9OCksaX12YXIgYT1NYXRoLmNvcyh0KSxvPWE+MCxzPXhvKGEpPkZvO3JldHVybiBPZShlLHIsdnIodCw2KkhvKSxvP1swLC10XTpbLU5vLHQtTm9dKX1mdW5jdGlvbiBxZSh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIGEsbz1pLmEscz1pLmIsbD1vLngsdT1vLnksYz1zLngsaD1zLnksZj0wLGQ9MSxwPWMtbCxtPWgtdTtpZihhPXQtbCxwfHwhKGE+MCkpe2lmKGEvPXAscDwwKXtpZihhPGYpcmV0dXJuO2E8ZCYmKGQ9YSl9ZWxzZSBpZihwPjApe2lmKGE+ZClyZXR1cm47YT5mJiYoZj1hKX1pZihhPXItbCxwfHwhKGE8MCkpe2lmKGEvPXAscDwwKXtpZihhPmQpcmV0dXJuO2E+ZiYmKGY9YSl9ZWxzZSBpZihwPjApe2lmKGE8ZilyZXR1cm47YTxkJiYoZD1hKX1pZihhPWUtdSxtfHwhKGE+MCkpe2lmKGEvPW0sbTwwKXtpZihhPGYpcmV0dXJuO2E8ZCYmKGQ9YSl9ZWxzZSBpZihtPjApe2lmKGE+ZClyZXR1cm47YT5mJiYoZj1hKX1pZihhPW4tdSxtfHwhKGE8MCkpe2lmKGEvPW0sbTwwKXtpZihhPmQpcmV0dXJuO2E+ZiYmKGY9YSl9ZWxzZSBpZihtPjApe2lmKGE8ZilyZXR1cm47YTxkJiYoZD1hKX1yZXR1cm4gZj4wJiYoaS5hPXt4OmwrZipwLHk6dStmKm19KSxkPDEmJihpLmI9e3g6bCtkKnAseTp1K2QqbX0pLGl9fX19fX1mdW5jdGlvbiBHZSh0LGUscixuKXtmdW5jdGlvbiBpKG4saSl7cmV0dXJuIHhvKG5bMF0tdCk8Rm8/aT4wPzA6Mzp4byhuWzBdLXIpPEZvP2k+MD8yOjE6eG8oblsxXS1lKTxGbz9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBvKHQueCxlLngpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1pKHQsMSksbj1pKGUsMSk7cmV0dXJuIHIhPT1uP3ItbjowPT09cj9lWzFdLXRbMV06MT09PXI/dFswXS1lWzBdOjI9PT1yP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPTAscj12Lmxlbmd0aCxuPXRbMV0saT0wO2k8cjsrK2kpZm9yKHZhciBhLG89MSxzPXZbaV0sbD1zLmxlbmd0aCx1PXNbMF07bzxsOysrbylhPXNbb10sdVsxXTw9bj9hWzFdPm4mJmV0KHUsYSx0KT4wJiYrK2U6YVsxXTw9biYmZXQodSxhLHQpPDAmJi0tZSx1PWE7cmV0dXJuIDAhPT1lfWZ1bmN0aW9uIHUoYSxzLGwsdSl7dmFyIGM9MCxoPTA7aWYobnVsbD09YXx8KGM9aShhLGwpKSE9PShoPWkocyxsKSl8fG8oYSxzKTwwXmw+MClkb3t1LnBvaW50KDA9PT1jfHwzPT09Yz90OnIsYz4xP246ZSl9d2hpbGUoKGM9KGMrbCs0KSU0KSE9PWgpO2Vsc2UgdS5wb2ludChzWzBdLHNbMV0pfWZ1bmN0aW9uIGMoaSxhKXtyZXR1cm4gdDw9aSYmaTw9ciYmZTw9YSYmYTw9bn1mdW5jdGlvbiBoKHQsZSl7Yyh0LGUpJiZzLnBvaW50KHQsZSl9ZnVuY3Rpb24gZigpe0wucG9pbnQ9cCx2JiZ2LnB1c2goZz1bXSksaz0hMCxNPSExLF89dz1OYU59ZnVuY3Rpb24gZCgpe20mJihwKHksYikseCYmTSYmUy5yZWpvaW4oKSxtLnB1c2goUy5idWZmZXIoKSkpLEwucG9pbnQ9aCxNJiZzLmxpbmVFbmQoKX1mdW5jdGlvbiBwKHQsZSl7dD1NYXRoLm1heCgtanMsTWF0aC5taW4oanMsdCkpLGU9TWF0aC5tYXgoLWpzLE1hdGgubWluKGpzLGUpKTt2YXIgcj1jKHQsZSk7aWYodiYmZy5wdXNoKFt0LGVdKSxrKXk9dCxiPWUseD1yLGs9ITEsciYmKHMubGluZVN0YXJ0KCkscy5wb2ludCh0LGUpKTtlbHNlIGlmKHImJk0pcy5wb2ludCh0LGUpO2Vsc2V7dmFyIG49e2E6e3g6Xyx5Ond9LGI6e3g6dCx5OmV9fTtFKG4pPyhNfHwocy5saW5lU3RhcnQoKSxzLnBvaW50KG4uYS54LG4uYS55KSkscy5wb2ludChuLmIueCxuLmIueSkscnx8cy5saW5lRW5kKCksQT0hMSk6ciYmKHMubGluZVN0YXJ0KCkscy5wb2ludCh0LGUpLEE9ITEpfV89dCx3PWUsTT1yfXZhciBtLHYsZyx5LGIseCxfLHcsTSxrLEEsVD1zLFM9RmUoKSxFPXFlKHQsZSxyLG4pLEw9e3BvaW50OmgsbGluZVN0YXJ0OmYsbGluZUVuZDpkLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3M9UyxtPVtdLHY9W10sQT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3M9VCxtPXVvLm1lcmdlKG0pO3ZhciBlPWwoW3Qsbl0pLHI9QSYmZSxpPW0ubGVuZ3RoOyhyfHxpKSYmKHMucG9seWdvblN0YXJ0KCksciYmKHMubGluZVN0YXJ0KCksdShudWxsLG51bGwsMSxzKSxzLmxpbmVFbmQoKSksaSYmSWUobSxhLGUsdSxzKSxzLnBvbHlnb25FbmQoKSksbT12PWc9bnVsbH19O3JldHVybiBMfX1mdW5jdGlvbiBZZSh0KXt2YXIgZT0wLHI9Tm8vMyxuPWxyKHQpLGk9bihlLHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGU9dFswXSpOby8xODAscj10WzFdKk5vLzE4MCk6W2UvTm8qMTgwLHIvTm8qMTgwXX0saX1mdW5jdGlvbiBYZSh0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1NYXRoLnNxcnQoYS0yKmkqTWF0aC5zaW4oZSkpL2k7cmV0dXJuW3IqTWF0aC5zaW4odCo9aSksby1yKk1hdGguY29zKHQpXX12YXIgbj1NYXRoLnNpbih0KSxpPShuK01hdGguc2luKGUpKS8yLGE9MStuKigyKmktbiksbz1NYXRoLnNxcnQoYSkvaTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1vLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9pLG50KChhLSh0KnQrcipyKSppKmkpLygyKmkpKV19LHJ9ZnVuY3Rpb24gV2UoKXtmdW5jdGlvbiB0KHQsZSl7QnMrPWkqdC1uKmUsbj10LGk9ZX12YXIgZSxyLG4saTtHcy5wb2ludD1mdW5jdGlvbihhLG8pe0dzLnBvaW50PXQsZT1uPWEscj1pPW99LEdzLmxpbmVFbmQ9ZnVuY3Rpb24oKXt0KGUscil9fWZ1bmN0aW9uIFplKHQsZSl7dDxVcyYmKFVzPXQpLHQ+SHMmJihIcz10KSxlPFZzJiYoVnM9ZSksZT5xcyYmKHFzPWUpfWZ1bmN0aW9uIEplKCl7ZnVuY3Rpb24gdCh0LGUpe28ucHVzaCgiTSIsdCwiLCIsZSxhKX1mdW5jdGlvbiBlKHQsZSl7by5wdXNoKCJNIix0LCIsIixlKSxzLnBvaW50PXJ9ZnVuY3Rpb24gcih0LGUpe28ucHVzaCgiTCIsdCwiLCIsZSl9ZnVuY3Rpb24gbigpe3MucG9pbnQ9dH1mdW5jdGlvbiBpKCl7by5wdXNoKCJaIil9dmFyIGE9S2UoNC41KSxvPVtdLHM9e3BvaW50OnQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7cy5wb2ludD1lfSxsaW5lRW5kOm4scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cy5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtzLmxpbmVFbmQ9bixzLnBvaW50PXR9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiBhPUtlKHQpLHN9LHJlc3VsdDpmdW5jdGlvbigpe2lmKG8ubGVuZ3RoKXt2YXIgdD1vLmpvaW4oIiIpO3JldHVybiBvPVtdLHR9fX07cmV0dXJuIHN9ZnVuY3Rpb24gS2UodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZnVuY3Rpb24gUWUodCxlKXtTcys9dCxFcys9ZSwrK0xzfWZ1bmN0aW9uICRlKCl7ZnVuY3Rpb24gdCh0LG4pe3ZhciBpPXQtZSxhPW4tcixvPU1hdGguc3FydChpKmkrYSphKTtDcys9byooZSt0KS8yLHpzKz1vKihyK24pLzIsSXMrPW8sUWUoZT10LHI9bil9dmFyIGUscjtYcy5wb2ludD1mdW5jdGlvbihuLGkpe1hzLnBvaW50PXQsUWUoZT1uLHI9aSl9fWZ1bmN0aW9uIHRyKCl7WHMucG9pbnQ9UWV9ZnVuY3Rpb24gZXIoKXtmdW5jdGlvbiB0KHQsZSl7dmFyIHI9dC1uLGE9ZS1pLG89TWF0aC5zcXJ0KHIqcithKmEpO0NzKz1vKihuK3QpLzIsenMrPW8qKGkrZSkvMixJcys9byxvPWkqdC1uKmUsRHMrPW8qKG4rdCksUHMrPW8qKGkrZSksT3MrPTMqbyxRZShuPXQsaT1lKX12YXIgZSxyLG4saTtYcy5wb2ludD1mdW5jdGlvbihhLG8pe1hzLnBvaW50PXQsUWUoZT1uPWEscj1pPW8pfSxYcy5saW5lRW5kPWZ1bmN0aW9uKCl7dChlLHIpfX1mdW5jdGlvbiBycih0KXtmdW5jdGlvbiBlKGUscil7dC5tb3ZlVG8oZStvLHIpLHQuYXJjKGUscixvLDAsQm8pfWZ1bmN0aW9uIHIoZSxyKXt0Lm1vdmVUbyhlLHIpLHMucG9pbnQ9bn1mdW5jdGlvbiBuKGUscil7dC5saW5lVG8oZSxyKX1mdW5jdGlvbiBpKCl7cy5wb2ludD1lfWZ1bmN0aW9uIGEoKXt0LmNsb3NlUGF0aCgpfXZhciBvPTQuNSxzPXtwb2ludDplLGxpbmVTdGFydDpmdW5jdGlvbigpe3MucG9pbnQ9cn0sbGluZUVuZDppLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3MubGluZUVuZD1hfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cy5saW5lRW5kPWkscy5wb2ludD1lfSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gbz10LHN9LHJlc3VsdDpNfTtyZXR1cm4gc31mdW5jdGlvbiBucih0KXtmdW5jdGlvbiBlKHQpe3JldHVybihzP246cikodCl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gb3IoZSxmdW5jdGlvbihyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX0pfWZ1bmN0aW9uIG4oZSl7ZnVuY3Rpb24gcihyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBuKCl7Yj1OYU4say5wb2ludD1hLGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYShyLG4pe3ZhciBhPWdlKFtyLG5dKSxvPXQocixuKTtpKGIseCx5LF8sdyxNLGI9b1swXSx4PW9bMV0seT1yLF89YVswXSx3PWFbMV0sTT1hWzJdLHMsZSksZS5wb2ludChiLHgpfWZ1bmN0aW9uIG8oKXtrLnBvaW50PXIsZS5saW5lRW5kKCl9ZnVuY3Rpb24gbCgpe24oKSxrLnBvaW50PXUsay5saW5lRW5kPWN9ZnVuY3Rpb24gdSh0LGUpe2EoaD10LGY9ZSksZD1iLHA9eCxtPV8sdj13LGc9TSxrLnBvaW50PWF9ZnVuY3Rpb24gYygpe2koYix4LHksXyx3LE0sZCxwLGgsbSx2LGcscyxlKSxrLmxpbmVFbmQ9byxvKCl9dmFyIGgsZixkLHAsbSx2LGcseSxiLHgsXyx3LE0saz17cG9pbnQ6cixsaW5lU3RhcnQ6bixsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxrLmxpbmVTdGFydD1sfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksay5saW5lU3RhcnQ9bn19O3JldHVybiBrfWZ1bmN0aW9uIGkoZSxyLG4scyxsLHUsYyxoLGYsZCxwLG0sdixnKXt2YXIgeT1jLWUsYj1oLXIseD15KnkrYipiO2lmKHg+NCphJiZ2LS0pe3ZhciBfPXMrZCx3PWwrcCxNPXUrbSxrPU1hdGguc3FydChfKl8rdyp3K00qTSksQT1NYXRoLmFzaW4oTS89ayksVD14byh4byhNKS0xKTxGb3x8eG8obi1mKTxGbz8obitmKS8yOk1hdGguYXRhbjIodyxfKSxTPXQoVCxBKSxFPVNbMF0sTD1TWzFdLEM9RS1lLHo9TC1yLEk9YipDLXkqejsoSSpJL3g+YXx8eG8oKHkqQytiKnopL3gtLjUpPi4zfHxzKmQrbCpwK3UqbTxvKSYmKGkoZSxyLG4scyxsLHUsRSxMLFQsXy89ayx3Lz1rLE0sdixnKSxnLnBvaW50KEUsTCksaShFLEwsVCxfLHcsTSxjLGgsZixkLHAsbSx2LGcpKX19dmFyIGE9LjUsbz1NYXRoLmNvcygzMCpIbykscz0xNjtyZXR1cm4gZS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9KGE9dCp0KT4wJiYxNixlKTpNYXRoLnNxcnQoYSl9LGV9ZnVuY3Rpb24gaXIodCl7dmFyIGU9bnIoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChbZSpxbyxyKnFvXSl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHVyKGUodCkpfX1mdW5jdGlvbiBhcih0KXt0aGlzLnN0cmVhbT10fWZ1bmN0aW9uIG9yKHQsZSl7cmV0dXJue3BvaW50OmUsc3BoZXJlOmZ1bmN0aW9uKCl7dC5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBzcih0KXtyZXR1cm4gbHIoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKCl9ZnVuY3Rpb24gbHIodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdD1zKHRbMF0qSG8sdFsxXSpIbyksW3RbMF0qZitsLHUtdFsxXSpmXX1mdW5jdGlvbiByKHQpe3JldHVybih0PXMuaW52ZXJ0KCh0WzBdLWwpL2YsKHUtdFsxXSkvZikpJiZbdFswXSpxbyx0WzFdKnFvXX1mdW5jdGlvbiBuKCl7cz1DZShvPWZyKGcseSxiKSxhKTt2YXIgdD1hKG0sdik7cmV0dXJuIGw9ZC10WzBdKmYsdT1wK3RbMV0qZixpKCl9ZnVuY3Rpb24gaSgpe3JldHVybiBjJiYoYy52YWxpZD0hMSxjPW51bGwpLGV9dmFyIGEsbyxzLGwsdSxjLGg9bnIoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1hKHQsZSksW3RbMF0qZitsLHUtdFsxXSpmXX0pLGY9MTUwLGQ9NDgwLHA9MjUwLG09MCx2PTAsZz0wLHk9MCxiPTAsXz1Gcyx3PXgsTT1udWxsLGs9bnVsbDtyZXR1cm4gZS5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGMmJihjLnZhbGlkPSExKSxjPXVyKF8obyxoKHcodCkpKSksYy52YWxpZD0hMCxjfSxlLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1udWxsPT10PyhNPXQsRnMpOkhlKChNPSt0KSpIbyksaSgpKTpNfSxlLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9dCx3PXQ/R2UodFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSk6eCxpKCkpOmt9LGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3QsbigpKTpmfSxlLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdFswXSxwPSt0WzFdLG4oKSk6W2QscF19LGUuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXRbMF0lMzYwKkhvLHY9dFsxXSUzNjAqSG8sbigpKTpbbSpxbyx2KnFvXX0sZS5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dFswXSUzNjAqSG8seT10WzFdJTM2MCpIbyxiPXQubGVuZ3RoPjI/dFsyXSUzNjAqSG86MCxuKCkpOltnKnFvLHkqcW8sYipxb119LHVvLnJlYmluZChlLGgsInByZWNpc2lvbiIpLGZ1bmN0aW9uKCl7cmV0dXJuIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5pbnZlcnQ9YS5pbnZlcnQmJnIsbigpfX1mdW5jdGlvbiB1cih0KXtyZXR1cm4gb3IodCxmdW5jdGlvbihlLHIpe3QucG9pbnQoZSpIbyxyKkhvKX0pfWZ1bmN0aW9uIGNyKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gaHIodCxlKXtyZXR1cm5bdD5Obz90LUJvOnQ8LU5vP3QrQm86dCxlXX1mdW5jdGlvbiBmcih0LGUscil7cmV0dXJuIHQ/ZXx8cj9DZShwcih0KSxtcihlLHIpKTpwcih0KTplfHxyP21yKGUscik6aHJ9ZnVuY3Rpb24gZHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGUrPXQsW2U+Tm8/ZS1CbzplPC1Obz9lK0JvOmUscl19fWZ1bmN0aW9uIHByKHQpe3ZhciBlPWRyKHQpO3JldHVybiBlLmludmVydD1kcigtdCksZX1mdW5jdGlvbiBtcih0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKnIsbD1NYXRoLnNpbih0KSpyLHU9TWF0aC5zaW4oZSksYz11Km4rcyppO3JldHVybltNYXRoLmF0YW4yKGwqYS1jKm8scypuLXUqaSksbnQoYyphK2wqbyldfXZhciBuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCksYT1NYXRoLmNvcyhlKSxvPU1hdGguc2luKGUpO3JldHVybiByLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqcixsPU1hdGguc2luKHQpKnIsdT1NYXRoLnNpbihlKSxjPXUqYS1sKm87cmV0dXJuW01hdGguYXRhbjIobCphK3UqbyxzKm4rYyppKSxudChjKm4tcyppKV19LHJ9ZnVuY3Rpb24gdnIodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD1vKmU7bnVsbCE9aT8oaT1ncihyLGkpLGE9Z3IocixhKSwobz4wP2k8YTppPmEpJiYoaSs9bypCbykpOihpPXQrbypCbyxhPXQtLjUqbCk7Zm9yKHZhciB1LGM9aTtvPjA/Yz5hOmM8YTtjLT1sKXMucG9pbnQoKHU9TWUoW3IsLW4qTWF0aC5jb3MoYyksLW4qTWF0aC5zaW4oYyldKSlbMF0sdVsxXSl9fWZ1bmN0aW9uIGdyKHQsZSl7dmFyIHI9Z2UoZSk7clswXS09dCx3ZShyKTt2YXIgbj1ydCgtclsxXSk7cmV0dXJuKCgtclsyXTwwPy1uOm4pKzIqTWF0aC5QSS1GbyklKDIqTWF0aC5QSSl9ZnVuY3Rpb24geXIodCxlLHIpe3ZhciBuPXVvLnJhbmdlKHQsZS1GbyxyKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pfX1mdW5jdGlvbiBicih0LGUscil7dmFyIG49dW8ucmFuZ2UodCxlLUZvLHIpLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSl9fWZ1bmN0aW9uIHhyKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gd3IodCxlLHIsbil7dmFyIGk9TWF0aC5jb3MoZSksYT1NYXRoLnNpbihlKSxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1pKk1hdGguY29zKHQpLHU9aSpNYXRoLnNpbih0KSxjPW8qTWF0aC5jb3MociksaD1vKk1hdGguc2luKHIpLGY9MipNYXRoLmFzaW4oTWF0aC5zcXJ0KHN0KG4tZSkraSpvKnN0KHItdCkpKSxkPTEvTWF0aC5zaW4oZikscD1mP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc2luKHQqPWYpKmQscj1NYXRoLnNpbihmLXQpKmQsbj1yKmwrZSpjLGk9cip1K2UqaCxvPXIqYStlKnM7cmV0dXJuW01hdGguYXRhbjIoaSxuKSpxbyxNYXRoLmF0YW4yKG8sTWF0aC5zcXJ0KG4qbitpKmkpKSpxb119OmZ1bmN0aW9uKCl7cmV0dXJuW3QqcW8sZSpxb119O3JldHVybiBwLmRpc3RhbmNlPWYscH1mdW5jdGlvbiBNcigpe2Z1bmN0aW9uIHQodCxpKXt2YXIgYT1NYXRoLnNpbihpKj1Ibyksbz1NYXRoLmNvcyhpKSxzPXhvKCh0Kj1IbyktZSksbD1NYXRoLmNvcyhzKTtXcys9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9bypNYXRoLnNpbihzKSkqcysocz1uKmEtcipvKmwpKnMpLHIqYStuKm8qbCksZT10LHI9YSxuPW99dmFyIGUscixuO1pzLnBvaW50PWZ1bmN0aW9uKGksYSl7ZT1pKkhvLHI9TWF0aC5zaW4oYSo9SG8pLG49TWF0aC5jb3MoYSksWnMucG9pbnQ9dH0sWnMubGluZUVuZD1mdW5jdGlvbigpe1pzLnBvaW50PVpzLmxpbmVFbmQ9TX19ZnVuY3Rpb24ga3IodCxlKXtmdW5jdGlvbiByKGUscil7dmFyIG49TWF0aC5jb3MoZSksaT1NYXRoLmNvcyhyKSxhPXQobippKTtyZXR1cm5bYSppKk1hdGguc2luKGUpLGEqTWF0aC5zaW4ocildfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3ZhciBuPU1hdGguc3FydCh0KnQrcipyKSxpPWUobiksYT1NYXRoLnNpbihpKSxvPU1hdGguY29zKGkpO3JldHVybltNYXRoLmF0YW4yKHQqYSxuKm8pLE1hdGguYXNpbihuJiZyKmEvbildfSxyfWZ1bmN0aW9uIEFyKHQsZSl7ZnVuY3Rpb24gcih0LGUpe28+MD9lPC1WbytGbyYmKGU9LVZvK0ZvKTplPlZvLUZvJiYoZT1Wby1Gbyk7dmFyIHI9by9NYXRoLnBvdyhpKGUpLGEpO3JldHVybltyKk1hdGguc2luKGEqdCksby1yKk1hdGguY29zKGEqdCldfXZhciBuPU1hdGguY29zKHQpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgudGFuKE5vLzQrdC8yKX0sYT10PT09ZT9NYXRoLnNpbih0KTpNYXRoLmxvZyhuL01hdGguY29zKGUpKS9NYXRoLmxvZyhpKGUpL2kodCkpLG89bipNYXRoLnBvdyhpKHQpLGEpL2E7cmV0dXJuIGE/KHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9by1lLG49dHQoYSkqTWF0aC5zcXJ0KHQqdCtyKnIpO3JldHVybltNYXRoLmF0YW4yKHQscikvYSwyKk1hdGguYXRhbihNYXRoLnBvdyhvL24sMS9hKSktVm9dfSxyKTpTcn1mdW5jdGlvbiBUcih0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1hLWU7cmV0dXJuW3IqTWF0aC5zaW4oaSp0KSxhLXIqTWF0aC5jb3MoaSp0KV19dmFyIG49TWF0aC5jb3ModCksaT10PT09ZT9NYXRoLnNpbih0KToobi1NYXRoLmNvcyhlKSkvKGUtdCksYT1uL2krdDtyZXR1cm4geG8oaSk8Rm8/Y3I6KHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lO3JldHVybltNYXRoLmF0YW4yKHQscikvaSxhLXR0KGkpKk1hdGguc3FydCh0KnQrcipyKV19LHIpfWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuW3QsTWF0aC5sb2coTWF0aC50YW4oTm8vNCtlLzIpKV19ZnVuY3Rpb24gRXIodCl7dmFyIGUscj1zcih0KSxuPXIuc2NhbGUsaT1yLnRyYW5zbGF0ZSxhPXIuY2xpcEV4dGVudDtyZXR1cm4gci5zY2FsZT1mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiB0PT09cj9lP3IuY2xpcEV4dGVudChudWxsKTpyOnR9LHIudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBvPWEuYXBwbHkocixhcmd1bWVudHMpO2lmKG89PT1yKXtpZihlPW51bGw9PXQpe3ZhciBzPU5vKm4oKSxsPWkoKTthKFtbbFswXS1zLGxbMV0tc10sW2xbMF0rcyxsWzFdK3NdXSl9fWVsc2UgZSYmKG89bnVsbCk7cmV0dXJuIG99LHIuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBMcih0LGUpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihOby80K2UvMikpLC10XX1mdW5jdGlvbiBDcih0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB6cih0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBJcih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8ZTtpKyspe2Zvcig7bj4xJiZldCh0W3Jbbi0yXV0sdFtyW24tMV1dLHRbaV0pPD0wOyktLW47cltuKytdPWl9cmV0dXJuIHIuc2xpY2UoMCxuKX1mdW5jdGlvbiBEcih0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBQcih0LGUscil7cmV0dXJuKHJbMF0tZVswXSkqKHRbMV0tZVsxXSk8KHJbMV0tZVsxXSkqKHRbMF0tZVswXSl9ZnVuY3Rpb24gT3IodCxlLHIsbil7dmFyIGk9dFswXSxhPXJbMF0sbz1lWzBdLWkscz1uWzBdLWEsbD10WzFdLHU9clsxXSxjPWVbMV0tbCxoPW5bMV0tdSxmPShzKihsLXUpLWgqKGktYSkpLyhoKm8tcypjKTtyZXR1cm5baStmKm8sbCtmKmNdfWZ1bmN0aW9uIFJyKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiEoZVswXS1yWzBdfHxlWzFdLXJbMV0pfWZ1bmN0aW9uIEZyKCl7YW4odGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIGpyKHQpe3ZhciBlPXNsLnBvcCgpfHxuZXcgRnI7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gTnIodCl7WnIodCksaWwucmVtb3ZlKHQpLHNsLnB1c2godCksYW4odCl9ZnVuY3Rpb24gQnIodCl7dmFyIGU9dC5jaXJjbGUscj1lLngsbj1lLmN5LGk9e3g6cix5Om59LGE9dC5QLG89dC5OLHM9W3RdO05yKHQpO2Zvcih2YXIgbD1hO2wuY2lyY2xlJiZ4byhyLWwuY2lyY2xlLngpPEZvJiZ4byhuLWwuY2lyY2xlLmN5KTxGbzspYT1sLlAscy51bnNoaWZ0KGwpLE5yKGwpLGw9YTtzLnVuc2hpZnQobCksWnIobCk7Zm9yKHZhciB1PW87dS5jaXJjbGUmJnhvKHItdS5jaXJjbGUueCk8Rm8mJnhvKG4tdS5jaXJjbGUuY3kpPEZvOylvPXUuTixzLnB1c2godSksTnIodSksdT1vO3MucHVzaCh1KSxacih1KTt2YXIgYyxoPXMubGVuZ3RoO2ZvcihjPTE7YzxoOysrYyl1PXNbY10sbD1zW2MtMV0sZW4odS5lZGdlLGwuc2l0ZSx1LnNpdGUsaSk7bD1zWzBdLHU9c1toLTFdLHUuZWRnZT0kcihsLnNpdGUsdS5zaXRlLG51bGwsaSksV3IobCksV3IodSl9ZnVuY3Rpb24gVXIodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9aWwuXztzOylpZigobj1WcihzLG8pLWEpPkZvKXM9cy5MO2Vsc2V7aWYoISgoaT1hLUhyKHMsbykpPkZvKSl7bj4tRm8/KGU9cy5QLHI9cyk6aT4tRm8/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPWpyKHQpO2lmKGlsLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBacihlKSxyPWpyKGUuc2l0ZSksaWwuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT0kcihlLnNpdGUsbC5zaXRlKSxXcihlKSx2b2lkIFdyKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT0kcihlLnNpdGUsbC5zaXRlKSk7WnIoZSksWnIocik7dmFyIHU9ZS5zaXRlLGM9dS54LGg9dS55LGY9dC54LWMsZD10LnktaCxwPXIuc2l0ZSxtPXAueC1jLHY9cC55LWgsZz0yKihmKnYtZCptKSx5PWYqZitkKmQsYj1tKm0rdip2LHg9e3g6KHYqeS1kKmIpL2crYyx5OihmKmItbSp5KS9nK2h9O2VuKHIuZWRnZSx1LHAseCksbC5lZGdlPSRyKHUsdCxudWxsLHgpLHIuZWRnZT0kcih0LHAsbnVsbCx4KSxXcihlKSxXcihyKX19ZnVuY3Rpb24gVnIodCxlKXt2YXIgcj10LnNpdGUsbj1yLngsaT1yLnksYT1pLWU7aWYoIWEpcmV0dXJuIG47dmFyIG89dC5QO2lmKCFvKXJldHVybi0xLzA7cj1vLnNpdGU7dmFyIHM9ci54LGw9ci55LHU9bC1lO2lmKCF1KXJldHVybiBzO3ZhciBjPXMtbixoPTEvYS0xL3UsZj1jL3U7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKihjKmMvKC0yKnUpLWwrdS8yK2ktYS8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIEhyKHQsZSl7dmFyIHI9dC5OO2lmKHIpcmV0dXJuIFZyKHIsZSk7dmFyIG49dC5zaXRlO3JldHVybiBuLnk9PT1lP24ueDoxLzB9ZnVuY3Rpb24gcXIodCl7dGhpcy5zaXRlPXQsdGhpcy5lZGdlcz1bXX1mdW5jdGlvbiBHcih0KXtmb3IodmFyIGUscixuLGksYSxvLHMsbCx1LGMsaD10WzBdWzBdLGY9dFsxXVswXSxkPXRbMF1bMV0scD10WzFdWzFdLG09bmwsdj1tLmxlbmd0aDt2LS07KWlmKChhPW1bdl0pJiZhLnByZXBhcmUoKSlmb3Iocz1hLmVkZ2VzLGw9cy5sZW5ndGgsbz0wO288bDspYz1zW29dLmVuZCgpLG49Yy54LGk9Yy55LHU9c1srK28lbF0uc3RhcnQoKSxlPXUueCxyPXUueSwoeG8obi1lKT5Gb3x8eG8oaS1yKT5GbykmJihzLnNwbGljZShvLDAsbmV3IHJuKHRuKGEuc2l0ZSxjLHhvKG4taCk8Rm8mJnAtaT5Gbz97eDpoLHk6eG8oZS1oKTxGbz9yOnB9OnhvKGktcCk8Rm8mJmYtbj5Gbz97eDp4byhyLXApPEZvP2U6Zix5OnB9OnhvKG4tZik8Rm8mJmktZD5Gbz97eDpmLHk6eG8oZS1mKTxGbz9yOmR9OnhvKGktZCk8Rm8mJm4taD5Gbz97eDp4byhyLWQpPEZvP2U6aCx5OmR9Om51bGwpLGEuc2l0ZSxudWxsKSksKytsKX1mdW5jdGlvbiBZcih0LGUpe3JldHVybiBlLmFuZ2xlLXQuYW5nbGV9ZnVuY3Rpb24gWHIoKXthbih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gV3IodCl7dmFyIGU9dC5QLHI9dC5OO2lmKGUmJnIpe3ZhciBuPWUuc2l0ZSxpPXQuc2l0ZSxhPXIuc2l0ZTtpZihuIT09YSl7dmFyIG89aS54LHM9aS55LGw9bi54LW8sdT1uLnktcyxjPWEueC1vLGg9YS55LXMsZj0yKihsKmgtdSpjKTtpZighKGY+PS1qbykpe3ZhciBkPWwqbCt1KnUscD1jKmMraCpoLG09KGgqZC11KnApL2Ysdj0obCpwLWMqZCkvZixoPXYrcyxnPWxsLnBvcCgpfHxuZXcgWHI7Zy5hcmM9dCxnLnNpdGU9aSxnLng9bStvLGcueT1oK01hdGguc3FydChtKm0rdip2KSxnLmN5PWgsdC5jaXJjbGU9Zztmb3IodmFyIHk9bnVsbCxiPW9sLl87YjspaWYoZy55PGIueXx8Zy55PT09Yi55JiZnLng8PWIueCl7aWYoIWIuTCl7eT1iLlA7YnJlYWt9Yj1iLkx9ZWxzZXtpZighYi5SKXt5PWI7YnJlYWt9Yj1iLlJ9b2wuaW5zZXJ0KHksZykseXx8KGFsPWcpfX19fWZ1bmN0aW9uIFpyKHQpe3ZhciBlPXQuY2lyY2xlO2UmJihlLlB8fChhbD1lLk4pLG9sLnJlbW92ZShlKSxsbC5wdXNoKGUpLGFuKGUpLHQuY2lyY2xlPW51bGwpfWZ1bmN0aW9uIEpyKHQpe2Zvcih2YXIgZSxyPXJsLG49cWUodFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSksaT1yLmxlbmd0aDtpLS07KWU9cltpXSwoIUtyKGUsdCl8fCFuKGUpfHx4byhlLmEueC1lLmIueCk8Rm8mJnhvKGUuYS55LWUuYi55KTxGbykmJihlLmE9ZS5iPW51bGwsci5zcGxpY2UoaSwxKSl9ZnVuY3Rpb24gS3IodCxlKXt2YXIgcj10LmI7aWYocilyZXR1cm4hMDt2YXIgbixpLGE9dC5hLG89ZVswXVswXSxzPWVbMV1bMF0sbD1lWzBdWzFdLHU9ZVsxXVsxXSxjPXQubCxoPXQucixmPWMueCxkPWMueSxwPWgueCxtPWgueSx2PShmK3ApLzIsZz0oZCttKS8yO2lmKG09PT1kKXtpZih2PG98fHY+PXMpcmV0dXJuO2lmKGY+cCl7aWYoYSl7aWYoYS55Pj11KXJldHVybn1lbHNlIGE9e3g6dix5Omx9O3I9e3g6dix5OnV9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDp2LHk6dX07cj17eDp2LHk6bH19fWVsc2UgaWYobj0oZi1wKS8obS1kKSxpPWctbip2LG48LTF8fG4+MSlpZihmPnApe2lmKGEpe2lmKGEueT49dSlyZXR1cm59ZWxzZSBhPXt4OihsLWkpL24seTpsfTtyPXt4Oih1LWkpL24seTp1fX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6KHUtaSkvbix5OnV9O3I9e3g6KGwtaSkvbix5Omx9fWVsc2UgaWYoZDxtKXtpZihhKXtpZihhLng+PXMpcmV0dXJufWVsc2UgYT17eDpvLHk6bipvK2l9O3I9e3g6cyx5Om4qcytpfX1lbHNle2lmKGEpe2lmKGEueDxvKXJldHVybn1lbHNlIGE9e3g6cyx5Om4qcytpfTtyPXt4Om8seTpuKm8raX19cmV0dXJuIHQuYT1hLHQuYj1yLCEwfWZ1bmN0aW9uIFFyKHQsZSl7dGhpcy5sPXQsdGhpcy5yPWUsdGhpcy5hPXRoaXMuYj1udWxsfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3ZhciBpPW5ldyBRcih0LGUpO3JldHVybiBybC5wdXNoKGkpLHImJmVuKGksdCxlLHIpLG4mJmVuKGksZSx0LG4pLG5sW3QuaV0uZWRnZXMucHVzaChuZXcgcm4oaSx0LGUpKSwKbmxbZS5pXS5lZGdlcy5wdXNoKG5ldyBybihpLGUsdCkpLGl9ZnVuY3Rpb24gdG4odCxlLHIpe3ZhciBuPW5ldyBRcih0LG51bGwpO3JldHVybiBuLmE9ZSxuLmI9cixybC5wdXNoKG4pLG59ZnVuY3Rpb24gZW4odCxlLHIsbil7dC5hfHx0LmI/dC5sPT09cj90LmI9bjp0LmE9bjoodC5hPW4sdC5sPWUsdC5yPXIpfWZ1bmN0aW9uIHJuKHQsZSxyKXt2YXIgbj10LmEsaT10LmI7dGhpcy5lZGdlPXQsdGhpcy5zaXRlPWUsdGhpcy5hbmdsZT1yP01hdGguYXRhbjIoci55LWUueSxyLngtZS54KTp0Lmw9PT1lP01hdGguYXRhbjIoaS54LW4ueCxuLnktaS55KTpNYXRoLmF0YW4yKG4ueC1pLngsaS55LW4ueSl9ZnVuY3Rpb24gbm4oKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBhbih0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIG9uKHQsZSl7dmFyIHI9ZSxuPWUuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBzbih0LGUpe3ZhciByPWUsbj1lLkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gbG4odCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIHVuKHQsZSl7dmFyIHIsbixpLGE9dC5zb3J0KGNuKS5wb3AoKTtmb3Iocmw9W10sbmw9bmV3IEFycmF5KHQubGVuZ3RoKSxpbD1uZXcgbm4sb2w9bmV3IG5uOzspaWYoaT1hbCxhJiYoIWl8fGEueTxpLnl8fGEueT09PWkueSYmYS54PGkueCkpYS54PT09ciYmYS55PT09bnx8KG5sW2EuaV09bmV3IHFyKGEpLFVyKGEpLHI9YS54LG49YS55KSxhPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztCcihpLmFyYyl9ZSYmKEpyKGUpLEdyKGUpKTt2YXIgbz17Y2VsbHM6bmwsZWRnZXM6cmx9O3JldHVybiBpbD1vbD1ybD1ubD1udWxsLG99ZnVuY3Rpb24gY24odCxlKXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH1mdW5jdGlvbiBobih0LGUscil7cmV0dXJuKHQueC1yLngpKihlLnktdC55KS0odC54LWUueCkqKHIueS10LnkpfWZ1bmN0aW9uIGZuKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZG4odCl7cmV0dXJuIHQueX1mdW5jdGlvbiBwbigpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gbW4odCxlLHIsbixpLGEpe2lmKCF0KGUscixuLGksYSkpe3ZhciBvPS41KihyK2kpLHM9LjUqKG4rYSksbD1lLm5vZGVzO2xbMF0mJm1uKHQsbFswXSxyLG4sbyxzKSxsWzFdJiZtbih0LGxbMV0sbyxuLGkscyksbFsyXSYmbW4odCxsWzJdLHIscyxvLGEpLGxbM10mJm1uKHQsbFszXSxvLHMsaSxhKX19ZnVuY3Rpb24gdm4odCxlLHIsbixpLGEsbyl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHQodSxjLGgsZixkKXtpZighKGM+YXx8aD5vfHxmPG58fGQ8aSkpe2lmKHA9dS5wb2ludCl7dmFyIHAsbT1lLXUueCx2PXItdS55LGc9bSptK3YqdjtpZihnPGwpe3ZhciB5PU1hdGguc3FydChsPWcpO249ZS15LGk9ci15LGE9ZSt5LG89cit5LHM9cH19Zm9yKHZhciBiPXUubm9kZXMseD0uNSooYytmKSxfPS41KihoK2QpLHc9ZT49eCxNPXI+PV8saz1NPDwxfHcsQT1rKzQ7azxBOysraylpZih1PWJbMyZrXSlzd2l0Y2goMyZrKXtjYXNlIDA6dCh1LGMsaCx4LF8pO2JyZWFrO2Nhc2UgMTp0KHUseCxoLGYsXyk7YnJlYWs7Y2FzZSAyOnQodSxjLF8seCxkKTticmVhaztjYXNlIDM6dCh1LHgsXyxmLGQpfX19KHQsbixpLGEsbyksc31mdW5jdGlvbiBnbih0LGUpe3Q9dW8ucmdiKHQpLGU9dW8ucmdiKGUpO3ZhciByPXQucixuPXQuZyxpPXQuYixhPWUuci1yLG89ZS5nLW4scz1lLmItaTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIiMiK3d0KE1hdGgucm91bmQocithKnQpKSt3dChNYXRoLnJvdW5kKG4rbyp0KSkrd3QoTWF0aC5yb3VuZChpK3MqdCkpfX1mdW5jdGlvbiB5bih0LGUpe3ZhciByLG49e30saT17fTtmb3IociBpbiB0KXIgaW4gZT9uW3JdPV9uKHRbcl0sZVtyXSk6aVtyXT10W3JdO2ZvcihyIGluIGUpciBpbiB0fHwoaVtyXT1lW3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fWZ1bmN0aW9uIGJuKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIHhuKHQsZSl7dmFyIHIsbixpLGE9Y2wubGFzdEluZGV4PWhsLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1jbC5leGVjKHQpKSYmKG49aGwuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OmJuKHIsbil9KSksYT1obC5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gZX06KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gX24odCxlKXtmb3IodmFyIHIsbj11by5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLW4+PTAmJiEocj11by5pbnRlcnBvbGF0b3JzW25dKHQsZSkpOyk7cmV0dXJuIHJ9ZnVuY3Rpb24gd24odCxlKXt2YXIgcixuPVtdLGk9W10sYT10Lmxlbmd0aCxvPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cjxzOysrciluLnB1c2goX24odFtyXSxlW3JdKSk7Zm9yKDtyPGE7KytyKWlbcl09dFtyXTtmb3IoO3I8bzsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8czsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBNbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDplPj0xPzE6dChlKX19ZnVuY3Rpb24ga24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gQW4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gVG4odCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBTbih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gRW4odCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIExuKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gQ24odCl7cmV0dXJuIDEtTWF0aC5jb3ModCpWbyl9ZnVuY3Rpb24gem4odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqKHQtMSkpfWZ1bmN0aW9uIEluKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gRG4odCxlKXt2YXIgcjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/cj1lL0JvKk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpLGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqQm8vZSl9fWZ1bmN0aW9uIFBuKHQpe3JldHVybiB0fHwodD0xLjcwMTU4KSxmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX1mdW5jdGlvbiBPbih0KXtyZXR1cm4gdDwxLzIuNzU/Ny41NjI1KnQqdDp0PDIvMi43NT83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NTp0PDIuNS8yLjc1PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIFJuKHQsZSl7dD11by5oY2wodCksZT11by5oY2woZSk7dmFyIHI9dC5oLG49dC5jLGk9dC5sLGE9ZS5oLXIsbz1lLmMtbixzPWUubC1pO3JldHVybiBpc05hTihvKSYmKG89MCxuPWlzTmFOKG4pP2UuYzpuKSxpc05hTihhKT8oYT0wLHI9aXNOYU4ocik/ZS5oOnIpOmE+MTgwP2EtPTM2MDphPC0xODAmJihhKz0zNjApLGZ1bmN0aW9uKHQpe3JldHVybiBmdChyK2EqdCxuK28qdCxpK3MqdCkrIiJ9fWZ1bmN0aW9uIEZuKHQsZSl7dD11by5oc2wodCksZT11by5oc2woZSk7dmFyIHI9dC5oLG49dC5zLGk9dC5sLGE9ZS5oLXIsbz1lLnMtbixzPWUubC1pO3JldHVybiBpc05hTihvKSYmKG89MCxuPWlzTmFOKG4pP2UuczpuKSxpc05hTihhKT8oYT0wLHI9aXNOYU4ocik/ZS5oOnIpOmE+MTgwP2EtPTM2MDphPC0xODAmJihhKz0zNjApLGZ1bmN0aW9uKHQpe3JldHVybiBjdChyK2EqdCxuK28qdCxpK3MqdCkrIiJ9fWZ1bmN0aW9uIGpuKHQsZSl7dD11by5sYWIodCksZT11by5sYWIoZSk7dmFyIHI9dC5sLG49dC5hLGk9dC5iLGE9ZS5sLXIsbz1lLmEtbixzPWUuYi1pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcHQocithKnQsbitvKnQsaStzKnQpKyIifX1mdW5jdGlvbiBObih0LGUpe3JldHVybiBlLT10LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19ZnVuY3Rpb24gQm4odCl7dmFyIGU9W3QuYSx0LmJdLHI9W3QuYyx0LmRdLG49Vm4oZSksaT1VbihlLHIpLGE9Vm4oSG4ocixlLC1pKSl8fDA7ZVswXSpyWzFdPHJbMF0qZVsxXSYmKGVbMF0qPS0xLGVbMV0qPS0xLG4qPS0xLGkqPS0xKSx0aGlzLnJvdGF0ZT0obj9NYXRoLmF0YW4yKGVbMV0sZVswXSk6TWF0aC5hdGFuMigtclswXSxyWzFdKSkqcW8sdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W24sYV0sdGhpcy5za2V3PWE/TWF0aC5hdGFuMihpLGEpKnFvOjB9ZnVuY3Rpb24gVW4odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiBWbih0KXt2YXIgZT1NYXRoLnNxcnQoVW4odCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9ZnVuY3Rpb24gSG4odCxlLHIpe3JldHVybiB0WzBdKz1yKmVbMF0sdFsxXSs9ciplWzFdLHR9ZnVuY3Rpb24gcW4odCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiwiOiIifWZ1bmN0aW9uIEduKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmJuKHRbMF0sZVswXSl9LHtpOmktMix4OmJuKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goInRyYW5zbGF0ZSgiK2UrIikiKX1mdW5jdGlvbiBZbih0LGUscixuKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksbi5wdXNoKHtpOnIucHVzaChxbihyKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpibih0LGUpfSkpOmUmJnIucHVzaChxbihyKSsicm90YXRlKCIrZSsiKSIpfWZ1bmN0aW9uIFhuKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2gocW4ocikrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpibih0LGUpfSk6ZSYmci5wdXNoKHFuKHIpKyJza2V3WCgiK2UrIikiKX1mdW5jdGlvbiBXbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChxbihyKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmJuKHRbMF0sZVswXSl9LHtpOmktMix4OmJuKHRbMV0sZVsxXSl9KX1lbHNlIDE9PT1lWzBdJiYxPT09ZVsxXXx8ci5wdXNoKHFuKHIpKyJzY2FsZSgiK2UrIikiKX1mdW5jdGlvbiBabih0LGUpe3ZhciByPVtdLG49W107cmV0dXJuIHQ9dW8udHJhbnNmb3JtKHQpLGU9dW8udHJhbnNmb3JtKGUpLEduKHQudHJhbnNsYXRlLGUudHJhbnNsYXRlLHIsbiksWW4odC5yb3RhdGUsZS5yb3RhdGUscixuKSxYbih0LnNrZXcsZS5za2V3LHIsbiksV24odC5zY2FsZSxlLnNjYWxlLHIsbiksdD1lPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspclsoZT1uW2ldKS5pXT1lLngodCk7cmV0dXJuIHIuam9pbigiIil9fWZ1bmN0aW9uIEpuKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX19ZnVuY3Rpb24gS24odCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChyLXQpL2UpKX19ZnVuY3Rpb24gUW4odCl7Zm9yKHZhciBlPXQuc291cmNlLHI9dC50YXJnZXQsbj10aShlLHIpLGk9W2VdO2UhPT1uOyllPWUucGFyZW50LGkucHVzaChlKTtmb3IodmFyIGE9aS5sZW5ndGg7ciE9PW47KWkuc3BsaWNlKGEsMCxyKSxyPXIucGFyZW50O3JldHVybiBpfWZ1bmN0aW9uICRuKHQpe2Zvcih2YXIgZT1bXSxyPXQucGFyZW50O251bGwhPXI7KWUucHVzaCh0KSx0PXIscj1yLnBhcmVudDtyZXR1cm4gZS5wdXNoKHQpLGV9ZnVuY3Rpb24gdGkodCxlKXtpZih0PT09ZSlyZXR1cm4gdDtmb3IodmFyIHI9JG4odCksbj0kbihlKSxpPXIucG9wKCksYT1uLnBvcCgpLG89bnVsbDtpPT09YTspbz1pLGk9ci5wb3AoKSxhPW4ucG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gZWkodCl7dC5maXhlZHw9Mn1mdW5jdGlvbiByaSh0KXt0LmZpeGVkJj0tN31mdW5jdGlvbiBuaSh0KXt0LmZpeGVkfD00LHQucHg9dC54LHQucHk9dC55fWZ1bmN0aW9uIGlpKHQpe3QuZml4ZWQmPS01fWZ1bmN0aW9uIGFpKHQsZSxyKXt2YXIgbj0wLGk9MDtpZih0LmNoYXJnZT0wLCF0LmxlYWYpZm9yKHZhciBhLG89dC5ub2RlcyxzPW8ubGVuZ3RoLGw9LTE7KytsPHM7KW51bGwhPShhPW9bbF0pJiYoYWkoYSxlLHIpLHQuY2hhcmdlKz1hLmNoYXJnZSxuKz1hLmNoYXJnZSphLmN4LGkrPWEuY2hhcmdlKmEuY3kpO2lmKHQucG9pbnQpe3QubGVhZnx8KHQucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSx0LnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PWUqclt0LnBvaW50LmluZGV4XTt0LmNoYXJnZSs9dC5wb2ludENoYXJnZT11LG4rPXUqdC5wb2ludC54LGkrPXUqdC5wb2ludC55fXQuY3g9bi90LmNoYXJnZSx0LmN5PWkvdC5jaGFyZ2V9ZnVuY3Rpb24gb2kodCxlKXtyZXR1cm4gdW8ucmViaW5kKHQsZSwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSx0Lm5vZGVzPXQsdC5saW5rcz1maSx0fWZ1bmN0aW9uIHNpKHQsZSl7Zm9yKHZhciByPVt0XTtudWxsIT0odD1yLnBvcCgpKTspaWYoZSh0KSwoaT10LmNoaWxkcmVuKSYmKG49aS5sZW5ndGgpKWZvcih2YXIgbixpOy0tbj49MDspci5wdXNoKGlbbl0pfWZ1bmN0aW9uIGxpKHQsZSl7Zm9yKHZhciByPVt0XSxuPVtdO251bGwhPSh0PXIucG9wKCkpOylpZihuLnB1c2godCksKGE9dC5jaGlsZHJlbikmJihpPWEubGVuZ3RoKSlmb3IodmFyIGksYSxvPS0xOysrbzxpOylyLnB1c2goYVtvXSk7Zm9yKDtudWxsIT0odD1uLnBvcCgpKTspZSh0KX1mdW5jdGlvbiB1aSh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBjaSh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBoaSh0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHVvLm1lcmdlKHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dCx0YXJnZXQ6ZX19KX0pKX1mdW5jdGlvbiBkaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIHBpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gbWkodCxlLHIpe3QueTA9ZSx0Lnk9cn1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdW8ucmFuZ2UodC5sZW5ndGgpfWZ1bmN0aW9uIGdpKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiB5aSh0KXtmb3IodmFyIGUscj0xLG49MCxpPXRbMF1bMV0sYT10Lmxlbmd0aDtyPGE7KytyKShlPXRbcl1bMV0pPmkmJihuPXIsaT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBiaSh0KXtyZXR1cm4gdC5yZWR1Y2UoeGksMCl9ZnVuY3Rpb24geGkodCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIF9pKHQsZSl7cmV0dXJuIHdpKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gd2kodCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxpPSh0WzFdLW4pL2UsYT1bXTsrK3I8PWU7KWFbcl09aSpyK247cmV0dXJuIGF9ZnVuY3Rpb24gTWkodCl7cmV0dXJuW3VvLm1pbih0KSx1by5tYXgodCldfWZ1bmN0aW9uIGtpKHQsZSl7cmV0dXJuIHQudmFsdWUtZS52YWx1ZX1mdW5jdGlvbiBBaSh0LGUpe3ZhciByPXQuX3BhY2tfbmV4dDt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dCxlLl9wYWNrX25leHQ9cixyLl9wYWNrX3ByZXY9ZX1mdW5jdGlvbiBUaSh0LGUpe3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10fWZ1bmN0aW9uIFNpKHQsZSl7dmFyIHI9ZS54LXQueCxuPWUueS10LnksaT10LnIrZS5yO3JldHVybi45OTkqaSppPnIqcituKm59ZnVuY3Rpb24gRWkodCl7ZnVuY3Rpb24gZSh0KXtjPU1hdGgubWluKHQueC10LnIsYyksaD1NYXRoLm1heCh0LngrdC5yLGgpLGY9TWF0aC5taW4odC55LXQucixmKSxkPU1hdGgubWF4KHQueSt0LnIsZCl9aWYoKHI9dC5jaGlsZHJlbikmJih1PXIubGVuZ3RoKSl7dmFyIHIsbixpLGEsbyxzLGwsdSxjPTEvMCxoPS0xLzAsZj0xLzAsZD0tMS8wO2lmKHIuZm9yRWFjaChMaSksbj1yWzBdLG4ueD0tbi5yLG4ueT0wLGUobiksdT4xJiYoaT1yWzFdLGkueD1pLnIsaS55PTAsZShpKSx1PjIpKWZvcihhPXJbMl0sSWkobixpLGEpLGUoYSksQWkobixhKSxuLl9wYWNrX3ByZXY9YSxBaShhLGkpLGk9bi5fcGFja19uZXh0LG89MztvPHU7bysrKXtJaShuLGksYT1yW29dKTt2YXIgcD0wLG09MSx2PTE7Zm9yKHM9aS5fcGFja19uZXh0O3MhPT1pO3M9cy5fcGFja19uZXh0LG0rKylpZihTaShzLGEpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IobD1uLl9wYWNrX3ByZXY7bCE9PXMuX3BhY2tfcHJldiYmIVNpKGwsYSk7bD1sLl9wYWNrX3ByZXYsdisrKTtwPyhtPHZ8fG09PXYmJmkucjxuLnI/VGkobixpPXMpOlRpKG49bCxpKSxvLS0pOihBaShuLGEpLGk9YSxlKGEpKX12YXIgZz0oYytoKS8yLHk9KGYrZCkvMixiPTA7Zm9yKG89MDtvPHU7bysrKWE9cltvXSxhLngtPWcsYS55LT15LGI9TWF0aC5tYXgoYixhLnIrTWF0aC5zcXJ0KGEueCphLngrYS55KmEueSkpO3Qucj1iLHIuZm9yRWFjaChDaSl9fWZ1bmN0aW9uIExpKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiBDaSh0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gemkodCxlLHIsbil7dmFyIGk9dC5jaGlsZHJlbjtpZih0Lng9ZSs9bip0LngsdC55PXIrPW4qdC55LHQucio9bixpKWZvcih2YXIgYT0tMSxvPWkubGVuZ3RoOysrYTxvOyl6aShpW2FdLGUscixuKX1mdW5jdGlvbiBJaSh0LGUscil7dmFyIG49dC5yK3IucixpPWUueC10LngsYT1lLnktdC55O2lmKG4mJihpfHxhKSl7dmFyIG89ZS5yK3IucixzPWkqaSthKmE7byo9byxuKj1uO3ZhciBsPS41KyhuLW8pLygyKnMpLHU9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK3UqYSxyLnk9dC55K2wqYS11Kml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBEaSh0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIFBpKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIE9pKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiBSaSh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBGaSh0KXtmb3IodmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KWU9aVthXSxlLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX1mdW5jdGlvbiBqaSh0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBOaSh0KXtyZXR1cm4gMSt1by5tYXgodCxmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9ZnVuY3Rpb24gQmkodCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS54fSwwKS90Lmxlbmd0aH1mdW5jdGlvbiBVaSh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlJiZlLmxlbmd0aD9VaShlWzBdKTp0fWZ1bmN0aW9uIFZpKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4gciYmKGU9ci5sZW5ndGgpP1ZpKHJbZS0xXSk6dH1mdW5jdGlvbiBIaSh0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBxaSh0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIEdpKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gWWkodCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOkdpKHQucmFuZ2UoKSl9ZnVuY3Rpb24gWGkodCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gV2kodCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBaaSh0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06d2x9ZnVuY3Rpb24gSmkodCxlLHIsbil7dmFyIGk9W10sYT1bXSxvPTAscz1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMTtmb3IodFtzXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytvPD1zOylpLnB1c2gocih0W28tMV0sdFtvXSkpLGEucHVzaChuKGVbby0xXSxlW29dKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPXVvLmJpc2VjdCh0LGUsMSxzKS0xO3JldHVybiBhW3JdKGlbcl0oZSkpfX1mdW5jdGlvbiBLaSh0LGUscixuKXtmdW5jdGlvbiBpKCl7dmFyIGk9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpPjI/Smk6WGksbD1uP0tuOkpuO3JldHVybiBvPWkodCxlLGwscikscz1pKGUsdCxsLF9uKSxhfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG8odCl9dmFyIG8scztyZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHModCl9LGEuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUubWFwKE51bWJlciksaSgpKTp0fSxhLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaSgpKTplfSxhLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEucmFuZ2UodCkuaW50ZXJwb2xhdGUoTm4pfSxhLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSgpKTpufSxhLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSgpKTpyfSxhLnRpY2tzPWZ1bmN0aW9uKGUpe3JldHVybiBlYSh0LGUpfSxhLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcmEodCxlLHIpfSxhLm5pY2U9ZnVuY3Rpb24oZSl7cmV0dXJuICRpKHQsZSksaSgpfSxhLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS2kodCxlLHIsbil9LGkoKX1mdW5jdGlvbiBRaSh0LGUpe3JldHVybiB1by5yZWJpbmQodCxlLCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gJGkodCxlKXtyZXR1cm4gV2kodCxaaSh0YSh0LGUpWzJdKSksV2kodCxaaSh0YSh0LGUpWzJdKSksdH1mdW5jdGlvbiB0YSh0LGUpe251bGw9PWUmJihlPTEwKTt2YXIgcj1HaSh0KSxuPXJbMV0tclswXSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobi9lKS9NYXRoLkxOMTApKSxhPWUvbippO3JldHVybiBhPD0uMTU/aSo9MTA6YTw9LjM1P2kqPTU6YTw9Ljc1JiYoaSo9MiksclswXT1NYXRoLmNlaWwoclswXS9pKSppLHJbMV09TWF0aC5mbG9vcihyWzFdL2kpKmkrLjUqaSxyWzJdPWkscn1mdW5jdGlvbiBlYSh0LGUpe3JldHVybiB1by5yYW5nZS5hcHBseSh1byx0YSh0LGUpKX1mdW5jdGlvbiByYSh0LGUscil7dmFyIG49dGEodCxlKTtpZihyKXt2YXIgaT1jcy5leGVjKHIpO2lmKGkuc2hpZnQoKSwicyI9PT1pWzhdKXt2YXIgYT11by5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeG8oblswXSkseG8oblsxXSkpKTtyZXR1cm4gaVs3XXx8KGlbN109Ii4iK25hKGEuc2NhbGUoblsyXSkpKSxpWzhdPSJmIixyPXVvLmZvcm1hdChpLmpvaW4oIiIpKSxmdW5jdGlvbih0KXtyZXR1cm4gcihhLnNjYWxlKHQpKSthLnN5bWJvbH19aVs3XXx8KGlbN109Ii4iK2lhKGlbOF0sbikpLHI9aS5qb2luKCIiKX1lbHNlIHI9IiwuIituYShuWzJdKSsiZiI7cmV0dXJuIHVvLmZvcm1hdChyKX1mdW5jdGlvbiBuYSh0KXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBpYSh0LGUpe3ZhciByPW5hKGVbMl0pO3JldHVybiB0IGluIE1sP01hdGguYWJzKHItbmEoTWF0aC5tYXgoeG8oZVswXSkseG8oZVsxXSkpKSkrICsoImUiIT09dCk6ci0yKigiJSI9PT10KX1mdW5jdGlvbiBhYSh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybihyP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKGUpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHI/TWF0aC5wb3coZSx0KTotTWF0aC5wb3coZSwtdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdChpKGUpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodC5pbnZlcnQoZSkpfSxvLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lWzBdPj0wLHQuZG9tYWluKChuPWUubWFwKE51bWJlcikpLm1hcChpKSksbyk6bn0sby5iYXNlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStyLHQuZG9tYWluKG4ubWFwKGkpKSxvKTplfSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgZT1XaShuLm1hcChpKSxyP01hdGg6QWwpO3JldHVybiB0LmRvbWFpbihlKSxuPWUubWFwKGEpLG99LG8udGlja3M9ZnVuY3Rpb24oKXt2YXIgdD1HaShuKSxvPVtdLHM9dFswXSxsPXRbMV0sdT1NYXRoLmZsb29yKGkocykpLGM9TWF0aC5jZWlsKGkobCkpLGg9ZSUxPzI6ZTtpZihpc0Zpbml0ZShjLXUpKXtpZihyKXtmb3IoO3U8Yzt1KyspZm9yKHZhciBmPTE7ZjxoO2YrKylvLnB1c2goYSh1KSpmKTtvLnB1c2goYSh1KSl9ZWxzZSBmb3Ioby5wdXNoKGEodSkpO3UrKzxjOylmb3IodmFyIGY9aC0xO2Y+MDtmLS0pby5wdXNoKGEodSkqZik7Zm9yKHU9MDtvW3VdPHM7dSsrKTtmb3IoYz1vLmxlbmd0aDtvW2MtMV0+bDtjLS0pO289by5zbGljZSh1LGMpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4ga2w7YXJndW1lbnRzLmxlbmd0aDwyP3I9a2w6ImZ1bmN0aW9uIiE9dHlwZW9mIHImJihyPXVvLmZvcm1hdChyKSk7dmFyIG49TWF0aC5tYXgoMSxlKnQvby50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBvPXQvYShNYXRoLnJvdW5kKGkodCkpKTtyZXR1cm4gbyplPGUtLjUmJihvKj1lKSxvPD1uP3IodCk6IiJ9fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYWEodC5jb3B5KCksZSxyLG4pfSxRaShvLHQpfWZ1bmN0aW9uIG9hKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiB0KGkoZSkpfXZhciBpPXNhKGUpLGE9c2EoMS9lKTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodC5pbnZlcnQoZSkpfSxuLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC5kb21haW4oKHI9ZS5tYXAoTnVtYmVyKSkubWFwKGkpKSxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBlYShyLHQpfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcmEocix0LGUpfSxuLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG4uZG9tYWluKCRpKHIsdCkpfSxuLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXNhKGU9byksYT1zYSgxL2UpLHQuZG9tYWluKHIubWFwKGkpKSxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gb2EodC5jb3B5KCksZSxyKX0sUWkobix0KX1mdW5jdGlvbiBzYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gbGEodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBhWygoaS5nZXQocil8fCgicmFuZ2UiPT09ZS50P2kuc2V0KHIsdC5wdXNoKHIpKTpOYU4pKS0xKSVhLmxlbmd0aF19ZnVuY3Rpb24gbihlLHIpe3JldHVybiB1by5yYW5nZSh0Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlK3IqdH0pfXZhciBpLGEsbztyZXR1cm4gci5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ7dD1bXSxpPW5ldyBoO2Zvcih2YXIgYSxvPS0xLHM9bi5sZW5ndGg7KytvPHM7KWkuaGFzKGE9bltvXSl8fGkuc2V0KGEsdC5wdXNoKGEpKTtyZXR1cm4gcltlLnRdLmFwcGx5KHIsZS5hKX0sci5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG89MCxlPXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LHIpOmF9LHIucmFuZ2VQb2ludHM9ZnVuY3Rpb24oaSxzKXthcmd1bWVudHMubGVuZ3RoPDImJihzPTApO3ZhciBsPWlbMF0sdT1pWzFdLGM9dC5sZW5ndGg8Mj8obD0obCt1KS8yLDApOih1LWwpLyh0Lmxlbmd0aC0xK3MpO3JldHVybiBhPW4obCtjKnMvMixjKSxvPTAsZT17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxyfSxyLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24oaSxzKXthcmd1bWVudHMubGVuZ3RoPDImJihzPTApO3ZhciBsPWlbMF0sdT1pWzFdLGM9dC5sZW5ndGg8Mj8obD11PU1hdGgucm91bmQoKGwrdSkvMiksMCk6KHUtbCkvKHQubGVuZ3RoLTErcyl8MDtyZXR1cm4gYT1uKGwrTWF0aC5yb3VuZChjKnMvMisodS1sLSh0Lmxlbmd0aC0xK3MpKmMpLzIpLGMpLG89MCxlPXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30scn0sci5yYW5nZUJhbmRzPWZ1bmN0aW9uKGkscyxsKXthcmd1bWVudHMubGVuZ3RoPDImJihzPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGw9cyk7dmFyIHU9aVsxXTxpWzBdLGM9aVt1LTBdLGg9aVsxLXVdLGY9KGgtYykvKHQubGVuZ3RoLXMrMipsKTtyZXR1cm4gYT1uKGMrZipsLGYpLHUmJmEucmV2ZXJzZSgpLG89ZiooMS1zKSxlPXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30scn0sci5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24oaSxzLGwpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHM9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYobD1zKTt2YXIgdT1pWzFdPGlbMF0sYz1pW3UtMF0saD1pWzEtdV0sZj1NYXRoLmZsb29yKChoLWMpLyh0Lmxlbmd0aC1zKzIqbCkpO3JldHVybiBhPW4oYytNYXRoLnJvdW5kKChoLWMtKHQubGVuZ3RoLXMpKmYpLzIpLGYpLHUmJmEucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChmKigxLXMpKSxlPXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxyfSxyLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfSxyLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIEdpKGUuYVswXSl9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBsYSh0LGUpfSxyLmRvbWFpbih0KX1mdW5jdGlvbiB1YSh0LGUpe2Z1bmN0aW9uIHIoKXt2YXIgcj0wLGk9ZS5sZW5ndGg7Zm9yKHM9W107KytyPGk7KXNbci0xXT11by5xdWFudGlsZSh0LHIvaSk7cmV0dXJuIG59ZnVuY3Rpb24gbih0KXtpZighaXNOYU4odD0rdCkpcmV0dXJuIGVbdW8uYmlzZWN0KHMsdCldfXZhciBzO3JldHVybiBuLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLm1hcChhKS5maWx0ZXIobykuc29ydChpKSxyKCkpOnR9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxyKCkpOmV9LG4ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW5kZXhPZihyKSxyPDA/W05hTixOYU5dOltyPjA/c1tyLTFdOnRbMF0scjxzLmxlbmd0aD9zW3JdOnRbdC5sZW5ndGgtMV1dfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdWEodCxlKX0scigpfWZ1bmN0aW9uIGNhKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiByW01hdGgubWF4KDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGEqKGUtdCkpKSldfWZ1bmN0aW9uIGkoKXtyZXR1cm4gYT1yLmxlbmd0aC8oZS10KSxvPXIubGVuZ3RoLTEsbn12YXIgYSxvO3JldHVybiBuLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rclswXSxlPStyW3IubGVuZ3RoLTFdLGkoKSk6W3QsZV19LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKCkpOnJ9LG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXIuaW5kZXhPZihlKSxlPWU8MD9OYU46ZS9hK3QsW2UsZSsxL2FdfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY2EodCxlLHIpfSxpKCl9ZnVuY3Rpb24gaGEodCxlKXtmdW5jdGlvbiByKHIpe2lmKHI8PXIpcmV0dXJuIGVbdW8uYmlzZWN0KHQscildfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHIpOnR9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxyKTplfSxyLmludmVydEV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmluZGV4T2YociksW3Rbci0xXSx0W3JdXX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGhhKHQsZSl9LHJ9ZnVuY3Rpb24gZmEodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4rdH1yZXR1cm4gZS5pbnZlcnQ9ZSxlLmRvbWFpbj1lLnJhbmdlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIubWFwKGUpLGUpOnR9LGUudGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKHQsZSl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe3JldHVybiByYSh0LGUscil9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBmYSh0KX0sZX1mdW5jdGlvbiBkYSgpe3JldHVybiAwfWZ1bmN0aW9uIHBhKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIG1hKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIHZhKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gZ2EodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24geWEodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYmEodCxlLHIsbil7cmV0dXJuKHQtcikqZS0oZS1uKSp0PjA/MDoxfWZ1bmN0aW9uIHhhKHQsZSxyLG4saSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9KGk/bjotbikvTWF0aC5zcXJ0KGEqYStvKm8pLGw9cypvLHU9LXMqYSxjPXRbMF0rbCxoPXRbMV0rdSxmPWVbMF0rbCxkPWVbMV0rdSxwPShjK2YpLzIsbT0oaCtkKS8yLHY9Zi1jLGc9ZC1oLHk9dip2K2cqZyxiPXItbix4PWMqZC1mKmgsXz0oZzwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLGIqYip5LXgqeCkpLHc9KHgqZy12Kl8pL3ksTT0oLXgqdi1nKl8pL3ksaz0oeCpnK3YqXykveSxBPSgteCp2K2cqXykveSxUPXctcCxTPU0tbSxFPWstcCxMPUEtbTtyZXR1cm4gVCpUK1MqUz5FKkUrTCpMJiYodz1rLE09QSksW1t3LWwsTS11XSxbdypyL2IsTSpyL2JdXX1mdW5jdGlvbiBfYSh0KXtmdW5jdGlvbiBlKGUpe2Z1bmN0aW9uIG8oKXt1LnB1c2goIk0iLGEodChjKSxzKSl9Zm9yKHZhciBsLHU9W10sYz1bXSxoPS0xLGY9ZS5sZW5ndGgsZD1FdChyKSxwPUV0KG4pOysraDxmOylpLmNhbGwodGhpcyxsPWVbaF0saCk/Yy5wdXNoKFsrZC5jYWxsKHRoaXMsbCxoKSwrcC5jYWxsKHRoaXMsbCxoKV0pOmMubGVuZ3RoJiYobygpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmbygpLHUubGVuZ3RoP3Uuam9pbigiIik6bnVsbH12YXIgcj1DcixuPXpyLGk9emUsYT13YSxvPWEua2V5LHM9Ljc7cmV0dXJuIGUueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGUpOnJ9LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGUpOml9LGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/YT10OihhPXpsLmdldCh0KXx8d2EpLmtleSxlKTpvfSxlLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlKTpzfSxlfWZ1bmN0aW9uIHdhKHQpe3JldHVybiB0Lmxlbmd0aD4xP3Quam9pbigiTCIpOnQrIloifWZ1bmN0aW9uIE1hKHQpe3JldHVybiB0LmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24ga2EodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiSCIsKG5bMF0rKG49dFtlXSlbMF0pLzIsIlYiLG5bMV0pO3JldHVybiByPjEmJmkucHVzaCgiSCIsblswXSksaS5qb2luKCIiKX1mdW5jdGlvbiBBYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJWIiwobj10W2VdKVsxXSwiSCIsblswXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gVGEodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiSCIsKG49dFtlXSlbMF0sIlYiLG5bMV0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIFNhKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDQ/d2EodCk6dFsxXStDYSh0LnNsaWNlKDEsLTEpLHphKHQsZSkpfWZ1bmN0aW9uIEVhKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/TWEodCk6dFswXStDYSgodC5wdXNoKHRbMF0pLHQpLHphKFt0W3QubGVuZ3RoLTJdXS5jb25jYXQodCxbdFsxXV0pLGUpKX1mdW5jdGlvbiBMYSh0LGUpe3JldHVybiB0Lmxlbmd0aDwzP3dhKHQpOnRbMF0rQ2EodCx6YSh0LGUpKX1mdW5jdGlvbiBDYSh0LGUpe2lmKGUubGVuZ3RoPDF8fHQubGVuZ3RoIT1lLmxlbmd0aCYmdC5sZW5ndGghPWUubGVuZ3RoKzIpcmV0dXJuIHdhKHQpO3ZhciByPXQubGVuZ3RoIT1lLmxlbmd0aCxuPSIiLGk9dFswXSxhPXRbMV0sbz1lWzBdLHM9byxsPTE7aWYociYmKG4rPSJRIisoYVswXS0yKm9bMF0vMykrIiwiKyhhWzFdLTIqb1sxXS8zKSsiLCIrYVswXSsiLCIrYVsxXSxpPXRbMV0sbD0yKSxlLmxlbmd0aD4xKXtzPWVbMV0sYT10W2xdLGwrKyxuKz0iQyIrKGlbMF0rb1swXSkrIiwiKyhpWzFdK29bMV0pKyIsIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV07Zm9yKHZhciB1PTI7dTxlLmxlbmd0aDt1KyssbCsrKWE9dFtsXSxzPWVbdV0sbis9IlMiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXX1pZihyKXt2YXIgYz10W2xdO24rPSJRIisoYVswXSsyKnNbMF0vMykrIiwiKyhhWzFdKzIqc1sxXS8zKSsiLCIrY1swXSsiLCIrY1sxXX1yZXR1cm4gbn1mdW5jdGlvbiB6YSh0LGUpe2Zvcih2YXIgcixuPVtdLGk9KDEtZSkvMixhPXRbMF0sbz10WzFdLHM9MSxsPXQubGVuZ3RoOysrczxsOylyPWEsYT1vLG89dFtzXSxuLnB1c2goW2kqKG9bMF0tclswXSksaSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIElhKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIHdhKHQpO3ZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT1uWzBdLGE9blsxXSxvPVtpLGksaSwobj10WzFdKVswXV0scz1bYSxhLGEsblsxXV0sbD1baSwiLCIsYSwiTCIsUmEoUGwsbyksIiwiLFJhKFBsLHMpXTtmb3IodC5wdXNoKHRbci0xXSk7KytlPD1yOyluPXRbZV0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxzLnNoaWZ0KCkscy5wdXNoKG5bMV0pLEZhKGwsbyxzKTtyZXR1cm4gdC5wb3AoKSxsLnB1c2goIkwiLG4pLGwuam9pbigiIil9ZnVuY3Rpb24gRGEodCl7aWYodC5sZW5ndGg8NClyZXR1cm4gd2EodCk7Zm9yKHZhciBlLHI9W10sbj0tMSxpPXQubGVuZ3RoLGE9WzBdLG89WzBdOysrbjwzOyllPXRbbl0sYS5wdXNoKGVbMF0pLG8ucHVzaChlWzFdKTtmb3Ioci5wdXNoKFJhKFBsLGEpKyIsIitSYShQbCxvKSksLS1uOysrbjxpOyllPXRbbl0sYS5zaGlmdCgpLGEucHVzaChlWzBdKSxvLnNoaWZ0KCksby5wdXNoKGVbMV0pLEZhKHIsYSxvKTtyZXR1cm4gci5qb2luKCIiKX1mdW5jdGlvbiBQYSh0KXtmb3IodmFyIGUscixuPS0xLGk9dC5sZW5ndGgsYT1pKzQsbz1bXSxzPVtdOysrbjw0OylyPXRbbiVpXSxvLnB1c2goclswXSkscy5wdXNoKHJbMV0pO2ZvcihlPVtSYShQbCxvKSwiLCIsUmEoUGwscyldLC0tbjsrK248YTspcj10W24laV0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxzLnNoaWZ0KCkscy5wdXNoKHJbMV0pLEZhKGUsbyxzKTtyZXR1cm4gZS5qb2luKCIiKX1mdW5jdGlvbiBPYSh0LGUpe3ZhciByPXQubGVuZ3RoLTE7aWYocilmb3IodmFyIG4saSxhPXRbMF1bMF0sbz10WzBdWzFdLHM9dFtyXVswXS1hLGw9dFtyXVsxXS1vLHU9LTE7Kyt1PD1yOyluPXRbdV0saT11L3IsblswXT1lKm5bMF0rKDEtZSkqKGEraSpzKSxuWzFdPWUqblsxXSsoMS1lKSoobytpKmwpO3JldHVybiBJYSh0KX1mdW5jdGlvbiBSYSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119ZnVuY3Rpb24gRmEodCxlLHIpe3QucHVzaCgiQyIsUmEoSWwsZSksIiwiLFJhKElsLHIpLCIsIixSYShEbCxlKSwiLCIsUmEoRGwsciksIiwiLFJhKFBsLGUpLCIsIixSYShQbCxyKSl9ZnVuY3Rpb24gamEodCxlKXtyZXR1cm4oZVsxXS10WzFdKS8oZVswXS10WzBdKX1mdW5jdGlvbiBOYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj1bXSxpPXRbMF0sYT10WzFdLG89blswXT1qYShpLGEpOysrZTxyOyluW2VdPShvKyhvPWphKGk9YSxhPXRbZSsxXSkpKS8yO3JldHVybiBuW2VdPW8sbn1mdW5jdGlvbiBCYSh0KXtmb3IodmFyIGUscixuLGksYT1bXSxvPU5hKHQpLHM9LTEsbD10Lmxlbmd0aC0xOysrczxsOyllPWphKHRbc10sdFtzKzFdKSx4byhlKTxGbz9vW3NdPW9bcysxXT0wOihyPW9bc10vZSxuPW9bcysxXS9lLChpPXIqcituKm4pPjkmJihpPTMqZS9NYXRoLnNxcnQoaSksb1tzXT1pKnIsb1tzKzFdPWkqbikpO2ZvcihzPS0xOysrczw9bDspaT0odFtNYXRoLm1pbihsLHMrMSldWzBdLXRbTWF0aC5tYXgoMCxzLTEpXVswXSkvKDYqKDErb1tzXSpvW3NdKSksYS5wdXNoKFtpfHwwLG9bc10qaXx8MF0pO3JldHVybiBhfWZ1bmN0aW9uIFVhKHQpe3JldHVybiB0Lmxlbmd0aDwzP3dhKHQpOnRbMF0rQ2EodCxCYSh0KSl9ZnVuY3Rpb24gVmEodCl7Zm9yKHZhciBlLHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KWU9dFtpXSxyPWVbMF0sbj1lWzFdLVZvLGVbMF09cipNYXRoLmNvcyhuKSxlWzFdPXIqTWF0aC5zaW4obik7cmV0dXJuIHR9ZnVuY3Rpb24gSGEodCl7ZnVuY3Rpb24gZShlKXtmdW5jdGlvbiBsKCl7bS5wdXNoKCJNIixzKHQoZyksaCksYyx1KHQodi5yZXZlcnNlKCkpLGgpLCJaIil9Zm9yKHZhciBmLGQscCxtPVtdLHY9W10sZz1bXSx5PS0xLGI9ZS5sZW5ndGgseD1FdChyKSxfPUV0KGkpLHc9cj09PW4/ZnVuY3Rpb24oKXtyZXR1cm4gZH06RXQobiksTT1pPT09YT9mdW5jdGlvbigpe3JldHVybiBwfTpFdChhKTsrK3k8Yjspby5jYWxsKHRoaXMsZj1lW3ldLHkpPyh2LnB1c2goW2Q9K3guY2FsbCh0aGlzLGYseSkscD0rXy5jYWxsKHRoaXMsZix5KV0pLGcucHVzaChbK3cuY2FsbCh0aGlzLGYseSksK00uY2FsbCh0aGlzLGYseSldKSk6di5sZW5ndGgmJihsKCksdj1bXSxnPVtdKTtyZXR1cm4gdi5sZW5ndGgmJmwoKSxtLmxlbmd0aD9tLmpvaW4oIiIpOm51bGx9dmFyIHI9Q3Isbj1DcixpPTAsYT16cixvPXplLHM9d2EsbD1zLmtleSx1PXMsYz0iTCIsaD0uNztyZXR1cm4gZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW49dCxlKTpufSxlLngwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZSk6cn0sZS54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1hPXQsZSk6YX0sZS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGUpOml9LGUueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxlKTphfSxlLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxlKTpvfSxlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3M9dDoocz16bC5nZXQodCl8fHdhKS5rZXksdT1zLnJldmVyc2V8fHMsYz1zLmNsb3NlZD8iTSI6IkwiLGUpOmx9LGUudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10LGUpOmh9LGV9ZnVuY3Rpb24gcWEodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIEdhKHQpe3JldHVyblt0LngsdC55XX1mdW5jdGlvbiBZYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPWVbMF0sbj1lWzFdLVZvO3JldHVybltyKk1hdGguY29zKG4pLHIqTWF0aC5zaW4obildfX1mdW5jdGlvbiBYYSgpe3JldHVybiA2NH1mdW5jdGlvbiBXYSgpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIFphKHQpe3ZhciBlPU1hdGguc3FydCh0L05vKTtyZXR1cm4iTTAsIitlKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiKy1lKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiK2UrIloifWZ1bmN0aW9uIEphKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHIsbjsoZT10aGlzW3RdKSYmKG49ZVtyPWUuYWN0aXZlXSkmJihuLnRpbWVyLmM9bnVsbCxuLnRpbWVyLnQ9TmFOLC0tZS5jb3VudD9kZWxldGUgZVtyXTpkZWxldGUgdGhpc1t0XSxlLmFjdGl2ZSs9LjUsbi5ldmVudCYmbi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sbi5pbmRleCkpfX1mdW5jdGlvbiBLYSh0LGUscil7cmV0dXJuIEFvKHQsVWwpLHQubmFtZXNwYWNlPWUsdC5pZD1yLHR9ZnVuY3Rpb24gUWEodCxlLHIsbil7dmFyIGk9dC5pZCxhPXQubmFtZXNwYWNlO3JldHVybiBHKHQsImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24odCxvLHMpe3RbYV1baV0udHdlZW4uc2V0KGUsbihyLmNhbGwodCx0Ll9fZGF0YV9fLG8scykpKX06KHI9bihyKSxmdW5jdGlvbih0KXt0W2FdW2ldLnR3ZWVuLnNldChlLHIpfSkpfWZ1bmN0aW9uICRhKHQpe3JldHVybiBudWxsPT10JiYodD0iIiksZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIHRvKHQpe3JldHVybiBudWxsPT10PyJfX3RyYW5zaXRpb25fXyI6Il9fdHJhbnNpdGlvbl8iK3QrIl9fIn1mdW5jdGlvbiBlbyh0LGUscixuLGkpe2Z1bmN0aW9uIGEodCl7dmFyIGU9bS5kZWxheTtpZih1LnQ9ZStsLGU8PXQpcmV0dXJuIG8odC1lKTt1LmM9b31mdW5jdGlvbiBvKHIpe3ZhciBpPXAuYWN0aXZlLGE9cFtpXTthJiYoYS50aW1lci5jPW51bGwsYS50aW1lci50PU5hTiwtLXAuY291bnQsZGVsZXRlIHBbaV0sYS5ldmVudCYmYS5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18sYS5pbmRleCkpO2Zvcih2YXIgbyBpbiBwKWlmKCtvPG4pe3ZhciBoPXBbb107aC50aW1lci5jPW51bGwsaC50aW1lci50PU5hTiwtLXAuY291bnQsZGVsZXRlIHBbb119dS5jPXMsRHQoZnVuY3Rpb24oKXtyZXR1cm4gdS5jJiZzKHJ8fDEpJiYodS5jPW51bGwsdS50PU5hTiksMX0sMCxsKSxwLmFjdGl2ZT1uLG0uZXZlbnQmJm0uZXZlbnQuc3RhcnQuY2FsbCh0LHQuX19kYXRhX18sZSksZD1bXSxtLnR3ZWVuLmZvckVhY2goZnVuY3Rpb24ocixuKXsobj1uLmNhbGwodCx0Ll9fZGF0YV9fLGUpKSYmZC5wdXNoKG4pfSksZj1tLmVhc2UsYz1tLmR1cmF0aW9ufWZ1bmN0aW9uIHMoaSl7Zm9yKHZhciBhPWkvYyxvPWYoYSkscz1kLmxlbmd0aDtzPjA7KWRbLS1zXS5jYWxsKHQsbyk7aWYoYT49MSlyZXR1cm4gbS5ldmVudCYmbS5ldmVudC5lbmQuY2FsbCh0LHQuX19kYXRhX18sZSksLS1wLmNvdW50P2RlbGV0ZSBwW25dOmRlbGV0ZSB0W3JdLDF9dmFyIGwsdSxjLGYsZCxwPXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksbT1wW25dO218fChsPWkudGltZSx1PUR0KGEsMCxsKSxtPXBbbl09e3R3ZWVuOm5ldyBoLHRpbWU6bCx0aW1lcjp1LGRlbGF5OmkuZGVsYXksZHVyYXRpb246aS5kdXJhdGlvbixlYXNlOmkuZWFzZSxpbmRleDplfSxpPW51bGwsKytwLmNvdW50KX1mdW5jdGlvbiBybyh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShuKT9uOnIodCkpKyIsMCkifSl9ZnVuY3Rpb24gbm8odCxlLHIpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShuKT9uOnIodCkpKyIpIn0pfWZ1bmN0aW9uIGlvKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gYW8odCxlLHIpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQoZSl9ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXRbMV0tdFswXSxpPW4vcixhPXVvLmJpc2VjdChKbCxpKTtyZXR1cm4gYT09SmwubGVuZ3RoP1tlLnllYXIsdGEodC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvMzE1MzZlNn0pLHIpWzJdXTphP2VbaS9KbFthLTFdPEpsW2FdL2k/YS0xOmFdOlskbCx0YSh0LHIpWzJdXX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG9vKHQuaW52ZXJ0KGUpKX0sbi5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZG9tYWluKGUpLG4pOnQuZG9tYWluKCkubWFwKG9vKX0sbi5uaWNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4haXNOYU4ocikmJiF0LnJhbmdlKHIsb28oK3IrMSksZSkubGVuZ3RofXZhciBhPW4uZG9tYWluKCksbz1HaShhKSxzPW51bGw9PXQ/aShvLDEwKToibnVtYmVyIj09dHlwZW9mIHQmJmkobyx0KTtyZXR1cm4gcyYmKHQ9c1swXSxlPXNbMV0pLG4uZG9tYWluKFdpKGEsZT4xP3tmbG9vcjpmdW5jdGlvbihlKXtmb3IoO3IoZT10LmZsb29yKGUpKTspZT1vbyhlLTEpO3JldHVybiBlfSxjZWlsOmZ1bmN0aW9uKGUpe2Zvcig7cihlPXQuY2VpbChlKSk7KWU9b28oK2UrMSk7cmV0dXJuIGV9fTp0KSl9LG4udGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1HaShuLmRvbWFpbigpKSxhPW51bGw9PXQ/aShyLDEwKToibnVtYmVyIj09dHlwZW9mIHQ/aShyLHQpOiF0LnJhbmdlJiZbe3JhbmdlOnR9LGVdO3JldHVybiBhJiYodD1hWzBdLGU9YVsxXSksdC5yYW5nZShyWzBdLG9vKCtyWzFdKzEpLGU8MT8xOmUpfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gcn0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGFvKHQuY29weSgpLGUscil9LFFpKG4sdCl9ZnVuY3Rpb24gb28odCl7cmV0dXJuIG5ldyBEYXRlKHQpfWZ1bmN0aW9uIHNvKHQpe3JldHVybiBKU09OLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBsbyh0KXt2YXIgZT1mby5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoZm8uYm9keSksZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodC5yZXNwb25zZVRleHQpfXZhciB1bz17dmVyc2lvbjoiMy41LjE3In0sY289W10uc2xpY2UsaG89ZnVuY3Rpb24odCl7cmV0dXJuIGNvLmNhbGwodCl9LGZvPXRoaXMuZG9jdW1lbnQ7aWYoZm8pdHJ5e2hvKGZvLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaCh0KXtobz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxmbyl0cnl7Zm8uY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKHQpe3ZhciBwbz10aGlzLkVsZW1lbnQucHJvdG90eXBlLG1vPXBvLnNldEF0dHJpYnV0ZSx2bz1wby5zZXRBdHRyaWJ1dGVOUyxnbz10aGlzLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLHlvPWdvLnNldFByb3BlcnR5O3BvLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe21vLmNhbGwodGhpcyx0LGUrIiIpfSxwby5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUscil7dm8uY2FsbCh0aGlzLHQsZSxyKyIiKX0sZ28uc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3lvLmNhbGwodGhpcyx0LGUrIiIscil9fXVvLmFzY2VuZGluZz1pLHVvLmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHVvLm1pbj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxhOylpZihudWxsIT0obj10W2ldKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPXRbaV0pJiZyPm4mJihyPW4pfWVsc2V7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmcj5uJiYocj1uKX1yZXR1cm4gcn0sdW8ubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx1by5leHRlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrYTxvOylpZihudWxsIT0obj10W2FdKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2V7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJm4+PW4pe3I9aT1uO2JyZWFrfWZvcig7KythPG87KW51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1yZXR1cm5bcixpXX0sdW8uc3VtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgsYT0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylvKHI9K3RbYV0pJiYobis9cik7ZWxzZSBmb3IoOysrYTxpOylvKHI9K2UuY2FsbCh0LHRbYV0sYSkpJiYobis9cik7cmV0dXJuIG59LHVvLm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxzPS0xLGw9aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrczxpOylvKHI9YSh0W3NdKSk/bis9cjotLWw7ZWxzZSBmb3IoOysrczxpOylvKHI9YShlLmNhbGwodCx0W3NdLHMpKSk/bis9cjotLWw7aWYobClyZXR1cm4gbi9sfSx1by5xdWFudGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPSh0Lmxlbmd0aC0xKSplKzEsbj1NYXRoLmZsb29yKHIpLGk9K3Rbbi0xXSxhPXItbjtyZXR1cm4gYT9pK2EqKHRbbl0taSk6aX0sdW8ubWVkaWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1bXSxzPXQubGVuZ3RoLGw9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2w8czspbyhyPWEodFtsXSkpJiZuLnB1c2gocik7ZWxzZSBmb3IoOysrbDxzOylvKHI9YShlLmNhbGwodCx0W2xdLGwpKSkmJm4ucHVzaChyKTtpZihuLmxlbmd0aClyZXR1cm4gdW8ucXVhbnRpbGUobi5zb3J0KGkpLC41KX0sdW8udmFyaWFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgscz0wLGw9MCx1PS0xLGM9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrdTxpOylvKHI9YSh0W3VdKSkmJihuPXItcyxzKz1uLysrYyxsKz1uKihyLXMpKTtlbHNlIGZvcig7Kyt1PGk7KW8ocj1hKGUuY2FsbCh0LHRbdV0sdSkpKSYmKG49ci1zLHMrPW4vKytjLGwrPW4qKHItcykpO2lmKGM+MSlyZXR1cm4gbC8oYy0xKX0sdW8uZGV2aWF0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dW8udmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0P01hdGguc3FydCh0KTp0fTt2YXIgYm89cyhpKTt1by5iaXNlY3RMZWZ0PWJvLmxlZnQsdW8uYmlzZWN0PXVvLmJpc2VjdFJpZ2h0PWJvLnJpZ2h0LHVvLmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBzKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBpKHQoZSkscil9OnQpfSx1by5zaHVmZmxlPWZ1bmN0aW9uKHQsZSxyKXsoYT1hcmd1bWVudHMubGVuZ3RoKTwzJiYocj10Lmxlbmd0aCxhPDImJihlPTApKTtmb3IodmFyIG4saSxhPXItZTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sdW8ucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdW8ucGFpcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xLG49dFswXSxpPW5ldyBBcnJheShyPDA/MDpyKTtlPHI7KWlbZV09W24sbj10WysrZV1dO3JldHVybiBpfSx1by50cmFuc3Bvc2U9ZnVuY3Rpb24odCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIGU9LTEscj11by5taW4odCxsKSxuPW5ldyBBcnJheShyKTsrK2U8cjspZm9yKHZhciBpLGE9LTEsbz1uW2VdPW5ldyBBcnJheShpKTsrK2E8aTspb1thXT10W2FdW2VdO3JldHVybiBufSx1by56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gdW8udHJhbnNwb3NlKGFyZ3VtZW50cyl9LHVvLmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx1by52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx1by5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSx1by5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihuPXRbaV0sZT1uLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeG89TWF0aC5hYnM7dW8ucmFuZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MSxhcmd1bWVudHMubGVuZ3RoPDImJihlPXQsdD0wKSksKGUtdCkvcj09MS8wKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgbixpPVtdLGE9dSh4byhyKSksbz0tMTtpZih0Kj1hLGUqPWEscio9YSxyPDApZm9yKDsobj10K3IqKytvKT5lOylpLnB1c2gobi9hKTtlbHNlIGZvcig7KG49dCtyKisrbyk8ZTspaS5wdXNoKG4vYSk7cmV0dXJuIGl9LHVvLm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBoO2lmKHQgaW5zdGFuY2VvZiBoKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07dmFyIF9vPSJfX3Byb3RvX18iLHdvPSJcMCI7YyhoLHtoYXM6cCxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1tmKHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX1tmKHQpXT1lfSxyZW1vdmU6bSxrZXlzOnYsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2godGhpcy5fW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHtrZXk6ZChlKSx2YWx1ZTp0aGlzLl9bZV19KTtyZXR1cm4gdH0sc2l6ZTpnLGVtcHR5OnksZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLGQoZSksdGhpcy5fW2VdKX19KSx1by5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG8scyl7aWYocz49YS5sZW5ndGgpcmV0dXJuIG4/bi5jYWxsKGksbyk6cj9vLnNvcnQocik6bztmb3IodmFyIGwsdSxjLGYsZD0tMSxwPW8ubGVuZ3RoLG09YVtzKytdLHY9bmV3IGg7KytkPHA7KShmPXYuZ2V0KGw9bSh1PW9bZF0pKSk/Zi5wdXNoKHUpOnYuc2V0KGwsW3VdKTtyZXR1cm4gZT8odT1lKCksYz1mdW5jdGlvbihyLG4pe3Uuc2V0KHIsdChlLG4scykpfSk6KHU9e30sYz1mdW5jdGlvbihyLG4pe3Vbcl09dChlLG4scyl9KSx2LmZvckVhY2goYyksdX1mdW5jdGlvbiBlKHQscil7aWYocj49YS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49W10saT1vW3IrK107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0LGkpe24ucHVzaCh7a2V5OnQsdmFsdWVzOmUoaSxyKX0pfSksaT9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LmtleSxlLmtleSl9KTpufXZhciByLG4saT17fSxhPVtdLG89W107cmV0dXJuIGkubWFwPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQocixlLDApfSxpLmVudHJpZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGUodCh1by5tYXAsciwwKSwwKX0saS5rZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGEucHVzaCh0KSxpfSxpLnNvcnRLZXlzPWZ1bmN0aW9uKHQpe3JldHVybiBvW2EubGVuZ3RoLTFdPXQsaX0saS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsaX0saS5yb2xsdXA9ZnVuY3Rpb24odCl7cmV0dXJuIG49dCxpfSxpfSx1by5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGI7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LGMoYix7aGFzOnAsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bZih0Kz0iIildPSEwLHR9LHJlbW92ZTptLHZhbHVlczp2LHNpemU6ZyxlbXB0eTp5LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxkKGUpKX19KSx1by5iZWhhdmlvcj17fSx1by5yZWJpbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0xLGk9YXJndW1lbnRzLmxlbmd0aDsrK248aTspdFtyPWFyZ3VtZW50c1tuXV09Xyh0LGUsZVtyXSk7cmV0dXJuIHR9O3ZhciBNbz1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTt1by5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgayxlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPUEodCk7cmV0dXJuIHR9LGsucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbmRleE9mKCIuIiksbj0iIjtpZihyPj0wJiYobj10LnNsaWNlKHIrMSksCnQ9dC5zbGljZSgwLHIpKSx0KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1t0XS5vbihuKTp0aGlzW3RdLm9uKG4sZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PWUpZm9yKHQgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHQpJiZ0aGlzW3RdLm9uKG4sbnVsbCk7cmV0dXJuIHRoaXN9fSx1by5ldmVudD1udWxsLHVvLnJlcXVvdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShrbywiXFwkJiIpfTt2YXIga289L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLEFvPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfSxUbz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IodCl9LFNvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3RvckFsbCh0KX0sRW89ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbdyh0LCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKEVvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbCh0LGUpfSkodCxlKX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKFRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNpenpsZSh0LGUpWzBdfHxudWxsfSxTbz1TaXp6bGUsRW89U2l6emxlLm1hdGNoZXNTZWxlY3RvciksdW8uc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHVvLnNlbGVjdChmby5kb2N1bWVudEVsZW1lbnQpfTt2YXIgTG89dW8uc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtMby5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXTt0PUModCk7Zm9yKHZhciBvPS0xLHM9dGhpcy5sZW5ndGg7KytvPHM7KXthLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPShuPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBsPS0xLHU9bi5sZW5ndGg7KytsPHU7KShpPW5bbF0pPyhlLnB1c2gocj10LmNhbGwoaSxpLl9fZGF0YV9fLGwsbykpLHImJiJfX2RhdGFfXyJpbiBpJiYoci5fX2RhdGFfXz1pLl9fZGF0YV9fKSk6ZS5wdXNoKG51bGwpfXJldHVybiBMKGEpfSxMby5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixuPVtdO3Q9eih0KTtmb3IodmFyIGk9LTEsYT10aGlzLmxlbmd0aDsrK2k8YTspZm9yKHZhciBvPXRoaXNbaV0scz0tMSxsPW8ubGVuZ3RoOysrczxsOykocj1vW3NdKSYmKG4ucHVzaChlPWhvKHQuY2FsbChyLHIuX19kYXRhX18scyxpKSkpLGUucGFyZW50Tm9kZT1yKTtyZXR1cm4gTChuKX07dmFyIENvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix6bz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Q28seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTt1by5ucz17cHJlZml4OnpvLHF1YWxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI6Iikscj10O3JldHVybiBlPj0wJiYieG1sbnMiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSx6by5oYXNPd25Qcm9wZXJ0eShyKT97c3BhY2U6em9bcl0sbG9jYWw6dH06dH19LExvLmF0dHI9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIHQ9dW8ubnMucXVhbGlmeSh0KSx0LmxvY2FsP3IuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTpyLmdldEF0dHJpYnV0ZSh0KX1mb3IoZSBpbiB0KXRoaXMuZWFjaChJKGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goSSh0LGUpKX0sTG8uY2xhc3NlZD1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PU8odCkpLmxlbmd0aCxpPS0xO2lmKGU9ci5jbGFzc0xpc3Qpe2Zvcig7KytpPG47KWlmKCFlLmNvbnRhaW5zKHRbaV0pKXJldHVybiExfWVsc2UgZm9yKGU9ci5nZXRBdHRyaWJ1dGUoImNsYXNzIik7KytpPG47KWlmKCFQKHRbaV0pLnRlc3QoZSkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKGUgaW4gdCl0aGlzLmVhY2goUihlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKFIodCxlKSl9LExvLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoO2lmKGk8Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtpPDImJihlPSIiKTtmb3IociBpbiB0KXRoaXMuZWFjaChqKHIsdFtyXSxlKSk7cmV0dXJuIHRoaXN9aWYoaTwyKXt2YXIgYT10aGlzLm5vZGUoKTtyZXR1cm4gbihhKS5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1yPSIifXJldHVybiB0aGlzLmVhY2goaih0LGUscikpfSxMby5wcm9wZXJ0eT1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0aGlzLm5vZGUoKVt0XTtmb3IoZSBpbiB0KXRoaXMuZWFjaChOKGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goTih0LGUpKX0sTG8udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9IiJ9OmZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LExvLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9IiJ9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH0pOnRoaXMubm9kZSgpLmlubmVySFRNTH0sTG8uYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PUIodCksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0sTG8uaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Qih0KSxlPUMoZSksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUodC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LExvLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goVSl9LExvLmRhdGE9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscil7dmFyIG4saSxhLG89dC5sZW5ndGgsYz1yLmxlbmd0aCxmPU1hdGgubWluKG8sYyksZD1uZXcgQXJyYXkoYykscD1uZXcgQXJyYXkoYyksbT1uZXcgQXJyYXkobyk7aWYoZSl7dmFyIHYsZz1uZXcgaCx5PW5ldyBBcnJheShvKTtmb3Iobj0tMTsrK248bzspKGk9dFtuXSkmJihnLmhhcyh2PWUuY2FsbChpLGkuX19kYXRhX18sbikpP21bbl09aTpnLnNldCh2LGkpLHlbbl09dik7Zm9yKG49LTE7KytuPGM7KShpPWcuZ2V0KHY9ZS5jYWxsKHIsYT1yW25dLG4pKSk/ITAhPT1pJiYoZFtuXT1pLGkuX19kYXRhX189YSk6cFtuXT1WKGEpLGcuc2V0KHYsITApO2ZvcihuPS0xOysrbjxvOyluIGluIHkmJiEwIT09Zy5nZXQoeVtuXSkmJihtW25dPXRbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGY7KWk9dFtuXSxhPXJbbl0saT8oaS5fX2RhdGFfXz1hLGRbbl09aSk6cFtuXT1WKGEpO2Zvcig7bjxjOysrbilwW25dPVYocltuXSk7Zm9yKDtuPG87KytuKW1bbl09dFtuXX1wLnVwZGF0ZT1kLHAucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9bS5wYXJlbnROb2RlPXQucGFyZW50Tm9kZSxzLnB1c2gocCksbC5wdXNoKGQpLHUucHVzaChtKX12YXIgbixpLGE9LTEsbz10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKHQ9bmV3IEFycmF5KG89KG49dGhpc1swXSkubGVuZ3RoKTsrK2E8bzspKGk9blthXSkmJih0W2FdPWkuX19kYXRhX18pO3JldHVybiB0fXZhciBzPVkoW10pLGw9TChbXSksdT1MKFtdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClmb3IoOysrYTxvOylyKG49dGhpc1thXSx0LmNhbGwobixuLnBhcmVudE5vZGUuX19kYXRhX18sYSkpO2Vsc2UgZm9yKDsrK2E8bzspcihuPXRoaXNbYV0sdCk7cmV0dXJuIGwuZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gc30sbC5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIHV9LGx9LExvLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxMby5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W107ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUgodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIEwoaSl9LExvLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcixuPXRoaXNbdF0saT1uLmxlbmd0aC0xLGE9bltpXTstLWk+PTA7KShyPW5baV0pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxMby5zb3J0PWZ1bmN0aW9uKHQpe3Q9cS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciBlPS0xLHI9dGhpcy5sZW5ndGg7KytlPHI7KXRoaXNbZV0uc29ydCh0KTtyZXR1cm4gdGhpcy5vcmRlcigpfSxMby5lYWNoPWZ1bmN0aW9uKHQpe3JldHVybiBHKHRoaXMsZnVuY3Rpb24oZSxyLG4pe3QuY2FsbChlLGUuX19kYXRhX18scixuKX0pfSxMby5jYWxsPWZ1bmN0aW9uKHQpe3ZhciBlPWhvKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LExvLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxMby5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLmxlbmd0aDt0PGU7dCsrKWZvcih2YXIgcj10aGlzW3RdLG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sTG8uc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIEcodGhpcyxmdW5jdGlvbigpeysrdH0pLHR9O3ZhciBJbz1bXTt1by5zZWxlY3Rpb24uZW50ZXI9WSx1by5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPUlvLElvLmFwcGVuZD1Mby5hcHBlbmQsSW8uZW1wdHk9TG8uZW1wdHksSW8ubm9kZT1Mby5ub2RlLElvLmNhbGw9TG8uY2FsbCxJby5zaXplPUxvLnNpemUsSW8uc2VsZWN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89W10scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7bj0oaT10aGlzW3NdKS51cGRhdGUsby5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT1pLnBhcmVudE5vZGU7Zm9yKHZhciB1PS0xLGM9aS5sZW5ndGg7Kyt1PGM7KShhPWlbdV0pPyhlLnB1c2goblt1XT1yPXQuY2FsbChpLnBhcmVudE5vZGUsYS5fX2RhdGFfXyx1LHMpKSxyLl9fZGF0YV9fPWEuX19kYXRhX18pOmUucHVzaChudWxsKX1yZXR1cm4gTChvKX0sSW8uaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9WCh0aGlzKSksTG8uaW5zZXJ0LmNhbGwodGhpcyx0LGUpfSx1by5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhyPVtUbyh0LGZvKV0sci5wYXJlbnROb2RlPWZvLmRvY3VtZW50RWxlbWVudCk6KHI9W3RdLHIucGFyZW50Tm9kZT1lKHQpKSxMKFtyXSl9LHVvLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGU9aG8oU28odCxmbykpLGUucGFyZW50Tm9kZT1mby5kb2N1bWVudEVsZW1lbnQpOihlPWhvKHQpLGUucGFyZW50Tm9kZT1udWxsKSxMKFtlXSl9LExvLm9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtuPDImJihlPSExKTtmb3IociBpbiB0KXRoaXMuZWFjaChXKHIsdFtyXSxlKSk7cmV0dXJuIHRoaXN9aWYobjwyKXJldHVybihuPXRoaXMubm9kZSgpWyJfX29uIit0XSkmJm4uXztyPSExfXJldHVybiB0aGlzLmVhY2goVyh0LGUscikpfTt2YXIgRG89dW8ubWFwKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pO2ZvJiZEby5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJvbiIrdCBpbiBmbyYmRG8ucmVtb3ZlKHQpfSk7dmFyIFBvLE9vPTA7dW8ubW91c2U9ZnVuY3Rpb24odCl7cmV0dXJuIFEodCxTKCkpfTt2YXIgUm89dGhpcy5uYXZpZ2F0b3ImJi9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO3VvLnRvdWNoPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPWUsZT1TKCkuY2hhbmdlZFRvdWNoZXMpLGUpZm9yKHZhciBuLGk9MCxhPWUubGVuZ3RoO2k8YTsrK2kpaWYoKG49ZVtpXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIFEodCxuKX0sdW8uYmVoYXZpb3IuZHJhZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsYSkub24oInRvdWNoc3RhcnQuZHJhZyIsbyl9ZnVuY3Rpb24gZSh0LGUsbixhLG8pe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt2YXIgdCxyLG49ZShmLG0pO24mJih0PW5bMF0tYlswXSxyPW5bMV0tYlsxXSxwfD10fHIsYj1uLGQoe3R5cGU6ImRyYWciLHg6blswXSt1WzBdLHk6blsxXSt1WzFdLGR4OnQsZHk6cn0pKX1mdW5jdGlvbiBsKCl7ZShmLG0pJiYoZy5vbihhK3YsbnVsbCkub24obyt2LG51bGwpLHkocCksZCh7dHlwZToiZHJhZ2VuZCJ9KSl9dmFyIHUsYz10aGlzLGg9dW8uZXZlbnQudGFyZ2V0LmNvcnJlc3BvbmRpbmdFbGVtZW50fHx1by5ldmVudC50YXJnZXQsZj1jLnBhcmVudE5vZGUsZD1yLm9mKGMsYXJndW1lbnRzKSxwPTAsbT10KCksdj0iLmRyYWciKyhudWxsPT1tPyIiOiItIittKSxnPXVvLnNlbGVjdChuKGgpKS5vbihhK3Yscykub24obyt2LGwpLHk9SyhoKSxiPWUoZixtKTtpPyh1PWkuYXBwbHkoYyxhcmd1bWVudHMpLHU9W3UueC1iWzBdLHUueS1iWzFdXSk6dT1bMCwwXSxkKHt0eXBlOiJkcmFnc3RhcnQifSl9fXZhciByPUUodCwiZHJhZyIsImRyYWdzdGFydCIsImRyYWdlbmQiKSxpPW51bGwsYT1lKE0sdW8ubW91c2UsbiwibW91c2Vtb3ZlIiwibW91c2V1cCIpLG89ZSgkLHVvLnRvdWNoLHgsInRvdWNobW92ZSIsInRvdWNoZW5kIik7cmV0dXJuIHQub3JpZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdCk6aX0sdW8ucmViaW5kKHQsciwib24iKX0sdW8udG91Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihlPVMoKS50b3VjaGVzKSxlP2hvKGUpLm1hcChmdW5jdGlvbihlKXt2YXIgcj1RKHQsZSk7cmV0dXJuIHIuaWRlbnRpZmllcj1lLmlkZW50aWZpZXIscn0pOltdfTt2YXIgRm89MWUtNixqbz1GbypGbyxObz1NYXRoLlBJLEJvPTIqTm8sVW89Qm8tRm8sVm89Tm8vMixIbz1Oby8xODAscW89MTgwL05vLEdvPU1hdGguU1FSVDI7dW8uaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLHU9ZVsyXSxjPXMtaSxoPWwtYSxmPWMqYytoKmg7aWYoZjxqbyluPU1hdGgubG9nKHUvbykvR28scj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmMsYSt0KmgsbypNYXRoLmV4cChHbyp0Km4pXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSxtPSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSxnPU1hdGgubG9nKE1hdGguc3FydChtKm0rMSktbSk7bj0oZy12KS9HbyxyPWZ1bmN0aW9uKHQpe3ZhciBlPXQqbixyPWF0KHYpLHM9by8oMipkKSoocipvdChHbyplK3YpLWl0KHYpKTtyZXR1cm5baStzKmMsYStzKmgsbypyL2F0KEdvKmUrdildfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx1by5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0Lm9uKHosaCkub24oWG8rIi56b29tIixkKS5vbigiZGJsY2xpY2suem9vbSIscCkub24oUCxmKX1mdW5jdGlvbiBlKHQpe3JldHVyblsodFswXS1rLngpL2suaywodFsxXS1rLnkpL2sua119ZnVuY3Rpb24gcih0KXtyZXR1cm5bdFswXSprLmsray54LHRbMV0qay5rK2sueV19ZnVuY3Rpb24gaSh0KXtrLms9TWF0aC5tYXgoU1swXSxNYXRoLm1pbihTWzFdLHQpKX1mdW5jdGlvbiBhKHQsZSl7ZT1yKGUpLGsueCs9dFswXS1lWzBdLGsueSs9dFsxXS1lWzFdfWZ1bmN0aW9uIG8oZSxyLG4sbyl7ZS5fX2NoYXJ0X189e3g6ay54LHk6ay55LGs6ay5rfSxpKE1hdGgucG93KDIsbykpLGEodj1yLG4pLGU9dW8uc2VsZWN0KGUpLEw+MCYmKGU9ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oTCkpLGUuY2FsbCh0LmV2ZW50KX1mdW5jdGlvbiBzKCl7XyYmXy5kb21haW4oeC5yYW5nZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1rLngpL2sua30pLm1hcCh4LmludmVydCkpLE0mJk0uZG9tYWluKHcucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtay55KS9rLmt9KS5tYXAody5pbnZlcnQpKX1mdW5jdGlvbiBsKHQpe0MrK3x8dCh7dHlwZToiem9vbXN0YXJ0In0pfWZ1bmN0aW9uIHUodCl7cygpLHQoe3R5cGU6Inpvb20iLHNjYWxlOmsuayx0cmFuc2xhdGU6W2sueCxrLnldfSl9ZnVuY3Rpb24gYyh0KXstLUN8fCh0KHt0eXBlOiJ6b29tZW5kIn0pLHY9bnVsbCl9ZnVuY3Rpb24gaCgpe2Z1bmN0aW9uIHQoKXtzPTEsYSh1by5tb3VzZShpKSxmKSx1KG8pfWZ1bmN0aW9uIHIoKXtoLm9uKEksbnVsbCkub24oRCxudWxsKSxkKHMpLGMobyl9dmFyIGk9dGhpcyxvPU8ub2YoaSxhcmd1bWVudHMpLHM9MCxoPXVvLnNlbGVjdChuKGkpKS5vbihJLHQpLm9uKEQsciksZj1lKHVvLm1vdXNlKGkpKSxkPUsoaSk7QmwuY2FsbChpKSxsKG8pfWZ1bmN0aW9uIGYoKXtmdW5jdGlvbiB0KCl7dmFyIHQ9dW8udG91Y2hlcyhwKTtyZXR1cm4gZD1rLmssdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuaWRlbnRpZmllciBpbiB2JiYodlt0LmlkZW50aWZpZXJdPWUodCkpfSksdH1mdW5jdGlvbiByKCl7dmFyIGU9dW8uZXZlbnQudGFyZ2V0O3VvLnNlbGVjdChlKS5vbih4LG4pLm9uKF8scyksdy5wdXNoKGUpO2Zvcih2YXIgcj11by5ldmVudC5jaGFuZ2VkVG91Y2hlcyxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXZbcltpXS5pZGVudGlmaWVyXT1udWxsO3ZhciBsPXQoKSx1PURhdGUubm93KCk7aWYoMT09PWwubGVuZ3RoKXtpZih1LWI8NTAwKXt2YXIgYz1sWzBdO28ocCxjLHZbYy5pZGVudGlmaWVyXSxNYXRoLmZsb29yKE1hdGgubG9nKGsuaykvTWF0aC5MTjIpKzEpLFQoKX1iPXV9ZWxzZSBpZihsLmxlbmd0aD4xKXt2YXIgYz1sWzBdLGg9bFsxXSxmPWNbMF0taFswXSxkPWNbMV0taFsxXTtnPWYqZitkKmR9fWZ1bmN0aW9uIG4oKXt2YXIgdCxlLHIsbixvPXVvLnRvdWNoZXMocCk7QmwuY2FsbChwKTtmb3IodmFyIHM9MCxsPW8ubGVuZ3RoO3M8bDsrK3Msbj1udWxsKWlmKHI9b1tzXSxuPXZbci5pZGVudGlmaWVyXSl7aWYoZSlicmVhazt0PXIsZT1ufWlmKG4pe3ZhciBjPShjPXJbMF0tdFswXSkqYysoYz1yWzFdLXRbMV0pKmMsaD1nJiZNYXRoLnNxcnQoYy9nKTt0PVsodFswXStyWzBdKS8yLCh0WzFdK3JbMV0pLzJdLGU9WyhlWzBdK25bMF0pLzIsKGVbMV0rblsxXSkvMl0saShoKmQpfWI9bnVsbCxhKHQsZSksdShtKX1mdW5jdGlvbiBzKCl7aWYodW8uZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT11by5ldmVudC5jaGFuZ2VkVG91Y2hlcyxyPTAsbj1lLmxlbmd0aDtyPG47KytyKWRlbGV0ZSB2W2Vbcl0uaWRlbnRpZmllcl07Zm9yKHZhciBpIGluIHYpcmV0dXJuIHZvaWQgdCgpfXVvLnNlbGVjdEFsbCh3KS5vbih5LG51bGwpLE0ub24oeixoKS5vbihQLGYpLEEoKSxjKG0pfXZhciBkLHA9dGhpcyxtPU8ub2YocCxhcmd1bWVudHMpLHY9e30sZz0wLHk9Ii56b29tLSIrdW8uZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcix4PSJ0b3VjaG1vdmUiK3ksXz0idG91Y2hlbmQiK3ksdz1bXSxNPXVvLnNlbGVjdChwKSxBPUsocCk7cigpLGwobSksTS5vbih6LG51bGwpLm9uKFAscil9ZnVuY3Rpb24gZCgpe3ZhciB0PU8ub2YodGhpcyxhcmd1bWVudHMpO3k/Y2xlYXJUaW1lb3V0KHkpOihCbC5jYWxsKHRoaXMpLG09ZSh2PWd8fHVvLm1vdXNlKHRoaXMpKSxsKHQpKSx5PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt5PW51bGwsYyh0KX0sNTApLFQoKSxpKE1hdGgucG93KDIsLjAwMipZbygpKSprLmspLGEodixtKSx1KHQpfWZ1bmN0aW9uIHAoKXt2YXIgdD11by5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGsuaykvTWF0aC5MTjI7byh0aGlzLHQsZSh0KSx1by5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwociktMTpNYXRoLmZsb29yKHIpKzEpfXZhciBtLHYsZyx5LGIseCxfLHcsTSxrPXt4OjAseTowLGs6MX0sQT1bOTYwLDUwMF0sUz1XbyxMPTI1MCxDPTAsej0ibW91c2Vkb3duLnpvb20iLEk9Im1vdXNlbW92ZS56b29tIixEPSJtb3VzZXVwLnpvb20iLFA9InRvdWNoc3RhcnQuem9vbSIsTz1FKHQsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7cmV0dXJuIFhvfHwoWG89Im9ud2hlZWwiaW4gZm8/KFlvPWZ1bmN0aW9uKCl7cmV0dXJuLXVvLmV2ZW50LmRlbHRhWSoodW8uZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBmbz8oWW89ZnVuY3Rpb24oKXtyZXR1cm4gdW8uZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooWW89ZnVuY3Rpb24oKXtyZXR1cm4tdW8uZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx0LmV2ZW50PWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PU8ub2YodGhpcyxhcmd1bWVudHMpLGU9aztqbD91by5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7az10aGlzLl9fY2hhcnRfX3x8e3g6MCx5OjAsazoxfSxsKHQpfSkudHdlZW4oInpvb206em9vbSIsZnVuY3Rpb24oKXt2YXIgcj1BWzBdLG49QVsxXSxpPXY/dlswXTpyLzIsYT12P3ZbMV06bi8yLG89dW8uaW50ZXJwb2xhdGVab29tKFsoaS1rLngpL2suaywoYS1rLnkpL2suayxyL2sua10sWyhpLWUueCkvZS5rLChhLWUueSkvZS5rLHIvZS5rXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW8oZSkscz1yL25bMl07dGhpcy5fX2NoYXJ0X189az17eDppLW5bMF0qcyx5OmEtblsxXSpzLGs6c30sdSh0KX19KS5lYWNoKCJpbnRlcnJ1cHQuem9vbSIsZnVuY3Rpb24oKXtjKHQpfSkuZWFjaCgiZW5kLnpvb20iLGZ1bmN0aW9uKCl7Yyh0KX0pOih0aGlzLl9fY2hhcnRfXz1rLGwodCksdSh0KSxjKHQpKX0pfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz17eDorZVswXSx5OitlWzFdLGs6ay5rfSxzKCksdCk6W2sueCxrLnldfSx0LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXt4OmsueCx5OmsueSxrOm51bGx9LGkoK2UpLHMoKSx0KTprLmt9LHQuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9bnVsbD09ZT9XbzpbK2VbMF0sK2VbMV1dLHQpOlN9LHQuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPWUmJlsrZVswXSwrZVsxXV0sdCk6Z30sdC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPWUmJlsrZVswXSwrZVsxXV0sdCk6QX0sdC5kdXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0rZSx0KTpMfSx0Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ZSx4PWUuY29weSgpLGs9e3g6MCx5OjAsazoxfSx0KTpffSx0Lnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09ZSx3PWUuY29weSgpLGs9e3g6MCx5OjAsazoxfSx0KTpNfSx1by5yZWJpbmQodCxPLCJvbiIpfTt2YXIgWW8sWG8sV289WzAsMS8wXTt1by5jb2xvcj1sdCxsdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn0sdW8uaHNsPXV0O3ZhciBabz11dC5wcm90b3R5cGU9bmV3IGx0O1pvLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgdXQodGhpcy5oLHRoaXMucyx0aGlzLmwvdCl9LFpvLmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IHV0KHRoaXMuaCx0aGlzLnMsdCp0aGlzLmwpfSxaby5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gY3QodGhpcy5oLHRoaXMucyx0aGlzLmwpfSx1by5oY2w9aHQ7dmFyIEpvPWh0LnByb3RvdHlwZT1uZXcgbHQ7Sm8uYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0aGlzLmgsdGhpcy5jLE1hdGgubWluKDEwMCx0aGlzLmwrS28qKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxKby5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sLUtvKihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sSm8ucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIGZ0KHRoaXMuaCx0aGlzLmMsdGhpcy5sKS5yZ2IoKX0sdW8ubGFiPWR0O3ZhciBLbz0xOCxRbz0uOTUwNDcsJG89MSx0cz0xLjA4ODgzLGVzPWR0LnByb3RvdHlwZT1uZXcgbHQ7ZXMuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkdChNYXRoLm1pbigxMDAsdGhpcy5sK0tvKihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxlcy5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkdChNYXRoLm1heCgwLHRoaXMubC1LbyooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sZXMucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHB0KHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdW8ucmdiPWJ0O3ZhciBycz1idC5wcm90b3R5cGU9bmV3IGx0O3JzLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3Q9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpO3ZhciBlPXRoaXMucixyPXRoaXMuZyxuPXRoaXMuYixpPTMwO3JldHVybiBlfHxyfHxuPyhlJiZlPGkmJihlPWkpLHImJnI8aSYmKHI9aSksbiYmbjxpJiYobj1pKSxuZXcgYnQoTWF0aC5taW4oMjU1LGUvdCksTWF0aC5taW4oMjU1LHIvdCksTWF0aC5taW4oMjU1LG4vdCkpKTpuZXcgYnQoaSxpLGkpfSxycy5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBidCh0KnRoaXMucix0KnRoaXMuZyx0KnRoaXMuYil9LHJzLmhzbD1mdW5jdGlvbigpe3JldHVybiBrdCh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LHJzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIiMiK3d0KHRoaXMucikrd3QodGhpcy5nKSt3dCh0aGlzLmIpfTt2YXIgbnM9dW8ubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtucy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bnMuc2V0KHQseHQoZSkpfSksdW8uZnVuY3Rvcj1FdCx1by54aHI9THQoeCksdW8uZHN2PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIsYSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoYT1yLHI9bnVsbCk7dmFyIG89Q3QodCxlLG51bGw9PXI/bjppKHIpLGEpO3JldHVybiBvLnJvdz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKG51bGw9PShyPXQpP246aSh0KSk6cn0sb31mdW5jdGlvbiBuKHQpe3JldHVybiByLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gci5wYXJzZShlLnJlc3BvbnNlVGV4dCx0KX19ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBzLnRlc3QodCk/JyInK3QucmVwbGFjZSgvXCIvZywnIiInKSsnIic6dH12YXIgcz1uZXcgUmVnRXhwKCdbIicrdCsiXG5dIiksbD10LmNoYXJDb2RlQXQoMCk7cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gci5wYXJzZVJvd3ModCxmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO3ZhciBpPW5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsiXSJ9KS5qb2luKCIsIikrIn0iKTtuPWU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShpKHQpLHIpfTppfSl9LHIucGFyc2VSb3dzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe2lmKGM+PXUpcmV0dXJuIG87aWYoaSlyZXR1cm4gaT0hMSxhO3ZhciBlPWM7aWYoMzQ9PT10LmNoYXJDb2RlQXQoZSkpe2Zvcih2YXIgcj1lO3IrKzx1OylpZigzND09PXQuY2hhckNvZGVBdChyKSl7aWYoMzQhPT10LmNoYXJDb2RlQXQocisxKSlicmVhazsrK3J9Yz1yKzI7dmFyIG49dC5jaGFyQ29kZUF0KHIrMSk7cmV0dXJuIDEzPT09bj8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09biYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8dTspe3ZhciBuPXQuY2hhckNvZGVBdChjKyspLHM9MTtpZigxMD09PW4paT0hMDtlbHNlIGlmKDEzPT09bilpPSEwLDEwPT09dC5jaGFyQ29kZUF0KGMpJiYoKytjLCsrcyk7ZWxzZSBpZihuIT09bCljb250aW51ZTtyZXR1cm4gdC5zbGljZShlLGMtcyl9cmV0dXJuIHQuc2xpY2UoZSl9Zm9yKHZhciBuLGksYT17fSxvPXt9LHM9W10sdT10Lmxlbmd0aCxjPTAsaD0wOyhuPXIoKSkhPT1vOyl7Zm9yKHZhciBmPVtdO24hPT1hJiZuIT09bzspZi5wdXNoKG4pLG49cigpO2UmJm51bGw9PShmPWUoZixoKyspKXx8cy5wdXNoKGYpfXJldHVybiBzfSxyLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiByLmZvcm1hdFJvd3MoZSk7dmFyIG49bmV3IGIsaT1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KW4uaGFzKGUpfHxpLnB1c2gobi5hZGQoZSkpfSksW2kubWFwKG8pLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8oZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LHIuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoYSkuam9pbigiXG4iKX0scn0sdW8uY3N2PXVvLmRzdigiLCIsInRleHQvY3N2IiksdW8udHN2PXVvLmRzdigiXHQiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIik7dmFyIGlzLGFzLG9zLHNzLGxzPXRoaXNbdyh0aGlzLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O3VvLnRpbWVyPWZ1bmN0aW9uKCl7RHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx1by50aW1lci5mbHVzaD1mdW5jdGlvbigpe090KCksUnQoKX0sdW8ucm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9NYXRoLnJvdW5kKHQqKGU9TWF0aC5wb3coMTAsZSkpKS9lOk1hdGgucm91bmQodCl9O3ZhciB1cz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoanQpO3VvLmZvcm1hdFByZWZpeD1mdW5jdGlvbih0LGUpe3ZhciByPTA7cmV0dXJuKHQ9K3QpJiYodDwwJiYodCo9LTEpLGUmJih0PXVvLnJvdW5kKHQsRnQodCxlKSkpLHI9MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKHQpL01hdGguTE4xMCkscj1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChyLTEpLzMpKSkpLHVzWzgrci8zXX07dmFyIGNzPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaSxocz11by5tYXAoe2I6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpfSxYOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0scjpmdW5jdGlvbih0LGUpe3JldHVybih0PXVvLnJvdW5kKHQsRnQodCxlKSkpLnRvRml4ZWQoTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxGdCh0KigxKzFlLTE1KSxlKSkpKX19KSxmcz11by50aW1lPXt9LGRzPURhdGU7VXQucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe3BzLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe3BzLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtwcy5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtwcy5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cHMuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7cHMuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtwcy5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe3BzLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtwcy5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIHBzPURhdGUucHJvdG90eXBlO2ZzLnllYXI9VnQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZnMuZGF5KHQpLHQuc2V0TW9udGgoMCwxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSksZnMueWVhcnM9ZnMueWVhci5yYW5nZSxmcy55ZWFycy51dGM9ZnMueWVhci51dGMucmFuZ2UsZnMuZGF5PVZ0KGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBkcygyZTMsMCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSksZX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksZnMuZGF5cz1mcy5kYXkucmFuZ2UsZnMuZGF5cy51dGM9ZnMuZGF5LnV0Yy5yYW5nZSxmcy5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9ZnMueWVhcih0KTtyZXR1cm4gTWF0aC5mbG9vcigodC1lLTZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sWyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSJdLmZvckVhY2goZnVuY3Rpb24odCxlKXtlPTctZTt2YXIgcj1mc1t0XT1WdChmdW5jdGlvbih0KXtyZXR1cm4odD1mcy5kYXkodCkpLnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrZSklNyksdH0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7dmFyIHI9ZnMueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoZnMuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpLShyIT09ZSl9KTtmc1t0KyJzIl09ci5yYW5nZSxmc1t0KyJzIl0udXRjPXIudXRjLnJhbmdlLGZzW3QrIk9mWWVhciJdPWZ1bmN0aW9uKHQpe3ZhciByPWZzLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKGZzLmRheU9mWWVhcih0KSsocitlKSU3KS83KX19KSxmcy53ZWVrPWZzLnN1bmRheSxmcy53ZWVrcz1mcy5zdW5kYXkucmFuZ2UsZnMud2Vla3MudXRjPWZzLnN1bmRheS51dGMucmFuZ2UsZnMud2Vla09mWWVhcj1mcy5zdW5kYXlPZlllYXI7dmFyIG1zPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHZzPS9eXHMqXGQrLyxncz0vXiUvO3VvLmxvY2FsZT1mdW5jdGlvbih0KXtyZXR1cm57bnVtYmVyRm9ybWF0Ok50KHQpLHRpbWVGb3JtYXQ6cXQodCl9fTt2YXIgeXM9dW8ubG9jYWxlKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxkYXRlVGltZToiJWEgJWIgJWUgJVggJVkiLGRhdGU6IiVtLyVkLyVZIix0aW1lOiIlSDolTTolUyIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt1by5mb3JtYXQ9eXMubnVtYmVyRm9ybWF0LHVvLmdlbz17fSxoZS5wcm90b3R5cGU9e3M6MCx0OjAsYWRkOmZ1bmN0aW9uKHQpe2ZlKHQsdGhpcy50LGJzKSxmZShicy5zLHRoaXMucyx0aGlzKSx0aGlzLnM/dGhpcy50Kz1icy50OnRoaXMucz1icy50fSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgYnM9bmV3IGhlO3VvLmdlby5zdHJlYW09ZnVuY3Rpb24odCxlKXt0JiZ4cy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3hzW3QudHlwZV0odCxlKTpkZSh0LGUpfTt2YXIgeHM9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtkZSh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZGUocltuXS5nZW9tZXRyeSxlKX19LF9zPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspdD1yW25dLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cGUodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KXBlKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe21lKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspbWUocltuXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWRlKHJbbl0sZSl9fTt1by5nZW8uYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gd3M9MCx1by5nZW8uc3RyZWFtKHQsa3MpLHdzfTt2YXIgd3MsTXM9bmV3IGhlLGtzPXtzcGhlcmU6ZnVuY3Rpb24oKXt3cys9NCpOb30scG9pbnQ6TSxsaW5lU3RhcnQ6TSxsaW5lRW5kOk0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TXMucmVzZXQoKSxrcy5saW5lU3RhcnQ9dmV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0yKk1zO3dzKz10PDA/NCpObyt0OnQsa3MubGluZVN0YXJ0PWtzLmxpbmVFbmQ9a3MucG9pbnQ9TX19O3VvLmdlby5ib3VuZHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Yi5wdXNoKHg9W2M9dCxmPXRdKSxlPGgmJihoPWUpLGU+ZCYmKGQ9ZSl9ZnVuY3Rpb24gZShlLHIpe3ZhciBuPWdlKFtlKkhvLHIqSG9dKTtpZihnKXt2YXIgaT1iZShnLG4pLGE9W2lbMV0sLWlbMF0sMF0sbz1iZShhLGkpO3dlKG8pLG89TWUobyk7dmFyIGw9ZS1wLHU9bD4wPzE6LTEsbT1vWzBdKnFvKnUsdj14byhsKT4xODA7aWYodl4odSpwPG0mJm08dSplKSl7dmFyIHk9b1sxXSpxbzt5PmQmJihkPXkpfWVsc2UgaWYobT0obSszNjApJTM2MC0xODAsdl4odSpwPG0mJm08dSplKSl7dmFyIHk9LW9bMV0qcW87eTxoJiYoaD15KX1lbHNlIHI8aCYmKGg9cikscj5kJiYoZD1yKTt2P2U8cD9zKGMsZSk+cyhjLGYpJiYoZj1lKTpzKGUsZik+cyhjLGYpJiYoYz1lKTpmPj1jPyhlPGMmJihjPWUpLGU+ZiYmKGY9ZSkpOmU+cD9zKGMsZSk+cyhjLGYpJiYoZj1lKTpzKGUsZik+cyhjLGYpJiYoYz1lKX1lbHNlIHQoZSxyKTtnPW4scD1lfWZ1bmN0aW9uIHIoKXtfLnBvaW50PWV9ZnVuY3Rpb24gbigpe3hbMF09Yyx4WzFdPWYsXy5wb2ludD10LGc9bnVsbH1mdW5jdGlvbiBpKHQscil7aWYoZyl7dmFyIG49dC1wO3krPXhvKG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm59ZWxzZSBtPXQsdj1yO2tzLnBvaW50KHQsciksZSh0LHIpfWZ1bmN0aW9uIGEoKXtrcy5saW5lU3RhcnQoKX1mdW5jdGlvbiBvKCl7aShtLHYpLGtzLmxpbmVFbmQoKSx4byh5KT5GbyYmKGM9LShmPTE4MCkpLHhbMF09Yyx4WzFdPWYsZz1udWxsfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gZVswXTw9ZVsxXT9lWzBdPD10JiZ0PD1lWzFdOnQ8ZVswXXx8ZVsxXTx0fXZhciBjLGgsZixkLHAsbSx2LGcseSxiLHgsXz17cG9pbnQ6dCxsaW5lU3RhcnQ6cixsaW5lRW5kOm4scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Xy5wb2ludD1pLF8ubGluZVN0YXJ0PWEsXy5saW5lRW5kPW8seT0wLGtzLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7a3MucG9seWdvbkVuZCgpLF8ucG9pbnQ9dCxfLmxpbmVTdGFydD1yLF8ubGluZUVuZD1uLE1zPDA/KGM9LShmPTE4MCksaD0tKGQ9OTApKTp5PkZvP2Q9OTA6eTwtRm8mJihoPS05MCkseFswXT1jLHhbMV09Zn19O3JldHVybiBmdW5jdGlvbih0KXtkPWY9LShjPWg9MS8wKSxiPVtdLHVvLmdlby5zdHJlYW0odCxfKTt2YXIgZT1iLmxlbmd0aDtpZihlKXtiLnNvcnQobCk7Zm9yKHZhciByLG49MSxpPWJbMF0sYT1baV07bjxlOysrbilyPWJbbl0sdShyWzBdLGkpfHx1KHJbMV0saSk/KHMoaVswXSxyWzFdKT5zKGlbMF0saVsxXSkmJihpWzFdPXJbMV0pLHMoclswXSxpWzFdKT5zKGlbMF0saVsxXSkmJihpWzBdPXJbMF0pKTphLnB1c2goaT1yKTtmb3IodmFyIG8scixwPS0xLzAsZT1hLmxlbmd0aC0xLG49MCxpPWFbZV07bjw9ZTtpPXIsKytuKXI9YVtuXSwobz1zKGlbMV0sclswXSkpPnAmJihwPW8sYz1yWzBdLGY9aVsxXSl9cmV0dXJuIGI9eD1udWxsLGM9PT0xLzB8fGg9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbYyxoXSxbZixkXV19fSgpLHVvLmdlby5jZW50cm9pZD1mdW5jdGlvbih0KXtBcz1Ucz1Tcz1Fcz1Mcz1Dcz16cz1Jcz1Ecz1Qcz1Pcz0wLHVvLmdlby5zdHJlYW0odCxScyk7dmFyIGU9RHMscj1QcyxuPU9zLGk9ZSplK3IqcituKm47cmV0dXJuIGk8am8mJihlPUNzLHI9enMsbj1JcyxUczxGbyYmKGU9U3Mscj1FcyxuPUxzKSwoaT1lKmUrcipyK24qbik8am8pP1tOYU4sTmFOXTpbTWF0aC5hdGFuMihyLGUpKnFvLG50KG4vTWF0aC5zcXJ0KGkpKSpxb119O3ZhciBBcyxUcyxTcyxFcyxMcyxDcyx6cyxJcyxEcyxQcyxPcyxScz17c3BoZXJlOk0scG9pbnQ6QWUsbGluZVN0YXJ0OlNlLGxpbmVFbmQ6RWUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7UnMubGluZVN0YXJ0PUxlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7UnMubGluZVN0YXJ0PVNlfX0sRnM9T2UoemUsTmUsVWUsWy1ObywtTm8vMl0pLGpzPTFlOTt1by5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksYSxvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJihpLnZhbGlkPSExKSxpPWEodCksaS52YWxpZD0hMCxpfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9R2UodD0rc1swXVswXSxlPStzWzBdWzFdLHI9K3NbMV1bMF0sbj0rc1sxXVsxXSksaSYmKGkudmFsaWQ9ITEsaT1udWxsKSxvKTpbW3QsZV0sW3Isbl1dfX07cmV0dXJuIG8uZXh0ZW50KFtbMCwwXSxbOTYwLDUwMF1dKX0sKHVvLmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBZZShYZSl9KS5yYXc9WGUsdW8uZ2VvLmFsYmVycz1mdW5jdGlvbigpe3JldHVybiB1by5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKX0sdW8uZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGE9dFswXSxvPXRbMV07cmV0dXJuIGU9bnVsbCxyKGEsbyksZXx8KG4oYSxvKSxlKXx8aShhLG8pLGV9dmFyIGUscixuLGksYT11by5nZW8uYWxiZXJzKCksbz11by5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLHM9dW8uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQscil7ZT1bdCxyXX19O3JldHVybiB0LmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1hLnNjYWxlKCkscj1hLnRyYW5zbGF0ZSgpLG49KHRbMF0tclswXSkvZSxpPSh0WzFdLXJbMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZuPj0tLjQyNSYmbjwtLjIxND9vOmk+PS4xNjYmJmk8LjIzNCYmbj49LS4yMTQmJm48LS4xMTU/czphKS5pbnZlcnQodCl9LHQuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPWEuc3RyZWFtKHQpLHI9by5zdHJlYW0odCksbj1zLnN0cmVhbSh0KTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24odCxpKXtlLnBvaW50KHQsaSksci5wb2ludCh0LGkpLG4ucG9pbnQodCxpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7ZS5zcGhlcmUoKSxyLnNwaGVyZSgpLG4uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKSxuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksci5saW5lRW5kKCksbi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKSxuLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksci5wb2x5Z29uRW5kKCksbi5wb2x5Z29uRW5kKCl9fX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEucHJlY2lzaW9uKGUpLG8ucHJlY2lzaW9uKGUpLHMucHJlY2lzaW9uKGUpLHQpOmEucHJlY2lzaW9uKCl9LHQuc2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUoZSksby5zY2FsZSguMzUqZSkscy5zY2FsZShlKSx0LnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgdT1hLnNjYWxlKCksYz0rZVswXSxoPStlWzFdO3JldHVybiByPWEudHJhbnNsYXRlKGUpLmNsaXBFeHRlbnQoW1tjLS40NTUqdSxoLS4yMzgqdV0sW2MrLjQ1NSp1LGgrLjIzOCp1XV0pLnN0cmVhbShsKS5wb2ludCxuPW8udHJhbnNsYXRlKFtjLS4zMDcqdSxoKy4yMDEqdV0pLmNsaXBFeHRlbnQoW1tjLS40MjUqdStGbyxoKy4xMip1K0ZvXSxbYy0uMjE0KnUtRm8saCsuMjM0KnUtRm9dXSkuc3RyZWFtKGwpLnBvaW50LGk9cy50cmFuc2xhdGUoW2MtLjIwNSp1LGgrLjIxMip1XSkuY2xpcEV4dGVudChbW2MtLjIxNCp1K0ZvLGgrLjE2Nip1K0ZvXSxbYy0uMTE1KnUtRm8saCsuMjM0KnUtRm9dXSkuc3RyZWFtKGwpLnBvaW50LHR9LHQuc2NhbGUoMTA3MCl9O3ZhciBOcyxCcyxVcyxWcyxIcyxxcyxHcz17cG9pbnQ6TSxsaW5lU3RhcnQ6TSxsaW5lRW5kOk0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7QnM9MCxHcy5saW5lU3RhcnQ9V2V9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtHcy5saW5lU3RhcnQ9R3MubGluZUVuZD1Hcy5wb2ludD1NLE5zKz14byhCcy8yKX19LFlzPXtwb2ludDpaZSxsaW5lU3RhcnQ6TSxsaW5lRW5kOk0scG9seWdvblN0YXJ0Ok0scG9seWdvbkVuZDpNfSxYcz17cG9pbnQ6UWUsbGluZVN0YXJ0OiRlLGxpbmVFbmQ6dHIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WHMubGluZVN0YXJ0PWVyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7WHMucG9pbnQ9UWUsWHMubGluZVN0YXJ0PSRlLFhzLmxpbmVFbmQ9dHJ9fTt1by5nZW8ucGF0aD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgcyYmYS5wb2ludFJhZGl1cygrcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG8mJm8udmFsaWR8fChvPWkoYSkpLHVvLmdlby5zdHJlYW0odCxvKSksYS5yZXN1bHQoKX1mdW5jdGlvbiBlKCl7cmV0dXJuIG89bnVsbCx0fXZhciByLG4saSxhLG8scz00LjU7cmV0dXJuIHQuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gTnM9MCx1by5nZW8uc3RyZWFtKHQsaShHcykpLE5zfSx0LmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBTcz1Fcz1Mcz1Dcz16cz1Jcz1Ecz1Qcz1Pcz0wLHVvLmdlby5zdHJlYW0odCxpKFhzKSksT3M/W0RzL09zLFBzL09zXTpJcz9bQ3MvSXMsenMvSXNdOkxzP1tTcy9McyxFcy9Mc106W05hTixOYU5dfSx0LmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gSHM9cXM9LShVcz1Wcz0xLzApLHVvLmdlby5zdHJlYW0odCxpKFlzKSksW1tVcyxWc10sW0hzLHFzXV19LHQucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0ocj10KT90LnN0cmVhbXx8aXIodCk6eCxlKCkpOnJ9LHQuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT0obj10KT9uZXcgSmU6bmV3IHJyKHQpLCJmdW5jdGlvbiIhPXR5cGVvZiBzJiZhLnBvaW50UmFkaXVzKHMpLGUoKSk6bn0sdC5wb2ludFJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihhLnBvaW50UmFkaXVzKCtlKSwrZSksdCk6c30sdC5wcm9qZWN0aW9uKHVvLmdlby5hbGJlcnNVc2EoKSkuY29udGV4dChudWxsKX0sdW8uZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciByPW5ldyBhcihlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9fX0sYXIucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSx1by5nZW8ucHJvamVjdGlvbj1zcix1by5nZW8ucHJvamVjdGlvbk11dGF0b3I9bHIsKHVvLmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gc3IoY3IpfSkucmF3PWNyLmludmVydD1jcix1by5nZW8ucm90YXRpb249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZT10KGVbMF0qSG8sZVsxXSpIbyksZVswXSo9cW8sZVsxXSo9cW8sZX1yZXR1cm4gdD1mcih0WzBdJTM2MCpIbyx0WzFdKkhvLHQubGVuZ3RoPjI/dFsyXSpIbzowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gZT10LmludmVydChlWzBdKkhvLGVbMV0qSG8pLGVbMF0qPXFvLGVbMV0qPXFvLGV9LGV9LGhyLmludmVydD1jcix1by5nZW8uY2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sZT1mcigtdFswXSpIbywtdFsxXSpIbywwKS5pbnZlcnQsaT1bXTtyZXR1cm4gcihudWxsLG51bGwsMSx7cG9pbnQ6ZnVuY3Rpb24odCxyKXtpLnB1c2godD1lKHQscikpLHRbMF0qPXFvLHRbMV0qPXFvfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaV19fXZhciBlLHIsbj1bMCwwXSxpPTY7cmV0dXJuIHQub3JpZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5hbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj12cigoZT0rbikqSG8saSpIbyksdCk6ZX0sdC5wcmVjaXNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dnIoZSpIbywoaT0rbikqSG8pLHQpOml9LHQuYW5nbGUoOTApfSx1by5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPShlWzBdLXRbMF0pKkhvLGk9dFsxXSpIbyxhPWVbMV0qSG8sbz1NYXRoLnNpbihuKSxzPU1hdGguY29zKG4pLGw9TWF0aC5zaW4oaSksdT1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGEpLGg9TWF0aC5jb3MoYSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChyPWgqbykqcisocj11KmMtbCpoKnMpKnIpLGwqYyt1Kmgqcyl9LHVvLmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6ZSgpfX1mdW5jdGlvbiBlKCl7cmV0dXJuIHVvLnJhbmdlKE1hdGguY2VpbChhL3YpKnYsaSx2KS5tYXAoZikuY29uY2F0KHVvLnJhbmdlKE1hdGguY2VpbCh1L2cpKmcsbCxnKS5tYXAoZCkpLmNvbmNhdCh1by5yYW5nZShNYXRoLmNlaWwobi9wKSpwLHIscCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB4byh0JXYpPkZvfSkubWFwKGMpKS5jb25jYXQodW8ucmFuZ2UoTWF0aC5jZWlsKHMvbSkqbSxvLG0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4geG8odCVnKT5Gb30pLm1hcChoKSl9dmFyIHIsbixpLGEsbyxzLGwsdSxjLGgsZixkLHA9MTAsbT1wLHY9OTAsZz0zNjAseT0yLjU7cmV0dXJuIHQubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KX0sdC5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltmKGEpLmNvbmNhdChkKGwpLnNsaWNlKDEpLGYoaSkucmV2ZXJzZSgpLnNsaWNlKDEpLGQodSkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx0LmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90Lm1ham9yRXh0ZW50KGUpLm1pbm9yRXh0ZW50KGUpOnQubWlub3JFeHRlbnQoKX0sdC5tYWpvckV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZVswXVswXSxpPStlWzFdWzBdLHU9K2VbMF1bMV0sbD0rZVsxXVsxXSxhPmkmJihlPWEsYT1pLGk9ZSksdT5sJiYoZT11LHU9bCxsPWUpLHQucHJlY2lzaW9uKHkpKTpbW2EsdV0sW2ksbF1dfSx0Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlWzBdWzBdLHI9K2VbMV1bMF0scz0rZVswXVsxXSxvPStlWzFdWzFdLG4+ciYmKGU9bixuPXIscj1lKSxzPm8mJihlPXMscz1vLG89ZSksdC5wcmVjaXNpb24oeSkpOltbbixzXSxbcixvXV19LHQuc3RlcD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90Lm1ham9yU3RlcChlKS5taW5vclN0ZXAoZSk6dC5taW5vclN0ZXAoKX0sdC5tYWpvclN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K2VbMF0sZz0rZVsxXSx0KTpbdixnXX0sdC5taW5vclN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K2VbMF0sbT0rZVsxXSx0KTpbcCxtXX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K2UsYz15cihzLG8sOTApLGg9YnIobixyLHkpLGY9eXIodSxsLDkwKSxkPWJyKGEsaSx5KSx0KTp5fSx0Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTArRm9dLFsxODAsOTAtRm9dXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1Gb10sWzE4MCw4MCtGb11dKX0sdW8uZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybnsKdHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6W2V8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpXX19dmFyIGUscixuPXhyLGk9X3I7cmV0dXJuIHQuZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdW8uZ2VvLmRpc3RhbmNlKGV8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sdC5zb3VyY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cixlPSJmdW5jdGlvbiI9PXR5cGVvZiByP251bGw6cix0KTpufSx0LnRhcmdldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDplLHQpOml9LHQucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dDowfSx0fSx1by5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd3IodFswXSpIbyx0WzFdKkhvLGVbMF0qSG8sZVsxXSpIbyl9LHVvLmdlby5sZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIFdzPTAsdW8uZ2VvLnN0cmVhbSh0LFpzKSxXc307dmFyIFdzLFpzPXtzcGhlcmU6TSxwb2ludDpNLGxpbmVTdGFydDpNcixsaW5lRW5kOk0scG9seWdvblN0YXJ0Ok0scG9seWdvbkVuZDpNfSxKcz1rcihmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErdCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmFzaW4odC8yKX0pOyh1by5nZW8uYXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKEpzKX0pLnJhdz1Kczt2YXIgS3M9a3IoZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5hY29zKHQpO3JldHVybiBlJiZlL01hdGguc2luKGUpfSx4KTsodW8uZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIHNyKEtzKX0pLnJhdz1LcywodW8uZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIFllKEFyKX0pLnJhdz1BciwodW8uZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWWUoVHIpfSkucmF3PVRyO3ZhciBRcz1rcihmdW5jdGlvbih0KXtyZXR1cm4gMS90fSxNYXRoLmF0YW4pOyh1by5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gc3IoUXMpfSkucmF3PVFzLFNyLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS1Wb119LCh1by5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gRXIoU3IpfSkucmF3PVNyO3ZhciAkcz1rcihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFzaW4pOyh1by5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKCRzKX0pLnJhdz0kczt2YXIgdGw9a3IoZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pOyh1by5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBzcih0bCl9KS5yYXc9dGwsTHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1Wb119LCh1by5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9RXIoTHIpLGU9dC5jZW50ZXIscj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/ZShbLXRbMV0sdFswXV0pOih0PWUoKSxbdFsxXSwtdFswXV0pfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD9yKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6KHQ9cigpLFt0WzBdLHRbMV0sdFsyXS05MF0pfSxyKFswLDAsOTBdKX0pLnJhdz1Mcix1by5nZW9tPXt9LHVvLmdlb20uaHVsbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIGUsaT1FdChyKSxhPUV0KG4pLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goWytpLmNhbGwodGhpcyx0W2VdLGUpLCthLmNhbGwodGhpcyx0W2VdLGUpLGVdKTtmb3Iocy5zb3J0KERyKSxlPTA7ZTxvO2UrKylsLnB1c2goW3NbZV1bMF0sLXNbZV1bMV1dKTt2YXIgdT1JcihzKSxjPUlyKGwpLGg9Y1swXT09PXVbMF0sZj1jW2MubGVuZ3RoLTFdPT09dVt1Lmxlbmd0aC0xXSxkPVtdO2ZvcihlPXUubGVuZ3RoLTE7ZT49MDstLWUpZC5wdXNoKHRbc1t1W2VdXVsyXV0pO2ZvcihlPStoO2U8Yy5sZW5ndGgtZjsrK2UpZC5wdXNoKHRbc1tjW2VdXVsyXV0pO3JldHVybiBkfXZhciByPUNyLG49enI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0KTooZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZSk6cn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZSl9LHVvLmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4gQW8odCxlbCksdH07dmFyIGVsPXVvLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZWwuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0saT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGkrPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqaX0sZWwuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dGhpcy5sZW5ndGgsYT0wLG89MCxzPXRoaXNbaS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248aTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0sYSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVyblthKnQsbyp0XX0sZWwuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHM9UnIodCksbD0tMSx1PXRoaXMubGVuZ3RoLVJyKHRoaXMpLGM9dGhpc1t1LTFdOysrbDx1Oyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsaT10aGlzW2xdLGE9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylvPWVbcl0sUHIobyxjLGkpPyhQcihhLGMsaSl8fHQucHVzaChPcihhLG8sYyxpKSksdC5wdXNoKG8pKTpQcihhLGMsaSkmJnQucHVzaChPcihhLG8sYyxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSxjPWl9cmV0dXJuIHR9O3ZhciBybCxubCxpbCxhbCxvbCxzbD1bXSxsbD1bXTtxci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMuZWRnZXMscj1lLmxlbmd0aDtyLS07KXQ9ZVtyXS5lZGdlLHQuYiYmdC5hfHxlLnNwbGljZShyLDEpO3JldHVybiBlLnNvcnQoWXIpLGUubGVuZ3RofSxybi5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxubi5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbih0LGUpe3ZhciByLG4saTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtyPXR9ZWxzZSB0aGlzLl8/KHQ9bG4odGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUscj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLHI9bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9cixlLkM9ITAsdD1lO3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYob24odGhpcyxyKSx0PXIscj10LlUpLHIuQz0hMSxuLkM9ITAsc24odGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLkwmJihzbih0aGlzLHIpLHQ9cixyPXQuVSksci5DPSExLG4uQz0hMCxvbih0aGlzLG4pKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9sbihvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKXtpZih0JiZ0LkMpcmV0dXJuIHZvaWQodC5DPSExKTtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKGU9aS5SLGUuQyYmKGUuQz0hMSxpLkM9ITAsb24odGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxzbih0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxvbih0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9aS5MLGUuQyYmKGUuQz0hMSxpLkM9ITAsc24odGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxvbih0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxzbih0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdW8uZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxuPXNbMF1bMF0saT1zWzBdWzFdLGE9c1sxXVswXSxvPXNbMV1bMV07cmV0dXJuIHVuKHIodCkscykuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLHMpe3ZhciBsPXIuZWRnZXMsdT1yLnNpdGU7KGVbc109bC5sZW5ndGg/bC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zdGFydCgpO3JldHVybltlLngsZS55XX0pOnUueD49biYmdS54PD1hJiZ1Lnk+PWkmJnUueTw9bz9bW24sb10sW2Esb10sW2EsaV0sW24saV1dOltdKS5wb2ludD10W3NdfSksZX1mdW5jdGlvbiByKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybnt4Ok1hdGgucm91bmQoYSh0LGUpL0ZvKSpGbyx5Ok1hdGgucm91bmQobyh0LGUpL0ZvKSpGbyxpOmV9fSl9dmFyIG49Q3IsaT16cixhPW4sbz1pLHM9dWw7cmV0dXJuIHQ/ZSh0KTooZS5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gdW4ocih0KSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnRbZS5sLmldLHRhcmdldDp0W2Uuci5pXX19KX0sZS50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHVuKHIodCkpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtmb3IodmFyIGksYT1yLnNpdGUsbz1yLmVkZ2VzLnNvcnQoWXIpLHM9LTEsbD1vLmxlbmd0aCx1PW9bbC0xXS5lZGdlLGM9dS5sPT09YT91LnI6dS5sOysrczxsOyl1LGk9Yyx1PW9bc10uZWRnZSxjPXUubD09PWE/dS5yOnUubCxuPGkuaSYmbjxjLmkmJmhuKGEsaSxjKTwwJiZlLnB1c2goW3Rbbl0sdFtpLmldLHRbYy5pXV0pfSksZX0sZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUV0KG49dCksZSk6bn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUV0KGk9dCksZSk6aX0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/dWw6dCxlKTpzPT09dWw/bnVsbDpzfSxlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZS5jbGlwRXh0ZW50KHQmJltbMCwwXSx0XSk6cz09PXVsP251bGw6cyYmc1sxXX0sZSl9O3ZhciB1bD1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTt1by5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKHQpe3JldHVybiB1by5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXModCl9LHVvLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe2Z1bmN0aW9uIGEodCxlLHIsbixpLGEsbyxzKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZih0LmxlYWYpe3ZhciBsPXQueCxjPXQueTtpZihudWxsIT1sKWlmKHhvKGwtcikreG8oYy1uKTwuMDEpdSh0LGUscixuLGksYSxvLHMpO2Vsc2V7dmFyIGg9dC5wb2ludDt0Lng9dC55PXQucG9pbnQ9bnVsbCx1KHQsaCxsLGMsaSxhLG8scyksdSh0LGUscixuLGksYSxvLHMpfWVsc2UgdC54PXIsdC55PW4sdC5wb2ludD1lfWVsc2UgdSh0LGUscixuLGksYSxvLHMpfWZ1bmN0aW9uIHUodCxlLHIsbixpLG8scyxsKXt2YXIgdT0uNSooaStzKSxjPS41KihvK2wpLGg9cj49dSxmPW4+PWMsZD1mPDwxfGg7dC5sZWFmPSExLHQ9dC5ub2Rlc1tkXXx8KHQubm9kZXNbZF09cG4oKSksaD9pPXU6cz11LGY/bz1jOmw9YyxhKHQsZSxyLG4saSxvLHMsbCl9dmFyIGMsaCxmLGQscCxtLHYsZyx5LGI9RXQocykseD1FdChsKTtpZihudWxsIT1lKW09ZSx2PXIsZz1uLHk9aTtlbHNlIGlmKGc9eT0tKG09dj0xLzApLGg9W10sZj1bXSxwPXQubGVuZ3RoLG8pZm9yKGQ9MDtkPHA7KytkKWM9dFtkXSxjLng8bSYmKG09Yy54KSxjLnk8diYmKHY9Yy55KSxjLng+ZyYmKGc9Yy54KSxjLnk+eSYmKHk9Yy55KSxoLnB1c2goYy54KSxmLnB1c2goYy55KTtlbHNlIGZvcihkPTA7ZDxwOysrZCl7dmFyIF89K2IoYz10W2RdLGQpLHc9K3goYyxkKTtfPG0mJihtPV8pLHc8diYmKHY9dyksXz5nJiYoZz1fKSx3PnkmJih5PXcpLGgucHVzaChfKSxmLnB1c2godyl9dmFyIE09Zy1tLGs9eS12O00+az95PXYrTTpnPW0razt2YXIgQT1wbigpO2lmKEEuYWRkPWZ1bmN0aW9uKHQpe2EoQSx0LCtiKHQsKytkKSwreCh0LGQpLG0sdixnLHkpfSxBLnZpc2l0PWZ1bmN0aW9uKHQpe21uKHQsQSxtLHYsZyx5KX0sQS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB2bihBLHRbMF0sdFsxXSxtLHYsZyx5KX0sZD0tMSxudWxsPT1lKXtmb3IoOysrZDxwOylhKEEsdFtkXSxoW2RdLGZbZF0sbSx2LGcseSk7LS1kfWVsc2UgdC5mb3JFYWNoKEEuYWRkKTtyZXR1cm4gaD1mPXQ9Yz1udWxsLEF9dmFyIG8scz1DcixsPXpyO3JldHVybihvPWFyZ3VtZW50cy5sZW5ndGgpPyhzPWZuLGw9ZG4sMz09PW8mJihpPXIsbj1lLHI9ZT0wKSxhKHQpKTooYS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsYSk6c30sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsYSk6bH0sYS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSxhKTpudWxsPT1lP251bGw6W1tlLHJdLFtuLGldXX0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT1yPTAsbj0rdFswXSxpPSt0WzFdKSxhKTpudWxsPT1lP251bGw6W24tZSxpLXJdfSxhKX0sdW8uaW50ZXJwb2xhdGVSZ2I9Z24sdW8uaW50ZXJwb2xhdGVPYmplY3Q9eW4sdW8uaW50ZXJwb2xhdGVOdW1iZXI9Ym4sdW8uaW50ZXJwb2xhdGVTdHJpbmc9eG47dmFyIGNsPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxobD1uZXcgUmVnRXhwKGNsLnNvdXJjZSwiZyIpO3VvLmludGVycG9sYXRlPV9uLHVvLmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIGU7cmV0dXJuKCJzdHJpbmciPT09cj9ucy5oYXMoZS50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcKHxoc2xcKCkvaS50ZXN0KGUpP2duOnhuOmUgaW5zdGFuY2VvZiBsdD9nbjpBcnJheS5pc0FycmF5KGUpP3duOiJvYmplY3QiPT09ciYmaXNOYU4oZSk/eW46Ym4pKHQsZSl9XSx1by5pbnRlcnBvbGF0ZUFycmF5PXduO3ZhciBmbD1mdW5jdGlvbigpe3JldHVybiB4fSxkbD11by5tYXAoe2xpbmVhcjpmbCxwb2x5OkxuLHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gVG59LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIFNufSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gQ259LGV4cDpmdW5jdGlvbigpe3JldHVybiB6bn0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIElufSxlbGFzdGljOkRuLGJhY2s6UG4sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIE9ufX0pLHBsPXVvLm1hcCh7aW46eCxvdXQ6a24sImluLW91dCI6QW4sIm91dC1pbiI6ZnVuY3Rpb24odCl7cmV0dXJuIEFuKGtuKHQpKX19KTt1by5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLSIpLHI9ZT49MD90LnNsaWNlKDAsZSk6dCxuPWU+PTA/dC5zbGljZShlKzEpOiJpbiI7cmV0dXJuIHI9ZGwuZ2V0KHIpfHxmbCxuPXBsLmdldChuKXx8eCxNbihuKHIuYXBwbHkobnVsbCxjby5jYWxsKGFyZ3VtZW50cywxKSkpKX0sdW8uaW50ZXJwb2xhdGVIY2w9Um4sdW8uaW50ZXJwb2xhdGVIc2w9Rm4sdW8uaW50ZXJwb2xhdGVMYWI9am4sdW8uaW50ZXJwb2xhdGVSb3VuZD1Obix1by50cmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9Zm8uY3JlYXRlRWxlbWVudE5TKHVvLm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4odW8udHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe2Uuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpO3ZhciByPWUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IEJuKHI/ci5tYXRyaXg6bWwpfSkodCl9LEJuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgbWw9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTt1by5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1abix1by5sYXlvdXQ9e30sdW8ubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goUW4odFtyXSkpO3JldHVybiBlfX0sdW8ubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LHUsaCxmLGQscD17fSxtPVtdLHY9dW8ucmFuZ2UoYSksZz1bXTtmb3Iocj1bXSxuPVtdLHQ9MCxmPS0xOysrZjxhOyl7Zm9yKHU9MCxkPS0xOysrZDxhOyl1Kz1pW2ZdW2RdO20ucHVzaCh1KSxnLnB1c2godW8ucmFuZ2UoYSkpLHQrPXV9Zm9yKG8mJnYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBvKG1bdF0sbVtlXSl9KSxzJiZnLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gcyhpW2VdW3RdLGlbZV1bcl0pfSl9KSx0PShCby1jKmEpL3QsdT0wLGY9LTE7KytmPGE7KXtmb3IoaD11LGQ9LTE7KytkPGE7KXt2YXIgeT12W2ZdLGI9Z1t5XVtkXSx4PWlbeV1bYl0sXz11LHc9dSs9eCp0O3BbeSsiLSIrYl09e2luZGV4Onksc3ViaW5kZXg6YixzdGFydEFuZ2xlOl8sZW5kQW5nbGU6dyx2YWx1ZTp4fX1uW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6aCxlbmRBbmdsZTp1LHZhbHVlOm1beV19LHUrPWN9Zm9yKGY9LTE7KytmPGE7KWZvcihkPWYtMTsrK2Q8YTspe3ZhciBNPXBbZisiLSIrZF0saz1wW2QrIi0iK2ZdOyhNLnZhbHVlfHxrLnZhbHVlKSYmci5wdXNoKE0udmFsdWU8ay52YWx1ZT97c291cmNlOmssdGFyZ2V0Ok19Ontzb3VyY2U6TSx0YXJnZXQ6a30pfWwmJmUoKX1mdW5jdGlvbiBlKCl7ci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwoKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yLChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSkvMil9KX12YXIgcixuLGksYSxvLHMsbCx1PXt9LGM9MDtyZXR1cm4gdS5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9KGk9dCkmJmkubGVuZ3RoLHI9bj1udWxsLHUpOml9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHI9bj1udWxsLHUpOmN9LHUuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHI9bj1udWxsLHUpOm99LHUuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHI9bnVsbCx1KTpzfSx1LnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxyJiZlKCksdSk6bH0sdS5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dCgpLHJ9LHUuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIG58fHQoKSxufSx1fSx1by5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtpZihlLnBvaW50IT09dCl7dmFyIGE9ZS5jeC10Lngsbz1lLmN5LXQueSxzPWktcixsPWEqYStvKm87aWYocypzL2c8bCl7aWYobDxtKXt2YXIgdT1lLmNoYXJnZS9sO3QucHgtPWEqdSx0LnB5LT1vKnV9cmV0dXJuITB9aWYoZS5wb2ludCYmbCYmbDxtKXt2YXIgdT1lLnBvaW50Q2hhcmdlL2w7dC5weC09YSp1LHQucHktPW8qdX19cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBlKHQpe3QucHg9dW8uZXZlbnQueCx0LnB5PXVvLmV2ZW50LnksbC5yZXN1bWUoKX12YXIgcixuLGksYSxvLHMsbD17fSx1PXVvLmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxjPVsxLDFdLGg9LjksZj12bCxkPWdsLHA9LTMwLG09eWwsdj0uMSxnPS42NCx5PVtdLGI9W107cmV0dXJuIGwudGljaz1mdW5jdGlvbigpe2lmKChpKj0uOTkpPC4wMDUpcmV0dXJuIHI9bnVsbCx1LmVuZCh7dHlwZToiZW5kIixhbHBoYTppPTB9KSwhMDt2YXIgZSxuLGwsZixkLG0sZyx4LF8sdz15Lmxlbmd0aCxNPWIubGVuZ3RoO2ZvcihuPTA7bjxNOysrbilsPWJbbl0sZj1sLnNvdXJjZSxkPWwudGFyZ2V0LHg9ZC54LWYueCxfPWQueS1mLnksKG09eCp4K18qXykmJihtPWkqb1tuXSooKG09TWF0aC5zcXJ0KG0pKS1hW25dKS9tLHgqPW0sXyo9bSxkLngtPXgqKGc9Zi53ZWlnaHQrZC53ZWlnaHQ/Zi53ZWlnaHQvKGYud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT1fKmcsZi54Kz14KihnPTEtZyksZi55Kz1fKmcpO2lmKChnPWkqdikmJih4PWNbMF0vMixfPWNbMV0vMixuPS0xLGcpKWZvcig7KytuPHc7KWw9eVtuXSxsLngrPSh4LWwueCkqZyxsLnkrPShfLWwueSkqZztpZihwKWZvcihhaShlPXVvLmdlb20ucXVhZHRyZWUoeSksaSxzKSxuPS0xOysrbjx3OykobD15W25dKS5maXhlZHx8ZS52aXNpdCh0KGwpKTtmb3Iobj0tMTsrK248dzspbD15W25dLGwuZml4ZWQ/KGwueD1sLnB4LGwueT1sLnB5KToobC54LT0obC5weC0obC5weD1sLngpKSpoLGwueS09KGwucHktKGwucHk9bC55KSkqaCk7dS50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTppfSl9LGwubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dCxsKTp5fSxsLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQsbCk6Yn0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbCk6Y30sbC5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxsKTpmfSxsLmRpc3RhbmNlPWwubGlua0Rpc3RhbmNlLGwubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3QsbCk6ZH0sbC5mcmljdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxsKTpofSxsLmNoYXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LGwpOnB9LGwuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCp0LGwpOk1hdGguc3FydChtKX0sbC5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PSt0LGwpOnZ9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dCp0LGwpOk1hdGguc3FydChnKX0sbC5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxpP3Q+MD9pPXQ6KHIuYz1udWxsLHIudD1OYU4scj1udWxsLHUuZW5kKHt0eXBlOiJlbmQiLGFscGhhOmk9MH0pKTp0PjAmJih1LnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6aT10fSkscj1EdChsLnRpY2spKSxsKTppfSxsLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe2lmKCFyKXtmb3Iocj1uZXcgQXJyYXkoaSksbD0wO2w8aTsrK2wpcltsXT1bXTtmb3IobD0wO2w8dTsrK2wpe3ZhciBhPWJbbF07clthLnNvdXJjZS5pbmRleF0ucHVzaChhLnRhcmdldCksclthLnRhcmdldC5pbmRleF0ucHVzaChhLnNvdXJjZSl9fWZvcih2YXIgbyxzPXJbZV0sbD0tMSxjPXMubGVuZ3RoOysrbDxjOylpZighaXNOYU4obz1zW2xdW3RdKSlyZXR1cm4gbztyZXR1cm4gTWF0aC5yYW5kb20oKSpufXZhciBlLHIsbixpPXkubGVuZ3RoLHU9Yi5sZW5ndGgsaD1jWzBdLG09Y1sxXTtmb3IoZT0wO2U8aTsrK2UpKG49eVtlXSkuaW5kZXg9ZSxuLndlaWdodD0wO2ZvcihlPTA7ZTx1OysrZSluPWJbZV0sIm51bWJlciI9PXR5cGVvZiBuLnNvdXJjZSYmKG4uc291cmNlPXlbbi5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIG4udGFyZ2V0JiYobi50YXJnZXQ9eVtuLnRhcmdldF0pLCsrbi5zb3VyY2Uud2VpZ2h0LCsrbi50YXJnZXQud2VpZ2h0O2ZvcihlPTA7ZTxpOysrZSluPXlbZV0saXNOYU4obi54KSYmKG4ueD10KCJ4IixoKSksaXNOYU4obi55KSYmKG4ueT10KCJ5IixtKSksaXNOYU4obi5weCkmJihuLnB4PW4ueCksaXNOYU4obi5weSkmJihuLnB5PW4ueSk7aWYoYT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IoZT0wO2U8dTsrK2UpYVtlXT0rZi5jYWxsKHRoaXMsYltlXSxlKTtlbHNlIGZvcihlPTA7ZTx1OysrZSlhW2VdPWY7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZClmb3IoZT0wO2U8dTsrK2Upb1tlXT0rZC5jYWxsKHRoaXMsYltlXSxlKTtlbHNlIGZvcihlPTA7ZTx1OysrZSlvW2VdPWQ7aWYocz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgcClmb3IoZT0wO2U8aTsrK2Upc1tlXT0rcC5jYWxsKHRoaXMseVtlXSxlKTtlbHNlIGZvcihlPTA7ZTxpOysrZSlzW2VdPXA7cmV0dXJuIGwucmVzdW1lKCl9LGwucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWxwaGEoLjEpfSxsLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gbC5hbHBoYSgwKX0sbC5kcmFnPWZ1bmN0aW9uKCl7aWYobnx8KG49dW8uYmVoYXZpb3IuZHJhZygpLm9yaWdpbih4KS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixlaSkub24oImRyYWcuZm9yY2UiLGUpLm9uKCJkcmFnZW5kLmZvcmNlIixyaSkpLCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO3RoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsbmkpLm9uKCJtb3VzZW91dC5mb3JjZSIsaWkpLmNhbGwobil9LHVvLnJlYmluZChsLHUsIm9uIil9O3ZhciB2bD0yMCxnbD0xLHlsPTEvMDt1by5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpKXt2YXIgYSxvPVtpXSxzPVtdO2ZvcihpLmRlcHRoPTA7bnVsbCE9KGE9by5wb3AoKSk7KWlmKHMucHVzaChhKSwodT1yLmNhbGwodCxhLGEuZGVwdGgpKSYmKGw9dS5sZW5ndGgpKXtmb3IodmFyIGwsdSxjOy0tbD49MDspby5wdXNoKGM9dVtsXSksYy5wYXJlbnQ9YSxjLmRlcHRoPWEuZGVwdGgrMTtuJiYoYS52YWx1ZT0wKSxhLmNoaWxkcmVuPXV9ZWxzZSBuJiYoYS52YWx1ZT0rbi5jYWxsKHQsYSxhLmRlcHRoKXx8MCksZGVsZXRlIGEuY2hpbGRyZW47cmV0dXJuIGxpKGksZnVuY3Rpb24odCl7dmFyIHIsaTtlJiYocj10LmNoaWxkcmVuKSYmci5zb3J0KGUpLG4mJihpPXQucGFyZW50KSYmKGkudmFsdWUrPXQudmFsdWUpfSksc312YXIgZT1oaSxyPXVpLG49Y2k7cmV0dXJuIHQuc29ydD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLHQpOmV9LHQuY2hpbGRyZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5yZXZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBuJiYoc2koZSxmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pLGxpKGUsZnVuY3Rpb24oZSl7dmFyIHI7ZS5jaGlsZHJlbnx8KGUudmFsdWU9K24uY2FsbCh0LGUsZS5kZXB0aCl8fDApLChyPWUucGFyZW50KSYmKHIudmFsdWUrPWUudmFsdWUpfSkpLGV9LHR9LHVvLmxheW91dC5wYXJ0aXRpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuY2hpbGRyZW47aWYoZS54PXIsZS55PWUuZGVwdGgqaSxlLmR4PW4sZS5keT1pLGEmJihvPWEubGVuZ3RoKSl7dmFyIG8scyxsLHU9LTE7Zm9yKG49ZS52YWx1ZT9uL2UudmFsdWU6MDsrK3U8bzspdChzPWFbdV0scixsPXMudmFsdWUqbixpKSxyKz1sfX1mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW4sbj0wO2lmKHImJihpPXIubGVuZ3RoKSlmb3IodmFyIGksYT0tMTsrK2E8aTspbj1NYXRoLm1heChuLGUoclthXSkpO3JldHVybiAxK259ZnVuY3Rpb24gcihyLGEpe3ZhciBvPW4uY2FsbCh0aGlzLHIsYSk7cmV0dXJuIHQob1swXSwwLGlbMF0saVsxXS9lKG9bMF0pKSxvfXZhciBuPXVvLmxheW91dC5oaWVyYXJjaHkoKSxpPVsxLDFdO3JldHVybiByLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxyKTppfSxvaShyLG4pfSx1by5sYXlvdXQucGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChvKXt2YXIgcyxsPW8ubGVuZ3RoLHU9by5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm4rZS5jYWxsKHQscixuKX0pLGM9KygiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxoPSgiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKS1jLGY9TWF0aC5taW4oTWF0aC5hYnMoaCkvbCwrKCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmEpKSxkPWYqKGg8MD8tMToxKSxwPXVvLnN1bSh1KSxtPXA/KGgtbCpkKS9wOjAsdj11by5yYW5nZShsKSxnPVtdO3JldHVybiBudWxsIT1yJiZ2LnNvcnQocj09PWJsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHVbZV0tdVt0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihvW3RdLG9bZV0pfSksdi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2dbdF09e2RhdGE6b1t0XSx2YWx1ZTpzPXVbdF0sc3RhcnRBbmdsZTpjLGVuZEFuZ2xlOmMrPXMqbStkLHBhZEFuZ2xlOmZ9fSksZ312YXIgZT1OdW1iZXIscj1ibCxuPTAsaT1CbyxhPTA7cmV0dXJuIHQudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cix0KTplfSx0LnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnN0YXJ0QW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0KTpufSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdCk6aX0sdC5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHQpOmF9LHR9O3ZhciBibD17fTt1by5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHMsbCl7aWYoIShmPXMubGVuZ3RoKSlyZXR1cm4gczt2YXIgdT1zLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlLmNhbGwodCxyLG4pfSksYz11Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm5bYS5jYWxsKHQsZSxyKSxvLmNhbGwodCxlLHIpXX0pfSksaD1yLmNhbGwodCxjLGwpO3U9dW8ucGVybXV0ZSh1LGgpLGM9dW8ucGVybXV0ZShjLGgpO3ZhciBmLGQscCxtLHY9bi5jYWxsKHQsYyxsKSxnPXVbMF0ubGVuZ3RoO2ZvcihwPTA7cDxnOysrcClmb3IoaS5jYWxsKHQsdVswXVtwXSxtPXZbcF0sY1swXVtwXVsxXSksZD0xO2Q8ZjsrK2QpaS5jYWxsKHQsdVtkXVtwXSxtKz1jW2QtMV1bcF1bMV0sY1tkXVtwXVsxXSk7cmV0dXJuIHN9dmFyIGU9eCxyPXZpLG49Z2ksaT1taSxhPWRpLG89cGk7cmV0dXJuIHQudmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXIsdCk6ZX0sdC5vcmRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnhsLmdldChlKXx8dmksdCk6cn0sdC5vZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpfbC5nZXQoZSl8fGdpLHQpOm59LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHQpOmF9LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLHQpOm99LHQub3V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdCk6aX0sdH07dmFyIHhsPXVvLm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lmxlbmd0aCxpPXQubWFwKHlpKSxhPXQubWFwKGJpKSxvPXVvLnJhbmdlKG4pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gaVt0XS1pW2VdfSkscz0wLGw9MCx1PVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9b1tlXSxzPGw/KHMrPWFbcl0sdS5wdXNoKHIpKToobCs9YVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHVvLnJhbmdlKHQubGVuZ3RoKS5yZXZlcnNlKCl9LGRlZmF1bHQ6dml9KSxfbD11by5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxhOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLHUsYz10Lmxlbmd0aCxoPXRbMF0sZj1oLmxlbmd0aCxkPVtdO2ZvcihkWzBdPWw9dT0wLHI9MTtyPGY7KytyKXtmb3IoZT0wLGk9MDtlPGM7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxhPTAscz1oW3JdWzBdLWhbci0xXVswXTtlPGM7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvczthKz1vKnRbZV1bcl1bMV19ZFtyXT1sLT1pP2EvaSpzOjAsbDx1JiYodT1sKX1mb3Iocj0wO3I8ZjsrK3IpZFtyXS09dTtyZXR1cm4gZH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz0xL2kscz1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8YTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOmdpfSk7dW8ubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxhKXtmb3IodmFyIG8scyxsPVtdLHU9dC5tYXAocix0aGlzKSxjPW4uY2FsbCh0aGlzLHUsYSksaD1pLmNhbGwodGhpcyxjLHUsYSksYT0tMSxmPXUubGVuZ3RoLGQ9aC5sZW5ndGgtMSxwPWU/MToxL2Y7KythPGQ7KW89bFthXT1bXSxvLmR4PWhbYSsxXS0oby54PWhbYV0pLG8ueT0wO2lmKGQ+MClmb3IoYT0tMTsrK2E8ZjspKHM9dVthXSk+PWNbMF0mJnM8PWNbMV0mJihvPWxbdW8uYmlzZWN0KGgscywxLGQpLTFdLG8ueSs9cCxvLnB1c2godFthXSkpO3JldHVybiBsfXZhciBlPSEwLHI9TnVtYmVyLG49TWksaT1faTtyZXR1cm4gdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHQpOnJ9LHQucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49RXQoZSksdCk6bn0sdC5iaW5zPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgZT9mdW5jdGlvbih0KXtyZXR1cm4gd2kodCxlKX06RXQoZSksdCk6aX0sdC5mcmVxdWVuY3k9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISFyLHQpOmV9LHR9LHVvLmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGEpe3ZhciBvPXIuY2FsbCh0aGlzLHQsYSkscz1vWzBdLGw9aVswXSx1PWlbMV0sYz1udWxsPT1lP01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O2lmKHMueD1zLnk9MCxsaShzLGZ1bmN0aW9uKHQpe3Qucj0rYyh0LnZhbHVlKX0pLGxpKHMsRWkpLG4pe3ZhciBoPW4qKGU/MTpNYXRoLm1heCgyKnMuci9sLDIqcy5yL3UpKS8yO2xpKHMsZnVuY3Rpb24odCl7dC5yKz1ofSksbGkocyxFaSksbGkocyxmdW5jdGlvbih0KXt0LnItPWh9KX1yZXR1cm4gemkocyxsLzIsdS8yLGU/MToxL01hdGgubWF4KDIqcy5yL2wsMipzLnIvdSkpLG99dmFyIGUscj11by5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChraSksbj0wLGk9WzEsMV07cmV0dXJuIHQuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHQpOml9LHQucmFkaXVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXJ8fCJmdW5jdGlvbiI9PXR5cGVvZiByP3I6K3IsdCk6ZX0sdC5wYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlLHQpOm59LG9pKHQscil9LHVvLmxheW91dC50cmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkpe3ZhciBjPW8uY2FsbCh0aGlzLHQsaSksaD1jWzBdLGY9ZShoKTtpZihsaShmLHIpLGYucGFyZW50Lm09LWYueixzaShmLG4pLHUpc2koaCxhKTtlbHNle3ZhciBkPWgscD1oLG09aDtzaShoLGZ1bmN0aW9uKHQpe3QueDxkLngmJihkPXQpLHQueD5wLngmJihwPXQpLHQuZGVwdGg+bS5kZXB0aCYmKG09dCl9KTt2YXIgdj1zKGQscCkvMi1kLngsZz1sWzBdLyhwLngrcyhwLGQpLzIrdikseT1sWzFdLyhtLmRlcHRofHwxKTtzaShoLGZ1bmN0aW9uKHQpe3QueD0odC54K3YpKmcsdC55PXQuZGVwdGgqeX0pfXJldHVybiBjfWZ1bmN0aW9uIGUodCl7Zm9yKHZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX1mdW5jdGlvbiByKHQpe3ZhciBlPXQuY2hpbGRyZW4scj10LnBhcmVudC5jaGlsZHJlbixuPXQuaT9yW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXtGaSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtuPyh0Lno9bi56K3ModC5fLG4uXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIG4mJih0Lno9bi56K3ModC5fLG4uXykpO3QucGFyZW50LkE9aSh0LG4sdC5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gbih0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gaSh0LGUscil7aWYoZSl7Zm9yKHZhciBuLGk9dCxhPXQsbz1lLGw9aS5wYXJlbnQuY2hpbGRyZW5bMF0sdT1pLm0sYz1hLm0saD1vLm0sZj1sLm07bz1PaShvKSxpPVBpKGkpLG8mJmk7KWw9UGkobCksYT1PaShhKSxhLmE9dCxuPW8ueitoLWkuei11K3Moby5fLGkuXyksbj4wJiYoUmkoamkobyx0LHIpLHQsbiksdSs9bixjKz1uKSxoKz1vLm0sdSs9aS5tLGYrPWwubSxjKz1hLm07byYmIU9pKGEpJiYoYS50PW8sYS5tKz1oLWMpLGkmJiFQaShsKSYmKGwudD1pLGwubSs9dS1mLHI9dCl9cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXt0LngqPWxbMF0sdC55PXQuZGVwdGgqbFsxXX12YXIgbz11by5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxzPURpLGw9WzEsMV0sdT1udWxsO3JldHVybiB0LnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSx0KTpzfSx0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09KGw9ZSk/YTpudWxsLHQpOnU/bnVsbDpsfSx0Lm5vZGVTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShsPWUpP251bGw6YSx0KTp1P2w6bnVsbH0sb2kodCxvKX0sdW8ubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsYSl7dmFyIG8scz1lLmNhbGwodGhpcyx0LGEpLGw9c1swXSx1PTA7bGkobCxmdW5jdGlvbih0KXt2YXIgZT10LmNoaWxkcmVuO2UmJmUubGVuZ3RoPyh0Lng9QmkoZSksdC55PU5pKGUpKToodC54PW8/dSs9cih0LG8pOjAsdC55PTAsbz10KX0pO3ZhciBjPVVpKGwpLGg9VmkobCksZj1jLngtcihjLGgpLzIsZD1oLngrcihoLGMpLzI7cmV0dXJuIGxpKGwsaT9mdW5jdGlvbih0KXt0Lng9KHQueC1sLngpKm5bMF0sdC55PShsLnktdC55KSpuWzFdfTpmdW5jdGlvbih0KXt0Lng9KHQueC1mKS8oZC1mKSpuWzBdLHQueT0oMS0obC55P3QueS9sLnk6MSkpKm5bMV19KSxzfXZhciBlPXVvLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9RGksbj1bMSwxXSxpPSExO3JldHVybiB0LnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49ZSksdCk6aT9udWxsOm59LHQubm9kZVNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbCE9KG49ZSksdCk6aT9uOm51bGx9LG9pKHQsZSl9LHVvLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspbj0ocj10W2ldKS52YWx1ZSooZTwwPzA6ZSksci5hcmVhPWlzTmFOKG4pfHxuPD0wPzA6bn1mdW5jdGlvbiBlKHIpe3ZhciBhPXIuY2hpbGRyZW47aWYoYSYmYS5sZW5ndGgpe3ZhciBvLHMsbCx1PWgociksYz1bXSxmPWEuc2xpY2UoKSxwPTEvMCxtPSJzbGljZSI9PT1kP3UuZHg6ImRpY2UiPT09ZD91LmR5OiJzbGljZS1kaWNlIj09PWQ/MSZyLmRlcHRoP3UuZHk6dS5keDpNYXRoLm1pbih1LmR4LHUuZHkpO2Zvcih0KGYsdS5keCp1LmR5L3IudmFsdWUpLGMuYXJlYT0wOyhsPWYubGVuZ3RoKT4wOyljLnB1c2gobz1mW2wtMV0pLGMuYXJlYSs9by5hcmVhLCJzcXVhcmlmeSIhPT1kfHwocz1uKGMsbSkpPD1wPyhmLnBvcCgpLHA9cyk6KGMuYXJlYS09Yy5wb3AoKS5hcmVhLGkoYyxtLHUsITEpLG09TWF0aC5taW4odS5keCx1LmR5KSxjLmxlbmd0aD1jLmFyZWE9MCxwPTEvMCk7Yy5sZW5ndGgmJihpKGMsbSx1LCEwKSxjLmxlbmd0aD1jLmFyZWE9MCksYS5mb3JFYWNoKGUpfX1mdW5jdGlvbiByKGUpe3ZhciBuPWUuY2hpbGRyZW47aWYobiYmbi5sZW5ndGgpe3ZhciBhLG89aChlKSxzPW4uc2xpY2UoKSxsPVtdO2Zvcih0KHMsby5keCpvLmR5L2UudmFsdWUpLGwuYXJlYT0wO2E9cy5wb3AoKTspbC5wdXNoKGEpLGwuYXJlYSs9YS5hcmVhLG51bGwhPWEueiYmKGkobCxhLno/by5keDpvLmR5LG8sIXMubGVuZ3RoKSxsLmxlbmd0aD1sLmFyZWE9MCk7bi5mb3JFYWNoKHIpfX1mdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBuKj1uLGUqPWUsbj9NYXRoLm1heChlKmkqcC9uLG4vKGUqYSpwKSk6MS8wfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGksYT0tMSxvPXQubGVuZ3RoLHM9ci54LHU9ci55LGM9ZT9sKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2Zvcigobnx8Yz5yLmR5KSYmKGM9ci5keSk7KythPG87KWk9dFthXSxpLng9cyxpLnk9dSxpLmR5PWMscys9aS5keD1NYXRoLm1pbihyLngrci5keC1zLGM/bChpLmFyZWEvYyk6MCk7aS56PSEwLGkuZHgrPXIueCtyLmR4LXMsci55Kz1jLHIuZHktPWN9ZWxzZXtmb3IoKG58fGM+ci5keCkmJihjPXIuZHgpOysrYTxvOylpPXRbYV0saS54PXMsaS55PXUsaS5keD1jLHUrPWkuZHk9TWF0aC5taW4oci55K3IuZHktdSxjP2woaS5hcmVhL2MpOjApO2kuej0hMSxpLmR5Kz1yLnkrci5keS11LHIueCs9YyxyLmR4LT1jfX1mdW5jdGlvbiBhKG4pe3ZhciBpPW98fHMobiksYT1pWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD11WzBdLGEuZHk9dVsxXSk6YS5keD1hLmR5PTAsbyYmcy5yZXZhbHVlKGEpLHQoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwobz9yOmUpKGEpLGYmJihvPWkpLGl9dmFyIG8scz11by5sYXlvdXQuaGllcmFyY2h5KCksbD1NYXRoLnJvdW5kLHU9WzEsMV0sYz1udWxsLGg9SGksZj0hMSxkPSJzcXVhcmlmeSIscD0uNSooMStNYXRoLnNxcnQoNSkpO3JldHVybiBhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxhKTp1fSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgcj10LmNhbGwoYSxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP0hpKGUpOnFpKGUsIm51bWJlciI9PXR5cGVvZiByP1tyLHIscixyXTpyKX1mdW5jdGlvbiByKGUpe3JldHVybiBxaShlLHQpfWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjO3ZhciBuO3JldHVybiBoPW51bGw9PShjPXQpP0hpOiJmdW5jdGlvbiI9PShuPXR5cGVvZiB0KT9lOiJudW1iZXIiPT09bj8odD1bdCx0LHQsdF0scik6cixhfSxhLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQ/TWF0aC5yb3VuZDpOdW1iZXIsYSk6bCE9TnVtYmVyfSxhLnN0aWNreT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10LG89bnVsbCxhKTpmfSxhLnJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQsYSk6cH0sYS5tb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQrIiIsYSk6ZH0sb2koYSxzKX0sdW8ucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPDImJihlPTEpLHI8MSYmKHQ9MCksZnVuY3Rpb24oKXt2YXIgcixuLGk7ZG97cj0yKk1hdGgucmFuZG9tKCktMSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9cipyK24qbn13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIHQ9dW8ucmFuZG9tLm5vcm1hbC5hcHBseSh1byxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX0sYmF0ZXM6ZnVuY3Rpb24odCl7dmFyIGU9dW8ucmFuZG9tLmlyd2luSGFsbCh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSgpL3R9fSxpcndpbkhhbGw6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj0wO3I8dDtyKyspZSs9TWF0aC5yYW5kb20oKTtyZXR1cm4gZX19fSx1by5zY2FsZT17fTt2YXIgd2w9e2Zsb29yOngsY2VpbDp4fTt1by5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gS2koWzAsMV0sWzAsMV0sX24sITEpfTt2YXIgTWw9e3M6MSxnOjEscDoxLHI6MSxlOjF9O3VvLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBhYSh1by5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBrbD11by5mb3JtYXQoIi4wZSIpLEFsPXtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jZWlsKC10KX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5mbG9vcigtdCl9fTt1by5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gb2EodW8uc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LHVvLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdW8uc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSx1by5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGxhKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LHVvLnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdW8uc2NhbGUub3JkaW5hbCgpLnJhbmdlKFRsKX0sdW8uc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB1by5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU2wpfSx1by5zY2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiB1by5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRWwpfSx1by5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB1by5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoTGwpfTt2YXIgVGw9WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAoX3QpLFNsPVsyMDYyMjYwLDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQwMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQwLDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0MDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKF90KSxFbD1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAoX3QpLExsPVszMjQ0NzMzLDcwNTcxMTAsMTA0MDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQwMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAzOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3LDE0Mjc3MDgxXS5tYXAoX3QpO3VvLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHVhKFtdLFtdKX0sdW8uc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gY2EoMCwxLFswLDFdKX0sdW8uc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGhhKFsuNV0sWzAsMV0pfSx1by5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmYShbMCwxXSl9LHVvLnN2Zz17fSx1by5zdmcuYXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PU1hdGgubWF4KDAsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx1PU1hdGgubWF4KDAsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxjPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLVZvLGg9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyktVm8sZj1NYXRoLmFicyhoLWMpLGQ9Yz5oPzA6MTtpZih1PHQmJihwPXUsdT10LHQ9cCksZj49VW8pcmV0dXJuIGUodSxkKSsodD9lKHQsMS1kKToiIikrIloiO3ZhciBwLG0sdixnLHksYix4LF8sdyxNLGssQSxUPTAsUz0wLEU9W107aWYoKGc9KCtsLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJih2PWE9PT1DbD9NYXRoLnNxcnQodCp0K3UqdSk6K2EuYXBwbHkodGhpcyxhcmd1bWVudHMpLGR8fChTKj0tMSksdSYmKFM9bnQodi91Kk1hdGguc2luKGcpKSksdCYmKFQ9bnQodi90Kk1hdGguc2luKGcpKSkpLHUpe3k9dSpNYXRoLmNvcyhjK1MpLGI9dSpNYXRoLnNpbihjK1MpLHg9dSpNYXRoLmNvcyhoLVMpLF89dSpNYXRoLnNpbihoLVMpO3ZhciBMPU1hdGguYWJzKGgtYy0yKlMpPD1Obz8wOjE7aWYoUyYmYmEoeSxiLHgsXyk9PT1kXkwpe3ZhciBDPShjK2gpLzI7eT11Kk1hdGguY29zKEMpLGI9dSpNYXRoLnNpbihDKSx4PV89bnVsbH19ZWxzZSB5PWI9MDtpZih0KXt3PXQqTWF0aC5jb3MoaC1UKSxNPXQqTWF0aC5zaW4oaC1UKSxrPXQqTWF0aC5jb3MoYytUKSxBPXQqTWF0aC5zaW4oYytUKTt2YXIgej1NYXRoLmFicyhjLWgrMipUKTw9Tm8/MDoxO2lmKFQmJmJhKHcsTSxrLEEpPT09MS1kXnope3ZhciBJPShjK2gpLzI7dz10Kk1hdGguY29zKEkpLE09dCpNYXRoLnNpbihJKSxrPUE9bnVsbH19ZWxzZSB3PU09MDtpZihmPkZvJiYocD1NYXRoLm1pbihNYXRoLmFicyh1LXQpLzIsK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7bT10PHVeZD8wOjE7dmFyIEQ9cCxQPXA7aWYoZjxObyl7dmFyIE89bnVsbD09az9bdyxNXTpudWxsPT14P1t5LGJdOk9yKFt5LGJdLFtrLEFdLFt4LF9dLFt3LE1dKSxSPXktT1swXSxGPWItT1sxXSxqPXgtT1swXSxOPV8tT1sxXSxCPTEvTWF0aC5zaW4oTWF0aC5hY29zKChSKmorRipOKS8oTWF0aC5zcXJ0KFIqUitGKkYpKk1hdGguc3FydChqKmorTipOKSkpLzIpLFU9TWF0aC5zcXJ0KE9bMF0qT1swXStPWzFdKk9bMV0pO1A9TWF0aC5taW4ocCwodC1VKS8oQi0xKSksRD1NYXRoLm1pbihwLCh1LVUpLyhCKzEpKX1pZihudWxsIT14KXt2YXIgVj14YShudWxsPT1rP1t3LE1dOltrLEFdLFt5LGJdLHUsRCxkKSxIPXhhKFt4LF9dLFt3LE1dLHUsRCxkKTtwPT09RD9FLnB1c2goIk0iLFZbMF0sIkEiLEQsIiwiLEQsIiAwIDAsIixtLCIgIixWWzFdLCJBIix1LCIsIix1LCIgMCAiLDEtZF5iYShWWzFdWzBdLFZbMV1bMV0sSFsxXVswXSxIWzFdWzFdKSwiLCIsZCwiICIsSFsxXSwiQSIsRCwiLCIsRCwiIDAgMCwiLG0sIiAiLEhbMF0pOkUucHVzaCgiTSIsVlswXSwiQSIsRCwiLCIsRCwiIDAgMSwiLG0sIiAiLEhbMF0pfWVsc2UgRS5wdXNoKCJNIix5LCIsIixiKTtpZihudWxsIT1rKXt2YXIgcT14YShbeSxiXSxbayxBXSx0LC1QLGQpLEc9eGEoW3csTV0sbnVsbD09eD9beSxiXTpbeCxfXSx0LC1QLGQpO3A9PT1QP0UucHVzaCgiTCIsR1swXSwiQSIsUCwiLCIsUCwiIDAgMCwiLG0sIiAiLEdbMV0sIkEiLHQsIiwiLHQsIiAwICIsZF5iYShHWzFdWzBdLEdbMV1bMV0scVsxXVswXSxxWzFdWzFdKSwiLCIsMS1kLCIgIixxWzFdLCJBIixQLCIsIixQLCIgMCAwLCIsbSwiICIscVswXSk6RS5wdXNoKCJMIixHWzBdLCJBIixQLCIsIixQLCIgMCAwLCIsbSwiICIscVswXSl9ZWxzZSBFLnB1c2goIkwiLHcsIiwiLE0pfWVsc2UgRS5wdXNoKCJNIix5LCIsIixiKSxudWxsIT14JiZFLnB1c2goIkEiLHUsIiwiLHUsIiAwICIsTCwiLCIsZCwiICIseCwiLCIsXyksRS5wdXNoKCJMIix3LCIsIixNKSxudWxsIT1rJiZFLnB1c2goIkEiLHQsIiwiLHQsIiAwICIseiwiLCIsMS1kLCIgIixrLCIsIixBKTtyZXR1cm4gRS5wdXNoKCJaIiksRS5qb2luKCIiKX1mdW5jdGlvbiBlKHQsZSl7cmV0dXJuIk0wLCIrdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiK3R9dmFyIHI9cGEsbj1tYSxpPWRhLGE9Q2wsbz12YSxzPWdhLGw9eWE7cmV0dXJuIHQuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9RXQoZSksdCk6cn0sdC5vdXRlclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1FdChlKSx0KTpufSx0LmNvcm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1FdChlKSx0KTppfSx0LnBhZFJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lPT1DbD9DbDpFdChlKSx0KTphfSx0LnN0YXJ0QW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RXQoZSksdCk6b30sdC5lbmRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1FdChlKSx0KTpzfSx0LnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUV0KGUpLHQpOmx9LHQuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgdD0oK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsZT0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKyArcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItVm87cmV0dXJuW01hdGguY29zKGUpKnQsTWF0aC5zaW4oZSkqdF19LHR9O3ZhciBDbD0iYXV0byI7dW8uc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gX2EoeCl9O3ZhciB6bD11by5tYXAoe2xpbmVhcjp3YSwibGluZWFyLWNsb3NlZCI6TWEsc3RlcDprYSwic3RlcC1iZWZvcmUiOkFhLCJzdGVwLWFmdGVyIjpUYSxiYXNpczpJYSwiYmFzaXMtb3BlbiI6RGEsImJhc2lzLWNsb3NlZCI6UGEsYnVuZGxlOk9hLGNhcmRpbmFsOkxhLCJjYXJkaW5hbC1vcGVuIjpTYSwiY2FyZGluYWwtY2xvc2VkIjpFYSxtb25vdG9uZTpVYX0pO3psLmZvckVhY2goZnVuY3Rpb24odCxlKXtlLmtleT10LGUuY2xvc2VkPS8tY2xvc2VkJC8udGVzdCh0KX0pO3ZhciBJbD1bMCwyLzMsMS8zLDBdLERsPVswLDEvMywyLzMsMF0sUGw9WzAsMS82LDIvMywxLzZdO3VvLnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PV9hKFZhKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxBYS5yZXZlcnNlPVRhLFRhLnJldmVyc2U9QWEsdW8uc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gSGEoeCl9LHVvLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PUhhKFZhKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5pbm5lclJhZGl1cz10LngwLGRlbGV0ZSB0LngwLHQub3V0ZXJSYWRpdXM9dC54MSxkZWxldGUgdC54MSx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHQuc3RhcnRBbmdsZT10LnkwLGRlbGV0ZSB0LnkwLHQuZW5kQW5nbGU9dC55MSxkZWxldGUgdC55MSx0fSx1by5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQscyl7dmFyIGw9ZSh0aGlzLGEsdCxzKSx1PWUodGhpcyxvLHQscyk7cmV0dXJuIk0iK2wucDArbihsLnIsbC5wMSxsLmExLWwuYTApKyhyKGwsdSk/aShsLnIsbC5wMSxsLnIsbC5wMCk6aShsLnIsbC5wMSx1LnIsdS5wMCkrbih1LnIsdS5wMSx1LmExLXUuYTApK2kodS5yLHUucDEsbC5yLGwucDApKSsiWiJ9ZnVuY3Rpb24gZSh0LGUscixuKXt2YXIgaT1lLmNhbGwodCxyLG4pLGE9cy5jYWxsKHQsaSxuKSxvPWwuY2FsbCh0LGksbiktVm8sYz11LmNhbGwodCxpLG4pLVZvO3JldHVybntyOmEsYTA6byxhMTpjLHAwOlthKk1hdGguY29zKG8pLGEqTWF0aC5zaW4obyldLHAxOlthKk1hdGguY29zKGMpLGEqTWF0aC5zaW4oYyldfX1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQuYTA9PWUuYTAmJnQuYTE9PWUuYTF9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIkEiK3QrIiwiK3QrIiAwICIrICsocj5ObykrIiwxICIrZX1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiJRIDAsMCAiK259dmFyIGE9eHIsbz1fcixzPXFhLGw9dmEsdT1nYTtyZXR1cm4gdC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RXQoZSksdCk6c30sdC5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9RXQoZSksdCk6YX0sdC50YXJnZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RXQoZSksdCk6b30sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUV0KGUpLHQpOmx9LHQuZW5kQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9RXQoZSksdCk6dX0sdH0sdW8uc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkpe3ZhciBhPWUuY2FsbCh0aGlzLHQsaSksbz1yLmNhbGwodGhpcyx0LGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm4gbD1sLm1hcChuKSwiTSIrbFswXSsiQyIrbFsxXSsiICIrbFsyXSsiICIrbFszXX12YXIgZT14cixyPV9yLG49R2E7cmV0dXJuIHQuc291cmNlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUV0KHIpLHQpOmV9LHQudGFyZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUV0KGUpLHQpOnJ9LHQucHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHQpOm59LHR9LHVvLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD11by5zdmcuZGlhZ29uYWwoKSxlPUdhLHI9dC5wcm9qZWN0aW9uO3JldHVybiB0LnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihZYShlPXQpKTplfSx0fSx1by5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybihPbC5nZXQoZS5jYWxsKHRoaXMsdCxuKSl8fFphKShyLmNhbGwodGhpcyx0LG4pKX12YXIgZT1XYSxyPVhhO3JldHVybiB0LnR5cGU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9RXQociksdCk6ZX0sdC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUV0KGUpLHQpOnJ9LHR9O3ZhciBPbD11by5tYXAoe2NpcmNsZTpaYSxjcm9zczpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC81KS8yO3JldHVybiJNIistMyplKyIsIistZSsiSCIrLWUrIlYiKy0zKmUrIkgiK2UrIlYiKy1lKyJIIiszKmUrIlYiK2UrIkgiK2UrIlYiKzMqZSsiSCIrLWUrIlYiK2UrIkgiKy0zKmUrIloifSxkaWFtb25kOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LygyKkZsKSkscj1lKkZsO3JldHVybiJNMCwiKy1lKyJMIityKyIsMCAwLCIrZSsiICIrLXIrIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodCkvMjtyZXR1cm4iTSIrLWUrIiwiKy1lKyJMIitlKyIsIistZSsiICIrZSsiLCIrZSsiICIrLWUrIiwiK2UrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvUmwpLHI9ZSpSbC8yO3JldHVybiJNMCwiK3IrIkwiK2UrIiwiKy1yKyIgIistZSsiLCIrLXIrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L1JsKSxyPWUqUmwvMjtyZXR1cm4iTTAsIistcisiTCIrZSsiLCIrcisiICIrLWUrIiwiK3IrIloifX0pO3VvLnN2Zy5zeW1ib2xUeXBlcz1PbC5rZXlzKCk7dmFyIFJsPU1hdGguc3FydCgzKSxGbD1NYXRoLnRhbigzMCpIbyk7TG8udHJhbnNpdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPWpsfHwrK1ZsLGk9dG8odCksYT1bXSxvPU5sfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6RW4sZGVsYXk6MCxkdXJhdGlvbjoyNTB9LHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe2EucHVzaChlPVtdKTtmb3IodmFyIHU9dGhpc1tzXSxjPS0xLGg9dS5sZW5ndGg7KytjPGg7KShyPXVbY10pJiZlbyhyLGMsaSxuLG8pLGUucHVzaChyKX1yZXR1cm4gS2EoYSxpLG4pfSxMby5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT10P0JsOkphKHRvKHQpKSl9O3ZhciBqbCxObCxCbD1KYSh0bygpKSxVbD1bXSxWbD0wO1VsLmNhbGw9TG8uY2FsbCxVbC5lbXB0eT1Mby5lbXB0eSxVbC5ub2RlPUxvLm5vZGUsVWwuc2l6ZT1Mby5zaXplLHVvLnRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC50cmFuc2l0aW9uP2psP3QudHJhbnNpdGlvbihlKTp0OnVvLnNlbGVjdGlvbigpLnRyYW5zaXRpb24odCl9LHVvLnRyYW5zaXRpb24ucHJvdG90eXBlPVVsLFVsLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10aGlzLmlkLGE9dGhpcy5uYW1lc3BhY2Usbz1bXTt0PUModCk7Zm9yKHZhciBzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtvLnB1c2goZT1bXSk7Zm9yKHZhciB1PXRoaXNbc10sYz0tMSxoPXUubGVuZ3RoOysrYzxoOykobj11W2NdKSYmKHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxjLHMpKT8oIl9fZGF0YV9fImluIG4mJihyLl9fZGF0YV9fPW4uX19kYXRhX18pLAplbyhyLGMsYSxpLG5bYV1baV0pLGUucHVzaChyKSk6ZS5wdXNoKG51bGwpfXJldHVybiBLYShvLGEsaSl9LFVsLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dGhpcy5pZCxzPXRoaXMubmFtZXNwYWNlLGw9W107dD16KHQpO2Zvcih2YXIgdT0tMSxjPXRoaXMubGVuZ3RoOysrdTxjOylmb3IodmFyIGg9dGhpc1t1XSxmPS0xLGQ9aC5sZW5ndGg7KytmPGQ7KWlmKG49aFtmXSl7YT1uW3NdW29dLHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxmLHUpLGwucHVzaChlPVtdKTtmb3IodmFyIHA9LTEsbT1yLmxlbmd0aDsrK3A8bTspKGk9cltwXSkmJmVvKGkscCxzLG8sYSksZS5wdXNoKGkpfXJldHVybiBLYShsLHMsbyl9LFVsLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SCh0KSk7Zm9yKHZhciBhPTAsbz10aGlzLmxlbmd0aDthPG87YSsrKXtpLnB1c2goZT1bXSk7Zm9yKHZhciByPXRoaXNbYV0scz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIEthKGksdGhpcy5uYW1lc3BhY2UsdGhpcy5pZCl9LFVsLnR3ZWVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKClbbl1bcl0udHdlZW4uZ2V0KHQpOkcodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LFVsLmF0dHI9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUocyl9ZnVuY3Rpb24gbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMocy5zcGFjZSxzLmxvY2FsKX1mdW5jdGlvbiBpKHQpe3JldHVybiBudWxsPT10P3I6KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZShzKTtyZXR1cm4gciE9PXQmJihlPW8ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShzLGUodCkpfSl9KX1mdW5jdGlvbiBhKHQpe3JldHVybiBudWxsPT10P246KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZU5TKHMuc3BhY2Uscy5sb2NhbCk7cmV0dXJuIHIhPT10JiYoZT1vKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhzLnNwYWNlLHMubG9jYWwsZSh0KSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKGUgaW4gdCl0aGlzLmF0dHIoZSx0W2VdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3JtIj09dD9abjpfbixzPXVvLm5zLnF1YWxpZnkodCk7cmV0dXJuIFFhKHRoaXMsImF0dHIuIit0LGUscy5sb2NhbD9hOmkpfSxVbC5hdHRyVHdlZW49ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscil7dmFyIG49ZS5jYWxsKHRoaXMsdCxyLHRoaXMuZ2V0QXR0cmlidXRlKGkpKTtyZXR1cm4gbiYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxuKHQpKX19ZnVuY3Rpb24gbih0LHIpe3ZhciBuPWUuY2FsbCh0aGlzLHQscix0aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCkpO3JldHVybiBuJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxuKHQpKX19dmFyIGk9dW8ubnMucXVhbGlmeSh0KTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK3QsaS5sb2NhbD9uOnIpfSxVbC5zdHlsZT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gbnVsbD09ZT9pOihlKz0iIixmdW5jdGlvbigpe3ZhciBpLGE9bih0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gYSE9PWUmJihpPV9uKGEsZSksZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGkoZSkscil9KX0pfXZhciBvPWFyZ3VtZW50cy5sZW5ndGg7aWYobzwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe288MiYmKGU9IiIpO2ZvcihyIGluIHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1yZXR1cm4gUWEodGhpcywic3R5bGUuIit0LGUsYSl9LFVsLnN0eWxlVHdlZW49ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkoaSxhKXt2YXIgbz1lLmNhbGwodGhpcyxpLGEsbih0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KSk7cmV0dXJuIG8mJmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxvKGUpLHIpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIit0LGkpfSxVbC50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBRYSh0aGlzLCJ0ZXh0Iix0LCRhKX0sVWwucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLGZ1bmN0aW9uKCl7dmFyIGU7dGhpc1t0XS5jb3VudDwyJiYoZT10aGlzLnBhcmVudE5vZGUpJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSl9LFVsLmVhc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVvLmVhc2UuYXBwbHkodW8sYXJndW1lbnRzKSksRyh0aGlzLGZ1bmN0aW9uKG4pe25bcl1bZV0uZWFzZT10fSkpfSxVbC5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTpHKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZGVsYXk9K3QuY2FsbChuLG4uX19kYXRhX18saSxhKX06KHQ9K3QsZnVuY3Rpb24obil7bltyXVtlXS5kZWxheT10fSkpfSxVbC5kdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kdXJhdGlvbjpHKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZHVyYXRpb249TWF0aC5tYXgoMSx0LmNhbGwobixuLl9fZGF0YV9fLGksYSkpfToodD1NYXRoLm1heCgxLHQpLGZ1bmN0aW9uKG4pe25bcl1bZV0uZHVyYXRpb249dH0pKX0sVWwuZWFjaD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPU5sLGE9amw7dHJ5e2psPXIsRyh0aGlzLGZ1bmN0aW9uKGUsaSxhKXtObD1lW25dW3JdLHQuY2FsbChlLGUuX19kYXRhX18saSxhKX0pfWZpbmFsbHl7Tmw9aSxqbD1hfX1lbHNlIEcodGhpcyxmdW5jdGlvbihpKXt2YXIgYT1pW25dW3JdOyhhLmV2ZW50fHwoYS5ldmVudD11by5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKHQsZSl9KTtyZXR1cm4gdGhpc30sVWwudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbixpPXRoaXMuaWQsYT0rK1ZsLG89dGhpcy5uYW1lc3BhY2Uscz1bXSxsPTAsdT10aGlzLmxlbmd0aDtsPHU7bCsrKXtzLnB1c2godD1bXSk7Zm9yKHZhciBlPXRoaXNbbF0sYz0wLGg9ZS5sZW5ndGg7YzxoO2MrKykocj1lW2NdKSYmKG49cltvXVtpXSxlbyhyLGMsbyxhLHt0aW1lOm4udGltZSxlYXNlOm4uZWFzZSxkZWxheTpuLmRlbGF5K24uZHVyYXRpb24sZHVyYXRpb246bi5kdXJhdGlvbn0pKSx0LnB1c2gocil9cmV0dXJuIEthKHMsbyxhKX0sdW8uc3ZnLmF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3QuZWFjaChmdW5jdGlvbigpe3ZhciB0LHU9dW8uc2VsZWN0KHRoaXMpLGM9dGhpcy5fX2NoYXJ0X198fHIsaD10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxmPW51bGw9PWw/aC50aWNrcz9oLnRpY2tzLmFwcGx5KGgscyk6aC5kb21haW4oKTpsLGQ9bnVsbD09ZT9oLnRpY2tGb3JtYXQ/aC50aWNrRm9ybWF0LmFwcGx5KGgscyk6eDplLHA9dS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShmLGgpLG09cC5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsRm8pLHY9dW8udHJhbnNpdGlvbihwLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLEZvKS5yZW1vdmUoKSxnPXVvLnRyYW5zaXRpb24ocC5vcmRlcigpKS5zdHlsZSgib3BhY2l0eSIsMSkseT1NYXRoLm1heChpLDApK28sYj1ZaShoKSxfPXUuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLHc9KF8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLHVvLnRyYW5zaXRpb24oXykpO20uYXBwZW5kKCJsaW5lIiksbS5hcHBlbmQoInRleHQiKTt2YXIgTSxrLEEsVCxTPW0uc2VsZWN0KCJsaW5lIiksRT1nLnNlbGVjdCgibGluZSIpLEw9cC5zZWxlY3QoInRleHQiKS50ZXh0KGQpLEM9bS5zZWxlY3QoInRleHQiKSx6PWcuc2VsZWN0KCJ0ZXh0IiksST0idG9wIj09PW58fCJsZWZ0Ij09PW4/LTE6MTtpZigiYm90dG9tIj09PW58fCJ0b3AiPT09bj8odD1ybyxNPSJ4IixBPSJ5IixrPSJ4MiIsVD0ieTIiLEwuYXR0cigiZHkiLEk8MD8iMGVtIjoiLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmF0dHIoImQiLCJNIitiWzBdKyIsIitJKmErIlYwSCIrYlsxXSsiViIrSSphKSk6KHQ9bm8sTT0ieSIsQT0ieCIsaz0ieTIiLFQ9IngyIixMLmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLEk8MD8iZW5kIjoic3RhcnQiKSx3LmF0dHIoImQiLCJNIitJKmErIiwiK2JbMF0rIkgwViIrYlsxXSsiSCIrSSphKSksUy5hdHRyKFQsSSppKSxDLmF0dHIoQSxJKnkpLEUuYXR0cihrLDApLmF0dHIoVCxJKmkpLHouYXR0cihNLDApLmF0dHIoQSxJKnkpLGgucmFuZ2VCYW5kKXt2YXIgRD1oLFA9RC5yYW5nZUJhbmQoKS8yO2M9aD1mdW5jdGlvbih0KXtyZXR1cm4gRCh0KStQfX1lbHNlIGMucmFuZ2VCYW5kP2M9aDp2LmNhbGwodCxoLGMpO20uY2FsbCh0LGMsaCksZy5jYWxsKHQsaCxoKX0pfXZhciBlLHI9dW8uc2NhbGUubGluZWFyKCksbj1IbCxpPTYsYT02LG89MyxzPVsxMF0sbD1udWxsO3JldHVybiB0LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdCk6cn0sdC5vcmllbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSBpbiBxbD9lKyIiOkhsLHQpOm59LHQudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1obyhhcmd1bWVudHMpLHQpOnN9LHQudGlja1ZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLHQpOmx9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLHQpOmV9LHQudGlja1NpemU9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj8oaT0rZSxhPSthcmd1bWVudHNbci0xXSx0KTppfSx0LmlubmVyVGlja1NpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2UsdCk6aX0sdC5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStlLHQpOmF9LHQudGlja1BhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2UsdCk6b30sdC50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnR9LHR9O3ZhciBIbD0iYm90dG9tIixxbD17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O3VvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dW8uc2VsZWN0KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsYSkub24oInRvdWNoc3RhcnQuYnJ1c2giLGEpLG89bi5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxuLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgcz1uLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEobSx4KTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJyZXNpemUgIit0fSkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24odCl7cmV0dXJuIEdsW3RdfSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuL1tld10kLy50ZXN0KHQpPy0zOm51bGx9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4vXltuc10vLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoIndpZHRoIiw2KS5hdHRyKCJoZWlnaHQiLDYpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikscy5zdHlsZSgiZGlzcGxheSIsdC5lbXB0eSgpPyJub25lIjpudWxsKTt2YXIgbCxoPXVvLnRyYW5zaXRpb24obiksZj11by50cmFuc2l0aW9uKG8pO3UmJihsPVlpKHUpLGYuYXR0cigieCIsbFswXSkuYXR0cigid2lkdGgiLGxbMV0tbFswXSkscihoKSksYyYmKGw9WWkoYyksZi5hdHRyKCJ5IixsWzBdKS5hdHRyKCJoZWlnaHQiLGxbMV0tbFswXSksaShoKSksZShoKX0pfWZ1bmN0aW9uIGUodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitoWysvZSQvLnRlc3QodCldKyIsIitmWysvXnMvLnRlc3QodCldKyIpIn0pfWZ1bmN0aW9uIHIodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixoWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsaFsxXS1oWzBdKX1mdW5jdGlvbiBpKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsZlswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixmWzFdLWZbMF0pfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiBhKCl7MzI9PXVvLmV2ZW50LmtleUNvZGUmJihMfHwoYj1udWxsLHpbMF0tPWhbMV0selsxXS09ZlsxXSxMPTIpLFQoKSl9ZnVuY3Rpb24gbSgpezMyPT11by5ldmVudC5rZXlDb2RlJiYyPT1MJiYoelswXSs9aFsxXSx6WzFdKz1mWzFdLEw9MCxUKCkpfWZ1bmN0aW9uIHYoKXt2YXIgdD11by5tb3VzZShfKSxuPSExO3gmJih0WzBdKz14WzBdLHRbMV0rPXhbMV0pLEx8fCh1by5ldmVudC5hbHRLZXk/KGJ8fChiPVsoaFswXStoWzFdKS8yLChmWzBdK2ZbMV0pLzJdKSx6WzBdPWhbKyh0WzBdPGJbMF0pXSx6WzFdPWZbKyh0WzFdPGJbMV0pXSk6Yj1udWxsKSxTJiZnKHQsdSwwKSYmKHIoayksbj0hMCksRSYmZyh0LGMsMSkmJihpKGspLG49ITApLG4mJihlKGspLE0oe3R5cGU6ImJydXNoIixtb2RlOkw/Im1vdmUiOiJyZXNpemUifSkpfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuLGksYT1ZaShlKSxsPWFbMF0sdT1hWzFdLGM9eltyXSxtPXI/ZjpoLHY9bVsxXS1tWzBdO2lmKEwmJihsLT1jLHUtPXYrYyksbj0ocj9wOmQpP01hdGgubWF4KGwsTWF0aC5taW4odSx0W3JdKSk6dFtyXSxMP2k9KG4rPWMpK3Y6KGImJihjPU1hdGgubWF4KGwsTWF0aC5taW4odSwyKmJbcl0tbikpKSxjPG4/KGk9bixuPWMpOmk9YyksbVswXSE9bnx8bVsxXSE9aSlyZXR1cm4gcj9zPW51bGw6bz1udWxsLG1bMF09bixtWzFdPWksITB9ZnVuY3Rpb24geSgpe3YoKSxrLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5Iix0LmVtcHR5KCk/Im5vbmUiOm51bGwpLHVvLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLG51bGwpLEkub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsbnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCksQygpLE0oe3R5cGU6ImJydXNoZW5kIn0pfXZhciBiLHgsXz10aGlzLHc9dW8uc2VsZWN0KHVvLmV2ZW50LnRhcmdldCksTT1sLm9mKF8sYXJndW1lbnRzKSxrPXVvLnNlbGVjdChfKSxBPXcuZGF0dW0oKSxTPSEvXihufHMpJC8udGVzdChBKSYmdSxFPSEvXihlfHcpJC8udGVzdChBKSYmYyxMPXcuY2xhc3NlZCgiZXh0ZW50IiksQz1LKF8pLHo9dW8ubW91c2UoXyksST11by5zZWxlY3QobihfKSkub24oImtleWRvd24uYnJ1c2giLGEpLm9uKCJrZXl1cC5icnVzaCIsbSk7aWYodW8uZXZlbnQuY2hhbmdlZFRvdWNoZXM/SS5vbigidG91Y2htb3ZlLmJydXNoIix2KS5vbigidG91Y2hlbmQuYnJ1c2giLHkpOkkub24oIm1vdXNlbW92ZS5icnVzaCIsdikub24oIm1vdXNldXAuYnJ1c2giLHkpLGsuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksTCl6WzBdPWhbMF0telswXSx6WzFdPWZbMF0telsxXTtlbHNlIGlmKEEpe3ZhciBEPSsvdyQvLnRlc3QoQSksUD0rL15uLy50ZXN0KEEpO3g9W2hbMS1EXS16WzBdLGZbMS1QXS16WzFdXSx6WzBdPWhbRF0selsxXT1mW1BdfWVsc2UgdW8uZXZlbnQuYWx0S2V5JiYoYj16LnNsaWNlKCkpO2suc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSx1by5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix3LnN0eWxlKCJjdXJzb3IiKSksTSh7dHlwZToiYnJ1c2hzdGFydCJ9KSx2KCl9dmFyIG8scyxsPUUodCwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSx1PW51bGwsYz1udWxsLGg9WzAsMF0sZj1bMCwwXSxkPSEwLHA9ITAsbT1ZbFswXTtyZXR1cm4gdC5ldmVudD1mdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1sLm9mKHRoaXMsYXJndW1lbnRzKSxlPXt4OmgseTpmLGk6byxqOnN9LHI9dGhpcy5fX2NoYXJ0X198fGU7dGhpcy5fX2NoYXJ0X189ZSxqbD91by5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe289ci5pLHM9ci5qLGg9ci54LGY9ci55LHQoe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2VlbigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHI9d24oaCxlLngpLG49d24oZixlLnkpO3JldHVybiBvPXM9bnVsbCxmdW5jdGlvbihpKXtoPWUueD1yKGkpLGY9ZS55PW4oaSksdCh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bz1lLmkscz1lLmosdCh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSx0KHt0eXBlOiJicnVzaGVuZCJ9KX0pOih0KHt0eXBlOiJicnVzaHN0YXJ0In0pLHQoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksdCh7dHlwZToiYnJ1c2hlbmQifSkpfSl9LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLG09WWxbIXU8PDF8IWNdLHQpOnV9LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLG09WWxbIXU8PDF8IWNdLHQpOmN9LHQuY2xhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUmJmM/KGQ9ISFlWzBdLHA9ISFlWzFdKTp1P2Q9ISFlOmMmJihwPSEhZSksdCk6dSYmYz9bZCxwXTp1P2Q6Yz9wOm51bGx9LHQuZXh0ZW50PWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLGw7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUmJihyPWVbMF0sbj1lWzFdLGMmJihyPXJbMF0sbj1uWzBdKSxvPVtyLG5dLHUuaW52ZXJ0JiYocj11KHIpLG49dShuKSksbjxyJiYobD1yLHI9bixuPWwpLHI9PWhbMF0mJm49PWhbMV18fChoPVtyLG5dKSksYyYmKGk9ZVswXSxhPWVbMV0sdSYmKGk9aVsxXSxhPWFbMV0pLHM9W2ksYV0sYy5pbnZlcnQmJihpPWMoaSksYT1jKGEpKSxhPGkmJihsPWksaT1hLGE9bCksaT09ZlswXSYmYT09ZlsxXXx8KGY9W2ksYV0pKSx0KToodSYmKG8/KHI9b1swXSxuPW9bMV0pOihyPWhbMF0sbj1oWzFdLHUuaW52ZXJ0JiYocj11LmludmVydChyKSxuPXUuaW52ZXJ0KG4pKSxuPHImJihsPXIscj1uLG49bCkpKSxjJiYocz8oaT1zWzBdLGE9c1sxXSk6KGk9ZlswXSxhPWZbMV0sYy5pbnZlcnQmJihpPWMuaW52ZXJ0KGkpLGE9Yy5pbnZlcnQoYSkpLGE8aSYmKGw9aSxpPWEsYT1sKSkpLHUmJmM/W1tyLGldLFtuLGFdXTp1P1tyLG5dOmMmJltpLGFdKX0sdC5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0LmVtcHR5KCl8fChoPVswLDBdLGY9WzAsMF0sbz1zPW51bGwpLHR9LHQuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIXUmJmhbMF09PWhbMV18fCEhYyYmZlswXT09ZlsxXX0sdW8ucmViaW5kKHQsbCwib24iKX07dmFyIEdsPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LFlsPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dLFhsPWZzLmZvcm1hdD15cy50aW1lRm9ybWF0LFdsPVhsLnV0YyxabD1XbCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7WGwuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2lvOlpsLGlvLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9LGlvLnRvU3RyaW5nPVpsLnRvU3RyaW5nLGZzLnNlY29uZD1WdChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGRzKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSksZnMuc2Vjb25kcz1mcy5zZWNvbmQucmFuZ2UsZnMuc2Vjb25kcy51dGM9ZnMuc2Vjb25kLnV0Yy5yYW5nZSxmcy5taW51dGU9VnQoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkcyg2ZTQqTWF0aC5mbG9vcih0LzZlNCkpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLGZzLm1pbnV0ZXM9ZnMubWludXRlLnJhbmdlLGZzLm1pbnV0ZXMudXRjPWZzLm1pbnV0ZS51dGMucmFuZ2UsZnMuaG91cj1WdChmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBkcygzNmU1KihNYXRoLmZsb29yKHQvMzZlNS1lKStlKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxmcy5ob3Vycz1mcy5ob3VyLnJhbmdlLGZzLmhvdXJzLnV0Yz1mcy5ob3VyLnV0Yy5yYW5nZSxmcy5tb250aD1WdChmdW5jdGlvbih0KXtyZXR1cm4gdD1mcy5kYXkodCksdC5zZXREYXRlKDEpLHR9LGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxmcy5tb250aHM9ZnMubW9udGgucmFuZ2UsZnMubW9udGhzLnV0Yz1mcy5tb250aC51dGMucmFuZ2U7dmFyIEpsPVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZlNSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sS2w9W1tmcy5zZWNvbmQsMV0sW2ZzLnNlY29uZCw1XSxbZnMuc2Vjb25kLDE1XSxbZnMuc2Vjb25kLDMwXSxbZnMubWludXRlLDFdLFtmcy5taW51dGUsNV0sW2ZzLm1pbnV0ZSwxNV0sW2ZzLm1pbnV0ZSwzMF0sW2ZzLmhvdXIsMV0sW2ZzLmhvdXIsM10sW2ZzLmhvdXIsNl0sW2ZzLmhvdXIsMTJdLFtmcy5kYXksMV0sW2ZzLmRheSwyXSxbZnMud2VlaywxXSxbZnMubW9udGgsMV0sW2ZzLm1vbnRoLDNdLFtmcy55ZWFyLDFdXSxRbD1YbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSYmMSE9dC5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfV0sWyIlWSIsemVdXSksJGw9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdW8ucmFuZ2UoTWF0aC5jZWlsKHQvcikqciwrZSxyKS5tYXAob28pfSxmbG9vcjp4LGNlaWw6eH07S2wueWVhcj1mcy55ZWFyLGZzLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGFvKHVvLnNjYWxlLmxpbmVhcigpLEtsLFFsKX07dmFyIHR1PUtsLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXS51dGMsdFsxXV19KSxldT1XbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKSYmMSE9dC5nZXRVVENEYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXRVVENEYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfV0sWyIlWSIsemVdXSk7dHUueWVhcj1mcy55ZWFyLnV0Yyxmcy5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gYW8odW8uc2NhbGUubGluZWFyKCksdHUsZXUpfSx1by50ZXh0PUx0KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLHVvLmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3QodCwiYXBwbGljYXRpb24vanNvbiIsc28sZSl9LHVvLmh0bWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3QodCwidGV4dC9odG1sIixsbyxlKX0sdW8ueG1sPUx0KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlWE1MfSksImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kPyh0aGlzLmQzPXVvLHQodW8pKToib2JqZWN0Ij09dHlwZW9mIHImJnIuZXhwb3J0cz9yLmV4cG9ydHM9dW86dGhpcy5kMz11b30oKX0se31dLDEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5wb2ludD10LHRoaXMuaW5kZXg9ZX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPXQucG9pbnQsbj1lLnBvaW50LGk9ci5sZW5ndGgsYT0wO2E8aTsrK2Epe3ZhciBvPW5bYV0tclthXTtpZihvKXJldHVybiBvfXJldHVybiAwfWZ1bmN0aW9uIGEodCxlLHIpe2lmKDE9PT10KXJldHVybiByP1tbLTEsMF1dOltdO3ZhciBuPWUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KTtuLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLGE9MTthPHQ7KythKXt2YXIgbz1uW2EtMV0scz1uW2FdO2lbYS0xXT1bb1sxXSxzWzFdXX1yZXR1cm4gciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSksaX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107dmFyIG89dFswXS5sZW5ndGg7aWYobzwxKXJldHVybltdO2lmKDE9PT1vKXJldHVybiBhKHIsdCxlKTtmb3IodmFyIHU9bmV3IEFycmF5KHIpLGM9MSxoPTA7aDxyOysraCl7Zm9yKHZhciBmPXRbaF0sZD1uZXcgQXJyYXkobysxKSxwPTAsbT0wO208bzsrK20pe3ZhciB2PWZbbV07ZFttXT12LHArPXYqdn1kW29dPXAsdVtoXT1uZXcgbihkLGgpLGM9TWF0aC5tYXgocCxjKX1sKHUsaSkscj11Lmxlbmd0aDtmb3IodmFyIGc9bmV3IEFycmF5KHIrbysxKSx5PW5ldyBBcnJheShyK28rMSksYj0obysxKSoobysxKSpjLHg9bmV3IEFycmF5KG8rMSksaD0wO2g8PW87KytoKXhbaF09MDt4W29dPWIsZ1swXT14LnNsaWNlKCkseVswXT0tMTtmb3IodmFyIGg9MDtoPD1vOysraCl7dmFyIGQ9eC5zbGljZSgpO2RbaF09MSxnW2grMV09ZCx5W2grMV09LTF9Zm9yKHZhciBoPTA7aDxyOysraCl7dmFyIF89dVtoXTtnW2grbysxXT1fLnBvaW50LHlbaCtvKzFdPV8uaW5kZXh9dmFyIHc9cyhnLCExKTtpZih3PWU/dy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PW87KytyKXt2YXIgbj15W3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pOncuZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8PW87KytlKXt2YXIgcj15W3RbZV1dO2lmKHI8MClyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KSwxJm8pZm9yKHZhciBoPTA7aDx3Lmxlbmd0aDsrK2gpe3ZhciBfPXdbaF0sZD1fWzBdO19bMF09X1sxXSxfWzFdPWR9cmV0dXJuIHd9dmFyIHM9dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxsPXQoInVuaXEiKTtlLmV4cG9ydHM9b30seyJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6Mjg4LHVuaXE6NTQxfV0sMTIyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gZFswXT10LGRbMV09ZSxmWzBdfWZ1bmN0aW9uIG4odCl7cmV0dXJuIGZbMF09dCxkWzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZbMF09dCxkWzFdfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZFsxXT10LGRbMF09ZSxmWzBdfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZbMF09dCxkWzFdfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZbMF09dCxkWzBdfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gcC53cml0ZVVJbnQzMkxFKHQsMCwhMCkscC53cml0ZVVJbnQzMkxFKGUsNCwhMCkscC5yZWFkRG91YmxlTEUoMCwhMCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gcC53cml0ZURvdWJsZUxFKHQsMCwhMCkscC5yZWFkVUludDMyTEUoMCwhMCl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gcC53cml0ZURvdWJsZUxFKHQsMCwhMCkscC5yZWFkVUludDMyTEUoNCwhMCl9dmFyIGg9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBmPW5ldyBGbG9hdDY0QXJyYXkoMSksZD1uZXcgVWludDMyQXJyYXkoZi5idWZmZXIpO2ZbMF09MSxoPSEwLDEwNzI2OTMyNDg9PT1kWzFdPyhlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZbMF09dCxbZFswXSxkWzFdXX0sZS5leHBvcnRzLnBhY2s9cixlLmV4cG9ydHMubG89bixlLmV4cG9ydHMuaGk9aSk6MTA3MjY5MzI0OD09PWRbMF0/KGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZlswXT10LFtkWzFdLGRbMF1dfSxlLmV4cG9ydHMucGFjaz1hLGUuZXhwb3J0cy5sbz1vLGUuZXhwb3J0cy5oaT1zKTpoPSExfWlmKCFoKXt2YXIgcD1uZXcgdCg4KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHAud3JpdGVEb3VibGVMRSh0LDAsITApLFtwLnJlYWRVSW50MzJMRSgwLCEwKSxwLnJlYWRVSW50MzJMRSg0LCEwKV19LGUuZXhwb3J0cy5wYWNrPWwsZS5leHBvcnRzLmxvPXUsZS5leHBvcnRzLmhpPWN9ZS5leHBvcnRzLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGUuZXhwb3J0cy5oaSh0KT4+PjMxfSxlLmV4cG9ydHMuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuKGUuZXhwb3J0cy5oaSh0KTw8MT4+PjIxKS0xMDIzfSxlLmV4cG9ydHMuZnJhY3Rpb249ZnVuY3Rpb24odCl7dmFyIHI9ZS5leHBvcnRzLmxvKHQpLG49ZS5leHBvcnRzLmhpKHQpLGk9MTA0ODU3NSZuO3JldHVybiAyMTQ2NDM1MDcyJm4mJihpKz0xPDwyMCksW3IsaV19LGUuZXhwb3J0cy5kZW5vcm1hbGl6ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuISgyMTQ2NDM1MDcyJmUuZXhwb3J0cy5oaSh0KSl9fSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6NzV9XSwxMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIGk9MHx0W3JdO2lmKGk8PTApcmV0dXJuW107dmFyIGEsbz1uZXcgQXJyYXkoaSk7aWYocj09PXQubGVuZ3RoLTEpZm9yKGE9MDthPGk7KythKW9bYV09ZTtlbHNlIGZvcihhPTA7YTxpOysrYSlvW2FdPW4odCxlLHIrMSk7cmV0dXJuIG99ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBpKDB8dCxlKTticmVhaztjYXNlIm9iamVjdCI6aWYoIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aClyZXR1cm4gbih0LGUsMCl9cmV0dXJuW119ZS5leHBvcnRzPWF9LHt9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cj1yfHwyO3ZhciBuPWUmJmUubGVuZ3RoLGE9bj9lWzBdKnI6dC5sZW5ndGgscz1pKHQsMCxhLHIsITApLGw9W107aWYoIXMpcmV0dXJuIGw7dmFyIHUsYyxmLGQscCxtLHY7aWYobiYmKHM9aCh0LGUscyxyKSksdC5sZW5ndGg+ODAqcil7dT1mPXRbMF0sYz1kPXRbMV07Zm9yKHZhciBnPXI7ZzxhO2crPXIpcD10W2ddLG09dFtnKzFdLHA8dSYmKHU9cCksbTxjJiYoYz1tKSxwPmYmJihmPXApLG0+ZCYmKGQ9bSk7dj1NYXRoLm1heChmLXUsZC1jKX1yZXR1cm4gbyhzLGwscix1LGMsdiksbH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09eih0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz1FKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89RShhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZ3KG8sby5uZXh0KSYmKEwobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gYSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IXcobixuLm5leHQpJiYwIT09XyhuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoTChuKSwobj1lPW4ucHJldik9PT1uLm5leHQpcmV0dXJuIG51bGw7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIsbixpLGgsZil7aWYodCl7IWYmJmgmJm0odCxuLGksaCk7Zm9yKHZhciBkLHAsdj10O3QucHJldiE9PXQubmV4dDspaWYoZD10LnByZXYscD10Lm5leHQsaD9sKHQsbixpLGgpOnModCkpZS5wdXNoKGQuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChwLmkvciksTCh0KSx0PXAubmV4dCx2PXAubmV4dDtlbHNlIGlmKCh0PXApPT09dil7Zj8xPT09Zj8odD11KHQsZSxyKSxvKHQsZSxyLG4saSxoLDIpKToyPT09ZiYmYyh0LGUscixuLGksaCk6byhhKHQpLGUscixuLGksaCwxKTticmVha319fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihfKGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKGIoZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJl8oaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoXyhpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSx1PWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCxjPWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxoPWcocyxsLGUscixuKSxmPWcodSxjLGUscixuKSxkPXQubmV4dFo7ZCYmZC56PD1mOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmYihpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmXyhkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoZD10LnByZXZaO2QmJmQuej49aDspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJmIoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJl8oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQucHJldlp9cmV0dXJuITB9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshdyhpLGEpJiZNKGksbixuLm5leHQsYSkmJkEoaSxhKSYmQShhLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChhLmkvciksTChuKSxMKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBjKHQsZSxyLG4saSxzKXt2YXIgbD10O2Rve2Zvcih2YXIgdT1sLm5leHQubmV4dDt1IT09bC5wcmV2Oyl7aWYobC5pIT09dS5pJiZ4KGwsdSkpe3ZhciBjPVMobCx1KTtyZXR1cm4gbD1hKGwsbC5uZXh0KSxjPWEoYyxjLm5leHQpLG8obCxlLHIsbixpLHMpLHZvaWQgbyhjLGUscixuLGkscyl9dT11Lm5leHR9bD1sLm5leHR9d2hpbGUobCE9PXQpfWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIG8scyxsLHUsYyxoPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLHU9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsYz1pKHQsbCx1LG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGgucHVzaCh5KGMpKTtmb3IoaC5zb3J0KGYpLG89MDtvPGgubGVuZ3RoO28rKylkKGhbb10scikscj1hKHIsci5uZXh0KTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gZCh0LGUpe2lmKGU9cCh0LGUpKXt2YXIgcj1TKGUsdCk7YShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0Lnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHIucHJldjt2YXIgbCx1PXIsYz1yLngsaD1yLnksZj0xLzA7Zm9yKG49ci5uZXh0O24hPT11OylpPj1uLngmJm4ueD49YyYmYihhPGg/aTpvLGEsYyxoLGE8aD9vOmksYSxuLngsbi55KSYmKChsPU1hdGguYWJzKGEtbi55KS8oaS1uLngpKTxmfHxsPT09ZiYmbi54PnIueCkmJkEobix0KSYmKHI9bixmPWwpLG49bi5uZXh0O3JldHVybiByfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PWcoaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLHYoaSl9ZnVuY3Rpb24gdih0KXt2YXIgZSxyLG4saSxhLG8scyxsLHU9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8dSYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9dTtzPjB8fGw+MCYmbjspMD09PXM/KGk9bixuPW4ubmV4dFosbC0tKTowIT09bCYmbj9yLno8PW4uej8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSk6KGk9cixyPXIubmV4dFoscy0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLHUqPTJ9d2hpbGUobz4xKTtyZXR1cm4gdH1mdW5jdGlvbiBnKHQsZSxyLG4saSl7cmV0dXJuIHQ9MzI3NjcqKHQtcikvaSxlPTMyNzY3KihlLW4pL2ksdD0xNjcxMTkzNSYodHx0PDw4KSx0PTI1MjY0NTEzNSYodHx0PDw0KSx0PTg1ODk5MzQ1OSYodHx0PDwyKSx0PTE0MzE2NTU3NjUmKHR8dDw8MSksZT0xNjcxMTkzNSYoZXxlPDw4KSxlPTI1MjY0NTEzNSYoZXxlPDw0KSxlPTg1ODk5MzQ1OSYoZXxlPDwyKSxlPTE0MzE2NTU3NjUmKGV8ZTw8MSksdHxlPDwxfWZ1bmN0aW9uIHkodCl7dmFyIGU9dCxyPXQ7ZG97ZS54PHIueCYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhayh0LGUpJiZBKHQsZSkmJkEoZSx0KSYmVCh0LGUpfWZ1bmN0aW9uIF8odCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIE0odCxlLHIsbil7cmV0dXJuISEodyh0LGUpJiZ3KHIsbil8fHcodCxuKSYmdyhyLGUpKXx8Xyh0LGUscik+MCE9Xyh0LGUsbik+MCYmXyhyLG4sdCk+MCE9XyhyLG4sZSk+MH1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZNKHIsci5uZXh0LHQsZSkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiExfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm4gXyh0LnByZXYsdCx0Lm5leHQpPDA/Xyh0LGUsdC5uZXh0KT49MCYmXyh0LHQucHJldixlKT49MDpfKHQsZSx0LnByZXYpPDB8fF8odCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9bmV3IEModC5pLHQueCx0LnkpLG49bmV3IEMoZS5pLGUueCxlLnkpLGk9dC5uZXh0LGE9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixhLm5leHQ9bixuLnByZXY9YSxufWZ1bmN0aW9uIEUodCxlLHIsbil7dmFyIGk9bmV3IEModCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBMKHQpe3QubmV4dC5wcmV2PXQucHJldix0LnByZXYubmV4dD10Lm5leHQsdC5wcmV2WiYmKHQucHJldloubmV4dFo9dC5uZXh0WiksdC5uZXh0WiYmKHQubmV4dFoucHJldlo9dC5wcmV2Wil9ZnVuY3Rpb24gQyh0LGUscil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24geih0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX1lLmV4cG9ydHM9bixuLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoeih0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciB1PWVbc10qcixjPXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKHoodCx1LGMscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixkPW5bcysxXSpyLHA9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtwXSkqKHRbZCsxXS10W2YrMV0pLSh0W2ZdLXRbZF0pKih0W3ArMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSxuLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfX0se31dLDEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBuPTA7bjxyOysrbil7dmFyIGE9dFtuXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDtmb3IodmFyIG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKW9bbl09W107Zm9yKHZhciBuPTA7bjxyOysrbil7dmFyIGE9dFtuXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpaShvW3NdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3JldHVybiBvfWUuZXhwb3J0cz1uO3ZhciBpPXQoInVuaXEiKX0se3VuaXE6NTQxfV0sMTI2OltmdW5jdGlvbihlLHIsbil7KGZ1bmN0aW9uKGksYSl7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP3IuZXhwb3J0cz1pKCk6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoaSk6ZS5FUzZQcm9taXNlPWkoKX0odGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHwib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIHIodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gbih0KXtHPXR9ZnVuY3Rpb24gbyh0KXtZPXR9ZnVuY3Rpb24gcygpe3JldHVybiBmdW5jdGlvbigpe3EodSl9fWZ1bmN0aW9uIGwoKXt2YXIgdD1zZXRUaW1lb3V0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHUsMSl9fWZ1bmN0aW9uIHUoKXtmb3IodmFyIHQ9MDt0PEg7dCs9Mil7KDAsUVt0XSkoUVt0KzFdKSxRW3RdPXZvaWQgMCxRW3QrMV09dm9pZCAwfUg9MH1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9YXJndW1lbnRzLG49dGhpcyxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGYpO3ZvaWQgMD09PWlbdHRdJiZ6KGkpO3ZhciBhPW4uX3N0YXRlO3JldHVybiBhP2Z1bmN0aW9uKCl7dmFyIHQ9clthLTFdO1koZnVuY3Rpb24oKXtyZXR1cm4gRShhLGksdCxuLl9yZXN1bHQpfSl9KCk6ayhuLGksdCxlKSxpfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGhpcztpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I9PT1lKXJldHVybiB0O3ZhciByPW5ldyBlKGYpO3JldHVybiB4KHIsdCkscn1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGQoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZiIpfWZ1bmN0aW9uIHAoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLiIpfWZ1bmN0aW9uIG0odCl7dHJ5e3JldHVybiB0LnRoZW59Y2F0Y2godCl7cmV0dXJuIGl0LmVycm9yPXQsaXR9fWZ1bmN0aW9uIHYodCxlLHIsbil7dHJ5e3QuY2FsbChlLHIsbil9Y2F0Y2godCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGcodCxlLHIpe1koZnVuY3Rpb24odCl7dmFyIG49ITEsaT12KHIsZSxmdW5jdGlvbihyKXtufHwobj0hMCxlIT09cj94KHQscik6dyh0LHIpKX0sZnVuY3Rpb24oZSl7bnx8KG49ITAsTSh0LGUpKX0sIlNldHRsZTogIisodC5fbGFiZWx8fCIgdW5rbm93biBwcm9taXNlIikpOyFuJiZpJiYobj0hMCxNKHQsaSkpfSx0KX1mdW5jdGlvbiB5KHQsZSl7ZS5fc3RhdGU9PT1ydD93KHQsZS5fcmVzdWx0KTplLl9zdGF0ZT09PW50P00odCxlLl9yZXN1bHQpOmsoZSx2b2lkIDAsZnVuY3Rpb24oZSl7cmV0dXJuIHgodCxlKX0sZnVuY3Rpb24oZSl7cmV0dXJuIE0odCxlKX0pfWZ1bmN0aW9uIGIodCxlLG4pe2UuY29uc3RydWN0b3I9PT10LmNvbnN0cnVjdG9yJiZuPT09YyYmZS5jb25zdHJ1Y3Rvci5yZXNvbHZlPT09aD95KHQsZSk6bj09PWl0P00odCxpdC5lcnJvcik6dm9pZCAwPT09bj93KHQsZSk6cihuKT9nKHQsZSxuKTp3KHQsZSl9ZnVuY3Rpb24geChlLHIpe2U9PT1yP00oZSxkKCkpOnQocik/YihlLHIsbShyKSk6dyhlLHIpfWZ1bmN0aW9uIF8odCl7dC5fb25lcnJvciYmdC5fb25lcnJvcih0Ll9yZXN1bHQpLEEodCl9ZnVuY3Rpb24gdyh0LGUpe3QuX3N0YXRlPT09ZXQmJih0Ll9yZXN1bHQ9ZSx0Ll9zdGF0ZT1ydCwwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZZKEEsdCkpfWZ1bmN0aW9uIE0odCxlKXt0Ll9zdGF0ZT09PWV0JiYodC5fc3RhdGU9bnQsdC5fcmVzdWx0PWUsWShfLHQpKX1mdW5jdGlvbiBrKHQsZSxyLG4pe3ZhciBpPXQuX3N1YnNjcmliZXJzLGE9aS5sZW5ndGg7dC5fb25lcnJvcj1udWxsLGlbYV09ZSxpW2ErcnRdPXIsaVthK250XT1uLDA9PT1hJiZ0Ll9zdGF0ZSYmWShBLHQpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5fc3Vic2NyaWJlcnMscj10Ll9zdGF0ZTtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgbj12b2lkIDAsaT12b2lkIDAsYT10Ll9yZXN1bHQsbz0wO288ZS5sZW5ndGg7bys9MyluPWVbb10saT1lW28rcl0sbj9FKHIsbixpLGEpOmkoYSk7dC5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIFQoKXt0aGlzLmVycm9yPW51bGx9ZnVuY3Rpb24gUyh0LGUpe3RyeXtyZXR1cm4gdChlKX1jYXRjaCh0KXtyZXR1cm4gYXQuZXJyb3I9dCxhdH19ZnVuY3Rpb24gRSh0LGUsbixpKXt2YXIgYT1yKG4pLG89dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLHU9dm9pZCAwO2lmKGEpe2lmKG89UyhuLGkpLG89PT1hdD8odT0hMCxzPW8uZXJyb3Isbz1udWxsKTpsPSEwLGU9PT1vKXJldHVybiB2b2lkIE0oZSxwKCkpfWVsc2Ugbz1pLGw9ITA7ZS5fc3RhdGUhPT1ldHx8KGEmJmw/eChlLG8pOnU/TShlLHMpOnQ9PT1ydD93KGUsbyk6dD09PW50JiZNKGUsbykpfWZ1bmN0aW9uIEwodCxlKXt0cnl7ZShmdW5jdGlvbihlKXt4KHQsZSl9LGZ1bmN0aW9uKGUpe00odCxlKX0pfWNhdGNoKGUpe00odCxlKX19ZnVuY3Rpb24gQygpe3JldHVybiBvdCsrfWZ1bmN0aW9uIHoodCl7dFt0dF09b3QrKyx0Ll9zdGF0ZT12b2lkIDAsdC5fcmVzdWx0PXZvaWQgMCx0Ll9zdWJzY3JpYmVycz1bXX1mdW5jdGlvbiBJKHQsZSl7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj10LHRoaXMucHJvbWlzZT1uZXcgdChmKSx0aGlzLnByb21pc2VbdHRdfHx6KHRoaXMucHJvbWlzZSksVihlKT8odGhpcy5faW5wdXQ9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9ZS5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP3codGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZSgpLDA9PT10aGlzLl9yZW1haW5pbmcmJncodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTpNKHRoaXMucHJvbWlzZSxEKCkpfWZ1bmN0aW9uIEQoKXtyZXR1cm4gbmV3IEVycm9yKCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXkiKX1mdW5jdGlvbiBQKHQpe3JldHVybiBuZXcgSSh0aGlzLHQpLnByb21pc2V9ZnVuY3Rpb24gTyh0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgZShWKHQpP2Z1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9MDthPGk7YSsrKWUucmVzb2x2ZSh0W2FdKS50aGVuKHIsbil9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUobmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLiIpKX0pfWZ1bmN0aW9uIFIodCl7dmFyIGU9dGhpcyxyPW5ldyBlKGYpO3JldHVybiBNKHIsdCkscn1mdW5jdGlvbiBGKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciIpfWZ1bmN0aW9uIGooKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKX1mdW5jdGlvbiBOKHQpe3RoaXNbdHRdPUMoKSx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLGYhPT10JiYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJkYoKSx0aGlzIGluc3RhbmNlb2YgTj9MKHRoaXMsdCk6aigpKX1mdW5jdGlvbiBCKCl7dmFyIHQ9dm9pZCAwO2lmKHZvaWQgMCE9PWEpdD1hO2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmKXQ9c2VsZjtlbHNlIHRyeXt0PUZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKCJwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQiKX12YXIgZT10LlByb21pc2U7aWYoZSl7dmFyIHI9bnVsbDt0cnl7cj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS5yZXNvbHZlKCkpfWNhdGNoKHQpe31pZigiW29iamVjdCBQcm9taXNlXSI9PT1yJiYhZS5jYXN0KXJldHVybn10LlByb21pc2U9Tn12YXIgVT12b2lkIDA7VT1BcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX07dmFyIFY9VSxIPTAscT12b2lkIDAsRz12b2lkIDAsWT1mdW5jdGlvbih0LGUpe1FbSF09dCxRW0grMV09ZSwyPT09KEgrPTIpJiYoRz9HKHUpOiQoKSl9LFg9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCxXPVh8fHt9LFo9Vy5NdXRhdGlvbk9ic2VydmVyfHxXLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsSj0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJnZvaWQgMCE9PWkmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoaSksSz0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIGltcG9ydFNjcmlwdHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwsUT1uZXcgQXJyYXkoMWUzKSwkPXZvaWQgMDskPUo/ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaS5uZXh0VGljayh1KX19KCk6Wj9mdW5jdGlvbigpe3ZhciB0PTAsZT1uZXcgWih1KSxyPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtyZXR1cm4gZS5vYnNlcnZlKHIse2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbigpe3IuZGF0YT10PSsrdCUyfX0oKTpLP2Z1bmN0aW9uKCl7dmFyIHQ9bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiB0LnBvcnQxLm9ubWVzc2FnZT11LGZ1bmN0aW9uKCl7cmV0dXJuIHQucG9ydDIucG9zdE1lc3NhZ2UoMCl9fSgpOnZvaWQgMD09PVgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dHJ5e3ZhciB0PWUscj10KCJ2ZXJ0eCIpO3JldHVybiBxPXIucnVuT25Mb29wfHxyLnJ1bk9uQ29udGV4dCxzKCl9Y2F0Y2godCl7cmV0dXJuIGwoKX19KCk6bCgpO3ZhciB0dD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpLGV0PXZvaWQgMCxydD0xLG50PTIsaXQ9bmV3IFQsYXQ9bmV3IFQsb3Q9MDtyZXR1cm4gSS5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmxlbmd0aCxlPXRoaXMuX2lucHV0LHI9MDt0aGlzLl9zdGF0ZT09PWV0JiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxJLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09aCl7dmFyIGk9bSh0KTtpZihpPT09YyYmdC5fc3RhdGUhPT1ldCl0aGlzLl9zZXR0bGVkQXQodC5fc3RhdGUsZSx0Ll9yZXN1bHQpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W2VdPXQ7ZWxzZSBpZihyPT09Til7dmFyIGE9bmV3IHIoZik7YihhLHQsaSksdGhpcy5fd2lsbFNldHRsZUF0KGEsZSl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IHIoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuKHQpLGUpfSxJLnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnByb21pc2U7bi5fc3RhdGU9PT1ldCYmKHRoaXMuX3JlbWFpbmluZy0tLHQ9PT1udD9NKG4scik6dGhpcy5fcmVzdWx0W2VdPXIpLDA9PT10aGlzLl9yZW1haW5pbmcmJncobix0aGlzLl9yZXN1bHQpfSxJLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztrKHQsdm9pZCAwLGZ1bmN0aW9uKHQpe3JldHVybiByLl9zZXR0bGVkQXQocnQsZSx0KX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuX3NldHRsZWRBdChudCxlLHQpfSl9LE4uYWxsPVAsTi5yYWNlPU8sTi5yZXNvbHZlPWgsTi5yZWplY3Q9UixOLl9zZXRTY2hlZHVsZXI9bixOLl9zZXRBc2FwPW8sTi5fYXNhcD1ZLE4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOLHRoZW46YyxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKG51bGwsdCl9fSxCKCksTi5wb2x5ZmlsbD1CLE4uUHJvbWlzZT1OLE59KX0pLmNhbGwodGhpcyxlKCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDg1fV0sMTI3OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH1mdW5jdGlvbiBpKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGEodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIG8odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBzKHQpe3JldHVybiB2b2lkIDA9PT10fWUuZXhwb3J0cz1uLG4uRXZlbnRFbWl0dGVyPW4sbi5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsbi5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDAsbi5kZWZhdWx0TWF4TGlzdGVuZXJzPTEwLG4ucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbih0KXtpZighYSh0KXx8dDwwfHxpc05hTih0KSl0aHJvdyBUeXBlRXJyb3IoIm4gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxuLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGwsdTtpZih0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLCJlcnJvciI9PT10JiYoIXRoaXMuX2V2ZW50cy5lcnJvcnx8byh0aGlzLl9ldmVudHMuZXJyb3IpJiYhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpe2lmKChlPWFyZ3VtZW50c1sxXSlpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGM9bmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgImVycm9yIiBldmVudC4gKCcrZSsiKSIpO3Rocm93IGMuY29udGV4dD1lLGN9aWYocj10aGlzLl9ldmVudHNbdF0scyhyKSlyZXR1cm4hMTtpZihpKHIpKXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6ci5jYWxsKHRoaXMpO2JyZWFrO2Nhc2UgMjpyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzpyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTticmVhaztkZWZhdWx0OmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHIuYXBwbHkodGhpcyxhKX1lbHNlIGlmKG8ocikpZm9yKGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHU9ci5zbGljZSgpLG49dS5sZW5ndGgsbD0wO2w8bjtsKyspdVtsXS5hcHBseSh0aGlzLGEpO3JldHVybiEwfSxuLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7cmV0dXJuIHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksdGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyJiZ0aGlzLmVtaXQoIm5ld0xpc3RlbmVyIix0LGkoZS5saXN0ZW5lcik/ZS5saXN0ZW5lcjplKSx0aGlzLl9ldmVudHNbdF0/byh0aGlzLl9ldmVudHNbdF0pP3RoaXMuX2V2ZW50c1t0XS5wdXNoKGUpOnRoaXMuX2V2ZW50c1t0XT1bdGhpcy5fZXZlbnRzW3RdLGVdOnRoaXMuX2V2ZW50c1t0XT1lLG8odGhpcy5fZXZlbnRzW3RdKSYmIXRoaXMuX2V2ZW50c1t0XS53YXJuZWQmJihyPXModGhpcy5fbWF4TGlzdGVuZXJzKT9uLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dGhpcy5fbWF4TGlzdGVuZXJzKSYmcj4wJiZ0aGlzLl9ldmVudHNbdF0ubGVuZ3RoPnImJih0aGlzLl9ldmVudHNbdF0ud2FybmVkPSEwLGNvbnNvbGUuZXJyb3IoIihub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuIix0aGlzLl9ldmVudHNbdF0ubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS50cmFjZSYmY29uc29sZS50cmFjZSgpKSx0aGlzfSxuLnByb3RvdHlwZS5vbj1uLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixuLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlTGlzdGVuZXIodCxyKSxufHwobj0hMCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgbj0hMTtyZXR1cm4gci5saXN0ZW5lcj1lLHRoaXMub24odCxyKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxzO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7aWYoIXRoaXMuX2V2ZW50c3x8IXRoaXMuX2V2ZW50c1t0XSlyZXR1cm4gdGhpcztpZihyPXRoaXMuX2V2ZW50c1t0XSxhPXIubGVuZ3RoLG49LTEscj09PWV8fGkoci5saXN0ZW5lcikmJnIubGlzdGVuZXI9PT1lKWRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0LGUpO2Vsc2UgaWYobyhyKSl7Zm9yKHM9YTtzLS0gPjA7KWlmKHJbc109PT1lfHxyW3NdLmxpc3RlbmVyJiZyW3NdLmxpc3RlbmVyPT09ZSl7bj1zO2JyZWFrfWlmKG48MClyZXR1cm4gdGhpczsxPT09ci5sZW5ndGg/KHIubGVuZ3RoPTAsZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSk6ci5zcGxpY2UobiwxKSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHQsZSl9cmV0dXJuIHRoaXN9LApuLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdGhpcy5fZXZlbnRzKXJldHVybiB0aGlzO2lmKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2V2ZW50cz17fTp0aGlzLl9ldmVudHNbdF0mJmRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKGUgaW4gdGhpcy5fZXZlbnRzKSJyZW1vdmVMaXN0ZW5lciIhPT1lJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPXt9LHRoaXN9aWYocj10aGlzLl9ldmVudHNbdF0saShyKSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQscik7ZWxzZSBpZihyKWZvcig7ci5sZW5ndGg7KXRoaXMucmVtb3ZlTGlzdGVuZXIodCxyW3IubGVuZ3RoLTFdKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSx0aGlzfSxuLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3RdP2kodGhpcy5fZXZlbnRzW3RdKT9bdGhpcy5fZXZlbnRzW3RdXTp0aGlzLl9ldmVudHNbdF0uc2xpY2UoKTpbXX0sbi5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0KXtpZih0aGlzLl9ldmVudHMpe3ZhciBlPXRoaXMuX2V2ZW50c1t0XTtpZihpKGUpKXJldHVybiAxO2lmKGUpcmV0dXJuIGUubGVuZ3RofXJldHVybiAwfSxuLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lckNvdW50KGUpfX0se31dLDEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lfHwwLGk9cnx8MTtyZXR1cm5bW3RbMTJdK3RbMF0sdFsxM10rdFsxXSx0WzE0XSt0WzJdLHRbMTVdK3RbM11dLFt0WzEyXS10WzBdLHRbMTNdLXRbMV0sdFsxNF0tdFsyXSx0WzE1XS10WzNdXSxbdFsxMl0rdFs0XSx0WzEzXSt0WzVdLHRbMTRdK3RbNl0sdFsxNV0rdFs3XV0sW3RbMTJdLXRbNF0sdFsxM10tdFs1XSx0WzE0XS10WzZdLHRbMTVdLXRbN11dLFtuKnRbMTJdK3RbOF0sbip0WzEzXSt0WzldLG4qdFsxNF0rdFsxMF0sbip0WzE1XSt0WzExXV0sW2kqdFsxMl0tdFs4XSxpKnRbMTNdLXRbOV0saSp0WzE0XS10WzEwXSxpKnRbMTVdLXRbMTFdXV19ZS5leHBvcnRzPW59LHt9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZigoKGU9dC5jaGFyQ29kZUF0KG4pKTw5fHxlPjEzKSYmMzIhPT1lJiYxMzMhPT1lJiYxNjAhPT1lJiY1NzYwIT09ZSYmNjE1OCE9PWUmJihlPDgxOTJ8fGU+ODIwNSkmJjgyMzIhPT1lJiY4MjMzIT09ZSYmODIzOSE9PWUmJjgyODchPT1lJiY4Mjg4IT09ZSYmMTIyODghPT1lJiY2NTI3OSE9PWUpcmV0dXJuITE7cmV0dXJuITB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O2lmKCJzdHJpbmciPT09ZSl7dmFyIHI9dDtpZigwPT09KHQ9K3QpJiZuKHIpKXJldHVybiExfWVsc2UgaWYoIm51bWJlciIhPT1lKXJldHVybiExO3JldHVybiB0LXQ8MX19LHt9XSwxMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJmIiwidmFyIHAgPSAoZiAmJiBmLnByb3BlcnRpZXMgfHwge30pOyByZXR1cm4gIitpKHQpKX1mdW5jdGlvbiBpKHQpe2lmKCF0KXJldHVybiJ0cnVlIjt2YXIgZT10WzBdO3JldHVybiB0Lmxlbmd0aDw9MT8iYW55Ij09PWU/ImZhbHNlIjoidHJ1ZSI6IigiKygiPT0iPT09ZT9vKHRbMV0sdFsyXSwiPT09IiwhMSk6IiE9Ij09PWU/byh0WzFdLHRbMl0sIiE9PSIsITEpOiI8Ij09PWV8fCI+Ij09PWV8fCI8PSI9PT1lfHwiPj0iPT09ZT9vKHRbMV0sdFsyXSxlLCEwKToiYW55Ij09PWU/cyh0LnNsaWNlKDEpLCJ8fCIpOiJhbGwiPT09ZT9zKHQuc2xpY2UoMSksIiYmIik6Im5vbmUiPT09ZT9jKHModC5zbGljZSgxKSwifHwiKSk6ImluIj09PWU/bCh0WzFdLHQuc2xpY2UoMikpOiIhaW4iPT09ZT9jKGwodFsxXSx0LnNsaWNlKDIpKSk6ImhhcyI9PT1lP3UodFsxXSk6IiFoYXMiPT09ZT9jKHUoW3RbMV1dKSk6InRydWUiKSsiKSJ9ZnVuY3Rpb24gYSh0KXtyZXR1cm4iJHR5cGUiPT09dD8iZi50eXBlIjoiJGlkIj09PXQ/ImYuaWQiOiJwWyIrSlNPTi5zdHJpbmdpZnkodCkrIl0ifWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9YSh0KSxvPSIkdHlwZSI9PT10P2YuaW5kZXhPZihlKTpKU09OLnN0cmluZ2lmeShlKTtyZXR1cm4obj8idHlwZW9mICIraSsiPT09IHR5cGVvZiAiK28rIiYmIjoiIikraStyK299ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0Lm1hcChpKS5qb2luKGUpfWZ1bmN0aW9uIGwodCxlKXsiJHR5cGUiPT09dCYmKGU9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGYuaW5kZXhPZih0KX0pKTt2YXIgcj1KU09OLnN0cmluZ2lmeShlLnNvcnQoaCkpLG49YSh0KTtyZXR1cm4gZS5sZW5ndGg8PTIwMD9yKyIuaW5kZXhPZigiK24rIikgIT09IC0xIjoiZnVuY3Rpb24odiwgYSwgaSwgaikge3doaWxlIChpIDw9IGopIHsgdmFyIG0gPSAoaSArIGopID4+IDE7ICAgIGlmIChhW21dID09PSB2KSByZXR1cm4gdHJ1ZTsgaWYgKGFbbV0gPiB2KSBqID0gbSAtIDE7IGVsc2UgaSA9IG0gKyAxO31yZXR1cm4gZmFsc2U7IH0oIituKyIsICIrcisiLDAsIisoZS5sZW5ndGgtMSkrIikifWZ1bmN0aW9uIHUodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyIgaW4gcCJ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4iISgiK3QrIikifWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZS5leHBvcnRzPW47dmFyIGY9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdfSx7fV0sMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybiBNYXRoLm1pbihlLE1hdGgubWF4KHQscikpfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMuZGltZW5zaW9uPXQubGVuZ3RoLHRoaXMuYm91bmRzPVtuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pLG5ldyBBcnJheSh0aGlzLmRpbWVuc2lvbildO2Zvcih2YXIgbj0wO248dGhpcy5kaW1lbnNpb247KytuKXRoaXMuYm91bmRzWzBdW25dPS0xLzAsdGhpcy5ib3VuZHNbMV1bbl09MS8wO3RoaXMuX3N0YXRlPXQuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdmVsb2NpdHk9ZS5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl90aW1lPVtyXSx0aGlzLl9zY3JhdGNoPVt0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpXX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBpKFswXSxbMF0sMCk7Y2FzZSAxOmlmKCJudW1iZXIiPT10eXBlb2YgdCl7dmFyIG49YSh0KTtyZXR1cm4gbmV3IGkobixuLDApfXJldHVybiBuZXcgaSh0LGEodC5sZW5ndGgpLDApO2Nhc2UgMjppZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPWEodC5sZW5ndGgpO3JldHVybiBuZXcgaSh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInN0YXRlIGFuZCB2ZWxvY2l0eSBsZW5ndGhzIG11c3QgbWF0Y2giKTtyZXR1cm4gbmV3IGkodCxlLHIpfX1lLmV4cG9ydHM9bzt2YXIgcz10KCJjdWJpYy1oZXJtaXRlIiksbD10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHU9aS5wcm90b3R5cGU7dS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1sLmd0KHRoaXMuX3RpbWUsdCktMTtlPD0wfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9zdGF0ZS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSx0aGlzLl92ZWxvY2l0eS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSl9LHUuY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGk9bC5sZShlLHQpLGE9dGhpcy5fc2NyYXRjaFswXSxvPXRoaXMuX3N0YXRlLHU9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbixoPXRoaXMuYm91bmRzO2lmKGk8MClmb3IodmFyIGY9Yy0xLGQ9MDtkPGM7KytkLC0tZilhW2RdPW9bZl07ZWxzZSBpZihpPj1yLTEpZm9yKHZhciBmPW8ubGVuZ3RoLTEscD10LWVbci0xXSxkPTA7ZDxjOysrZCwtLWYpYVtkXT1vW2ZdK3AqdVtmXTtlbHNle2Zvcih2YXIgZj1jKihpKzEpLTEsbT1lW2ldLHY9ZVtpKzFdLGc9di1tfHwxLHk9dGhpcy5fc2NyYXRjaFsxXSxiPXRoaXMuX3NjcmF0Y2hbMl0seD10aGlzLl9zY3JhdGNoWzNdLF89dGhpcy5fc2NyYXRjaFs0XSx3PSEwLGQ9MDtkPGM7KytkLC0tZil5W2RdPW9bZl0seFtkXT11W2ZdKmcsYltkXT1vW2YrY10sX1tkXT11W2YrY10qZyx3PXcmJnlbZF09PT1iW2RdJiZ4W2RdPT09X1tkXSYmMD09PXhbZF07aWYodylmb3IodmFyIGQ9MDtkPGM7KytkKWFbZF09eVtkXTtlbHNlIHMoeSx4LGIsXywodC1tKS9nLGEpfWZvcih2YXIgTT1oWzBdLGs9aFsxXSxkPTA7ZDxjOysrZClhW2RdPW4oTVtkXSxrW2RdLGFbZF0pO3JldHVybiBhfSx1LmRjdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbj1sLmxlKGUsdCksaT10aGlzLl9zY3JhdGNoWzBdLGE9dGhpcy5fc3RhdGUsbz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uO2lmKG4+PXItMSlmb3IodmFyIGM9YS5sZW5ndGgtMSxoPShlW3ItMV0sMCk7aDx1OysraCwtLWMpaVtoXT1vW2NdO2Vsc2V7Zm9yKHZhciBjPXUqKG4rMSktMSxmPWVbbl0sZD1lW24rMV0scD1kLWZ8fDEsbT10aGlzLl9zY3JhdGNoWzFdLHY9dGhpcy5fc2NyYXRjaFsyXSxnPXRoaXMuX3NjcmF0Y2hbM10seT10aGlzLl9zY3JhdGNoWzRdLGI9ITAsaD0wO2g8dTsrK2gsLS1jKW1baF09YVtjXSxnW2hdPW9bY10qcCx2W2hdPWFbYyt1XSx5W2hdPW9bYyt1XSpwLGI9YiYmbVtoXT09PXZbaF0mJmdbaF09PT15W2hdJiYwPT09Z1toXTtpZihiKWZvcih2YXIgaD0wO2g8dTsrK2gpaVtoXT0wO2Vsc2V7cy5kZXJpdmF0aXZlKG0sZyx2LHksKHQtZikvcCxpKTtmb3IodmFyIGg9MDtoPHU7KytoKWlbaF0vPXB9fXJldHVybiBpfSx1Lmxhc3RUPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGltZTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sdS5zdGFibGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fdmVsb2NpdHksZT10Lmxlbmd0aCxyPXRoaXMuZGltZW5zaW9uLTE7cj49MDstLXIpaWYodFstLWVdKXJldHVybiExO3JldHVybiEwfSx1Lmp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgaT10aGlzLl9zdGF0ZSxhPXRoaXMuX3ZlbG9jaXR5LG89aS5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sdT1zWzFdO3RoaXMuX3RpbWUucHVzaChlLHQpO2Zvcih2YXIgYz0wO2M8MjsrK2MpZm9yKHZhciBoPTA7aDxyOysraClpLnB1c2goaVtvKytdKSxhLnB1c2goMCk7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgaD1yO2g+MDstLWgpaS5wdXNoKG4obFtoLTFdLHVbaC0xXSxhcmd1bWVudHNbaF0pKSxhLnB1c2goMCl9fSx1LnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgaT10aGlzLl9zdGF0ZSxhPXRoaXMuX3ZlbG9jaXR5LG89aS5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyx1PWxbMF0sYz1sWzFdLGg9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKXt2YXIgZD1uKHVbZi0xXSxjW2YtMV0sYXJndW1lbnRzW2ZdKTtpLnB1c2goZCksYS5wdXNoKChkLWlbbysrXSkqaCl9fX0sdS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksYT10aGlzLmJvdW5kcyxvPWFbMF0scz1hWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChuKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksaS5wdXNoKDApfX0sdS5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBpPXRoaXMuX3N0YXRlLGE9dGhpcy5fdmVsb2NpdHksbz1pLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSx1PXNbMV0sYz10LWUsaD1jPjFlLTY/MS9jOjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yO2Y+MDstLWYpe3ZhciBkPWFyZ3VtZW50c1tmXTtpLnB1c2gobihsW2YtMV0sdVtmLTFdLGlbbysrXStkKSksYS5wdXNoKGQqaCl9fX0sdS5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLGk9dGhpcy5fc3RhdGUsYT10aGlzLl92ZWxvY2l0eSxvPWkubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sdT1zWzFdLGM9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9ci0xO2g+PTA7LS1oKWkucHVzaChuKGxbaF0sdVtoXSxpW29dK2MqYVtvXSkpLGEucHVzaCgwKSxvKz0xfX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjY0LCJjdWJpYy1oZXJtaXRlIjoxMDd9XSwxMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0PXR8fHt9O3ZhciBlLHIsbj10LmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbz10LmZhbWlseXx8InNhbnMtc2VyaWYiLHM9dC5zaGFwZXx8WzUxMiw1MTJdLGw9dC5zdGVwfHxbMzIsMzJdLHU9cGFyc2VGbG9hdCh0LnNpemUpfHwxNixjPXQuY2hhcnN8fFszMiwxMjZdLGg9TWF0aC5mbG9vcigobFswXS11KS8yKSxmPXQucmFkaXVzfHwxLjUqaCxkPW5ldyBhKHUsaCxmLDAsbykscD1udWxsPT10LmFsaWduPyJvcHRpY2FsIjp0LmFsaWduLG09bnVsbD09dC5maXR8fDE9PXQuZml0Py41OnQuZml0O2lmKEFycmF5LmlzQXJyYXkoYykpe2lmKDI9PT1jLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBjWzBdJiYibnVtYmVyIj09dHlwZW9mIGNbMV0pe3ZhciB2PVtdO2ZvcihlPWNbMF0scj0wO2U8PWNbMV07ZSsrKXZbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2M9dn19ZWxzZSBjPVN0cmluZyhjKS5zcGxpdCgiIik7cz1zLnNsaWNlKCksbi53aWR0aD1zWzBdLG4uaGVpZ2h0PXNbMV07dmFyIGc9bi5nZXRDb250ZXh0KCIyZCIpO2cuZmlsbFN0eWxlPSIjMDAwIixnLmZpbGxSZWN0KDAsMCxuLndpZHRoLG4uaGVpZ2h0KSxnLnRleHRCYXNlbGluZT0ibWlkZGxlIjt2YXIgeT1sWzBdLGI9bFsxXSx4PTAsXz0wLHc9dS9iLE09TWF0aC5taW4oYy5sZW5ndGgsTWF0aC5mbG9vcihzWzBdL3kpKk1hdGguY2VpbChzWzFdL2IpKSxrPWQuY3R4LnRleHRBbGlnbixBPWQuYnVmZmVyLFQ9ZC5taWRkbGU7Zm9yKGQuY3R4LnRleHRBbGlnbj0iY2VudGVyIixkLmJ1ZmZlcj1kLnNpemUvMixlPTA7ZTxNO2UrKylpZihjW2VdKXt2YXIgUz1pKGNbZV0sbyx3KSxFPTEsTD1bMCwwXTtpZihtKXt2YXIgQz1tO0FycmF5LmlzQXJyYXkobSkmJihDPW1bZV0pO3ZhciB6PS41KihTLmJvdW5kc1szXS1TLmJvdW5kc1sxXSksST0uNSooUy5ib3VuZHNbMl0tUy5ib3VuZHNbMF0pLEQ9TWF0aC5tYXgoeixJKSxQPU1hdGguc3FydCh6KnorSSpJKSxPPS4zMzMqUy5yYWRpdXMrLjMzMypEKy4zMzMqUDtFPWIqQy8oTypiKjIpLGQuY3R4LmZvbnQ9dSpFKyJweCAiK299ZWxzZSBkLmN0eC5mb250PXUrInB4ICIrbztwJiYoTD0ib3B0aWNhbCI9PT1wfHwhMD09PXA/Wy41KnkteSpTLmNlbnRlclswXSwuNSpiLWIqUy5jZW50ZXJbMV1dOlsuNSp5LXkqKFMuYm91bmRzWzJdK1MuYm91bmRzWzBdKSouNSwuNSpiLWIqKFMuYm91bmRzWzNdK1MuYm91bmRzWzFdKSouNV0sZC5taWRkbGU9VCtMWzFdKkUpO3ZhciBSPWQuZHJhdyhjW2VdKTtnLnB1dEltYWdlRGF0YShSLHgrTFswXSpFLF8pLHgrPWxbMF0seD5zWzBdLWxbMF0mJih4PTAsXys9bFsxXSl9cmV0dXJuIGQuY3R4LnRleHRBbGlnbj1rLGQuYnVmZmVyPUEsZC5taWRkbGU9VCxufWZ1bmN0aW9uIGkodCxlLHIpe2lmKHNbZV0mJnNbZV1bdF0pcmV0dXJuIHNbZV1bdF07dmFyIG49MjAwKnIsaT1vKHQse3NpemU6MjAwLGZvbnRTaXplOm4sZm9udEZhbWlseTplfSk7c1tlXXx8KHNbZV09e30pO3ZhciBhPXtjZW50ZXI6W2kuY2VudGVyWzBdLzIwMCxpLmNlbnRlclsxXS8yMDBdLGJvdW5kczppLmJvdW5kcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvMjAwfSkscmFkaXVzOmkucmFkaXVzLzIwMH07cmV0dXJuIHNbZV1bdF09YSxhfXZhciBhPXQoInRpbnktc2RmIiksbz10KCJvcHRpY2FsLXByb3BlcnRpZXMiKTtlLmV4cG9ydHM9bjt2YXIgcz17fX0seyJvcHRpY2FsLXByb3BlcnRpZXMiOjQ2OSwidGlueS1zZGYiOjUzMX1dLDEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt0aGlzLl9jb2xvcj10LHRoaXMua2V5PWUsdGhpcy52YWx1ZT1yLHRoaXMubGVmdD1uLHRoaXMucmlnaHQ9aSx0aGlzLl9jb3VudD1hfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBuKHQuX2NvbG9yLHQua2V5LHQudmFsdWUsdC5sZWZ0LHQucmlnaHQsdC5fY291bnQpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gbmV3IG4odCxlLmtleSxlLnZhbHVlLGUubGVmdCxlLnJpZ2h0LGUuX2NvdW50KX1mdW5jdGlvbiBvKHQpe3QuX2NvdW50PTErKHQubGVmdD90LmxlZnQuX2NvdW50OjApKyh0LnJpZ2h0P3QucmlnaHQuX2NvdW50OjApfWZ1bmN0aW9uIHModCxlKXt0aGlzLl9jb21wYXJlPXQsdGhpcy5yb290PWV9ZnVuY3Rpb24gbCh0LGUpe2lmKGUubGVmdCl7dmFyIHI9bCh0LGUubGVmdCk7aWYocilyZXR1cm4gcn12YXIgcj10KGUua2V5LGUudmFsdWUpO3JldHVybiByfHwoZS5yaWdodD9sKHQsZS5yaWdodCk6dm9pZCAwKX1mdW5jdGlvbiB1KHQsZSxyLG4pe2lmKGUodCxuLmtleSk8PTApe2lmKG4ubGVmdCl7dmFyIGk9dSh0LGUscixuLmxlZnQpO2lmKGkpcmV0dXJuIGl9dmFyIGk9cihuLmtleSxuLnZhbHVlKTtpZihpKXJldHVybiBpfWlmKG4ucmlnaHQpcmV0dXJuIHUodCxlLHIsbi5yaWdodCl9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBhLG89cih0LGkua2V5KSxzPXIoZSxpLmtleSk7aWYobzw9MCl7aWYoaS5sZWZ0JiYoYT1jKHQsZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYocz4wJiYoYT1uKGkua2V5LGkudmFsdWUpKSlyZXR1cm4gYX1pZihzPjAmJmkucmlnaHQpcmV0dXJuIGModCxlLHIsbixpLnJpZ2h0KX1mdW5jdGlvbiBoKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1mdW5jdGlvbiBmKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlLHIsbixzLGw9dC5sZW5ndGgtMTtsPj0wOy0tbCl7aWYoZT10W2xdLDA9PT1sKXJldHVybiB2b2lkKGUuX2NvbG9yPWcpO2lmKHI9dFtsLTFdLHIubGVmdD09PWUpe2lmKG49ci5yaWdodCxuLnJpZ2h0JiZuLnJpZ2h0Ll9jb2xvcj09PXYpe2lmKG49ci5yaWdodD1pKG4pLHM9bi5yaWdodD1pKG4ucmlnaHQpLHIucmlnaHQ9bi5sZWZ0LG4ubGVmdD1yLG4ucmlnaHQ9cyxuLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1nLHIuX2NvbG9yPWcscy5fY29sb3I9ZyxvKHIpLG8obiksbD4xKXt2YXIgdT10W2wtMl07dS5sZWZ0PT09cj91LmxlZnQ9bjp1LnJpZ2h0PW59cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ubGVmdCYmbi5sZWZ0Ll9jb2xvcj09PXYpe2lmKG49ci5yaWdodD1pKG4pLHM9bi5sZWZ0PWkobi5sZWZ0KSxyLnJpZ2h0PXMubGVmdCxuLmxlZnQ9cy5yaWdodCxzLmxlZnQ9cixzLnJpZ2h0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9ZyxuLl9jb2xvcj1nLGUuX2NvbG9yPWcsbyhyKSxvKG4pLG8ocyksbD4xKXt2YXIgdT10W2wtMl07dS5sZWZ0PT09cj91LmxlZnQ9czp1LnJpZ2h0PXN9cmV0dXJuIHZvaWQodFtsLTFdPXMpfWlmKG4uX2NvbG9yPT09Zyl7aWYoci5fY29sb3I9PT12KXJldHVybiByLl9jb2xvcj1nLHZvaWQoci5yaWdodD1hKHYsbikpO3IucmlnaHQ9YSh2LG4pO2NvbnRpbnVlfWlmKG49aShuKSxyLnJpZ2h0PW4ubGVmdCxuLmxlZnQ9cixuLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj12LG8ociksbyhuKSxsPjEpe3ZhciB1PXRbbC0yXTt1LmxlZnQ9PT1yP3UubGVmdD1uOnUucmlnaHQ9bn10W2wtMV09bix0W2xdPXIsbCsxPHQubGVuZ3RoP3RbbCsxXT1lOnQucHVzaChlKSxsKz0yfWVsc2V7aWYobj1yLmxlZnQsbi5sZWZ0JiZuLmxlZnQuX2NvbG9yPT09dil7aWYobj1yLmxlZnQ9aShuKSxzPW4ubGVmdD1pKG4ubGVmdCksci5sZWZ0PW4ucmlnaHQsbi5yaWdodD1yLG4ubGVmdD1zLG4uX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPWcsci5fY29sb3I9ZyxzLl9jb2xvcj1nLG8ociksbyhuKSxsPjEpe3ZhciB1PXRbbC0yXTt1LnJpZ2h0PT09cj91LnJpZ2h0PW46dS5sZWZ0PW59cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ucmlnaHQmJm4ucmlnaHQuX2NvbG9yPT09dil7aWYobj1yLmxlZnQ9aShuKSxzPW4ucmlnaHQ9aShuLnJpZ2h0KSxyLmxlZnQ9cy5yaWdodCxuLnJpZ2h0PXMubGVmdCxzLnJpZ2h0PXIscy5sZWZ0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9ZyxuLl9jb2xvcj1nLGUuX2NvbG9yPWcsbyhyKSxvKG4pLG8ocyksbD4xKXt2YXIgdT10W2wtMl07dS5yaWdodD09PXI/dS5yaWdodD1zOnUubGVmdD1zfXJldHVybiB2b2lkKHRbbC0xXT1zKX1pZihuLl9jb2xvcj09PWcpe2lmKHIuX2NvbG9yPT09dilyZXR1cm4gci5fY29sb3I9Zyx2b2lkKHIubGVmdD1hKHYsbikpO3IubGVmdD1hKHYsbik7Y29udGludWV9aWYobj1pKG4pLHIubGVmdD1uLnJpZ2h0LG4ucmlnaHQ9cixuLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj12LG8ociksbyhuKSxsPjEpe3ZhciB1PXRbbC0yXTt1LnJpZ2h0PT09cj91LnJpZ2h0PW46dS5sZWZ0PW59dFtsLTFdPW4sdFtsXT1yLGwrMTx0Lmxlbmd0aD90W2wrMV09ZTp0LnB1c2goZSksbCs9Mn19fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbmV3IHModHx8cCxudWxsKX1lLmV4cG9ydHM9bTt2YXIgdj0wLGc9MSx5PXMucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJrZXlzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChlKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInZhbHVlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LnB1c2gocil9KSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5fY291bnQ6MH19KSx5Lmluc2VydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb21wYXJlLGk9dGhpcy5yb290LGw9W10sdT1bXTtpOyl7dmFyIGM9cih0LGkua2V5KTtsLnB1c2goaSksdS5wdXNoKGMpLGk9Yzw9MD9pLmxlZnQ6aS5yaWdodH1sLnB1c2gobmV3IG4odix0LGUsbnVsbCxudWxsLDEpKTtmb3IodmFyIGg9bC5sZW5ndGgtMjtoPj0wOy0taCl7dmFyIGk9bFtoXTt1W2hdPD0wP2xbaF09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxsW2grMV0saS5yaWdodCxpLl9jb3VudCsxKTpsW2hdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsaS5sZWZ0LGxbaCsxXSxpLl9jb3VudCsxKX1mb3IodmFyIGg9bC5sZW5ndGgtMTtoPjE7LS1oKXt2YXIgZj1sW2gtMV0saT1sW2hdO2lmKGYuX2NvbG9yPT09Z3x8aS5fY29sb3I9PT1nKWJyZWFrO3ZhciBkPWxbaC0yXTtpZihkLmxlZnQ9PT1mKWlmKGYubGVmdD09PWkpe3ZhciBwPWQucmlnaHQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoZC5fY29sb3I9dixkLmxlZnQ9Zi5yaWdodCxmLl9jb2xvcj1nLGYucmlnaHQ9ZCxsW2gtMl09ZixsW2gtMV09aSxvKGQpLG8oZiksaD49Myl7dmFyIG09bFtoLTNdO20ubGVmdD09PWQ/bS5sZWZ0PWY6bS5yaWdodD1mfWJyZWFrfWYuX2NvbG9yPWcsZC5yaWdodD1hKGcscCksZC5fY29sb3I9dixoLT0xfWVsc2V7dmFyIHA9ZC5yaWdodDtpZighcHx8cC5fY29sb3IhPT12KXtpZihmLnJpZ2h0PWkubGVmdCxkLl9jb2xvcj12LGQubGVmdD1pLnJpZ2h0LGkuX2NvbG9yPWcsaS5sZWZ0PWYsaS5yaWdodD1kLGxbaC0yXT1pLGxbaC0xXT1mLG8oZCksbyhmKSxvKGkpLGg+PTMpe3ZhciBtPWxbaC0zXTttLmxlZnQ9PT1kP20ubGVmdD1pOm0ucmlnaHQ9aX1icmVha31mLl9jb2xvcj1nLGQucmlnaHQ9YShnLHApLGQuX2NvbG9yPXYsaC09MX1lbHNlIGlmKGYucmlnaHQ9PT1pKXt2YXIgcD1kLmxlZnQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoZC5fY29sb3I9dixkLnJpZ2h0PWYubGVmdCxmLl9jb2xvcj1nLGYubGVmdD1kLGxbaC0yXT1mLGxbaC0xXT1pLG8oZCksbyhmKSxoPj0zKXt2YXIgbT1sW2gtM107bS5yaWdodD09PWQ/bS5yaWdodD1mOm0ubGVmdD1mfWJyZWFrfWYuX2NvbG9yPWcsZC5sZWZ0PWEoZyxwKSxkLl9jb2xvcj12LGgtPTF9ZWxzZXt2YXIgcD1kLmxlZnQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoZi5sZWZ0PWkucmlnaHQsZC5fY29sb3I9dixkLnJpZ2h0PWkubGVmdCxpLl9jb2xvcj1nLGkucmlnaHQ9ZixpLmxlZnQ9ZCxsW2gtMl09aSxsW2gtMV09ZixvKGQpLG8oZiksbyhpKSxoPj0zKXt2YXIgbT1sW2gtM107bS5yaWdodD09PWQ/bS5yaWdodD1pOm0ubGVmdD1pfWJyZWFrfWYuX2NvbG9yPWcsZC5sZWZ0PWEoZyxwKSxkLl9jb2xvcj12LGgtPTF9fXJldHVybiBsWzBdLl9jb2xvcj1nLG5ldyBzKHIsbFswXSl9LHkuZm9yRWFjaD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5yb290KXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGwodCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gdShlLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpO2Nhc2UgMzppZih0aGlzLl9jb21wYXJlKGUscik+PTApcmV0dXJuO3JldHVybiBjKGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBoKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLHkuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgaCh0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgaCh0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0seS5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx5Lmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx5Lmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0seS5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LHkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGgodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSx5LnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSx5LmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgYj1oLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjA/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOm51bGx9LGVudW1lcmFibGU6ITB9KSxiLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoKHRoaXMudHJlZSx0aGlzLl9zdGFjay5zbGljZSgpKX0sYi5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMudHJlZTt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9dFt0Lmxlbmd0aC0xXTtlW2UubGVuZ3RoLTFdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpO2Zvcih2YXIgaT10Lmxlbmd0aC0yO2k+PTA7LS1pKXt2YXIgcj10W2ldO3IubGVmdD09PXRbaSsxXT9lW2ldPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVtpKzFdLHIucmlnaHQsci5fY291bnQpOmVbaV09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtpKzFdLHIuX2NvdW50KX1pZihyPWVbZS5sZW5ndGgtMV0sci5sZWZ0JiZyLnJpZ2h0KXt2YXIgYT1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgbz1lW2EtMV07ZS5wdXNoKG5ldyBuKHIuX2NvbG9yLG8ua2V5LG8udmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2EtMV0ua2V5PXIua2V5LGVbYS0xXS52YWx1ZT1yLnZhbHVlO2Zvcih2YXIgaT1lLmxlbmd0aC0yO2k+PWE7LS1pKXI9ZVtpXSxlW2ldPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbaSsxXSxyLl9jb3VudCk7ZVthLTFdLmxlZnQ9ZVthXX1pZihyPWVbZS5sZW5ndGgtMV0sci5fY29sb3I9PT12KXt2YXIgbD1lW2UubGVuZ3RoLTJdO2wubGVmdD09PXI/bC5sZWZ0PW51bGw6bC5yaWdodD09PXImJihsLnJpZ2h0PW51bGwpLGUucG9wKCk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpZVtpXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKHIubGVmdHx8ci5yaWdodCl7ci5sZWZ0P2YocixyLmxlZnQpOnIucmlnaHQmJmYocixyLnJpZ2h0KSxyLl9jb2xvcj1nO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpZVtpXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKWVbaV0uX2NvdW50LS07dmFyIHU9ZVtlLmxlbmd0aC0yXTtyZXR1cm4gZChlKSx1LmxlZnQ9PT1yP3UubGVmdD1udWxsOnUucmlnaHQ9bnVsbCxuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJrZXkiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLmtleX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0udmFsdWV9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiaW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXt2YXIgcj10aGlzLnRyZWUucm9vdDtyZXR1cm4gcj9yLl9jb3VudDowfWVbZS5sZW5ndGgtMV0ubGVmdCYmKHQ9ZVtlLmxlbmd0aC0xXS5sZWZ0Ll9jb3VudCk7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj49MDstLW4pZVtuKzFdPT09ZVtuXS5yaWdodCYmKCsrdCxlW25dLmxlZnQmJih0Kz1lW25dLmxlZnQuX2NvdW50KSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxiLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5yaWdodClmb3IoZT1lLnJpZ2h0O2U7KXQucHVzaChlKSxlPWUubGVmdDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ucmlnaHQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJoYXNOZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ucmlnaHQpcmV0dXJuITA7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT4wOy0tZSlpZih0W2UtMV0ubGVmdD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSksYi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgdXBkYXRlIGVtcHR5IG5vZGUhIik7dmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxpPWVbZS5sZW5ndGgtMV07cltyLmxlbmd0aC0xXT1uZXcgbihpLl9jb2xvcixpLmtleSx0LGkubGVmdCxpLnJpZ2h0LGkuX2NvdW50KTtmb3IodmFyIGE9ZS5sZW5ndGgtMjthPj0wOy0tYSlpPWVbYV0saS5sZWZ0PT09ZVthKzFdP3JbYV09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxyW2ErMV0saS5yaWdodCxpLl9jb3VudCk6clthXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGkubGVmdCxyW2ErMV0saS5fY291bnQpO3JldHVybiBuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsclswXSl9LGIucHJldj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLmxlZnQpZm9yKGU9ZS5sZWZ0O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLmxlZnQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJoYXNQcmV2Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ubGVmdClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5yaWdodD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSl9LHt9XSwxMzQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQ8MClyZXR1cm4gTnVtYmVyKCIwLzAiKTtmb3IodmFyIGU9b1swXSxyPW8ubGVuZ3RoLTE7cj4wOy0tcillKz1vW3JdLyh0K3IpO3ZhciBuPXQrYSsuNTtyZXR1cm4uNSpNYXRoLmxvZygyKk1hdGguUEkpKyh0Ky41KSpNYXRoLmxvZyhuKS1uK01hdGgubG9nKGUpLU1hdGgubG9nKHQpfXZhciBpPVsuOTk5OTk5OTk5OTk5ODA5OSw2NzYuNTIwMzY4MTIxODg1MSwtMTI1OS4xMzkyMTY3MjI0MDI4LDc3MS4zMjM0Mjg3Nzc2NTMxLC0xNzYuNjE1MDI5MTYyMTQwNiwxMi41MDczNDMyNzg2ODY5MDUsLS4xMzg1NzEwOTUyNjU3MjAxMiw5OTg0MzY5NTc4MDE5NTcyZS0yMSwxLjUwNTYzMjczNTE0OTMxMTZlLTddLGE9NjA3LzEyOCxvPVsuOTk5OTk5OTk5OTk5OTk3MSw1Ny4xNTYyMzU2NjU4NjI5MiwtNTkuNTk3OTYwMzU1NDc1NDksMTQuMTM2MDk3OTc0NzQxNzQ2LC0uNDkxOTEzODE2MDk3NjIwMiwzMzk5NDY0OTk4NDgxMTg5ZS0yMCw0NjUyMzYyODkyNzA0ODU4ZS0yMCwtOTgzNzQ0NzUzMDQ4Nzk1NmUtMjAsLjAwMDE1ODA4ODcwMzIyNDkxMjUsLS4wMDAyMTAyNjQ0NDE3MjQxMDQ4OCwuMDAwMjE3NDM5NjE4MTE1MjEyNjUsLS4wMDAxNjQzMTgxMDY1MzY3NjM5LDg0NDE4MjIzOTgzODUyNzVlLTIwLC0yNjE5MDgzODQwMTU4MTQwOGUtMjEsMzY4OTkxODI2NTk1MzE2MjVlLTIyXTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlKXtpZihlPC41KXJldHVybiBNYXRoLlBJLyhNYXRoLnNpbihNYXRoLlBJKmUpKnQoMS1lKSk7aWYoZT4xMDApcmV0dXJuIE1hdGguZXhwKG4oZSkpO2UtPTE7Zm9yKHZhciByPWlbMF0sYT0xO2E8OTthKyspcis9aVthXS8oZSthKTt2YXIgbz1lKzcrLjU7cmV0dXJuIE1hdGguc3FydCgyKk1hdGguUEkpKk1hdGgucG93KG8sZSsuNSkqTWF0aC5leHAoLW8pKnJ9LGUuZXhwb3J0cy5sb2c9bn0se31dLDEzNTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYoIlBvbHlnb24iPT09dC50eXBlKXJldHVybiBpKHQuY29vcmRpbmF0ZXMpO2lmKCJNdWx0aVBvbHlnb24iPT09dC50eXBlKXtmb3IodmFyIGU9MCxyPTA7cjx0LmNvb3JkaW5hdGVzLmxlbmd0aDtyKyspZSs9aSh0LmNvb3JkaW5hdGVzW3JdKTtyZXR1cm4gZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBpKHQpe3ZhciBlPTA7aWYodCYmdC5sZW5ndGg+MCl7ZSs9TWF0aC5hYnMoYSh0WzBdKSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspZS09TWF0aC5hYnMoYSh0W3JdKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXt2YXIgZT0wO2lmKHQubGVuZ3RoPjIpe2Zvcih2YXIgcixuLGk9MDtpPHQubGVuZ3RoLTE7aSsrKXI9dFtpXSxuPXRbaSsxXSxlKz1vKG5bMF0tclswXSkqKDIrTWF0aC5zaW4obyhyWzFdKSkrTWF0aC5zaW4obyhuWzFdKSkpO2U9ZSpzLlJBRElVUypzLlJBRElVUy8yfXJldHVybiBlfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQqTWF0aC5QSS8xODB9dmFyIHM9dCgid2dzODQiKTtlLmV4cG9ydHMuZ2VvbWV0cnk9bixlLmV4cG9ydHMucmluZz1hfSx7d2dzODQ6NTYzfV0sMTM2OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3N3aXRjaCh0JiZ0LnR5cGV8fG51bGwpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnJldHVybiB0LmZlYXR1cmVzPXQuZmVhdHVyZXMubWFwKGkobixlKSksdDtjYXNlIkZlYXR1cmUiOnJldHVybiB0Lmdlb21ldHJ5PW4odC5nZW9tZXRyeSxlKSx0O2Nhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBhKHQsZSk7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyLGUpfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIlBvbHlnb24iPT09dC50eXBlP3QuY29vcmRpbmF0ZXM9byh0LmNvb3JkaW5hdGVzLGUpOiJNdWx0aVBvbHlnb24iPT09dC50eXBlJiYodC5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzLm1hcChpKG8sZSkpKSx0fWZ1bmN0aW9uIG8odCxlKXtlPSEhZSx0WzBdPXModFswXSwhZSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspdFtyXT1zKHRbcl0sZSk7cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBsKHQpPT09ZT90OnQucmV2ZXJzZSgpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHUucmluZyh0KT49MH12YXIgdT10KCJnZW9qc29uLWFyZWEiKTtlLmV4cG9ydHM9bn0seyJnZW9qc29uLWFyZWEiOjEzNX1dLDEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sbyxsLHUsYyl7aWYoci89ZSxuLz1lLHU+PXImJmM8PW4pcmV0dXJuIHQ7aWYodT5ufHxjPHIpcmV0dXJuIG51bGw7Zm9yKHZhciBoPVtdLGY9MDtmPHQubGVuZ3RoO2YrKyl7dmFyIGQscCxtPXRbZl0sdj1tLmdlb21ldHJ5LGc9bS50eXBlO2lmKGQ9bS5taW5bb10scD1tLm1heFtvXSxkPj1yJiZwPD1uKWgucHVzaChtKTtlbHNlIGlmKCEoZD5ufHxwPHIpKXt2YXIgeT0xPT09Zz9pKHYscixuLG8pOmEodixyLG4sbyxsLDM9PT1nKTt5Lmxlbmd0aCYmaC5wdXNoKHMobS50YWdzLGcseSxtLmlkKSl9fXJldHVybiBoLmxlbmd0aD9oOm51bGx9ZnVuY3Rpb24gaSh0LGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLHM9b1tuXTtzPj1lJiZzPD1yJiZpLnB1c2gobyl9cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7Zm9yKHZhciBzPVtdLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIHUsYyxoLGY9MCxkPTAscD1udWxsLG09dFtsXSx2PW0uYXJlYSxnPW0uZGlzdCx5PW0ub3V0ZXIsYj1tLmxlbmd0aCx4PVtdO2ZvcihjPTA7YzxiLTE7YysrKXU9cHx8bVtjXSxwPW1bYysxXSxmPWR8fHVbbl0sZD1wW25dLGY8ZT9kPnI/KHgucHVzaChpKHUscCxlKSxpKHUscCxyKSksYXx8KHg9byhzLHgsdixnLHkpKSk6ZD49ZSYmeC5wdXNoKGkodSxwLGUpKTpmPnI/ZDxlPyh4LnB1c2goaSh1LHAsciksaSh1LHAsZSkpLGF8fCh4PW8ocyx4LHYsZyx5KSkpOmQ8PXImJngucHVzaChpKHUscCxyKSk6KHgucHVzaCh1KSxkPGU/KHgucHVzaChpKHUscCxlKSksYXx8KHg9byhzLHgsdixnLHkpKSk6ZD5yJiYoeC5wdXNoKGkodSxwLHIpKSxhfHwoeD1vKHMseCx2LGcseSkpKSk7dT1tW2ItMV0sZj11W25dLGY+PWUmJmY8PXImJngucHVzaCh1KSxoPXhbeC5sZW5ndGgtMV0sYSYmaCYmKHhbMF1bMF0hPT1oWzBdfHx4WzBdWzFdIT09aFsxXSkmJngucHVzaCh4WzBdKSxvKHMseCx2LGcseSl9cmV0dXJuIHN9ZnVuY3Rpb24gbyh0LGUscixuLGkpe3JldHVybiBlLmxlbmd0aCYmKGUuYXJlYT1yLGUuZGlzdD1uLHZvaWQgMCE9PWkmJihlLm91dGVyPWkpLHQucHVzaChlKSksW119ZS5leHBvcnRzPW47dmFyIHM9dCgiLi9mZWF0dXJlIil9LHsiLi9mZWF0dXJlIjoxMzl9XSwxMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPVtdO2lmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGUpZm9yKHZhciBuPTA7bjx0LmZlYXR1cmVzLmxlbmd0aDtuKyspaShyLHQuZmVhdHVyZXNbbl0sZSk7ZWxzZSJGZWF0dXJlIj09PXQudHlwZT9pKHIsdCxlKTppKHIse2dlb21ldHJ5OnR9LGUpO3JldHVybiByfWZ1bmN0aW9uIGkodCxlLHIpe2lmKG51bGwhPT1lLmdlb21ldHJ5KXt2YXIgbixzLGwsYyxoPWUuZ2VvbWV0cnksZj1oLnR5cGUsZD1oLmNvb3JkaW5hdGVzLHA9ZS5wcm9wZXJ0aWVzLG09ZS5pZDtpZigiUG9pbnQiPT09Zil0LnB1c2godShwLDEsW28oZCldLG0pKTtlbHNlIGlmKCJNdWx0aVBvaW50Ij09PWYpdC5wdXNoKHUocCwxLGEoZCksbSkpO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09Zil0LnB1c2godShwLDIsW2EoZCxyKV0sbSkpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1mfHwiUG9seWdvbiI9PT1mKXtmb3IobD1bXSxuPTA7bjxkLmxlbmd0aDtuKyspYz1hKGRbbl0sciksIlBvbHlnb24iPT09ZiYmKGMub3V0ZXI9MD09PW4pLGwucHVzaChjKTt0LnB1c2godShwLCJQb2x5Z29uIj09PWY/MzoyLGwsbSkpfWVsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1mKXtmb3IobD1bXSxuPTA7bjxkLmxlbmd0aDtuKyspZm9yKHM9MDtzPGRbbl0ubGVuZ3RoO3MrKyljPWEoZFtuXVtzXSxyKSxjLm91dGVyPTA9PT1zLGwucHVzaChjKTt0LnB1c2godShwLDMsbCxtKSl9ZWxzZXtpZigiR2VvbWV0cnlDb2xsZWN0aW9uIiE9PWYpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpO2ZvcihuPTA7bjxoLmdlb21ldHJpZXMubGVuZ3RoO24rKylpKHQse2dlb21ldHJ5OmguZ2VvbWV0cmllc1tuXSxwcm9wZXJ0aWVzOnB9LHIpfX19ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKG8odFtuXSkpO3JldHVybiBlJiYobChyLGUpLHMocikpLHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZT1NYXRoLnNpbih0WzFdKk1hdGguUEkvMTgwKSxyPXRbMF0vMzYwKy41LG49LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiBuPW48MD8wOm4+MT8xOm4sW3IsbiwwXX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZSxyLG49MCxpPTAsYT0wO2E8dC5sZW5ndGgtMTthKyspZT1yfHx0W2FdLHI9dFthKzFdLG4rPWVbMF0qclsxXS1yWzBdKmVbMV0saSs9TWF0aC5hYnMoclswXS1lWzBdKStNYXRoLmFicyhyWzFdLWVbMV0pO3QuYXJlYT1NYXRoLmFicyhuLzIpLHQuZGlzdD1pfWUuZXhwb3J0cz1uO3ZhciBsPXQoIi4vc2ltcGxpZnkiKSx1PXQoIi4vZmVhdHVyZSIpfSx7Ii4vZmVhdHVyZSI6MTM5LCIuL3NpbXBsaWZ5IjoxNDF9XSwxMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgYT17aWQ6bnx8bnVsbCx0eXBlOmUsZ2VvbWV0cnk6cix0YWdzOnR8fG51bGwsbWluOlsxLzAsMS8wXSxtYXg6Wy0xLzAsLTEvMF19O3JldHVybiBpKGEpLGF9ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmdlb21ldHJ5LHI9dC5taW4sbj10Lm1heDtpZigxPT09dC50eXBlKWEocixuLGUpO2Vsc2UgZm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspYShyLG4sZVtpXSk7cmV0dXJuIHR9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoO2krKyluPXJbaV0sdFswXT1NYXRoLm1pbihuWzBdLHRbMF0pLGVbMF09TWF0aC5tYXgoblswXSxlWzBdKSx0WzFdPU1hdGgubWluKG5bMV0sdFsxXSksZVsxXT1NYXRoLm1heChuWzFdLGVbMV0pfWUuZXhwb3J0cz1ufSx7fV0sMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gbmV3IGkodCxlKX1mdW5jdGlvbiBpKHQsZSl7ZT10aGlzLm9wdGlvbnM9bChPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksZSk7dmFyIHI9ZS5kZWJ1ZztyJiZjb25zb2xlLnRpbWUoInByZXByb2Nlc3MgZGF0YSIpO3ZhciBuPTE8PGUubWF4Wm9vbSxpPWModCxlLnRvbGVyYW5jZS8obiplLmV4dGVudCkpO3RoaXMudGlsZXM9e30sdGhpcy50aWxlQ29vcmRzPVtdLHImJihjb25zb2xlLnRpbWVFbmQoInByZXByb2Nlc3MgZGF0YSIpLGNvbnNvbGUubG9nKCJpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWQiLGUuaW5kZXhNYXhab29tLGUuaW5kZXhNYXhQb2ludHMpLGNvbnNvbGUudGltZSgiZ2VuZXJhdGUgdGlsZXMiKSx0aGlzLnN0YXRzPXt9LHRoaXMudG90YWw9MCksaT1kKGksZS5idWZmZXIvZS5leHRlbnQsbyksaS5sZW5ndGgmJnRoaXMuc3BsaXRUaWxlKGksMCwwLDApLHImJihpLmxlbmd0aCYmY29uc29sZS5sb2coImZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCIsdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcyx0aGlzLnRpbGVzWzBdLm51bVBvaW50cyksY29uc29sZS50aW1lRW5kKCJnZW5lcmF0ZSB0aWxlcyIpLGNvbnNvbGUubG9nKCJ0aWxlcyBnZW5lcmF0ZWQ6Iix0aGlzLnRvdGFsLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKSl9ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIDMyKigoMTw8dCkqcitlKSt0fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybltyLChyLXRbMF0pKihlWzFdLXRbMV0pLyhlWzBdLXRbMF0pK3RbMV0sMV19ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuWyhyLXRbMV0pKihlWzBdLXRbMF0pLyhlWzFdLXRbMV0pK3RbMF0sciwxXX1mdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuPXQuc291cmNlO2lmKDEhPT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uWzBdO2lmKDMhPT1pLnR5cGV8fGkuZ2VvbWV0cnkubGVuZ3RoPjEpcmV0dXJuITE7dmFyIGE9aS5nZW9tZXRyeVswXS5sZW5ndGg7aWYoNSE9PWEpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxhO28rKyl7dmFyIHM9aC5wb2ludChpLmdlb21ldHJ5WzBdW29dLGUsdC56Mix0LngsdC55KTtpZihzWzBdIT09LXImJnNbMF0hPT1lK3J8fHNbMV0hPT0tciYmc1sxXSE9PWUrcilyZXR1cm4hMX1yZXR1cm4hMH1lLmV4cG9ydHM9bjt2YXIgYz10KCIuL2NvbnZlcnQiKSxoPXQoIi4vdHJhbnNmb3JtIiksZj10KCIuL2NsaXAiKSxkPXQoIi4vd3JhcCIpLHA9dCgiLi90aWxlIik7aS5wcm90b3R5cGUub3B0aW9ucz17bWF4Wm9vbToxNCxpbmRleE1heFpvb206NSxpbmRleE1heFBvaW50czoxZTUsc29saWRDaGlsZHJlbjohMSx0b2xlcmFuY2U6MyxleHRlbnQ6NDA5NixidWZmZXI6NjQsZGVidWc6MH0saS5wcm90b3R5cGUuc3BsaXRUaWxlPWZ1bmN0aW9uKHQsZSxyLG4saSxsLGMpe2Zvcih2YXIgaD1bdCxlLHIsbl0sZD10aGlzLm9wdGlvbnMsbT1kLmRlYnVnLHY9bnVsbDtoLmxlbmd0aDspe249aC5wb3AoKSxyPWgucG9wKCksZT1oLnBvcCgpLHQ9aC5wb3AoKTt2YXIgZz0xPDxlLHk9YShlLHIsbiksYj10aGlzLnRpbGVzW3ldLHg9ZT09PWQubWF4Wm9vbT8wOmQudG9sZXJhbmNlLyhnKmQuZXh0ZW50KTtpZighYiYmKG0+MSYmY29uc29sZS50aW1lKCJjcmVhdGlvbiIpLGI9dGhpcy50aWxlc1t5XT1wKHQsZyxyLG4seCxlPT09ZC5tYXhab29tKSx0aGlzLnRpbGVDb29yZHMucHVzaCh7ejplLHg6cix5Om59KSxtKSl7bT4xJiYoY29uc29sZS5sb2coInRpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKSIsZSxyLG4sYi5udW1GZWF0dXJlcyxiLm51bVBvaW50cyxiLm51bVNpbXBsaWZpZWQpLGNvbnNvbGUudGltZUVuZCgiY3JlYXRpb24iKSk7dmFyIF89InoiK2U7dGhpcy5zdGF0c1tfXT0odGhpcy5zdGF0c1tfXXx8MCkrMSx0aGlzLnRvdGFsKyt9aWYoYi5zb3VyY2U9dCxpKXtpZihlPT09ZC5tYXhab29tfHxlPT09aSljb250aW51ZTt2YXIgdz0xPDxpLWU7aWYociE9PU1hdGguZmxvb3IobC93KXx8biE9PU1hdGguZmxvb3IoYy93KSljb250aW51ZX1lbHNlIGlmKGU9PT1kLmluZGV4TWF4Wm9vbXx8Yi5udW1Qb2ludHM8PWQuaW5kZXhNYXhQb2ludHMpY29udGludWU7aWYoZC5zb2xpZENoaWxkcmVufHwhdShiLGQuZXh0ZW50LGQuYnVmZmVyKSl7Yi5zb3VyY2U9bnVsbCxtPjEmJmNvbnNvbGUudGltZSgiY2xpcHBpbmciKTt2YXIgTSxrLEEsVCxTLEUsTD0uNSpkLmJ1ZmZlci9kLmV4dGVudCxDPS41LUwsej0uNStMLEk9MStMO009az1BPVQ9bnVsbCxTPWYodCxnLHItTCxyK3osMCxvLGIubWluWzBdLGIubWF4WzBdKSxFPWYodCxnLHIrQyxyK0ksMCxvLGIubWluWzBdLGIubWF4WzBdKSxTJiYoTT1mKFMsZyxuLUwsbit6LDEscyxiLm1pblsxXSxiLm1heFsxXSksaz1mKFMsZyxuK0MsbitJLDEscyxiLm1pblsxXSxiLm1heFsxXSkpLEUmJihBPWYoRSxnLG4tTCxuK3osMSxzLGIubWluWzFdLGIubWF4WzFdKSxUPWYoRSxnLG4rQyxuK0ksMSxzLGIubWluWzFdLGIubWF4WzFdKSksbT4xJiZjb25zb2xlLnRpbWVFbmQoImNsaXBwaW5nIiksdC5sZW5ndGgmJihoLnB1c2goTXx8W10sZSsxLDIqciwyKm4pLGgucHVzaChrfHxbXSxlKzEsMipyLDIqbisxKSxoLnB1c2goQXx8W10sZSsxLDIqcisxLDIqbiksaC5wdXNoKFR8fFtdLGUrMSwyKnIrMSwyKm4rMSkpfWVsc2UgaSYmKHY9ZSl9cmV0dXJuIHZ9LGkucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMub3B0aW9ucyxpPW4uZXh0ZW50LG89bi5kZWJ1ZyxzPTE8PHQ7ZT0oZSVzK3MpJXM7dmFyIGw9YSh0LGUscik7aWYodGhpcy50aWxlc1tsXSlyZXR1cm4gaC50aWxlKHRoaXMudGlsZXNbbF0saSk7bz4xJiZjb25zb2xlLmxvZygiZHJpbGxpbmcgZG93biB0byB6JWQtJWQtJWQiLHQsZSxyKTtmb3IodmFyIGMsZj10LGQ9ZSxwPXI7IWMmJmY+MDspZi0tLGQ9TWF0aC5mbG9vcihkLzIpLHA9TWF0aC5mbG9vcihwLzIpLGM9dGhpcy50aWxlc1thKGYsZCxwKV07aWYoIWN8fCFjLnNvdXJjZSlyZXR1cm4gbnVsbDtpZihvPjEmJmNvbnNvbGUubG9nKCJmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWQiLGYsZCxwKSx1KGMsaSxuLmJ1ZmZlcikpcmV0dXJuIGgudGlsZShjLGkpO28+MSYmY29uc29sZS50aW1lKCJkcmlsbGluZyBkb3duIik7dmFyIG09dGhpcy5zcGxpdFRpbGUoYy5zb3VyY2UsZixkLHAsdCxlLHIpO2lmKG8+MSYmY29uc29sZS50aW1lRW5kKCJkcmlsbGluZyBkb3duIiksbnVsbCE9PW0pe3ZhciB2PTE8PHQtbTtsPWEobSxNYXRoLmZsb29yKGUvdiksTWF0aC5mbG9vcihyL3YpKX1yZXR1cm4gdGhpcy50aWxlc1tsXT9oLnRpbGUodGhpcy50aWxlc1tsXSxpKTpudWxsfX0seyIuL2NsaXAiOjEzNywiLi9jb252ZXJ0IjoxMzgsIi4vdGlsZSI6MTQyLCIuL3RyYW5zZm9ybSI6MTQzLCIuL3dyYXAiOjE0NH1dLDE0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixhLG8scz1lKmUsbD10Lmxlbmd0aCx1PTAsYz1sLTEsaD1bXTtmb3IodFt1XVsyXT0xLHRbY11bMl09MTtjOyl7Zm9yKG49MCxyPXUrMTtyPGM7cisrKShhPWkodFtyXSx0W3VdLHRbY10pKT5uJiYobz1yLG49YSk7bj5zPyh0W29dWzJdPW4saC5wdXNoKHUpLGgucHVzaChvKSx1PW8pOihjPWgucG9wKCksdT1oLnBvcCgpKX19ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1yWzBdLG89clsxXSxzPXRbMF0sbD10WzFdLHU9YS1uLGM9by1pO2lmKDAhPT11fHwwIT09Yyl7dmFyIGg9KChzLW4pKnUrKGwtaSkqYykvKHUqdStjKmMpO2g+MT8obj1hLGk9byk6aD4wJiYobis9dSpoLGkrPWMqaCl9cmV0dXJuIHU9cy1uLGM9bC1pLHUqdStjKmN9ZS5leHBvcnRzPW59LHt9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGEsbyl7Zm9yKHZhciBzPXtmZWF0dXJlczpbXSxudW1Qb2ludHM6MCxudW1TaW1wbGlmaWVkOjAsbnVtRmVhdHVyZXM6MCxzb3VyY2U6bnVsbCx4OnIseTpuLHoyOmUsdHJhbnNmb3JtZWQ6ITEsbWluOlsyLDFdLG1heDpbLTEsMF19LGw9MDtsPHQubGVuZ3RoO2wrKyl7cy5udW1GZWF0dXJlcysrLGkocyx0W2xdLGEsbyk7dmFyIHU9dFtsXS5taW4sYz10W2xdLm1heDt1WzBdPHMubWluWzBdJiYocy5taW5bMF09dVswXSksdVsxXTxzLm1pblsxXSYmKHMubWluWzFdPXVbMV0pLGNbMF0+cy5tYXhbMF0mJihzLm1heFswXT1jWzBdKSxjWzFdPnMubWF4WzFdJiYocy5tYXhbMV09Y1sxXSl9cmV0dXJuIHN9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaSxvLHMsbCx1PWUuZ2VvbWV0cnksYz1lLnR5cGUsaD1bXSxmPXIqcjtpZigxPT09Yylmb3IoaT0wO2k8dS5sZW5ndGg7aSsrKWgucHVzaCh1W2ldKSx0Lm51bVBvaW50cysrLHQubnVtU2ltcGxpZmllZCsrO2Vsc2UgZm9yKGk9MDtpPHUubGVuZ3RoO2krKylpZihzPXVbaV0sbnx8ISgyPT09YyYmcy5kaXN0PHJ8fDM9PT1jJiZzLmFyZWE8Zikpe3ZhciBkPVtdO2ZvcihvPTA7bzxzLmxlbmd0aDtvKyspbD1zW29dLChufHxsWzJdPmYpJiYoZC5wdXNoKGwpLHQubnVtU2ltcGxpZmllZCsrKSx0Lm51bVBvaW50cysrOzM9PT1jJiZhKGQscy5vdXRlciksaC5wdXNoKGQpfWVsc2UgdC5udW1Qb2ludHMrPXMubGVuZ3RoO2lmKGgubGVuZ3RoKXt2YXIgcD17Z2VvbWV0cnk6aCx0eXBlOmMsdGFnczplLnRhZ3N8fG51bGx9O251bGwhPT1lLmlkJiYocC5pZD1lLmlkKSx0LmZlYXR1cmVzLnB1c2gocCl9fWZ1bmN0aW9uIGEodCxlKXtvKHQpPDA9PT1lJiZ0LnJldmVyc2UoKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSxyLG49MCxpPTAsYT10Lmxlbmd0aCxvPWEtMTtpPGE7bz1pKyspZT10W2ldLHI9dFtvXSxuKz0oclswXS1lWzBdKSooZVsxXStyWzFdKTtyZXR1cm4gbn1lLmV4cG9ydHM9bn0se31dLDE0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYodC50cmFuc2Zvcm1lZClyZXR1cm4gdDt2YXIgcixuLGEsbz10LnoyLHM9dC54LGw9dC55O2ZvcihyPTA7cjx0LmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciB1PXQuZmVhdHVyZXNbcl0sYz11Lmdlb21ldHJ5O2lmKDE9PT11LnR5cGUpZm9yKG49MDtuPGMubGVuZ3RoO24rKyljW25dPWkoY1tuXSxlLG8scyxsKTtlbHNlIGZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBoPWNbbl07Zm9yKGE9MDthPGgubGVuZ3RoO2ErKyloW2FdPWkoaFthXSxlLG8scyxsKX19cmV0dXJuIHQudHJhbnNmb3JtZWQ9ITAsdH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7cmV0dXJuW01hdGgucm91bmQoZSoodFswXSpyLW4pKSxNYXRoLnJvdW5kKGUqKHRbMV0qci1pKSldfXIudGlsZT1uLHIucG9pbnQ9aX0se31dLDE0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj10LGE9byh0LDEsLTEtZSxlLDAsciwtMSwyKSxzPW8odCwxLDEtZSwyK2UsMCxyLC0xLDIpO3JldHVybihhfHxzKSYmKG49byh0LDEsLWUsMStlLDAsciwtMSwyKXx8W10sYSYmKG49aShhLDEpLmNvbmNhdChuKSkscyYmKG49bi5jb25jYXQoaShzLC0xKSkpKSxufWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaSxvPXRbbl0sbD1vLnR5cGU7aWYoMT09PWwpaT1hKG8uZ2VvbWV0cnksZSk7ZWxzZXtpPVtdO2Zvcih2YXIgdT0wO3U8by5nZW9tZXRyeS5sZW5ndGg7dSsrKWkucHVzaChhKG8uZ2VvbWV0cnlbdV0sZSkpfXIucHVzaChzKG8udGFncyxsLGksby5pZCkpfXJldHVybiByfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1bXTtyLmFyZWE9dC5hcmVhLHIuZGlzdD10LmRpc3Q7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKFt0W25dWzBdK2UsdFtuXVsxXSx0W25dWzJdXSk7cmV0dXJuIHJ9dmFyIG89dCgiLi9jbGlwIikscz10KCIuL2ZlYXR1cmUiKTtlLmV4cG9ydHM9bn0seyIuL2NsaXAiOjEzNywiLi9mZWF0dXJlIjoxMzl9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm11c3Qgc3BlY2lmeSB0eXBlIHN0cmluZyIpO2lmKGU9ZXx8e30sInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCYmIWUuY2FudmFzKXJldHVybiBudWxsO3ZhciByPWUuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsibnVtYmVyIj09dHlwZW9mIGUud2lkdGgmJihyLndpZHRoPWUud2lkdGgpLCJudW1iZXIiPT10eXBlb2YgZS5oZWlnaHQmJihyLmhlaWdodD1lLmhlaWdodCk7dmFyIG4saT1lO3RyeXt2YXIgYT1bdF07MD09PXQuaW5kZXhPZigid2ViZ2wiKSYmYS5wdXNoKCJleHBlcmltZW50YWwtIit0KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZihuPXIuZ2V0Q29udGV4dChhW29dLGkpKXJldHVybiBufWNhdGNoKHQpe249bnVsbH1yZXR1cm4gbnx8bnVsbH1lLmV4cG9ydHM9bn0se31dLDE0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gaSh0KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMuYXV0b1RpY2tzPSEwLHRoaXMudGlja1NwYWNpbmc9WzEsMSwxXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzEwLDEwLDEwXSx0aGlzLmxhc3RDdWJlUHJvcHM9e2N1YmVFZGdlczpbMCwwLDBdLGF4aXM6WzAsMCwwXX0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9InNhbnMtc2VyaWYiLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbEFuZ2xlPVswLDAsMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTAsMTAsMTBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzAsMCwwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMSwhMSwhMV0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9maXJzdEluaXQ9ITAsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fYmFja2dyb3VuZD1jKHQpfWZ1bmN0aW9uIGEoKXt0aGlzLnByaW1hbE9mZnNldD1bMCwwLDBdLHRoaXMucHJpbWFsTWlub3I9WzAsMCwwXSx0aGlzLm1pcnJvck9mZnNldD1bMCwwLDBdLHRoaXMubWlycm9yTWlub3I9WzAsMCwwXX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQucHJpbWFsT2Zmc2V0LG89dC5wcmltYWxNaW5vcixzPXQubWlycm9yT2Zmc2V0LGw9dC5taXJyb3JNaW5vcix1PW5bZV0sYz0wO2M8MzsrK2MpaWYoZSE9PWMpe3ZhciBoPWEsZj1zLGQ9byxwPWw7dSYxPDxjJiYoaD1zLGY9YSxkPWwscD1vKSxoW2NdPXJbMF1bY10sZltjXT1yWzFdW2NdLGlbY10+MD8oZFtjXT0tMSxwW2NdPTApOihkW2NdPTAscFtjXT0xKX19ZnVuY3Rpb24gcyh0LGUpe3ZhciByPW5ldyBpKHQpO3JldHVybiByLnVwZGF0ZShlKSxyfWUuZXhwb3J0cz1zO3ZhciBsPXQoIi4vbGliL3RleHQuanMiKSx1PXQoIi4vbGliL2xpbmVzLmpzIiksYz10KCIuL2xpYi9iYWNrZ3JvdW5kLmpzIiksaD10KCIuL2xpYi9jdWJlLmpzIiksZj10KCIuL2xpYi90aWNrcy5qcyIpLGQ9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pLHA9aS5wcm90b3R5cGU7cC51cGRhdGU9ZnVuY3Rpb24odCl7CmZ1bmN0aW9uIGUoZSxyLG4pe2lmKG4gaW4gdCl7dmFyIGksYT10W25dLG89dGhpc1tuXTsoZT9BcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGFbMF0pOkFycmF5LmlzQXJyYXkoYSkpP3RoaXNbbl09aT1bcihhWzBdKSxyKGFbMV0pLHIoYVsyXSldOnRoaXNbbl09aT1bcihhKSxyKGEpLHIoYSldO2Zvcih2YXIgcz0wO3M8MzsrK3MpaWYoaVtzXSE9PW9bc10pcmV0dXJuITB9cmV0dXJuITF9dD10fHx7fTt2YXIgcixuPWUuYmluZCh0aGlzLCExLE51bWJlciksaT1lLmJpbmQodGhpcywhMSxCb29sZWFuKSxhPWUuYmluZCh0aGlzLCExLFN0cmluZyksbz1lLmJpbmQodGhpcywhMCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigzPT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLDFdO2lmKDQ9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sK3RbM11dfXJldHVyblswLDAsMCwxXX0pLHM9ITEsYz0hMTtpZigiYm91bmRzImluIHQpZm9yKHZhciBoPXQuYm91bmRzLGQ9MDtkPDI7KytkKWZvcih2YXIgcD0wO3A8MzsrK3ApaFtkXVtwXSE9PXRoaXMuYm91bmRzW2RdW3BdJiYoYz0hMCksdGhpcy5ib3VuZHNbZF1bcF09aFtkXVtwXTtpZigidGlja3MiaW4gdCl7cj10LnRpY2tzLHM9ITAsdGhpcy5hdXRvVGlja3M9ITE7Zm9yKHZhciBkPTA7ZDwzOysrZCl0aGlzLnRpY2tTcGFjaW5nW2RdPTB9ZWxzZSBuKCJ0aWNrU3BhY2luZyIpJiYodGhpcy5hdXRvVGlja3M9ITAsYz0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoInRpY2tzImluIHR8fCJ0aWNrU3BhY2luZyJpbiB0fHwodGhpcy5hdXRvVGlja3M9ITApLGM9ITAscz0hMCx0aGlzLl9maXJzdEluaXQ9ITEpLGMmJnRoaXMuYXV0b1RpY2tzJiYocj1mLmNyZWF0ZSh0aGlzLmJvdW5kcyx0aGlzLnRpY2tTcGFjaW5nKSxzPSEwKSxzKXtmb3IodmFyIGQ9MDtkPDM7KytkKXJbZF0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSk7Zi5lcXVhbChyLHRoaXMudGlja3MpP3M9ITE6dGhpcy50aWNrcz1yfWkoInRpY2tFbmFibGUiKSxhKCJ0aWNrRm9udCIpJiYocz0hMCksbigidGlja1NpemUiKSxuKCJ0aWNrQW5nbGUiKSxuKCJ0aWNrUGFkIiksbygidGlja0NvbG9yIik7dmFyIG09YSgibGFiZWxzIik7YSgibGFiZWxGb250IikmJihtPSEwKSxpKCJsYWJlbEVuYWJsZSIpLG4oImxhYmVsU2l6ZSIpLG4oImxhYmVsUGFkIiksbygibGFiZWxDb2xvciIpLGkoImxpbmVFbmFibGUiKSxpKCJsaW5lTWlycm9yIiksbigibGluZVdpZHRoIiksbygibGluZUNvbG9yIiksaSgibGluZVRpY2tFbmFibGUiKSxpKCJsaW5lVGlja01pcnJvciIpLG4oImxpbmVUaWNrTGVuZ3RoIiksbigibGluZVRpY2tXaWR0aCIpLG8oImxpbmVUaWNrQ29sb3IiKSxpKCJncmlkRW5hYmxlIiksbigiZ3JpZFdpZHRoIiksbygiZ3JpZENvbG9yIiksaSgiemVyb0VuYWJsZSIpLG8oInplcm9MaW5lQ29sb3IiKSxuKCJ6ZXJvTGluZVdpZHRoIiksaSgiYmFja2dyb3VuZEVuYWJsZSIpLG8oImJhY2tncm91bmRDb2xvciIpLHRoaXMuX3RleHQ/dGhpcy5fdGV4dCYmKG18fHMpJiZ0aGlzLl90ZXh0LnVwZGF0ZSh0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpOnRoaXMuX3RleHQ9bCh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCksdGhpcy5fbGluZXMmJnMmJih0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCksdGhpcy5fbGluZXN8fCh0aGlzLl9saW5lcz11KHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy50aWNrcykpfTt2YXIgbT1bbmV3IGEsbmV3IGEsbmV3IGFdLHY9WzAsMCwwXSxnPXttb2RlbDpkLHZpZXc6ZCxwcm9qZWN0aW9uOmR9O3AuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0scC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHAuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe307dmFyIHk9WzAsMCwwXSxiPVswLDAsMF0seD1bMCwwLDBdO3AuZHJhdz1mdW5jdGlvbih0KXt0PXR8fGc7Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxkLGk9dC52aWV3fHxkLGE9dC5wcm9qZWN0aW9ufHxkLHM9dGhpcy5ib3VuZHMsbD1oKHIsaSxhLHMpLHU9bC5jdWJlRWRnZXMsYz1sLmF4aXMsZj1pWzEyXSxwPWlbMTNdLF89aVsxNF0sdz1pWzE1XSxNPXRoaXMucGl4ZWxSYXRpbyooYVszXSpmK2FbN10qcCthWzExXSpfK2FbMTVdKncpL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxrPTA7azwzOysrayl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW2tdPXVba10sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNba109Y1trXTtmb3IodmFyIEE9bSxrPTA7azwzOysraylvKG1ba10sayx0aGlzLmJvdW5kcyx1LGMpO2Zvcih2YXIgZT10aGlzLmdsLFQ9dixrPTA7azwzOysrayl0aGlzLmJhY2tncm91bmRFbmFibGVba10/VFtrXT1jW2tdOlRba109MDt0aGlzLl9iYWNrZ3JvdW5kLmRyYXcocixpLGEscyxULHRoaXMuYmFja2dyb3VuZENvbG9yKSx0aGlzLl9saW5lcy5iaW5kKHIsaSxhLHRoaXMpO2Zvcih2YXIgaz0wO2s8MzsrK2spe3ZhciBTPVswLDAsMF07Y1trXT4wP1Nba109c1sxXVtrXTpTW2tdPXNbMF1ba107Zm9yKHZhciBFPTA7RTwyOysrRSl7dmFyIEw9KGsrMStFKSUzLEM9KGsrMSsoMV5FKSklMzt0aGlzLmdyaWRFbmFibGVbTF0mJnRoaXMuX2xpbmVzLmRyYXdHcmlkKEwsQyx0aGlzLmJvdW5kcyxTLHRoaXMuZ3JpZENvbG9yW0xdLHRoaXMuZ3JpZFdpZHRoW0xdKnRoaXMucGl4ZWxSYXRpbyl9Zm9yKHZhciBFPTA7RTwyOysrRSl7dmFyIEw9KGsrMStFKSUzLEM9KGsrMSsoMV5FKSklMzt0aGlzLnplcm9FbmFibGVbQ10mJnNbMF1bQ108PTAmJnNbMV1bQ10+PTAmJnRoaXMuX2xpbmVzLmRyYXdaZXJvKEwsQyx0aGlzLmJvdW5kcyxTLHRoaXMuemVyb0xpbmVDb2xvcltDXSx0aGlzLnplcm9MaW5lV2lkdGhbQ10qdGhpcy5waXhlbFJhdGlvKX19Zm9yKHZhciBrPTA7azwzOysrayl7dGhpcy5saW5lRW5hYmxlW2tdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoayx0aGlzLmJvdW5kcyxBW2tdLnByaW1hbE9mZnNldCx0aGlzLmxpbmVDb2xvcltrXSx0aGlzLmxpbmVXaWR0aFtrXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZU1pcnJvcltrXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKGssdGhpcy5ib3VuZHMsQVtrXS5taXJyb3JPZmZzZXQsdGhpcy5saW5lQ29sb3Jba10sdGhpcy5saW5lV2lkdGhba10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIHo9bih5LEFba10ucHJpbWFsTWlub3IpLEk9bihiLEFba10ubWlycm9yTWlub3IpLEQ9dGhpcy5saW5lVGlja0xlbmd0aCxFPTA7RTwzOysrRSl7dmFyIFA9TS9yWzUqRV07eltFXSo9RFtFXSpQLElbRV0qPURbRV0qUH10aGlzLmxpbmVUaWNrRW5hYmxlW2tdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKGssQVtrXS5wcmltYWxPZmZzZXQseix0aGlzLmxpbmVUaWNrQ29sb3Jba10sdGhpcy5saW5lVGlja1dpZHRoW2tdKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lVGlja01pcnJvcltrXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhrLEFba10ubWlycm9yT2Zmc2V0LEksdGhpcy5saW5lVGlja0NvbG9yW2tdLHRoaXMubGluZVRpY2tXaWR0aFtrXSp0aGlzLnBpeGVsUmF0aW8pfXRoaXMuX3RleHQuYmluZChyLGksYSx0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgaz0wO2s8MzsrK2spe2Zvcih2YXIgTz1BW2tdLnByaW1hbE1pbm9yLFI9bih4LEFba10ucHJpbWFsT2Zmc2V0KSxFPTA7RTwzOysrRSl0aGlzLmxpbmVUaWNrRW5hYmxlW2tdJiYoUltFXSs9TSpPW0VdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbRV0sMCkvcls1KkVdKTtpZih0aGlzLnRpY2tFbmFibGVba10pe2Zvcih2YXIgRT0wO0U8MzsrK0UpUltFXSs9TSpPW0VdKnRoaXMudGlja1BhZFtFXS9yWzUqRV07dGhpcy5fdGV4dC5kcmF3VGlja3Moayx0aGlzLnRpY2tTaXplW2tdLHRoaXMudGlja0FuZ2xlW2tdLFIsdGhpcy50aWNrQ29sb3Jba10pfWlmKHRoaXMubGFiZWxFbmFibGVba10pe2Zvcih2YXIgRT0wO0U8MzsrK0UpUltFXSs9TSpPW0VdKnRoaXMubGFiZWxQYWRbRV0vcls1KkVdO1Jba10rPS41KihzWzBdW2tdK3NbMV1ba10pLHRoaXMuX3RleHQuZHJhd0xhYmVsKGssdGhpcy5sYWJlbFNpemVba10sdGhpcy5sYWJlbEFuZ2xlW2tdLFIsdGhpcy5sYWJlbENvbG9yW2tdKX19fSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0LmRpc3Bvc2UoKSx0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fYmFja2dyb3VuZC5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fYmFja2dyb3VuZD1udWxsLHRoaXMuZ2w9bnVsbH19LHsiLi9saWIvYmFja2dyb3VuZC5qcyI6MTQ3LCIuL2xpYi9jdWJlLmpzIjoxNDgsIi4vbGliL2xpbmVzLmpzIjoxNDksIi4vbGliL3RleHQuanMiOjE1MSwiLi9saWIvdGlja3MuanMiOjE1Mn1dLDE0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1bXSxyPVtdLGk9MCxsPTA7bDwzOysrbClmb3IodmFyIHU9KGwrMSklMyxjPShsKzIpJTMsaD1bMCwwLDBdLGY9WzAsMCwwXSxkPS0xO2Q8PTE7ZCs9Mil7ci5wdXNoKGksaSsyLGkrMSxpKzEsaSsyLGkrMyksaFtsXT1kLGZbbF09ZDtmb3IodmFyIHA9LTE7cDw9MTtwKz0yKXtoW3VdPXA7Zm9yKHZhciBtPS0xO208PTE7bSs9MiloW2NdPW0sZS5wdXNoKGhbMF0saFsxXSxoWzJdLGZbMF0sZlsxXSxmWzJdKSxpKz0xfXZhciB2PXU7dT1jLGM9dn12YXIgZz1hKHQsbmV3IEZsb2F0MzJBcnJheShlKSkseT1hKHQsbmV3IFVpbnQxNkFycmF5KHIpLHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLGI9byh0LFt7YnVmZmVyOmcsdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6MjR9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6MjR9XSx5KSx4PXModCk7cmV0dXJuIHguYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHguYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MSxuZXcgbih0LGcsYix4KX1lLmV4cG9ydHM9aTt2YXIgYT10KCJnbC1idWZmZXIiKSxvPXQoImdsLXZhbyIpLHM9dCgiLi9zaGFkZXJzIikuYmcsbD1uLnByb3RvdHlwZTtsLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0hMSxzPTA7czwzOysrcylvPW98fGlbc107aWYobyl7dmFyIGw9dGhpcy5nbDtsLmVuYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLGwucG9seWdvbk9mZnNldCgxLDIpLHRoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcz17bW9kZWw6dCx2aWV3OmUscHJvamVjdGlvbjpyLGJvdW5kczpuLGVuYWJsZTppLGNvbG9yczphfSx0aGlzLnZhby5iaW5kKCksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUywzNiksbC5kaXNhYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCl9fSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxNTAsImdsLWJ1ZmZlciI6MTU0LCJnbC12YW8iOjI2OX1dLDE0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49MDtuPDQ7KytuKXt0W25dPXJbMTIrbl07Zm9yKHZhciBpPTA7aTwzOysraSl0W25dKz1lW2ldKnJbNCppK25dfX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0wO2U8bS5sZW5ndGg7KytlKWlmKHQ9bC5wb3NpdGl2ZSh0LG1bZV0pLHQubGVuZ3RoPDMpcmV0dXJuIDA7Zm9yKHZhciByPXRbMF0sbj1yWzBdL3JbM10saT1yWzFdL3JbM10sYT0wLGU9MTtlKzE8dC5sZW5ndGg7KytlKXt2YXIgbz10W2VdLHM9dFtlKzFdLHU9b1swXS9vWzNdLGM9b1sxXS9vWzNdLGg9c1swXS9zWzNdLGY9c1sxXS9zWzNdLGQ9dS1uLHA9Yy1pLHY9aC1uLGc9Zi1pO2ErPU1hdGguYWJzKGQqZy1wKnYpfXJldHVybiBhfWZ1bmN0aW9uIGEodCxlLHIsYSl7cyhjLGUsdCkscyhjLHIsYyk7Zm9yKHZhciBsPTAsbT0wO208MjsrK20pe2RbMl09YVttXVsyXTtmb3IodmFyIGI9MDtiPDI7KytiKXtkWzFdPWFbYl1bMV07Zm9yKHZhciB4PTA7eDwyOysreClkWzBdPWFbeF1bMF0sbihoW2xdLGQsYyksbCs9MX19Zm9yKHZhciBfPS0xLG09MDttPDg7KyttKXtmb3IodmFyIHc9aFttXVszXSxNPTA7TTwzOysrTSlmW21dW01dPWhbbV1bTV0vdzt3PDAmJihfPDA/Xz1tOmZbbV1bMl08ZltfXVsyXSYmKF89bSkpfWlmKF88MCl7Xz0wO2Zvcih2YXIgaz0wO2s8MzsrK2spe2Zvcih2YXIgQT0oaysyKSUzLFQ9KGsrMSklMyxTPS0xLEU9LTEsTD0wO0w8MjsrK0wpe3ZhciBDPUw8PGssej1DKyhMPDxBKSsoMS1MPDxUKSxJPUMrKDEtTDw8QSkrKEw8PFQpO3UoZltDXSxmW3pdLGZbSV0scCk8MHx8KEw/Uz0xOkU9MSl9aWYoUzwwfHxFPDApRT5TJiYoX3w9MTw8ayk7ZWxzZXtmb3IodmFyIEw9MDtMPDI7KytMKXt2YXIgQz1MPDxrLHo9QysoTDw8QSkrKDEtTDw8VCksST1DKygxLUw8PEEpKyhMPDxUKSxEPWkoW2hbQ10saFt6XSxoW0ldLGhbQysoMTw8QSkrKDE8PFQpXV0pO0w/Uz1EOkU9RH1FPlMmJihffD0xPDxrKX19fWZvcih2YXIgUD03Xl8sTz0tMSxtPTA7bTw4OysrbSltIT09XyYmbSE9PVAmJihPPDA/Tz1tOmZbT11bMV0+ZlttXVsxXSYmKE89bSkpO2Zvcih2YXIgUj0tMSxtPTA7bTwzOysrbSl7dmFyIEY9T14xPDxtO2lmKEYhPT1fJiZGIT09UCl7UjwwJiYoUj1GKTt2YXIgVD1mW0ZdO1RbMF08ZltSXVswXSYmKFI9Ril9fWZvcih2YXIgaj0tMSxtPTA7bTwzOysrbSl7dmFyIEY9T14xPDxtO2lmKEYhPT1fJiZGIT09UCYmRiE9PVIpe2o8MCYmKGo9Rik7dmFyIFQ9ZltGXTtUWzBdPmZbal1bMF0mJihqPUYpfX12YXIgTj12O05bMF09TlsxXT1OWzJdPTAsTltvLmxvZzIoUl5PKV09TyZSLE5bby5sb2cyKE9eaildPU8majt2YXIgQj03Xmo7Qj09PV98fEI9PT1QPyhCPTdeUixOW28ubG9nMihqXkIpXT1CJmopOk5bby5sb2cyKFJeQildPUImUjtmb3IodmFyIFU9ZyxWPV8saz0wO2s8MzsrK2spVVtrXT1WJjE8PGs/LTE6MTtyZXR1cm4geX1lLmV4cG9ydHM9YTt2YXIgbz10KCJiaXQtdHdpZGRsZSIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9KHQoImdsLW1hdDQvaW52ZXJ0IiksdCgic3BsaXQtcG9seWdvbiIpKSx1PXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGM9bmV3IEFycmF5KDE2KSxoPShuZXcgQXJyYXkoMTYpLG5ldyBBcnJheSg4KSksZj1uZXcgQXJyYXkoOCksZD1uZXcgQXJyYXkoMykscD1bMCwwLDBdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ODsrK3QpaFt0XT1bMSwxLDEsMV0sZlt0XT1bMSwxLDFdfSgpO3ZhciBtPVtbMCwwLDEsMCwwXSxbMCwwLC0xLDEsMF0sWzAsLTEsMCwxLDBdLFswLDEsMCwxLDBdLFstMSwwLDAsMSwwXSxbMSwwLDAsMSwwXV0sdj1bMSwxLDFdLGc9WzAsMCwwXSx5PXtjdWJlRWRnZXM6dixheGlzOmd9fSx7ImJpdC10d2lkZGxlIjo2NSwiZ2wtbWF0NC9pbnZlcnQiOjE3OSwiZ2wtbWF0NC9tdWx0aXBseSI6MTgxLCJyb2J1c3Qtb3JpZW50YXRpb24iOjUwNiwic3BsaXQtcG9seWdvbiI6NTI0fV0sMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPVtdLGk9WzAsMCwwXSxvPVswLDAsMF0sYz1bMCwwLDBdLGg9WzAsMCwwXTtuLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgZj0wO2Y8MzsrK2Ype2Zvcih2YXIgZD1uLmxlbmd0aC8zfDAscD0wO3A8cltmXS5sZW5ndGg7KytwKXt2YXIgbT0rcltmXVtwXS54O24ucHVzaChtLDAsMSxtLDEsMSxtLDAsLTEsbSwwLC0xLG0sMSwxLG0sMSwtMSl9dmFyIHY9bi5sZW5ndGgvM3wwO2lbZl09ZCxvW2ZdPXYtZDtmb3IodmFyIGQ9bi5sZW5ndGgvM3wwLGc9MDtnPHJbZl0ubGVuZ3RoOysrZyl7dmFyIG09K3JbZl1bZ10ueDtuLnB1c2gobSwwLDEsbSwxLDEsbSwwLC0xLG0sMCwtMSxtLDEsMSxtLDEsLTEpfXZhciB2PW4ubGVuZ3RoLzN8MDtjW2ZdPWQsaFtmXT12LWR9dmFyIHk9cyh0LG5ldyBGbG9hdDMyQXJyYXkobikpLGI9bCh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSx4PXUodCk7cmV0dXJuIHguYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBhKHQseSxiLHgsbyxpLGgsYyl9ZS5leHBvcnRzPW87dmFyIHM9dCgiZ2wtYnVmZmVyIiksbD10KCJnbC12YW8iKSx1PXQoIi4vc2hhZGVycyIpLmxpbmUsYz1bMCwwLDBdLGg9WzAsMCwwXSxmPVswLDAsMF0sZD1bMCwwLDBdLHA9WzEsMV0sbT1hLnByb3RvdHlwZTttLmJpbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tb2RlbD10LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnZpZXc9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uPXIscFswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxwWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5TaGFwZT1wLHRoaXMudmFvLmJpbmQoKX0sbS5kcmF3QXhpc0xpbmU9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1uKGgpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1oLHNbdF09ZVsxXVt0XS1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1zO3ZhciBsPWkoZCxyKTtsW3RdKz1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1sLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWE7dmFyIHU9bihmKTt1Wyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz11LHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNik7dmFyIHU9bihmKTt1Wyh0KzEpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz11LHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LG0uZHJhd0F4aXNUaWNrcz1mdW5jdGlvbih0LGUscixpLGEpe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgbz1uKGMpO29bdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hO3ZhciBzPW4oZik7c1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fSxtLmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtpZih0aGlzLmdyaWRDb3VudFt0XSl7dmFyIGw9bihoKTtsW2VdPXJbMV1bZV0tclswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9bDt2YXIgdT1pKGQsYSk7dVtlXSs9clswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dTt2YXIgcD1uKGMpO3BbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9cDt2YXIgbT1uKGYpO21bdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW0sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPXMsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9byx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMuZ3JpZENvdW50W3RdLHRoaXMuZ3JpZE9mZnNldFt0XSl9fSxtLmRyYXdaZXJvPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD1uKGgpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1sLGxbdF09clsxXVt0XS1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1sO3ZhciB1PWkoZCxhKTt1W3RdKz1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD11O3ZhciBjPW4oZik7Y1tlXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Yyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9cyx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LG0uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnZlcnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxNTAsImdsLWJ1ZmZlciI6MTU0LCJnbC12YW8iOjI2OX1dLDE1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKTtyLmxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCwiI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBtYWpvciA9IHBvc2l0aW9uLnggKiBtYWpvckF4aXM7XG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gbWFqb3IgKyBtaW5vciArIG9mZnNldDtcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XG5cbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocFBvc2l0aW9uICsgdmVjMygwLjUgKiBzY3JlZW4gKiBsaW5lV2lkdGgsIDApLCAxLjApO1xufVxuIiwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3IudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gbih0LCIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXM7XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBhbmdsZSwgcGl4ZWxTY2FsZTtcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuXG52b2lkIG1haW4oKSB7ICBcbiAgLy9Db21wdXRlIHBsYW5lIG9mZnNldFxuICB2ZWMyIHBsYW5lQ29vcmQgPSBwb3NpdGlvbi54eSAqIHBpeGVsU2NhbGU7XG4gIG1hdDIgcGxhbmVYZm9ybSA9IHNjYWxlICogbWF0Mihjb3MoYW5nbGUpLCBzaW4oYW5nbGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc2luKGFuZ2xlKSwgY29zKGFuZ2xlKSk7XG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcblxuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XG4gIGZsb2F0IGF4aXNEaXN0YW5jZSA9IHBvc2l0aW9uLno7XG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KGRhdGFQb3NpdGlvbiwgMSk7XG4gIFxuICAvL0NvbXB1dGUgY2xpcCBwb3NpdGlvblxuICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3UG9zaXRpb247XG4gIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcblxuICAvL0FwcGx5IHRleHQgb2Zmc2V0IGluIGNsaXAgY29vcmRpbmF0ZXNcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzQodmlld09mZnNldCwgMCwgMCk7XG5cbiAgLy9Eb25lXG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xufSIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGVuYWJsZTtcbnVuaWZvcm0gdmVjMyBib3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoZG90KG5vcm1hbCwgZW5hYmxlKSA+IDAuMCkge1xuICAgIHZlYzMgblBvc2l0aW9uID0gbWl4KGJvdW5kc1swXSwgYm91bmRzWzFdLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH1cbiAgY29sb3JDaGFubmVsID0gYWJzKG5vcm1hbCk7XG59IiwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yQ2hhbm5lbC54ICogY29sb3JzWzBdICsgXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC55ICogY29sb3JzWzFdICtcbiAgICAgICAgICAgICAgICAgY29sb3JDaGFubmVsLnogKiBjb2xvcnNbMl07XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjoyNTN9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXI9cix0aGlzLnZhbz1uLHRoaXMudGlja09mZnNldD10aGlzLnRpY2tDb3VudD10aGlzLmxhYmVsT2Zmc2V0PXRoaXMubGFiZWxDb3VudD1udWxsfWZ1bmN0aW9uIGkodCxlKXt0cnl7cmV0dXJuIGwodCxlKX1jYXRjaCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJlcnJvciB2ZWN0b3JpemluZyB0ZXh0OiIsdCkse2NlbGxzOltdLHBvc2l0aW9uczpbXX19fWZ1bmN0aW9uIGEodCxlLHIsaSxhLGwpe3ZhciBjPW8odCksaD1zKHQsW3tidWZmZXI6YyxzaXplOjN9XSksZj11KHQpO2YuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wO3ZhciBkPW5ldyBuKHQsZixjLGgpO3JldHVybiBkLnVwZGF0ZShlLHIsaSxhLGwpLGR9ZS5leHBvcnRzPWE7dmFyIG89dCgiZ2wtYnVmZmVyIikscz10KCJnbC12YW8iKSxsPXQoInZlY3Rvcml6ZS10ZXh0IiksdT10KCIuL3NoYWRlcnMiKS50ZXh0LGM9d2luZG93fHxyLmdsb2JhbHx8e30saD1jLl9fVEVYVF9DQUNIRXx8e307Yy5fX1RFWFRfQ0FDSEU9e307dmFyIGY9bi5wcm90b3R5cGUsZD1bMCwwXTtmLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy52YW8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKTt2YXIgaT10aGlzLnNoYWRlci51bmlmb3JtcztpLm1vZGVsPXQsaS52aWV3PWUsaS5wcm9qZWN0aW9uPXIsaS5waXhlbFNjYWxlPW4sZFswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxkWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5yZXNvbHV0aW9uPWR9LGYudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4sYSl7ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgYT1oW3JdO2F8fChhPWhbcl09e30pO3ZhciBvPWFbZV07b3x8KG89YVtlXT1pKGUse3RyaWFuZ2xlczohMCxmb250OnIsdGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIn0pKTtmb3IodmFyIGw9KG58fDEyKS8xMix1PW8ucG9zaXRpb25zLGM9by5jZWxscyxmPTAsZD1jLmxlbmd0aDtmPGQ7KytmKWZvcih2YXIgcD1jW2ZdLG09MjttPj0wOy0tbSl7dmFyIHY9dVtwW21dXTtzLnB1c2gobCp2WzBdLC1sKnZbMV0sdCl9fWZvcih2YXIgcz0odGhpcy5nbCxbXSksbD1bMCwwLDBdLHU9WzAsMCwwXSxjPVswLDAsMF0sZj1bMCwwLDBdLGQ9MDtkPDM7KytkKXtjW2RdPXMubGVuZ3RoLzN8MCxvKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0sciksZltkXT0ocy5sZW5ndGgvM3wwKS1jW2RdLGxbZF09cy5sZW5ndGgvM3wwO2Zvcih2YXIgcD0wO3A8bltkXS5sZW5ndGg7KytwKW5bZF1bcF0udGV4dCYmbyhuW2RdW3BdLngsbltkXVtwXS50ZXh0LG5bZF1bcF0uZm9udHx8YSxuW2RdW3BdLmZvbnRTaXplfHwxMik7dVtkXT0ocy5sZW5ndGgvM3wwKS1sW2RdfXRoaXMuYnVmZmVyLnVwZGF0ZShzKSx0aGlzLnRpY2tPZmZzZXQ9bCx0aGlzLnRpY2tDb3VudD11LHRoaXMubGFiZWxPZmZzZXQ9Yyx0aGlzLmxhYmVsQ291bnQ9Zn07dmFyIHA9WzAsMCwwXTtmLmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgYT1wO2FbMF09YVsxXT1hWzJdPTAsYVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fTt2YXIgbT1bMCwwLDBdO2YuZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5sYWJlbENvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1tLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5sYWJlbENvdW50W3RdLHRoaXMubGFiZWxPZmZzZXRbdF0pKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vc2hhZGVycyI6MTUwLF9wcm9jZXNzOjQ4NSwiZ2wtYnVmZmVyIjoxNTQsImdsLXZhbyI6MjY5LCJ2ZWN0b3JpemUtdGV4dCI6NTUyfV0sMTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10KyIiLG49ci5pbmRleE9mKCIuIiksaT0wO24+PTAmJihpPXIubGVuZ3RoLW4tMSk7dmFyIGE9TWF0aC5wb3coMTAsaSksbz1NYXRoLnJvdW5kKHQqZSphKSxzPW8rIiI7aWYocy5pbmRleE9mKCJlIik+PTApcmV0dXJuIHM7dmFyIGw9by9hLHU9byVhO288MD8obD0wfC1NYXRoLmNlaWwobCksdT0wfC11KToobD0wfE1hdGguZmxvb3IobCksdXw9MCk7dmFyIGM9IiIrbDtpZihvPDAmJihjPSItIitjKSxpKXtmb3IodmFyIGg9IiIrdTtoLmxlbmd0aDxpOyloPSIwIitoO3JldHVybiBjKyIuIitofXJldHVybiBjfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9W10saT0wO2k8MzsrK2kpe2Zvcih2YXIgYT1bXSxvPSh0WzBdW2ldLHRbMV1baV0sMCk7byplW2ldPD10WzFdW2ldOysrbylhLnB1c2goe3g6byplW2ldLHRleHQ6bihlW2ldLG8pfSk7Zm9yKHZhciBvPS0xO28qZVtpXT49dFswXVtpXTstLW8pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO3IucHVzaChhKX1yZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoOysrbil7dmFyIGk9dFtyXVtuXSxhPWVbcl1bbl07aWYoaS54IT09YS54fHxpLnRleHQhPT1hLnRleHR8fGkuZm9udCE9PWEuZm9udHx8aS5mb250Q29sb3IhPT1hLmZvbnRDb2xvcnx8aS5mb250U2l6ZSE9PWEuZm9udFNpemV8fGkuZHghPT1hLmR4fHxpLmR5IT09YS5keSlyZXR1cm4hMX19cmV0dXJuITB9ci5jcmVhdGU9aSxyLmVxdWFsPWF9LHt9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5sbz10LHRoaXMuaGk9ZSx0aGlzLnBpeGVsc1BlckRhdGFVbml0PXJ9ZnVuY3Rpb24gaSh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1wLHM9bSxsPTA7bDwzOysrbClzW2xdPW9bbF09cltsXTtzWzNdPW9bM109MSxzW2FdKz0xLGgocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGgobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixjPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUrYypjKX1yZXR1cm4gdH1mdW5jdGlvbiBhKHQsZSxyLG4sYSl7dmFyIGg9ZS5tb2RlbHx8ZixwPWUudmlld3x8ZixtPWUucHJvamVjdGlvbnx8Zix5PXQuYm91bmRzLGE9YXx8bChoLHAsbSx5KSxiPWEuYXhpczthLmVkZ2VzO3UoZCxwLGgpLHUoZCxtLGQpO2Zvcih2YXIgeD12LF89MDtfPDM7KytfKXhbX10ubG89MS8wLHhbX10uaGk9LTEvMCx4W19dLnBpeGVsc1BlckRhdGFVbml0PTEvMDt2YXIgdz1vKGMoZCxkKSk7YyhkLGQpO2Zvcih2YXIgTT0wO008MzsrK00pe3ZhciBrPShNKzEpJTMsQT0oTSsyKSUzLFQ9Zzt0OmZvcih2YXIgXz0wO188MjsrK18pe3ZhciBTPVtdO2lmKGJbTV08MCE9ISFfKXtUW01dPXlbX11bTV07Zm9yKHZhciBFPTA7RTwyOysrRSl7VFtrXT15W0VeX11ba107Zm9yKHZhciBMPTA7TDwyOysrTClUW0FdPXlbTF5FXl9dW0FdLFMucHVzaChULnNsaWNlKCkpfWZvcih2YXIgRT0wO0U8dy5sZW5ndGg7KytFKXtpZigwPT09Uy5sZW5ndGgpY29udGludWUgdDtTPXMucG9zaXRpdmUoUyx3W0VdKX1mb3IodmFyIEU9MDtFPFMubGVuZ3RoOysrRSlmb3IodmFyIEE9U1tFXSxDPWkoZyxkLEEscixuKSxMPTA7TDwzOysrTCl4W0xdLmxvPU1hdGgubWluKHhbTF0ubG8sQVtMXSkseFtMXS5oaT1NYXRoLm1heCh4W0xdLmhpLEFbTF0pLEwhPT1NJiYoeFtMXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbih4W0xdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKENbTF0pKSl9fX1yZXR1cm4geH1lLmV4cG9ydHM9YTt2YXIgbz10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIikscz10KCJzcGxpdC1wb2x5Z29uIiksbD10KCIuL2xpYi9jdWJlLmpzIiksdT10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGg9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksZj1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksZD1uZXcgRmxvYXQzMkFycmF5KDE2KSxwPVswLDAsMCwxXSxtPVswLDAsMCwxXSx2PVtuZXcgbigxLzAsLTEvMCwxLzApLG5ldyBuKDEvMCwtMS8wLDEvMCksbmV3IG4oMS8wLC0xLzAsMS8wKV0sZz1bMCwwLDBdfSx7Ii4vbGliL2N1YmUuanMiOjE0OCwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyI6MTI4LCJnbC1tYXQ0L211bHRpcGx5IjoxODEsImdsLW1hdDQvdHJhbnNwb3NlIjoxODksImdsLXZlYzQvdHJhbnNmb3JtTWF0NCI6Mjc1LCJzcGxpdC1wb2x5Z29uIjo1MjR9XSwxNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IElmIHJlc2l6aW5nIGJ1ZmZlciwgbXVzdCBub3Qgc3BlY2lmeSBvZmZzZXQiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9bC5tYWxsb2ModC5sZW5ndGgsZSksbj10Lmxlbmd0aCxpPTA7aTxuOysraSlyW2ldPXRbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0xLG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7aWYoZVtuXSE9PXIpcmV0dXJuITE7cio9dFtuXX1yZXR1cm4hMH1mdW5jdGlvbiBzKHQsZSxyLGkpe2lmKHI9cnx8dC5BUlJBWV9CVUZGRVIsaT1pfHx0LkRZTkFNSUNfRFJBVyxyIT09dC5BUlJBWV9CVUZGRVImJnIhPT10LkVMRU1FTlRfQVJSQVlfQlVGRkVSKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHR5cGUgZm9yIHdlYmdsIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuQVJSQVlfQlVGRkVSIG9yIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSIik7aWYoaSE9PXQuRFlOQU1JQ19EUkFXJiZpIT09dC5TVEFUSUNfRFJBVyYmaSE9PXQuU1RSRUFNX0RSQVcpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdXNhZ2UgZm9yIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuRFlOQU1JQ19EUkFXLCBnbC5TVEFUSUNfRFJBVyBvciBnbC5TVFJFQU1fRFJBVyIpO3ZhciBhPXQuY3JlYXRlQnVmZmVyKCksbz1uZXcgbih0LHIsYSwwLGkpO3JldHVybiBvLnVwZGF0ZShlKSxvfXZhciBsPXQoInR5cGVkYXJyYXktcG9vbCIpLHU9dCgibmRhcnJheS1vcHMiKSxjPXQoIm5kYXJyYXkiKSxoPVsidWludDgiLCJ1aW50OF9jbGFtcGVkIiwidWludDE2IiwidWludDMyIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJmbG9hdDMyIl0sZj1uLnByb3RvdHlwZTtmLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuaGFuZGxlKX0sZi51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLG51bGwpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmhhbmRsZSl9LGYudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYoZT0tMSksdGhpcy5iaW5kKCksIm9iamVjdCI9PXR5cGVvZiB0JiZ2b2lkIDAhPT10LnNoYXBlKXt2YXIgcj10LmR0eXBlO2lmKGguaW5kZXhPZihyKTwwJiYocj0iZmxvYXQzMiIpLHRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIpe3I9Z2wuZ2V0RXh0ZW5zaW9uKCJPRVNfZWxlbWVudF9pbmRleF91aW50IikmJiJ1aW50MTYiIT09cj8idWludDMyIjoidWludDE2In1pZihyPT09dC5kdHlwZSYmbyh0LnNoYXBlLHQuc3RyaWRlKSkwPT09dC5vZmZzZXQmJnQuZGF0YS5sZW5ndGg9PT10LnNoYXBlWzBdP3RoaXMubGVuZ3RoPWkodGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEsZSk6dGhpcy5sZW5ndGg9aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YS5zdWJhcnJheSh0Lm9mZnNldCx0LnNoYXBlWzBdKSxlKTtlbHNle3ZhciBuPWwubWFsbG9jKHQuc2l6ZSxyKSxzPWMobix0LnNoYXBlKTt1LmFzc2lnbihzLHQpLHRoaXMubGVuZ3RoPWU8MD9pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsbixlKTppKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2Usbi5zdWJhcnJheSgwLHQuc2l6ZSksZSksbC5mcmVlKG4pfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBmO2Y9dGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUj9hKHQsInVpbnQxNiIpOmEodCwiZmxvYXQzMiIpLHRoaXMubGVuZ3RoPWU8MD9pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZixlKTppKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZi5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxsLmZyZWUoZil9ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpdGhpcy5sZW5ndGg9aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQsZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgZGF0YSB0eXBlIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyIik7dHw9MCx0PD0wJiYodD0xKSx0aGlzLmdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLDB8dCx0aGlzLnVzYWdlKSx0aGlzLmxlbmd0aD10fX0sZS5leHBvcnRzPXN9LHtuZGFycmF5OjQ2NSwibmRhcnJheS1vcHMiOjQ1OSwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ezA6Ik5PTkUiLDE6Ik9ORSIsMjoiTElORV9MT09QIiwzOiJMSU5FX1NUUklQIiw0OiJUUklBTkdMRVMiLDU6IlRSSUFOR0xFX1NUUklQIiw2OiJUUklBTkdMRV9GQU4iLDI1NjoiREVQVEhfQlVGRkVSX0JJVCIsNTEyOiJORVZFUiIsNTEzOiJMRVNTIiw1MTQ6IkVRVUFMIiw1MTU6IkxFUVVBTCIsNTE2OiJHUkVBVEVSIiw1MTc6Ik5PVEVRVUFMIiw1MTg6IkdFUVVBTCIsNTE5OiJBTFdBWVMiLDc2ODoiU1JDX0NPTE9SIiw3Njk6Ik9ORV9NSU5VU19TUkNfQ09MT1IiLDc3MDoiU1JDX0FMUEhBIiw3NzE6Ik9ORV9NSU5VU19TUkNfQUxQSEEiLDc3MjoiRFNUX0FMUEhBIiw3NzM6Ik9ORV9NSU5VU19EU1RfQUxQSEEiLDc3NDoiRFNUX0NPTE9SIiw3NzU6Ik9ORV9NSU5VU19EU1RfQ09MT1IiLDc3NjoiU1JDX0FMUEhBX1NBVFVSQVRFIiwxMDI0OiJTVEVOQ0lMX0JVRkZFUl9CSVQiLDEwMjg6IkZST05UIiwxMDI5OiJCQUNLIiwxMDMyOiJGUk9OVF9BTkRfQkFDSyIsMTI4MDoiSU5WQUxJRF9FTlVNIiwxMjgxOiJJTlZBTElEX1ZBTFVFIiwxMjgyOiJJTlZBTElEX09QRVJBVElPTiIsMTI4NToiT1VUX09GX01FTU9SWSIsMTI4NjoiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iLDIzMDQ6IkNXIiwyMzA1OiJDQ1ciLDI4NDk6IkxJTkVfV0lEVEgiLDI4ODQ6IkNVTExfRkFDRSIsMjg4NToiQ1VMTF9GQUNFX01PREUiLDI4ODY6IkZST05UX0ZBQ0UiLDI5Mjg6IkRFUFRIX1JBTkdFIiwyOTI5OiJERVBUSF9URVNUIiwyOTMwOiJERVBUSF9XUklURU1BU0siLDI5MzE6IkRFUFRIX0NMRUFSX1ZBTFVFIiwyOTMyOiJERVBUSF9GVU5DIiwyOTYwOiJTVEVOQ0lMX1RFU1QiLDI5NjE6IlNURU5DSUxfQ0xFQVJfVkFMVUUiLDI5NjI6IlNURU5DSUxfRlVOQyIsMjk2MzoiU1RFTkNJTF9WQUxVRV9NQVNLIiwyOTY0OiJTVEVOQ0lMX0ZBSUwiLDI5NjU6IlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwyOTY2OiJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsMjk2NzoiU1RFTkNJTF9SRUYiLDI5Njg6IlNURU5DSUxfV1JJVEVNQVNLIiwyOTc4OiJWSUVXUE9SVCIsMzAyNDoiRElUSEVSIiwzMDQyOiJCTEVORCIsMzA4ODoiU0NJU1NPUl9CT1giLDMwODk6IlNDSVNTT1JfVEVTVCIsMzEwNjoiQ09MT1JfQ0xFQVJfVkFMVUUiLDMxMDc6IkNPTE9SX1dSSVRFTUFTSyIsMzMxNzoiVU5QQUNLX0FMSUdOTUVOVCIsMzMzMzoiUEFDS19BTElHTk1FTlQiLDMzNzk6Ik1BWF9URVhUVVJFX1NJWkUiLDMzODY6Ik1BWF9WSUVXUE9SVF9ESU1TIiwzNDA4OiJTVUJQSVhFTF9CSVRTIiwzNDEwOiJSRURfQklUUyIsMzQxMToiR1JFRU5fQklUUyIsMzQxMjoiQkxVRV9CSVRTIiwzNDEzOiJBTFBIQV9CSVRTIiwzNDE0OiJERVBUSF9CSVRTIiwzNDE1OiJTVEVOQ0lMX0JJVFMiLDM1NTM6IlRFWFRVUkVfMkQiLDQzNTI6IkRPTlRfQ0FSRSIsNDM1MzoiRkFTVEVTVCIsNDM1NDoiTklDRVNUIiw1MTIwOiJCWVRFIiw1MTIxOiJVTlNJR05FRF9CWVRFIiw1MTIyOiJTSE9SVCIsNTEyMzoiVU5TSUdORURfU0hPUlQiLDUxMjQ6IklOVCIsNTEyNToiVU5TSUdORURfSU5UIiw1MTI2OiJGTE9BVCIsNTM4NjoiSU5WRVJUIiw1ODkwOiJURVhUVVJFIiw2NDAxOiJTVEVOQ0lMX0lOREVYIiw2NDAyOiJERVBUSF9DT01QT05FTlQiLDY0MDY6IkFMUEhBIiw2NDA3OiJSR0IiLDY0MDg6IlJHQkEiLDY0MDk6IkxVTUlOQU5DRSIsNjQxMDoiTFVNSU5BTkNFX0FMUEhBIiw3NjgwOiJLRUVQIiw3NjgxOiJSRVBMQUNFIiw3NjgyOiJJTkNSIiw3NjgzOiJERUNSIiw3OTM2OiJWRU5ET1IiLDc5Mzc6IlJFTkRFUkVSIiw3OTM4OiJWRVJTSU9OIiw5NzI4OiJORUFSRVNUIiw5NzI5OiJMSU5FQVIiLDk5ODQ6Ik5FQVJFU1RfTUlQTUFQX05FQVJFU1QiLDk5ODU6IkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsOTk4NjoiTkVBUkVTVF9NSVBNQVBfTElORUFSIiw5OTg3OiJMSU5FQVJfTUlQTUFQX0xJTkVBUiIsMTAyNDA6IlRFWFRVUkVfTUFHX0ZJTFRFUiIsMTAyNDE6IlRFWFRVUkVfTUlOX0ZJTFRFUiIsMTAyNDI6IlRFWFRVUkVfV1JBUF9TIiwxMDI0MzoiVEVYVFVSRV9XUkFQX1QiLDEwNDk3OiJSRVBFQVQiLDEwNzUyOiJQT0xZR09OX09GRlNFVF9VTklUUyIsMTYzODQ6IkNPTE9SX0JVRkZFUl9CSVQiLDMyNzY5OiJDT05TVEFOVF9DT0xPUiIsMzI3NzA6Ik9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiIsMzI3NzE6IkNPTlNUQU5UX0FMUEhBIiwzMjc3MjoiT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIiwzMjc3MzoiQkxFTkRfQ09MT1IiLDMyNzc0OiJGVU5DX0FERCIsMzI3Nzc6IkJMRU5EX0VRVUFUSU9OX1JHQiIsMzI3Nzg6IkZVTkNfU1VCVFJBQ1QiLDMyNzc5OiJGVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLDMyODE5OiJVTlNJR05FRF9TSE9SVF80XzRfNF80IiwzMjgyMDoiVU5TSUdORURfU0hPUlRfNV81XzVfMSIsMzI4MjM6IlBPTFlHT05fT0ZGU0VUX0ZJTEwiLDMyODI0OiJQT0xZR09OX09GRlNFVF9GQUNUT1IiLDMyODU0OiJSR0JBNCIsMzI4NTU6IlJHQjVfQTEiLDMyODczOiJURVhUVVJFX0JJTkRJTkdfMkQiLDMyOTI2OiJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLDMyOTI4OiJTQU1QTEVfQ09WRVJBR0UiLDMyOTM2OiJTQU1QTEVfQlVGRkVSUyIsMzI5Mzc6IlNBTVBMRVMiLDMyOTM4OiJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLDMyOTM5OiJTQU1QTEVfQ09WRVJBR0VfSU5WRVJUIiwzMjk2ODoiQkxFTkRfRFNUX1JHQiIsMzI5Njk6IkJMRU5EX1NSQ19SR0IiLDMyOTcwOiJCTEVORF9EU1RfQUxQSEEiLDMyOTcxOiJCTEVORF9TUkNfQUxQSEEiLDMzMDcxOiJDTEFNUF9UT19FREdFIiwzMzE3MDoiR0VORVJBVEVfTUlQTUFQX0hJTlQiLDMzMTg5OiJERVBUSF9DT01QT05FTlQxNiIsMzMzMDY6IkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsMzM2MzU6IlVOU0lHTkVEX1NIT1JUXzVfNl81IiwzMzY0ODoiTUlSUk9SRURfUkVQRUFUIiwzMzkwMToiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFIiwzMzkwMjoiQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFIiwzMzk4NDoiVEVYVFVSRTAiLDMzOTg1OiJURVhUVVJFMSIsMzM5ODY6IlRFWFRVUkUyIiwzMzk4NzoiVEVYVFVSRTMiLDMzOTg4OiJURVhUVVJFNCIsMzM5ODk6IlRFWFRVUkU1IiwzMzk5MDoiVEVYVFVSRTYiLDMzOTkxOiJURVhUVVJFNyIsMzM5OTI6IlRFWFRVUkU4IiwzMzk5MzoiVEVYVFVSRTkiLDMzOTk0OiJURVhUVVJFMTAiLDMzOTk1OiJURVhUVVJFMTEiLDMzOTk2OiJURVhUVVJFMTIiLDMzOTk3OiJURVhUVVJFMTMiLDMzOTk4OiJURVhUVVJFMTQiLDMzOTk5OiJURVhUVVJFMTUiLDM0ZTM6IlRFWFRVUkUxNiIsMzQwMDE6IlRFWFRVUkUxNyIsMzQwMDI6IlRFWFRVUkUxOCIsMzQwMDM6IlRFWFRVUkUxOSIsMzQwMDQ6IlRFWFRVUkUyMCIsMzQwMDU6IlRFWFRVUkUyMSIsMzQwMDY6IlRFWFRVUkUyMiIsMzQwMDc6IlRFWFRVUkUyMyIsMzQwMDg6IlRFWFRVUkUyNCIsMzQwMDk6IlRFWFRVUkUyNSIsMzQwMTA6IlRFWFRVUkUyNiIsMzQwMTE6IlRFWFRVUkUyNyIsMzQwMTI6IlRFWFRVUkUyOCIsMzQwMTM6IlRFWFRVUkUyOSIsMzQwMTQ6IlRFWFRVUkUzMCIsMzQwMTU6IlRFWFRVUkUzMSIsMzQwMTY6IkFDVElWRV9URVhUVVJFIiwzNDAyNDoiTUFYX1JFTkRFUkJVRkZFUl9TSVpFIiwzNDA0MToiREVQVEhfU1RFTkNJTCIsMzQwNTU6IklOQ1JfV1JBUCIsMzQwNTY6IkRFQ1JfV1JBUCIsMzQwNjc6IlRFWFRVUkVfQ1VCRV9NQVAiLDM0MDY4OiJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAiLDM0MDY5OiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1giLDM0MDcwOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1giLDM0MDcxOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kiLDM0MDcyOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kiLDM0MDczOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1oiLDM0MDc0OiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1oiLDM0MDc2OiJNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFIiwzNDMzODoiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIiwzNDMzOToiVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFIiwzNDM0MDoiVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLDM0MzQxOiJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUiLDM0MzQyOiJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiLDM0MzczOiJWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIiLDM0NDY2OiJOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NDY3OiJDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsMzQ2NjA6IkJVRkZFUl9TSVpFIiwzNDY2MToiQlVGRkVSX1VTQUdFIiwzNDgxNjoiU1RFTkNJTF9CQUNLX0ZVTkMiLDM0ODE3OiJTVEVOQ0lMX0JBQ0tfRkFJTCIsMzQ4MTg6IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwiLDM0ODE5OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTIiwzNDg3NzoiQkxFTkRfRVFVQVRJT05fQUxQSEEiLDM0OTIxOiJNQVhfVkVSVEVYX0FUVFJJQlMiLDM0OTIyOiJWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQiLDM0OTMwOiJNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzQ5NjI6IkFSUkFZX0JVRkZFUiIsMzQ5NjM6IkVMRU1FTlRfQVJSQVlfQlVGRkVSIiwzNDk2NDoiQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM0OTY1OiJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk3NToiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyIsMzUwNDA6IlNUUkVBTV9EUkFXIiwzNTA0NDoiU1RBVElDX0RSQVciLDM1MDQ4OiJEWU5BTUlDX0RSQVciLDM1NjMyOiJGUkFHTUVOVF9TSEFERVIiLDM1NjMzOiJWRVJURVhfU0hBREVSIiwzNTY2MDoiTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MToiTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM1NjYzOiJTSEFERVJfVFlQRSIsMzU2NjQ6IkZMT0FUX1ZFQzIiLDM1NjY1OiJGTE9BVF9WRUMzIiwzNTY2NjoiRkxPQVRfVkVDNCIsMzU2Njc6IklOVF9WRUMyIiwzNTY2ODoiSU5UX1ZFQzMiLDM1NjY5OiJJTlRfVkVDNCIsMzU2NzA6IkJPT0wiLDM1NjcxOiJCT09MX1ZFQzIiLDM1NjcyOiJCT09MX1ZFQzMiLDM1NjczOiJCT09MX1ZFQzQiLDM1Njc0OiJGTE9BVF9NQVQyIiwzNTY3NToiRkxPQVRfTUFUMyIsMzU2NzY6IkZMT0FUX01BVDQiLDM1Njc4OiJTQU1QTEVSXzJEIiwzNTY4MDoiU0FNUExFUl9DVUJFIiwzNTcxMjoiREVMRVRFX1NUQVRVUyIsMzU3MTM6IkNPTVBJTEVfU1RBVFVTIiwzNTcxNDoiTElOS19TVEFUVVMiLDM1NzE1OiJWQUxJREFURV9TVEFUVVMiLDM1NzE2OiJJTkZPX0xPR19MRU5HVEgiLDM1NzE3OiJBVFRBQ0hFRF9TSEFERVJTIiwzNTcxODoiQUNUSVZFX1VOSUZPUk1TIiwzNTcxOToiQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCIsMzU3MjA6IlNIQURFUl9TT1VSQ0VfTEVOR1RIIiwzNTcyMToiQUNUSVZFX0FUVFJJQlVURVMiLDM1NzIyOiJBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgiLDM1NzI0OiJTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04iLDM1NzI1OiJDVVJSRU5UX1BST0dSQU0iLDM2MDAzOiJTVEVOQ0lMX0JBQ0tfUkVGIiwzNjAwNDoiU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0siLDM2MDA1OiJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLIiwzNjAwNjoiRlJBTUVCVUZGRVJfQklORElORyIsMzYwMDc6IlJFTkRFUkJVRkZFUl9CSU5ESU5HIiwzNjA0ODoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSIsMzYwNDk6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUiLDM2MDUwOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwiLDM2MDUxOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSIsMzYwNTM6IkZSQU1FQlVGRkVSX0NPTVBMRVRFIiwzNjA1NDoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIiwzNjA1NToiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQiLDM2MDU3OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMiLDM2MDYxOiJGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCIsMzYwNjQ6IkNPTE9SX0FUVEFDSE1FTlQwIiwzNjA5NjoiREVQVEhfQVRUQUNITUVOVCIsMzYxMjg6IlNURU5DSUxfQVRUQUNITUVOVCIsMzYxNjA6IkZSQU1FQlVGRkVSIiwzNjE2MToiUkVOREVSQlVGRkVSIiwzNjE2MjoiUkVOREVSQlVGRkVSX1dJRFRIIiwzNjE2MzoiUkVOREVSQlVGRkVSX0hFSUdIVCIsMzYxNjQ6IlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQiLDM2MTY4OiJTVEVOQ0lMX0lOREVYOCIsMzYxNzY6IlJFTkRFUkJVRkZFUl9SRURfU0laRSIsMzYxNzc6IlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFIiwzNjE3ODoiUkVOREVSQlVGRkVSX0JMVUVfU0laRSIsMzYxNzk6IlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFIiwzNjE4MDoiUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUiLDM2MTgxOiJSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFIiwzNjE5NDoiUkdCNTY1IiwzNjMzNjoiTE9XX0ZMT0FUIiwzNjMzNzoiTUVESVVNX0ZMT0FUIiwzNjMzODoiSElHSF9GTE9BVCIsMzYzMzk6IkxPV19JTlQiLDM2MzQwOiJNRURJVU1fSU5UIiwzNjM0MToiSElHSF9JTlQiLDM2MzQ2OiJTSEFERVJfQ09NUElMRVIiLDM2MzQ3OiJNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyIsMzYzNDg6Ik1BWF9WQVJZSU5HX1ZFQ1RPUlMiLDM2MzQ5OiJNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTIiwzNzQ0MDoiVU5QQUNLX0ZMSVBfWV9XRUJHTCIsMzc0NDE6IlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCIsMzc0NDI6IkNPTlRFWFRfTE9TVF9XRUJHTCIsMzc0NDM6IlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLDM3NDQ0OiJCUk9XU0VSX0RFRkFVTFRfV0VCR0wifX0se31dLDE1NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vMS4wL251bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19fSx7Ii4vMS4wL251bWJlcnMiOjE1NX1dLDE1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXJIaT1yLHRoaXMuYnVmZmVyTG89bix0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMubnVtUG9pbnRzPTAsdGhpcy5jb2xvcj1bMCwwLDAsMV19ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWEodC5nbCxsLnZlcnRleCxsLmZyYWdtZW50KSxpPW8odC5nbCkscz1vKHQuZ2wpLHU9bmV3IG4odCxyLGkscyk7cmV0dXJuIHUudXBkYXRlKGUpLHQuYWRkT2JqZWN0KHUpLHV9dmFyIGE9dCgiZ2wtc2hhZGVyIiksbz10KCJnbC1idWZmZXIiKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgiLi9saWIvc2hhZGVycyIpO2UuZXhwb3J0cz1pO3ZhciB1PVtbMSwwLDAsMSwwLDBdLFsxLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwxLDAsMF0sWzEsMCwwLDEsMCwwXSxbMSwwLC0xLDAsMCwxXSxbMSwwLC0xLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwxXSxbMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbMCwxLDEsMCwwLDBdLFswLDEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsMSwxLDAsMCwwXSxbMCwtMSwxLDAsMCwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsLTEsLTEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsMSwwLDEsMSwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwtMSwtMSwwXSxbMCwtMSwwLDEsLTEsMF0sWzAsLTEsMCwxLDEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsMSwtMSwwXV0sYz1uLnByb3RvdHlwZTtjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSxlPW5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLHI9bmV3IEZsb2F0MzJBcnJheShbMCwwXSksbj1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSxpPVsxLDFdO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMucGxvdCxvPXRoaXMuc2hhZGVyLHM9dGhpcy5ib3VuZHMsbD10aGlzLm51bVBvaW50cztpZihsKXt2YXIgYz1hLmdsLGg9YS5kYXRhQm94LGY9YS52aWV3Qm94LGQ9YS5waXhlbFJhdGlvLHA9c1syXS1zWzBdLG09c1szXS1zWzFdLHY9aFsyXS1oWzBdLGc9aFszXS1oWzFdLHk9MipwL3YsYj0yKm0vZyx4PShzWzBdLWhbMF0tLjUqdikvcCxfPShzWzFdLWhbMV0tLjUqZykvbTt0WzBdPXksdFsxXT1iLGVbMF09eS10WzBdLGVbMV09Yi10WzFdLHJbMF09eCxyWzFdPV8sblswXT14LXJbMF0sblsxXT1fLXJbMV07dmFyIHc9ZlsyXS1mWzBdLE09ZlszXS1mWzFdO2lbMF09MipkL3csaVsxXT0yKmQvTSxvLmJpbmQoKSxvLnVuaWZvcm1zLnNjYWxlSGk9dCxvLnVuaWZvcm1zLnNjYWxlTG89ZSxvLnVuaWZvcm1zLnRyYW5zbGF0ZUhpPXIsby51bmlmb3Jtcy50cmFuc2xhdGVMbz1uLG8udW5pZm9ybXMucGl4ZWxTY2FsZT1pLG8udW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcix0aGlzLmJ1ZmZlckxvLmJpbmQoKSxvLmF0dHJpYnV0ZXMucG9zaXRpb25Mby5wb2ludGVyKGMuRkxPQVQsITEsMTYsMCksdGhpcy5idWZmZXJIaS5iaW5kKCksby5hdHRyaWJ1dGVzLnBvc2l0aW9uSGkucG9pbnRlcihjLkZMT0FULCExLDE2LDApLG8uYXR0cmlidXRlcy5waXhlbE9mZnNldC5wb2ludGVyKGMuRkxPQVQsITEsMTYsOCksYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVTLDAsbCp1Lmxlbmd0aCl9fX0oKSxjLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxjLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sYy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZSxyLG4saT10LnBvc2l0aW9uc3x8W10sYT10LmVycm9yc3x8W10sbz0xOyJsaW5lV2lkdGgiaW4gdCYmKG89K3QubGluZVdpZHRoKTt2YXIgbD01OyJjYXBTaXplImluIHQmJihsPSt0LmNhcFNpemUpLHRoaXMuY29sb3I9KHQuY29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKTt2YXIgYz10aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLGg9dGhpcy5udW1Qb2ludHM9aS5sZW5ndGg+PjE7Zm9yKGU9MDtlPGg7KytlKXI9aVsyKmVdLG49aVsyKmUrMV0sY1swXT1NYXRoLm1pbihyLGNbMF0pLGNbMV09TWF0aC5taW4obixjWzFdKSxjWzJdPU1hdGgubWF4KHIsY1syXSksY1szXT1NYXRoLm1heChuLGNbM10pO2NbMl09PT1jWzBdJiYoY1syXSs9MSksY1szXT09PWNbMV0mJihjWzNdKz0xKTt2YXIgZj0xLyhjWzJdLWNbMF0pLGQ9MS8oY1szXS1jWzFdKSxwPWNbMF0sbT1jWzFdLHY9cy5tYWxsb2NGbG9hdDY0KGgqdS5sZW5ndGgqNCksZz1zLm1hbGxvY0Zsb2F0MzIoaCp1Lmxlbmd0aCo0KSx5PXMubWFsbG9jRmxvYXQzMihoKnUubGVuZ3RoKjQpLGI9MDtmb3IoZT0wO2U8aDsrK2Upe3I9aVsyKmVdLG49aVsyKmUrMV07Zm9yKHZhciB4PWFbNCplXSxfPWFbNCplKzFdLHc9YVs0KmUrMl0sTT1hWzQqZSszXSxrPTA7azx1Lmxlbmd0aDsrK2spe3ZhciBBPXVba10sVD1BWzBdLFM9QVsxXTtUPDA/VCo9eDpUPjAmJihUKj1fKSxTPDA/Uyo9dzpTPjAmJihTKj1NKSx2W2IrK109Ziooci1wK1QpLHZbYisrXT1kKihuLW0rUyksdltiKytdPW8qQVsyXSsobCtvKSpBWzRdLHZbYisrXT1vKkFbM10rKGwrbykqQVs1XX19Zm9yKGU9MDtlPHYubGVuZ3RoO2UrKylnW2VdPXZbZV0seVtlXT12W2VdLWdbZV07dGhpcy5idWZmZXJIaS51cGRhdGUoZyksdGhpcy5idWZmZXJMby51cGRhdGUoeSkscy5mcmVlKHYpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlckhpLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlckxvLmRpc3Bvc2UoKX19LHsiLi9saWIvc2hhZGVycyI6MTU4LCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyNTMsInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sMTU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXt2ZXJ0ZXg6InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGk7XG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbkxvO1xuYXR0cmlidXRlIHZlYzIgcGl4ZWxPZmZzZXQ7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG8sIHBpeGVsU2NhbGU7XG5cbnZlYzIgcHJvamVjdCh2ZWMyIHNjSGksIHZlYzIgdHJIaSwgdmVjMiBzY0xvLCB2ZWMyIHRyTG8sIHZlYzIgcG9zSGksIHZlYzIgcG9zTG8pIHtcbiAgcmV0dXJuIChwb3NIaSArIHRySGkpICogc2NIaVxuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgKyAocG9zSGkgKyB0ckhpKSAqIHNjTG9cbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NMbztcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHNjclBvc2l0aW9uID0gdmVjMyhcbiAgICAgICAgIHByb2plY3Qoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBwb3NpdGlvbkhpLCBwb3NpdGlvbkxvKSxcbiAgICAgICAgIDEpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoXG4gICAgc2NyUG9zaXRpb24ueHkgKyBzY3JQb3NpdGlvbi56ICogcGl4ZWxTY2FsZSAqIHBpeGVsT2Zmc2V0LFxuICAgIDAsXG4gICAgc2NyUG9zaXRpb24ueik7XG59XG4iLApmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBjb2xvci5hLCBjb2xvci5hKTtcbn1cbiJ9fSx7fV0sMTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTF9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3IpdFswXVtyXT1NYXRoLm1pbih0WzBdW3JdLGVbcl0pLHRbMV1bcl09TWF0aC5tYXgodFsxXVtyXSxlW3JdKX1mdW5jdGlvbiBhKHQsZSxyLG4pe2Zvcih2YXIgaT1mW25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5nbCxyPXMoZSksaT1sKGUsW3tidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjQsb2Zmc2V0OjEyLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjI4LHN0cmlkZTo0MH1dKSxhPXUoZSk7YS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsYS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsYS5hdHRyaWJ1dGVzLm9mZnNldC5sb2NhdGlvbj0yO3ZhciBvPW5ldyBuKGUscixpLGEpO3JldHVybiBvLnVwZGF0ZSh0KSxvfWUuZXhwb3J0cz1vO3ZhciBzPXQoImdsLWJ1ZmZlciIpLGw9dCgiZ2wtdmFvIiksdT10KCIuL3NoYWRlcnMvaW5kZXgiKSxjPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxoPW4ucHJvdG90eXBlO2guaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSxoLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LGguZHJhd1RyYW5zcGFyZW50PWguZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fGMsaT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxjO3IubW9kZWw9dC5tb2RlbHx8YyxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0sbz1uWzEzXSxzPW5bMTRdLGw9blsxNV0sdT10aGlzLnBpeGVsUmF0aW8qKGlbM10qYStpWzddKm8raVsxMV0qcytpWzE1XSpsKS9lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7dGhpcy52YW8uYmluZCgpO2Zvcih2YXIgaD0wO2g8MzsrK2gpZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGhbaF0pLHIuY2FwU2l6ZT10aGlzLmNhcFNpemVbaF0qdSx0aGlzLmxpbmVDb3VudFtoXSYmZS5kcmF3QXJyYXlzKGUuTElORVMsdGhpcy5saW5lT2Zmc2V0W2hdLHRoaXMubGluZUNvdW50W2hdKTt0aGlzLnZhby51bmJpbmQoKX07dmFyIGY9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEFycmF5KDMpLGU9MDtlPDM7KytlKXtmb3IodmFyIHI9W10sbj0xO248PTI7KytuKWZvcih2YXIgaT0tMTtpPD0xO2krPTIpe3ZhciBhPShuK2UpJTMsbz1bMCwwLDBdO29bYV09aSxyLnB1c2gobyl9dFtlXT1yfXJldHVybiB0fSgpO2gudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgsQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVXaWR0aCl8fCh0aGlzLmxpbmVXaWR0aD1bdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGhdKSksImNhcFNpemUiaW4gdCYmKHRoaXMuY2FwU2l6ZT10LmNhcFNpemUsQXJyYXkuaXNBcnJheSh0aGlzLmNhcFNpemUpfHwodGhpcy5jYXBTaXplPVt0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZV0pKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSk7dmFyIGU9dC5jb2xvcnx8W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxyPXQucG9zaXRpb24sbj10LmVycm9yO2lmKEFycmF5LmlzQXJyYXkoZVswXSl8fChlPVtlLGUsZV0pLHImJm4pe3ZhciBvPVtdLHM9ci5sZW5ndGgsbD0wO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMubGluZUNvdW50PVswLDAsMF07Zm9yKHZhciB1PTA7dTwzOysrdSl7dGhpcy5saW5lT2Zmc2V0W3VdPWw7dDpmb3IodmFyIGM9MDtjPHM7KytjKXtmb3IodmFyIGg9cltjXSxmPTA7ZjwzOysrZilpZihpc05hTihoW2ZdKXx8IWlzRmluaXRlKGhbZl0pKWNvbnRpbnVlIHQ7dmFyIGQ9bltjXSxwPWVbdV07aWYoQXJyYXkuaXNBcnJheShwWzBdKSYmKHA9ZVtjXSksMz09PXAubGVuZ3RoJiYocD1bcFswXSxwWzFdLHBbMl0sMV0pLCFpc05hTihkWzBdW3VdKSYmIWlzTmFOKGRbMV1bdV0pKXtpZihkWzBdW3VdPDApe3ZhciBtPWguc2xpY2UoKTttW3VdKz1kWzBdW3VdLG8ucHVzaChoWzBdLGhbMV0saFsyXSxwWzBdLHBbMV0scFsyXSxwWzNdLDAsMCwwLG1bMF0sbVsxXSxtWzJdLHBbMF0scFsxXSxwWzJdLHBbM10sMCwwLDApLGkodGhpcy5ib3VuZHMsbSksbCs9MithKG8sbSxwLHUpfWlmKGRbMV1bdV0+MCl7dmFyIG09aC5zbGljZSgpO21bdV0rPWRbMV1bdV0sby5wdXNoKGhbMF0saFsxXSxoWzJdLHBbMF0scFsxXSxwWzJdLHBbM10sMCwwLDAsbVswXSxtWzFdLG1bMl0scFswXSxwWzFdLHBbMl0scFszXSwwLDAsMCksaSh0aGlzLmJvdW5kcyxtKSxsKz0yK2EobyxtLHAsdSl9fX10aGlzLmxpbmVDb3VudFt1XT1sLXRoaXMubGluZU9mZnNldFt1XX10aGlzLmJ1ZmZlci51cGRhdGUobyl9fSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjoxNjEsImdsLWJ1ZmZlciI6MTU0LCJnbC12YW8iOjI2OX1dLDE2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSwxNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgb2Zmc2V0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IGNhcFNpemU7XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB3b3JsZFBvc2l0aW9uICAgICAgID0gKHdvcmxkUG9zaXRpb24gLyB3b3JsZFBvc2l0aW9uLncpICsgdmVjNChjYXBTaXplICogb2Zmc2V0LCAwLjApO1xuICBnbF9Qb3NpdGlvbiAgICAgICAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBmcmFnQ29sb3IgICAgICAgICAgID0gY29sb3I7XG4gIGZyYWdQb3NpdGlvbiAgICAgICAgPSBwb3NpdGlvbjtcbn0iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZnJhZ1Bvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKGZyYWdQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5ICogZnJhZ0NvbG9yO1xufSJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6Im9mZnNldCIsdHlwZToidmVjMyJ9XSl9fSx7ImdsLXNoYWRlciI6MjUzLGdsc2xpZnk6MTYwfV0sMTYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiBpKHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTt5PW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2Zvcih2YXIgYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7eVtuXT1pfX1mdW5jdGlvbiBvKHQpe3N3aXRjaCh0KXtjYXNlIHA6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIHVuc3VwcG9ydGVkIik7Y2FzZSBtOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGF0dGFjaG1lbnQiKTtjYXNlIHY6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgZGltZW5zaW9ucyIpO2Nhc2UgZzp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBtaXNzaW5nIGF0dGFjaG1lbnQiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBmYWlsZWQgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbiIpfX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhKXtpZighbilyZXR1cm4gbnVsbDt2YXIgbz1kKHQsZSxyLGksbik7cmV0dXJuIG8ubWFnRmlsdGVyPXQuTkVBUkVTVCxvLm1pbkZpbHRlcj10Lk5FQVJFU1Qsby5taXBTYW1wbGVzPTEsby5iaW5kKCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0LkZSQU1FQlVGRkVSLGEsdC5URVhUVVJFXzJELG8uaGFuZGxlLDApLG99ZnVuY3Rpb24gbCh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCk7cmV0dXJuIHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixhKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodC5SRU5ERVJCVUZGRVIsbixlLHIpLHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodC5GUkFNRUJVRkZFUixpLHQuUkVOREVSQlVGRkVSLGEpLGF9ZnVuY3Rpb24gdSh0KXt2YXIgZT1uKHQuZ2wpLHI9dC5nbCxhPXQuaGFuZGxlPXIuY3JlYXRlRnJhbWVidWZmZXIoKSx1PXQuX3NoYXBlWzBdLGM9dC5fc2hhcGVbMV0saD10LmNvbG9yLmxlbmd0aCxmPXQuX2V4dCxkPXQuX3VzZVN0ZW5jaWwscD10Ll91c2VEZXB0aCxtPXQuX2NvbG9yVHlwZTtyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLGEpO2Zvcih2YXIgdj0wO3Y8aDsrK3YpdC5jb2xvclt2XT1zKHIsdSxjLG0sci5SR0JBLHIuQ09MT1JfQVRUQUNITUVOVDArdik7MD09PWg/KHQuX2NvbG9yX3JiPWwocix1LGMsci5SR0JBNCxyLkNPTE9SX0FUVEFDSE1FTlQwKSxmJiZmLmRyYXdCdWZmZXJzV0VCR0woeVswXSkpOmg+MSYmZi5kcmF3QnVmZmVyc1dFQkdMKHlbaF0pO3ZhciBnPXIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7Zz9kP3QuZGVwdGg9cyhyLHUsYyxnLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6cCYmKHQuZGVwdGg9cyhyLHUsYyxyLlVOU0lHTkVEX1NIT1JULHIuREVQVEhfQ09NUE9ORU5ULHIuREVQVEhfQVRUQUNITUVOVCkpOnAmJmQ/dC5fZGVwdGhfcmI9bChyLHUsYyxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOnA/dC5fZGVwdGhfcmI9bChyLHUsYyxyLkRFUFRIX0NPTVBPTkVOVDE2LHIuREVQVEhfQVRUQUNITUVOVCk6ZCYmKHQuX2RlcHRoX3JiPWwocix1LGMsci5TVEVOQ0lMX0lOREVYLHIuU1RFTkNJTF9BVFRBQ0hNRU5UKSk7dmFyIGI9ci5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHIuRlJBTUVCVUZGRVIpO2lmKGIhPT1yLkZSQU1FQlVGRkVSX0NPTVBMRVRFKXt0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpO2Zvcih2YXIgdj0wO3Y8dC5jb2xvci5sZW5ndGg7Kyt2KXQuY29sb3Jbdl0uZGlzcG9zZSgpLHQuY29sb3Jbdl09bnVsbDt0Ll9jb2xvcl9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2NvbG9yX3JiKSx0Ll9jb2xvcl9yYj1udWxsKSxpKHIsZSksbyhiKX1pKHIsZSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLl9zaGFwZT1bMHxlLDB8cl0sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2V4dD1zLHRoaXMuY29sb3I9bmV3IEFycmF5KGkpO2Zvcih2YXIgbD0wO2w8aTsrK2wpdGhpcy5jb2xvcltsXT1udWxsO3RoaXMuX2NvbG9yX3JiPW51bGwsdGhpcy5kZXB0aD1udWxsLHRoaXMuX2RlcHRoX3JiPW51bGwsdGhpcy5fY29sb3JUeXBlPW4sdGhpcy5fdXNlRGVwdGg9YSx0aGlzLl91c2VTdGVuY2lsPW87dmFyIGM9dGhpcyxoPVswfGUsMHxyXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhoLHswOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy53aWR0aD10fX0sMTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuaGVpZ2h0PXR9fX0pLHRoaXMuX3NoYXBlVmVjdG9yPWgsdSh0aGlzKX1mdW5jdGlvbiBoKHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPIik7aWYodC5fc2hhcGVbMF0hPT1lfHx0Ll9zaGFwZVsxXSE9PXIpe3ZhciBhPXQuZ2wscz1hLmdldFBhcmFtZXRlcihhLk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPnN8fHI8MHx8cj5zKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnMiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBsPW4oYSksdT0wO3U8dC5jb2xvci5sZW5ndGg7Kyt1KXQuY29sb3JbdV0uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihhLmJpbmRSZW5kZXJidWZmZXIoYS5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLGEucmVuZGVyYnVmZmVyU3RvcmFnZShhLlJFTkRFUkJVRkZFUixhLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYoYS5iaW5kUmVuZGVyYnVmZmVyKGEuUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9hLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9hLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmYS5yZW5kZXJidWZmZXJTdG9yYWdlKGEuUkVOREVSQlVGRkVSLGEuU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLGEuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBjPWEuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhhLkZSQU1FQlVGRkVSKTtjIT09YS5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLGkoYSxsKSxvKGMpKSxpKGEsbCl9fWZ1bmN0aW9uIGYodCxlLHIsbil7cHx8KHA9dC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCxtPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5ULHY9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMsZz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UKTt2YXIgaT10LmdldEV4dGVuc2lvbigiV0VCR0xfZHJhd19idWZmZXJzIik7aWYoIXkmJmkmJmEodCxpKSxBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKSwibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyIik7dmFyIG89dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT5vfHxyPDB8fHI+byl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogUGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGQk8iKTtuPW58fHt9O3ZhciBzPTE7aWYoImNvbG9yImluIG4pe2lmKChzPU1hdGgubWF4KDB8bi5jb2xvciwwKSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVzdCBzcGVjaWZ5IGEgbm9ubmVnYXRpdmUgbnVtYmVyIG9mIGNvbG9ycyIpO2lmKHM+MSl7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE11bHRpcGxlIGRyYXcgYnVmZmVyIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIik7aWYocz50LmdldFBhcmFtZXRlcihpLk1BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTCkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCAiK3MrIiBkcmF3IGJ1ZmZlcnMiKX19dmFyIGw9dC5VTlNJR05FRF9CWVRFLHU9dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iik7aWYobi5mbG9hdCYmcz4wKXtpZighdSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzIik7bD10LkZMT0FUfWVsc2Ugbi5wcmVmZXJGbG9hdCYmcz4wJiZ1JiYobD10LkZMT0FUKTt2YXIgaD0hMDsiZGVwdGgiaW4gbiYmKGg9ISFuLmRlcHRoKTt2YXIgZj0hMTtyZXR1cm4ic3RlbmNpbCJpbiBuJiYoZj0hIW4uc3RlbmNpbCksbmV3IGModCxlLHIsbCxzLGgsZixpKX12YXIgZD10KCJnbC10ZXh0dXJlMmQiKTtlLmV4cG9ydHM9Zjt2YXIgcCxtLHYsZyx5PW51bGwsYj1jLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiLHtzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD9bMCwwXTp0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVswfHQsMHx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBTaGFwZSB2ZWN0b3IgbXVzdCBiZSBsZW5ndGggMiIpO3ZhciBlPTB8dFswXSxyPTB8dFsxXTtyZXR1cm4gaCh0aGlzLGUsciksW2Uscl19LGVudW1lcmFibGU6ITF9LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxoKHRoaXMsdCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxoKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxiLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGIuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjoyNjV9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49byhlKXx8Im9mIHVua25vd24gbmFtZSAoc2VlIG5wbSBnbHNsLXNoYWRlci1uYW1lKSIsbD0idW5rbm93biB0eXBlIjt2b2lkIDAhPT1yJiYobD1yPT09YS5GUkFHTUVOVF9TSEFERVI/ImZyYWdtZW50IjoidmVydGV4Iik7Zm9yKHZhciB1PWkoIkVycm9yIGNvbXBpbGluZyAlcyBzaGFkZXIgJXM6XG4iLGwsbiksYz1pKCIlcyVzIix1LHQpLGg9dC5zcGxpdCgiXG4iKSxmPXt9LGQ9MDtkPGgubGVuZ3RoO2QrKyl7dmFyIHA9aFtkXTtpZigiIiE9PXApe3ZhciBtPXBhcnNlSW50KHAuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4obSkpdGhyb3cgbmV3IEVycm9yKGkoIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLHApKTtmW21dPXB9fWZvcih2YXIgdj1zKGUpLnNwbGl0KCJcbiIpLGQ9MDtkPHYubGVuZ3RoO2QrKylpZihmW2QrM118fGZbZCsyXXx8ZltkKzFdKXt2YXIgZz12W2RdO2lmKHUrPWcrIlxuIixmW2QrMV0pe3ZhciB5PWZbZCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLHUrPWkoIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57bG9uZzp1LnRyaW0oKSxzaG9ydDpjLnRyaW0oKX19dmFyIGk9dCgic3ByaW50Zi1qcyIpLnNwcmludGYsYT10KCJnbC1jb25zdGFudHMvbG9va3VwIiksbz10KCJnbHNsLXNoYWRlci1uYW1lIikscz10KCJhZGQtbGluZS1udW1iZXJzIik7ZS5leHBvcnRzPW59LHsiYWRkLWxpbmUtbnVtYmVycyI6MzgsImdsLWNvbnN0YW50cy9sb29rdXAiOjE1NiwiZ2xzbC1zaGFkZXItbmFtZSI6Mjc3LCJzcHJpbnRmLWpzIjo1MjV9XSwxNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvKXt0aGlzLnBsb3Q9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMucG9zaXRpb25CdWZmZXI9bix0aGlzLndlaWdodEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmlkQnVmZmVyPW8sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuc2hhcGU9WzAsMF0sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnBpY2tPZmZzZXQ9MH1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9dC5nbCxpPWwocixjLnZlcnRleCxjLmZyYWdtZW50KSxhPWwocixjLnBpY2tWZXJ0ZXgsYy5waWNrRnJhZ21lbnQpLG89dShyKSxzPXUociksaD11KHIpLGY9dShyKSxkPW5ldyBuKHQsaSxhLG8scyxoLGYpO3JldHVybiBkLnVwZGF0ZShlKSx0LmFkZE9iamVjdChkKSxkfWUuZXhwb3J0cz1pO3ZhciBhPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbz10KCJpb3RhLWFycmF5Iikscz10KCJ0eXBlZGFycmF5LXBvb2wiKSxsPXQoImdsLXNoYWRlciIpLHU9dCgiZ2wtYnVmZmVyIiksYz10KCIuL2xpYi9zaGFkZXJzIiksaD1uLnByb3RvdHlwZSxmPVswLDAsMSwwLDAsMSwxLDAsMSwxLDAsMV07aC5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBsb3Qscj10aGlzLnNoYWRlcixuPXRoaXMuYm91bmRzLGk9dGhpcy5udW1WZXJ0aWNlcztpZighKGk8PTApKXt2YXIgYT1lLmdsLG89ZS5kYXRhQm94LHM9blsyXS1uWzBdLGw9blszXS1uWzFdLHU9b1syXS1vWzBdLGM9b1szXS1vWzFdO3RbMF09MipzL3UsdFs0XT0yKmwvYyx0WzZdPTIqKG5bMF0tb1swXSkvdS0xLHRbN109MiooblsxXS1vWzFdKS9jLTEsci5iaW5kKCk7dmFyIGg9ci51bmlmb3JtcztoLnZpZXdUcmFuc2Zvcm09dCxoLnNoYXBlPXRoaXMuc2hhcGU7dmFyIGY9ci5hdHRyaWJ1dGVzO3RoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGYucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxmLndlaWdodC5wb2ludGVyKGEuVU5TSUdORURfQllURSwhMSksdGhpcy5jb2xvckJ1ZmZlci5iaW5kKCksZi5jb2xvci5wb2ludGVyKGEuVU5TSUdORURfQllURSwhMCksYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLDAsaSl9fX0oKSxoLmRyYXdQaWNrPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXSxlPVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dGhpcy5wbG90LGk9dGhpcy5waWNrU2hhZGVyLGE9dGhpcy5ib3VuZHMsbz10aGlzLm51bVZlcnRpY2VzO2lmKCEobzw9MCkpe3ZhciBzPW4uZ2wsbD1uLmRhdGFCb3gsdT1hWzJdLWFbMF0sYz1hWzNdLWFbMV0saD1sWzJdLWxbMF0sZj1sWzNdLWxbMV07dFswXT0yKnUvaCx0WzRdPTIqYy9mLHRbNl09MiooYVswXS1sWzBdKS9oLTEsdFs3XT0yKihhWzFdLWxbMV0pL2YtMTtmb3IodmFyIGQ9MDtkPDQ7KytkKWVbZF09cj4+OCpkJjI1NTt0aGlzLnBpY2tPZmZzZXQ9cixpLmJpbmQoKTt2YXIgcD1pLnVuaWZvcm1zO3Audmlld1RyYW5zZm9ybT10LHAucGlja09mZnNldD1lLHAuc2hhcGU9dGhpcy5zaGFwZTt2YXIgbT1pLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLG0ucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxtLndlaWdodC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSksdGhpcy5pZEJ1ZmZlci5iaW5kKCksbS5waWNrSWQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUywwLG8pLHIrdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdfX19KCksaC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV07aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy54RGF0YSxzPXRoaXMueURhdGE7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bYSV0aGlzLnNoYXBlWzBdXSxzW2EvdGhpcy5zaGFwZVswXXwwXV19fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXQuc2hhcGV8fFswLDBdLHI9dC54fHxvKGVbMF0pLG49dC55fHxvKGVbMV0pLGk9dC56fHxuZXcgRmxvYXQzMkFycmF5KGVbMF0qZVsxXSk7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bjt2YXIgbD10LmNvbG9yTGV2ZWxzfHxbMF0sdT10LmNvbG9yVmFsdWVzfHxbMCwwLDAsMV0sYz1sLmxlbmd0aCxoPXRoaXMuYm91bmRzLGQ9aFswXT1yWzBdLHA9aFsxXT1uWzBdLG09aFsyXT1yW3IubGVuZ3RoLTFdLHY9aFszXT1uW24ubGVuZ3RoLTFdLGc9MS8obS1kKSx5PTEvKHYtcCksYj1lWzBdLHg9ZVsxXTt0aGlzLnNoYXBlPVtiLHhdO3ZhciBfPShiLTEpKih4LTEpKihmLmxlbmd0aD4+PjEpO3RoaXMubnVtVmVydGljZXM9Xztmb3IodmFyIHc9cy5tYWxsb2NVaW50OCg0Kl8pLE09cy5tYWxsb2NGbG9hdDMyKDIqXyksaz1zLm1hbGxvY1VpbnQ4KDIqXyksQT1zLm1hbGxvY1VpbnQzMihfKSxUPTAsUz0wO1M8eC0xOysrUylmb3IodmFyIEU9eSoobltTXS1wKSxMPXkqKG5bUysxXS1wKSxDPTA7QzxiLTE7KytDKWZvcih2YXIgej1nKihyW0NdLWQpLEk9ZyoocltDKzFdLWQpLEQ9MDtEPGYubGVuZ3RoO0QrPTIpe3ZhciBQLE8sUixGLGo9ZltEXSxOPWZbRCsxXSxCPShTK04pKmIrKEMraiksVT1pW0JdLFY9YS5sZShsLFUpO2lmKFY8MClQPXVbMF0sTz11WzFdLFI9dVsyXSxGPXVbM107ZWxzZSBpZihWPT09Yy0xKVA9dVs0KmMtNF0sTz11WzQqYy0zXSxSPXVbNCpjLTJdLEY9dVs0KmMtMV07ZWxzZXt2YXIgSD0oVS1sW1ZdKS8obFtWKzFdLWxbVl0pLHE9MS1ILEc9NCpWLFk9NCooVisxKTtQPXEqdVtHXStIKnVbWV0sTz1xKnVbRysxXStIKnVbWSsxXSxSPXEqdVtHKzJdK0gqdVtZKzJdLEY9cSp1W0crM10rSCp1W1krM119d1s0KlRdPTI1NSpQLHdbNCpUKzFdPTI1NSpPLHdbNCpUKzJdPTI1NSpSLHdbNCpUKzNdPTI1NSpGLE1bMipUXT0uNSp6Ky41KkksTVsyKlQrMV09LjUqRSsuNSpMLGtbMipUXT1qLGtbMipUKzFdPU4sQVtUXT1TKmIrQyxUKz0xfXRoaXMucG9zaXRpb25CdWZmZXIudXBkYXRlKE0pLHRoaXMud2VpZ2h0QnVmZmVyLnVwZGF0ZShrKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZSh3KSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShBKSxzLmZyZWUoTSkscy5mcmVlKHcpLHMuZnJlZShrKSxzLmZyZWUoQSl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXIuZGlzcG9zZSgpLHRoaXMud2VpZ2h0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoxNjUsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxNjYsImdsLWJ1ZmZlciI6MTU0LCJnbC1zaGFkZXIiOjI1MywiaW90YS1hcnJheSI6MjkxLCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDE2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2ZyYWdtZW50OiJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZyYWdDb2xvci5yZ2IgKiBmcmFnQ29sb3IuYSwgZnJhZ0NvbG9yLmEpO1xufVxuIix2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiIscGlja0ZyYWdtZW50OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC54ICs9IGQueCArIGQueSpzaGFwZS54O1xuXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XG59XG4iLHBpY2tWZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBzaGFwZTtcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xudmFyeWluZyB2ZWMyIHZXZWlnaHQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdldlaWdodCA9IHdlaWdodDtcblxuICBmcmFnSWQgPSBwaWNrSWQ7XG5cbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHZQb3NpdGlvbi54eSwgMCwgdlBvc2l0aW9uLnopO1xufVxuIn19LHt9XSwxNjY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bODJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDo4Mn1dLDE2NzpbZnVuY3Rpb24odCxlLHIpe3IubGluZVZlcnRleD0icHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUhpLCBhTG8sIGRIaSwgZExvO1xuXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG5cbnZhcnlpbmcgdmVjMiBkaXJlY3Rpb247XG5cblxudmVjMiBwcm9qZWN0XzFfMCh2ZWMyIHNjSGksIHZlYzIgdHJIaSwgdmVjMiBzY0xvLCB2ZWMyIHRyTG8sIHZlYzIgcG9zSGksIHZlYzIgcG9zTG8pIHtcbiAgcmV0dXJuIChwb3NIaSArIHRySGkpICogc2NIaVxuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgKyAocG9zSGkgKyB0ckhpKSAqIHNjTG9cbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NMbztcbn1cblxuXG52ZWMyIHByb2plY3RfMl8xKHZlYzIgc2NIaSwgdmVjMiBzY0xvLCB2ZWMyIHBvc0hpLCB2ZWMyIHBvc0xvKSB7XG4gIHJldHVybiBzY0hpICogcG9zSGlcbiAgICAgICArIHNjTG8gKiBwb3NIaVxuICAgICAgICsgc2NIaSAqIHBvc0xvXG4gICAgICAgKyBzY0xvICogcG9zTG87XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwID0gcHJvamVjdF8xXzAoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBhSGksIGFMbyk7XG4gIHZlYzIgZGlyID0gcHJvamVjdF8yXzEoc2NhbGVIaSwgc2NhbGVMbywgZEhpLCBkTG8pO1xuICB2ZWMyIG4gPSAwLjUgKiB3aWR0aCAqIG5vcm1hbGl6ZShzY3JlZW5TaGFwZS55eCAqIHZlYzIoZGlyLnksIC1kaXIueCkpIC8gc2NyZWVuU2hhcGUueHk7XG4gIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZShzY3JlZW5TaGFwZS54eSAqIGRpcik7XG4gIGlmKGRpci54IDwgMC4wIHx8IChkaXIueCA9PSAwLjAgJiYgZGlyLnkgPCAwLjApKSB7XG4gICAgZGlyZWN0aW9uID0gLXRhbmdlbnQ7XG4gIH0gZWxzZSB7XG4gICAgZGlyZWN0aW9uID0gdGFuZ2VudDtcbiAgfVxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocCArIG4sIDAuMCwgMS4wKTtcbn0iLHIubGluZUZyYWdtZW50PSJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoUGF0dGVybjtcbnVuaWZvcm0gZmxvYXQgZGFzaExlbmd0aDtcblxudmFyeWluZyB2ZWMyIGRpcmVjdGlvbjtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCB0ID0gZnJhY3QoZG90KGRpcmVjdGlvbiwgZ2xfRnJhZ0Nvb3JkLnh5KSAvIGRhc2hMZW5ndGgpO1xuICB2ZWM0IHBjb2xvciA9IGNvbG9yICogdGV4dHVyZTJEKGRhc2hQYXR0ZXJuLCB2ZWMyKHQsIDAuMCkpLnI7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGNvbG9yLnJnYiAqIHBjb2xvci5hLCBwY29sb3IuYSk7XG59IixyLm1pdHJlVmVydGV4PSJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhSGksIGFMbztcblxudW5pZm9ybSB2ZWMyIHNjYWxlSGksIHRyYW5zbGF0ZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVMbztcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xuXG5cbnZlYzIgcHJvamVjdF8xXzAodmVjMiBzY0hpLCB2ZWMyIHRySGksIHZlYzIgc2NMbywgdmVjMiB0ckxvLCB2ZWMyIHBvc0hpLCB2ZWMyIHBvc0xvKSB7XG4gIHJldHVybiAocG9zSGkgKyB0ckhpKSAqIHNjSGlcbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NIaVxuICAgICAgICsgKHBvc0hpICsgdHJIaSkgKiBzY0xvXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjTG87XG59XG5cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHAgPSBwcm9qZWN0XzFfMChzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIGFIaSwgYUxvKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHAsIDAuMCwgMS4wKTtcbiAgZ2xfUG9pbnRTaXplID0gcmFkaXVzO1xufSIsci5taXRyZUZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZihsZW5ndGgoZ2xfUG9pbnRDb29yZC54eSAtIDAuNSkgPiAwLjI1KSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgY29sb3IuYSk7XG59IixyLnBpY2tWZXJ0ZXg9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFIaSwgYUxvLCBkSGk7XG5hdHRyaWJ1dGUgdmVjNCBwaWNrMCwgcGljazE7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmFyeWluZyB2ZWM0IHBpY2tBLCBwaWNrQjtcblxuXG52ZWMyIHByb2plY3RfMV8wKHZlYzIgc2NIaSwgdmVjMiB0ckhpLCB2ZWMyIHNjTG8sIHZlYzIgdHJMbywgdmVjMiBwb3NIaSwgdmVjMiBwb3NMbykge1xuICByZXR1cm4gKHBvc0hpICsgdHJIaSkgKiBzY0hpXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjSGlcbiAgICAgICArIChwb3NIaSArIHRySGkpICogc2NMb1xuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0xvO1xufVxuXG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwID0gcHJvamVjdF8xXzAoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBhSGksIGFMbyk7XG4gIHZlYzIgbiA9IHdpZHRoICogbm9ybWFsaXplKHNjcmVlblNoYXBlLnl4ICogdmVjMihkSGkueSwgLWRIaS54KSkgLyBzY3JlZW5TaGFwZS54eTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHAgKyBuLCAwLCAxKTtcbiAgcGlja0EgPSBwaWNrMDtcbiAgcGlja0IgPSBwaWNrMTtcbn0iLHIucGlja0ZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgcGlja0EsIHBpY2tCO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgZnJhZ0lkID0gdmVjNChwaWNrQS54eXosIDAuMCk7XG4gIGlmKHBpY2tCLncgPiBwaWNrQS53KSB7XG4gICAgZnJhZ0lkLnh5eiA9IHBpY2tCLnh5ejtcbiAgfVxuXG4gIGZyYWdJZCArPSBwaWNrT2Zmc2V0O1xuXG4gIGZyYWdJZC55ICs9IGZsb29yKGZyYWdJZC54IC8gMjU2LjApO1xuICBmcmFnSWQueCAtPSBmbG9vcihmcmFnSWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZC56ICs9IGZsb29yKGZyYWdJZC55IC8gMjU2LjApO1xuICBmcmFnSWQueSAtPSBmbG9vcihmcmFnSWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZC53ICs9IGZsb29yKGZyYWdJZC56IC8gMjU2LjApO1xuICBmcmFnSWQueiAtPSBmbG9vcihmcmFnSWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xufSIsci5maWxsVmVydGV4PSJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhSGksIGFMbywgZEhpO1xuXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBwcm9qZWN0QXhpcztcbnVuaWZvcm0gZmxvYXQgcHJvamVjdFZhbHVlLCBkZXB0aDtcblxuXG52ZWMyIHByb2plY3RfMV8wKHZlYzIgc2NIaSwgdmVjMiB0ckhpLCB2ZWMyIHNjTG8sIHZlYzIgdHJMbywgdmVjMiBwb3NIaSwgdmVjMiBwb3NMbykge1xuICByZXR1cm4gKHBvc0hpICsgdHJIaSkgKiBzY0hpXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjSGlcbiAgICAgICArIChwb3NIaSArIHRySGkpICogc2NMb1xuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0xvO1xufVxuXG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwID0gcHJvamVjdF8xXzAoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBhSGksIGFMbyk7XG4gIGlmKGRIaS55IDwgMC4wIHx8IChkSGkueSA9PSAwLjAgJiYgZEhpLnggPCAwLjApKSB7XG4gICAgaWYoZG90KHAsIHByb2plY3RBeGlzKSA8IHByb2plY3RWYWx1ZSkge1xuICAgICAgcCA9IHAgKiAoMS4wIC0gYWJzKHByb2plY3RBeGlzKSkgKyBwcm9qZWN0QXhpcyAqIHByb2plY3RWYWx1ZTtcbiAgICB9XG4gIH1cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHAsIGRlcHRoLCAxKTtcbn0iLHIuZmlsbEZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGNvbG9yLmEsIGNvbG9yLmEpO1xufSJ9LHt9XSwxNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMsbCl7dGhpcy5wbG90PXQsdGhpcy5kYXNoUGF0dGVybj1lLHRoaXMubGluZUJ1ZmZlckhpPXIsdGhpcy5saW5lQnVmZmVyTG89bix0aGlzLnBpY2tCdWZmZXI9aSx0aGlzLmxpbmVTaGFkZXI9YSx0aGlzLm1pdHJlU2hhZGVyPW8sdGhpcy5maWxsU2hhZGVyPXMsdGhpcy5waWNrU2hhZGVyPWwsdGhpcy51c2luZ0Rhc2hlcz0hMSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMud2lkdGg9MSx0aGlzLmNvbG9yPVswLDAsMSwxXSx0aGlzLmZpbGw9WyExLCExLCExLCExXSx0aGlzLmZpbGxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmRhdGE9bnVsbCx0aGlzLm51bVBvaW50cz0wLHRoaXMudmVydENvdW50PTAsdGhpcy5waWNrT2Zmc2V0PTB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj10LmdsLGk9cyhyKSxhPXMociksdT1zKHIpLGM9bChyLFsxLDFdKSxmPW8ocixoLmxpbmVWZXJ0ZXgsaC5saW5lRnJhZ21lbnQpLGQ9byhyLGgubWl0cmVWZXJ0ZXgsaC5taXRyZUZyYWdtZW50KSxwPW8ocixoLmZpbGxWZXJ0ZXgsaC5maWxsRnJhZ21lbnQpLG09byhyLGgucGlja1ZlcnRleCxoLnBpY2tGcmFnbWVudCksdj1uZXcgbih0LGMsaSxhLHUsZixkLHAsbSk7cmV0dXJuIHQuYWRkT2JqZWN0KHYpLHYudXBkYXRlKGUpLHZ9ZS5leHBvcnRzPWE7dmFyIG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoImdsLXRleHR1cmUyZCIpLHU9dCgibmRhcnJheSIpLGM9dCgidHlwZWRhcnJheS1wb29sIiksaD10KCIuL2xpYi9zaGFkZXJzIiksZj1uLnByb3RvdHlwZTtmLnNldFByb2plY3Rpb25Nb2RlbD1mdW5jdGlvbigpe3ZhciB0PXtzY2FsZUhpOm5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLHNjYWxlTG86bmV3IEZsb2F0MzJBcnJheShbMCwwXSksdHJhbnNsYXRlSGk6bmV3IEZsb2F0MzJBcnJheShbMCwwXSksdHJhbnNsYXRlTG86bmV3IEZsb2F0MzJBcnJheShbMCwwXSksc2NyZWVuU2hhcGU6WzAsMF19O3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuYm91bmRzLHI9dGhpcy5wbG90LnZpZXdCb3gsbj10aGlzLnBsb3QuZGF0YUJveCxpPWVbMl0tZVswXSxhPWVbM10tZVsxXSxvPW5bMl0tblswXSxzPW5bM10tblsxXSxsPXJbMl0tclswXSx1PXJbM10tclsxXSxjPTIqaS9vLGg9MiphL3MsZj0oZVswXS1uWzBdLS41Km8pL2ksZD0oZVsxXS1uWzFdLS41KnMpL2E7cmV0dXJuIHQuc2NhbGVIaVswXT1jLHQuc2NhbGVIaVsxXT1oLHQuc2NhbGVMb1swXT1jLXQuc2NhbGVIaVswXSx0LnNjYWxlTG9bMV09aC10LnNjYWxlSGlbMV0sdC50cmFuc2xhdGVIaVswXT1mLHQudHJhbnNsYXRlSGlbMV09ZCx0LnRyYW5zbGF0ZUxvWzBdPWYtdC50cmFuc2xhdGVIaVswXSx0LnRyYW5zbGF0ZUxvWzFdPWQtdC50cmFuc2xhdGVIaVsxXSx0LnNjcmVlblNoYXBlWzBdPWwsdC5zY3JlZW5TaGFwZVsxXT11LHR9fSgpLGYuc2V0UHJvamVjdGlvblVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dC5zY2FsZUhpPWUuc2NhbGVIaSx0LnNjYWxlTG89ZS5zY2FsZUxvLHQudHJhbnNsYXRlSGk9ZS50cmFuc2xhdGVIaSx0LnRyYW5zbGF0ZUxvPWUudHJhbnNsYXRlTG8sdC5zY3JlZW5TaGFwZT1lLnNjcmVlblNoYXBlfSxmLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwXSxlPVstMSwwXSxyPVswLDFdLG49WzAsLTFdO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXRoaXMudmVydENvdW50O2lmKGkpe3ZhciBhPXRoaXMuc2V0UHJvamVjdGlvbk1vZGVsKCksbz10aGlzLnBsb3Qscz10aGlzLndpZHRoLGw9by5nbCx1PW8ucGl4ZWxSYXRpbyxjPXRoaXMuY29sb3IsaD10aGlzLmZpbGxTaGFkZXIuYXR0cmlidXRlczt0aGlzLmxpbmVCdWZmZXJMby5iaW5kKCksaC5hTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDApLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKTt2YXIgZj10aGlzLmZpbGw7aWYoZlswXXx8ZlsxXXx8ZlsyXXx8ZlszXSl7dmFyIGQ9dGhpcy5maWxsU2hhZGVyO2QuYmluZCgpO3ZhciBwPWQudW5pZm9ybXM7dGhpcy5zZXRQcm9qZWN0aW9uVW5pZm9ybXMocCxhKSxwLmRlcHRoPW8ubmV4dERlcHRoVmFsdWUoKSxoLmFIaS5wb2ludGVyKGwuRkxPQVQsITEsMTYsMCksaC5kSGkucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLGwuZGVwdGhNYXNrKCEwKSxsLmVuYWJsZShsLkRFUFRIX1RFU1QpO3ZhciBtPXRoaXMuZmlsbENvbG9yO2ZbMF0mJihwLmNvbG9yPW1bMF0scC5wcm9qZWN0QXhpcz1lLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGZbMV0mJihwLmNvbG9yPW1bMV0scC5wcm9qZWN0QXhpcz1uLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGZbMl0mJihwLmNvbG9yPW1bMl0scC5wcm9qZWN0QXhpcz10LHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGZbM10mJihwLmNvbG9yPW1bM10scC5wcm9qZWN0QXhpcz1yLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGwuZGVwdGhNYXNrKCExKSxsLmRpc2FibGUobC5ERVBUSF9URVNUKX12YXIgdj10aGlzLmxpbmVTaGFkZXI7di5iaW5kKCksdGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLHYuYXR0cmlidXRlcy5hTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDApLHYuYXR0cmlidXRlcy5kTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKTt2YXIgZz12LnVuaWZvcm1zO3RoaXMuc2V0UHJvamVjdGlvblVuaWZvcm1zKGcsYSksZy5jb2xvcj1jLGcud2lkdGg9cyp1LGcuZGFzaFBhdHRlcm49dGhpcy5kYXNoUGF0dGVybi5iaW5kKCksZy5kYXNoTGVuZ3RoPXRoaXMuZGFzaExlbmd0aCp1O3ZhciB5PXYuYXR0cmlidXRlcztpZih5LmFIaS5wb2ludGVyKGwuRkxPQVQsITEsMTYsMCkseS5kSGkucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLGwuZHJhd0FycmF5cyhsLlRSSUFOR0xFUywwLGkpLHM+MiYmIXRoaXMudXNpbmdEYXNoZXMpe3ZhciBiPXRoaXMubWl0cmVTaGFkZXI7dGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLGIuYXR0cmlidXRlcy5hTG8ucG9pbnRlcihsLkZMT0FULCExLDQ4LDApLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKSxiLmJpbmQoKTt2YXIgeD1iLnVuaWZvcm1zO3RoaXMuc2V0UHJvamVjdGlvblVuaWZvcm1zKHgsYSkseC5jb2xvcj1jLHgucmFkaXVzPXMqdSxiLmF0dHJpYnV0ZXMuYUhpLnBvaW50ZXIobC5GTE9BVCwhMSw0OCwwKSxsLmRyYXdBcnJheXMobC5QT0lOVFMsMCxpLzN8MCl9fX19KCksZi5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy52ZXJ0Q291bnQsbj10aGlzLm51bVBvaW50cztpZih0aGlzLnBpY2tPZmZzZXQ9ZSwhcilyZXR1cm4gZStuO3ZhciBpPXRoaXMuc2V0UHJvamVjdGlvbk1vZGVsKCksYT10aGlzLnBsb3Qsbz10aGlzLndpZHRoLHM9YS5nbCxsPWEucGlja1BpeGVsUmF0aW8sdT10aGlzLnBpY2tTaGFkZXIsYz10aGlzLnBpY2tCdWZmZXI7dFswXT0yNTUmZSx0WzFdPWU+Pj44JjI1NSx0WzJdPWU+Pj4xNiYyNTUsdFszXT1lPj4+MjQsdS5iaW5kKCk7dmFyIGg9dS51bmlmb3Jtczt0aGlzLnNldFByb2plY3Rpb25Vbmlmb3JtcyhoLGkpLGgud2lkdGg9bypsLGgucGlja09mZnNldD10O3ZhciBmPXUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5saW5lQnVmZmVySGkuYmluZCgpLGYuYUhpLnBvaW50ZXIocy5GTE9BVCwhMSwxNiwwKSxmLmRIaS5wb2ludGVyKHMuRkxPQVQsITEsMTYsOCksdGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLGYuYUxvLnBvaW50ZXIocy5GTE9BVCwhMSwxNiwwKSxjLmJpbmQoKSxmLnBpY2swLnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExLDgsMCksZi5waWNrMS5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSw4LDQpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUywwLHIpLGUrbn19KCksZi5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLm51bVBvaW50cztpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLmRhdGE7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlLHIsbixhLG8scz10aGlzLnBsb3QuZ2w7dGhpcy5jb2xvcj0odC5jb2xvcnx8WzAsMCwxLDFdKS5zbGljZSgpLHRoaXMud2lkdGg9Kyh0LndpZHRofHwxKSx0aGlzLmZpbGw9KHQuZmlsbHx8WyExLCExLCExLCExXSkuc2xpY2UoKSx0aGlzLmZpbGxDb2xvcj1pKHQuZmlsbENvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIGg9dC5kYXNoZXN8fFsxXSxmPTA7Zm9yKGU9MDtlPGgubGVuZ3RoOysrZSlmKz1oW2VdO3ZhciBkPWMubWFsbG9jVWludDgoZik7bj0wO3ZhciBwPTI1NTtmb3IoZT0wO2U8aC5sZW5ndGg7KytlKXtmb3Iocj0wO3I8aFtlXTsrK3IpZFtuKytdPXA7cF49MjU1fXRoaXMuZGFzaFBhdHRlcm4uZGlzcG9zZSgpLHRoaXMudXNpbmdEYXNoZXM9aC5sZW5ndGg+MSx0aGlzLmRhc2hQYXR0ZXJuPWwocyx1KGQsW2YsMSw0XSxbMSwwLDBdKSksdGhpcy5kYXNoUGF0dGVybi5taW5GaWx0ZXI9cy5ORUFSRVNULHRoaXMuZGFzaFBhdHRlcm4ubWFnRmlsdGVyPXMuTkVBUkVTVCx0aGlzLmRhc2hMZW5ndGg9ZixjLmZyZWUoZCk7dmFyIG09dC5wb3NpdGlvbnM7dGhpcy5kYXRhPW07dmFyIHY9dGhpcy5ib3VuZHM7dlswXT12WzFdPTEvMCx2WzJdPXZbM109LTEvMDt2YXIgZz10aGlzLm51bVBvaW50cz1tLmxlbmd0aD4+PjE7aWYoMCE9PWcpe2ZvcihlPTA7ZTxnOysrZSlhPW1bMiplXSxvPW1bMiplKzFdLGlzTmFOKGEpfHxpc05hTihvKXx8KHZbMF09TWF0aC5taW4odlswXSxhKSx2WzFdPU1hdGgubWluKHZbMV0sbyksdlsyXT1NYXRoLm1heCh2WzJdLGEpLHZbM109TWF0aC5tYXgodlszXSxvKSk7dlswXT09PXZbMl0mJih2WzJdKz0xKSx2WzNdPT09dlsxXSYmKHZbM10rPTEpO3ZhciB5PWMubWFsbG9jRmxvYXQ2NCgyNCooZy0xKSksYj1jLm1hbGxvY0Zsb2F0MzIoMjQqKGctMSkpLHg9Yy5tYWxsb2NGbG9hdDMyKDI0KihnLTEpKSxfPWMubWFsbG9jVWludDMyKDEyKihnLTEpKSx3PWIubGVuZ3RoLE09Xy5sZW5ndGg7bj1nO2Zvcih2YXIgaz0wO24+MTspe3ZhciBBPS0tbjthPW1bMipuXSxvPW1bMipuKzFdO3ZhciBUPUEtMSxTPW1bMipUXSxFPW1bMipUKzFdO2lmKCEoaXNOYU4oYSl8fGlzTmFOKG8pfHxpc05hTihTKXx8aXNOYU4oRSkpKXtrKz0xLGE9KGEtdlswXSkvKHZbMl0tdlswXSksbz0oby12WzFdKS8odlszXS12WzFdKSxTPShTLXZbMF0pLyh2WzJdLXZbMF0pLEU9KEUtdlsxXSkvKHZbM10tdlsxXSk7dmFyIEw9Uy1hLEM9RS1vLHo9QXwxPDwyNCxJPUEtMSxEPUEsUD1BLTF8MTw8MjQ7eVstLXddPS1DLHlbLS13XT0tTCx5Wy0td109byx5Wy0td109YSxfWy0tTV09eixfWy0tTV09SSx5Wy0td109Qyx5Wy0td109TCx5Wy0td109RSx5Wy0td109UyxfWy0tTV09RCxfWy0tTV09UCx5Wy0td109LUMseVstLXddPS1MLHlbLS13XT1FLHlbLS13XT1TLF9bLS1NXT1ELF9bLS1NXT1QLHlbLS13XT1DLHlbLS13XT1MLHlbLS13XT1FLHlbLS13XT1TLF9bLS1NXT1ELF9bLS1NXT1QLHlbLS13XT0tQyx5Wy0td109LUwseVstLXddPW8seVstLXddPWEsX1stLU1dPXosX1stLU1dPUkseVstLXddPUMseVstLXddPUwseVstLXddPW8seVstLXddPWEsX1stLU1dPXosX1stLU1dPUl9fWZvcihlPTA7ZTx5Lmxlbmd0aDtlKyspYltlXT15W2VdLHhbZV09eVtlXS1iW2VdO3RoaXMudmVydENvdW50PTYqayx0aGlzLmxpbmVCdWZmZXJIaS51cGRhdGUoYi5zdWJhcnJheSh3KSksdGhpcy5saW5lQnVmZmVyTG8udXBkYXRlKHguc3ViYXJyYXkodykpLHRoaXMucGlja0J1ZmZlci51cGRhdGUoXy5zdWJhcnJheShNKSksYy5mcmVlKHkpLGMuZnJlZShiKSxjLmZyZWUoeCksYy5mcmVlKF8pfX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKSx0aGlzLmxpbmVCdWZmZXJMby5kaXNwb3NlKCksdGhpcy5saW5lQnVmZmVySGkuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm1pdHJlU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmZpbGxTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5kYXNoUGF0dGVybi5kaXNwb3NlKCl9fSx7Ii4vbGliL3NoYWRlcnMiOjE2NywiZ2wtYnVmZmVyIjoxNTQsImdsLXNoYWRlciI6MjUzLCJnbC10ZXh0dXJlMmQiOjI2NSxuZGFycmF5OjQ2NSwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSwxNjk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBuZXh0UG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgYXJjTGVuZ3RoLCBsaW5lV2lkdGg7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcblxudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgcHJvamVjdGVkID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdGFuZ2VudENsaXAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuZXh0UG9zaXRpb24gLSBwb3NpdGlvbiwgMC4wKTtcbiAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKHNjcmVlblNoYXBlICogdGFuZ2VudENsaXAueHkpO1xuICB2ZWMyIG9mZnNldCA9IDAuNSAqIHBpeGVsUmF0aW8gKiBsaW5lV2lkdGggKiB2ZWMyKHRhbmdlbnQueSwgLXRhbmdlbnQueCkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocHJvamVjdGVkLnh5ICsgcHJvamVjdGVkLncgKiBvZmZzZXQsIHByb2plY3RlZC56dyk7XG5cbiAgd29ybGRQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICBwaXhlbEFyY0xlbmd0aCA9IGFyY0xlbmd0aDtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG59XG4iLGE9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJuZXh0UG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiYXJjTGVuZ3RoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJsaW5lV2lkdGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In1dO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgICAgICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFRleHR1cmU7XG51bmlmb3JtIGZsb2F0ICAgICBkYXNoU2NhbGU7XG51bmlmb3JtIGZsb2F0ICAgICBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzMgICAgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgICBwaXhlbEFyY0xlbmd0aDtcbnZhcnlpbmcgdmVjNCAgICBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHdvcmxkUG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4od29ybGRQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcbiAgaWYoZGFzaFdlaWdodCA8IDAuNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yICogb3BhY2l0eTtcbn1cbiIsbnVsbCxhKX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbmxvd3AgdmVjNCBlbmNvZGVfZmxvYXRfMV8wKGhpZ2hwIGZsb2F0IHYpIHtcbiAgaGlnaHAgZmxvYXQgYXYgPSBhYnModik7XG5cbiAgLy9IYW5kbGUgc3BlY2lhbCBjYXNlc1xuICBpZihhdiA8IEZMT0FUX01JTikge1xuICAgIHJldHVybiB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gIH0gZWxzZSBpZih2ID4gRkxPQVRfTUFYKSB7XG4gICAgcmV0dXJuIHZlYzQoMTI3LjAsIDEyOC4wLCAwLjAsIDAuMCkgLyAyNTUuMDtcbiAgfSBlbHNlIGlmKHYgPCAtRkxPQVRfTUFYKSB7XG4gICAgcmV0dXJuIHZlYzQoMjU1LjAsIDEyOC4wLCAwLjAsIDAuMCkgLyAyNTUuMDtcbiAgfVxuXG4gIGhpZ2hwIHZlYzQgYyA9IHZlYzQoMCwwLDAsMCk7XG5cbiAgLy9Db21wdXRlIGV4cG9uZW50IGFuZCBtYW50aXNzYVxuICBoaWdocCBmbG9hdCBlID0gZmxvb3IobG9nMihhdikpO1xuICBoaWdocCBmbG9hdCBtID0gYXYgKiBwb3coMi4wLCAtZSkgLSAxLjA7XG4gIFxuICAvL1VucGFjayBtYW50aXNzYVxuICBjWzFdID0gZmxvb3IoMTI4LjAgKiBtKTtcbiAgbSAtPSBjWzFdIC8gMTI4LjA7XG4gIGNbMl0gPSBmbG9vcigzMjc2OC4wICogbSk7XG4gIG0gLT0gY1syXSAvIDMyNzY4LjA7XG4gIGNbM10gPSBmbG9vcig4Mzg4NjA4LjAgKiBtKTtcbiAgXG4gIC8vVW5wYWNrIGV4cG9uZW50XG4gIGhpZ2hwIGZsb2F0IGViaWFzID0gZSArIDEyNy4wO1xuICBjWzBdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xuICBlYmlhcyAtPSBjWzBdICogMi4wO1xuICBjWzFdICs9IGZsb29yKGViaWFzKSAqIDEyOC4wOyBcblxuICAvL1VucGFjayBzaWduIGJpdFxuICBjWzBdICs9IDEyOC4wICogc3RlcCgwLjAsIC12KTtcblxuICAvL1NjYWxlIGJhY2sgdG8gcmFuZ2VcbiAgcmV0dXJuIGMgLyAyNTUuMDtcbn1cblxuXG5cbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHdvcmxkUG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4od29ybGRQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgZW5jb2RlX2Zsb2F0XzFfMChwaXhlbEFyY0xlbmd0aCkueHl6KTtcbn0iLG51bGwsYSl9fSx7ImdsLXNoYWRlciI6MjUzfV0sMTcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuZGlydHk9ITAsdGhpcy5waXhlbFJhdGlvPTF9ZnVuY3Rpb24gcyh0KXt2YXIgZT10LmdsfHx0LnNjZW5lJiZ0LnNjZW5lLmdsLHI9bShlKTtyLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MywKci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7dmFyIG49dihlKTtuLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxuLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsbi5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLG4uYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxuLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDtmb3IodmFyIGk9bChlKSxhPXUoZSxbe2J1ZmZlcjppLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDh9LHtidWZmZXI6aSxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZTo0OH0se2J1ZmZlcjppLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjQ4fSx7YnVmZmVyOmksc2l6ZToxLG9mZnNldDoyOCxzdHJpZGU6NDh9LHtidWZmZXI6aSxzaXplOjQsb2Zmc2V0OjMyLHN0cmlkZTo0OH1dKSxzPWQobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSksaD0wO2g8MTAyNDsrK2gpcy5kYXRhW2hdPTI1NTt2YXIgZj1jKGUscyk7Zi53cmFwPWUuUkVQRUFUO3ZhciBwPW5ldyBvKGUscixuLGksYSxmKTtyZXR1cm4gcC51cGRhdGUodCkscH1lLmV4cG9ydHM9czt2YXIgbD10KCJnbC1idWZmZXIiKSx1PXQoImdsLXZhbyIpLGM9dCgiZ2wtdGV4dHVyZTJkIiksaD10KCJnbHNsLXJlYWQtZmxvYXQiKSxmPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksZD10KCJuZGFycmF5IikscD10KCIuL2xpYi9zaGFkZXJzIiksbT1wLmNyZWF0ZVNoYWRlcix2PXAuY3JlYXRlUGlja1NoYWRlcixnPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSx5PW8ucHJvdG90eXBlO3kuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0seS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHkucGlja1Nsb3RzPTEseS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx5LmRyYXdUcmFuc3BhcmVudD15LmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMuc2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8Zyx2aWV3OnQudmlld3x8Zyxwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8ZyxjbGlwQm91bmRzOmkodGhpcy5jbGlwQm91bmRzKSxkYXNoVGV4dHVyZTp0aGlzLnRleHR1cmUuYmluZCgpLGRhc2hTY2FsZTp0aGlzLmRhc2hTY2FsZS90aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sb3BhY2l0eTp0aGlzLm9wYWNpdHksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpfSx5LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnBpY2tTaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxnLHZpZXc6dC52aWV3fHxnLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxnLHBpY2tJZDp0aGlzLnBpY2tJZCxjbGlwQm91bmRzOmkodGhpcy5jbGlwQm91bmRzKSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCl9LHkudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5kaXJ0eT0hMDt2YXIgaT0hIXQuY29ubmVjdEdhcHM7ImRhc2hTY2FsZSJpbiB0JiYodGhpcy5kYXNoU2NhbGU9dC5kYXNoU2NhbGUpLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSk7dmFyIGE9dC5wb3NpdGlvbnx8dC5wb3NpdGlvbnM7aWYoYSl7dmFyIG89dC5jb2xvcnx8dC5jb2xvcnN8fFswLDAsMCwxXSxzPXQubGluZVdpZHRofHwxLGw9W10sdT1bXSxjPVtdLGg9MCxwPTAsbT1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx2PSExO3Q6Zm9yKGU9MTtlPGEubGVuZ3RoOysrZSl7dmFyIGc9YVtlLTFdLHk9YVtlXTtmb3IodS5wdXNoKGgpLGMucHVzaChnLnNsaWNlKCkpLHI9MDtyPDM7KytyKXtpZihpc05hTihnW3JdKXx8aXNOYU4oeVtyXSl8fCFpc0Zpbml0ZShnW3JdKXx8IWlzRmluaXRlKHlbcl0pKXtpZighaSYmbC5sZW5ndGg+MCl7Zm9yKHZhciBiPTA7YjwyNDsrK2IpbC5wdXNoKGxbbC5sZW5ndGgtMTJdKTtwKz0yLHY9ITB9Y29udGludWUgdH1tWzBdW3JdPU1hdGgubWluKG1bMF1bcl0sZ1tyXSx5W3JdKSxtWzFdW3JdPU1hdGgubWF4KG1bMV1bcl0sZ1tyXSx5W3JdKX12YXIgeCxfO0FycmF5LmlzQXJyYXkob1swXSk/KHg9b1tlLTFdLF89b1tlXSk6eD1fPW8sMz09PXgubGVuZ3RoJiYoeD1beFswXSx4WzFdLHhbMl0sMV0pLDM9PT1fLmxlbmd0aCYmKF89W19bMF0sX1sxXSxfWzJdLDFdKTt2YXIgdzt3PUFycmF5LmlzQXJyYXkocyk/c1tlLTFdOnM7dmFyIE09aDtpZihoKz1uKGcseSksdil7Zm9yKHI9MDtyPDI7KytyKWwucHVzaChnWzBdLGdbMV0sZ1syXSx5WzBdLHlbMV0seVsyXSxNLHcseFswXSx4WzFdLHhbMl0seFszXSk7cCs9Mix2PSExfWwucHVzaChnWzBdLGdbMV0sZ1syXSx5WzBdLHlbMV0seVsyXSxNLHcseFswXSx4WzFdLHhbMl0seFszXSxnWzBdLGdbMV0sZ1syXSx5WzBdLHlbMV0seVsyXSxNLC13LHhbMF0seFsxXSx4WzJdLHhbM10seVswXSx5WzFdLHlbMl0sZ1swXSxnWzFdLGdbMl0saCwtdyxfWzBdLF9bMV0sX1syXSxfWzNdLHlbMF0seVsxXSx5WzJdLGdbMF0sZ1sxXSxnWzJdLGgsdyxfWzBdLF9bMV0sX1syXSxfWzNdKSxwKz00fWlmKHRoaXMuYnVmZmVyLnVwZGF0ZShsKSx1LnB1c2goaCksYy5wdXNoKGFbYS5sZW5ndGgtMV0uc2xpY2UoKSksdGhpcy5ib3VuZHM9bSx0aGlzLnZlcnRleENvdW50PXAsdGhpcy5wb2ludHM9Yyx0aGlzLmFyY0xlbmd0aD11LCJkYXNoZXMiaW4gdCl7dmFyIGs9dC5kYXNoZXMsQT1rLnNsaWNlKCk7Zm9yKEEudW5zaGlmdCgwKSxlPTE7ZTxBLmxlbmd0aDsrK2UpQVtlXT1BW2UtMV0rQVtlXTt2YXIgVD1kKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pO2ZvcihlPTA7ZTwyNTY7KytlKXtmb3Iocj0wO3I8NDsrK3IpVC5zZXQoZSwwLHIsMCk7MSZmLmxlKEEsQVtBLmxlbmd0aC0xXSplLzI1NSk/VC5zZXQoZSwwLDAsMCk6VC5zZXQoZSwwLDAsMjU1KX10aGlzLnRleHR1cmUuc2V0UGl4ZWxzKFQpfX19LHkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfSx5LnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPWgodC52YWx1ZVswXSx0LnZhbHVlWzFdLHQudmFsdWVbMl0sMCkscj1mLmxlKHRoaXMuYXJjTGVuZ3RoLGUpO2lmKHI8MClyZXR1cm4gbnVsbDtpZihyPT09dGhpcy5hcmNMZW5ndGgubGVuZ3RoLTEpcmV0dXJuIG5ldyBhKHRoaXMuYXJjTGVuZ3RoW3RoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xXSx0aGlzLnBvaW50c1t0aGlzLnBvaW50cy5sZW5ndGgtMV0uc2xpY2UoKSxyKTtmb3IodmFyIG49dGhpcy5wb2ludHNbcl0saT10aGlzLnBvaW50c1tNYXRoLm1pbihyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpXSxvPShlLXRoaXMuYXJjTGVuZ3RoW3JdKS8odGhpcy5hcmNMZW5ndGhbcisxXS10aGlzLmFyY0xlbmd0aFtyXSkscz0xLW8sbD1bMCwwLDBdLHU9MDt1PDM7Kyt1KWxbdV09cypuW3VdK28qaVt1XTt2YXIgYz1NYXRoLm1pbihvPC41P3I6cisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gbmV3IGEoZSxsLGMsdGhpcy5wb2ludHNbY10pfX0seyIuL2xpYi9zaGFkZXJzIjoxNjksImJpbmFyeS1zZWFyY2gtYm91bmRzIjo2NCwiZ2wtYnVmZmVyIjoxNTQsImdsLXRleHR1cmUyZCI6MjY1LCJnbC12YW8iOjI2OSwiZ2xzbC1yZWFkLWZsb2F0IjoyNzYsbmRhcnJheTo0NjV9XSwxNzE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqYS1pKm47cmV0dXJuIG8/KG89MS9vLHRbMF09YSpvLHRbMV09LW4qbyx0WzJdPS1pKm8sdFszXT1yKm8sdCk6bnVsbH1lLmV4cG9ydHM9bn0se31dLDE3MjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLHU9ZVs3XSxjPWVbOF0saD1jKm8tcyp1LGY9LWMqYStzKmwsZD11KmEtbypsLHA9cipoK24qZitpKmQ7cmV0dXJuIHA/KHA9MS9wLHRbMF09aCpwLHRbMV09KC1jKm4raSp1KSpwLHRbMl09KHMqbi1pKm8pKnAsdFszXT1mKnAsdFs0XT0oYypyLWkqbCkqcCx0WzVdPSgtcypyK2kqYSkqcCx0WzZdPWQqcCx0WzddPSgtdSpyK24qbCkqcCx0WzhdPShvKnItbiphKSpwLHQpOm51bGx9ZS5leHBvcnRzPW59LHt9XSwxNzM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX1lLmV4cG9ydHM9bn0se31dLDE3NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZS5leHBvcnRzPW59LHt9XSwxNzU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLHU9dFs4XSxjPXRbOV0saD10WzEwXSxmPXRbMTFdLGQ9dFsxMl0scD10WzEzXSxtPXRbMTRdLHY9dFsxNV07cmV0dXJuKGUqby1yKmEpKihoKnYtZiptKS0oZSpzLW4qYSkqKGMqdi1mKnApKyhlKmwtaSphKSooYyptLWgqcCkrKHIqcy1uKm8pKih1KnYtZipkKS0ocipsLWkqbykqKHUqbS1oKmQpKyhuKmwtaSpzKSoodSpwLWMqZCl9ZS5leHBvcnRzPW59LHt9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIrcixzPW4rbixsPWkraSx1PXIqbyxjPW4qbyxoPW4qcyxmPWkqbyxkPWkqcyxwPWkqbCxtPWEqbyx2PWEqcyxnPWEqbDtyZXR1cm4gdFswXT0xLWgtcCx0WzFdPWMrZyx0WzJdPWYtdix0WzNdPTAsdFs0XT1jLWcsdFs1XT0xLXUtcCx0WzZdPWQrbSx0WzddPTAsdFs4XT1mK3YsdFs5XT1kLW0sdFsxMF09MS11LWgsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZS5leHBvcnRzPW59LHt9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9bituLGw9aStpLHU9YSthLGM9bipzLGg9bipsLGY9bip1LGQ9aSpsLHA9aSp1LG09YSp1LHY9bypzLGc9bypsLHk9byp1O3JldHVybiB0WzBdPTEtKGQrbSksdFsxXT1oK3ksdFsyXT1mLWcsdFszXT0wLHRbNF09aC15LHRbNV09MS0oYyttKSx0WzZdPXArdix0WzddPTAsdFs4XT1mK2csdFs5XT1wLXYsdFsxMF09MS0oYytkKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH1lLmV4cG9ydHM9bn0se31dLDE3ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fWUuZXhwb3J0cz1ufSx7fV0sMTc5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sdT1lWzddLGM9ZVs4XSxoPWVbOV0sZj1lWzEwXSxkPWVbMTFdLHA9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLGc9ZVsxNV0seT1yKnMtbipvLGI9cipsLWkqbyx4PXIqdS1hKm8sXz1uKmwtaSpzLHc9bip1LWEqcyxNPWkqdS1hKmwsaz1jKm0taCpwLEE9Yyp2LWYqcCxUPWMqZy1kKnAsUz1oKnYtZiptLEU9aCpnLWQqbSxMPWYqZy1kKnYsQz15KkwtYipFK3gqUytfKlQtdypBK00qaztyZXR1cm4gQz8oQz0xL0MsdFswXT0ocypMLWwqRSt1KlMpKkMsdFsxXT0oaSpFLW4qTC1hKlMpKkMsdFsyXT0obSpNLXYqdytnKl8pKkMsdFszXT0oZip3LWgqTS1kKl8pKkMsdFs0XT0obCpULW8qTC11KkEpKkMsdFs1XT0ocipMLWkqVCthKkEpKkMsdFs2XT0odip4LXAqTS1nKmIpKkMsdFs3XT0oYypNLWYqeCtkKmIpKkMsdFs4XT0obypFLXMqVCt1KmspKkMsdFs5XT0obipULXIqRS1hKmspKkMsdFsxMF09KHAqdy1tKngrZyp5KSpDLHRbMTFdPShoKngtYyp3LWQqeSkqQyx0WzEyXT0ocypBLW8qUy1sKmspKkMsdFsxM109KHIqUy1uKkEraSprKSpDLHRbMTRdPShtKmItcCpfLXYqeSkqQyx0WzE1XT0oYypfLWgqYitmKnkpKkMsdCk6bnVsbH1lLmV4cG9ydHM9bn0se31dLDE4MDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGEsbyxzLGwsdSxjLGgsZixkLHAsbT1lWzBdLHY9ZVsxXSxnPWVbMl0seT1uWzBdLGI9blsxXSx4PW5bMl0sXz1yWzBdLHc9clsxXSxNPXJbMl07cmV0dXJuIE1hdGguYWJzKG0tXyk8MWUtNiYmTWF0aC5hYnModi13KTwxZS02JiZNYXRoLmFicyhnLU0pPDFlLTY/aSh0KTooaD1tLV8sZj12LXcsZD1nLU0scD0xL01hdGguc3FydChoKmgrZipmK2QqZCksaCo9cCxmKj1wLGQqPXAsYT1iKmQteCpmLG89eCpoLXkqZCxzPXkqZi1iKmgscD1NYXRoLnNxcnQoYSphK28qbytzKnMpLHA/KHA9MS9wLGEqPXAsbyo9cCxzKj1wKTooYT0wLG89MCxzPTApLGw9ZipzLWQqbyx1PWQqYS1oKnMsYz1oKm8tZiphLHA9TWF0aC5zcXJ0KGwqbCt1KnUrYypjKSxwPyhwPTEvcCxsKj1wLHUqPXAsYyo9cCk6KGw9MCx1PTAsYz0wKSx0WzBdPWEsdFsxXT1sLHRbMl09aCx0WzNdPTAsdFs0XT1vLHRbNV09dSx0WzZdPWYsdFs3XT0wLHRbOF09cyx0WzldPWMsdFsxMF09ZCx0WzExXT0wLHRbMTJdPS0oYSptK28qditzKmcpLHRbMTNdPS0obCptK3UqditjKmcpLHRbMTRdPS0oaCptK2YqditkKmcpLHRbMTVdPTEsdCl9dmFyIGk9dCgiLi9pZGVudGl0eSIpO2UuZXhwb3J0cz1ufSx7Ii4vaWRlbnRpdHkiOjE3OH1dLDE4MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PWVbNl0sYz1lWzddLGg9ZVs4XSxmPWVbOV0sZD1lWzEwXSxwPWVbMTFdLG09ZVsxMl0sdj1lWzEzXSxnPWVbMTRdLHk9ZVsxNV0sYj1yWzBdLHg9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPWIqbit4KnMrXypoK3cqbSx0WzFdPWIqaSt4KmwrXypmK3cqdix0WzJdPWIqYSt4KnUrXypkK3cqZyx0WzNdPWIqbyt4KmMrXypwK3cqeSxiPXJbNF0seD1yWzVdLF89cls2XSx3PXJbN10sdFs0XT1iKm4reCpzK18qaCt3Km0sdFs1XT1iKmkreCpsK18qZit3KnYsdFs2XT1iKmEreCp1K18qZCt3KmcsdFs3XT1iKm8reCpjK18qcCt3KnksYj1yWzhdLHg9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT1iKm4reCpzK18qaCt3Km0sdFs5XT1iKmkreCpsK18qZit3KnYsdFsxMF09YiphK3gqdStfKmQrdypnLHRbMTFdPWIqbyt4KmMrXypwK3cqeSxiPXJbMTJdLHg9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPWIqbit4KnMrXypoK3cqbSx0WzEzXT1iKmkreCpsK18qZit3KnYsdFsxNF09YiphK3gqdStfKmQrdypnLHRbMTVdPWIqbyt4KmMrXypwK3cqeSx0fWUuZXhwb3J0cz1ufSx7fV0sMTgyOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fWUuZXhwb3J0cz1ufSx7fV0sMTgzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sdixnLHksYix4LF8sdyxNLGssQSxULFMsRT1uWzBdLEw9blsxXSxDPW5bMl0sej1NYXRoLnNxcnQoRSpFK0wqTCtDKkMpO3JldHVybiBNYXRoLmFicyh6KTwxZS02P251bGw6KHo9MS96LEUqPXosTCo9eixDKj16LGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLHU9ZVsyXSxjPWVbM10saD1lWzRdLGY9ZVs1XSxkPWVbNl0scD1lWzddLG09ZVs4XSx2PWVbOV0sZz1lWzEwXSx5PWVbMTFdLGI9RSpFKm8rYSx4PUwqRSpvK0MqaSxfPUMqRSpvLUwqaSx3PUUqTCpvLUMqaSxNPUwqTCpvK2Esaz1DKkwqbytFKmksQT1FKkMqbytMKmksVD1MKkMqby1FKmksUz1DKkMqbythLHRbMF09cypiK2gqeCttKl8sdFsxXT1sKmIrZip4K3YqXyx0WzJdPXUqYitkKngrZypfLHRbM109YypiK3AqeCt5Kl8sdFs0XT1zKncraCpNK20qayx0WzVdPWwqdytmKk0rdiprLHRbNl09dSp3K2QqTStnKmssdFs3XT1jKncrcCpNK3kqayx0WzhdPXMqQStoKlQrbSpTLHRbOV09bCpBK2YqVCt2KlMsdFsxMF09dSpBK2QqVCtnKlMsdFsxMV09YypBK3AqVCt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdCl9ZS5leHBvcnRzPW59LHt9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSx1PWVbOF0sYz1lWzldLGg9ZVsxMF0sZj1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbNF09YSppK3Uqbix0WzVdPW8qaStjKm4sdFs2XT1zKmkraCpuLHRbN109bCppK2Yqbix0WzhdPXUqaS1hKm4sdFs5XT1jKmktbypuLHRbMTBdPWgqaS1zKm4sdFsxMV09ZippLWwqbix0fWUuZXhwb3J0cz1ufSx7fV0sMTg1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sdT1lWzhdLGM9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07cmV0dXJuIGUhPT10JiYodFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzBdPWEqaS11Km4sdFsxXT1vKmktYypuLHRbMl09cyppLWgqbix0WzNdPWwqaS1mKm4sdFs4XT1hKm4rdSppLHRbOV09bypuK2MqaSx0WzEwXT1zKm4raCppLHRbMTFdPWwqbitmKmksdH1lLmV4cG9ydHM9bn0se31dLDE4NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLHU9ZVs0XSxjPWVbNV0saD1lWzZdLGY9ZVs3XTtyZXR1cm4gZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzBdPWEqaSt1Km4sdFsxXT1vKmkrYypuLHRbMl09cyppK2gqbix0WzNdPWwqaStmKm4sdFs0XT11KmktYSpuLHRbNV09YyppLW8qbix0WzZdPWgqaS1zKm4sdFs3XT1mKmktbCpuLHR9ZS5leHBvcnRzPW59LHt9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fWUuZXhwb3J0cz1ufSx7fV0sMTg4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4saSxhLG8scyxsLHUsYyxoLGYsZCxwLG09clswXSx2PXJbMV0sZz1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSptK2VbNF0qditlWzhdKmcrZVsxMl0sdFsxM109ZVsxXSptK2VbNV0qditlWzldKmcrZVsxM10sdFsxNF09ZVsyXSptK2VbNl0qditlWzEwXSpnK2VbMTRdLHRbMTVdPWVbM10qbStlWzddKnYrZVsxMV0qZytlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLHU9ZVs2XSxjPWVbN10saD1lWzhdLGY9ZVs5XSxkPWVbMTBdLHA9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT11LHRbN109Yyx0WzhdPWgsdFs5XT1mLHRbMTBdPWQsdFsxMV09cCx0WzEyXT1uKm0rcyp2K2gqZytlWzEyXSx0WzEzXT1pKm0rbCp2K2YqZytlWzEzXSx0WzE0XT1hKm0rdSp2K2QqZytlWzE0XSx0WzE1XT1vKm0rYyp2K3AqZytlWzE1XSksdH1lLmV4cG9ydHM9bn0se31dLDE4OTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9ZS5leHBvcnRzPW59LHt9XSwxOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0WzBdPTEvZVswXTticmVhaztjYXNlIDQ6aSh0LGUpO2JyZWFrO2Nhc2UgOTphKHQsZSk7YnJlYWs7Y2FzZSAxNjpvKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnRseSBzdXBwb3J0cyBtYXRyaWNlcyB1cCB0byA0eDQiKX1yZXR1cm4gdH1lLmV4cG9ydHM9bjt2YXIgaT10KCJnbC1tYXQyL2ludmVydCIpLGE9dCgiZ2wtbWF0My9pbnZlcnQiKSxvPXQoImdsLW1hdDQvaW52ZXJ0Iil9LHsiZ2wtbWF0Mi9pbnZlcnQiOjE3MSwiZ2wtbWF0My9pbnZlcnQiOjE3MiwiZ2wtbWF0NC9pbnZlcnQiOjE3OX1dLDE5MTpbZnVuY3Rpb24odCxlLHIpe3IuZ2xNYXRyaXg9dCgiLi9nbC1tYXRyaXgvY29tbW9uLmpzIiksci5tYXQyPXQoIi4vZ2wtbWF0cml4L21hdDIuanMiKSxyLm1hdDJkPXQoIi4vZ2wtbWF0cml4L21hdDJkLmpzIiksci5tYXQzPXQoIi4vZ2wtbWF0cml4L21hdDMuanMiKSxyLm1hdDQ9dCgiLi9nbC1tYXRyaXgvbWF0NC5qcyIpLHIucXVhdD10KCIuL2dsLW1hdHJpeC9xdWF0LmpzIiksci52ZWMyPXQoIi4vZ2wtbWF0cml4L3ZlYzIuanMiKSxyLnZlYzM9dCgiLi9nbC1tYXRyaXgvdmVjMy5qcyIpLHIudmVjND10KCIuL2dsLW1hdHJpeC92ZWM0LmpzIil9LHsiLi9nbC1tYXRyaXgvY29tbW9uLmpzIjoxOTIsIi4vZ2wtbWF0cml4L21hdDIuanMiOjE5MywiLi9nbC1tYXRyaXgvbWF0MmQuanMiOjE5NCwiLi9nbC1tYXRyaXgvbWF0My5qcyI6MTk1LCIuL2dsLW1hdHJpeC9tYXQ0LmpzIjoxOTYsIi4vZ2wtbWF0cml4L3F1YXQuanMiOjE5NywiLi9nbC1tYXRyaXgvdmVjMi5qcyI6MTk4LCIuL2dsLW1hdHJpeC92ZWMzLmpzIjoxOTksIi4vZ2wtbWF0cml4L3ZlYzQuanMiOjIwMH1dLDE5MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O24uRVBTSUxPTj0xZS02LG4uQVJSQVlfVFlQRT0idW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0MzJBcnJheT9GbG9hdDMyQXJyYXk6QXJyYXksbi5SQU5ET009TWF0aC5yYW5kb20sbi5FTkFCTEVfU0lNRD0hMSxuLlNJTURfQVZBSUxBQkxFPW4uQVJSQVlfVFlQRT09PUZsb2F0MzJBcnJheSYmIlNJTUQiaW4gdGhpcyxuLlVTRV9TSU1EPW4uRU5BQkxFX1NJTUQmJm4uU0lNRF9BVkFJTEFCTEUsbi5zZXRNYXRyaXhBcnJheVR5cGU9ZnVuY3Rpb24odCl7bi5BUlJBWV9UWVBFPXR9O3ZhciBpPU1hdGguUEkvMTgwO24udG9SYWRpYW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqaX0sbi5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnModCksTWF0aC5hYnMoZSkpfSxlLmV4cG9ydHM9bn0se31dLDE5MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxpLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9LGkuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxpLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bmV3IG4uQVJSQVlfVFlQRSg0KTtyZXR1cm4gYVswXT10LGFbMV09ZSxhWzJdPXIsYVszXT1pLGF9LGkuc2V0PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0fSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXt2YXIgcj1lWzFdO3RbMV09ZVsyXSx0WzJdPXJ9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzJdLHRbMl09ZVsxXSx0WzNdPWVbM107cmV0dXJuIHR9LGkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqYS1pKm47cmV0dXJuIG8/KG89MS9vLHRbMF09YSpvLHRbMV09LW4qbyx0WzJdPS1pKm8sdFszXT1yKm8sdCk6bnVsbH0saS5hZGpvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdFswXT1lWzNdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPXIsdH0saS5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXtyZXR1cm4gdFswXSp0WzNdLXRbMl0qdFsxXX0saS5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdLHU9clsyXSxjPXJbM107cmV0dXJuIHRbMF09bipzK2EqbCx0WzFdPWkqcytvKmwsdFsyXT1uKnUrYSpjLHRbM109aSp1K28qYyx0fSxpLm11bD1pLm11bHRpcGx5LGkucm90YXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwrYSpzLHRbMV09aSpsK28qcyx0WzJdPW4qLXMrYSpsLHRbM109aSotcytvKmwsdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdO3JldHVybiB0WzBdPW4qcyx0WzFdPWkqcyx0WzJdPWEqbCx0WzNdPW8qbCx0fSxpLmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0tcix0WzNdPW4sdH0saS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPWVbMV0sdH0saS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuIm1hdDIoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIpIn0saS5mcm9iPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codFswXSwyKStNYXRoLnBvdyh0WzFdLDIpK01hdGgucG93KHRbMl0sMikrTWF0aC5wb3codFszXSwyKSl9LGkuTERVPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzJdPW5bMl0vblswXSxyWzBdPW5bMF0sclsxXT1uWzFdLHJbM109blszXS10WzJdKnJbMV0sW3QsZSxyXX0saS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdFszXT1lWzNdLXJbM10sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM10scz1lWzBdLGw9ZVsxXSx1PWVbMl0sYz1lWzNdO3JldHVybiBNYXRoLmFicyhyLXMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGktbCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKGwpKSYmTWF0aC5hYnMoYS11KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnModSkpJiZNYXRoLmFicyhvLWMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyhjKSl9LGkubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0fSxpLm11bHRpcGx5U2NhbGFyQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHR9LGUuZXhwb3J0cz1pfSx7Ii4vY29tbW9uLmpzIjoxOTJ9XSwxOTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NvbW1vbi5qcyIpLGk9e307aS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbi5BUlJBWV9UWVBFKDYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT0wLHRbNV09MCx0fSxpLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuLkFSUkFZX1RZUEUoNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGV9LGkuY29weT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFs0XT1lWzRdLHRbNV09ZVs1XSx0fSxpLmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT0wLHRbNV09MCx0fSxpLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxlLHIsaSxhLG8pe3ZhciBzPW5ldyBuLkFSUkFZX1RZUEUoNik7cmV0dXJuIHNbMF09dCxzWzFdPWUsc1syXT1yLHNbM109aSxzWzRdPWEsc1s1XT1vLHN9LGkuc2V0PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0WzNdPWksdFs0XT1hLHRbNV09byx0fSxpLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPXIqYS1uKmk7cmV0dXJuIGw/KGw9MS9sLHRbMF09YSpsLHRbMV09LW4qbCx0WzJdPS1pKmwsdFszXT1yKmwsdFs0XT0oaSpzLWEqbykqbCx0WzVdPShuKm8tcipzKSpsLHQpOm51bGx9LGkuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0qdFszXS10WzFdKnRbMl19LGkubXVsdGlwbHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PXJbMF0sYz1yWzFdLGg9clsyXSxmPXJbM10sZD1yWzRdLHA9cls1XTtyZXR1cm4gdFswXT1uKnUrYSpjLHRbMV09aSp1K28qYyx0WzJdPW4qaCthKmYsdFszXT1pKmgrbypmLHRbNF09bipkK2EqcCtzLHRbNV09aSpkK28qcCtsLHR9LGkubXVsPWkubXVsdGlwbHksaS5yb3RhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PU1hdGguc2luKHIpLGM9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bipjK2EqdSx0WzFdPWkqYytvKnUsdFsyXT1uKi11K2EqYyx0WzNdPWkqLXUrbypjLHRbNF09cyx0WzVdPWwsdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLHU9clswXSxjPXJbMV07cmV0dXJuIHRbMF09bip1LHRbMV09aSp1LHRbMl09YSpjLHRbM109bypjLHRbNF09cyx0WzVdPWwsdH0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PXJbMF0sYz1yWzFdO3JldHVybiB0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1uKnUrYSpjK3MsdFs1XT1pKnUrbypjK2wsdH0saS5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09LXIsdFszXT1uLHRbNF09MCx0WzVdPTAsdH0saS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPWVbMV0sdFs0XT0wLHRbNV09MCx0fSxpLmZyb21UcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT1lWzBdLHRbNV09ZVsxXSx0fSxpLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4ibWF0MmQoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIsICIrdFs0XSsiLCAiK3RbNV0rIikifSxpLmZyb2I9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0WzBdLDIpK01hdGgucG93KHRbMV0sMikrTWF0aC5wb3codFsyXSwyKStNYXRoLnBvdyh0WzNdLDIpK01hdGgucG93KHRbNF0sMikrTWF0aC5wb3codFs1XSwyKSsxKX0saS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0WzRdPWVbNF0rcls0XSx0WzVdPWVbNV0rcls1XSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdFszXT1lWzNdLXJbM10sdFs0XT1lWzRdLXJbNF0sdFs1XT1lWzVdLXJbNV0sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLm11bHRpcGx5U2NhbGFyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdFs0XT1lWzRdKnIsdFs1XT1lWzVdKnIsdH0saS5tdWx0aXBseVNjYWxhckFuZEFkZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdFszXT1lWzNdK3JbM10qbix0WzRdPWVbNF0rcls0XSpuLHRbNV09ZVs1XStyWzVdKm4sdH0saS5leGFjdEVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXSYmdFs0XT09PWVbNF0mJnRbNV09PT1lWzVdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM10scz10WzRdLGw9dFs1XSx1PWVbMF0sYz1lWzFdLGg9ZVsyXSxmPWVbM10sZD1lWzRdLHA9ZVs1XTtyZXR1cm4gTWF0aC5hYnMoci11KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMociksTWF0aC5hYnModSkpJiZNYXRoLmFicyhpLWMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhjKSkmJk1hdGguYWJzKGEtaCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGEpLE1hdGguYWJzKGgpKSYmTWF0aC5hYnMoby1mKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMobyksTWF0aC5hYnMoZikpJiZNYXRoLmFicyhzLWQpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhzKSxNYXRoLmFicyhkKSkmJk1hdGguYWJzKGwtcCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGwpLE1hdGguYWJzKHApKX0sZS5leHBvcnRzPWl9LHsiLi9jb21tb24uanMiOjE5Mn1dLDE5NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoOSk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGkuZnJvbU1hdDQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzRdLHRbNF09ZVs1XSx0WzVdPWVbNl0sdFs2XT1lWzhdLHRbN109ZVs5XSx0WzhdPWVbMTBdLHR9LGkuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4uQVJSQVlfVFlQRSg5KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZX0saS5jb3B5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHR9LGkuZnJvbVZhbHVlcz1mdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSl7dmFyIGM9bmV3IG4uQVJSQVlfVFlQRSg5KTtyZXR1cm4gY1swXT10LGNbMV09ZSxjWzJdPXIsY1szXT1pLGNbNF09YSxjWzVdPW8sY1s2XT1zLGNbN109bCxjWzhdPXUsY30saS5zZXQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsdSl7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0WzRdPWEsdFs1XT1vLHRbNl09cyx0WzddPWwsdFs4XT11LHR9LGkuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGkudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVs1XTt0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109cix0WzVdPWVbN10sdFs2XT1uLHRbN109aX1lbHNlIHRbMF09ZVswXSx0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109ZVsxXSx0WzRdPWVbNF0sdFs1XT1lWzddLHRbNl09ZVsyXSx0WzddPWVbNV0sdFs4XT1lWzhdO3JldHVybiB0fSxpLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sdT1lWzddLGM9ZVs4XSxoPWMqby1zKnUsZj0tYyphK3MqbCxkPXUqYS1vKmwscD1yKmgrbipmK2kqZDtyZXR1cm4gcD8ocD0xL3AsdFswXT1oKnAsdFsxXT0oLWMqbitpKnUpKnAsdFsyXT0ocypuLWkqbykqcCx0WzNdPWYqcCx0WzRdPShjKnItaSpsKSpwLHRbNV09KC1zKnIraSphKSpwLHRbNl09ZCpwLHRbN109KC11KnIrbipsKSpwLHRbOF09KG8qci1uKmEpKnAsdCk6bnVsbH0saS5hZGpvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSx1PWVbN10sYz1lWzhdO3JldHVybiB0WzBdPW8qYy1zKnUsdFsxXT1pKnUtbipjLHRbMl09bipzLWkqbyx0WzNdPXMqbC1hKmMsdFs0XT1yKmMtaSpsLHRbNV09aSphLXIqcyx0WzZdPWEqdS1vKmwsdFs3XT1uKmwtcip1LHRbOF09cipvLW4qYSx0fSxpLmRldGVybWluYW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLHU9dFs4XTtyZXR1cm4gZSoodSphLW8qbCkrciooLXUqaStvKnMpK24qKGwqaS1hKnMpfSxpLm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sdT1lWzZdLGM9ZVs3XSxoPWVbOF0sZj1yWzBdLGQ9clsxXSxwPXJbMl0sbT1yWzNdLHY9cls0XSxnPXJbNV0seT1yWzZdLGI9cls3XSx4PXJbOF07cmV0dXJuIHRbMF09ZipuK2QqbytwKnUsdFsxXT1mKmkrZCpzK3AqYyx0WzJdPWYqYStkKmwrcCpoLHRbM109bSpuK3YqbytnKnUsdFs0XT1tKmkrdipzK2cqYyx0WzVdPW0qYSt2KmwrZypoLHRbNl09eSpuK2Iqbyt4KnUsdFs3XT15KmkrYipzK3gqYyx0WzhdPXkqYStiKmwreCpoLHR9LGkubXVsPWkubXVsdGlwbHksaS50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PWVbNl0sYz1lWzddLGg9ZVs4XSxmPXJbMF0sZD1yWzFdO3JldHVybiB0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWYqbitkKm8rdSx0WzddPWYqaStkKnMrYyx0WzhdPWYqYStkKmwraCx0fSxpLnJvdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLHU9ZVs2XSxjPWVbN10saD1lWzhdLGY9TWF0aC5zaW4ociksZD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1kKm4rZipvLHRbMV09ZCppK2Yqcyx0WzJdPWQqYStmKmwsdFszXT1kKm8tZipuLHRbNF09ZCpzLWYqaSx0WzVdPWQqbC1mKmEsdFs2XT11LHRbN109Yyx0WzhdPWgsdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIHRbMF09biplWzBdLHRbMV09biplWzFdLHRbMl09biplWzJdLHRbM109aSplWzNdLHRbNF09aSplWzRdLHRbNV09aSplWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHR9LGkuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09ZVswXSx0WzddPWVbMV0sdFs4XT0xLHR9LGkuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGkuZnJvbVNjYWxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09ZVsxXSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0saS5mcm9tTWF0MmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPTAsdFszXT1lWzJdLHRbNF09ZVszXSx0WzVdPTAsdFs2XT1lWzRdLHRbN109ZVs1XSx0WzhdPTEsdH0saS5mcm9tUXVhdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yK3Iscz1uK24sbD1pK2ksdT1yKm8sYz1uKm8saD1uKnMsZj1pKm8sZD1pKnMscD1pKmwsbT1hKm8sdj1hKnMsZz1hKmw7cmV0dXJuIHRbMF09MS1oLXAsdFszXT1jLWcsdFs2XT1mK3YsdFsxXT1jK2csdFs0XT0xLXUtcCx0WzddPWQtbSx0WzJdPWYtdix0WzVdPWQrbSx0WzhdPTEtdS1oLHR9LGkubm9ybWFsRnJvbU1hdDQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLHU9ZVs3XSxjPWVbOF0saD1lWzldLGY9ZVsxMF0sZD1lWzExXSxwPWVbMTJdLG09ZVsxM10sdj1lWzE0XSxnPWVbMTVdLHk9cipzLW4qbyxiPXIqbC1pKm8seD1yKnUtYSpvLF89bipsLWkqcyx3PW4qdS1hKnMsTT1pKnUtYSpsLGs9YyptLWgqcCxBPWMqdi1mKnAsVD1jKmctZCpwLFM9aCp2LWYqbSxFPWgqZy1kKm0sTD1mKmctZCp2LEM9eSpMLWIqRSt4KlMrXypULXcqQStNKms7cmV0dXJuIEM/KEM9MS9DLHRbMF09KHMqTC1sKkUrdSpTKSpDLHRbMV09KGwqVC1vKkwtdSpBKSpDLHRbMl09KG8qRS1zKlQrdSprKSpDLHRbM109KGkqRS1uKkwtYSpTKSpDLHRbNF09KHIqTC1pKlQrYSpBKSpDLHRbNV09KG4qVC1yKkUtYSprKSpDLHRbNl09KG0qTS12KncrZypfKSpDLHRbN109KHYqeC1wKk0tZypiKSpDLHRbOF09KHAqdy1tKngrZyp5KSpDLHQpOm51bGx9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQzKCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIpIn0saS5mcm9iPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codFswXSwyKStNYXRoLnBvdyh0WzFdLDIpK01hdGgucG93KHRbMl0sMikrTWF0aC5wb3codFszXSwyKStNYXRoLnBvdyh0WzRdLDIpK01hdGgucG93KHRbNV0sMikrTWF0aC5wb3codFs2XSwyKStNYXRoLnBvdyh0WzddLDIpK01hdGgucG93KHRbOF0sMikpfSxpLmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHRbNF09ZVs0XStyWzRdLHRbNV09ZVs1XStyWzVdLHRbNl09ZVs2XStyWzZdLHRbN109ZVs3XStyWzddLHRbOF09ZVs4XStyWzhdLHR9LGkuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0WzRdPWVbNF0tcls0XSx0WzVdPWVbNV0tcls1XSx0WzZdPWVbNl0tcls2XSx0WzddPWVbN10tcls3XSx0WzhdPWVbOF0tcls4XSx0fSxpLnN1Yj1pLnN1YnRyYWN0LGkubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0WzRdPWVbNF0qcix0WzVdPWVbNV0qcix0WzZdPWVbNl0qcix0WzddPWVbN10qcix0WzhdPWVbOF0qcix0fSxpLm11bHRpcGx5U2NhbGFyQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHRbNF09ZVs0XStyWzRdKm4sdFs1XT1lWzVdK3JbNV0qbix0WzZdPWVbNl0rcls2XSpuLHRbN109ZVs3XStyWzddKm4sdFs4XT1lWzhdK3JbOF0qbix0fSxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdJiZ0WzRdPT09ZVs0XSYmdFs1XT09PWVbNV0mJnRbNl09PT1lWzZdJiZ0WzddPT09ZVs3XSYmdFs4XT09PWVbOF19LGkuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXSxzPXRbNF0sbD10WzVdLHU9dFs2XSxjPXRbN10saD10WzhdLGY9ZVswXSxkPWVbMV0scD1lWzJdLG09ZVszXSx2PWVbNF0sZz1lWzVdLHk9dFs2XSxiPWVbN10seD1lWzhdO3JldHVybiBNYXRoLmFicyhyLWYpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhmKSkmJk1hdGguYWJzKGktZCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKGQpKSYmTWF0aC5hYnMoYS1wKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnMocCkpJiZNYXRoLmFicyhvLW0pPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyhtKSkmJk1hdGguYWJzKHMtdik8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHMpLE1hdGguYWJzKHYpKSYmTWF0aC5hYnMobC1nKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMobCksTWF0aC5hYnMoZykpJiZNYXRoLmFicyh1LXkpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyh1KSxNYXRoLmFicyh5KSkmJk1hdGguYWJzKGMtYik8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGMpLE1hdGguYWJzKGIpKSYmTWF0aC5hYnMoaC14KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaCksTWF0aC5hYnMoeCkpfSxlLmV4cG9ydHM9aX0seyIuL2NvbW1vbi5qcyI6MTkyfV0sMTk2OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jb21tb24uanMiKSxpPXtzY2FsYXI6e30sU0lNRDp7fX07aS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbi5BUlJBWV9UWVBFKDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGkuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4uQVJSQVlfVFlQRSgxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LGkuZnJvbVZhbHVlcz1mdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2KXt2YXIgZz1uZXcgbi5BUlJBWV9UWVBFKDE2KTtyZXR1cm4gZ1swXT10LGdbMV09ZSxnWzJdPXIsZ1szXT1pLGdbNF09YSxnWzVdPW8sZ1s2XT1zLGdbN109bCxnWzhdPXUsZ1s5XT1jLGdbMTBdPWgsZ1sxMV09ZixnWzEyXT1kLGdbMTNdPXAsZ1sxNF09bSxnWzE1XT12LGd9LGkuc2V0PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sdil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0WzRdPWEsdFs1XT1vLHRbNl09cyx0WzddPWwsdFs4XT11LHRbOV09Yyx0WzEwXT1oLHRbMTFdPWYsdFsxMl09ZCx0WzEzXT1wLHRbMTRdPW0sdFsxNV09dix0fSxpLmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5zY2FsYXIudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVszXSxhPWVbNl0sbz1lWzddLHM9ZVsxMV07dFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09cix0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW4sdFs5XT1hLHRbMTFdPWVbMTRdLHRbMTJdPWksdFsxM109byx0WzE0XT1zfWVsc2UgdFswXT1lWzBdLHRbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPWVbMV0sdFs1XT1lWzVdLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09ZVsyXSx0WzldPWVbNl0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxNF0sdFsxMl09ZVszXSx0WzEzXT1lWzddLHRbMTRdPWVbMTFdLHRbMTVdPWVbMTVdO3JldHVybiB0fSxpLlNJTUQudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsdSxjLGg7cmV0dXJuIHI9U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLGk9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKSxvPVNJTUQuRmxvYXQzMng0LnNodWZmbGUocixuLDAsMSw0LDUpLHM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShpLGEsMCwxLDQsNSksbD1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG8scywwLDIsNCw2KSx1PVNJTUQuRmxvYXQzMng0LnNodWZmbGUobyxzLDEsMyw1LDcpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxsKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsdSksbz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHIsbiwyLDMsNiw3KSxzPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoaSxhLDIsMyw2LDcpLGM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShvLHMsMCwyLDQsNiksaD1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG8scywxLDMsNSw3KSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDgsYyksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwxMixoKSx0fSxpLnRyYW5zcG9zZT1uLlVTRV9TSU1EP2kuU0lNRC50cmFuc3Bvc2U6aS5zY2FsYXIudHJhbnNwb3NlLGkuc2NhbGFyLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sdT1lWzddLGM9ZVs4XSxoPWVbOV0sZj1lWzEwXSxkPWVbMTFdLHA9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLGc9ZVsxNV0seT1yKnMtbipvLGI9cipsLWkqbyx4PXIqdS1hKm8sXz1uKmwtaSpzLHc9bip1LWEqcyxNPWkqdS1hKmwsaz1jKm0taCpwLEE9Yyp2LWYqcCxUPWMqZy1kKnAsUz1oKnYtZiptLEU9aCpnLWQqbSxMPWYqZy1kKnYsQz15KkwtYipFK3gqUytfKlQtdypBK00qaztyZXR1cm4gQz8oQz0xL0MsdFswXT0ocypMLWwqRSt1KlMpKkMsdFsxXT0oaSpFLW4qTC1hKlMpKkMsdFsyXT0obSpNLXYqdytnKl8pKkMsdFszXT0oZip3LWgqTS1kKl8pKkMsdFs0XT0obCpULW8qTC11KkEpKkMsdFs1XT0ocipMLWkqVCthKkEpKkMsdFs2XT0odip4LXAqTS1nKmIpKkMsdFs3XT0oYypNLWYqeCtkKmIpKkMsdFs4XT0obypFLXMqVCt1KmspKkMsdFs5XT0obipULXIqRS1hKmspKkMsdFsxMF09KHAqdy1tKngrZyp5KSpDLHRbMTFdPShoKngtYyp3LWQqeSkqQyx0WzEyXT0ocypBLW8qUy1sKmspKkMsdFsxM109KHIqUy1uKkEraSprKSpDLHRbMTRdPShtKmItcCpfLXYqeSkqQyx0WzE1XT0oYypfLWgqYitmKnkpKkMsdCk6bnVsbH0saS5TSU1ELmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLHUsYyxoLGY9U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLGQ9U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLHA9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLG09U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKTtyZXR1cm4gbz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKGYsZCwwLDEsNCw1KSxuPVNJTUQuRmxvYXQzMng0LnNodWZmbGUocCxtLDAsMSw0LDUpLHI9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShvLG4sMCwyLDQsNiksbj1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG4sbywxLDMsNSw3KSxvPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoZixkLDIsMyw2LDcpLGE9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShwLG0sMiwzLDYsNyksaT1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG8sYSwwLDIsNCw2KSxhPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoYSxvLDEsMyw1LDcpLG89U0lNRC5GbG9hdDMyeDQubXVsKGksYSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMikscz1TSU1ELkZsb2F0MzJ4NC5tdWwobixvKSxsPVNJTUQuRmxvYXQzMng0Lm11bChyLG8pLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDIsMywwLDEpLHM9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChuLG8pLHMpLGw9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChyLG8pLGwpLGw9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShsLDIsMywwLDEpLG89U0lNRC5GbG9hdDMyeDQubXVsKG4saSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMikscz1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGEsbykscyksYz1TSU1ELkZsb2F0MzJ4NC5tdWwocixvKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDMsMCwxKSxzPVNJTUQuRmxvYXQzMng0LnN1YihzLFNJTUQuRmxvYXQzMng0Lm11bChhLG8pKSxjPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwocixvKSxjKSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywyLDMsMCwxKSxvPVNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG4sMiwzLDAsMSksYSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMiksaT1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGksMiwzLDAsMSkscz1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGksbykscyksdT1TSU1ELkZsb2F0MzJ4NC5tdWwocixvKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDMsMCwxKSxzPVNJTUQuRmxvYXQzMng0LnN1YihzLFNJTUQuRmxvYXQzMng0Lm11bChpLG8pKSx1PVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwocixvKSx1KSx1PVNJTUQuRmxvYXQzMng0LnN3aXp6bGUodSwyLDMsMCwxKSxvPVNJTUQuRmxvYXQzMng0Lm11bChyLG4pLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDEsMCwzLDIpLHU9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChhLG8pLHUpLGM9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChpLG8pLGMpLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDIsMywwLDEpLHU9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChhLG8pLHUpLGM9U0lNRC5GbG9hdDMyeDQuc3ViKGMsU0lNRC5GbG9hdDMyeDQubXVsKGksbykpLG89U0lNRC5GbG9hdDMyeDQubXVsKHIsYSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMiksbD1TSU1ELkZsb2F0MzJ4NC5zdWIobCxTSU1ELkZsb2F0MzJ4NC5tdWwoaSxvKSksdT1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKG4sbyksdSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMiwzLDAsMSksbD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGksbyksbCksdT1TSU1ELkZsb2F0MzJ4NC5zdWIodSxTSU1ELkZsb2F0MzJ4NC5tdWwobixvKSksbz1TSU1ELkZsb2F0MzJ4NC5tdWwocixpKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywxLDAsMywyKSxsPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoYSxvKSxsKSxjPVNJTUQuRmxvYXQzMng0LnN1YihjLFNJTUQuRmxvYXQzMng0Lm11bChuLG8pKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDMsMCwxKSxsPVNJTUQuRmxvYXQzMng0LnN1YihsLFNJTUQuRmxvYXQzMng0Lm11bChhLG8pKSxjPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwobixvKSxjKSxoPVNJTUQuRmxvYXQzMng0Lm11bChyLHMpLGg9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoaCwyLDMsMCwxKSxoKSxoPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGgsMSwwLDMsMiksaCksbz1TSU1ELkZsb2F0MzJ4NC5yZWNpcHJvY2FsQXBwcm94aW1hdGlvbihoKSxoPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5hZGQobyxvKSxTSU1ELkZsb2F0MzJ4NC5tdWwoaCxTSU1ELkZsb2F0MzJ4NC5tdWwobyxvKSkpLChoPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoaCwwLDAsMCwwKSk/KFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxTSU1ELkZsb2F0MzJ4NC5tdWwoaCxzKSksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LFNJTUQuRmxvYXQzMng0Lm11bChoLGwpKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDgsU0lNRC5GbG9hdDMyeDQubXVsKGgsdSkpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMTIsU0lNRC5GbG9hdDMyeDQubXVsKGgsYykpLHQpOm51bGx9LGkuaW52ZXJ0PW4uVVNFX1NJTUQ/aS5TSU1ELmludmVydDppLnNjYWxhci5pbnZlcnQsaS5zY2FsYXIuYWRqb2ludD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sdT1lWzddLGM9ZVs4XSxoPWVbOV0sZj1lWzEwXSxkPWVbMTFdLHA9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLGc9ZVsxNV07cmV0dXJuIHRbMF09cyooZipnLWQqdiktaCoobCpnLXUqdikrbSoobCpkLXUqZiksdFsxXT0tKG4qKGYqZy1kKnYpLWgqKGkqZy1hKnYpK20qKGkqZC1hKmYpKSx0WzJdPW4qKGwqZy11KnYpLXMqKGkqZy1hKnYpK20qKGkqdS1hKmwpLHRbM109LShuKihsKmQtdSpmKS1zKihpKmQtYSpmKStoKihpKnUtYSpsKSksdFs0XT0tKG8qKGYqZy1kKnYpLWMqKGwqZy11KnYpK3AqKGwqZC11KmYpKSx0WzVdPXIqKGYqZy1kKnYpLWMqKGkqZy1hKnYpK3AqKGkqZC1hKmYpLHRbNl09LShyKihsKmctdSp2KS1vKihpKmctYSp2KStwKihpKnUtYSpsKSksdFs3XT1yKihsKmQtdSpmKS1vKihpKmQtYSpmKStjKihpKnUtYSpsKSx0WzhdPW8qKGgqZy1kKm0pLWMqKHMqZy11Km0pK3AqKHMqZC11KmgpLHRbOV09LShyKihoKmctZCptKS1jKihuKmctYSptKStwKihuKmQtYSpoKSksdFsxMF09cioocypnLXUqbSktbyoobipnLWEqbSkrcCoobip1LWEqcyksdFsxMV09LShyKihzKmQtdSpoKS1vKihuKmQtYSpoKStjKihuKnUtYSpzKSksdFsxMl09LShvKihoKnYtZiptKS1jKihzKnYtbCptKStwKihzKmYtbCpoKSksdFsxM109ciooaCp2LWYqbSktYyoobip2LWkqbSkrcCoobipmLWkqaCksdFsxNF09LShyKihzKnYtbCptKS1vKihuKnYtaSptKStwKihuKmwtaSpzKSksdFsxNV09cioocypmLWwqaCktbyoobipmLWkqaCkrYyoobipsLWkqcyksdH0saS5TSU1ELmFkam9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCx1LGMsaCxmLGQscCxyPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwwKSxuPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw0KSxpPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw4KSxhPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwxMik7cmV0dXJuIGM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShyLG4sMCwxLDQsNSkscz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKGksYSwwLDEsNCw1KSxvPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoYyxzLDAsMiw0LDYpLHM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShzLGMsMSwzLDUsNyksYz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHIsbiwyLDMsNiw3KSx1PVNJTUQuRmxvYXQzMng0LnNodWZmbGUoaSxhLDIsMyw2LDcpLGw9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShjLHUsMCwyLDQsNiksdT1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHUsYywxLDMsNSw3KSxjPVNJTUQuRmxvYXQzMng0Lm11bChsLHUpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDEsMCwzLDIpLGg9U0lNRC5GbG9hdDMyeDQubXVsKHMsYyksZj1TSU1ELkZsb2F0MzJ4NC5tdWwobyxjKSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywyLDMsMCwxKSxoPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwocyxjKSxoKSxmPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwobyxjKSxmKSxmPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZiwyLDMsMCwxKSxjPVNJTUQuRmxvYXQzMng0Lm11bChzLGwpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDEsMCwzLDIpLGg9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bCh1LGMpLGgpLHA9U0lNRC5GbG9hdDMyeDQubXVsKG8sYyksCmM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDIsMywwLDEpLGg9U0lNRC5GbG9hdDMyeDQuc3ViKGgsU0lNRC5GbG9hdDMyeDQubXVsKHUsYykpLHA9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChvLGMpLHApLHA9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShwLDIsMywwLDEpLGM9U0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUocywyLDMsMCwxKSx1KSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywxLDAsMywyKSxsPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobCwyLDMsMCwxKSxoPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwobCxjKSxoKSxkPVNJTUQuRmxvYXQzMng0Lm11bChvLGMpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDIsMywwLDEpLGg9U0lNRC5GbG9hdDMyeDQuc3ViKGgsU0lNRC5GbG9hdDMyeDQubXVsKGwsYykpLGQ9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChvLGMpLGQpLGQ9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShkLDIsMywwLDEpLGM9U0lNRC5GbG9hdDMyeDQubXVsKG8scyksYz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGMsMSwwLDMsMiksZD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKHUsYyksZCkscD1TSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKGwsYykscCksYz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGMsMiwzLDAsMSksZD1TSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKHUsYyksZCkscD1TSU1ELkZsb2F0MzJ4NC5zdWIocCxTSU1ELkZsb2F0MzJ4NC5tdWwobCxjKSksYz1TSU1ELkZsb2F0MzJ4NC5tdWwobyx1KSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywxLDAsMywyKSxmPVNJTUQuRmxvYXQzMng0LnN1YihmLFNJTUQuRmxvYXQzMng0Lm11bChsLGMpKSxkPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwocyxjKSxkKSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywyLDMsMCwxKSxmPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwobCxjKSxmKSxkPVNJTUQuRmxvYXQzMng0LnN1YihkLFNJTUQuRmxvYXQzMng0Lm11bChzLGMpKSxjPVNJTUQuRmxvYXQzMng0Lm11bChvLGwpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDEsMCwzLDIpLGY9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bCh1LGMpLGYpLHA9U0lNRC5GbG9hdDMyeDQuc3ViKHAsU0lNRC5GbG9hdDMyeDQubXVsKHMsYykpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDIsMywwLDEpLGY9U0lNRC5GbG9hdDMyeDQuc3ViKGYsU0lNRC5GbG9hdDMyeDQubXVsKHUsYykpLHA9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChzLGMpLHApLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxoKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsZiksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw4LGQpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMTIscCksdH0saS5hZGpvaW50PW4uVVNFX1NJTUQ/aS5TSU1ELmFkam9pbnQ6aS5zY2FsYXIuYWRqb2ludCxpLmRldGVybWluYW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLHU9dFs4XSxjPXRbOV0saD10WzEwXSxmPXRbMTFdLGQ9dFsxMl0scD10WzEzXSxtPXRbMTRdLHY9dFsxNV07cmV0dXJuKGUqby1yKmEpKihoKnYtZiptKS0oZSpzLW4qYSkqKGMqdi1mKnApKyhlKmwtaSphKSooYyptLWgqcCkrKHIqcy1uKm8pKih1KnYtZipkKS0ocipsLWkqbykqKHUqbS1oKmQpKyhuKmwtaSpzKSoodSpwLWMqZCl9LGkuU0lNRC5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7dmFyIG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLGk9U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLG89U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKSxzPVNJTUQuRmxvYXQzMng0LmxvYWQociwwKSxsPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDAsMCwwLDApLG4pLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDEsMSwxLDEpLGkpLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDIsMiwyLDIpLGEpLFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHMsMywzLDMsMyksbykpKSk7U0lNRC5GbG9hdDMyeDQuc3RvcmUodCwwLGwpO3ZhciB1PVNJTUQuRmxvYXQzMng0LmxvYWQociw0KSxjPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDAsMCwwLDApLG4pLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDEsMSwxLDEpLGkpLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDIsMiwyLDIpLGEpLFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHUsMywzLDMsMyksbykpKSk7U0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LGMpO3ZhciBoPVNJTUQuRmxvYXQzMng0LmxvYWQociw4KSxmPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShoLDAsMCwwLDApLG4pLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShoLDEsMSwxLDEpLGkpLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShoLDIsMiwyLDIpLGEpLFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGgsMywzLDMsMyksbykpKSk7U0lNRC5GbG9hdDMyeDQuc3RvcmUodCw4LGYpO3ZhciBkPVNJTUQuRmxvYXQzMng0LmxvYWQociwxMikscD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZCwwLDAsMCwwKSxuKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZCwxLDEsMSwxKSxpKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZCwyLDIsMiwyKSxhKSxTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShkLDMsMywzLDMpLG8pKSkpO3JldHVybiBTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDEyLHApLHR9LGkuc2NhbGFyLm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sdT1lWzZdLGM9ZVs3XSxoPWVbOF0sZj1lWzldLGQ9ZVsxMF0scD1lWzExXSxtPWVbMTJdLHY9ZVsxM10sZz1lWzE0XSx5PWVbMTVdLGI9clswXSx4PXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT1iKm4reCpzK18qaCt3Km0sdFsxXT1iKmkreCpsK18qZit3KnYsdFsyXT1iKmEreCp1K18qZCt3KmcsdFszXT1iKm8reCpjK18qcCt3KnksYj1yWzRdLHg9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09YipuK3gqcytfKmgrdyptLHRbNV09YippK3gqbCtfKmYrdyp2LHRbNl09YiphK3gqdStfKmQrdypnLHRbN109YipvK3gqYytfKnArdyp5LGI9cls4XSx4PXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09YipuK3gqcytfKmgrdyptLHRbOV09YippK3gqbCtfKmYrdyp2LHRbMTBdPWIqYSt4KnUrXypkK3cqZyx0WzExXT1iKm8reCpjK18qcCt3KnksYj1yWzEyXSx4PXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT1iKm4reCpzK18qaCt3Km0sdFsxM109YippK3gqbCtfKmYrdyp2LHRbMTRdPWIqYSt4KnUrXypkK3cqZyx0WzE1XT1iKm8reCpjK18qcCt3KnksdH0saS5tdWx0aXBseT1uLlVTRV9TSU1EP2kuU0lNRC5tdWx0aXBseTppLnNjYWxhci5tdWx0aXBseSxpLm11bD1pLm11bHRpcGx5LGkuc2NhbGFyLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLHUsYyxoLGYsZCxwLG09clswXSx2PXJbMV0sZz1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSptK2VbNF0qditlWzhdKmcrZVsxMl0sdFsxM109ZVsxXSptK2VbNV0qditlWzldKmcrZVsxM10sdFsxNF09ZVsyXSptK2VbNl0qditlWzEwXSpnK2VbMTRdLHRbMTVdPWVbM10qbStlWzddKnYrZVsxMV0qZytlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLHU9ZVs2XSxjPWVbN10saD1lWzhdLGY9ZVs5XSxkPWVbMTBdLHA9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT11LHRbN109Yyx0WzhdPWgsdFs5XT1mLHRbMTBdPWQsdFsxMV09cCx0WzEyXT1uKm0rcyp2K2gqZytlWzEyXSx0WzEzXT1pKm0rbCp2K2YqZytlWzEzXSx0WzE0XT1hKm0rdSp2K2QqZytlWzE0XSx0WzE1XT1vKm0rYyp2K3AqZytlWzE1XSksdH0saS5TSU1ELnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLGk9U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLG89U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKSxzPVNJTUQuRmxvYXQzMng0KHJbMF0sclsxXSxyWzJdLDApO2UhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdKSxuPVNJTUQuRmxvYXQzMng0Lm11bChuLFNJTUQuRmxvYXQzMng0LnN3aXp6bGUocywwLDAsMCwwKSksaT1TSU1ELkZsb2F0MzJ4NC5tdWwoaSxTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHMsMSwxLDEsMSkpLGE9U0lNRC5GbG9hdDMyeDQubXVsKGEsU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDIsMiwyLDIpKTt2YXIgbD1TSU1ELkZsb2F0MzJ4NC5hZGQobixTSU1ELkZsb2F0MzJ4NC5hZGQoaSxTSU1ELkZsb2F0MzJ4NC5hZGQoYSxvKSkpO3JldHVybiBTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDEyLGwpLHR9LGkudHJhbnNsYXRlPW4uVVNFX1NJTUQ/aS5TSU1ELnRyYW5zbGF0ZTppLnNjYWxhci50cmFuc2xhdGUsaS5zY2FsYXIuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LGkuU0lNRC5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89U0lNRC5GbG9hdDMyeDQoclswXSxyWzFdLHJbMl0sMCk7cmV0dXJuIG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxTSU1ELkZsb2F0MzJ4NC5tdWwobixTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMCwwLDAsMCkpKSxpPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw0KSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsU0lNRC5GbG9hdDMyeDQubXVsKGksU0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDEsMSwxLDEpKSksYT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsOCksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw4LFNJTUQuRmxvYXQzMng0Lm11bChhLFNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDIsMiwyKSkpLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LGkuc2NhbGU9bi5VU0VfU0lNRD9pLlNJTUQuc2NhbGU6aS5zY2FsYXIuc2NhbGUsaS5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2LGcseSxiLHgsXyx3LE0sayxBLFQsUyxFLEw9aVswXSxDPWlbMV0sej1pWzJdLEk9TWF0aC5zcXJ0KEwqTCtDKkMreip6KTtyZXR1cm4gTWF0aC5hYnMoSSk8bi5FUFNJTE9OP251bGw6KEk9MS9JLEwqPUksQyo9SSx6Kj1JLGE9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxzPTEtbyxsPWVbMF0sdT1lWzFdLGM9ZVsyXSxoPWVbM10sZj1lWzRdLGQ9ZVs1XSxwPWVbNl0sbT1lWzddLHY9ZVs4XSxnPWVbOV0seT1lWzEwXSxiPWVbMTFdLHg9TCpMKnMrbyxfPUMqTCpzK3oqYSx3PXoqTCpzLUMqYSxNPUwqQypzLXoqYSxrPUMqQypzK28sQT16KkMqcytMKmEsVD1MKnoqcytDKmEsUz1DKnoqcy1MKmEsRT16KnoqcytvLHRbMF09bCp4K2YqXyt2KncsdFsxXT11KngrZCpfK2cqdyx0WzJdPWMqeCtwKl8reSp3LHRbM109aCp4K20qXytiKncsdFs0XT1sKk0rZiprK3YqQSx0WzVdPXUqTStkKmsrZypBLHRbNl09YypNK3Aqayt5KkEsdFs3XT1oKk0rbSprK2IqQSx0WzhdPWwqVCtmKlMrdipFLHRbOV09dSpUK2QqUytnKkUsdFsxMF09YypUK3AqUyt5KkUsdFsxMV09aCpUK20qUytiKkUsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdCl9LGkuc2NhbGFyLnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLHU9ZVs4XSxjPWVbOV0saD1lWzEwXSxmPWVbMTFdO3JldHVybiBlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFs0XT1hKmkrdSpuLHRbNV09byppK2Mqbix0WzZdPXMqaStoKm4sdFs3XT1sKmkrZipuLHRbOF09dSppLWEqbix0WzldPWMqaS1vKm4sdFsxMF09aCppLXMqbix0WzExXT1mKmktbCpuLHR9LGkuU0lNRC5yb3RhdGVYPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLnNpbihyKSksaT1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLmNvcyhyKSk7ZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3ZhciBhPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw0KSxvPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw4KTtyZXR1cm4gU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoYSxpKSxTSU1ELkZsb2F0MzJ4NC5tdWwobyxuKSkpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCxTSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKG8saSksU0lNRC5GbG9hdDMyeDQubXVsKGEsbikpKSx0fSxpLnJvdGF0ZVg9bi5VU0VfU0lNRD9pLlNJTUQucm90YXRlWDppLnNjYWxhci5yb3RhdGVYLGkuc2NhbGFyLnJvdGF0ZVk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLHU9ZVs4XSxjPWVbOV0saD1lWzEwXSxmPWVbMTFdO3JldHVybiBlIT09dCYmKHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmktdSpuLHRbMV09byppLWMqbix0WzJdPXMqaS1oKm4sdFszXT1sKmktZipuLHRbOF09YSpuK3UqaSx0WzldPW8qbitjKmksdFsxMF09cypuK2gqaSx0WzExXT1sKm4rZippLHR9LGkuU0lNRC5yb3RhdGVZPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLnNpbihyKSksaT1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLmNvcyhyKSk7ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3ZhciBhPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwwKSxvPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw4KTtyZXR1cm4gU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwwLFNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwoYSxpKSxTSU1ELkZsb2F0MzJ4NC5tdWwobyxuKSkpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGEsbiksU0lNRC5GbG9hdDMyeDQubXVsKG8saSkpKSx0fSxpLnJvdGF0ZVk9bi5VU0VfU0lNRD9pLlNJTUQucm90YXRlWTppLnNjYWxhci5yb3RhdGVZLGkuc2NhbGFyLnJvdGF0ZVo9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLHU9ZVs0XSxjPWVbNV0saD1lWzZdLGY9ZVs3XTtyZXR1cm4gZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzBdPWEqaSt1Km4sdFsxXT1vKmkrYypuLHRbMl09cyppK2gqbix0WzNdPWwqaStmKm4sdFs0XT11KmktYSpuLHRbNV09YyppLW8qbix0WzZdPWgqaS1zKm4sdFs3XT1mKmktbCpuLHR9LGkuU0lNRC5yb3RhdGVaPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLnNpbihyKSksaT1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLmNvcyhyKSk7ZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTt2YXIgYT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsMCksbz1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsNCk7cmV0dXJuIFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGEsaSksU0lNRC5GbG9hdDMyeDQubXVsKG8sbikpKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsU0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChvLGkpLFNJTUQuRmxvYXQzMng0Lm11bChhLG4pKSksdH0saS5yb3RhdGVaPW4uVVNFX1NJTUQ/aS5TSU1ELnJvdGF0ZVo6aS5zY2FsYXIucm90YXRlWixpLmZyb21UcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPWVbMF0sdFsxM109ZVsxXSx0WzE0XT1lWzJdLHRbMTVdPTEsdH0saS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZVsxXSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZVsyXSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPXJbMF0sbD1yWzFdLHU9clsyXSxjPU1hdGguc3FydChzKnMrbCpsK3UqdSk7cmV0dXJuIE1hdGguYWJzKGMpPG4uRVBTSUxPTj9udWxsOihjPTEvYyxzKj1jLGwqPWMsdSo9YyxpPU1hdGguc2luKGUpLGE9TWF0aC5jb3MoZSksbz0xLWEsdFswXT1zKnMqbythLHRbMV09bCpzKm8rdSppLHRbMl09dSpzKm8tbCppLHRbM109MCx0WzRdPXMqbCpvLXUqaSx0WzVdPWwqbCpvK2EsdFs2XT11KmwqbytzKmksdFs3XT0wLHRbOF09cyp1Km8rbCppLHRbOV09bCp1Km8tcyppLHRbMTBdPXUqdSpvK2EsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHQpfSxpLmZyb21YUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09bix0WzZdPXIsdFs3XT0wLHRbOF09MCx0WzldPS1yLHRbMTBdPW4sdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGkuZnJvbVlSb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPTAsdFsyXT0tcix0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09cix0WzldPTAsdFsxMF09bix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5mcm9tWlJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0wLHRbNF09LXIsdFs1XT1uLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9bituLGw9aStpLHU9YSthLGM9bipzLGg9bipsLGY9bip1LGQ9aSpsLHA9aSp1LG09YSp1LHY9bypzLGc9bypsLHk9byp1O3JldHVybiB0WzBdPTEtKGQrbSksdFsxXT1oK3ksdFsyXT1mLWcsdFszXT0wLHRbNF09aC15LHRbNV09MS0oYyttKSx0WzZdPXArdix0WzddPTAsdFs4XT1mK2csdFs5XT1wLXYsdFsxMF09MS0oYytkKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH0saS5nZXRUcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMTJdLHRbMV09ZVsxM10sdFsyXT1lWzE0XSx0fSxpLmdldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXStlWzVdK2VbMTBdLG49MDtyZXR1cm4gcj4wPyhuPTIqTWF0aC5zcXJ0KHIrMSksdFszXT0uMjUqbix0WzBdPShlWzZdLWVbOV0pL24sdFsxXT0oZVs4XS1lWzJdKS9uLHRbMl09KGVbMV0tZVs0XSkvbik6ZVswXT5lWzVdJmVbMF0+ZVsxMF0/KG49MipNYXRoLnNxcnQoMStlWzBdLWVbNV0tZVsxMF0pLHRbM109KGVbNl0tZVs5XSkvbix0WzBdPS4yNSpuLHRbMV09KGVbMV0rZVs0XSkvbix0WzJdPShlWzhdK2VbMl0pL24pOmVbNV0+ZVsxMF0/KG49MipNYXRoLnNxcnQoMStlWzVdLWVbMF0tZVsxMF0pLHRbM109KGVbOF0tZVsyXSkvbix0WzBdPShlWzFdK2VbNF0pL24sdFsxXT0uMjUqbix0WzJdPShlWzZdK2VbOV0pL24pOihuPTIqTWF0aC5zcXJ0KDErZVsxMF0tZVswXS1lWzVdKSx0WzNdPShlWzFdLWVbNF0pL24sdFswXT0oZVs4XStlWzJdKS9uLHRbMV09KGVbNl0rZVs5XSkvbix0WzJdPS4yNSpuKSx0fSxpLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdLHM9ZVszXSxsPWkraSx1PWErYSxjPW8rbyxoPWkqbCxmPWkqdSxkPWkqYyxwPWEqdSxtPWEqYyx2PW8qYyxnPXMqbCx5PXMqdSxiPXMqYyx4PW5bMF0sXz1uWzFdLHc9blsyXTtyZXR1cm4gdFswXT0oMS0ocCt2KSkqeCx0WzFdPShmK2IpKngsdFsyXT0oZC15KSp4LHRbM109MCx0WzRdPShmLWIpKl8sdFs1XT0oMS0oaCt2KSkqXyx0WzZdPShtK2cpKl8sdFs3XT0wLHRbOF09KGQreSkqdyx0WzldPShtLWcpKncsdFsxMF09KDEtKGgrcCkpKncsdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9LGkuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZU9yaWdpbj1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sdT1hK2EsYz1vK28saD1zK3MsZj1hKnUsZD1hKmMscD1hKmgsbT1vKmMsdj1vKmgsZz1zKmgseT1sKnUsYj1sKmMseD1sKmgsXz1uWzBdLHc9blsxXSxNPW5bMl0saz1pWzBdLEE9aVsxXSxUPWlbMl07cmV0dXJuIHRbMF09KDEtKG0rZykpKl8sdFsxXT0oZCt4KSpfLHRbMl09KHAtYikqXyx0WzNdPTAsdFs0XT0oZC14KSp3LHRbNV09KDEtKGYrZykpKncsdFs2XT0odit5KSp3LHRbN109MCx0WzhdPShwK2IpKk0sdFs5XT0odi15KSpNLHRbMTBdPSgxLShmK20pKSpNLHRbMTFdPTAsdFsxMl09clswXStrLSh0WzBdKmsrdFs0XSpBK3RbOF0qVCksdFsxM109clsxXStBLSh0WzFdKmsrdFs1XSpBK3RbOV0qVCksdFsxNF09clsyXStULSh0WzJdKmsrdFs2XSpBK3RbMTBdKlQpLHRbMTVdPTEsdH0saS5mcm9tUXVhdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yK3Iscz1uK24sbD1pK2ksdT1yKm8sYz1uKm8saD1uKnMsZj1pKm8sZD1pKnMscD1pKmwsbT1hKm8sdj1hKnMsZz1hKmw7cmV0dXJuIHRbMF09MS1oLXAsdFsxXT1jK2csdFsyXT1mLXYsdFszXT0wLHRbNF09Yy1nLHRbNV09MS11LXAsdFs2XT1kK20sdFs3XT0wLHRbOF09Zit2LHRbOV09ZC1tLHRbMTBdPTEtdS1oLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpLmZydXN0dW09ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oci1lKSxsPTEvKGktbiksdT0xLyhhLW8pO3JldHVybiB0WzBdPTIqYSpzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTIqYSpsLHRbNl09MCx0WzddPTAsdFs4XT0ocitlKSpzLHRbOV09KGkrbikqbCx0WzEwXT0obythKSp1LHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1vKmEqMip1LHRbMTVdPTAsdH0saS5wZXJzcGVjdGl2ZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fSxpLnBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPU1hdGgudGFuKGUudXBEZWdyZWVzKk1hdGguUEkvMTgwKSxhPU1hdGgudGFuKGUuZG93bkRlZ3JlZXMqTWF0aC5QSS8xODApLG89TWF0aC50YW4oZS5sZWZ0RGVncmVlcypNYXRoLlBJLzE4MCkscz1NYXRoLnRhbihlLnJpZ2h0RGVncmVlcypNYXRoLlBJLzE4MCksbD0yLyhvK3MpLHU9Mi8oaSthKTtyZXR1cm4gdFswXT1sLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPXUsdFs2XT0wLHRbN109MCx0WzhdPS0oby1zKSpsKi41LHRbOV09KGktYSkqdSouNSx0WzEwXT1uLyhyLW4pLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1uKnIvKHItbiksdFsxNV09MCx0fSxpLm9ydGhvPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLHU9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqdSx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSp1LHRbMTVdPTEsdH0saS5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLHUsYyxoLGYsZCxwLG0sdj1lWzBdLGc9ZVsxXSx5PWVbMl0sYj1hWzBdLHg9YVsxXSxfPWFbMl0sdz1yWzBdLE09clsxXSxrPXJbMl07cmV0dXJuIE1hdGguYWJzKHYtdyk8bi5FUFNJTE9OJiZNYXRoLmFicyhnLU0pPG4uRVBTSUxPTiYmTWF0aC5hYnMoeS1rKTxuLkVQU0lMT04/aS5pZGVudGl0eSh0KTooZj12LXcsZD1nLU0scD15LWssbT0xL01hdGguc3FydChmKmYrZCpkK3AqcCksZio9bSxkKj1tLHAqPW0sbz14KnAtXypkLHM9XypmLWIqcCxsPWIqZC14KmYsbT1NYXRoLnNxcnQobypvK3MqcytsKmwpLG0/KG09MS9tLG8qPW0scyo9bSxsKj1tKToobz0wLHM9MCxsPTApLHU9ZCpsLXAqcyxjPXAqby1mKmwsaD1mKnMtZCpvLG09TWF0aC5zcXJ0KHUqdStjKmMraCpoKSxtPyhtPTEvbSx1Kj1tLGMqPW0saCo9bSk6KHU9MCxjPTAsaD0wKSx0WzBdPW8sdFsxXT11LHRbMl09Zix0WzNdPTAsdFs0XT1zLHRbNV09Yyx0WzZdPWQsdFs3XT0wLHRbOF09bCx0WzldPWgsdFsxMF09cCx0WzExXT0wLHRbMTJdPS0obyp2K3MqZytsKnkpLHRbMTNdPS0odSp2K2MqZytoKnkpLHRbMTRdPS0oZip2K2QqZytwKnkpLHRbMTVdPTEsdCl9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQ0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIsICIrdFs5XSsiLCAiK3RbMTBdKyIsICIrdFsxMV0rIiwgIit0WzEyXSsiLCAiK3RbMTNdKyIsICIrdFsxNF0rIiwgIit0WzE1XSsiKSJ9LGkuZnJvYj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0sMikrTWF0aC5wb3codFsxXSwyKStNYXRoLnBvdyh0WzJdLDIpK01hdGgucG93KHRbM10sMikrTWF0aC5wb3codFs0XSwyKStNYXRoLnBvdyh0WzVdLDIpK01hdGgucG93KHRbNl0sMikrTWF0aC5wb3codFs3XSwyKStNYXRoLnBvdyh0WzhdLDIpK01hdGgucG93KHRbOV0sMikrTWF0aC5wb3codFsxMF0sMikrTWF0aC5wb3codFsxMV0sMikrTWF0aC5wb3codFsxMl0sMikrTWF0aC5wb3codFsxM10sMikrTWF0aC5wb3codFsxNF0sMikrTWF0aC5wb3codFsxNV0sMikpfSxpLmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHRbNF09ZVs0XStyWzRdLHRbNV09ZVs1XStyWzVdLHRbNl09ZVs2XStyWzZdLHRbN109ZVs3XStyWzddLHRbOF09ZVs4XStyWzhdLHRbOV09ZVs5XStyWzldLHRbMTBdPWVbMTBdK3JbMTBdLHRbMTFdPWVbMTFdK3JbMTFdLHRbMTJdPWVbMTJdK3JbMTJdLHRbMTNdPWVbMTNdK3JbMTNdLHRbMTRdPWVbMTRdK3JbMTRdLHRbMTVdPWVbMTVdK3JbMTVdLHR9LGkuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0WzRdPWVbNF0tcls0XSx0WzVdPWVbNV0tcls1XSx0WzZdPWVbNl0tcls2XSx0WzddPWVbN10tcls3XSx0WzhdPWVbOF0tcls4XSx0WzldPWVbOV0tcls5XSx0WzEwXT1lWzEwXS1yWzEwXSx0WzExXT1lWzExXS1yWzExXSx0WzEyXT1lWzEyXS1yWzEyXSx0WzEzXT1lWzEzXS1yWzEzXSx0WzE0XT1lWzE0XS1yWzE0XSx0WzE1XT1lWzE1XS1yWzE1XSx0fSxpLnN1Yj1pLnN1YnRyYWN0LGkubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0WzRdPWVbNF0qcix0WzVdPWVbNV0qcix0WzZdPWVbNl0qcix0WzddPWVbN10qcix0WzhdPWVbOF0qcix0WzldPWVbOV0qcix0WzEwXT1lWzEwXSpyLHRbMTFdPWVbMTFdKnIsdFsxMl09ZVsxMl0qcix0WzEzXT1lWzEzXSpyLHRbMTRdPWVbMTRdKnIsdFsxNV09ZVsxNV0qcix0fSxpLm11bHRpcGx5U2NhbGFyQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHRbNF09ZVs0XStyWzRdKm4sdFs1XT1lWzVdK3JbNV0qbix0WzZdPWVbNl0rcls2XSpuLHRbN109ZVs3XStyWzddKm4sdFs4XT1lWzhdK3JbOF0qbix0WzldPWVbOV0rcls5XSpuLHRbMTBdPWVbMTBdK3JbMTBdKm4sdFsxMV09ZVsxMV0rclsxMV0qbix0WzEyXT1lWzEyXStyWzEyXSpuLHRbMTNdPWVbMTNdK3JbMTNdKm4sdFsxNF09ZVsxNF0rclsxNF0qbix0WzE1XT1lWzE1XStyWzE1XSpuLHR9LGkuZXhhY3RFcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM10mJnRbNF09PT1lWzRdJiZ0WzVdPT09ZVs1XSYmdFs2XT09PWVbNl0mJnRbN109PT1lWzddJiZ0WzhdPT09ZVs4XSYmdFs5XT09PWVbOV0mJnRbMTBdPT09ZVsxMF0mJnRbMTFdPT09ZVsxMV0mJnRbMTJdPT09ZVsxMl0mJnRbMTNdPT09ZVsxM10mJnRbMTRdPT09ZVsxNF0mJnRbMTVdPT09ZVsxNV19LGkuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXSxzPXRbNF0sbD10WzVdLHU9dFs2XSxjPXRbN10saD10WzhdLGY9dFs5XSxkPXRbMTBdLHA9dFsxMV0sbT10WzEyXSx2PXRbMTNdLGc9dFsxNF0seT10WzE1XSxiPWVbMF0seD1lWzFdLF89ZVsyXSx3PWVbM10sTT1lWzRdLGs9ZVs1XSxBPWVbNl0sVD1lWzddLFM9ZVs4XSxFPWVbOV0sTD1lWzEwXSxDPWVbMTFdLHo9ZVsxMl0sST1lWzEzXSxEPWVbMTRdLFA9ZVsxNV07cmV0dXJuIE1hdGguYWJzKHItYik8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKGIpKSYmTWF0aC5hYnMoaS14KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMoeCkpJiZNYXRoLmFicyhhLV8pPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhfKSkmJk1hdGguYWJzKG8tdyk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKG8pLE1hdGguYWJzKHcpKSYmTWF0aC5hYnMocy1NKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMocyksTWF0aC5hYnMoTSkpJiZNYXRoLmFicyhsLWspPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhsKSxNYXRoLmFicyhrKSkmJk1hdGguYWJzKHUtQSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHUpLE1hdGguYWJzKEEpKSYmTWF0aC5hYnMoYy1UKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYyksTWF0aC5hYnMoVCkpJiZNYXRoLmFicyhoLVMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhoKSxNYXRoLmFicyhTKSkmJk1hdGguYWJzKGYtRSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGYpLE1hdGguYWJzKEUpKSYmTWF0aC5hYnMoZC1MKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoZCksTWF0aC5hYnMoTCkpJiZNYXRoLmFicyhwLUMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhwKSxNYXRoLmFicyhDKSkmJk1hdGguYWJzKG0teik8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKG0pLE1hdGguYWJzKHopKSYmTWF0aC5hYnModi1JKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnModiksTWF0aC5hYnMoSSkpJiZNYXRoLmFicyhnLUQpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhnKSxNYXRoLmFicyhEKSkmJk1hdGguYWJzKHktUCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHkpLE1hdGguYWJzKFApKX0sZS5leHBvcnRzPWl9LHsiLi9jb21tb24uanMiOjE5Mn1dLDE5NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT10KCIuL21hdDMuanMiKSxhPXQoIi4vdmVjMy5qcyIpLG89dCgiLi92ZWM0LmpzIikscz17fTtzLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxzLnJvdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgdD1hLmNyZWF0ZSgpLGU9YS5mcm9tVmFsdWVzKDEsMCwwKSxyPWEuZnJvbVZhbHVlcygwLDEsMCk7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgbD1hLmRvdChpLG8pO3JldHVybiBsPC0uOTk5OTk5PyhhLmNyb3NzKHQsZSxpKSxhLmxlbmd0aCh0KTwxZS02JiZhLmNyb3NzKHQscixpKSxhLm5vcm1hbGl6ZSh0LHQpLHMuc2V0QXhpc0FuZ2xlKG4sdCxNYXRoLlBJKSxuKTpsPi45OTk5OTk/KG5bMF09MCxuWzFdPTAsblsyXT0wLG5bM109MSxuKTooYS5jcm9zcyh0LGksbyksblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT0xK2wscy5ub3JtYWxpemUobixuKSl9fSgpLHMuc2V0QXhlcz1mdW5jdGlvbigpe3ZhciB0PWkuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe3JldHVybiB0WzBdPW5bMF0sdFszXT1uWzFdLHRbNl09blsyXSx0WzFdPWlbMF0sdFs0XT1pWzFdLHRbN109aVsyXSx0WzJdPS1yWzBdLHRbNV09LXJbMV0sdFs4XT0tclsyXSxzLm5vcm1hbGl6ZShlLHMuZnJvbU1hdDMoZSx0KSl9fSgpLHMuY2xvbmU9by5jbG9uZSxzLmZyb21WYWx1ZXM9by5mcm9tVmFsdWVzLHMuY29weT1vLmNvcHkscy5zZXQ9by5zZXQscy5pZGVudGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0xLHR9LHMuc2V0QXhpc0FuZ2xlPWZ1bmN0aW9uKHQsZSxyKXtyKj0uNTt2YXIgbj1NYXRoLnNpbihyKTtyZXR1cm4gdFswXT1uKmVbMF0sdFsxXT1uKmVbMV0sdFsyXT1uKmVbMl0sdFszXT1NYXRoLmNvcyhyKSx0fSxzLmdldEF4aXNBbmdsZT1mdW5jdGlvbih0LGUpe3ZhciByPTIqTWF0aC5hY29zKGVbM10pLG49TWF0aC5zaW4oci8yKTtyZXR1cm4gMCE9bj8odFswXT1lWzBdL24sdFsxXT1lWzFdL24sdFsyXT1lWzJdL24pOih0WzBdPTEsdFsxXT0wLHRbMl09MCkscn0scy5hZGQ9by5hZGQscy5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdLHU9clsyXSxjPXJbM107cmV0dXJuIHRbMF09bipjK28qcytpKnUtYSpsLHRbMV09aSpjK28qbCthKnMtbip1LHRbMl09YSpjK28qdStuKmwtaSpzLHRbM109bypjLW4qcy1pKmwtYSp1LHR9LHMubXVsPXMubXVsdGlwbHkscy5zY2FsZT1vLnNjYWxlLHMucm90YXRlWD1mdW5jdGlvbih0LGUscil7cio9LjU7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPU1hdGguc2luKHIpLGw9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bipsK28qcyx0WzFdPWkqbCthKnMsdFsyXT1hKmwtaSpzLHRbM109bypsLW4qcyx0fSxzLnJvdGF0ZVk9ZnVuY3Rpb24odCxlLHIpe3IqPS41O3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbC1hKnMsdFsxXT1pKmwrbypzLHRbMl09YSpsK24qcyx0WzNdPW8qbC1pKnMsdH0scy5yb3RhdGVaPWZ1bmN0aW9uKHQsZSxyKXtyKj0uNTt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwraSpzLHRbMV09aSpsLW4qcyx0WzJdPWEqbCtvKnMsdFszXT1vKmwtYSpzLHR9LHMuY2FsY3VsYXRlVz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXTtyZXR1cm4gdFswXT1yLHRbMV09bix0WzJdPWksdFszXT1NYXRoLnNxcnQoTWF0aC5hYnMoMS1yKnItbipuLWkqaSkpLHR9LHMuZG90PW8uZG90LHMubGVycD1vLmxlcnAscy5zbGVycD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHU9ZVswXSxjPWVbMV0saD1lWzJdLGY9ZVszXSxkPXJbMF0scD1yWzFdLG09clsyXSx2PXJbM107cmV0dXJuIGE9dSpkK2MqcCtoKm0rZip2LGE8MCYmKGE9LWEsZD0tZCxwPS1wLG09LW0sdj0tdiksMS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKSx0WzBdPXMqdStsKmQsdFsxXT1zKmMrbCpwLHRbMl09cypoK2wqbSx0WzNdPXMqZitsKnYsdH0scy5zcWxlcnA9ZnVuY3Rpb24oKXt2YXIgdD1zLmNyZWF0ZSgpLGU9cy5jcmVhdGUoKTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxvLGwpe3JldHVybiBzLnNsZXJwKHQsbixvLGwpLHMuc2xlcnAoZSxpLGEsbCkscy5zbGVycChyLHQsZSwyKmwqKDEtbCkpLHJ9fSgpLHMuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqcituKm4raSppK2EqYSxzPW8/MS9vOjA7cmV0dXJuIHRbMF09LXIqcyx0WzFdPS1uKnMsdFsyXT0taSpzLHRbM109YSpzLHR9LHMuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109ZVszXSx0fSxzLmxlbmd0aD1vLmxlbmd0aCxzLmxlbj1zLmxlbmd0aCxzLnNxdWFyZWRMZW5ndGg9by5zcXVhcmVkTGVuZ3RoLHMuc3FyTGVuPXMuc3F1YXJlZExlbmd0aCxzLm5vcm1hbGl6ZT1vLm5vcm1hbGl6ZSxzLmZyb21NYXQzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lWzBdK2VbNF0rZVs4XTtpZihuPjApcj1NYXRoLnNxcnQobisxKSx0WzNdPS41KnIscj0uNS9yLHRbMF09KGVbNV0tZVs3XSkqcix0WzFdPShlWzZdLWVbMl0pKnIsdFsyXT0oZVsxXS1lWzNdKSpyO2Vsc2V7dmFyIGk9MDtlWzRdPmVbMF0mJihpPTEpLGVbOF0+ZVszKmkraV0mJihpPTIpO3ZhciBhPShpKzEpJTMsbz0oaSsyKSUzO3I9TWF0aC5zcXJ0KGVbMyppK2ldLWVbMyphK2FdLWVbMypvK29dKzEpLHRbaV09LjUqcixyPS41L3IsdFszXT0oZVszKmErb10tZVszKm8rYV0pKnIsdFthXT0oZVszKmEraV0rZVszKmkrYV0pKnIsdFtvXT0oZVszKm8raV0rZVszKmkrb10pKnJ9cmV0dXJuIHR9LHMuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJxdWF0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiKSJ9LHMuZXhhY3RFcXVhbHM9by5leGFjdEVxdWFscyxzLmVxdWFscz1vLmVxdWFscyxlLmV4cG9ydHM9c30seyIuL2NvbW1vbi5qcyI6MTkyLCIuL21hdDMuanMiOjE5NSwiLi92ZWMzLmpzIjoxOTksIi4vdmVjNC5qcyI6MjAwfV0sMTk4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jb21tb24uanMiKSxpPXt9O2kuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG4uQVJSQVlfVFlQRSgyKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0fSxpLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuLkFSUkFZX1RZUEUoMik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZX0saS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG4uQVJSQVlfVFlQRSgyKTtyZXR1cm4gclswXT10LHJbMV09ZSxyfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0fSxpLnNldD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdH0saS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdH0saS5tdWw9aS5tdWx0aXBseSxpLmRpdmlkZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHR9LGkuZGl2PWkuZGl2aWRlLGkuY2VpbD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguY2VpbChlWzBdKSx0WzFdPU1hdGguY2VpbChlWzFdKSx0fSxpLmZsb29yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdH0saS5taW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHR9LGkubWF4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0fSxpLnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHR9LGkuc2NhbGVBbmRBZGQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0fSxpLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9LGkuZGlzdD1pLmRpc3RhbmNlLGkuc3F1YXJlZERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdO3JldHVybiByKnIrbipufSxpLnNxckRpc3Q9aS5zcXVhcmVkRGlzdGFuY2UsaS5sZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV07cmV0dXJuIE1hdGguc3FydChlKmUrcipyKX0saS5sZW49aS5sZW5ndGgsaS5zcXVhcmVkTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO3JldHVybiBlKmUrcipyfSxpLnNxckxlbj1pLnNxdWFyZWRMZW5ndGgsaS5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHR9LGkuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0fSxpLm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9cipyK24qbjtyZXR1cm4gaT4wJiYoaT0xL01hdGguc3FydChpKSx0WzBdPWVbMF0qaSx0WzFdPWVbMV0qaSksdH0saS5kb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX0saS5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSpyWzFdLWVbMV0qclswXTtyZXR1cm4gdFswXT10WzFdPTAsdFsyXT1uLHR9LGkubGVycD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdH0saS5yYW5kb209ZnVuY3Rpb24odCxlKXtlPWV8fDE7dmFyIHI9MipuLlJBTkRPTSgpKk1hdGguUEk7cmV0dXJuIHRbMF09TWF0aC5jb3MocikqZSx0WzFdPU1hdGguc2luKHIpKmUsdH0saS50cmFuc2Zvcm1NYXQyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rclsyXSppLHRbMV09clsxXSpuK3JbM10qaSx0fSxpLnRyYW5zZm9ybU1hdDJkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rclsyXSppK3JbNF0sdFsxXT1yWzFdKm4rclszXSppK3JbNV0sdH0saS50cmFuc2Zvcm1NYXQzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rclszXSppK3JbNl0sdFsxXT1yWzFdKm4rcls0XSppK3JbN10sdH0saS50cmFuc2Zvcm1NYXQ0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbMTJdLHRbMV09clsxXSpuK3JbNV0qaStyWzEzXSx0fSxpLmZvckVhY2g9ZnVuY3Rpb24oKXt2YXIgdD1pLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihlLHIsbixpLGEsbyl7dmFyIHMsbDtmb3Iocnx8KHI9Miksbnx8KG49MCksbD1pP01hdGgubWluKGkqcituLGUubGVuZ3RoKTplLmxlbmd0aCxzPW47czxsO3MrPXIpdFswXT1lW3NdLHRbMV09ZVtzKzFdLGEodCx0LG8pLGVbc109dFswXSxlW3MrMV09dFsxXTtyZXR1cm4gZX19KCksaS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuInZlYzIoIit0WzBdKyIsICIrdFsxXSsiKSJ9LGkuZXhhY3RFcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9ZVswXSxvPWVbMV07cmV0dXJuIE1hdGguYWJzKHItYSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKGEpKSYmTWF0aC5hYnMoaS1vKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMobykpfSxlLmV4cG9ydHM9aX0seyIuL2NvbW1vbi5qcyI6MTkyfV0sMTk5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jb21tb24uanMiKSxpPXt9O2kuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG4uQVJSQVlfVFlQRSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH0saS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbi5BUlJBWV9UWVBFKDMpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlfSxpLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW5ldyBuLkFSUkFZX1RZUEUoMyk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGl9LGkuY29weT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fSxpLnNldD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdH0saS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdH0saS5tdWw9aS5tdWx0aXBseSxpLmRpdmlkZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHR9LGkuZGl2PWkuZGl2aWRlLGkuY2VpbD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguY2VpbChlWzBdKSx0WzFdPU1hdGguY2VpbChlWzFdKSx0WzJdPU1hdGguY2VpbChlWzJdKSx0fSxpLmZsb29yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9LGkubWluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdH0saS5tYXg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fSxpLnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9LGkuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0fSxpLnNjYWxlQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0fSxpLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkpfSxpLmRpc3Q9aS5kaXN0YW5jZSxpLnNxdWFyZWREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gcipyK24qbitpKml9LGkuc3FyRGlzdD1pLnNxdWFyZWREaXN0YW5jZSxpLmxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9LGkubGVuPWkubGVuZ3RoLGkuc3F1YXJlZExlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufSxpLnNxckxlbj1pLnNxdWFyZWRMZW5ndGgsaS5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdH0saS5pbnZlcnNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9LGkubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7cmV0dXJuIGE+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpLHR9LGkuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfSxpLmNyb3NzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl07cmV0dXJuIHRbMF09aSpsLWEqcyx0WzFdPWEqby1uKmwsdFsyXT1uKnMtaSpvLHR9LGkubGVycD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl07cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHR9LGkuaGVybWl0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89YSphLHM9byooMiphLTMpKzEsbD1vKihhLTIpK2EsdT1vKihhLTEpLGM9byooMy0yKmEpO3JldHVybiB0WzBdPWVbMF0qcytyWzBdKmwrblswXSp1K2lbMF0qYyx0WzFdPWVbMV0qcytyWzFdKmwrblsxXSp1K2lbMV0qYyx0WzJdPWVbMl0qcytyWzJdKmwrblsyXSp1K2lbMl0qYyx0fSxpLmJlemllcj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89MS1hLHM9bypvLGw9YSphLHU9cypvLGM9MyphKnMsaD0zKmwqbyxmPWwqYTtyZXR1cm4gdFswXT1lWzBdKnUrclswXSpjK25bMF0qaCtpWzBdKmYsdFsxXT1lWzFdKnUrclsxXSpjK25bMV0qaCtpWzFdKmYsdFsyXT1lWzJdKnUrclsyXSpjK25bMl0qaCtpWzJdKmYsdH0saS5yYW5kb209ZnVuY3Rpb24odCxlKXtlPWV8fDE7dmFyIHI9MipuLlJBTkRPTSgpKk1hdGguUEksaT0yKm4uUkFORE9NKCktMSxhPU1hdGguc3FydCgxLWkqaSkqZTtyZXR1cm4gdFswXT1NYXRoLmNvcyhyKSphLHRbMV09TWF0aC5zaW4ocikqYSx0WzJdPWkqZSx0fSxpLnRyYW5zZm9ybU1hdDQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fSxpLnRyYW5zZm9ybU1hdDM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH0saS50cmFuc2Zvcm1RdWF0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl0sdT1yWzNdLGM9dSpuK3MqYS1sKmksaD11KmkrbCpuLW8qYSxmPXUqYStvKmktcypuLGQ9LW8qbi1zKmktbCphO3JldHVybiB0WzBdPWMqdStkKi1vK2gqLWwtZiotcyx0WzFdPWgqdStkKi1zK2YqLW8tYyotbCx0WzJdPWYqdStkKi1sK2MqLXMtaCotbyx0fSxpLnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9W10sYT1bXTtyZXR1cm4gaVswXT1lWzBdLXJbMF0saVsxXT1lWzFdLXJbMV0saVsyXT1lWzJdLXJbMl0sYVswXT1pWzBdLGFbMV09aVsxXSpNYXRoLmNvcyhuKS1pWzJdKk1hdGguc2luKG4pLGFbMl09aVsxXSpNYXRoLnNpbihuKStpWzJdKk1hdGguY29zKG4pLHRbMF09YVswXStyWzBdLHRbMV09YVsxXStyWzFdLHRbMl09YVsyXStyWzJdLHR9LGkucm90YXRlWT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdO3JldHVybiBpWzBdPWVbMF0tclswXSxpWzFdPWVbMV0tclsxXSxpWzJdPWVbMl0tclsyXSxhWzBdPWlbMl0qTWF0aC5zaW4obikraVswXSpNYXRoLmNvcyhuKSxhWzFdPWlbMV0sYVsyXT1pWzJdKk1hdGguY29zKG4pLWlbMF0qTWF0aC5zaW4obiksdFswXT1hWzBdK3JbMF0sdFsxXT1hWzFdK3JbMV0sdFsyXT1hWzJdK3JbMl0sdH0saS5yb3RhdGVaPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVtdLGE9W107cmV0dXJuIGlbMF09ZVswXS1yWzBdLGlbMV09ZVsxXS1yWzFdLGlbMl09ZVsyXS1yWzJdLGFbMF09aVswXSpNYXRoLmNvcyhuKS1pWzFdKk1hdGguc2luKG4pLGFbMV09aVswXSpNYXRoLnNpbihuKStpWzFdKk1hdGguY29zKG4pLGFbMl09aVsyXSx0WzBdPWFbMF0rclswXSx0WzFdPWFbMV0rclsxXSx0WzJdPWFbMl0rclsyXSx0fSxpLmZvckVhY2g9ZnVuY3Rpb24oKXt2YXIgdD1pLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihlLHIsbixpLGEsbyl7dmFyIHMsbDtmb3Iocnx8KHI9Myksbnx8KG49MCksbD1pP01hdGgubWluKGkqcituLGUubGVuZ3RoKTplLmxlbmd0aCxzPW47czxsO3MrPXIpdFswXT1lW3NdLHRbMV09ZVtzKzFdLHRbMl09ZVtzKzJdLGEodCx0LG8pLGVbc109dFswXSxlW3MrMV09dFsxXSxlW3MrMl09dFsyXTtyZXR1cm4gZX19KCksaS5hbmdsZT1mdW5jdGlvbih0LGUpe3ZhciByPWkuZnJvbVZhbHVlcyh0WzBdLHRbMV0sdFsyXSksbj1pLmZyb21WYWx1ZXMoZVswXSxlWzFdLGVbMl0pO2kubm9ybWFsaXplKHIsciksaS5ub3JtYWxpemUobixuKTt2YXIgYT1pLmRvdChyLG4pO3JldHVybiBhPjE/MDpNYXRoLmFjb3MoYSl9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJ2ZWMzKCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIpIn0saS5leGFjdEVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPWVbMF0scz1lWzFdLGw9ZVsyXTtyZXR1cm4gTWF0aC5hYnMoci1vKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMociksTWF0aC5hYnMobykpJiZNYXRoLmFicyhpLXMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGEtbCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGEpLE1hdGguYWJzKGwpKX0sZS5leHBvcnRzPWl9LHsiLi9jb21tb24uanMiOjE5Mn1dLDIwMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCx0fSxpLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfSxpLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bmV3IG4uQVJSQVlfVFlQRSg0KTtyZXR1cm4gYVswXT10LGFbMV09ZSxhWzJdPXIsYVszXT1pLGF9LGkuY29weT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdH0saS5zZXQ9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9LGkuYWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdFszXT1lWzNdK3JbM10sdH0saS5zdWJ0cmFjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHRbM109ZVszXS1yWzNdLHR9LGkuc3ViPWkuc3VidHJhY3QsaS5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHRbM109ZVszXSpyWzNdLHR9LGkubXVsPWkubXVsdGlwbHksaS5kaXZpZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fSxpLmRpdj1pLmRpdmlkZSxpLmNlaWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmNlaWwoZVswXSksdFsxXT1NYXRoLmNlaWwoZVsxXSksdFsyXT1NYXRoLmNlaWwoZVsyXSksdFszXT1NYXRoLmNlaWwoZVszXSksdH0saS5mbG9vcj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguZmxvb3IoZVswXSksdFsxXT1NYXRoLmZsb29yKGVbMV0pLHRbMl09TWF0aC5mbG9vcihlWzJdKSx0WzNdPU1hdGguZmxvb3IoZVszXSksdH0saS5taW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oZVsyXSxyWzJdKSx0WzNdPU1hdGgubWluKGVbM10sclszXSksdH0saS5tYXg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0WzNdPU1hdGgubWF4KGVbM10sclszXSksdH0saS5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGgucm91bmQoZVswXSksdFsxXT1NYXRoLnJvdW5kKGVbMV0pLHRbMl09TWF0aC5yb3VuZChlWzJdKSx0WzNdPU1hdGgucm91bmQoZVszXSksdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHRbM109ZVszXSpyLHR9LGkuc2NhbGVBbmRBZGQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH0saS5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXSxhPWVbM10tdFszXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppK2EqYSl9LGkuZGlzdD1pLmRpc3RhbmNlLGkuc3F1YXJlZERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9LGkuc3FyRGlzdD1pLnNxdWFyZWREaXN0YW5jZSxpLmxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4raSppKX0saS5sZW49aS5sZW5ndGgsaS5zcXVhcmVkTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX0saS5zcXJMZW49aS5zcXVhcmVkTGVuZ3RoLGkubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109LWVbM10sdH0saS5pbnZlcnNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHRbM109MS9lWzNdLHR9LGkubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqcituKm4raSppK2EqYTtyZXR1cm4gbz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyksdH0saS5kb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfSxpLmxlcnA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdLHM9ZVszXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdFszXT1zK24qKHJbM10tcyksdH0saS5yYW5kb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHRbMF09bi5SQU5ET00oKSx0WzFdPW4uUkFORE9NKCksdFsyXT1uLlJBTkRPTSgpLHRbM109bi5SQU5ET00oKSxpLm5vcm1hbGl6ZSh0LHQpLGkuc2NhbGUodCx0LGUpLHR9LGkudHJhbnNmb3JtTWF0ND1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH0sCmkudHJhbnNmb3JtUXVhdD1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLHU9clszXSxjPXUqbitzKmEtbCppLGg9dSppK2wqbi1vKmEsZj11KmErbyppLXMqbixkPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT1jKnUrZCotbytoKi1sLWYqLXMsdFsxXT1oKnUrZCotcytmKi1vLWMqLWwsdFsyXT1mKnUrZCotbCtjKi1zLWgqLW8sdFszXT1lWzNdLHR9LGkuZm9yRWFjaD1mdW5jdGlvbigpe3ZhciB0PWkuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGksYSxvKXt2YXIgcyxsO2ZvcihyfHwocj00KSxufHwobj0wKSxsPWk/TWF0aC5taW4oaSpyK24sZS5sZW5ndGgpOmUubGVuZ3RoLHM9bjtzPGw7cys9cil0WzBdPWVbc10sdFsxXT1lW3MrMV0sdFsyXT1lW3MrMl0sdFszXT1lW3MrM10sYSh0LHQsbyksZVtzXT10WzBdLGVbcysxXT10WzFdLGVbcysyXT10WzJdLGVbcyszXT10WzNdO3JldHVybiBlfX0oKSxpLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4idmVjNCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIikifSxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM10scz1lWzBdLGw9ZVsxXSx1PWVbMl0sYz1lWzNdO3JldHVybiBNYXRoLmFicyhyLXMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGktbCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKGwpKSYmTWF0aC5hYnMoYS11KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnModSkpJiZNYXRoLmFicyhvLWMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyhjKSl9LGUuZXhwb3J0cz1pfSx7Ii4vY29tbW9uLmpzIjoxOTJ9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIGkodCxlLHIsaSxhKXtmb3IodmFyIG89bihpLG4ocixuKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmFbMF0qKDErb1swXSksLjUqYVsxXSooMS1vWzFdKV19ZnVuY3Rpb24gYSh0LGUpe2lmKDI9PT10Lmxlbmd0aCl7Zm9yKHZhciByPTAsbj0wLGk9MDtpPDI7KytpKXIrPU1hdGgucG93KGVbaV0tdFswXVtpXSwyKSxuKz1NYXRoLnBvdyhlW2ldLXRbMV1baV0sMik7cmV0dXJuIHI9TWF0aC5zcXJ0KHIpLG49TWF0aC5zcXJ0KG4pLHIrbjwxZS02P1sxLDBdOltuLyhyK24pLHIvKG4rcildfWlmKDM9PT10Lmxlbmd0aCl7dmFyIGE9WzAsMF07cmV0dXJuIHUodFswXSx0WzFdLHRbMl0sZSxhKSxsKHQsYSl9cmV0dXJuW119ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfWZ1bmN0aW9uIHModCxlLHIsbixzLGwpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm5bMCx0WzBdLnNsaWNlKCldO2Zvcih2YXIgdT1uZXcgQXJyYXkodC5sZW5ndGgpLGM9MDtjPHQubGVuZ3RoOysrYyl1W2NdPWkodFtjXSxyLG4scyxsKTtmb3IodmFyIGg9MCxmPTEvMCxjPTA7Yzx1Lmxlbmd0aDsrK2Mpe2Zvcih2YXIgZD0wLHA9MDtwPDI7KytwKWQrPU1hdGgucG93KHVbY11bcF0tZVtwXSwyKTtkPGYmJihmPWQsaD1jKX1mb3IodmFyIG09YSh1LGUpLHY9MCxjPTA7YzwzOysrYyl7aWYobVtjXTwtLjAwMXx8bVtjXT4xLjAwMDEpcmV0dXJuIG51bGw7dis9bVtjXX1yZXR1cm4gTWF0aC5hYnModi0xKT4uMDAxP251bGw6W2gsbyh0LG0pLG1dfXZhciBsPXQoImJhcnljZW50cmljIiksdT10KCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIik7ZS5leHBvcnRzPXN9LHtiYXJ5Y2VudHJpYzo0NywicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyI6NDg0fV0sMjAyOltmdW5jdGlvbih0LGUscil7dmFyIG49InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfcG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBcbiAgICAgYW55KGdyZWF0ZXJUaGFuKGZfcG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iO3IubWVzaFNoYWRlcj17dmVydGV4OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBub3JtYWw7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBtX3Bvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9ub3JtYWwgICAgICAgICA9IG5vcm1hbDtcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gICAtIHBvc2l0aW9uO1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXJfMV8xKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuXG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcbiAgICAgICAgICAgICwgZnJlc25lbFxuICAgICAgICAgICAgLCBrYW1iaWVudFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxuICAgICAgICAgICAgLCBrc3BlY3VsYXJcbiAgICAgICAgICAgICwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZl9kYXRhLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuICBcbiAgaWYoIWdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBjb29rVG9ycmFuY2VTcGVjdWxhcl8xXzEoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci53aXJlU2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihmX2RhdGEsIGNsaXBCb3VuZHNbMF0pKSB8fCBcbiAgICAgYW55KGdyZWF0ZXJUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuXG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn1dfSxyLnBvaW50U2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iLGZyYWdtZW50OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb2ludFIgPSBnbF9Qb2ludENvb3JkLnh5IC0gdmVjMigwLjUsMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifV19LHIucGlja1NoYWRlcj17dmVydGV4OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uO1xufSIsZnJhZ21lbnQ6bixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgIHBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcbmF0dHJpYnV0ZSB2ZWM0ICBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgfVxuICBmX2lkICAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgID0gcG9zaXRpb247XG59IixmcmFnbWVudDpuLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY29udG91ckNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29udG91ckNvbG9yLDEpO1xufVxuIixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV19fSx7fV0sMjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2LGcseSxiLHgsXyx3LE0sayxBLFQpe3RoaXMuZ2w9dCx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLmxpbmVTaGFkZXI9bix0aGlzLnBvaW50U2hhZGVyPWksdGhpcy5waWNrU2hhZGVyPWEsdGhpcy5wb2ludFBpY2tTaGFkZXI9byx0aGlzLmNvbnRvdXJTaGFkZXI9cyx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWwsdGhpcy50cmlhbmdsZUNvbG9ycz1jLHRoaXMudHJpYW5nbGVOb3JtYWxzPWYsdGhpcy50cmlhbmdsZVVWcz1oLHRoaXMudHJpYW5nbGVJZHM9dSx0aGlzLnRyaWFuZ2xlVkFPPWQsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9cCx0aGlzLmVkZ2VDb2xvcnM9dix0aGlzLmVkZ2VVVnM9Zyx0aGlzLmVkZ2VJZHM9bSx0aGlzLmVkZ2VWQU89eSx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9Yix0aGlzLnBvaW50Q29sb3JzPV8sdGhpcy5wb2ludFVWcz13LHRoaXMucG9pbnRTaXplcz1NLHRoaXMucG9pbnRJZHM9eCx0aGlzLnBvaW50VkFPPWssdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPUEsdGhpcy5jb250b3VyVkFPPVQsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLl9tb2RlbD1ELHRoaXMuX3ZpZXc9RCx0aGlzLl9wcm9qZWN0aW9uPUQsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT13KHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIF8ocixbMjU2LDI1Niw0XSxbNCwwLDFdKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDtmb3IodmFyIGE9dC5sZW5ndGgsaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXt2YXIgZT1wKHQsUy52ZXJ0ZXgsUy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfWZ1bmN0aW9uIGwodCl7dmFyIGU9cCh0LEUudmVydGV4LEUuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlfWZ1bmN0aW9uIHUodCl7dmFyIGU9cCh0LEwudmVydGV4LEwuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBjKHQpe3ZhciBlPXAodCxDLnZlcnRleCxDLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBoKHQpe3ZhciBlPXAodCx6LnZlcnRleCx6LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gZih0KXt2YXIgZT1wKHQsSS52ZXJ0ZXgsSS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9ZnVuY3Rpb24gZCh0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoZT10LHQ9ZS5nbCk7dmFyIHI9cyh0KSxpPWwodCksYT11KHQpLG89Yyh0KSxkPWgodCkscD1mKHQpLHk9Zyh0LF8obmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTt5LmdlbmVyYXRlTWlwbWFwKCkseS5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUix5Lm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYj1tKHQpLHg9bSh0KSx3PW0odCksTT1tKHQpLGs9bSh0KSxBPXYodCxbe2J1ZmZlcjpiLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOk0sdHlwZTp0LkZMT0FULHNpemU6M31dKSxUPW0odCksUz1tKHQpLEU9bSh0KSxMPW0odCksQz12KHQsW3tidWZmZXI6VCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkwsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Uyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOkUsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSx6PW0odCksST1tKHQpLEQ9bSh0KSxQPW0odCksTz1tKHQpLFI9dih0LFt7YnVmZmVyOnosdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpPLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOkksdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpELHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6UCx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLEY9bSh0KSxqPXYodCxbe2J1ZmZlcjpGLHR5cGU6dC5GTE9BVCxzaXplOjN9XSksTj1uZXcgbih0LHkscixpLGEsbyxkLHAsYixrLHgsdyxNLEEsVCxMLFMsRSxDLHosTyxJLEQsUCxSLEYsaik7cmV0dXJuIE4udXBkYXRlKGUpLE59dmFyIHA9dCgiZ2wtc2hhZGVyIiksbT10KCJnbC1idWZmZXIiKSx2PXQoImdsLXZhbyIpLGc9dCgiZ2wtdGV4dHVyZTJkIikseT10KCJub3JtYWxzIiksYj10KCJnbC1tYXQ0L211bHRpcGx5IikseD10KCJnbC1tYXQ0L2ludmVydCIpLF89dCgibmRhcnJheSIpLHc9dCgiY29sb3JtYXAiKSxNPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIiksaz10KCJ0eXBlZGFycmF5LXBvb2wiKSxBPXQoIi4vbGliL3NoYWRlcnMiKSxUPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSxTPUEubWVzaFNoYWRlcixFPUEud2lyZVNoYWRlcixMPUEucG9pbnRTaGFkZXIsQz1BLnBpY2tTaGFkZXIsej1BLnBvaW50UGlja1NoYWRlcixJPUEuY29udG91clNoYWRlcixEPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxQPW4ucHJvdG90eXBlO1AuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSxQLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LFAucGlja1Nsb3RzPTEsUC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxQLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZighdHx8IXRoaXMuY29udG91ckVuYWJsZSlyZXR1cm4gdm9pZCh0aGlzLmNvbnRvdXJDb3VudD0wKTtmb3IodmFyIGU9TSh0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89ay5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgdT1yW2xdLGM9MDtjPDI7KytjKXt2YXIgaD11WzBdOzI9PT11Lmxlbmd0aCYmKGg9dVtjXSk7Zm9yKHZhciBmPW5baF1bMF0sZD1uW2hdWzFdLHA9aVtoXSxtPTEtcCx2PXRoaXMucG9zaXRpb25zW2ZdLGc9dGhpcy5wb3NpdGlvbnNbZF0seT0wO3k8MzsrK3kpb1tzKytdPXAqdlt5XSttKmdbeV19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLGsuZnJlZShvKX0sUC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImNvbnRvdXJFbmFibGUiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9ZyhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoaSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgcz1bXSxsPVtdLHU9W10sYz1bXSxoPVtdLGY9W10sZD1bXSxwPVtdLG09W10sdj1bXSxiPVtdLHg9W10sXz1bXSx3PVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciBNPXQudmVydGV4Tm9ybWFscyxrPXQuY2VsbE5vcm1hbHMsQT12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixUPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFrJiYoaz15LmZhY2VOb3JtYWxzKHIsbixUKSksa3x8TXx8KE09eS52ZXJ0ZXhOb3JtYWxzKHIsbixBKSk7dmFyIFM9dC52ZXJ0ZXhDb2xvcnMsRT10LmNlbGxDb2xvcnMsTD10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLEM9dC52ZXJ0ZXhVVnMsej10LnZlcnRleEludGVuc2l0eSxJPXQuY2VsbFVWcyxEPXQuY2VsbEludGVuc2l0eSxQPTEvMCxPPS0xLzA7aWYoIUMmJiFJKWlmKHopaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpUD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sTz0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIFI9MDtSPHoubGVuZ3RoOysrUil7dmFyIEY9eltSXTtQPU1hdGgubWluKFAsRiksTz1NYXRoLm1heChPLEYpfWVsc2UgaWYoRClmb3IodmFyIFI9MDtSPEQubGVuZ3RoOysrUil7dmFyIEY9RFtSXTtQPU1hdGgubWluKFAsRiksTz1NYXRoLm1heChPLEYpfWVsc2UgZm9yKHZhciBSPTA7UjxuLmxlbmd0aDsrK1Ipe3ZhciBGPW5bUl1bMl07UD1NYXRoLm1pbihQLEYpLE89TWF0aC5tYXgoTyxGKX10aGlzLmludGVuc2l0eT16fHwoRD9hKHIsbi5sZW5ndGgsRCk6byhuKSk7dmFyIGo9dC5wb2ludFNpemVzLE49dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKHZhciBSPTA7UjxuLmxlbmd0aDsrK1IpZm9yKHZhciBCPW5bUl0sVT0wO1U8MzsrK1UpIWlzTmFOKEJbVV0pJiZpc0Zpbml0ZShCW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLEJbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLEJbVV0pKTt2YXIgVj0wLEg9MCxxPTA7dDpmb3IodmFyIFI9MDtSPHIubGVuZ3RoOysrUil7dmFyIEc9cltSXTtzd2l0Y2goRy5sZW5ndGgpe2Nhc2UgMTpmb3IodmFyIFk9R1swXSxCPW5bWV0sVT0wO1U8MzsrK1UpaWYoaXNOYU4oQltVXSl8fCFpc0Zpbml0ZShCW1VdKSljb250aW51ZSB0O3YucHVzaChCWzBdLEJbMV0sQlsyXSk7dmFyIFg7WD1TP1NbWV06RT9FW1JdOkwsMz09PVgubGVuZ3RoP2IucHVzaChYWzBdLFhbMV0sWFsyXSwxKTpiLnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSk7dmFyIFc7Vz1DP0NbWV06ej9bKHpbWV0tUCkvKE8tUCksMF06ST9JW1JdOkQ/WyhEW1JdLVApLyhPLVApLDBdOlsoQlsyXS1QKS8oTy1QKSwwXSx4LnB1c2goV1swXSxXWzFdKSxqP18ucHVzaChqW1ldKTpfLnB1c2goTiksdy5wdXNoKFIpLHErPTE7YnJlYWs7Y2FzZSAyOmZvcih2YXIgVT0wO1U8MjsrK1UpZm9yKHZhciBZPUdbVV0sQj1uW1ldLFo9MDtaPDM7KytaKWlmKGlzTmFOKEJbWl0pfHwhaXNGaW5pdGUoQltaXSkpY29udGludWUgdDtmb3IodmFyIFU9MDtVPDI7KytVKXt2YXIgWT1HW1VdLEI9bltZXTtmLnB1c2goQlswXSxCWzFdLEJbMl0pO3ZhciBYO1g9Uz9TW1ldOkU/RVtSXTpMLDM9PT1YLmxlbmd0aD9kLnB1c2goWFswXSxYWzFdLFhbMl0sMSk6ZC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10pO3ZhciBXO1c9Qz9DW1ldOno/Wyh6W1ldLVApLyhPLVApLDBdOkk/SVtSXTpEP1soRFtSXS1QKS8oTy1QKSwwXTpbKEJbMl0tUCkvKE8tUCksMF0scC5wdXNoKFdbMF0sV1sxXSksbS5wdXNoKFIpfUgrPTE7YnJlYWs7Y2FzZSAzOmZvcih2YXIgVT0wO1U8MzsrK1UpZm9yKHZhciBZPUdbVV0sQj1uW1ldLFo9MDtaPDM7KytaKWlmKGlzTmFOKEJbWl0pfHwhaXNGaW5pdGUoQltaXSkpY29udGludWUgdDtmb3IodmFyIFU9MDtVPDM7KytVKXt2YXIgWT1HW1VdLEI9bltZXTtzLnB1c2goQlswXSxCWzFdLEJbMl0pO3ZhciBYO1g9Uz9TW1ldOkU/RVtSXTpMLDM9PT1YLmxlbmd0aD9sLnB1c2goWFswXSxYWzFdLFhbMl0sMSk6bC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10pO3ZhciBXO1c9Qz9DW1ldOno/Wyh6W1ldLVApLyhPLVApLDBdOkk/SVtSXTpEP1soRFtSXS1QKS8oTy1QKSwwXTpbKEJbMl0tUCkvKE8tUCksMF0sYy5wdXNoKFdbMF0sV1sxXSk7dmFyIEo7Sj1NP01bWV06a1tSXSx1LnB1c2goSlswXSxKWzFdLEpbMl0pLGgucHVzaChSKX1WKz0xfX10aGlzLnBvaW50Q291bnQ9cSx0aGlzLmVkZ2VDb3VudD1ILHRoaXMudHJpYW5nbGVDb3VudD1WLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKHYpLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKGIpLHRoaXMucG9pbnRVVnMudXBkYXRlKHgpLHRoaXMucG9pbnRTaXplcy51cGRhdGUoXyksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHcpKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKGYpLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUoZCksdGhpcy5lZGdlVVZzLnVwZGF0ZShwKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShtKSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUocyksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUoYyksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKHUpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShoKSl9fSxQLmRyYXdUcmFuc3BhcmVudD1QLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fEQsbj10LnZpZXd8fEQsaT10LnByb2plY3Rpb258fEQsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTt0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgbD1uZXcgQXJyYXkoMTYpO2IobCxzLnZpZXcscy5tb2RlbCksYihsLHMucHJvamVjdGlvbixsKSx4KGwsbCk7Zm9yKHZhciBvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPWxbMTIrb10vbFsxNV07Zm9yKHZhciB1PWxbMTVdLG89MDtvPDM7KytvKXUrPXRoaXMubGlnaHRQb3NpdGlvbltvXSpsWzQqbyszXTtmb3IodmFyIG89MDtvPDM7KytvKXtmb3IodmFyIGM9bFsxMitvXSxoPTA7aDwzOysraCljKz1sWzQqaCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25baF07cy5saWdodFBvc2l0aW9uW29dPWMvdX1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIGY9dGhpcy50cmlTaGFkZXI7Zi5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfWlmKHRoaXMuZWRnZUNvdW50PjAmJnRoaXMubGluZVdpZHRoPjApe3ZhciBmPXRoaXMubGluZVNoYWRlcjtmLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCl9aWYodGhpcy5wb2ludENvdW50PjApe3ZhciBmPXRoaXMucG9pbnRTaGFkZXI7Zi5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKX1pZih0aGlzLmNvbnRvdXJFbmFibGUmJnRoaXMuY29udG91ckNvdW50PjAmJnRoaXMuY29udG91ckxpbmVXaWR0aD4wKXt2YXIgZj10aGlzLmNvbnRvdXJTaGFkZXI7Zi5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMuY29udG91clZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCx0aGlzLmNvbnRvdXJDb3VudCksdGhpcy5jb250b3VyVkFPLnVuYmluZCgpfX0sUC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8RCxuPXQudmlld3x8RCxpPXQucHJvamVjdGlvbnx8RCxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2lmKGwuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKXt2YXIgbD10aGlzLnBvaW50UGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpfX0sUC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGk9bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpaVthXT1uW3JbYV1dO3ZhciBvPVQoaSxbdC5jb29yZFswXSx0aGlzLl9yZXNvbHV0aW9uWzFdLXQuY29vcmRbMV1dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighbylyZXR1cm4gbnVsbDtmb3IodmFyIHM9b1syXSxsPTAsYT0wO2E8ci5sZW5ndGg7KythKWwrPXNbYV0qdGhpcy5pbnRlbnNpdHlbclthXV07cmV0dXJue3Bvc2l0aW9uOm9bMV0saW5kZXg6cltvWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmwsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltvWzBdXV19fSxQLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWR9LHsiLi9saWIvY2xvc2VzdC1wb2ludCI6MjAxLCIuL2xpYi9zaGFkZXJzIjoyMDIsY29sb3JtYXA6OTcsImdsLWJ1ZmZlciI6MTU0LCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L211bHRpcGx5IjoxODEsImdsLXNoYWRlciI6MjUzLCJnbC10ZXh0dXJlMmQiOjI2NSwiZ2wtdmFvIjoyNjksbmRhcnJheTo0NjUsbm9ybWFsczo0NjcsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjo1MTUsInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2w7cmV0dXJuIG5ldyBuKHQsYShlLFswLDAsMCwxLDEsMCwxLDFdKSxvKGUscy5ib3hWZXJ0LHMubGluZUZyYWcpKX1lLmV4cG9ydHM9aTt2YXIgYT10KCJnbC1idWZmZXIiKSxvPXQoImdsLXNoYWRlciIpLHM9dCgiLi9zaGFkZXJzIiksbD1uLnByb3RvdHlwZTtsLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sbC5kcmF3Qm94PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxvKXt2YXIgcz10aGlzLnBsb3QsbD10aGlzLnNoYWRlcix1PXMuZ2w7dFswXT1yLHRbMV09bixlWzBdPWksZVsxXT1hLGwudW5pZm9ybXMubG89dCxsLnVuaWZvcm1zLmhpPWUsbC51bmlmb3Jtcy5jb2xvcj1vLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9fSgpLGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjA3LCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyMTB9XSwyMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXIsdGhpcy50aWNrU2hhZGVyPW4sdGhpcy50aWNrcz1bW10sW11dfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIGEodCl7dmFyIGU9dC5nbDtyZXR1cm4gbmV3IG4odCxvKGUpLHMoZSx1LmdyaWRWZXJ0LHUuZ3JpZEZyYWcpLHMoZSx1LnRpY2tWZXJ0LHUuZ3JpZEZyYWcpKX1lLmV4cG9ydHM9YTt2YXIgbz10KCJnbC1idWZmZXIiKSxzPXQoImdsLXNoYWRlciIpLGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSx1PXQoIi4vc2hhZGVycyIpLGM9bi5wcm90b3R5cGU7Yy5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj10aGlzLnBsb3QsaT10aGlzLnZibyxhPXRoaXMuc2hhZGVyLG89dGhpcy50aWNrcyxzPW4uZ2wsbD1uLl90aWNrQm91bmRzLHU9bi5kYXRhQm94LGM9bi52aWV3Qm94LGg9bi5ncmlkTGluZVdpZHRoLGY9bi5ncmlkTGluZUNvbG9yLGQ9bi5ncmlkTGluZUVuYWJsZSxwPW4ucGl4ZWxSYXRpbyxtPTA7bTwyOysrbSl7dmFyIHY9bFttXSxnPWxbbSsyXSx5PWctdixiPS41Kih1W20rMl0rdVttXSkseD11W20rMl0tdVttXTtlW21dPTIqeS94LHRbbV09Mioodi1iKS94fWEuYmluZCgpLGkuYmluZCgpLGEuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpLGEudW5pZm9ybXMuZGF0YVNoaWZ0PXQsYS51bmlmb3Jtcy5kYXRhU2NhbGU9ZTtmb3IodmFyIF89MCxtPTA7bTwyOysrbSl7clswXT1yWzFdPTAsclttXT0xLGEudW5pZm9ybXMuZGF0YUF4aXM9cixhLnVuaWZvcm1zLmxpbmVXaWR0aD1oW21dLyhjW20rMl0tY1ttXSkqcCxhLnVuaWZvcm1zLmNvbG9yPWZbbV07dmFyIHc9NipvW21dLmxlbmd0aDtkW21dJiZ3JiZzLmRyYXdBcnJheXMocy5UUklBTkdMRVMsXyx3KSxfKz13fX19KCksYy5kcmF3VGlja01hcmtzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVsxLDBdLG49WzAsMV0sYT1bMCwwXSxvPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz10aGlzLnBsb3QsdT10aGlzLnZibyxjPXRoaXMudGlja1NoYWRlcixoPXRoaXMudGlja3MsZj1zLmdsLGQ9cy5fdGlja0JvdW5kcyxwPXMuZGF0YUJveCxtPXMudmlld0JveCx2PXMucGl4ZWxSYXRpbyxnPXMuc2NyZWVuQm94LHk9Z1syXS1nWzBdLGI9Z1szXS1nWzFdLHg9bVsyXS1tWzBdLF89bVszXS1tWzFdLHc9MDt3PDI7Kyt3KXt2YXIgTT1kW3ddLGs9ZFt3KzJdLEE9ay1NLFQ9LjUqKHBbdysyXStwW3ddKSxTPXBbdysyXS1wW3ddO2Vbd109MipBL1MsdFt3XT0yKihNLVQpL1N9ZVswXSo9eC95LHRbMF0qPXgveSxlWzFdKj1fL2IsdFsxXSo9Xy9iLGMuYmluZCgpLHUuYmluZCgpLGMuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpO3ZhciBFPWMudW5pZm9ybXM7RS5kYXRhU2hpZnQ9dCxFLmRhdGFTY2FsZT1lO3ZhciBMPXMudGlja01hcmtMZW5ndGgsQz1zLnRpY2tNYXJrV2lkdGgsej1zLnRpY2tNYXJrQ29sb3IsST02KmhbMF0ubGVuZ3RoLEQ9TWF0aC5taW4obC5nZShoWzBdLChwWzBdLWRbMF0pLyhkWzJdLWRbMF0pLGkpLGhbMF0ubGVuZ3RoKSxQPU1hdGgubWluKGwuZ3QoaFswXSwocFsyXS1kWzBdKS8oZFsyXS1kWzBdKSxpKSxoWzBdLmxlbmd0aCksTz0wKzYqRCxSPTYqTWF0aC5tYXgoMCxQLUQpLEY9TWF0aC5taW4obC5nZShoWzFdLChwWzFdLWRbMV0pLyhkWzNdLWRbMV0pLGkpLGhbMV0ubGVuZ3RoKSxqPU1hdGgubWluKGwuZ3QoaFsxXSwocFszXS1kWzFdKS8oZFszXS1kWzFdKSxpKSxoWzFdLmxlbmd0aCksTj1JKzYqRixCPTYqTWF0aC5tYXgoMCxqLUYpO2FbMF09MioobVswXS1MWzFdKS95LTEsYVsxXT0obVszXSttWzFdKS9iLTEsb1swXT1MWzFdKnYveSxvWzFdPUNbMV0qdi9iLEImJihFLmNvbG9yPXpbMV0sRS50aWNrU2NhbGU9byxFLmRhdGFBeGlzPW4sRS5zY3JlZW5PZmZzZXQ9YSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsTixCKSksYVswXT0obVsyXSttWzBdKS95LTEsYVsxXT0yKihtWzFdLUxbMF0pL2ItMSxvWzBdPUNbMF0qdi95LG9bMV09TFswXSp2L2IsUiYmKEUuY29sb3I9elswXSxFLnRpY2tTY2FsZT1vLEUuZGF0YUF4aXM9cixFLnNjcmVlbk9mZnNldD1hLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxPLFIpKSxhWzBdPTIqKG1bMl0rTFszXSkveS0xLGFbMV09KG1bM10rbVsxXSkvYi0xLG9bMF09TFszXSp2L3ksb1sxXT1DWzNdKnYvYixCJiYoRS5jb2xvcj16WzNdLEUudGlja1NjYWxlPW8sRS5kYXRhQXhpcz1uLEUuc2NyZWVuT2Zmc2V0PWEsZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLE4sQikpLGFbMF09KG1bMl0rbVswXSkveS0xLGFbMV09MioobVszXStMWzJdKS9iLTEsb1swXT1DWzJdKnYveSxvWzFdPUxbMl0qdi9iLFImJihFLmNvbG9yPXpbMl0sRS50aWNrU2NhbGU9byxFLmRhdGFBeGlzPXIsRS5zY3JlZW5PZmZzZXQ9YSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsTyxSKSl9fSgpLGMudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMSwtMSwtMSwxLC0xXSxlPVsxLC0xLDEsMSwtMSwtMV07cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1yLnRpY2tzLGk9ci5ib3VuZHMsYT1uZXcgRmxvYXQzMkFycmF5KDE4KihuWzBdLmxlbmd0aCtuWzFdLmxlbmd0aCkpLG89KHRoaXMucGxvdC56ZXJvTGluZUVuYWJsZSwwKSxzPVtbXSxbXV0sbD0wO2w8MjsrK2wpZm9yKHZhciB1PXNbbF0sYz1uW2xdLGg9aVtsXSxmPWlbbCsyXSxkPTA7ZDxjLmxlbmd0aDsrK2Qpe3ZhciBwPShjW2RdLngtaCkvKGYtaCk7dS5wdXNoKHApO2Zvcih2YXIgbT0wO208NjsrK20pYVtvKytdPXAsYVtvKytdPXRbbV0sYVtvKytdPWVbbV19dGhpcy50aWNrcz1zLHRoaXMudmJvLnVwZGF0ZShhKX19KCksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIwNywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjIwOSwiZ2wtYnVmZmVyIjoxNTQsImdsLXNoYWRlciI6MjEwfV0sMjA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2w7cmV0dXJuIG5ldyBuKHQsYShlLFstMSwtMSwtMSwxLDEsLTEsMSwxXSksbyhlLHMubGluZVZlcnQscy5saW5lRnJhZykpfWUuZXhwb3J0cz1pO3ZhciBhPXQoImdsLWJ1ZmZlciIpLG89dCgiZ2wtc2hhZGVyIikscz10KCIuL3NoYWRlcnMiKSxsPW4ucHJvdG90eXBlO2wuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxsLmRyYXdMaW5lPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxvLHMpe3ZhciBsPXRoaXMucGxvdCx1PXRoaXMuc2hhZGVyLGM9bC5nbDt0WzBdPXIsdFsxXT1uLGVbMF09aSxlWzFdPWEsdS51bmlmb3Jtcy5zdGFydD10LHUudW5pZm9ybXMuZW5kPWUsdS51bmlmb3Jtcy53aWR0aD1vKmwucGl4ZWxSYXRpbyx1LnVuaWZvcm1zLmNvbG9yPXMsYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVfU1RSSVAsMCw0KX19KCksbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoyMDcsImdsLWJ1ZmZlciI6MTU0LCJnbC1zaGFkZXIiOjIxMH1dLDIwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnh5eiAqIGNvbG9yLncsIGNvbG9yLncpO1xufVxuIjtlLmV4cG9ydHM9e2xpbmVWZXJ0OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIHN0YXJ0LCBlbmQ7XG51bmlmb3JtIGZsb2F0IHdpZHRoO1xuXG52ZWMyIHBlcnAodmVjMiB2KSB7XG4gIHJldHVybiB2ZWMyKHYueSwgLXYueCk7XG59XG5cbnZlYzIgc2NyZWVuKHZlYzIgdikge1xuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkZWx0YSA9IG5vcm1hbGl6ZShwZXJwKHN0YXJ0IC0gZW5kKSk7XG4gIHZlYzIgb2Zmc2V0ID0gbWl4KHN0YXJ0LCBlbmQsIDAuNSAqIChjb29yZC55KzEuMCkpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG9mZnNldCArIDAuNSAqIHdpZHRoICogZGVsdGEgKiBjb29yZC54KSwgMCwgMSk7XG59XG4iLGxpbmVGcmFnOm4sdGV4dFZlcnQ6IiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyB0ZXh0Q29vcmRpbmF0ZTtcblxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRhdGFPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUuejtcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHNjcmVlbkNvb3JkaW5hdGUgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhT2Zmc2V0ICsgZGF0YVNoaWZ0KSArXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xufVxuIix0ZXh0RnJhZzpuLGdyaWRWZXJ0OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBwb3MgKz0gMTAuMCAqIGRhdGFDb29yZC55ICogdmVjMihkYXRhQXhpcy55LCAtZGF0YUF4aXMueCkgKyBkYXRhQ29vcmQueiAqIGxpbmVXaWR0aDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XG59XG4iLGdyaWRGcmFnOm4sYm94VmVydDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBsbywgaGk7XG5cbnZlYzIgc2NyZWVuKHZlYzIgdikge1xuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihtaXgobG8sIGhpLCBjb29yZCkpLCAwLCAxKTtcbn1cbiIsdGlja1ZlcnQ6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xufVxuIn19LHt9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2w7cmV0dXJuIG5ldyBuKHQsYShlKSxvKGUsdS50ZXh0VmVydCx1LnRleHRGcmFnKSl9ZS5leHBvcnRzPWk7dmFyIGE9dCgiZ2wtYnVmZmVyIiksbz10KCJnbC1zaGFkZXIiKSxzPXQoInRleHQtY2FjaGUiKSxsPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksdT10KCIuL3NoYWRlcnMiKSxjPW4ucHJvdG90eXBlO2MuZHJhd1RpY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVswLDBdO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT10aGlzLnBsb3QsYT10aGlzLnNoYWRlcixvPXRoaXMudGlja1hbbl0scz10aGlzLnRpY2tPZmZzZXRbbl0sdT1pLmdsLGM9aS52aWV3Qm94LGg9aS5kYXRhQm94LGY9aS5zY3JlZW5Cb3gsZD1pLnBpeGVsUmF0aW8scD1pLnRpY2tFbmFibGUsbT1pLnRpY2tQYWQsdj1pLnRpY2tDb2xvcixnPWkudGlja0FuZ2xlLHk9aS5sYWJlbEVuYWJsZSxiPWkubGFiZWxQYWQseD1pLmxhYmVsQ29sb3IsXz1pLmxhYmVsQW5nbGUsdz10aGlzLmxhYmVsT2Zmc2V0W25dLE09dGhpcy5sYWJlbENvdW50W25dLGs9bC5sdChvLGhbbl0pLEE9bC5sZShvLGhbbisyXSk7dFswXT10WzFdPTAsdFtuXT0xLGVbbl09KGNbMituXStjW25dKS8oZlsyK25dLWZbbl0pLTE7dmFyIFQ9Mi9mWzIrKDFebildLWZbMV5uXTtlWzFebl09VCpjWzFebl0tMSxwW25dJiYoZVsxXm5dLT1UKmQqbVtuXSxrPEEmJnNbQV0+c1trXSYmKGEudW5pZm9ybXMuZGF0YUF4aXM9dCxhLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLGEudW5pZm9ybXMuY29sb3I9dltuXSxhLnVuaWZvcm1zLmFuZ2xlPWdbbl0sdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVTLHNba10sc1tBXS1zW2tdKSkpLHlbbl0mJk0mJihlWzFebl0tPVQqZCpiW25dLGEudW5pZm9ybXMuZGF0YUF4aXM9cixhLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLGEudW5pZm9ybXMuY29sb3I9eFtuXSxhLnVuaWZvcm1zLmFuZ2xlPV9bbl0sdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVTLHcsTSkpLGVbMV5uXT1UKmNbMisoMV5uKV0tMSxwW24rMl0mJihlWzFebl0rPVQqZCptW24rMl0sazxBJiZzW0FdPnNba10mJihhLnVuaWZvcm1zLmRhdGFBeGlzPXQsYS51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9ZSxhLnVuaWZvcm1zLmNvbG9yPXZbbisyXSxhLnVuaWZvcm1zLmFuZ2xlPWdbbisyXSx1LmRyYXdBcnJheXModS5UUklBTkdMRVMsc1trXSxzW0FdLXNba10pKSkseVtuKzJdJiZNJiYoZVsxXm5dKz1UKmQqYltuKzJdLGEudW5pZm9ybXMuZGF0YUF4aXM9cixhLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLGEudW5pZm9ybXMuY29sb3I9eFtuKzJdLGEudW5pZm9ybXMuYW5nbGU9X1tuKzJdLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFUyx3LE0pKX19KCksYy5kcmF3VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9ci5nbCxhPXIuc2NyZWVuQm94LG89ci50aXRsZUNlbnRlcixzPXIudGl0bGVBbmdsZSxsPXIudGl0bGVDb2xvcix1PXIucGl4ZWxSYXRpbztpZih0aGlzLnRpdGxlQ291bnQpe2Zvcih2YXIgYz0wO2M8MjsrK2MpZVtjXT0yKihvW2NdKnUtYVtjXSkvKGFbMitjXS1hW2NdKS0xO24uYmluZCgpLG4udW5pZm9ybXMuZGF0YUF4aXM9dCxuLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLG4udW5pZm9ybXMuYW5nbGU9cyxuLnVuaWZvcm1zLmNvbG9yPWwsaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLHRoaXMudGl0bGVPZmZzZXQsdGhpcy50aXRsZUNvdW50KX19fSgpLGMuYmluZD1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnNoYWRlcixhPW4uX3RpY2tCb3VuZHMsbz1uLmRhdGFCb3gscz1uLnNjcmVlbkJveCxsPW4udmlld0JveDtpLmJpbmQoKTtmb3IodmFyIHU9MDt1PDI7Kyt1KXt2YXIgYz1hW3VdLGg9YVt1KzJdLGY9aC1jLGQ9LjUqKG9bdSsyXStvW3VdKSxwPW9bdSsyXS1vW3VdLG09bFt1XSx2PWxbdSsyXSxnPXYtbSx5PXNbdV0sYj1zW3UrMl0seD1iLXk7ZVt1XT0yKmYvcCpnL3gsdFt1XT0yKihjLWQpL3AqZy94fXJbMV09MipuLnBpeGVsUmF0aW8vKHNbM10tc1sxXSksclswXT1yWzFdKihzWzNdLXNbMV0pLyhzWzJdLXNbMF0pLGkudW5pZm9ybXMuZGF0YVNjYWxlPWUsaS51bmlmb3Jtcy5kYXRhU2hpZnQ9dCxpLnVuaWZvcm1zLnRleHRTY2FsZT1yLHRoaXMudmJvLmJpbmQoKSxpLmF0dHJpYnV0ZXMudGV4dENvb3JkaW5hdGUucG9pbnRlcigpfX0oKSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89W10sbD10LnRpY2tzLHU9dC5ib3VuZHM7Zm9yKGE9MDthPDI7KythKXt2YXIgYz1bTWF0aC5mbG9vcihvLmxlbmd0aC8zKV0saD1bLTEvMF0sZj1sW2FdO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe3ZhciBkPWZbZV0scD1kLngsbT1kLnRleHQsdj1kLmZvbnR8fCJzYW5zLXNlcmlmIjtpPWQuZm9udFNpemV8fDEyO2Zvcih2YXIgZz0xLyh1W2ErMl0tdVthXSkseT11W2FdLGI9bS5zcGxpdCgiXG4iKSx4PTA7eDxiLmxlbmd0aDt4KyspZm9yKG49cyh2LGJbeF0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilvLnB1c2gobltyXSppLC1uW3IrMV0qaS14KmkqMS4yLChwLXkpKmcpO2MucHVzaChNYXRoLmZsb29yKG8ubGVuZ3RoLzMpKSxoLnB1c2gocCl9dGhpcy50aWNrT2Zmc2V0W2FdPWMsdGhpcy50aWNrWFthXT1ofWZvcihhPTA7YTwyOysrYSl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbYV09TWF0aC5mbG9vcihvLmxlbmd0aC8zKSxuPXModC5sYWJlbEZvbnRbYV0sdC5sYWJlbHNbYV0se3RleHRBbGlnbjoiY2VudGVyIn0pLmRhdGEsaT10LmxhYmVsU2l6ZVthXSxlPTA7ZTxuLmxlbmd0aDtlKz0yKW8ucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMubGFiZWxDb3VudFthXT1NYXRoLmZsb29yKG8ubGVuZ3RoLzMpLXRoaXMubGFiZWxPZmZzZXRbYV19Zm9yKHRoaXMudGl0bGVPZmZzZXQ9TWF0aC5mbG9vcihvLmxlbmd0aC8zKSxuPXModC50aXRsZUZvbnQsdC50aXRsZSkuZGF0YSxpPXQudGl0bGVTaXplLGU9MDtlPG4ubGVuZ3RoO2UrPTIpby5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy50aXRsZUNvdW50PU1hdGguZmxvb3Ioby5sZW5ndGgvMyktdGhpcy50aXRsZU9mZnNldCx0aGlzLnZiby51cGRhdGUobyl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjA3LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjA5LCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyMTAsInRleHQtY2FjaGUiOjUzMH1dLDIwOTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4Ml1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgyfV0sMjEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5nbD10LHRoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsCnRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfWZ1bmN0aW9uIGEodCxlLHIsaSxhKXt2YXIgbz1uZXcgbih0KTtyZXR1cm4gby51cGRhdGUoZSxyLGksYSksb312YXIgbz10KCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiKSxzPXQoIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIiksbD10KCIuL2xpYi9yZWZsZWN0IiksdT10KCIuL2xpYi9zaGFkZXItY2FjaGUiKSxjPXQoIi4vbGliL3J1bnRpbWUtcmVmbGVjdCIpLGg9dCgiLi9saWIvR0xFcnJvciIpLGY9bi5wcm90b3R5cGU7Zi5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5wcm9ncmFtfHx0aGlzLl9yZWxpbmsoKTt2YXIgdCxlPXRoaXMuZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUykscj10aGlzLmdsLmxhc3RBdHRyaWJDb3VudDtpZihlPnIpZm9yKHQ9cjt0PGU7dCsrKXRoaXMuZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodCk7ZWxzZSBpZihyPmUpZm9yKHQ9ZTt0PHI7dCsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PWUsdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdsLmxhc3RBdHRyaWJDb3VudCxlPTA7ZTx0O2UrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX2ZyZWYmJnRoaXMuX2ZyZWYuZGlzcG9zZSgpLHRoaXMuX3ZyZWYmJnRoaXMuX3ZyZWYuZGlzcG9zZSgpLHRoaXMuYXR0cmlidXRlcz10aGlzLnR5cGVzPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuX3JlbGluaz10aGlzLl9mcmVmPXRoaXMuX3ZyZWY9bnVsbH0sZi51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gYSgpe2QucHJvZ3JhbT11LnByb2dyYW0ocCxkLl92cmVmLGQuX2ZyZWYsXyx3KTtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClFW3RdPXAuZ2V0VW5pZm9ybUxvY2F0aW9uKGQucHJvZ3JhbSxyW3RdLm5hbWUpfWlmKCFlfHwxPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGY9dDt0PWYudmVydGV4LGU9Zi5mcmFnbWVudCxyPWYudW5pZm9ybXMsbj1mLmF0dHJpYnV0ZXN9dmFyIGQ9dGhpcyxwPWQuZ2wsbT1kLl92cmVmO2QuX3ZyZWY9dS5zaGFkZXIocCxwLlZFUlRFWF9TSEFERVIsdCksbSYmbS5kaXNwb3NlKCksZC52ZXJ0U2hhZGVyPWQuX3ZyZWYuc2hhZGVyO3ZhciB2PXRoaXMuX2ZyZWY7aWYoZC5fZnJlZj11LnNoYWRlcihwLHAuRlJBR01FTlRfU0hBREVSLGUpLHYmJnYuZGlzcG9zZSgpLGQuZnJhZ1NoYWRlcj1kLl9mcmVmLnNoYWRlciwhcnx8IW4pe3ZhciBnPXAuY3JlYXRlUHJvZ3JhbSgpO2lmKHAuYXR0YWNoU2hhZGVyKGcsZC5mcmFnU2hhZGVyKSxwLmF0dGFjaFNoYWRlcihnLGQudmVydFNoYWRlcikscC5saW5rUHJvZ3JhbShnKSwhcC5nZXRQcm9ncmFtUGFyYW1ldGVyKGcscC5MSU5LX1NUQVRVUykpe3ZhciB5PXAuZ2V0UHJvZ3JhbUluZm9Mb2coZyk7dGhyb3cgbmV3IGgoeSwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiIreSl9cj1yfHxjLnVuaWZvcm1zKHAsZyksbj1ufHxjLmF0dHJpYnV0ZXMocCxnKSxwLmRlbGV0ZVByb2dyYW0oZyl9bj1uLnNsaWNlKCksbi5zb3J0KGkpO3ZhciBiLHg9W10sXz1bXSx3PVtdO2ZvcihiPTA7YjxuLmxlbmd0aDsrK2Ipe3ZhciBNPW5bYl07aWYoTS50eXBlLmluZGV4T2YoIm1hdCIpPj0wKXtmb3IodmFyIGs9MHxNLnR5cGUuY2hhckF0KE0udHlwZS5sZW5ndGgtMSksQT1uZXcgQXJyYXkoayksVD0wO1Q8azsrK1QpQVtUXT13Lmxlbmd0aCxfLnB1c2goTS5uYW1lKyJbIitUKyJdIiksIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uP3cucHVzaChNLmxvY2F0aW9uK1QpOkFycmF5LmlzQXJyYXkoTS5sb2NhdGlvbikmJk0ubG9jYXRpb24ubGVuZ3RoPT09ayYmIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uW1RdP3cucHVzaCgwfE0ubG9jYXRpb25bVF0pOncucHVzaCgtMSk7eC5wdXNoKHtuYW1lOk0ubmFtZSx0eXBlOk0udHlwZSxsb2NhdGlvbnM6QX0pfWVsc2UgeC5wdXNoKHtuYW1lOk0ubmFtZSx0eXBlOk0udHlwZSxsb2NhdGlvbnM6W3cubGVuZ3RoXX0pLF8ucHVzaChNLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgTS5sb2NhdGlvbj93LnB1c2goMHxNLmxvY2F0aW9uKTp3LnB1c2goLTEpfXZhciBTPTA7Zm9yKGI9MDtiPHcubGVuZ3RoOysrYilpZih3W2JdPDApe2Zvcig7dy5pbmRleE9mKFMpPj0wOylTKz0xO3dbYl09U312YXIgRT1uZXcgQXJyYXkoci5sZW5ndGgpO2EoKSxkLl9yZWxpbms9YSxkLnR5cGVzPXt1bmlmb3JtczpsKHIpLGF0dHJpYnV0ZXM6bChuKX0sZC5hdHRyaWJ1dGVzPXMocCxkLHgsdyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInVuaWZvcm1zIixvKHAsZCxyLEUpKX0sZS5leHBvcnRzPWF9LHsiLi9saWIvR0xFcnJvciI6MjExLCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyI6MjEyLCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiOjIxMywiLi9saWIvcmVmbGVjdCI6MjE0LCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiOjIxNSwiLi9saWIvc2hhZGVyLWNhY2hlIjoyMTZ9XSwyMTE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnNob3J0TWVzc2FnZT1lfHwiIix0aGlzLmxvbmdNZXNzYWdlPXJ8fCIiLHRoaXMucmF3RXJyb3I9dHx8IiIsdGhpcy5tZXNzYWdlPSJnbC1zaGFkZXI6ICIrKGV8fHR8fCIiKSsocj8iXG4iK3I6IiIpLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9IkdMRXJyb3IiLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sZS5leHBvcnRzPW59LHt9XSwyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX1mdW5jdGlvbiBpKHQsZSxyLGksYSxvLHMpe2Zvcih2YXIgbD1bImdsIiwidiJdLHU9W10sYz0wO2M8YTsrK2MpbC5wdXNoKCJ4IitjKSx1LnB1c2goIngiK2MpO2wucHVzaCgiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIithKyJmKHYsIit1LmpvaW4oKSsiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWIiK2ErImZ2KHYseDApfSIpO3ZhciBoPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksZj1uZXcgbih0LGUscixpLGEsaCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8scyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpW3JdKSxoKHQsaVtyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIGEodCxlLHIsbixhLG8scyl7Zm9yKHZhciBsPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxjPTA7YzxhOysrYylpKHQsZSxyW2NdLG4sYSxsLGMpLHVbY109bFtjXTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibG9jYXRpb24iLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGE7KytlKXVbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcih2YXIgZT0wO2U8YTsrK2UpdVtlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsaSxvLHMpe2U9ZXx8dC5GTE9BVCxpPSEhaSxvPW98fGEqYSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxhOysrbCl7dmFyIHU9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIodSxhLGUsaSxvLHMrbCphKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHUpfX07dmFyIGg9bmV3IEFycmF5KGEpLGY9dFsidmVydGV4QXR0cmliIithKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGk9MDtpPGE7KytpKXt2YXIgbz1uW3JbaV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpZi5jYWxsKHQsbyxlW2ldKTtlbHNle2Zvcih2YXIgcz0wO3M8YTsrK3MpaFtzXT1lW2EqaStzXTtmLmNhbGwodCxvLGgpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBvKHQsZSxyLG4pe2Zvcih2YXIgbz17fSxsPTAsdT1yLmxlbmd0aDtsPHU7KytsKXt2YXIgYz1yW2xdLGg9Yy5uYW1lLGY9Yy50eXBlLGQ9Yy5sb2NhdGlvbnM7c3dpdGNoKGYpe2Nhc2UiYm9vbCI6Y2FzZSJpbnQiOmNhc2UiZmxvYXQiOmkodCxlLGRbMF0sbiwxLG8saCk7YnJlYWs7ZGVmYXVsdDppZihmLmluZGV4T2YoInZlYyIpPj0wKXt2YXIgcD1mLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSktNDg7aWYocDwyfHxwPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7aSh0LGUsZFswXSxuLHAsbyxoKX1lbHNle2lmKCEoZi5pbmRleE9mKCJtYXQiKT49MCkpdGhyb3cgbmV3IHMoIiIsIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7dmFyIHA9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKHA8Mnx8cD40KXRocm93IG5ldyBzKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIraCsiOiAiK2YpO2EodCxlLGQsbixwLG8saCl9fX1yZXR1cm4gb31lLmV4cG9ydHM9bzt2YXIgcz10KCIuL0dMRXJyb3IiKSxsPW4ucHJvdG90eXBlO2wucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5fZ2wsbz1pLl9sb2NhdGlvbnNbaS5faW5kZXhdO2EudmVydGV4QXR0cmliUG9pbnRlcihvLGkuX2RpbWVuc2lvbix0fHxhLkZMT0FULCEhZSxyfHwwLG58fDApLGEuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobyl9LGwuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pfSx7Ii4vR0xFcnJvciI6MjExfV0sMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigieSIsInJldHVybiBmdW5jdGlvbigpe3JldHVybiB5fSIpKHQpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSxyLGEpe2Z1bmN0aW9uIGwocil7cmV0dXJuIG5ldyBGdW5jdGlvbigiZ2wiLCJ3cmFwcGVyIiwibG9jYXRpb25zIiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdsLmdldFVuaWZvcm0od3JhcHBlci5wcm9ncmFtLGxvY2F0aW9uc1siK3IrIl0pfSIpKHQsZSxhKX1mdW5jdGlvbiB1KHQsZSxyKXtzd2l0Y2gocil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnJldHVybiJnbC51bmlmb3JtMWkobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2Nhc2UiZmxvYXQiOnJldHVybiJnbC51bmlmb3JtMWYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2RlZmF1bHQ6dmFyIG49ci5pbmRleE9mKCJ2ZWMiKTtpZighKDA8PW4mJm48PTEmJnIubGVuZ3RoPT09NCtuKSl7aWYoMD09PXIuaW5kZXhPZigibWF0IikmJjQ9PT1yLmxlbmd0aCl7dmFyIGk9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4O2lmKGk8Mnx8aT40KXRocm93IG5ldyBzKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIityKTtyZXR1cm4iZ2wudW5pZm9ybU1hdHJpeCIraSsiZnYobG9jYXRpb25zWyIrZSsiXSxmYWxzZSxvYmoiK3QrIikifXRocm93IG5ldyBzKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIityKX12YXIgaT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoaTwyfHxpPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgZGF0YSB0eXBlIik7c3dpdGNoKHIuY2hhckF0KDApKXtjYXNlImIiOmNhc2UiaSI6cmV0dXJuImdsLnVuaWZvcm0iK2krIml2KGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtjYXNlInYiOnJldHVybiJnbC51bmlmb3JtIitpKyJmdihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp0aHJvdyBuZXcgcygiIiwiVW5yZWNvZ25pemVkIGRhdGEgdHlwZSBmb3IgdmVjdG9yICIrbmFtZSsiOiAiK3IpfX19ZnVuY3Rpb24gYyh0LGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm5bW3QsZV1dO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dLGE9dDtwYXJzZUludChuKSsiIj09PW4/YSs9IlsiK24rIl0iOmErPSIuIituLCJvYmplY3QiPT10eXBlb2YgaT9yLnB1c2guYXBwbHkocixjKGEsaSkpOnIucHVzaChbYSxpXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaChlKXtmb3IodmFyIG49WyJyZXR1cm4gZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqKXsiXSxpPWMoIiIsZSksbz0wO288aS5sZW5ndGg7KytvKXt2YXIgcz1pW29dLGw9c1swXSxoPXNbMV07YVtoXSYmbi5wdXNoKHUobCxoLHJbaF0udHlwZSkpfXJldHVybiBuLnB1c2goInJldHVybiBvYmp9IiksbmV3IEZ1bmN0aW9uKCJnbCIsImxvY2F0aW9ucyIsbi5qb2luKCJcbiIpKSh0LGEpfWZ1bmN0aW9uIGYodCl7c3dpdGNoKHQpe2Nhc2UiYm9vbCI6cmV0dXJuITE7Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpjYXNlImZsb2F0IjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZigidmVjIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgcygiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9pKHIsITEpOmkociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDg7aWYocjwyfHxyPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3QpO3JldHVybiBpKHIqciwwKX10aHJvdyBuZXcgcygiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdCl9fWZ1bmN0aW9uIGQodCxlLGkpe2lmKCJvYmplY3QiPT10eXBlb2YgaSl7dmFyIG89cChpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6bihvKSxzZXQ6aChpKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2UgYVtpXT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6bChpKSxzZXQ6aChpKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOnRbZV09ZihyW2ldLnR5cGUpfWZ1bmN0aW9uIHAodCl7dmFyIGU7aWYoQXJyYXkuaXNBcnJheSh0KSl7ZT1uZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWQoZSxyLHRbcl0pfWVsc2V7ZT17fTtmb3IodmFyIG4gaW4gdClkKGUsbix0W25dKX1yZXR1cm4gZX12YXIgbT1vKHIsITApO3JldHVybntnZXQ6bihwKG0pKSxzZXQ6aChtKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19dmFyIG89dCgiLi9yZWZsZWN0Iikscz10KCIuL0dMRXJyb3IiKTtlLmV4cG9ydHM9YX0seyIuL0dMRXJyb3IiOjIxMSwiLi9yZWZsZWN0IjoyMTR9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZSxhPWkuc3BsaXQoIi4iKSxvPXIscz0wO3M8YS5sZW5ndGg7KytzKXt2YXIgbD1hW3NdLnNwbGl0KCJbIik7aWYobC5sZW5ndGg+MSl7bFswXWluIG98fChvW2xbMF1dPVtdKSxvPW9bbFswXV07Zm9yKHZhciB1PTE7dTxsLmxlbmd0aDsrK3Upe3ZhciBjPXBhcnNlSW50KGxbdV0pO3U8bC5sZW5ndGgtMXx8czxhLmxlbmd0aC0xPyhjIGluIG98fCh1PGwubGVuZ3RoLTE/b1tjXT1bXTpvW2NdPXt9KSxvPW9bY10pOm9bY109ZT9uOnRbbl0udHlwZX19ZWxzZSBzPGEubGVuZ3RoLTE/KGxbMF1pbiBvfHwob1tsWzBdXT17fSksbz1vW2xbMF1dKTpvW2xbMF1dPWU/bjp0W25dLnR5cGV9cmV0dXJuIHJ9ZS5leHBvcnRzPW59LHt9XSwyMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCFzKXt2YXIgcj1PYmplY3Qua2V5cyhvKTtzPXt9O2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO3NbdFtpXV09b1tpXX19cmV0dXJuIHNbZV19ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksaT1bXSxhPTA7YTxyOysrYSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYobyl7dmFyIHM9bih0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKWkucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrbCsiXSIpLHR5cGU6c30pO2Vsc2UgaS5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxpPVtdLGE9MDthPHI7KythKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGEpO28mJmkucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTpuKHQsby50eXBlKX0pfXJldHVybiBpfXIudW5pZm9ybXM9aSxyLmF0dHJpYnV0ZXM9YTt2YXIgbz17RkxPQVQ6ImZsb2F0IixGTE9BVF9WRUMyOiJ2ZWMyIixGTE9BVF9WRUMzOiJ2ZWMzIixGTE9BVF9WRUM0OiJ2ZWM0IixJTlQ6ImludCIsSU5UX1ZFQzI6Iml2ZWMyIixJTlRfVkVDMzoiaXZlYzMiLElOVF9WRUM0OiJpdmVjNCIsQk9PTDoiYm9vbCIsQk9PTF9WRUMyOiJidmVjMiIsQk9PTF9WRUMzOiJidmVjMyIsQk9PTF9WRUM0OiJidmVjNCIsRkxPQVRfTUFUMjoibWF0MiIsRkxPQVRfTUFUMzoibWF0MyIsRkxPQVRfTUFUNDoibWF0NCIsU0FNUExFUl8yRDoic2FtcGxlcjJEIixTQU1QTEVSX0NVQkU6InNhbXBsZXJDdWJlIn0scz1udWxsfSx7fV0sMjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMuc3JjPWUsdGhpcy50eXBlPXIsdGhpcy5zaGFkZXI9bix0aGlzLmNvdW50PWEsdGhpcy5wcm9ncmFtcz1bXSx0aGlzLmNhY2hlPW99ZnVuY3Rpb24gaSh0KXt0aGlzLmdsPXQsdGhpcy5zaGFkZXJzPVt7fSx7fV0sdGhpcy5wcm9ncmFtcz17fX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShuLHIpLHQuY29tcGlsZVNoYWRlcihuKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIobix0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIGk9dC5nZXRTaGFkZXJJbmZvTG9nKG4pO3RyeXt2YXIgYT1oKGkscixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6ICIrdCksbmV3IGMoaSwiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcbiIraSl9dGhyb3cgbmV3IGMoaSxhLnNob3J0LGEubG9uZyl9cmV0dXJuIG59ZnVuY3Rpb24gbyh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUHJvZ3JhbSgpO3QuYXR0YWNoU2hhZGVyKGEsZSksdC5hdHRhY2hTaGFkZXIoYSxyKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbyl0LmJpbmRBdHRyaWJMb2NhdGlvbihhLGlbb10sbltvXSk7aWYodC5saW5rUHJvZ3JhbShhKSwhdC5nZXRQcm9ncmFtUGFyYW1ldGVyKGEsdC5MSU5LX1NUQVRVUykpe3ZhciBzPXQuZ2V0UHJvZ3JhbUluZm9Mb2coYSk7dGhyb3cgbmV3IGMocywiRXJyb3IgbGlua2luZyBwcm9ncmFtOiAiK3MpfXJldHVybiBhfWZ1bmN0aW9uIHModCl7dmFyIGU9ZC5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBpKHQpLGQuc2V0KHQsZSkpLGV9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIHModCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9ZnVuY3Rpb24gdSh0LGUscixuLGkpe3JldHVybiBzKHQpLmdldFByb2dyYW0oZSxyLG4saSl9ci5zaGFkZXI9bCxyLnByb2dyYW09dTt2YXIgYz10KCIuL0dMRXJyb3IiKSxoPXQoImdsLWZvcm1hdC1jb21waWxlci1lcnJvciIpLGY9InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWttYXAtc2hpbSIpOldlYWtNYXAsZD1uZXcgZixwPTA7bi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBtPWkucHJvdG90eXBlO20uZ2V0U2hhZGVyUmVmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nbCxpPXRoaXMuc2hhZGVyc1t0PT09ci5GUkFHTUVOVF9TSEFERVJ8MF0sbz1pW2VdO2lmKG8mJnIuaXNTaGFkZXIoby5zaGFkZXIpKW8uY291bnQrPTE7ZWxzZXt2YXIgcz1hKHIsdCxlKTtvPWlbZV09bmV3IG4ocCsrLGUsdCxzLFtdLDEsdGhpcyl9cmV0dXJuIG99LG0uZ2V0UHJvZ3JhbT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bdC5pZCxlLmlkLHIuam9pbigiOiIpLG4uam9pbigiOiIpXS5qb2luKCJAIiksYT10aGlzLnByb2dyYW1zW2ldO3JldHVybiBhJiZ0aGlzLmdsLmlzUHJvZ3JhbShhKXx8KHRoaXMucHJvZ3JhbXNbaV09YT1vKHRoaXMuZ2wsdC5zaGFkZXIsZS5zaGFkZXIscixuKSx0LnByb2dyYW1zLnB1c2goaSksZS5wcm9ncmFtcy5wdXNoKGkpKSxhfX0seyIuL0dMRXJyb3IiOjIxMSwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjoxNjMsIndlYWttYXAtc2hpbSI6NTYwfV0sMjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmdsPXQsdGhpcy5waWNrQnVmZmVyPWUsdGhpcy5zY3JlZW5Cb3g9WzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdLHRoaXMudmlld0JveD1bMCwwLDAsMF0sdGhpcy5kYXRhQm94PVstMTAsLTEwLDEwLDEwXSx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZVdpZHRoPVsxLDFdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy50aWNrTWFya0xlbmd0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya1dpZHRoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITAsITBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLmxhYmVsQW5nbGU9WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aXRsZUNlbnRlcj1bMCwwXSx0aGlzLnRpdGxlRW5hYmxlPSEwLHRoaXMudGl0bGVBbmdsZT0wLHRoaXMudGl0bGVDb2xvcj1bMCwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuemVyb0xpbmVFbmFibGU9WyEwLCEwXSx0aGlzLnplcm9MaW5lV2lkdGg9WzQsNF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMiwyLDIsMl0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkPW51bGwsdGhpcy50ZXh0PW51bGwsdGhpcy5saW5lPW51bGwsdGhpcy5ib3g9bnVsbCx0aGlzLm9iamVjdHM9W10sdGhpcy5vdmVybGF5cz1bXSx0aGlzLl90aWNrQm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5zdGF0aWM9ITEsdGhpcy5kaXJ0eT0hMSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLnBpY2tEZWxheT0xMjAsdGhpcy5waWNrUmFkaXVzPTEwLHRoaXMuX3BpY2tUaW1lb3V0PW51bGwsdGhpcy5fZHJhd1BpY2s9dGhpcy5kcmF3UGljay5iaW5kKHRoaXMpLHRoaXMuX2RlcHRoQ291bnRlcj0wfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPXQuc2xpY2UoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5nbCxyPXMoZSxbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSksaT1uZXcgbihlLHIpO3JldHVybiBpLmdyaWQ9bChpKSxpLnRleHQ9dShpKSxpLmxpbmU9YyhpKSxpLmJveD1oKGkpLGkudXBkYXRlKHQpLGl9ZS5leHBvcnRzPW87dmFyIHM9dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGw9dCgiLi9saWIvZ3JpZCIpLHU9dCgiLi9saWIvdGV4dCIpLGM9dCgiLi9saWIvbGluZSIpLGg9dCgiLi9saWIvYm94IiksZj1uLnByb3RvdHlwZTtmLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sZi5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxmLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxmLmRyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7dGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHQuc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIHU9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IodVswXSp1WzNdLHVbMV0qdVszXSx1WzJdKnVbM10sdVszXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSx0LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciBjPXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcihjWzBdKmNbM10sY1sxXSpjWzNdLGNbMl0qY1szXSxjWzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGg9dGhpcy56ZXJvTGluZUVuYWJsZSxmPXRoaXMuemVyb0xpbmVDb2xvcixkPXRoaXMuemVyb0xpbmVXaWR0aDtpZihoWzBdfHxoWzFdKXtvLmJpbmQoKTtmb3IodmFyIHA9MDtwPDI7KytwKWlmKGhbcF0mJm5bcF08PTAmJm5bcCsyXT49MCl7dmFyIG09ZVtwXS1uW3BdKihlW3ArMl0tZVtwXSkvKG5bcCsyXS1uW3BdKTswPT09cD9vLmRyYXdMaW5lKG0sZVsxXSxtLGVbM10sZFtwXSxmW3BdKTpvLmRyYXdMaW5lKGVbMF0sbSxlWzJdLG0sZFtwXSxmW3BdKX19Zm9yKHZhciBwPTA7cDxsLmxlbmd0aDsrK3ApbFtwXS5kcmF3KCk7dC52aWV3cG9ydChlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksdC5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0aGlzLmdyaWQuZHJhd1RpY2tNYXJrcygpLG8uYmluZCgpO3ZhciB2PXRoaXMuYm9yZGVyTGluZUVuYWJsZSxnPXRoaXMuYm9yZGVyTGluZVdpZHRoLHk9dGhpcy5ib3JkZXJMaW5lQ29sb3I7dlsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqZ1sxXSppLHJbMF0sclszXSsuNSpnWzNdKmksZ1sxXSx5WzFdKSx2WzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqZ1swXSppLHJbMV0sclsyXSsuNSpnWzJdKmksclsxXSxnWzBdLHlbMF0pLHZbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41KmdbMV0qaSxyWzJdLHJbM10rLjUqZ1szXSppLGdbM10seVszXSksdlsyXSYmby5kcmF3TGluZShyWzBdLS41KmdbMF0qaSxyWzNdLHJbMl0rLjUqZ1syXSppLHJbM10sZ1syXSx5WzJdKSxzLmJpbmQoKTtmb3IodmFyIHA9MDtwPDI7KytwKXMuZHJhd1RpY2tzKHApO3RoaXMudGl0bGVFbmFibGUmJnMuZHJhd1RpdGxlKCk7Zm9yKHZhciBiPXRoaXMub3ZlcmxheXMscD0wO3A8Yi5sZW5ndGg7KytwKWJbcF0uZHJhdygpO3QuZGlzYWJsZSh0LlNDSVNTT1JfVEVTVCksdC5kaXNhYmxlKHQuQkxFTkQpLHQuZGVwdGhNYXNrKCEwKX19fSgpLGYuZHJhd1BpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtpZighdGhpcy5zdGF0aWMpe3ZhciB0PXRoaXMucGlja0J1ZmZlcjt0aGlzLmdsO3RoaXMuX3BpY2tUaW1lb3V0PW51bGwsdC5iZWdpbigpO2Zvcih2YXIgZT0xLHI9dGhpcy5vYmplY3RzLG49MDtuPHIubGVuZ3RoOysrbillPXJbbl0uZHJhd1BpY2soZSk7dC5lbmQoKX19fSgpLGYucGljaz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnN0YXRpYyl7dmFyIHI9dGhpcy5waXhlbFJhdGlvLG49dGhpcy5waWNrUGl4ZWxSYXRpbyxpPXRoaXMudmlld0JveCxhPTB8TWF0aC5yb3VuZCgodC1pWzBdL3IpKm4pLG89MHxNYXRoLnJvdW5kKChlLWlbMV0vcikqbikscz10aGlzLnBpY2tCdWZmZXIucXVlcnkoYSxvLHRoaXMucGlja1JhZGl1cyk7aWYoIXMpcmV0dXJuIG51bGw7Zm9yKHZhciBsPXMuaWQrKHMudmFsdWVbMF08PDgpKyhzLnZhbHVlWzFdPDwxNikrKHMudmFsdWVbMl08PDI0KSx1PXRoaXMub2JqZWN0cyxjPTA7Yzx1Lmxlbmd0aDsrK2Mpe3ZhciBoPXVbY10ucGljayhhLG8sbCk7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH19fSgpLGYuc2V0U2NyZWVuQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NyZWVuQm94LHI9dGhpcy5waXhlbFJhdGlvO2VbMF09MHxNYXRoLnJvdW5kKHRbMF0qciksZVsxXT0wfE1hdGgucm91bmQodFsxXSpyKSxlWzJdPTB8TWF0aC5yb3VuZCh0WzJdKnIpLGVbM109MHxNYXRoLnJvdW5kKHRbM10qciksdGhpcy5zZXREaXJ0eSgpfSxmLnNldERhdGFCb3g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhQm94OyhlWzBdIT09dFswXXx8ZVsxXSE9PXRbMV18fGVbMl0hPT10WzJdfHxlWzNdIT09dFszXSkmJihlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sdGhpcy5zZXREaXJ0eSgpKX0sZi5zZXRWaWV3Qm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMudmlld0JveDtyWzBdPTB8TWF0aC5yb3VuZCh0WzBdKmUpLHJbMV09MHxNYXRoLnJvdW5kKHRbMV0qZSksclsyXT0wfE1hdGgucm91bmQodFsyXSplKSxyWzNdPTB8TWF0aC5yb3VuZCh0WzNdKmUpO3ZhciBuPXRoaXMucGlja1BpeGVsUmF0aW87dGhpcy5waWNrQnVmZmVyLnNoYXBlPVswfE1hdGgucm91bmQoKHRbMl0tdFswXSkqbiksMHxNYXRoLnJvdW5kKCh0WzNdLXRbMV0pKm4pXSx0aGlzLnNldERpcnR5KCl9LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvfHwxO3ZhciByPXRoaXMucGl4ZWxSYXRpbzt0aGlzLnBpY2tQaXhlbFJhdGlvPU1hdGgubWF4KHIsMSksdGhpcy5zZXRTY3JlZW5Cb3godC5zY3JlZW5Cb3h8fFswLDAsZS5kcmF3aW5nQnVmZmVyV2lkdGgvcixlLmRyYXdpbmdCdWZmZXJIZWlnaHQvcl0pO3RoaXMuc2NyZWVuQm94O3RoaXMuc2V0Vmlld0JveCh0LnZpZXdCb3h8fFsuMTI1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuMTI1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvcl0pO3ZhciBuPXRoaXMudmlld0JveCxvPShuWzJdLW5bMF0pLyhuWzNdLW5bMV0pO3RoaXMuc2V0RGF0YUJveCh0LmRhdGFCb3h8fFstMTAsLTEwL28sMTAsMTAvb10pLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9aSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPWkodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj1pKHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0JiYhdC50aXRsZUVuYWJsZSksdGhpcy50aXRsZUFuZ2xlPXQudGl0bGVBbmdsZXx8MCx0aGlzLnRpdGxlQ29sb3I9KHQudGl0bGVDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMubGFiZWxQYWQ9KHQubGFiZWxQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy5sYWJlbEFuZ2xlPSh0LmxhYmVsQW5nbGV8fFswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSkuc2xpY2UoKSx0aGlzLmxhYmVsRW5hYmxlPSh0LmxhYmVsRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMubGFiZWxDb2xvcj1pKHQubGFiZWxDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja1BhZD0odC50aWNrUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMudGlja0FuZ2xlPSh0LnRpY2tBbmdsZXx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja0VuYWJsZT0odC50aWNrRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMudGlja0NvbG9yPWkodC50aWNrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLmJvcmRlckxpbmVFbmFibGU9KHQuYm9yZGVyTGluZUVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVXaWR0aD0odC5ib3JkZXJMaW5lV2lkdGh8fFsyLDIsMiwyXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVDb2xvcj1pKHQuYm9yZGVyTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIHM9dC50aWNrc3x8W1tdLFtdXSxsPXRoaXMuX3RpY2tCb3VuZHM7bFswXT1sWzFdPTEvMCxsWzJdPWxbM109LTEvMDtmb3IodmFyIHU9MDt1PDI7Kyt1KXt2YXIgYz1zW3VdLnNsaWNlKDApOzAhPT1jLmxlbmd0aCYmKGMuc29ydChhKSxsW3VdPU1hdGgubWluKGxbdV0sY1swXS54KSxsW3UrMl09TWF0aC5tYXgobFt1KzJdLGNbYy5sZW5ndGgtMV0ueCkpfXRoaXMuZ3JpZC51cGRhdGUoe2JvdW5kczpsLHRpY2tzOnN9KSx0aGlzLnRleHQudXBkYXRlKHtib3VuZHM6bCx0aWNrczpzLGxhYmVsczp0LmxhYmVsc3x8WyJ4IiwieSJdLGxhYmVsU2l6ZTp0LmxhYmVsU2l6ZXx8WzEyLDEyXSxsYWJlbEZvbnQ6dC5sYWJlbEZvbnR8fFsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aXRsZTp0LnRpdGxlfHwiIix0aXRsZVNpemU6dC50aXRsZVNpemV8fDE4LHRpdGxlRm9udDp0LnRpdGxlRm9udHx8InNhbnMtc2VyaWYifSksdGhpcy5zdGF0aWM9ISF0LnN0YXRpYyx0aGlzLnNldERpcnR5KCl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94LmRpc3Bvc2UoKSx0aGlzLmdyaWQuZGlzcG9zZSgpLHRoaXMudGV4dC5kaXNwb3NlKCksdGhpcy5saW5lLmRpc3Bvc2UoKTtmb3IodmFyIHQ9dGhpcy5vYmplY3RzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub2JqZWN0c1t0XS5kaXNwb3NlKCk7dGhpcy5vYmplY3RzLmxlbmd0aD0wO2Zvcih2YXIgdD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxmLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sZi5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sZi5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxmLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjIwNCwiLi9saWIvZ3JpZCI6MjA1LCIuL2xpYi9saW5lIjoyMDYsIi4vbGliL3RleHQiOjIwOCwiZ2wtc2VsZWN0LXN0YXRpYyI6MjUyfV0sMjE4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xudmFyeWluZyB2ZWMyIHV2O1xudm9pZCBtYWluKCkge1xuICB1diA9IHBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAsIDEpO1xufSIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjI1M31dLDIxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPW51bGw7dHJ5e3I9dC5nZXRDb250ZXh0KCJ3ZWJnbCIsZSkscnx8KHI9dC5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuImJvb2xlYW4iIT10eXBlb2YgdHx8dH1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUoKXtpZighdyYmRy5hdXRvUmVzaXplKXt2YXIgdD1NLnBhcmVudE5vZGUsZT0xLHI9MTt0JiZ0IT09ZG9jdW1lbnQuYm9keT8oZT10LmNsaWVudFdpZHRoLHI9dC5jbGllbnRIZWlnaHQpOihlPXdpbmRvdy5pbm5lcldpZHRoLHI9d2luZG93LmlubmVySGVpZ2h0KTt2YXIgbj0wfE1hdGguY2VpbChlKkcucGl4ZWxSYXRpbyksaT0wfE1hdGguY2VpbChyKkcucGl4ZWxSYXRpbyk7aWYobiE9PU0ud2lkdGh8fGkhPT1NLmhlaWdodCl7TS53aWR0aD1uLE0uaGVpZ2h0PWk7dmFyIGE9TS5zdHlsZTthLnBvc2l0aW9uPWEucG9zaXRpb258fCJhYnNvbHV0ZSIsYS5sZWZ0PSIwcHgiLGEudG9wPSIwcHgiLGEud2lkdGg9ZSsicHgiLGEuaGVpZ2h0PXIrInB4IixOPSEwfX19ZnVuY3Rpb24gcigpe2Zvcih2YXIgdD1PLmxlbmd0aCxlPWoubGVuZ3RoLHI9MDtyPGU7KytyKUZbcl09MDt0OmZvcih2YXIgcj0wO3I8dDsrK3Ipe3ZhciBuPU9bcl0saT1uLnBpY2tTbG90cztpZihpKXtmb3IodmFyIGE9MDthPGU7KythKWlmKEZbYV0raTwyNTUpe1Jbcl09YSxuLnNldFBpY2tCYXNlKEZbYV0rMSksRlthXSs9aTtjb250aW51ZSB0fXZhciBvPWYoQSxxKTtSW3JdPWUsai5wdXNoKG8pLEYucHVzaChpKSxuLnNldFBpY2tCYXNlKDEpLGUrPTF9ZWxzZSBSW3JdPS0xfWZvcig7ZT4wJiYwPT09RltlLTFdOylGLnBvcCgpLGoucG9wKCkuZGlzcG9zZSgpfWZ1bmN0aW9uIHMoKXtpZihHLmNvbnRleHRMb3N0KXJldHVybiEwO0EuaXNDb250ZXh0TG9zdCgpJiYoRy5jb250ZXh0TG9zdD0hMCxHLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSxHLnNlbGVjdGlvbi5vYmplY3Q9bnVsbCxHLm9uY29udGV4dGxvc3MmJkcub25jb250ZXh0bG9zcygpKX1mdW5jdGlvbiBiKCl7aWYoIXMoKSl7QS5jb2xvck1hc2soITAsITAsITAsITApLEEuZGVwdGhNYXNrKCEwKSxBLmRpc2FibGUoQS5CTEVORCksQS5lbmFibGUoQS5ERVBUSF9URVNUKTtmb3IodmFyIHQ9Ty5sZW5ndGgsZT1qLmxlbmd0aCxyPTA7cjxlOysrcil7dmFyIG49altyXTtuLnNoYXBlPVksbi5iZWdpbigpO2Zvcih2YXIgaT0wO2k8dDsrK2kpaWYoUltpXT09PXIpe3ZhciBhPU9baV07YS5kcmF3UGljayYmKGEucGl4ZWxSYXRpbz0xLGEuZHJhd1BpY2soSCkpfW4uZW5kKCl9fX1mdW5jdGlvbiB4KCl7aWYoIXMoKSl7ZSgpO3ZhciB0PUcuY2FtZXJhLnRpY2soKTtILnZpZXc9Ry5jYW1lcmEubWF0cml4LE49Tnx8dCxCPUJ8fHQsSS5waXhlbFJhdGlvPUcucGl4ZWxSYXRpbyxQLnBpeGVsUmF0aW89Ry5waXhlbFJhdGlvO3ZhciByPU8ubGVuZ3RoLG49WlswXSxpPVpbMV07blswXT1uWzFdPW5bMl09MS8wLGlbMF09aVsxXT1pWzJdPS0xLzA7Zm9yKHZhciBvPTA7bzxyOysrbyl7dmFyIGw9T1tvXTtsLnBpeGVsUmF0aW89Ry5waXhlbFJhdGlvLGwuYXhlcz1HLmF4ZXMsTj1OfHwhIWwuZGlydHksQj1CfHwhIWwuZGlydHk7dmFyIHU9bC5ib3VuZHM7aWYodSlmb3IodmFyIGg9dVswXSxmPXVbMV0sZD0wO2Q8MzsrK2QpbltkXT1NYXRoLm1pbihuW2RdLGhbZF0pLGlbZF09TWF0aC5tYXgoaVtkXSxmW2RdKX12YXIgbT1HLmJvdW5kcztpZihHLmF1dG9Cb3VuZHMpZm9yKHZhciBkPTA7ZDwzOysrZCl7aWYoaVtkXTxuW2RdKW5bZF09LTEsaVtkXT0xO2Vsc2V7bltkXT09PWlbZF0mJihuW2RdLT0xLGlbZF0rPTEpO3ZhciBnPS4wNSooaVtkXS1uW2RdKTtuW2RdPW5bZF0tZyxpW2RdPWlbZF0rZ31tWzBdW2RdPW5bZF0sbVsxXVtkXT1pW2RdfWZvcih2YXIgeT0hMSxkPTA7ZDwzOysrZCl5PXl8fEpbMF1bZF0hPT1tWzBdW2RdfHxKWzFdW2RdIT09bVsxXVtkXSxKWzBdW2RdPW1bMF1bZF0sSlsxXVtkXT1tWzFdW2RdO2lmKEI9Qnx8eSxOPU58fHkpe2lmKHkpe2Zvcih2YXIgeD1bMCwwLDBdLG89MDtvPDM7KytvKXhbb109YSgobVsxXVtvXS1tWzBdW29dKS8xMCk7SS5hdXRvVGlja3M/SS51cGRhdGUoe2JvdW5kczptLHRpY2tTcGFjaW5nOnh9KTpJLnVwZGF0ZSh7Ym91bmRzOm19KX12YXIgXz1BLmRyYXdpbmdCdWZmZXJXaWR0aCx3PUEuZHJhd2luZ0J1ZmZlckhlaWdodDtxWzBdPV8scVsxXT13LFlbMF09MHxNYXRoLm1heChfL0cucGl4ZWxSYXRpbywxKSxZWzFdPTB8TWF0aC5tYXgody9HLnBpeGVsUmF0aW8sMSksdihVLEcuZm92eSxfL3csRy56TmVhcixHLnpGYXIpO2Zvcih2YXIgbz0wO288MTY7KytvKVZbb109MDtWWzE1XT0xO2Zvcih2YXIgTT0wLG89MDtvPDM7KytvKU09TWF0aC5tYXgoTSxtWzFdW29dLW1bMF1bb10pO2Zvcih2YXIgbz0wO288MzsrK28pRy5hdXRvU2NhbGU/Vls1Km9dPUcuYXNwZWN0W29dLyhtWzFdW29dLW1bMF1bb10pOlZbNSpvXT0xL00sRy5hdXRvQ2VudGVyJiYoVlsxMitvXT0uNSotVls1Km9dKihtWzBdW29dK21bMV1bb10pKTtmb3IodmFyIG89MDtvPHI7KytvKXt2YXIgbD1PW29dO2wuYXhlc0JvdW5kcz1tLEcuY2xpcFRvQm91bmRzJiYobC5jbGlwQm91bmRzPW0pfVMub2JqZWN0JiYoRy5zbmFwVG9EYXRhP1AucG9zaXRpb249Uy5kYXRhQ29vcmRpbmF0ZTpQLnBvc2l0aW9uPVMuZGF0YVBvc2l0aW9uLFAuYm91bmRzPW0pLEImJihCPSExLGIoKSksRy5heGVzUGl4ZWxzPWMoRy5heGVzLEgsXyx3KSxHLm9ucmVuZGVyJiZHLm9ucmVuZGVyKCksQS5iaW5kRnJhbWVidWZmZXIoQS5GUkFNRUJVRkZFUixudWxsKSxBLnZpZXdwb3J0KDAsMCxfLHcpO3ZhciBrPUcuY2xlYXJDb2xvcjtBLmNsZWFyQ29sb3Ioa1swXSxrWzFdLGtbMl0sa1szXSksQS5jbGVhcihBLkNPTE9SX0JVRkZFUl9CSVR8QS5ERVBUSF9CVUZGRVJfQklUKSxBLmRlcHRoTWFzayghMCksQS5jb2xvck1hc2soITAsITAsITAsITApLEEuZW5hYmxlKEEuREVQVEhfVEVTVCksQS5kZXB0aEZ1bmMoQS5MRVFVQUwpLEEuZGlzYWJsZShBLkJMRU5EKSxBLmRpc2FibGUoQS5DVUxMX0ZBQ0UpO3ZhciBUPSExO0kuZW5hYmxlJiYoVD1UfHxJLmlzVHJhbnNwYXJlbnQoKSxJLmRyYXcoSCkpLFAuYXhlcz1JLFMub2JqZWN0JiZQLmRyYXcoSCksQS5kaXNhYmxlKEEuQ1VMTF9GQUNFKTtmb3IodmFyIG89MDtvPHI7KytvKXt2YXIgbD1PW29dO2wuYXhlcz1JLGwucGl4ZWxSYXRpbz1HLnBpeGVsUmF0aW8sbC5pc09wYXF1ZSYmbC5pc09wYXF1ZSgpJiZsLmRyYXcoSCksbC5pc1RyYW5zcGFyZW50JiZsLmlzVHJhbnNwYXJlbnQoKSYmKFQ9ITApfWlmKFQpe0Uuc2hhcGU9cSxFLmJpbmQoKSxBLmNsZWFyKEEuREVQVEhfQlVGRkVSX0JJVCksQS5jb2xvck1hc2soITEsITEsITEsITEpLEEuZGVwdGhNYXNrKCEwKSxBLmRlcHRoRnVuYyhBLkxFU1MpLEkuZW5hYmxlJiZJLmlzVHJhbnNwYXJlbnQoKSYmSS5kcmF3VHJhbnNwYXJlbnQoSCk7Zm9yKHZhciBvPTA7bzxyOysrbyl7dmFyIGw9T1tvXTtsLmlzT3BhcXVlJiZsLmlzT3BhcXVlKCkmJmwuZHJhdyhIKX1BLmVuYWJsZShBLkJMRU5EKSxBLmJsZW5kRXF1YXRpb24oQS5GVU5DX0FERCksQS5ibGVuZEZ1bmMoQS5PTkUsQS5PTkVfTUlOVVNfU1JDX0FMUEhBKSxBLmNvbG9yTWFzayghMCwhMCwhMCwhMCksQS5kZXB0aE1hc2soITEpLEEuY2xlYXJDb2xvcigwLDAsMCwwKSxBLmNsZWFyKEEuQ09MT1JfQlVGRkVSX0JJVCksSS5pc1RyYW5zcGFyZW50KCkmJkkuZHJhd1RyYW5zcGFyZW50KEgpO2Zvcih2YXIgbz0wO288cjsrK28pe3ZhciBsPU9bb107bC5pc1RyYW5zcGFyZW50JiZsLmlzVHJhbnNwYXJlbnQoKSYmbC5kcmF3VHJhbnNwYXJlbnQoSCl9QS5iaW5kRnJhbWVidWZmZXIoQS5GUkFNRUJVRkZFUixudWxsKSxBLmJsZW5kRnVuYyhBLk9ORSxBLk9ORV9NSU5VU19TUkNfQUxQSEEpLEEuZGlzYWJsZShBLkRFUFRIX1RFU1QpLEwuYmluZCgpLEUuY29sb3JbMF0uYmluZCgwKSxMLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAscChBKSxBLmRpc2FibGUoQS5CTEVORCl9Tj0hMTtmb3IodmFyIG89MDtvPHI7KytvKU9bb10uZGlydHk9ITF9fX1mdW5jdGlvbiBfKCl7d3x8Ry5jb250ZXh0TG9zdHx8KHJlcXVlc3RBbmltYXRpb25GcmFtZShfKSx4KCkpfXQ9dHx8e307dmFyIHc9ITEsTT0odC5waXhlbFJhdGlvfHxwYXJzZUZsb2F0KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0LmNhbnZhcyk7aWYoIU0paWYoTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNvbnRhaW5lcil7dmFyIGs9dC5jb250YWluZXI7ay5hcHBlbmRDaGlsZChNKX1lbHNlIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTSk7dmFyIEE9dC5nbDtpZihBfHwoQT1pKE0sdC5nbE9wdGlvbnN8fHtwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpLCFBKXRocm93IG5ldyBFcnJvcigid2ViZ2wgbm90IHN1cHBvcnRlZCIpO3ZhciBUPXQuYm91bmRzfHxbWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSxTPW5ldyBuLEU9ZChBLFtBLmRyYXdpbmdCdWZmZXJXaWR0aCxBLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHtwcmVmZXJGbG9hdDoheX0pLEw9ZyhBKSxDPXQuY2FtZXJhfHx7ZXllOlsyLDAsMF0sY2VudGVyOlswLDAsMF0sdXA6WzAsMSwwXSx6b29tTWluOi4xLHpvb21NYXg6MTAwLG1vZGU6InR1cm50YWJsZSJ9LHo9dC5heGVzfHx7fSxJPXUoQSx6KTtJLmVuYWJsZT0hei5kaXNhYmxlO3ZhciBEPXQuc3Bpa2VzfHx7fSxQPWgoQSxEKSxPPVtdLFI9W10sRj1bXSxqPVtdLE49ITAsQj0hMCxVPW5ldyBBcnJheSgxNiksVj1uZXcgQXJyYXkoMTYpLEg9e3ZpZXc6bnVsbCxwcm9qZWN0aW9uOlUsbW9kZWw6Vn0sQj0hMCxxPVtBLmRyYXdpbmdCdWZmZXJXaWR0aCxBLmRyYXdpbmdCdWZmZXJIZWlnaHRdLEc9e2dsOkEsY29udGV4dExvc3Q6ITEscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW98fHBhcnNlRmxvYXQod2luZG93LmRldmljZVBpeGVsUmF0aW8pLGNhbnZhczpNLHNlbGVjdGlvbjpTLGNhbWVyYTpsKE0sQyksYXhlczpJLGF4ZXNQaXhlbHM6bnVsbCxzcGlrZXM6UCxib3VuZHM6VCxvYmplY3RzOk8sc2hhcGU6cSxhc3BlY3Q6dC5hc3BlY3RSYXRpb3x8WzEsMSwxXSxwaWNrUmFkaXVzOnQucGlja1JhZGl1c3x8MTAsek5lYXI6dC56TmVhcnx8LjAxLHpGYXI6dC56RmFyfHwxZTMsZm92eTp0LmZvdnl8fE1hdGguUEkvNCxjbGVhckNvbG9yOnQuY2xlYXJDb2xvcnx8WzAsMCwwLDBdLGF1dG9SZXNpemU6byh0LmF1dG9SZXNpemUpLGF1dG9Cb3VuZHM6byh0LmF1dG9Cb3VuZHMpLGF1dG9TY2FsZTohIXQuYXV0b1NjYWxlLGF1dG9DZW50ZXI6byh0LmF1dG9DZW50ZXIpLGNsaXBUb0JvdW5kczpvKHQuY2xpcFRvQm91bmRzKSxzbmFwVG9EYXRhOiEhdC5zbmFwVG9EYXRhLG9uc2VsZWN0OnQub25zZWxlY3R8fG51bGwsb25yZW5kZXI6dC5vbnJlbmRlcnx8bnVsbCxvbmNsaWNrOnQub25jbGlja3x8bnVsbCxjYW1lcmFQYXJhbXM6SCxvbmNvbnRleHRsb3NzOm51bGwsbW91c2VMaXN0ZW5lcjpudWxsfSxZPVtBLmRyYXdpbmdCdWZmZXJXaWR0aC9HLnBpeGVsUmF0aW98MCxBLmRyYXdpbmdCdWZmZXJIZWlnaHQvRy5waXhlbFJhdGlvfDBdO0cuYXV0b1Jlc2l6ZSYmZSgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGUpLEcudXBkYXRlPWZ1bmN0aW9uKHQpe3d8fCh0PXR8fHt9LE49ITAsQj0hMCl9LEcuYWRkPWZ1bmN0aW9uKHQpe3d8fCh0LmF4ZXM9SSxPLnB1c2godCksUi5wdXNoKC0xKSxOPSEwLEI9ITAscigpKX0sRy5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoIXcpe3ZhciBlPU8uaW5kZXhPZih0KTtlPDB8fChPLnNwbGljZShlLDEpLFIucG9wKCksTj0hMCxCPSEwLHIoKSl9fSxHLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZighdyYmKHc9ITAsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsZSksTS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixzKSxHLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSwhRy5jb250ZXh0TG9zdCkpe0kuZGlzcG9zZSgpLFAuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8Ty5sZW5ndGg7Kyt0KU9bdF0uZGlzcG9zZSgpO0UuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8ai5sZW5ndGg7Kyt0KWpbdF0uZGlzcG9zZSgpO0wuZGlzcG9zZSgpLEE9bnVsbCxJPW51bGwsUD1udWxsLE89W119fTt2YXIgWD0hMSxXPTA7Ry5tb3VzZUxpc3RlbmVyPW0oTSxmdW5jdGlvbih0LGUscil7aWYoIXcpe3ZhciBuPWoubGVuZ3RoLGk9Ty5sZW5ndGgsYT1TLm9iamVjdDtTLmRpc3RhbmNlPTEvMCxTLm1vdXNlWzBdPWUsUy5tb3VzZVsxXT1yLFMub2JqZWN0PW51bGwsUy5zY3JlZW49bnVsbCxTLmRhdGFDb29yZGluYXRlPVMuZGF0YVBvc2l0aW9uPW51bGw7dmFyIG89ITE7aWYodCYmVylYPSEwO2Vsc2V7WCYmKEI9ITApLFg9ITE7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGw9altzXS5xdWVyeShlLFlbMV0tci0xLEcucGlja1JhZGl1cyk7aWYobCl7aWYobC5kaXN0YW5jZT5TLmRpc3RhbmNlKWNvbnRpbnVlO2Zvcih2YXIgdT0wO3U8aTsrK3Upe3ZhciBjPU9bdV07aWYoUlt1XT09PXMpe3ZhciBoPWMucGljayhsKTtoJiYoUy5idXR0b25zPXQsUy5zY3JlZW49bC5jb29yZCxTLmRpc3RhbmNlPWwuZGlzdGFuY2UsUy5vYmplY3Q9YyxTLmluZGV4PWguZGlzdGFuY2UsUy5kYXRhUG9zaXRpb249aC5wb3NpdGlvbixTLmRhdGFDb29yZGluYXRlPWguZGF0YUNvb3JkaW5hdGUsUy5kYXRhPWgsbz0hMCl9fX19fWEmJmEhPT1TLm9iamVjdCYmKGEuaGlnaGxpZ2h0JiZhLmhpZ2hsaWdodChudWxsKSxOPSEwKSxTLm9iamVjdCYmKFMub2JqZWN0LmhpZ2hsaWdodCYmUy5vYmplY3QuaGlnaGxpZ2h0KFMuZGF0YSksTj0hMCksbz1vfHxTLm9iamVjdCE9PWEsbyYmRy5vbnNlbGVjdCYmRy5vbnNlbGVjdChTKSwxJnQmJiEoMSZXKSYmRy5vbmNsaWNrJiZHLm9uY2xpY2soUyksVz10fX0pLE0uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIscyk7dmFyIFo9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sSj1bWlswXS5zbGljZSgpLFpbMV0uc2xpY2UoKV07cmV0dXJuIF8oKSxHLnJlZHJhdz1mdW5jdGlvbigpe3d8fChOPSEwLHgoKSl9LEd9ZS5leHBvcnRzPXM7dmFyIGw9dCgiM2Qtdmlldy1jb250cm9scyIpLHU9dCgiZ2wtYXhlczNkIiksYz10KCJnbC1heGVzM2QvcHJvcGVydGllcyIpLGg9dCgiZ2wtc3Bpa2VzM2QiKSxmPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxkPXQoImdsLWZibyIpLHA9dCgiYS1iaWctdHJpYW5nbGUiKSxtPXQoIm1vdXNlLWNoYW5nZSIpLHY9dCgiZ2wtbWF0NC9wZXJzcGVjdGl2ZSIpLGc9dCgiLi9saWIvc2hhZGVyIikseT10KCJpcy1tb2JpbGUiKSgpfSx7Ii4vbGliL3NoYWRlciI6MjE4LCIzZC12aWV3LWNvbnRyb2xzIjozNCwiYS1iaWctdHJpYW5nbGUiOjM3LCJnbC1heGVzM2QiOjE0NiwiZ2wtYXhlczNkL3Byb3BlcnRpZXMiOjE1MywiZ2wtZmJvIjoxNjIsImdsLW1hdDQvcGVyc3BlY3RpdmUiOjE4MiwiZ2wtc2VsZWN0LXN0YXRpYyI6MjUyLCJnbC1zcGlrZXMzZCI6MjYyLCJpcy1tb2JpbGUiOjI5NCwibW91c2UtY2hhbmdlIjo0NTB9XSwyMjA6W2Z1bmN0aW9uKHQsZSxyKXtyLnBvaW50VmVydGV4PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XG5cbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiBjbykge1xuICBoaWdocCBmbG9hdCBhID0gMTIuOTg5ODtcbiAgaGlnaHAgZmxvYXQgYiA9IDc4LjIzMztcbiAgaGlnaHAgZmxvYXQgYyA9IDQzNzU4LjU0NTM7XG4gIGhpZ2hwIGZsb2F0IGQgPSBkb3QoY28ueHksIHZlYzIoYSwgYikpO1xuICBoaWdocCBmbG9hdCBlID0gbW9kKGQsIDMuMTQpO1xuICByZXR1cm4gZnJhY3Qoc2luKGUpICogYyk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgICAvLyBpZiB3ZSBkb24ndCBqaXR0ZXIgdGhlIHBvaW50IHNpemUgYSBiaXQsIG92ZXJhbGwgcG9pbnQgY2xvdWRcbiAgICAvLyBzYXR1cmF0aW9uICdqdW1wcycgb24gem9vbWluZywgd2hpY2ggaXMgZGlzdHVyYmluZyBhbmQgY29uZnVzaW5nXG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZSAqICgoMTkuNSArIHJhbmQocG9zaXRpb24pKSAvIDIwLjApO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIC8vIGdldCB0aGUgc2FtZSBzcXVhcmUgc3VyZmFjZSBhcyBjaXJjbGUgd291bGQgYmVcbiAgICBnbF9Qb2ludFNpemUgKj0gMC44ODY7XG4gIH1cbn0iLHIucG9pbnRGcmFnbWVudD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXM7XG4gIHZlYzQgYmFzZUNvbG9yO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICAgIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgICAgZGlzY2FyZDtcbiAgICB9XG4gICAgYmFzZUNvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgc3RlcChyYWRpdXMsIGNlbnRlckZyYWN0aW9uKSk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcbiAgfVxufVxuIixyLnBpY2tWZXJ0ZXg9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5cbnVuaWZvcm0gbWF0MyBtYXRyaXg7XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcblxuICB2ZWM0IGlkID0gcGlja0lkICsgcGlja09mZnNldDtcbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkID0gaWQ7XG59XG4iLHIucGlja0ZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICBpZihyYWRpdXMgPiAxLjApIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xufVxuIn0se31dLDIyMTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTBdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2xpYi9HTEVycm9yIjoyMjIsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjoyMjMsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MjI0LCIuL2xpYi9yZWZsZWN0IjoyMjUsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MjI2LCIuL2xpYi9zaGFkZXItY2FjaGUiOjIyNyxkdXA6MjEwfV0sMjIyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxMV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxMX1dLDIyMzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjIyMixkdXA6MjEyfV0sMjI0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxM11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjIyLCIuL3JlZmxlY3QiOjIyNSxkdXA6MjEzfV0sMjI1OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxNF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxNH1dLDIyNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTVdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyMTV9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE2XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyMjIsZHVwOjIxNiwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjoxNjMsIndlYWttYXAtc2hpbSI6NTYwfV0sMjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLnBsb3Q9dCx0aGlzLm9mZnNldEJ1ZmZlcj1lLHRoaXMucGlja0J1ZmZlcj1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waWNrU2hhZGVyPWksdGhpcy5zaXplTWluPS41LHRoaXMuc2l6ZU1pbkNhcD0yLHRoaXMuc2l6ZU1heD0yMCx0aGlzLmFyZWFSYXRpbz0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLAp0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmJsZW5kPSExLHRoaXMucGlja09mZnNldD0wLHRoaXMucG9pbnRzPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoPj4+MTtmb3Iocj0wO3I8aTtyKyspe3ZhciBhPXRbMipyXSxvPXRbMipyKzFdO2E+PWVbMF0mJmE8PWVbMl0mJm8+PWVbMV0mJm88PWVbM10mJm4rK31yZXR1cm4gbn1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5nbCxpPXMociksYT1zKHIpLGw9byhyLHUucG9pbnRWZXJ0ZXgsdS5wb2ludEZyYWdtZW50KSxjPW8ocix1LnBpY2tWZXJ0ZXgsdS5waWNrRnJhZ21lbnQpLGg9bmV3IG4odCxpLGEsbCxjKTtyZXR1cm4gaC51cGRhdGUoZSksdC5hZGRPYmplY3QoaCksaH12YXIgbz10KCJnbC1zaGFkZXIiKSxzPXQoImdsLWJ1ZmZlciIpLGw9dCgidHlwZWRhcnJheS1wb29sIiksdT10KCIuL2xpYi9zaGFkZXIiKTtlLmV4cG9ydHM9YTt2YXIgYz1uLnByb3RvdHlwZTtjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9dmFyIHI7dD10fHx7fSx0aGlzLnNpemVNaW49ZSgic2l6ZU1pbiIsLjUpLHRoaXMuc2l6ZU1heD1lKCJzaXplTWF4IiwyMCksdGhpcy5jb2xvcj1lKCJjb2xvciIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYXJlYVJhdGlvPWUoImFyZWFSYXRpbyIsMSksdGhpcy5ib3JkZXJDb2xvcj1lKCJib3JkZXJDb2xvciIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYmxlbmQ9ZSgiYmxlbmQiLCExKTt2YXIgbj10LnBvc2l0aW9ucy5sZW5ndGg+Pj4xLGk9dC5wb3NpdGlvbnMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXksYT10LmlkVG9JbmRleCBpbnN0YW5jZW9mIEludDMyQXJyYXkmJnQuaWRUb0luZGV4Lmxlbmd0aD49bixvPXQucG9zaXRpb25zLHM9aT9vOmwubWFsbG9jRmxvYXQzMihvLmxlbmd0aCksdT1hP3QuaWRUb0luZGV4OmwubWFsbG9jSW50MzIobik7aWYoaXx8cy5zZXQobyksIWEpZm9yKHMuc2V0KG8pLHI9MDtyPG47cisrKXVbcl09cjt0aGlzLnBvaW50cz1vLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShzKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKHUpLGl8fGwuZnJlZShzKSxhfHxsLmZyZWUodSksdGhpcy5wb2ludENvdW50PW4sdGhpcy5waWNrT2Zmc2V0PTB9LGMudW5pZmllZERyYXc9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj12b2lkIDAhPT1yLGE9bj90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsbz10aGlzLnBsb3QuZ2wscz10aGlzLnBsb3QuZGF0YUJveDtpZigwPT09dGhpcy5wb2ludENvdW50KXJldHVybiByO3ZhciBsPXNbMl0tc1swXSx1PXNbM10tc1sxXSxjPWkodGhpcy5wb2ludHMscyksaD10aGlzLnBsb3QucGlja1BpeGVsUmF0aW8qTWF0aC5tYXgoTWF0aC5taW4odGhpcy5zaXplTWluQ2FwLHRoaXMuc2l6ZU1pbiksTWF0aC5taW4odGhpcy5zaXplTWF4LHRoaXMuc2l6ZU1heC9NYXRoLnBvdyhjLC4zMzMzMykpKTt0WzBdPTIvbCx0WzRdPTIvdSx0WzZdPS0yKnNbMF0vbC0xLHRbN109LTIqc1sxXS91LTEsdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLGEuYmluZCgpLGEuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksYS51bmlmb3Jtcy5tYXRyaXg9dCxhLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3IsYS51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLGEudW5pZm9ybXMucG9pbnRDbG91ZD1oPDUsYS51bmlmb3Jtcy5wb2ludFNpemU9aCxhLnVuaWZvcm1zLmNlbnRlckZyYWN0aW9uPU1hdGgubWluKDEsTWF0aC5tYXgoMCxNYXRoLnNxcnQoMS10aGlzLmFyZWFSYXRpbykpKSxuJiYoZVswXT0yNTUmcixlWzFdPXI+PjgmMjU1LGVbMl09cj4+MTYmMjU1LGVbM109cj4+MjQmMjU1LHRoaXMucGlja0J1ZmZlci5iaW5kKCksYS5hdHRyaWJ1dGVzLnBpY2tJZC5wb2ludGVyKG8uVU5TSUdORURfQllURSksYS51bmlmb3Jtcy5waWNrT2Zmc2V0PWUsdGhpcy5waWNrT2Zmc2V0PXIpO3ZhciBmPW8uZ2V0UGFyYW1ldGVyKG8uQkxFTkQpLGQ9by5nZXRQYXJhbWV0ZXIoby5ESVRIRVIpO3JldHVybiBmJiYhdGhpcy5ibGVuZCYmby5kaXNhYmxlKG8uQkxFTkQpLGQmJm8uZGlzYWJsZShvLkRJVEhFUiksby5kcmF3QXJyYXlzKG8uUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSxmJiYhdGhpcy5ibGVuZCYmby5lbmFibGUoby5CTEVORCksZCYmby5lbmFibGUoby5ESVRIRVIpLHIrdGhpcy5wb2ludENvdW50fX0oKSxjLmRyYXc9Yy51bmlmaWVkRHJhdyxjLmRyYXdQaWNrPWMudW5pZmllZERyYXcsYy5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fX0seyIuL2xpYi9zaGFkZXIiOjIyMCwiZ2wtYnVmZmVyIjoxNTQsImdsLXNoYWRlciI6MjIxLCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDIyOTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGksYSxvLHMsbCx1PWVbMF0sYz1lWzFdLGg9ZVsyXSxmPWVbM10sZD1yWzBdLHA9clsxXSxtPXJbMl0sdj1yWzNdO3JldHVybiBhPXUqZCtjKnAraCptK2YqdixhPDAmJihhPS1hLGQ9LWQscD0tcCxtPS1tLHY9LXYpLDEtYT4xZS02PyhpPU1hdGguYWNvcyhhKSxvPU1hdGguc2luKGkpLHM9TWF0aC5zaW4oKDEtbikqaSkvbyxsPU1hdGguc2luKG4qaSkvbyk6KHM9MS1uLGw9biksdFswXT1zKnUrbCpkLHRbMV09cypjK2wqcCx0WzJdPXMqaCtsKm0sdFszXT1zKmYrbCp2LHR9ZS5leHBvcnRzPW59LHt9XSwyMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt2ZXJ0ZXg6InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cblxudmVjNCBjb21wdXRlUG9zaXRpb25fMV8wKHZlYzIgcG9zSGksIHZlYzIgcG9zTG8sIHZlYzIgc2NIaSwgdmVjMiBzY0xvLCB2ZWMyIHRySGksIHZlYzIgdHJMbykge1xuICByZXR1cm4gdmVjNCgocG9zSGkgKyB0ckhpKSAqIHNjSGlcbiAgXHRcdFx0Ly9GSVhNRTogdGhpcyB0aGluZ3kgZG9lcyBub3QgZ2l2ZSBub3RpY2VhYmxlIHByZWNpc2lvbiBnYWluLCBuZWVkIHRlc3RcbiAgICAgICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgICAgICArIChwb3NIaSArIHRySGkpICogc2NMb1xuICAgICAgICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjTG9cbiAgICAgICAgICAgICwgMCwgMSk7XG59XG5cblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25IaSwgcG9zaXRpb25MbztcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXI7XG5hdHRyaWJ1dGUgdmVjMiBjaGFyLCBjb2xvcjtcblxuLy90aGlzIGlzIDY0LWJpdCBmb3JtIG9mIHNjYWxlIGFuZCB0cmFuc2xhdGVcbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG87XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzQgdmlld0JveDtcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XG5cbnZhcnlpbmcgdmVjNCBjaGFyQ29sb3IsIGJvcmRlckNvbG9yO1xudmFyeWluZyB2ZWMyIGNoYXJJZDtcbnZhcnlpbmcgdmVjMiBwb2ludENvb3JkO1xudmFyeWluZyBmbG9hdCBwb2ludFNpemU7XG52YXJ5aW5nIGZsb2F0IGJvcmRlcldpZHRoO1xuXG5cbnZvaWQgbWFpbigpIHtcbiAgY2hhckNvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoY29sb3IueCAvIDI1NS4sIDApKTtcbiAgYm9yZGVyQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMihjb2xvci55IC8gMjU1LiwgMCkpO1xuXG4gIGdsX1BvaW50U2l6ZSA9IHNpemUgKiBwaXhlbFJhdGlvO1xuICBwb2ludFNpemUgPSBzaXplICogcGl4ZWxSYXRpbztcblxuICBjaGFySWQgPSBjaGFyO1xuICBib3JkZXJXaWR0aCA9IGJvcmRlcjtcblxuICBnbF9Qb3NpdGlvbiA9IGNvbXB1dGVQb3NpdGlvbl8xXzAoXG4gICAgcG9zaXRpb25IaSwgcG9zaXRpb25MbyxcbiAgICBzY2FsZUhpLCBzY2FsZUxvLFxuICAgIHRyYW5zbGF0ZUhpLCB0cmFuc2xhdGVMbyk7XG5cbiAgcG9pbnRDb29yZCA9IHZpZXdCb3gueHkgKyAodmlld0JveC56dyAtIHZpZXdCb3gueHkpICogKGdsX1Bvc2l0aW9uLnh5ICogLjUgKyAuNSk7XG59XG4iLGZyYWdtZW50OiJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCBjaGFycztcbnVuaWZvcm0gdmVjMiBjaGFyc1NoYXBlO1xudW5pZm9ybSBmbG9hdCBjaGFyc1N0ZXAsIHBpeGVsUmF0aW8sIGNoYXJPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBib3JkZXJDb2xvcjtcbnZhcnlpbmcgdmVjNCBjaGFyQ29sb3I7XG52YXJ5aW5nIHZlYzIgY2hhcklkO1xudmFyeWluZyB2ZWMyIHBvaW50Q29vcmQ7XG52YXJ5aW5nIGZsb2F0IHBvaW50U2l6ZTtcbnZhcnlpbmcgZmxvYXQgYm9yZGVyV2lkdGg7XG5cbnZvaWQgbWFpbigpIHtcblx0dmVjMiBwb2ludFVWID0gKHBvaW50Q29vcmQgLSBnbF9GcmFnQ29vcmQueHkgKyBwb2ludFNpemUgKiAuNSkgLyBwb2ludFNpemU7XG5cdHBvaW50VVYueCA9IDEuIC0gcG9pbnRVVi54O1xuXHR2ZWMyIHRleENvb3JkID0gKChjaGFySWQgKyBwb2ludFVWKSAqIGNoYXJzU3RlcCkgLyBjaGFyc1NoYXBlO1xuXHRmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKGNoYXJzLCB0ZXhDb29yZCkucjtcblxuXHQvL21heC1kaXN0YW5jZSBhbHBoYVxuXHRpZiAoZGlzdCA8IDFlLTIpXG5cdFx0ZGlzY2FyZDtcblxuXHRmbG9hdCBnYW1tYSA9IC4wMDQ1ICogY2hhcnNTdGVwIC8gcG9pbnRTaXplO1xuXG4gICAgLy9udWxsLWJvcmRlciBjYXNlXG4gXHRpZiAoYm9yZGVyV2lkdGggKiBib3JkZXJDb2xvci5hID09IDAuKSB7XG5cdFx0ZmxvYXQgY2hhckFtdCA9IHNtb290aHN0ZXAoLjc0OCAtIGdhbW1hLCAuNzQ4ICsgZ2FtbWEsIGRpc3QpO1xuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoY2hhckNvbG9yLnJnYiwgY2hhckFtdCpjaGFyQ29sb3IuYSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmxvYXQgZGlmID0gNS4gKiBwaXhlbFJhdGlvICogYm9yZGVyV2lkdGggLyBwb2ludFNpemU7XG5cdGZsb2F0IGJvcmRlckxldmVsID0gLjc0OCAtIGRpZiAqIC41O1xuXHRmbG9hdCBjaGFyTGV2ZWwgPSAuNzQ4ICsgZGlmICogLjU7XG5cblx0ZmxvYXQgYm9yZGVyQW10ID0gc21vb3Roc3RlcChib3JkZXJMZXZlbCAtIGdhbW1hLCBib3JkZXJMZXZlbCArIGdhbW1hLCBkaXN0KTtcblx0ZmxvYXQgY2hhckFtdCA9IHNtb290aHN0ZXAoY2hhckxldmVsIC0gZ2FtbWEsIGNoYXJMZXZlbCArIGdhbW1hLCBkaXN0KTtcblxuXHR2ZWM0IGNvbG9yID0gYm9yZGVyQ29sb3I7XG5cdGNvbG9yLmEgKj0gYm9yZGVyQW10O1xuXG5cdGdsX0ZyYWdDb2xvciA9IG1peChjb2xvciwgY2hhckNvbG9yLCBjaGFyQW10KTtcbn1cbiIscGlja1ZlcnRleDoicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25IaSwgcG9zaXRpb25MbztcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuYXR0cmlidXRlIGZsb2F0IHNpemU7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG87XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxuXG52ZWM0IGNvbXB1dGVQb3NpdGlvbl8xXzAodmVjMiBwb3NIaSwgdmVjMiBwb3NMbywgdmVjMiBzY0hpLCB2ZWMyIHNjTG8sIHZlYzIgdHJIaSwgdmVjMiB0ckxvKSB7XG4gIHJldHVybiB2ZWM0KChwb3NIaSArIHRySGkpICogc2NIaVxuICBcdFx0XHQvL0ZJWE1FOiB0aGlzIHRoaW5neSBkb2VzIG5vdCBnaXZlIG5vdGljZWFibGUgcHJlY2lzaW9uIGdhaW4sIG5lZWQgdGVzdFxuICAgICAgICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjSGlcbiAgICAgICAgICAgICsgKHBvc0hpICsgdHJIaSkgKiBzY0xvXG4gICAgICAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NMb1xuICAgICAgICAgICAgLCAwLCAxKTtcbn1cblxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgZnJhZ0lkID0gaWQgKyBwaWNrT2Zmc2V0O1xuXG4gIGZyYWdJZC55ICs9IGZsb29yKGZyYWdJZC54IC8gMjU2LjApO1xuICBmcmFnSWQueCAtPSBmbG9vcihmcmFnSWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZC56ICs9IGZsb29yKGZyYWdJZC55IC8gMjU2LjApO1xuICBmcmFnSWQueSAtPSBmbG9vcihmcmFnSWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZC53ICs9IGZsb29yKGZyYWdJZC56IC8gMjU2LjApO1xuICBmcmFnSWQueiAtPSBmbG9vcihmcmFnSWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xuXG4gIGdsX1BvaW50U2l6ZSA9IHNpemUgKiAuMjUgKiBwaXhlbFJhdGlvO1xuXG4gIGdsX1Bvc2l0aW9uID0gY29tcHV0ZVBvc2l0aW9uXzFfMChcbiAgICBwb3NpdGlvbkhpLCBwb3NpdGlvbkxvLFxuICAgIHNjYWxlSGksIHNjYWxlTG8sXG4gICAgdHJhbnNsYXRlSGksIHRyYW5zbGF0ZUxvKTtcbn1cbiIscGlja0ZyYWdtZW50OiJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4ifX0se31dLDIzMTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4Ml1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgyfV0sMjMyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxMF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vbGliL0dMRXJyb3IiOjIzMywiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiOjIzNCwiLi9saWIvY3JlYXRlLXVuaWZvcm1zIjoyMzUsIi4vbGliL3JlZmxlY3QiOjIzNiwiLi9saWIvcnVudGltZS1yZWZsZWN0IjoyMzcsIi4vbGliL3NoYWRlci1jYWNoZSI6MjM4LGR1cDoyMTB9XSwyMzM6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjExXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjExfV0sMjM0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjMzLGR1cDoyMTJ9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjEzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyMzMsIi4vcmVmbGVjdCI6MjM2LGR1cDoyMTN9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE0XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjE0fV0sMjM3OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxNV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxNX1dLDIzODpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTZdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjIzMyxkdXA6MjE2LCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiOjE2Mywid2Vha21hcC1zaGltIjo1NjB9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGEpe2E8PTQqZj9pKDAsYS0xLHQsZSxyLG4pOmgoMCxhLTEsdCxlLHIsbil9ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7Zm9yKHZhciBvPXQrMTtvPD1lOysrbyl7Zm9yKHZhciBzPXJbb10sbD1uWzIqb10sdT1uWzIqbysxXSxjPWlbb10saD1hW29dLGY9bztmPnQ7KXt2YXIgZD1yW2YtMV0scD1uWzIqKGYtMSldO2lmKChkLXN8fGwtcCk+PTApYnJlYWs7cltmXT1kLG5bMipmXT1wLG5bMipmKzFdPW5bMipmLTFdLGlbZl09aVtmLTFdLGFbZl09YVtmLTFdLGYtPTF9cltmXT1zLG5bMipmXT1sLG5bMipmKzFdPXUsaVtmXT1jLGFbZl09aH19ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7dmFyIG89clt0XSxzPW5bMip0XSxsPW5bMip0KzFdLHU9aVt0XSxjPWFbdF07clt0XT1yW2VdLG5bMip0XT1uWzIqZV0sblsyKnQrMV09blsyKmUrMV0saVt0XT1pW2VdLGFbdF09YVtlXSxyW2VdPW8sblsyKmVdPXMsblsyKmUrMV09bCxpW2VdPXUsYVtlXT1jfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3JbdF09cltlXSxuWzIqdF09blsyKmVdLG5bMip0KzFdPW5bMiplKzFdLGlbdF09aVtlXSxhW3RdPWFbZV19ZnVuY3Rpb24gcyh0LGUscixuLGksYSxvKXt2YXIgcz1uW3RdLGw9aVsyKnRdLHU9aVsyKnQrMV0sYz1hW3RdLGg9b1t0XTtuW3RdPW5bZV0saVsyKnRdPWlbMiplXSxpWzIqdCsxXT1pWzIqZSsxXSxhW3RdPWFbZV0sb1t0XT1vW2VdLG5bZV09bltyXSxpWzIqZV09aVsyKnJdLGlbMiplKzFdPWlbMipyKzFdLGFbZV09YVtyXSxvW2VdPW9bcl0sbltyXT1zLGlbMipyXT1sLGlbMipyKzFdPXUsYVtyXT1jLG9bcl09aH1mdW5jdGlvbiBsKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7c1t0XT1zW2VdLGxbMip0XT1sWzIqZV0sbFsyKnQrMV09bFsyKmUrMV0sdVt0XT11W2VdLGNbdF09Y1tlXSxzW2VdPXIsbFsyKmVdPW4sbFsyKmUrMV09aSx1W2VdPWEsY1tlXT1vfWZ1bmN0aW9uIHUodCxlLHIsbixpKXtyZXR1cm4oclt0XS1yW2VdfHxuWzIqZV0tblsyKnRdfHxpW3RdLWlbZV0pPDB9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvLHMpe3JldHVybihlLWFbdF18fG9bMip0XS1yfHxpLXNbdF0pPDB9ZnVuY3Rpb24gaCh0LGUscixuLGQscCl7dmFyIG09KGUtdCsxKS82fDAsdj10K20sZz1lLW0seT10K2U+PjEsYj15LW0seD15K20sXz12LHc9YixNPXksaz14LEE9ZyxUPXQrMSxTPWUtMSxFPTA7dShfLHcscixuLGQscCkmJihFPV8sXz13LHc9RSksdShrLEEscixuLGQscCkmJihFPWssaz1BLEE9RSksdShfLE0scixuLGQscCkmJihFPV8sXz1NLE09RSksdSh3LE0scixuLGQscCkmJihFPXcsdz1NLE09RSksdShfLGsscixuLGQscCkmJihFPV8sXz1rLGs9RSksdShNLGsscixuLGQscCkmJihFPU0sTT1rLGs9RSksdSh3LEEscixuLGQscCkmJihFPXcsdz1BLEE9RSksdSh3LE0scixuLGQscCkmJihFPXcsdz1NLE09RSksdShrLEEscixuLGQscCkmJihFPWssaz1BLEE9RSk7dmFyIEw9clt3XSxDPW5bMip3XSx6PW5bMip3KzFdLEk9ZFt3XSxEPXBbd10sUD1yW2tdLE89blsyKmtdLFI9blsyKmsrMV0sRj1kW2tdLGo9cFtrXSxOPV8sQj1NLFU9QSxWPXYsSD15LHE9ZyxHPXJbTl0sWT1yW0JdLFg9cltVXTtyW1ZdPUcscltIXT1ZLHJbcV09WDtmb3IodmFyIFc9MDtXPDI7KytXKXt2YXIgWj1uWzIqTitXXSxKPW5bMipCK1ddLEs9blsyKlUrV107blsyKlYrV109WixuWzIqSCtXXT1KLG5bMipxK1ddPUt9dmFyIFE9ZFtOXSwkPWRbQl0sdHQ9ZFtVXTtkW1ZdPVEsZFtIXT0kLGRbcV09dHQ7dmFyIGV0PXBbTl0scnQ9cFtCXSxudD1wW1VdO3BbVl09ZXQscFtIXT1ydCxwW3FdPW50LG8oYix0LHIsbixkLHApLG8oeCxlLHIsbixkLHApO2Zvcih2YXIgaXQ9VDtpdDw9UzsrK2l0KWlmKGMoaXQsTCxDLHosSSxyLG4sZCkpaXQhPT1UJiZhKGl0LFQscixuLGQscCksKytUO2Vsc2UgaWYoIWMoaXQsUCxPLFIsRixyLG4sZCkpZm9yKDs7KXtpZihjKFMsUCxPLFIsRixyLG4sZCkpe2MoUyxMLEMseixJLHIsbixkKT8ocyhpdCxULFMscixuLGQscCksKytULC0tUyk6KGEoaXQsUyxyLG4sZCxwKSwtLVMpO2JyZWFrfWlmKC0tUzxpdClicmVha31sKHQsVC0xLEwsQyx6LEksRCxyLG4sZCxwKSxsKGUsUysxLFAsTyxSLEYsaixyLG4sZCxwKSxULTItdDw9Zj9pKHQsVC0yLHIsbixkLHApOmgodCxULTIscixuLGQscCksZS0oUysyKTw9Zj9pKFMrMixlLHIsbixkLHApOmgoUysyLGUscixuLGQscCksUy1UPD1mP2koVCxTLHIsbixkLHApOmgoVCxTLHIsbixkLHApfWUuZXhwb3J0cz1uO3ZhciBmPTMyfSx7fV0sMjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9cix1PXI7dTxuOysrdSl7dmFyIGM9dFsyKnVdLGg9dFsyKnUrMV0sZj1lW3VdO2k8PWMmJmM8PW8mJmE8PWgmJmg8PXMmJih1PT09bD9sKz0xOih0WzIqdV09dFsyKmxdLHRbMip1KzFdPXRbMipsKzFdLGVbdV09ZVtsXSx0WzIqbF09Yyx0WzIqbCsxXT1oLGVbbF09ZixsKz0xKSl9cmV0dXJuIGx9ZnVuY3Rpb24gaSh0LGUscil7dGhpcy5waXhlbFNpemU9dCx0aGlzLm9mZnNldD1lLHRoaXMuY291bnQ9cn1mdW5jdGlvbiBhKHQsZSxyLGEpe2Z1bmN0aW9uIGwoaSxhLG8scyx1LGMpe3ZhciBoPS41Km8sZj1zKzEsZD11LXM7cltfXT1kLHhbXysrXT1jO2Zvcih2YXIgcD0wO3A8MjsrK3ApZm9yKHZhciBtPTA7bTwyOysrbSl7dmFyIHY9aStwKmgsZz1hK20qaCx5PW4odCxlLGYsdSx2LGcsditoLGcraCk7aWYoeSE9PWYpe2lmKHktZj49TWF0aC5tYXgoLjkqZCwzMikpe3ZhciBiPXUrcz4+PjE7bCh2LGcsaCxmLGIsYysxKSxmPWJ9bCh2LGcsaCxmLHksYysxKSxmPXl9fX12YXIgdT10Lmxlbmd0aD4+PjE7aWYodTwxKXJldHVybltdO2Zvcih2YXIgYz0xLzAsaD0xLzAsZj0tMS8wLGQ9LTEvMCxwPTA7cDx1OysrcCl7dmFyIG09dFsyKnBdLHY9dFsyKnArMV07Yz1NYXRoLm1pbihjLG0pLGY9TWF0aC5tYXgoZixtKSxoPU1hdGgubWluKGgsdiksZD1NYXRoLm1heChkLHYpLGVbcF09cH1jPT09ZiYmKGYrPTErTWF0aC5hYnMoZikpLGg9PT1kJiYoZCs9MStNYXRoLmFicyhmKSk7dmFyIGc9MS8oZi1jKSx5PTEvKGQtaCksYj1NYXRoLm1heChmLWMsZC1oKTthPWF8fFswLDAsMCwwXSxhWzBdPWMsYVsxXT1oLGFbMl09ZixhWzNdPWQ7dmFyIHg9by5tYWxsb2NJbnQzMih1KSxfPTA7bChjLGgsYiwwLHUsMCkscyh4LHQsZSxyLHUpO2Zvcih2YXIgdz1bXSxNPTAsaz11LF89dS0xO18+PTA7LS1fKXt0WzIqX109KHRbMipfXS1jKSpnLHRbMipfKzFdPSh0WzIqXysxXS1oKSp5O3ZhciBBPXhbX107QSE9PU0mJih3LnB1c2gobmV3IGkoYipNYXRoLnBvdyguNSxBKSxfKzEsay0oXysxKSkpLGs9XysxLE09QSl9cmV0dXJuIHcucHVzaChuZXcgaShiKk1hdGgucG93KC41LEErMSksMCxrKSksby5mcmVlKHgpLHd9dmFyIG89dCgidHlwZWRhcnJheS1wb29sIikscz10KCIuL2xpYi9zb3J0Iik7ZS5leHBvcnRzPWF9LHsiLi9saWIvc29ydCI6MjM5LCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDI0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyl7dGhpcy5wbG90PXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLnBvc2l0aW9uQnVmZmVyPW4sdGhpcy5zaXplQnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLmNoYXJCdWZmZXI9cyx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsLHRoaXMuc2NhbGVzPVtdLHRoaXMueENvb3Jkcz1bXSx0aGlzLmNoYXJDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jaGFyVGV4dHVyZT1tKHRoaXMucGxvdC5nbCx0aGlzLmNoYXJDYW52YXMpLHRoaXMuY2hhclN0ZXA9NDAwLHRoaXMuY2hhckZpdD0uMjU1LHRoaXMuc25hcFRocmVzaG9sZD0xZTQsdGhpcy5wYWxldHRlVGV4dHVyZT1tKHRoaXMucGxvdC5nbCxbMjU2LDFdKX1mdW5jdGlvbiBpKCl7dmFyIHQ9dGhpcy5wbG90LGU9dC52aWV3Qm94LHI9dC5kYXRhQm94LG49dC5waXhlbFJhdGlvLGk9clsyXS1yWzBdLGE9clszXS1yWzFdLHU9Mi9pLGM9Mi9hLGg9LXJbMF0tLjUqaSxmPS1yWzFdLS41KmE7X1swXT11LHdbMF09dS1fWzBdLF9bMV09Yyx3WzFdPWMtX1sxXSxNWzBdPWgsa1swXT1oLU1bMF0sTVsxXT1mLGtbMV09Zi1NWzFdO3ZhciBkPWVbMl0tZVswXSxwPWVbM10tZVsxXTtvPU1hdGgubWluKGkvZCxhL3ApLEFbMF09MipuL2QsQVsxXT0yKm4vcCxzPXJbMF0sbD1yWzJdfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj10LmdsLGk9dShyLGYudmVydGV4LGYuZnJhZ21lbnQpLGE9dShyLGYucGlja1ZlcnRleCxmLnBpY2tGcmFnbWVudCksbz1jKHIpLHM9YyhyKSxsPWMociksaD1jKHIpLGQ9YyhyKSxwPW5ldyBuKHQsaSxhLG8scyxsLGgsZCk7cmV0dXJuIHAudXBkYXRlKGUpLHQuYWRkT2JqZWN0KHApLHB9ZS5leHBvcnRzPWE7dmFyIG8scyxsLHU9dCgiZ2wtc2hhZGVyIiksYz10KCJnbC1idWZmZXIiKSxoPXQoInR5cGVkYXJyYXktcG9vbCIpLGY9dCgiLi9saWIvc2hhZGVycyIpLGQ9dCgic25hcC1wb2ludHMtMmQiKSxwPXQoImZvbnQtYXRsYXMtc2RmIiksbT10KCJnbC10ZXh0dXJlMmQiKSx2PXQoImNvbG9yLWlkIiksZz10KCJuZGFycmF5IikseT10KCJjbGFtcCIpLGI9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSx4PW4ucHJvdG90eXBlLF89bmV3IEZsb2F0MzJBcnJheShbMCwwXSksdz1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSxNPW5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLGs9bmV3IEZsb2F0MzJBcnJheShbMCwwXSksQT1bMCwwXSxUPVswLDAsMCwwXTt4LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCE9PXQscj10aGlzLnBsb3Qsbj10aGlzLnBvaW50Q291bnQsYT1uPnRoaXMuc25hcFRocmVzaG9sZDtpZighbilyZXR1cm4gdDtpLmNhbGwodGhpcyk7dmFyIHU9ci5nbCxjPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLGg9dS5pc0VuYWJsZWQodS5CTEVORCk7aWYoYy5iaW5kKCksZSl7dGhpcy5waWNrT2Zmc2V0PXQ7Zm9yKHZhciBmPTA7Zjw0OysrZilUW2ZdPXQ+PjgqZiYyNTU7Yy51bmlmb3Jtcy5waWNrT2Zmc2V0PVQsdGhpcy5pZEJ1ZmZlci5iaW5kKCksYy5hdHRyaWJ1dGVzLmlkLnBvaW50ZXIodS5VTlNJR05FRF9CWVRFLCExKX1lbHNlIHUuYmxlbmRGdW5jU2VwYXJhdGUodS5TUkNfQUxQSEEsdS5PTkVfTUlOVVNfU1JDX0FMUEhBLHUuT05FLHUuT05FX01JTlVTX1NSQ19BTFBIQSksdS5ibGVuZENvbG9yKDAsMCwwLDEpLGh8fHUuZW5hYmxlKHUuQkxFTkQpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGMuYXR0cmlidXRlcy5jb2xvci5wb2ludGVyKHUuVU5TSUdORURfQllURSwhMSksdGhpcy5jaGFyQnVmZmVyLmJpbmQoKSxjLmF0dHJpYnV0ZXMuY2hhci5wb2ludGVyKHUuVU5TSUdORURfQllURSwhMSksYy51bmlmb3Jtcy5jaGFycz10aGlzLmNoYXJUZXh0dXJlLmJpbmQoMCksYy51bmlmb3Jtcy5jaGFyc1NoYXBlPVt0aGlzLmNoYXJDYW52YXMud2lkdGgsdGhpcy5jaGFyQ2FudmFzLmhlaWdodF0sYy51bmlmb3Jtcy5jaGFyc1N0ZXA9dGhpcy5jaGFyU3RlcCxjLnVuaWZvcm1zLnBhbGV0dGU9dGhpcy5wYWxldHRlVGV4dHVyZS5iaW5kKDEpO3RoaXMuc2l6ZUJ1ZmZlci5iaW5kKCksYy5hdHRyaWJ1dGVzLnNpemUucG9pbnRlcih1LkZMT0FULCExLDgsMCksZXx8Yy5hdHRyaWJ1dGVzLmJvcmRlci5wb2ludGVyKHUuRkxPQVQsITEsOCw0KSx0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxjLmF0dHJpYnV0ZXMucG9zaXRpb25IaS5wb2ludGVyKHUuRkxPQVQsITEsMTYsMCksYy5hdHRyaWJ1dGVzLnBvc2l0aW9uTG8ucG9pbnRlcih1LkZMT0FULCExLDE2LDgpLGMudW5pZm9ybXMucGl4ZWxSYXRpbz1yLnBpeGVsUmF0aW8sYy51bmlmb3Jtcy5zY2FsZUhpPV8sYy51bmlmb3Jtcy5zY2FsZUxvPXcsYy51bmlmb3Jtcy50cmFuc2xhdGVIaT1NLGMudW5pZm9ybXMudHJhbnNsYXRlTG89ayxjLnVuaWZvcm1zLnZpZXdCb3g9ci52aWV3Qm94O3ZhciBkPXRoaXMuc2NhbGVzO2lmKGEpZm9yKHZhciBwPWQubGVuZ3RoLTE7cD49MDtwLS0pe3ZhciBtPWRbcF07aWYoIShtLnBpeGVsU2l6ZSYmbS5waXhlbFNpemU8MS4yNSpvJiZwPjEpKXt2YXIgdj1tLm9mZnNldCxnPW0uY291bnQrdix5PWIuZ2UodGhpcy54Q29vcmRzLHMsdixnLTEpLHg9Yi5sdCh0aGlzLnhDb29yZHMsbCx5LGctMSkrMTt4PnkmJnUuZHJhd0FycmF5cyh1LlBPSU5UUyx5LHgteSl9fWVsc2UgdS5kcmF3QXJyYXlzKHUuUE9JTlRTLDAsbik7aWYoZSlyZXR1cm4gdCtuO2g/dS5ibGVuZEZ1bmModS5PTkUsdS5PTkVfTUlOVVNfU1JDX0FMUEhBKTp1LmRpc2FibGUodS5CTEVORCl9LHguZHJhdz14LmRyYXdQaWNrLHgucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5wb2ludENvdW50O2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMucG9pbnRzO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvWzIqYV0sb1syKmErMV1dfX0seC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10LnBvc2l0aW9uc3x8W10scj10LmNvbG9yc3x8W10sbj10LmdseXBoc3x8W10saT10LnNpemVzfHxbXSxhPXQuYm9yZGVyV2lkdGhzfHxbXSxvPXQuYm9yZGVyQ29sb3JzfHxbXSxzPXRoaXMucGxvdC5nbCxsPXRoaXMucG9pbnRDb3VudCx1PWw+dGhpcy5zbmFwVGhyZXNob2xkO2lmKG51bGwhPXQucG9zaXRpb25zKXt0aGlzLnBvaW50cz1lLGw9dGhpcy5wb2ludHMubGVuZ3RoLzIsdT1sPnRoaXMuc25hcFRocmVzaG9sZDt2YXIgYz1oLm1hbGxvY0Zsb2F0MzIoMipsKSxmPWgubWFsbG9jRmxvYXQ2NCgyKmwpLG09aC5tYWxsb2NVaW50MzIobCksYj1oLm1hbGxvY0Zsb2F0MzIoNCpsKTtmLnNldCh0aGlzLnBvaW50cyksdSYmKHRoaXMuaTJpZHgmJmguZnJlZSh0aGlzLmkyaWR4KSx0aGlzLmkyaWR4PWgubWFsbG9jSW50MzIobCksdGhpcy5zY2FsZXM9ZChmLHRoaXMuaTJpZHgsYykpLHRoaXMucG9pbnRDb3VudD1sO2Zvcih2YXIgeD0wO3g8bDsrK3gpe3ZhciBfPXU/dGhpcy5pMmlkeFt4XTp4O21beF09Xzt2YXIgdz1lWzIqX10sTT1lWzIqXysxXTtiWzQqeF09dyxiWzQqeCsxXT1NLGJbNCp4KzJdPXctYls0KnhdLGJbNCp4KzNdPU0tYls0KngrMV0sdGhpcy54Q29vcmRzW3hdPXd9dGhpcy5pZEJ1ZmZlci51cGRhdGUobSksdGhpcy5wb3NpdGlvbkJ1ZmZlci51cGRhdGUoYiksaC5mcmVlKGIpLGguZnJlZShtKSxoLmZyZWUoZiksaC5mcmVlKGMpfWZvcih2YXIgaz1oLm1hbGxvY0Zsb2F0MzIoMipsKSxBPWgubWFsbG9jVWludDgoMipsKSxUPWgubWFsbG9jVWludDgoMipsKSxTPXt9LEU9W10sTD1bXSxDPVtdLHg9MCx6PWwsST0wO3g8ejsrK3gpe3ZhciBEPVsyNTUqcls0KnhdLDI1NSpyWzQqeCsxXSwyNTUqcls0KngrMl0sMjU1KnJbNCp4KzNdXSxQPXYoRCwhMSk7bnVsbD09U1tQXSYmKFNbUF09SSsrLEwucHVzaChEWzBdKSxMLnB1c2goRFsxXSksTC5wdXNoKERbMl0pLEwucHVzaChEWzNdKSksRS5wdXNoKFApLG8mJm8ubGVuZ3RoJiYoRD1bMjU1Km9bNCp4XSwyNTUqb1s0KngrMV0sMjU1Km9bNCp4KzJdLDI1NSpvWzQqeCszXV0sUD12KEQsITEpLG51bGw9PVNbUF0mJihTW1BdPUkrKyxMLnB1c2goRFswXSksTC5wdXNoKERbMV0pLEwucHVzaChEWzJdKSxMLnB1c2goRFszXSkpLEMucHVzaChQKSl9Zm9yKHZhciBPPXt9LHg9MCx6PWwsST0wO3g8ejt4Kyspe3ZhciBSPW5beF07bnVsbD09T1tSXSYmKE9bUl09SSsrKX1mb3IodmFyIEY9MCx4PTAsej1pLmxlbmd0aDt4PHo7Kyt4KWlbeF0+RiYmKEY9aVt4XSk7dmFyIGo9dGhpcy5jaGFyU3RlcDt0aGlzLmNoYXJTdGVwPXkoTWF0aC5jZWlsKDQqRiksMTI4LDc2OCk7dmFyIE49T2JqZWN0LmtleXMoTyksQj10aGlzLmNoYXJTdGVwLFU9TWF0aC5mbG9vcihCLzIpLFY9cy5nZXRQYXJhbWV0ZXIocy5NQVhfVEVYVFVSRV9TSVpFKSxIPVYvQiooVi9CKSxxPU1hdGgubWluKFYsQipOLmxlbmd0aCksRz1NYXRoLm1pbihWLEIqTWF0aC5jZWlsKEIqTi5sZW5ndGgvVikpLFk9TWF0aC5mbG9vcihxL0IpO04ubGVuZ3RoPkgmJmNvbnNvbGUud2FybigiZ2wtc2NhdHRlcjJkLWZhbmN5OiBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyBtb3JlIHRoYW4gbWF4aW11bSB0ZXh0dXJlIHNpemUuIFRyeSByZWR1Y2luZyBpdC4iKSx0aGlzLmNoYXJzJiZ0aGlzLmNoYXJzKyIiPT1OKyIiJiZ0aGlzLmNoYXJTdGVwPT1qfHwodGhpcy5jaGFyQ2FudmFzPXAoe2NhbnZhczp0aGlzLmNoYXJDYW52YXMsZmFtaWx5OiJzYW5zLXNlcmlmIixzaXplOlUsc2hhcGU6W3EsR10sc3RlcDpbQixCXSxjaGFyczpOLGFsaWduOiEwLGZpdDp0aGlzLmNoYXJGaXR9KSx0aGlzLmNoYXJzPU4pO2Zvcih2YXIgeD0wO3g8bDsrK3gpe3ZhciBfPXU/dGhpcy5pMmlkeFt4XTp4LFg9aVtfXSxXPWFbX107a1syKnhdPTIqWCxrWzIqeCsxXT1XO3ZhciBQPUVbX10sWj1TW1BdO0FbMip4XT1aO3ZhciBKPUNbX10sSz1TW0pdO0FbMip4KzFdPUs7dmFyIFI9bltfXSxRPU9bUl07VFsyKngrMV09TWF0aC5mbG9vcihRL1kpLFRbMip4XT1RJVl9dGhpcy5zaXplQnVmZmVyLnVwZGF0ZShrKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShBKSx0aGlzLmNoYXJCdWZmZXIudXBkYXRlKFQpLHRoaXMuY2hhclRleHR1cmUuc2hhcGU9W3RoaXMuY2hhckNhbnZhcy53aWR0aCx0aGlzLmNoYXJDYW52YXMuaGVpZ2h0XSx0aGlzLmNoYXJDYW52YXMmJnRoaXMuY2hhckNhbnZhcy53aWR0aCYmdGhpcy5jaGFyVGV4dHVyZS5zZXRQaXhlbHModGhpcy5jaGFyQ2FudmFzKSx0aGlzLnBhbGV0dGVUZXh0dXJlLnNldFBpeGVscyhnKEwuc2xpY2UoMCwxMDI0KSxbMjU2LDEsNF0pKSxoLmZyZWUoayksaC5mcmVlKEEpLGguZnJlZShUKX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb3NpdGlvbkJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaXplQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNoYXJCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9fSx7Ii4vbGliL3NoYWRlcnMiOjIzMCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjIzMSxjbGFtcDo4NiwiY29sb3ItaWQiOjkwLCJmb250LWF0bGFzLXNkZiI6MTMyLCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyMzIsImdsLXRleHR1cmUyZCI6MjY1LG5kYXJyYXk6NDY1LCJzbmFwLXBvaW50cy0yZCI6MjQwLCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDI0MjpbZnVuY3Rpb24odCxlLHIpe3IucG9pbnRWZXJ0ZXg9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGksIHBvc2l0aW9uTG87XG5hdHRyaWJ1dGUgZmxvYXQgd2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlSGksIHRyYW5zbGF0ZUxvO1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemUsIHVzZVdlaWdodDtcblxudmFyeWluZyBmbG9hdCBmcmFnV2VpZ2h0O1xuXG5cbnZlYzQgcGZ4XzFfMCh2ZWMyIHNjYWxlSGksIHZlYzIgc2NhbGVMbywgdmVjMiB0cmFuc2xhdGVIaSwgdmVjMiB0cmFuc2xhdGVMbywgdmVjMiBwb3NpdGlvbkhpLCB2ZWMyIHBvc2l0aW9uTG8pIHtcbiAgcmV0dXJuIHZlYzQoKHBvc2l0aW9uSGkgKyB0cmFuc2xhdGVIaSkgKiBzY2FsZUhpXG4gICAgICAgICAgICArIChwb3NpdGlvbkxvICsgdHJhbnNsYXRlTG8pICogc2NhbGVIaVxuICAgICAgICAgICAgKyAocG9zaXRpb25IaSArIHRyYW5zbGF0ZUhpKSAqIHNjYWxlTG9cbiAgICAgICAgICAgICsgKHBvc2l0aW9uTG8gKyB0cmFuc2xhdGVMbykgKiBzY2FsZUxvLCAwLjAsIDEuMCk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwZnhfMV8wKHNjYWxlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUhpLCB0cmFuc2xhdGVMbywgcG9zaXRpb25IaSwgcG9zaXRpb25Mbyk7XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgZnJhZ1dlaWdodCA9IG1peCgxLjAsIHdlaWdodCwgdXNlV2VpZ2h0KTtcbn0iLHIucG9pbnRGcmFnbWVudD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcblxudmFyeWluZyBmbG9hdCBmcmFnV2VpZ2h0O1xuXG5mbG9hdCBzbW9vdGhTdGVwKGZsb2F0IHgsIGZsb2F0IHkpIHtcbiAgcmV0dXJuIDEuMCAvICgxLjAgKyBleHAoNTAuMCooeCAtIHkpKSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCpnbF9Qb2ludENvb3JkLnh5LTEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgdmVjNCBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzbW9vdGhTdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcbiAgZmxvYXQgYWxwaGEgPSAxLjAgLSBwb3coMS4wIC0gYmFzZUNvbG9yLmEsIGZyYWdXZWlnaHQpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBhbHBoYSwgYWxwaGEpO1xufVxuIixyLnBpY2tWZXJ0ZXg9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzQgcGZ4XzFfMCh2ZWMyIHNjYWxlSGksIHZlYzIgc2NhbGVMbywgdmVjMiB0cmFuc2xhdGVIaSwgdmVjMiB0cmFuc2xhdGVMbywgdmVjMiBwb3NpdGlvbkhpLCB2ZWMyIHBvc2l0aW9uTG8pIHtcbiAgcmV0dXJuIHZlYzQoKHBvc2l0aW9uSGkgKyB0cmFuc2xhdGVIaSkgKiBzY2FsZUhpXG4gICAgICAgICAgICArIChwb3NpdGlvbkxvICsgdHJhbnNsYXRlTG8pICogc2NhbGVIaVxuICAgICAgICAgICAgKyAocG9zaXRpb25IaSArIHRyYW5zbGF0ZUhpKSAqIHNjYWxlTG9cbiAgICAgICAgICAgICsgKHBvc2l0aW9uTG8gKyB0cmFuc2xhdGVMbykgKiBzY2FsZUxvLCAwLjAsIDEuMCk7XG59XG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGksIHBvc2l0aW9uTG87XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG87XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG5cbiAgdmVjNCBpZCA9IHBpY2tJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX1Bvc2l0aW9uID0gcGZ4XzFfMChzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG8sIHBvc2l0aW9uSGksIHBvc2l0aW9uTG8pO1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG4gIGZyYWdJZCA9IGlkO1xufSIsci5waWNrRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG59In0se31dLDI0MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4Ml1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgyfV0sMjQ0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIzOV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIzOX1dLDI0NTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNDBdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2xpYi9zb3J0IjoyNDQsZHVwOjI0MCwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvKXt0aGlzLnBsb3Q9dCx0aGlzLnBvc2l0aW9uQnVmZmVySGk9ZSx0aGlzLnBvc2l0aW9uQnVmZmVyTG89cix0aGlzLnBpY2tCdWZmZXI9bix0aGlzLndlaWdodEJ1ZmZlcj1pLHRoaXMuc2hhZGVyPWEsdGhpcy5waWNrU2hhZGVyPW8sdGhpcy5zY2FsZXM9W10sdGhpcy5zaXplPTEyLHRoaXMuYm9yZGVyU2l6ZT0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5waWNrT2Zmc2V0PTAsdGhpcy5wb2ludHM9bnVsbCx0aGlzLnhDb29yZHM9bnVsbCx0aGlzLnNuYXBQb2ludHM9ITB9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuZ2wsaT1vKHIpLHM9byhyKSxsPW8ociksdT1vKHIpLGg9YShyLGMucG9pbnRWZXJ0ZXgsYy5wb2ludEZyYWdtZW50KSxmPWEocixjLnBpY2tWZXJ0ZXgsYy5waWNrRnJhZ21lbnQpLGQ9bmV3IG4odCxpLHMsbCx1LGgsZik7cmV0dXJuIGQudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGQpLGR9dmFyIGE9dCgiZ2wtc2hhZGVyIiksbz10KCJnbC1idWZmZXIiKSxzPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbD10KCJzbmFwLXBvaW50cy0yZCIpLHU9dCgidHlwZWRhcnJheS1wb29sIiksYz10KCIuL2xpYi9zaGFkZXIiKSxoPXQoImFycmF5LW5vcm1hbGl6ZSIpLGY9dCgiYXJyYXktYm91bmRzIik7ZS5leHBvcnRzPWk7dmFyIGQ9bi5wcm90b3R5cGUscD1uZXcgRmxvYXQzMkFycmF5KDIpLG09bmV3IEZsb2F0MzJBcnJheSgyKSx2PW5ldyBGbG9hdDMyQXJyYXkoMiksZz1uZXcgRmxvYXQzMkFycmF5KDIpLHk9WzAsMCwwLDBdO2QuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXJIaS5kaXNwb3NlKCksdGhpcy5wb3NpdGlvbkJ1ZmZlckxvLmRpc3Bvc2UoKSx0aGlzLnBpY2tCdWZmZXIuZGlzcG9zZSgpLHRoaXMueENvb3JkcyYmdS5mcmVlKHRoaXMueENvb3JkcyksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX0sZC51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfWlmKHQ9dHx8e30sdGhpcy5zaXplPWUoInNpemUiLDEyKSx0aGlzLmNvbG9yPWUoImNvbG9yIixbMSwwLDAsMV0pLnNsaWNlKCksdGhpcy5ib3JkZXJTaXplPWUoImJvcmRlclNpemUiLDEpLHRoaXMuYm9yZGVyQ29sb3I9ZSgiYm9yZGVyQ29sb3IiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLnNuYXBQb2ludHM9ZSgic25hcFBvaW50cyIsITApLG51bGwhPXQucG9zaXRpb25zKXt0aGlzLnhDb29yZHMmJnUuZnJlZSh0aGlzLnhDb29yZHMpLHRoaXMucG9pbnRzPXQucG9zaXRpb25zO3ZhciByPXRoaXMucG9pbnRzLmxlbmd0aD4+PjEsbj11Lm1hbGxvY0ludDMyKHIpLGk9dS5tYWxsb2NGbG9hdDMyKHIpLGE9dS5tYWxsb2NGbG9hdDY0KDIqcik7aWYoYS5zZXQodGhpcy5wb2ludHMpLHRoaXMuc25hcFBvaW50cyl0aGlzLnNjYWxlcz1sKGEsbixpLHRoaXMuYm91bmRzKTtlbHNle3RoaXMuYm91bmRzPWYoYSwyKSxoKGEsMix0aGlzLmJvdW5kcyk7Zm9yKHZhciBvPTA7bzxyO28rKyluW29dPW8saVtvXT0xfXZhciBzPXUubWFsbG9jRmxvYXQ2NChyKSxjPXUubWFsbG9jRmxvYXQzMigyKnIpLGQ9dS5tYWxsb2NGbG9hdDMyKDIqcik7Yy5zZXQoYSk7Zm9yKHZhciBvPTAscD0wO288cjtvKysscCs9MilkW3BdPWFbcF0tY1twXSxkW3ArMV09YVtwKzFdLWNbcCsxXSxzW29dPWFbcF07dGhpcy5wb3NpdGlvbkJ1ZmZlckhpLnVwZGF0ZShjKSx0aGlzLnBvc2l0aW9uQnVmZmVyTG8udXBkYXRlKGQpLHRoaXMucGlja0J1ZmZlci51cGRhdGUobiksdGhpcy53ZWlnaHRCdWZmZXIudXBkYXRlKGkpLHUuZnJlZShjKSx1LmZyZWUoZCksdS5mcmVlKGkpLHUuZnJlZShhKSx1LmZyZWUobiksdGhpcy54Q29vcmRzPXMsdGhpcy5wb2ludENvdW50PXIsdGhpcy5waWNrT2Zmc2V0PTB9fSxkLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dCxyPXRoaXMucGxvdCxuPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLGk9dGhpcy5zY2FsZXMsYT10aGlzLnBvc2l0aW9uQnVmZmVySGksbz10aGlzLnBvc2l0aW9uQnVmZmVyTG8scz10aGlzLnBpY2tCdWZmZXIsbD10aGlzLmJvdW5kcyx1PXRoaXMuc2l6ZSxjPXRoaXMuYm9yZGVyU2l6ZSxoPXIuZ2wsZj1lP3IucGlja1BpeGVsUmF0aW86ci5waXhlbFJhdGlvLGQ9ci52aWV3Qm94LGI9ci5kYXRhQm94O2lmKDA9PT10aGlzLnBvaW50Q291bnQpcmV0dXJuIHQ7dmFyIHg9bFsyXS1sWzBdLF89bFszXS1sWzFdLHc9YlsyXS1iWzBdLE09YlszXS1iWzFdLGs9KGRbMl0tZFswXSkqZi9yLnBpeGVsUmF0aW8sQT0oZFszXS1kWzFdKSpmL3IucGl4ZWxSYXRpbyxUPXRoaXMucGl4ZWxTaXplPU1hdGgubWluKHcvayxNL0EpLFM9Mip4L3csRT0yKl8vTTtwWzBdPVMscFsxXT1FLG1bMF09Uy1wWzBdLG1bMV09RS1wWzFdO3ZhciBMPShsWzBdLWJbMF0tLjUqdykveCxDPShsWzFdLWJbMV0tLjUqTSkvXzt2WzBdPUwsdlsxXT1DLGdbMF09TC12WzBdLGdbMV09Qy12WzFdLG4uYmluZCgpLG4udW5pZm9ybXMuc2NhbGVIaT1wLG4udW5pZm9ybXMuc2NhbGVMbz1tLG4udW5pZm9ybXMudHJhbnNsYXRlSGk9dixuLnVuaWZvcm1zLnRyYW5zbGF0ZUxvPWcsbi51bmlmb3Jtcy5jb2xvcj10aGlzLmNvbG9yLG4udW5pZm9ybXMuYm9yZGVyQ29sb3I9dGhpcy5ib3JkZXJDb2xvcixuLnVuaWZvcm1zLnBvaW50U2l6ZT1mKih1K2MpLG4udW5pZm9ybXMuY2VudGVyRnJhY3Rpb249MD09PXRoaXMuYm9yZGVyU2l6ZT8yOnUvKHUrYysxLjI1KSxhLmJpbmQoKSxuLmF0dHJpYnV0ZXMucG9zaXRpb25IaS5wb2ludGVyKCksby5iaW5kKCksbi5hdHRyaWJ1dGVzLnBvc2l0aW9uTG8ucG9pbnRlcigpLGU/KHRoaXMucGlja09mZnNldD10LHlbMF09MjU1JnQseVsxXT10Pj44JjI1NSx5WzJdPXQ+PjE2JjI1NSx5WzNdPXQ+PjI0JjI1NSxuLnVuaWZvcm1zLnBpY2tPZmZzZXQ9eSxzLmJpbmQoKSxuLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIoaC5VTlNJR05FRF9CWVRFKSk6KG4udW5pZm9ybXMudXNlV2VpZ2h0PTEsdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLG4uYXR0cmlidXRlcy53ZWlnaHQucG9pbnRlcigpKTt2YXIgej0hMDtpZih0aGlzLnNuYXBQb2ludHMpZm9yKHZhciBJPWkubGVuZ3RoLTE7ST49MDtJLS0pe3ZhciBEPWlbSV07aWYoIShELnBpeGVsU2l6ZTxUJiZJPjEpKXt2YXIgUD10aGlzLmdldFZpc2libGVSYW5nZShEKSxPPVBbMF0sUj1QWzFdO1I+TyYmaC5kcmF3QXJyYXlzKGguUE9JTlRTLE8sUi1PKSwhZSYmeiYmKHo9ITEsbi51bmlmb3Jtcy51c2VXZWlnaHQ9MCl9fWVsc2UgaC5kcmF3QXJyYXlzKGguUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KTtyZXR1cm4gdCt0aGlzLnBvaW50Q291bnR9LGQuZ2V0VmlzaWJsZVJhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxvdC5kYXRhQm94LHI9dGhpcy5ib3VuZHMsbj10aGlzLnBpeGVsU2l6ZSxpPXRoaXMuc2l6ZSxhPXRoaXMucGxvdC5waXhlbFJhdGlvLG89clsyXS1yWzBdO3JbM10sclsxXTtpZighdClmb3IodmFyIHQsbD10aGlzLnNjYWxlcy5sZW5ndGgtMTtsPj0wJiYodD10aGlzLnNjYWxlc1tsXSx0LnBpeGVsU2l6ZTxuJiZsPjEpO2wtLSk7dmFyIHU9dGhpcy54Q29vcmRzLGM9KGVbMF0tclswXS1uKmkqYSkvbyxoPShlWzJdLXJbMF0rbippKmEpL28sZj10Lm9mZnNldCxkPXQuY291bnQrZixwPXMuZ2UodSxjLGYsZC0xKTtyZXR1cm5bcCxzLmx0KHUsaCxwLGQtMSkrMV19LGQuZHJhd1BpY2s9ZC5kcmF3LGQucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49ci10aGlzLnBpY2tPZmZzZXQ7cmV0dXJuIG48MHx8bj49dGhpcy5wb2ludENvdW50P251bGw6e29iamVjdDp0aGlzLHBvaW50SWQ6bixkYXRhQ29vcmQ6W3RoaXMucG9pbnRzWzIqbl0sdGhpcy5wb2ludHNbMipuKzFdXX19fSx7Ii4vbGliL3NoYWRlciI6MjQyLCJhcnJheS1ib3VuZHMiOjQyLCJhcnJheS1ub3JtYWxpemUiOjQzLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjQzLCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyNTMsInNuYXAtcG9pbnRzLTJkIjoyNDUsInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1hW2VdO2lmKHJ8fChyPWFbZV09e30pLHQgaW4gcilyZXR1cm4gclt0XTtmb3IodmFyIG49aSh0LHt0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVIZWlnaHQ6MSxmb250OmV9KSxvPWkodCx7dHJpYW5nbGVzOiEwLHRleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZX0pLHM9W1sxLzAsMS8wXSxbLTEvMCwtMS8wXV0sbD0wO2w8bi5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IodmFyIHU9bi5wb3NpdGlvbnNbbF0sYz0wO2M8MjsrK2Mpc1swXVtjXT1NYXRoLm1pbihzWzBdW2NdLHVbY10pLHNbMV1bY109TWF0aC5tYXgoc1sxXVtjXSx1W2NdKTtyZXR1cm4gclt0XT1bbyxuLHNdfXZhciBpPXQoInZlY3Rvcml6ZS10ZXh0Iik7ZS5leHBvcnRzPW47dmFyIGE9e319LHsidmVjdG9yaXplLXRleHQiOjU1Mn1dLDI0ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1pKHQsZSksbj1yLmF0dHJpYnV0ZXM7cmV0dXJuIG4ucG9zaXRpb24ubG9jYXRpb249MCxuLmNvbG9yLmxvY2F0aW9uPTEsbi5nbHlwaC5sb2NhdGlvbj0yLG4uaWQubG9jYXRpb249MyxyfXZhciBpPXQoImdsLXNoYWRlciIpLGE9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cblxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpICAgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpICkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IDEuMDtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBzY2FsZSA9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgICB2aWV3UG9zaXRpb24gPSB2aWV3UG9zaXRpb24gLyB2aWV3UG9zaXRpb24udztcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiAodmlld1Bvc2l0aW9uICsgc2NhbGUgKiB2ZWM0KGdseXBoLngsIC1nbHlwaC55LCAwLCAwKSk7XG4gICAgXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59IixvPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZSwgcGl4ZWxSYXRpbztcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IHBpeGVsUmF0aW87XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQuYmdyLCBpZC5iZ3IpIDwgMC4wMDEpIHtcbiAgICAgIHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXdQb3NpdGlvbjtcbiAgICBjbGlwUG9zaXRpb24gLz0gY2xpcFBvc2l0aW9uLnc7XG4gICAgXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59IixzPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSB2ZWMzIGF4ZXNbMl07XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBzY2FsZSwgcGl4ZWxSYXRpbztcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSAgIHx8XG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpICkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBsc2NhbGUgPSBwaXhlbFJhdGlvICogc2NhbGU7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgbHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgY2xpcENlbnRlciAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzMgZGF0YVBvc2l0aW9uID0gcG9zaXRpb24gKyAwLjUqbHNjYWxlKihheGVzWzBdICogZ2x5cGgueCArIGF4ZXNbMV0gKiBnbHlwaC55KSAqIGNsaXBDZW50ZXIudyAqIHNjcmVlblNpemUueTtcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGRhdGFQb3NpdGlvbiwgMSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xuICAgIHBpY2tJZCA9IGlkO1xuICAgIGRhdGFDb29yZGluYXRlID0gZGF0YVBvc2l0aW9uO1xuICB9XG59XG4iLGw9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMF0pKSAgIHx8XG4gICAgIGFueShncmVhdGVyVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMV0pKSApIHtcbiAgICBkaXNjYXJkO1xuICB9IGVsc2Uge1xuICAgIGdsX0ZyYWdDb2xvciA9IGludGVycENvbG9yICogb3BhY2l0eTtcbiAgfVxufVxuIix1PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xuXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMF0pKSAgIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzFdKSkgKSB7XG4gICAgZGlzY2FyZDtcbiAgfSBlbHNlIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XG4gIH1cbn0iLGM9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJnbHlwaCIsdHlwZToidmVjMiJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XSxoPXt2ZXJ0ZXg6YSxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6Y30sZj17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOmN9LGQ9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczpjfSxwPXt2ZXJ0ZXg6YSxmcmFnbWVudDp1LGF0dHJpYnV0ZXM6Y30sbT17dmVydGV4Om8sZnJhZ21lbnQ6dSxhdHRyaWJ1dGVzOmN9LHY9e3ZlcnRleDpzLGZyYWdtZW50OnUsYXR0cmlidXRlczpjfTtyLmNyZWF0ZVBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaCl9LHIuY3JlYXRlT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxmKX0sci5jcmVhdGVQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsZCl9LHIuY3JlYXRlUGlja1BlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQscCl9LHIuY3JlYXRlUGlja09ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsbSl9LHIuY3JlYXRlUGlja1Byb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCx2KX19LHsiZ2wtc2hhZGVyIjoyNTN9XSwyNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPXRbM107cmV0dXJuIHRbMF09ZVswXSpyK2VbNF0qbitlWzhdKmkrZVsxMl0qYSx0WzFdPWVbMV0qcitlWzVdKm4rZVs5XSppK2VbMTNdKmEsdFsyXT1lWzJdKnIrZVs2XSpuK2VbMTBdKmkrZVsxNF0qYSx0WzNdPWVbM10qcitlWzddKm4rZVsxMV0qaStlWzE1XSphLHR9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbihpLGksciksbihpLGksZSksbihpLGksdCl9ZnVuY3Rpb24gYSh0LGUpe3RoaXMuaW5kZXg9dCx0aGlzLmRhdGFDb29yZGluYXRlPXRoaXMucG9zaXRpb249ZX1mdW5jdGlvbiBvKHQsZSxyLG4saSxvLHMsbCx1LGMsaCxmKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5zaGFkZXI9ZSx0aGlzLm9ydGhvU2hhZGVyPXIsdGhpcy5wcm9qZWN0U2hhZGVyPW4sdGhpcy5wb2ludEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9byx0aGlzLmdseXBoQnVmZmVyPXMsdGhpcy5pZEJ1ZmZlcj1sLHRoaXMudmFvPXUsdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMubGluZVZlcnRleENvdW50PTAsdGhpcy5vcGFjaXR5PTEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9aCx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWYsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBhKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1mdW5jdGlvbiBzKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1MLHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9ZnVuY3Rpb24gaCh0LGUscixuLGEpe3ZhciBvLGg9ZS5heGVzUHJvamVjdCxmPWUuZ2wsZD10LnVuaWZvcm1zLHA9ci5tb2RlbHx8eCxtPXIudmlld3x8eCx2PXIucHJvamVjdGlvbnx8eCx5PWUuYXhlc0JvdW5kcyxiPWMoZS5jbGlwQm91bmRzKTtvPWUuYXhlcz9lLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzOlsxLDEsMV0sd1swXT0yL2YuZHJhd2luZ0J1ZmZlcldpZHRoLHdbMV09Mi9mLmRyYXdpbmdCdWZmZXJIZWlnaHQsdC5iaW5kKCksZC52aWV3PW0sZC5wcm9qZWN0aW9uPXYsZC5zY3JlZW5TaXplPXcsZC5oaWdobGlnaHRJZD1lLmhpZ2hsaWdodElkLGQuaGlnaGxpZ2h0U2NhbGU9ZS5oaWdobGlnaHRTY2FsZSxkLmNsaXBCb3VuZHM9YixkLnBpY2tHcm91cD1lLnBpY2tJZC8yNTUsZC5waXhlbFJhdGlvPWUucGl4ZWxSYXRpbztmb3IodmFyIF89MDtfPDM7KytfKWlmKGhbX10mJmUucHJvamVjdE9wYWNpdHlbX108MT09PW4pe2Quc2NhbGU9ZS5wcm9qZWN0U2NhbGVbX10sZC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbX107Zm9yKHZhciBMPVMsQz0wO0M8MTY7KytDKUxbQ109MDtmb3IodmFyIEM9MDtDPDQ7KytDKUxbNSpDXT0xO0xbNSpfXT0wLG9bX108MD9MWzEyK19dPXlbMF1bX106TFsxMitfXT15WzFdW19dLGcoTCxwLEwpLGQubW9kZWw9TDt2YXIgej0oXysxKSUzLEk9KF8rMiklMyxEPXMoTSksUD1zKGspO0Rbel09MSxQW0ldPTE7dmFyIE89aSh2LG0scCxsKEEsRCkpLFI9aSh2LG0scCxsKFQsUCkpO2lmKE1hdGguYWJzKE9bMV0pPk1hdGguYWJzKFJbMV0pKXt2YXIgRj1PO089UixSPUYsRj1ELEQ9UCxQPUY7dmFyIGo9ejt6PUksST1qfU9bMF08MCYmKERbel09LTEpLFJbMV0+MCYmKFBbSV09LTEpO2Zvcih2YXIgTj0wLEI9MCxDPTA7Qzw0OysrQylOKz1NYXRoLnBvdyhwWzQqeitDXSwyKSxCKz1NYXRoLnBvdyhwWzQqSStDXSwyKTtEW3pdLz1NYXRoLnNxcnQoTiksUFtJXS89TWF0aC5zcXJ0KEIpLGQuYXhlc1swXT1ELGQuYXhlc1sxXT1QLApkLmZyYWdDbGlwQm91bmRzWzBdPXUoRSxiWzBdLF8sLTFlOCksZC5mcmFnQ2xpcEJvdW5kc1sxXT11KEUsYlsxXSxfLDFlOCksZS52YW8uZHJhdyhmLlRSSUFOR0xFUyxlLnZlcnRleENvdW50KSxlLmxpbmVXaWR0aD4wJiYoZi5saW5lV2lkdGgoZS5saW5lV2lkdGgpLGUudmFvLmRyYXcoZi5MSU5FUyxlLmxpbmVWZXJ0ZXhDb3VudCxlLnZlcnRleENvdW50KSl9fWZ1bmN0aW9uIGYodCxlLHIsbixpLGEpe3ZhciBvPXIuZ2w7aWYoci52YW8uYmluZCgpLGk9PT1yLm9wYWNpdHk8MXx8YSl7dC5iaW5kKCk7dmFyIHM9dC51bmlmb3JtcztzLm1vZGVsPW4ubW9kZWx8fHgscy52aWV3PW4udmlld3x8eCxzLnByb2plY3Rpb249bi5wcm9qZWN0aW9ufHx4LHdbMF09Mi9vLmRyYXdpbmdCdWZmZXJXaWR0aCx3WzFdPTIvby5kcmF3aW5nQnVmZmVySGVpZ2h0LHMuc2NyZWVuU2l6ZT13LHMuaGlnaGxpZ2h0SWQ9ci5oaWdobGlnaHRJZCxzLmhpZ2hsaWdodFNjYWxlPXIuaGlnaGxpZ2h0U2NhbGUscy5mcmFnQ2xpcEJvdW5kcz1JLHMuY2xpcEJvdW5kcz1yLmF4ZXMuYm91bmRzLHMub3BhY2l0eT1yLm9wYWNpdHkscy5waWNrR3JvdXA9ci5waWNrSWQvMjU1LHMucGl4ZWxSYXRpbz1yLnBpeGVsUmF0aW8sci52YW8uZHJhdyhvLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYoby5saW5lV2lkdGgoci5saW5lV2lkdGgpLHIudmFvLmRyYXcoby5MSU5FUyxyLmxpbmVWZXJ0ZXhDb3VudCxyLnZlcnRleENvdW50KSl9aChlLHIsbixpLGEpLHIudmFvLnVuYmluZCgpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5nbCxyPXkuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj15LmNyZWF0ZU9ydGhvKGUpLGk9eS5jcmVhdGVQcm9qZWN0KGUpLGE9eS5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSkscz15LmNyZWF0ZVBpY2tPcnRobyhlKSxsPXkuY3JlYXRlUGlja1Byb2plY3QoZSksdT1wKGUpLGM9cChlKSxoPXAoZSksZj1wKGUpLGQ9bShlLFt7YnVmZmVyOnUsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpjLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6aCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmYsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksdj1uZXcgbyhlLHIsbixpLHUsYyxoLGYsZCxhLHMsbCk7cmV0dXJuIHYudXBkYXRlKHQpLHZ9dmFyIHA9dCgiZ2wtYnVmZmVyIiksbT10KCJnbC12YW8iKSx2PXQoInR5cGVkYXJyYXktcG9vbCIpLGc9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLHk9dCgiLi9saWIvc2hhZGVycyIpLGI9dCgiLi9saWIvZ2x5cGhzIikseD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZS5leHBvcnRzPWQ7dmFyIF89by5wcm90b3R5cGU7Xy5waWNrU2xvdHM9MSxfLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LF8uaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMub3BhY2l0eTwxKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0T3BhY2l0eVt0XTwxKXJldHVybiEwO3JldHVybiExfSxfLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0T3BhY2l0eVt0XT49MSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHc9WzAsMF0sTT1bMCwwLDBdLGs9WzAsMCwwXSxBPVswLDAsMCwxXSxUPVswLDAsMCwxXSxTPXguc2xpY2UoKSxFPVswLDAsMF0sTD1bWzAsMCwwXSxbMCwwLDBdXSxDPVstMWU4LC0xZTgsLTFlOF0sej1bMWU4LDFlOCwxZThdLEk9W0Msel07Xy5kcmF3PWZ1bmN0aW9uKHQpe2YodGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsITEsITEpfSxfLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtmKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LCEwLCExKX0sXy5kcmF3UGljaz1mdW5jdGlvbih0KXtmKHRoaXMudXNlT3J0aG8/dGhpcy5waWNrT3J0aG9TaGFkZXI6dGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIsdGhpcy5waWNrUHJvamVjdFNoYWRlcix0aGlzLHQsITEsITApfSxfLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wO2k8MzsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LF8uaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LF8udXBkYXRlPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8e30sInBlcnNwZWN0aXZlImluIHQmJih0aGlzLnVzZU9ydGhvPSF0LnBlcnNwZWN0aXZlKSwib3J0aG9ncmFwaGljImluIHQmJih0aGlzLnVzZU9ydGhvPSEhdC5vcnRob2dyYXBoaWMpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwicHJvamVjdCJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0KSl0aGlzLmF4ZXNQcm9qZWN0PXQucHJvamVjdDtlbHNle3ZhciBlPSEhdC5wcm9qZWN0O3RoaXMuYXhlc1Byb2plY3Q9W2UsZSxlXX1pZigicHJvamVjdFNjYWxlImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RTY2FsZSkpdGhpcy5wcm9qZWN0U2NhbGU9dC5wcm9qZWN0U2NhbGUuc2xpY2UoKTtlbHNle3ZhciByPSt0LnByb2plY3RTY2FsZTt0aGlzLnByb2plY3RTY2FsZT1bcixyLHJdfWlmKCJwcm9qZWN0T3BhY2l0eSJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXt2YXIgcj0rdC5wcm9qZWN0T3BhY2l0eTt0aGlzLnByb2plY3RPcGFjaXR5PVtyLHIscl19Im9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLHRoaXMuZGlydHk9ITA7dmFyIG49dC5wb3NpdGlvbjtpZihuKXt2YXIgaT10LmZvbnR8fCJub3JtYWwiLGE9dC5hbGlnbm1lbnR8fFswLDBdLG89WzEvMCwxLzAsMS8wXSxzPVstMS8wLC0xLzAsLTEvMF0sbD10LmdseXBoLHU9dC5jb2xvcixjPXQuc2l6ZSxoPXQuYW5nbGUsZj10LmxpbmVDb2xvcixkPTAscD0wLG09MCxnPW4ubGVuZ3RoO3Q6Zm9yKHZhciB5PTA7eTxnOysreSl7Zm9yKHZhciB4PW5beV0sXz0wO188MzsrK18paWYoaXNOYU4oeFtfXSl8fCFpc0Zpbml0ZSh4W19dKSljb250aW51ZSB0O3ZhciB3O3c9QXJyYXkuaXNBcnJheShsKT9iKGxbeV0saSk6bD9iKGwsaSk6YigiXHUyNWNmIixpKTt2YXIgTT13WzBdLGs9d1sxXSxBPXdbMl07cCs9MypNLmNlbGxzLmxlbmd0aCxtKz0yKmsuZWRnZXMubGVuZ3RofXZhciBUPXArbSxTPXYubWFsbG9jRmxvYXQoMypUKSxFPXYubWFsbG9jRmxvYXQoNCpUKSxMPXYubWFsbG9jRmxvYXQoMipUKSxDPXYubWFsbG9jVWludDMyKFQpLHo9WzAsYVsxXV0sST0wLEQ9cCxQPVswLDAsMCwxXSxPPVswLDAsMCwxXSxSPUFycmF5LmlzQXJyYXkodSkmJkFycmF5LmlzQXJyYXkodVswXSksRj1BcnJheS5pc0FycmF5KGYpJiZBcnJheS5pc0FycmF5KGZbMF0pO3Q6Zm9yKHZhciB5PTA7eTxnOysreSl7Zm9yKHZhciB4PW5beV0sXz0wO188MzsrK18pe2lmKGlzTmFOKHhbX10pfHwhaXNGaW5pdGUoeFtfXSkpe2QrPTE7Y29udGludWUgdH1zW19dPU1hdGgubWF4KHNbX10seFtfXSksb1tfXT1NYXRoLm1pbihvW19dLHhbX10pfXZhciB3O3c9QXJyYXkuaXNBcnJheShsKT9iKGxbeV0saSk6bD9iKGwsaSk6YigiXHUyNWNmIixpKTt2YXIgTT13WzBdLGs9d1sxXSxBPXdbMl07aWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGo7aWYoaj1SP3VbeV06dSwzPT09ai5sZW5ndGgpe2Zvcih2YXIgXz0wO188MzsrK18pUFtfXT1qW19dO1BbM109MX1lbHNlIGlmKDQ9PT1qLmxlbmd0aClmb3IodmFyIF89MDtfPDQ7KytfKVBbX109altfXX1lbHNlIFBbMF09UFsxXT1QWzJdPTAsUFszXT0xO2lmKEFycmF5LmlzQXJyYXkoZikpe3ZhciBqO2lmKGo9Rj9mW3ldOmYsMz09PWoubGVuZ3RoKXtmb3IodmFyIF89MDtfPDM7KytfKU9bX109altfXTtPW19dPTF9ZWxzZSBpZig0PT09ai5sZW5ndGgpZm9yKHZhciBfPTA7Xzw0OysrXylPW19dPWpbX119ZWxzZSBPWzBdPU9bMV09T1syXT0wLE9bM109MTt2YXIgTj0uNTtBcnJheS5pc0FycmF5KGMpP049K2NbeV06Yz9OPStjOnRoaXMudXNlT3J0aG8mJihOPTEyKTt2YXIgQj0wO0FycmF5LmlzQXJyYXkoaCk/Qj0raFt5XTpoJiYoQj0raCk7Zm9yKHZhciBVPU1hdGguY29zKEIpLFY9TWF0aC5zaW4oQikseD1uW3ldLF89MDtfPDM7KytfKXNbX109TWF0aC5tYXgoc1tfXSx4W19dKSxvW19dPU1hdGgubWluKG9bX10seFtfXSk7YVswXTwwP3pbMF09YVswXSooMStBWzFdWzBdKTphWzBdPjAmJih6WzBdPS1hWzBdKigxK0FbMF1bMF0pKTtmb3IodmFyIEg9TS5jZWxscyxxPU0ucG9zaXRpb25zLF89MDtfPEgubGVuZ3RoOysrXylmb3IodmFyIEc9SFtfXSxZPTA7WTwzOysrWSl7Zm9yKHZhciBYPTA7WDwzOysrWClTWzMqSStYXT14W1hdO2Zvcih2YXIgWD0wO1g8NDsrK1gpRVs0KkkrWF09UFtYXTtDW0ldPWQ7dmFyIFc9cVtHW1ldXTtMWzIqSV09TiooVSpXWzBdLVYqV1sxXSt6WzBdKSxMWzIqSSsxXT1OKihWKldbMF0rVSpXWzFdK3pbMV0pLEkrPTF9Zm9yKHZhciBIPWsuZWRnZXMscT1rLnBvc2l0aW9ucyxfPTA7XzxILmxlbmd0aDsrK18pZm9yKHZhciBHPUhbX10sWT0wO1k8MjsrK1kpe2Zvcih2YXIgWD0wO1g8MzsrK1gpU1szKkQrWF09eFtYXTtmb3IodmFyIFg9MDtYPDQ7KytYKUVbNCpEK1hdPU9bWF07Q1tEXT1kO3ZhciBXPXFbR1tZXV07TFsyKkRdPU4qKFUqV1swXS1WKldbMV0relswXSksTFsyKkQrMV09TiooVipXWzBdK1UqV1sxXSt6WzFdKSxEKz0xfWQrPTF9dGhpcy52ZXJ0ZXhDb3VudD1wLHRoaXMubGluZVZlcnRleENvdW50PW0sdGhpcy5wb2ludEJ1ZmZlci51cGRhdGUoUyksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoRSksdGhpcy5nbHlwaEJ1ZmZlci51cGRhdGUoTCksdGhpcy5pZEJ1ZmZlci51cGRhdGUobmV3IFVpbnQzMkFycmF5KEMpKSx2LmZyZWUoUyksdi5mcmVlKEUpLHYuZnJlZShMKSx2LmZyZWUoQyksdGhpcy5ib3VuZHM9W28sc10sdGhpcy5wb2ludHM9bix0aGlzLnBvaW50Q291bnQ9bi5sZW5ndGh9fSxfLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5vcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja09ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5wb2ludEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5nbHlwaEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCl9fSx7Ii4vbGliL2dseXBocyI6MjQ3LCIuL2xpYi9zaGFkZXJzIjoyNDgsImdsLWJ1ZmZlciI6MTU0LCJnbC1tYXQ0L211bHRpcGx5IjoxODEsImdsLXZhbyI6MjY5LCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDI1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJveFZlcnRleD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiB2ZXJ0ZXg7XG5cbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XG59XG4iLHIuYm94RnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIn0se31dLDI1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5pbm5lckZpbGw9ITEsdGhpcy5pbm5lckNvbG9yPVswLDAsMCwuMjVdLHRoaXMub3V0ZXJGaWxsPSEwLHRoaXMub3V0ZXJDb2xvcj1bMCwwLDAsLjVdLHRoaXMuYm9yZGVyV2lkdGg9MTB9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuZ2wsaT1vKHIsWzAsMCwwLDEsMSwwLDEsMV0pLGw9YShyLHMuYm94VmVydGV4LHMuYm94RnJhZ21lbnQpLHU9bmV3IG4odCxpLGwpO3JldHVybiB1LnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkodSksdX12YXIgYT10KCJnbC1zaGFkZXIiKSxvPXQoImdsLWJ1ZmZlciIpLHM9dCgiLi9saWIvc2hhZGVycyIpO2UuZXhwb3J0cz1pO3ZhciBsPW4ucHJvdG90eXBlO2wuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zZWxlY3RCb3gscj10aGlzLmJvcmRlcldpZHRoLG49KHRoaXMuaW5uZXJGaWxsLHRoaXMuaW5uZXJDb2xvciksaT0odGhpcy5vdXRlckZpbGwsdGhpcy5vdXRlckNvbG9yKSxhPXRoaXMuYm9yZGVyQ29sb3Isbz10LmJveCxzPXQuc2NyZWVuQm94LGw9dC5kYXRhQm94LHU9dC52aWV3Qm94LGM9dC5waXhlbFJhdGlvLGg9KGVbMF0tbFswXSkqKHVbMl0tdVswXSkvKGxbMl0tbFswXSkrdVswXSxmPShlWzFdLWxbMV0pKih1WzNdLXVbMV0pLyhsWzNdLWxbMV0pK3VbMV0sZD0oZVsyXS1sWzBdKSoodVsyXS11WzBdKS8obFsyXS1sWzBdKSt1WzBdLHA9KGVbM10tbFsxXSkqKHVbM10tdVsxXSkvKGxbM10tbFsxXSkrdVsxXTtpZihoPU1hdGgubWF4KGgsdVswXSksZj1NYXRoLm1heChmLHVbMV0pLGQ9TWF0aC5taW4oZCx1WzJdKSxwPU1hdGgubWluKHAsdVszXSksIShkPGh8fHA8Zikpe28uYmluZCgpO3ZhciBtPXNbMl0tc1swXSx2PXNbM10tc1sxXTtpZih0aGlzLm91dGVyRmlsbCYmKG8uZHJhd0JveCgwLDAsbSxmLGkpLG8uZHJhd0JveCgwLGYsaCxwLGkpLG8uZHJhd0JveCgwLHAsbSx2LGkpLG8uZHJhd0JveChkLGYsbSxwLGkpKSx0aGlzLmlubmVyRmlsbCYmby5kcmF3Qm94KGgsZixkLHAsbikscj4wKXt2YXIgZz1yKmM7by5kcmF3Qm94KGgtZyxmLWcsZCtnLGYrZyxhKSxvLmRyYXdCb3goaC1nLHAtZyxkK2cscCtnLGEpLG8uZHJhd0JveChoLWcsZi1nLGgrZyxwK2csYSksby5kcmF3Qm94KGQtZyxmLWcsZCtnLHArZyxhKX19fX0sbC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmlubmVyRmlsbD0hIXQuaW5uZXJGaWxsLHRoaXMub3V0ZXJGaWxsPSEhdC5vdXRlckZpbGwsdGhpcy5pbm5lckNvbG9yPSh0LmlubmVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5vdXRlckNvbG9yPSh0Lm91dGVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5ib3JkZXJDb2xvcj0odC5ib3JkZXJDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyV2lkdGg9dC5ib3JkZXJXaWR0aHx8MCx0aGlzLnNlbGVjdEJveD0odC5zZWxlY3RCb3h8fHRoaXMuc2VsZWN0Qm94KS5zbGljZSgpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5ib3hTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoyNTAsImdsLWJ1ZmZlciI6MTU0LCJnbC1zaGFkZXIiOjI1M31dLDI1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7dGhpcy5jb29yZD1bdCxlXSx0aGlzLmlkPXIsdGhpcy52YWx1ZT1uLHRoaXMuZGlzdGFuY2U9aX1mdW5jdGlvbiBpKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5mYm89ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMuX3JlYWRUaW1lb3V0PW51bGw7dmFyIG49dGhpczt0aGlzLl9yZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtuLmdsJiYoZS5iaW5kKCksdC5yZWFkUGl4ZWxzKDAsMCxlLnNoYXBlWzBdLGUuc2hhcGVbMV0sdC5SR0JBLHQuVU5TSUdORURfQllURSxuLmJ1ZmZlciksbi5fcmVhZFRpbWVvdXQ9bnVsbCl9fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gbmV3IGkodCxvKHQsZSkscy5tYWxsb2NVaW50OChlWzBdKmVbMV0qNCkpfWUuZXhwb3J0cz1hO3ZhciBvPXQoImdsLWZibyIpLHM9dCgidHlwZWRhcnJheS1wb29sIiksbD10KCJuZGFycmF5IiksdT10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyLGM9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImFycmF5Iix7b2Zmc2V0OlswLDAsMV0sYXJyYXk6MH0se29mZnNldDpbMCwwLDJdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwzXSxhcnJheTowfSwic2NhbGFyIiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int0aGlzX2Nsb3Nlc3REMj0xZTgsdGhpc19jbG9zZXN0WD0tMSx0aGlzX2Nsb3Nlc3RZPS0xfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfY2xvc2VzdEQyIiwidGhpc19jbG9zZXN0WCIsInRoaXNfY2xvc2VzdFkiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzQ2X2FyZzBfPDI1NXx8X2lubGluZV80Nl9hcmcxXzwyNTV8fF9pbmxpbmVfNDZfYXJnMl88MjU1fHxfaW5saW5lXzQ2X2FyZzNfPDI1NSl7dmFyIF9pbmxpbmVfNDZfbD1faW5saW5lXzQ2X2FyZzRfLV9pbmxpbmVfNDZfYXJnNl9bMF0sX2lubGluZV80Nl9hPV9pbmxpbmVfNDZfYXJnNV8tX2lubGluZV80Nl9hcmc2X1sxXSxfaW5saW5lXzQ2X2Y9X2lubGluZV80Nl9sKl9pbmxpbmVfNDZfbCtfaW5saW5lXzQ2X2EqX2lubGluZV80Nl9hO19pbmxpbmVfNDZfZjx0aGlzX2Nsb3Nlc3REMiYmKHRoaXNfY2xvc2VzdEQyPV9pbmxpbmVfNDZfZix0aGlzX2Nsb3Nlc3RYPV9pbmxpbmVfNDZfYXJnNl9bMF0sdGhpc19jbG9zZXN0WT1faW5saW5lXzQ2X2FyZzZfWzFdKX19IixhcmdzOlt7bmFtZToiX2lubGluZV80Nl9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmc1XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmc2XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOlsiX2lubGluZV80Nl9hIiwiX2lubGluZV80Nl9mIiwiX2lubGluZV80Nl9sIl19LHBvc3Q6e2JvZHk6IntyZXR1cm5bdGhpc19jbG9zZXN0WCx0aGlzX2Nsb3Nlc3RZLHRoaXNfY2xvc2VzdEQyXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToiY3dpc2UiLGJsb2NrU2l6ZTo2NH0pLGg9aS5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInNoYXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2w/dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTpbMCwwXX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZ2wpe3RoaXMuZmJvLnNoYXBlPXQ7dmFyIGU9dGhpcy5mYm8uc2hhcGVbMF0scj10aGlzLmZiby5zaGFwZVsxXTtpZihyKmUqND50aGlzLmJ1ZmZlci5sZW5ndGgpe3MuZnJlZSh0aGlzLmJ1ZmZlcik7Zm9yKHZhciBuPXRoaXMuYnVmZmVyPXMubWFsbG9jVWludDgodShyKmUqNCkpLGk9MDtpPHIqZSo0OysraSluW2ldPTI1NX1yZXR1cm4gdH19fSksaC5iZWdpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dGhpcy5zaGFwZTt0JiYodGhpcy5mYm8uYmluZCgpLHQuY2xlYXJDb2xvcigxLDEsMSwxKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpKX0saC5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QmJih0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHRoaXMuX3JlYWRUaW1lb3V0fHxjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpLHRoaXMuX3JlYWRUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fcmVhZENhbGxiYWNrLDEpKX0saC5xdWVyeT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuZ2wpcmV0dXJuIG51bGw7dmFyIGk9dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTt0fD0wLGV8PTAsIm51bWJlciIhPXR5cGVvZiByJiYocj0xKTt2YXIgYT0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxpWzBdKSxvPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLGlbMF0pLHM9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksaVsxXSksdT0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxpWzFdKTtpZihvPD1hfHx1PD1zKXJldHVybiBudWxsO3ZhciBoPVtvLWEsdS1zXSxmPWwodGhpcy5idWZmZXIsW2hbMF0saFsxXSw0XSxbNCw0KmlbMF0sMV0sNCooYStpWzBdKnMpKSxkPWMoZi5oaShoWzBdLGhbMV0sMSkscixyKSxwPWRbMF0sbT1kWzFdO3JldHVybiBwPDB8fE1hdGgucG93KHRoaXMucmFkaXVzLDIpPGRbMl0/bnVsbDpuZXcgbihwK2F8MCxtK3N8MCxmLmdldChwLG0sMCksW2YuZ2V0KHAsbSwxKSxmLmdldChwLG0sMiksZi5nZXQocCxtLDMpXSxNYXRoLnNxcnQoZFsyXSkpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLHMuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHsiYml0LXR3aWRkbGUiOjY1LCJjd2lzZS9saWIvd3JhcHBlciI6MTExLCJnbC1mYm8iOjE2MixuZGFycmF5OjQ2NSwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSwyNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmdsPXQsdGhpcy5fdnJlZj10aGlzLl9mcmVmPXRoaXMuX3JlbGluaz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLmF0dHJpYnV0ZXM9dGhpcy51bmlmb3Jtcz10aGlzLnR5cGVzPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9ZnVuY3Rpb24gYSh0LGUscixpLGEpe3ZhciBvPW5ldyBuKHQpO3JldHVybiBvLnVwZGF0ZShlLHIsaSxhKSxvfXZhciBvPXQoIi4vbGliL2NyZWF0ZS11bmlmb3JtcyIpLHM9dCgiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiKSxsPXQoIi4vbGliL3JlZmxlY3QiKSx1PXQoIi4vbGliL3NoYWRlci1jYWNoZSIpLGM9dCgiLi9saWIvcnVudGltZS1yZWZsZWN0IiksaD10KCIuL2xpYi9HTEVycm9yIiksZj1uLnByb3RvdHlwZTtmLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnByb2dyYW18fHRoaXMuX3JlbGluaygpLHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9mcmVmJiZ0aGlzLl9mcmVmLmRpc3Bvc2UoKSx0aGlzLl92cmVmJiZ0aGlzLl92cmVmLmRpc3Bvc2UoKSx0aGlzLmF0dHJpYnV0ZXM9dGhpcy50eXBlcz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLl9yZWxpbms9dGhpcy5fZnJlZj10aGlzLl92cmVmPW51bGx9LGYudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGEoKXtkLnByb2dyYW09dS5wcm9ncmFtKHAsZC5fdnJlZixkLl9mcmVmLHgsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpRVt0XT1wLmdldFVuaWZvcm1Mb2NhdGlvbihkLnByb2dyYW0sclt0XS5uYW1lKX1pZighZXx8MT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBmPXQ7dD1mLnZlcnRleCxlPWYuZnJhZ21lbnQscj1mLnVuaWZvcm1zLG49Zi5hdHRyaWJ1dGVzfXZhciBkPXRoaXMscD1kLmdsLG09ZC5fdnJlZjtkLl92cmVmPXUuc2hhZGVyKHAscC5WRVJURVhfU0hBREVSLHQpLG0mJm0uZGlzcG9zZSgpLGQudmVydFNoYWRlcj1kLl92cmVmLnNoYWRlcjt2YXIgdj10aGlzLl9mcmVmO2lmKGQuX2ZyZWY9dS5zaGFkZXIocCxwLkZSQUdNRU5UX1NIQURFUixlKSx2JiZ2LmRpc3Bvc2UoKSxkLmZyYWdTaGFkZXI9ZC5fZnJlZi5zaGFkZXIsIXJ8fCFuKXt2YXIgZz1wLmNyZWF0ZVByb2dyYW0oKTtpZihwLmF0dGFjaFNoYWRlcihnLGQuZnJhZ1NoYWRlcikscC5hdHRhY2hTaGFkZXIoZyxkLnZlcnRTaGFkZXIpLHAubGlua1Byb2dyYW0oZyksIXAuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLHAuTElOS19TVEFUVVMpKXt2YXIgeT1wLmdldFByb2dyYW1JbmZvTG9nKGcpO3Rocm93IG5ldyBoKHksIkVycm9yIGxpbmtpbmcgcHJvZ3JhbToiK3kpfXI9cnx8Yy51bmlmb3JtcyhwLGcpLG49bnx8Yy5hdHRyaWJ1dGVzKHAsZykscC5kZWxldGVQcm9ncmFtKGcpfW49bi5zbGljZSgpLG4uc29ydChpKTtmb3IodmFyIGI9W10seD1bXSxfPVtdLHc9MDt3PG4ubGVuZ3RoOysrdyl7dmFyIE09blt3XTtpZihNLnR5cGUuaW5kZXhPZigibWF0Iik+PTApe2Zvcih2YXIgaz0wfE0udHlwZS5jaGFyQXQoTS50eXBlLmxlbmd0aC0xKSxBPW5ldyBBcnJheShrKSxUPTA7VDxrOysrVClBW1RdPV8ubGVuZ3RoLHgucHVzaChNLm5hbWUrIlsiK1QrIl0iKSwibnVtYmVyIj09dHlwZW9mIE0ubG9jYXRpb24/Xy5wdXNoKE0ubG9jYXRpb24rVCk6QXJyYXkuaXNBcnJheShNLmxvY2F0aW9uKSYmTS5sb2NhdGlvbi5sZW5ndGg9PT1rJiYibnVtYmVyIj09dHlwZW9mIE0ubG9jYXRpb25bVF0/Xy5wdXNoKDB8TS5sb2NhdGlvbltUXSk6Xy5wdXNoKC0xKTtiLnB1c2goe25hbWU6TS5uYW1lLHR5cGU6TS50eXBlLGxvY2F0aW9uczpBfSl9ZWxzZSBiLnB1c2goe25hbWU6TS5uYW1lLHR5cGU6TS50eXBlLGxvY2F0aW9uczpbXy5sZW5ndGhdfSkseC5wdXNoKE0ubmFtZSksIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uP18ucHVzaCgwfE0ubG9jYXRpb24pOl8ucHVzaCgtMSl9Zm9yKHZhciBTPTAsdz0wO3c8Xy5sZW5ndGg7Kyt3KWlmKF9bd108MCl7Zm9yKDtfLmluZGV4T2YoUyk+PTA7KVMrPTE7X1t3XT1TfXZhciBFPW5ldyBBcnJheShyLmxlbmd0aCk7YSgpLGQuX3JlbGluaz1hLGQudHlwZXM9e3VuaWZvcm1zOmwociksYXR0cmlidXRlczpsKG4pfSxkLmF0dHJpYnV0ZXM9cyhwLGQsYixfKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwidW5pZm9ybXMiLG8ocCxkLHIsRSkpfSxlLmV4cG9ydHM9YX0seyIuL2xpYi9HTEVycm9yIjoyNTQsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjoyNTUsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MjU2LCIuL2xpYi9yZWZsZWN0IjoyNTcsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MjU4LCIuL2xpYi9zaGFkZXItY2FjaGUiOjI1OX1dLDI1NDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyMTF9XSwyNTU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjEyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyNTQsZHVwOjIxMn1dLDI1NjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTNdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjI1NCwiLi9yZWZsZWN0IjoyNTcsZHVwOjIxM31dLDI1NzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyMTR9XSwyNTg6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjE1fV0sMjU5OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxNl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjU0LGR1cDoyMTYsImdsLWZvcm1hdC1jb21waWxlci1lcnJvciI6MTYzLCJ3ZWFrbWFwLXNoaW0iOjU2MH1dLDI2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucGxvdD10LHRoaXMuZW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy53aWR0aD1bMSwxLDEsMV0sdGhpcy5jb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmNlbnRlcj1bMS8wLDEvMF19ZnVuY3Rpb24gaSh0LGUpe3ZhciByPW5ldyBuKHQpO3JldHVybiByLnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkocikscn1lLmV4cG9ydHM9aTt2YXIgYT1uLnByb3RvdHlwZTthLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuZW5hYmxlPSh0LmVuYWJsZXx8WyEwLCEwLCExLCExXSkuc2xpY2UoKSx0aGlzLndpZHRoPSh0LndpZHRofHxbMSwxLDEsMV0pLnNsaWNlKCksdGhpcy5jb2xvcj0odC5jb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSksdGhpcy5jZW50ZXI9KHQuY2VudGVyfHxbMS8wLDEvMF0pLnNsaWNlKCksdGhpcy5wbG90LnNldE92ZXJsYXlEaXJ0eSgpfSxhLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVuYWJsZSxlPXRoaXMud2lkdGgscj10aGlzLmNvbG9yLG49dGhpcy5jZW50ZXIsaT10aGlzLnBsb3QsYT1pLmxpbmUsbz1pLmRhdGFCb3gscz1pLnZpZXdCb3g7aWYoYS5iaW5kKCksb1swXTw9blswXSYmblswXTw9b1syXSYmb1sxXTw9blsxXSYmblsxXTw9b1szXSl7dmFyIGw9c1swXSsoblswXS1vWzBdKS8ob1syXS1vWzBdKSooc1syXS1zWzBdKSx1PXNbMV0rKG5bMV0tb1sxXSkvKG9bM10tb1sxXSkqKHNbM10tc1sxXSk7dFswXSYmYS5kcmF3TGluZShsLHUsc1swXSx1LGVbMF0sclswXSksdFsxXSYmYS5kcmF3TGluZShsLHUsbCxzWzFdLGVbMV0sclsxXSksdFsyXSYmYS5kcmF3TGluZShsLHUsc1syXSx1LGVbMl0sclsyXSksdFszXSYmYS5kcmF3TGluZShsLHUsbCxzWzNdLGVbM10sclszXSl9fSxhLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHt9XSwyNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIGNvbG9yO1xuYXR0cmlidXRlIGZsb2F0IHdlaWdodDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNvb3JkaW5hdGVzWzNdO1xudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdmVydGV4UG9zaXRpb24gPSBtaXgoY29vcmRpbmF0ZXNbMF0sXG4gICAgbWl4KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSksIGFicyhwb3NpdGlvbikpO1xuXG4gIHZlYzQgY2xpcFBvcyA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHZlcnRleFBvc2l0aW9uLCAxLjApO1xuICB2ZWMyIGNsaXBPZmZzZXQgPSAocHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoY29sb3IsIDAuMCkpLnh5O1xuICB2ZWMyIGRlbHRhID0gd2VpZ2h0ICogY2xpcE9mZnNldCAqIHNjcmVlblNoYXBlO1xuICB2ZWMyIGxpbmVPZmZzZXQgPSBub3JtYWxpemUodmVjMihkZWx0YS55LCAtZGVsdGEueCkpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gICA9IHZlYzQoY2xpcFBvcy54eSArIGNsaXBQb3MudyAqIDAuNSAqIGxpbmVXaWR0aCAqIGxpbmVPZmZzZXQsIGNsaXBQb3MueiwgY2xpcFBvcy53KTtcbiAgZnJhZ0NvbG9yICAgICA9IGNvbG9yLnggKiBjb2xvcnNbMF0gKyBjb2xvci55ICogY29sb3JzWzFdICsgY29sb3IueiAqIGNvbG9yc1syXTtcbn1cbiIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzMifSx7bmFtZToid2VpZ2h0Iix0eXBlOiJmbG9hdCJ9XSl9fSx7ImdsLXNoYWRlciI6MjUzfV0sMjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1uLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTFlMywtMWUzLC0xZTNdLFsxZTMsMWUzLDFlM11dLHRoaXMucG9zaXRpb249WzAsMCwwXSx0aGlzLmxpbmVXaWR0aD1bMiwyLDJdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmF4ZXM9bnVsbH1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUscixuLGEsbyl7dmFyIHM9W3QsZSxyLDAsMCwwLDFdO3NbbiszXT0xLHNbbl09YSxpLnB1c2guYXBwbHkoaSxzKSxzWzZdPS0xLGkucHVzaC5hcHBseShpLHMpLHNbbl09byxpLnB1c2guYXBwbHkoaSxzKSxpLnB1c2guYXBwbHkoaSxzKSxzWzZdPTEsaS5wdXNoLmFwcGx5KGkscyksc1tuXT1hLGkucHVzaC5hcHBseShpLHMpfXZhciBpPVtdO3IoMCwwLDAsMCwwLDEpLHIoMCwwLDAsMSwwLDEpLHIoMCwwLDAsMiwwLDEpLHIoMSwwLDAsMSwtMSwxKSxyKDEsMCwwLDIsLTEsMSkscigwLDEsMCwwLC0xLDEpLHIoMCwxLDAsMiwtMSwxKSxyKDAsMCwxLDAsLTEsMSkscigwLDAsMSwxLC0xLDEpO3ZhciBsPWEodCxpKSx1PW8odCxbe3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjI4fV0pLGM9cyh0KTtjLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxjLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSxjLmF0dHJpYnV0ZXMud2VpZ2h0LmxvY2F0aW9uPTI7dmFyIGg9bmV3IG4odCxsLHUsYyk7cmV0dXJuIGgudXBkYXRlKGUpLGh9dmFyIGE9dCgiZ2wtYnVmZmVyIiksbz10KCJnbC12YW8iKSxzPXQoIi4vc2hhZGVycy9pbmRleCIpO2UuZXhwb3J0cz1pO3ZhciBsPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSx1PW4ucHJvdG90eXBlLGM9WzAsMCwwXSxoPVswLDAsMF0sZj1bMCwwXTt1LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdS5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fSx1LmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMudmFvLG49dGhpcy5zaGFkZXI7ci5iaW5kKCksbi5iaW5kKCk7dmFyIGksYT10Lm1vZGVsfHxsLG89dC52aWV3fHxsLHM9dC5wcm9qZWN0aW9ufHxsO3RoaXMuYXhlcyYmKGk9dGhpcy5heGVzLmxhc3RDdWJlUHJvcHMuYXhpcyk7Zm9yKHZhciB1PWMsZD1oLHA9MDtwPDM7KytwKWkmJmlbcF08MD8odVtwXT10aGlzLmJvdW5kc1swXVtwXSxkW3BdPXRoaXMuYm91bmRzWzFdW3BdKToodVtwXT10aGlzLmJvdW5kc1sxXVtwXSxkW3BdPXRoaXMuYm91bmRzWzBdW3BdKTtmWzBdPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09ZS5kcmF3aW5nQnVmZmVySGVpZ2h0LG4udW5pZm9ybXMubW9kZWw9YSxuLnVuaWZvcm1zLnZpZXc9byxuLnVuaWZvcm1zLnByb2plY3Rpb249cyxuLnVuaWZvcm1zLmNvb3JkaW5hdGVzPVt0aGlzLnBvc2l0aW9uLHUsZF0sbi51bmlmb3Jtcy5jb2xvcnM9dGhpcy5jb2xvcnMsbi51bmlmb3Jtcy5zY3JlZW5TaGFwZT1mO2Zvcih2YXIgcD0wO3A8MzsrK3Apbi51bmlmb3Jtcy5saW5lV2lkdGg9dGhpcy5saW5lV2lkdGhbcF0qdGhpcy5waXhlbFJhdGlvLHRoaXMuZW5hYmxlZFtwXSYmKHIuZHJhdyhlLlRSSUFOR0xFUyw2LDYqcCksdGhpcy5kcmF3U2lkZXNbcF0mJnIuZHJhdyhlLlRSSUFOR0xFUywxMiwxOCsxMipwKSk7ci51bmJpbmQoKX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dCYmKCJib3VuZHMiaW4gdCYmKHRoaXMuYm91bmRzPXQuYm91bmRzKSwicG9zaXRpb24iaW4gdCYmKHRoaXMucG9zaXRpb249dC5wb3NpdGlvbiksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJjb2xvcnMiaW4gdCYmKHRoaXMuY29sb3JzPXQuY29sb3JzKSwiZW5hYmxlZCJpbiB0JiYodGhpcy5lbmFibGVkPXQuZW5hYmxlZCksImRyYXdTaWRlcyJpbiB0JiYodGhpcy5kcmF3U2lkZXM9dC5kcmF3U2lkZXMpKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MjYxLCJnbC1idWZmZXIiOjE1NCwiZ2wtdmFvIjoyNjl9XSwyNjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHV2O1xuYXR0cmlidXRlIHZlYzMgZjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IHZlYzModXYuencsIGYueCk7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNCh3b3JsZENvb3JkaW5hdGUsIDEuMCk7XG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAga2lsbCA9IGYueTtcbiAgdmFsdWUgPSBmLno7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnh5O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGV5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgc3VyZmFjZU5vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDApICogaW52ZXJzZU1vZGVsKS54eXopO1xufVxuIixhPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uXzJfMChmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cblxuXG5mbG9hdCBiZWNrbWFublNwZWN1bGFyXzFfMShcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcykge1xuICByZXR1cm4gYmVja21hbm5EaXN0cmlidXRpb25fMl8wKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XG59XG5cblxuXG51bmlmb3JtIHZlYzMgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZDtcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdmVydGV4Q29sb3I7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChraWxsID4gMC4wIHx8XG4gICAgYW55KGxlc3NUaGFuKHdvcmxkQ29vcmRpbmF0ZSwgY2xpcEJvdW5kc1swXSkpIHx8IGFueShncmVhdGVyVGhhbih3b3JsZENvb3JkaW5hdGUsIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cblxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtYXgoYmVja21hbm5TcGVjdWxhcl8xXzEoTCwgViwgTiwgcm91Z2huZXNzKSwgMC4pO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICAvL2RlY2lkZSBob3cgdG8gaW50ZXJwb2xhdGUgY29sb3IgXHUyMDE0IGluIHZlcnRleCBvciBpbiBmcmFnbWVudFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcblxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XG59XG4iLG89InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgZjtcblxudW5pZm9ybSBtYXQzIHBlcm11dGF0aW9uO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBoZWlnaHQsIHpPZmZzZXQ7XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgZGF0YUNvb3JkaW5hdGUgPSBwZXJtdXRhdGlvbiAqIHZlYzModXYueHksIGhlaWdodCk7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChkYXRhQ29vcmRpbmF0ZSwgMS4wKTtcblxuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgY2xpcFBvc2l0aW9uLnogPSBjbGlwUG9zaXRpb24ueiArIHpPZmZzZXQ7XG5cbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIHZhbHVlID0gZjtcbiAga2lsbCA9IC0xLjA7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IGRhdGFDb29yZGluYXRlO1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di56dztcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9Eb24ndCBkbyBsaWdodGluZyBmb3IgY29udG91cnNcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xuICBsaWdodERpcmVjdGlvbiAgPSB2ZWMzKDAsMCwxKTtcbn1cbiIscz0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcblxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XG4gIGZsb2F0IHVwcGVyID0gZmxvb3IodmgpO1xuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmKGtpbGwgPiAwLjAgfHxcbiAgICBhbnkobGVzc1RoYW4od29ybGRDb29yZGluYXRlLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKHdvcmxkQ29vcmRpbmF0ZSwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xuICB2ZWMyIHV5ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueSAvIHNoYXBlLnkpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcbn1cbiI7ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGksYSxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGkscyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZUNvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LG8sYSxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9LHIuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LG8scyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9fSx7ImdsLXNoYWRlciI6MjUzfV0sMjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLnBvc2l0aW9uPXQsdGhpcy5pbmRleD1lLHRoaXMudXY9cix0aGlzLmxldmVsPW4sdGhpcy5kYXRhQ29vcmRpbmF0ZT1pfWZ1bmN0aW9uIGkodCl7dmFyIGU9eChbeSh7Y29sb3JtYXA6dCxuc2hhZGVzOlIsZm9ybWF0OiJyZ2JhIn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sMjU1KnRbM11dfSldKTtyZXR1cm4gYi5kaXZzZXEoZSwyNTUpLGV9ZnVuY3Rpb24gYSh0LGUscixpLGEsbyxzLGwsdSxjLGgsZixkLHApe3RoaXMuZ2w9dCx0aGlzLnNoYXBlPWUsdGhpcy5ib3VuZHM9cix0aGlzLmludGVuc2l0eUJvdW5kcz1bXSx0aGlzLl9zaGFkZXI9aSx0aGlzLl9waWNrU2hhZGVyPWEsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlcj1vLHRoaXMuX3Zhbz1zLHRoaXMuX2NvbG9yTWFwPWwsdGhpcy5fY29udG91clNoYWRlcj11LHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyPWMsdGhpcy5fY29udG91ckJ1ZmZlcj1oLHRoaXMuX2NvbnRvdXJWQU89Zix0aGlzLl9jb250b3VyT2Zmc2V0cz1bW10sW10sW11dLHRoaXMuX2NvbnRvdXJDb3VudHM9W1tdLFtdLFtdXSx0aGlzLl92ZXJ0ZXhDb3VudD0wLHRoaXMuX3BpY2tSZXN1bHQ9bmV3IG4oWzAsMCwwXSxbMCwwXSxbMCwwXSxbMCwwLDBdLFswLDAsMF0pLHRoaXMuX2R5bmFtaWNCdWZmZXI9ZCx0aGlzLl9keW5hbWljVkFPPXAsdGhpcy5fZHluYW1pY09mZnNldHM9WzAsMCwwXSx0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5jb250b3VyV2lkdGg9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1sxXSxbMV0sWzFdXSx0aGlzLmNvbnRvdXJUaW50PVswLDAsMF0sdGhpcy5jb250b3VyQ29sb3I9W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSx0aGlzLnNob3dDb250b3VyPSEwLHRoaXMuc2hvd1N1cmZhY2U9ITAsdGhpcy5lbmFibGVIaWdobGlnaHQ9WyEwLCEwLCEwXSx0aGlzLmhpZ2hsaWdodENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5oaWdobGlnaHRUaW50PVsxLDEsMV0sdGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdLHRoaXMuZW5hYmxlRHluYW1pYz1bITAsITAsITBdLHRoaXMuZHluYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdGhpcy5keW5hbWljQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmR5bmFtaWNUaW50PVsxLDEsMV0sdGhpcy5keW5hbWljV2lkdGg9WzEsMSwxXSx0aGlzLmF4ZXNCb3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5zdXJmYWNlUHJvamVjdD1bITEsITEsITFdLHRoaXMuY29udG91clByb2plY3Q9W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSx0aGlzLmNvbG9yQm91bmRzPVshMSwhMV0sdGhpcy5fZmllbGQ9W18oZy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksXyhnLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxfKGcubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pXSx0aGlzLnBpY2tJZD0xLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnNuYXBUb0RhdGE9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy5saWdodFBvc2l0aW9uPVsxMCwxZTQsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLnZlcnRleENvbG9yPTAsdGhpcy5kaXJ0eT0hMH1mdW5jdGlvbiBvKHQsZSl7dmFyIHIsbixpLGE9ZS5heGVzJiZlLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzfHxqLG89ZS5zaG93U3VyZmFjZSxzPWUuc2hvd0NvbnRvdXI7Zm9yKHI9MDtyPDM7KytyKWZvcihvPW98fGUuc3VyZmFjZVByb2plY3Rbcl0sbj0wO248MzsrK24pcz1zfHxlLmNvbnRvdXJQcm9qZWN0W3JdW25dO2ZvcihyPTA7cjwzOysrcil7dmFyIGw9Ti5wcm9qZWN0aW9uc1tyXTtmb3Iobj0wO248MTY7KytuKWxbbl09MDtmb3Iobj0wO248NDsrK24pbFs1Km5dPTE7bFs1KnJdPTAsbFsxMityXT1lLmF4ZXNCb3VuZHNbKyhhW3JdPjApXVtyXSxNKGwsdC5tb2RlbCxsKTt2YXIgdT1OLmNsaXBCb3VuZHNbcl07Zm9yKGk9MDtpPDI7KytpKWZvcihuPTA7bjwzOysrbil1W2ldW25dPXQuY2xpcEJvdW5kc1tpXVtuXTt1WzBdW3JdPS0xZTgsdVsxXVtyXT0xZTh9cmV0dXJuIE4uc2hvd1N1cmZhY2U9byxOLnNob3dDb250b3VyPXMsTn1mdW5jdGlvbiBzKHQsZSl7dD10fHx7fTt2YXIgcj10aGlzLmdsO3IuZGlzYWJsZShyLkNVTExfRkFDRSksdGhpcy5fY29sb3JNYXAuYmluZCgwKTt2YXIgbj1CO24ubW9kZWw9dC5tb2RlbHx8RCxuLnZpZXc9dC52aWV3fHxELG4ucHJvamVjdGlvbj10LnByb2plY3Rpb258fEQsbi5sb3dlckJvdW5kPVt0aGlzLmJvdW5kc1swXVswXSx0aGlzLmJvdW5kc1swXVsxXSx0aGlzLmNvbG9yQm91bmRzWzBdfHx0aGlzLmJvdW5kc1swXVsyXV0sbi51cHBlckJvdW5kPVt0aGlzLmJvdW5kc1sxXVswXSx0aGlzLmJvdW5kc1sxXVsxXSx0aGlzLmNvbG9yQm91bmRzWzFdfHx0aGlzLmJvdW5kc1sxXVsyXV0sbi5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbMF0sbi5pbnZlcnNlTW9kZWw9ayhuLmludmVyc2VNb2RlbCxuLm1vZGVsKTtmb3IodmFyIGk9MDtpPDI7KytpKWZvcih2YXIgYT1uLmNsaXBCb3VuZHNbaV0scz0wO3M8MzsrK3MpYVtzXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbaV1bc10sLTFlOCksMWU4KTtuLmthbWJpZW50PXRoaXMuYW1iaWVudExpZ2h0LG4ua2RpZmZ1c2U9dGhpcy5kaWZmdXNlTGlnaHQsbi5rc3BlY3VsYXI9dGhpcy5zcGVjdWxhckxpZ2h0LG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzLG4uZnJlc25lbD10aGlzLmZyZXNuZWwsbi5vcGFjaXR5PXRoaXMub3BhY2l0eSxuLmhlaWdodD0wLG4ucGVybXV0YXRpb249VixuLnZlcnRleENvbG9yPXRoaXMudmVydGV4Q29sb3I7dmFyIGw9VTtmb3IoTShsLG4udmlldyxuLm1vZGVsKSxNKGwsbi5wcm9qZWN0aW9uLGwpLGsobCxsKSxpPTA7aTwzOysraSluLmV5ZVBvc2l0aW9uW2ldPWxbMTIraV0vbFsxNV07dmFyIHU9bFsxNV07Zm9yKGk9MDtpPDM7KytpKXUrPXRoaXMubGlnaHRQb3NpdGlvbltpXSpsWzQqaSszXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBjPWxbMTIraV07Zm9yKHM9MDtzPDM7KytzKWMrPWxbNCpzK2ldKnRoaXMubGlnaHRQb3NpdGlvbltzXTtuLmxpZ2h0UG9zaXRpb25baV09Yy91fXZhciBoPW8obix0aGlzKTtpZihoLnNob3dTdXJmYWNlJiZlPT09dGhpcy5vcGFjaXR5PDEpe2Zvcih0aGlzLl9zaGFkZXIuYmluZCgpLHRoaXMuX3NoYWRlci51bmlmb3Jtcz1uLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5zaG93U3VyZmFjZSYmdGhpcy5fdmVydGV4Q291bnQmJnRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSxpPTA7aTwzOysraSl0aGlzLnN1cmZhY2VQcm9qZWN0W2ldJiZ0aGlzLnZlcnRleENvdW50JiYodGhpcy5fc2hhZGVyLnVuaWZvcm1zLm1vZGVsPWgucHJvamVjdGlvbnNbaV0sdGhpcy5fc2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9aC5jbGlwQm91bmRzW2ldLHRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKGguc2hvd0NvbnRvdXImJiFlKXt2YXIgZj10aGlzLl9jb250b3VyU2hhZGVyO24ua2FtYmllbnQ9MSxuLmtkaWZmdXNlPTAsbi5rc3BlY3VsYXI9MCxuLm9wYWNpdHk9MSxmLmJpbmQoKSxmLnVuaWZvcm1zPW47dmFyIGQ9dGhpcy5fY29udG91clZBTztmb3IoZC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMucGVybXV0YXRpb249T1tpXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtpXSkscz0wO3M8dGhpcy5jb250b3VyTGV2ZWxzW2ldLmxlbmd0aDsrK3MpdGhpcy5fY29udG91ckNvdW50c1tpXVtzXSYmKHM9PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09cyYmcy0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2ldW3NdLGQuZHJhdyhyLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bc10sdGhpcy5fY29udG91ck9mZnNldHNbaV1bc10pKTtmb3IoaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMubW9kZWw9aC5wcm9qZWN0aW9uc1tpXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9aC5jbGlwQm91bmRzW2ldLHM9MDtzPDM7KytzKWlmKHRoaXMuY29udG91clByb2plY3RbaV1bc10pe2YudW5pZm9ybXMucGVybXV0YXRpb249T1tzXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtzXSk7Zm9yKHZhciBwPTA7cDx0aGlzLmNvbnRvdXJMZXZlbHNbc10ubGVuZ3RoOysrcClwPT09dGhpcy5oaWdobGlnaHRMZXZlbFtzXT8oZi51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltzXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtzXSk6MCE9PXAmJnAtMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbc118fChmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltzXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbc10pLGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tzXVtwXSxkLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW3NdW3BdLHRoaXMuX2NvbnRvdXJPZmZzZXRzW3NdW3BdKX1mb3IoZD10aGlzLl9keW5hbWljVkFPLGQuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihmLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsZi51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxmLnVuaWZvcm1zLnBlcm11dGF0aW9uPU9baV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0pLGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuZHluYW1pY0NvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5keW5hbWljVGludFtpXSxmLnVuaWZvcm1zLmhlaWdodD10aGlzLmR5bmFtaWNMZXZlbFtpXSxkLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSxzPTA7czwzOysrcyl0aGlzLmNvbnRvdXJQcm9qZWN0W3NdW2ldJiYoZi51bmlmb3Jtcy5tb2RlbD1oLnByb2plY3Rpb25zW3NdLGYudW5pZm9ybXMuY2xpcEJvdW5kcz1oLmNsaXBCb3VuZHNbc10sZC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSkpO2QudW5iaW5kKCl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1lLnNoYXBlLnNsaWNlKCksbj10LnNoYXBlLnNsaWNlKCk7Yi5hc3NpZ24odC5sbygxLDEpLmhpKHJbMF0sclsxXSksZSksYi5hc3NpZ24odC5sbygxKS5oaShyWzBdLDEpLGUuaGkoclswXSwxKSksYi5hc3NpZ24odC5sbygxLG5bMV0tMSkuaGkoclswXSwxKSxlLmxvKDAsclsxXS0xKS5oaShyWzBdLDEpKSxiLmFzc2lnbih0LmxvKDAsMSkuaGkoMSxyWzFdKSxlLmhpKDEpKSxiLmFzc2lnbih0LmxvKG5bMF0tMSwxKS5oaSgxLHJbMV0pLGUubG8oclswXS0xKSksdC5zZXQoMCwwLGUuZ2V0KDAsMCkpLHQuc2V0KDAsblsxXS0xLGUuZ2V0KDAsclsxXS0xKSksdC5zZXQoblswXS0xLDAsZS5nZXQoclswXS0xLDApKSx0LnNldChuWzBdLTEsblsxXS0xLGUuZ2V0KHJbMF0tMSxyWzFdLTEpKX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIGModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIGgodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5bYyh0WzBdKSxjKHRbMV0pLGModFsyXSldO3ZhciBlPWModCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19ZnVuY3Rpb24gZih0KXt2YXIgZT10LmdsLHI9RShlKSxuPUMoZSksaT1MKGUpLG89eihlKSxzPXAoZSksbD1tKGUsW3tidWZmZXI6cyxzaXplOjQsc3RyaWRlOkksb2Zmc2V0OjB9LHtidWZmZXI6cyxzaXplOjMsc3RyaWRlOkksb2Zmc2V0OjE2fSx7YnVmZmVyOnMsc2l6ZTozLHN0cmlkZTpJLG9mZnNldDoyOH1dKSx1PXAoZSksYz1tKGUsW3tidWZmZXI6dSxzaXplOjQsc3RyaWRlOjIwLG9mZnNldDowfSx7YnVmZmVyOnUsc2l6ZToxLHN0cmlkZToyMCxvZmZzZXQ6MTZ9XSksaD1wKGUpLGY9bShlLFt7YnVmZmVyOmgsc2l6ZToyLHR5cGU6ZS5GTE9BVH1dKSxkPXYoZSwxLFIsZS5SR0JBLGUuVU5TSUdORURfQllURSk7ZC5taW5GaWx0ZXI9ZS5MSU5FQVIsZC5tYWdGaWx0ZXI9ZS5MSU5FQVI7dmFyIGc9bmV3IGEoZSxbMCwwXSxbWzAsMCwwXSxbMCwwLDBdXSxyLG4scyxsLGQsaSxvLHUsYyxoLGYpLHk9e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIGIgaW4gdCl5W2JdPXRbYl07cmV0dXJuIHkuY29sb3JtYXA9eS5jb2xvcm1hcHx8ImpldCIsZy51cGRhdGUoeSksZ31lLmV4cG9ydHM9Zjt2YXIgZD10KCJiaXQtdHdpZGRsZSIpLHA9dCgiZ2wtYnVmZmVyIiksbT10KCJnbC12YW8iKSx2PXQoImdsLXRleHR1cmUyZCIpLGc9dCgidHlwZWRhcnJheS1wb29sIikseT10KCJjb2xvcm1hcCIpLGI9dCgibmRhcnJheS1vcHMiKSx4PXQoIm5kYXJyYXktcGFjayIpLF89dCgibmRhcnJheSIpLHc9dCgic3VyZmFjZS1uZXRzIiksTT10KCJnbC1tYXQ0L211bHRpcGx5Iiksaz10KCJnbC1tYXQ0L2ludmVydCIpLEE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxUPXQoIm5kYXJyYXktZ3JhZGllbnQiKSxTPXQoIi4vbGliL3NoYWRlcnMiKSxFPVMuY3JlYXRlU2hhZGVyLEw9Uy5jcmVhdGVDb250b3VyU2hhZGVyLEM9Uy5jcmVhdGVQaWNrU2hhZGVyLHo9Uy5jcmVhdGVQaWNrQ29udG91clNoYWRlcixJPTQwLEQ9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLFA9W1swLDBdLFswLDFdLFsxLDBdLFsxLDFdLFsxLDBdLFswLDFdXSxPPVtbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXV07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzOysrdCl7dmFyIGU9T1t0XSxyPSh0KzEpJTMsbj0odCsyKSUzO2VbciswXT0xLGVbbiszXT0xLGVbdCs2XT0xfX0oKTt2YXIgUj0yNTYsRj1hLnByb3RvdHlwZTtGLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LApGLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5fY29udG91ckNvdW50c1t0XS5sZW5ndGg+MHx8dGhpcy5fZHluYW1pY0NvdW50c1t0XT4wKXJldHVybiEwO3JldHVybiExfSxGLnBpY2tTbG90cz0xLEYuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH07dmFyIGo9WzAsMCwwXSxOPXtzaG93U3VyZmFjZTohMSxzaG93Q29udG91cjohMSxwcm9qZWN0aW9uczpbRC5zbGljZSgpLEQuc2xpY2UoKSxELnNsaWNlKCldLGNsaXBCb3VuZHM6W1tbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dXX0sQj17bW9kZWw6RCx2aWV3OkQscHJvamVjdGlvbjpELGludmVyc2VNb2RlbDpELnNsaWNlKCksbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSxjb2xvck1hcDowLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsY29udG91clRpbnQ6MCxjb250b3VyQ29sb3I6WzAsMCwwLDFdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sek9mZnNldDotMWUtNCxrYW1iaWVudDoxLGtkaWZmdXNlOjEsa3NwZWN1bGFyOjEsbGlnaHRQb3NpdGlvbjpbMWUzLDFlMywxZTNdLGV5ZVBvc2l0aW9uOlswLDAsMF0scm91Z2huZXNzOjEsZnJlc25lbDoxLG9wYWNpdHk6MSx2ZXJ0ZXhDb2xvcjowfSxVPUQuc2xpY2UoKSxWPVsxLDAsMCwwLDEsMCwwLDAsMV07Ri5kcmF3PWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwodGhpcyx0LCExKX0sRi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbCh0aGlzLHQsITApfTt2YXIgSD17bW9kZWw6RCx2aWV3OkQscHJvamVjdGlvbjpELGludmVyc2VNb2RlbDpELGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsc2hhcGU6WzAsMF0scGlja0lkOjAsbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSx6T2Zmc2V0OjAscGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sZXllUG9zaXRpb246WzAsMCwwXX07Ri5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1IO3IubW9kZWw9dC5tb2RlbHx8RCxyLnZpZXc9dC52aWV3fHxELHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fEQsci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLnBlcm11dGF0aW9uPVY7Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIHM9byhyLHRoaXMpO2lmKHMuc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9cy5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9cy5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKHMuc2hvd0NvbnRvdXIpe3ZhciBsPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cjt2YXIgdT10aGlzLl9jb250b3VyVkFPO2Zvcih1LmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0pLGwudW5pZm9ybXMucGVybXV0YXRpb249T1thXSxuPTA7bjx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrbil0aGlzLl9jb250b3VyQ291bnRzW2FdW25dJiYobC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW25dLHUuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0sdGhpcy5fY29udG91ck9mZnNldHNbYV1bbl0pKTtmb3Iobj0wO248MzsrK24pZm9yKGwudW5pZm9ybXMubW9kZWw9cy5wcm9qZWN0aW9uc1tuXSxsLnVuaWZvcm1zLmNsaXBCb3VuZHM9cy5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlmKHRoaXMuY29udG91clByb2plY3Rbbl1bYV0pe2wudW5pZm9ybXMucGVybXV0YXRpb249T1thXSxlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrYyl0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdJiYobC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW2NdLHUuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10sdGhpcy5fY29udG91ck9mZnNldHNbYV1bY10pKX11LnVuYmluZCgpfX0sRi5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyPXRoaXMuX3BpY2tSZXN1bHQsbj1lWzBdKih0LnZhbHVlWzBdKyh0LnZhbHVlWzJdPj40KS8xNikvMjU1LGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPWVbMV0qKHQudmFsdWVbMV0rKDE1JnQudmFsdWVbMl0pLzE2KS8yNTUscz1NYXRoLmZsb29yKG8pLGw9by1zO2krPTEscys9MTt2YXIgdT1yLnBvc2l0aW9uO3VbMF09dVsxXT11WzJdPTA7Zm9yKHZhciBjPTA7YzwyOysrYylmb3IodmFyIGg9Yz9hOjEtYSxmPTA7ZjwyOysrZilmb3IodmFyIGQ9Zj9sOjEtbCxwPWkrYyxtPXMrZix2PWgqZCxnPTA7ZzwzOysrZyl1W2ddKz10aGlzLl9maWVsZFtnXS5nZXQocCxtKSp2O2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLGI9MDtiPDM7KytiKWlmKHlbYl09QS5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbYl0sdVtiXSkseVtiXTwwKXRoaXMuY29udG91ckxldmVsc1tiXS5sZW5ndGg+MCYmKHlbYl09MCk7ZWxzZSBpZih5W2JdPHRoaXMuY29udG91ckxldmVsc1tiXS5sZW5ndGgtMSl7dmFyIHg9dGhpcy5jb250b3VyTGV2ZWxzW2JdW3lbYl1dLF89dGhpcy5jb250b3VyTGV2ZWxzW2JdW3lbYl0rMV07TWF0aC5hYnMoeC11W2JdKT5NYXRoLmFicyhfLXVbYl0pJiYoeVtiXSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sZz0wO2c8MzsrK2cpci5kYXRhQ29vcmRpbmF0ZVtnXT10aGlzLl9maWVsZFtnXS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sRi51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPXUodC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPXUodC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PXUodC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9aCh0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD11KHQuY29udG91clByb2plY3QsZnVuY3Rpb24odCl7cmV0dXJuIHUodCxCb29sZWFuKX0pKSwic3VyZmFjZVByb2plY3QiaW4gdCYmKHRoaXMuc3VyZmFjZVByb2plY3Q9dC5zdXJmYWNlUHJvamVjdCksImR5bmFtaWNDb2xvciJpbiB0JiYodGhpcy5keW5hbWljQ29sb3I9aCh0LmR5bmFtaWNDb2xvcikpLCJkeW5hbWljVGludCJpbiB0JiYodGhpcy5keW5hbWljVGludD11KHQuZHluYW1pY1RpbnQsTnVtYmVyKSksImR5bmFtaWNXaWR0aCJpbiB0JiYodGhpcy5keW5hbWljV2lkdGg9dSh0LmR5bmFtaWNXaWR0aCxOdW1iZXIpKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCk7dmFyIGU9dC5maWVsZHx8dC5jb29yZHMmJnQuY29vcmRzWzJdfHxudWxsLHI9ITE7aWYoZXx8KGU9dGhpcy5fZmllbGRbMl0uc2hhcGVbMF18fHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzJdP3RoaXMuX2ZpZWxkWzJdLmxvKDEsMSkuaGkodGhpcy5fZmllbGRbMl0uc2hhcGVbMF0tMix0aGlzLl9maWVsZFsyXS5zaGFwZVsxXS0yKTp0aGlzLl9maWVsZFsyXS5oaSgwLDApKSwiZmllbGQiaW4gdHx8ImNvb3JkcyJpbiB0KXt2YXIgbj0oZS5zaGFwZVswXSsyKSooZS5zaGFwZVsxXSsyKTtuPnRoaXMuX2ZpZWxkWzJdLmRhdGEubGVuZ3RoJiYoZy5mcmVlRmxvYXQodGhpcy5fZmllbGRbMl0uZGF0YSksdGhpcy5fZmllbGRbMl0uZGF0YT1nLm1hbGxvY0Zsb2F0KGQubmV4dFBvdzIobikpKSx0aGlzLl9maWVsZFsyXT1fKHRoaXMuX2ZpZWxkWzJdLmRhdGEsW2Uuc2hhcGVbMF0rMixlLnNoYXBlWzFdKzJdKSxsKHRoaXMuX2ZpZWxkWzJdLGUpLHRoaXMuc2hhcGU9ZS5zaGFwZS5zbGljZSgpO2Zvcih2YXIgYT10aGlzLnNoYXBlLG89MDtvPDI7KytvKXRoaXMuX2ZpZWxkWzJdLnNpemU+dGhpcy5fZmllbGRbb10uZGF0YS5sZW5ndGgmJihnLmZyZWVGbG9hdCh0aGlzLl9maWVsZFtvXS5kYXRhKSx0aGlzLl9maWVsZFtvXS5kYXRhPWcubWFsbG9jRmxvYXQodGhpcy5fZmllbGRbMl0uc2l6ZSkpLHRoaXMuX2ZpZWxkW29dPV8odGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0pO2lmKHQuY29vcmRzKXt2YXIgcz10LmNvb3JkcztpZighQXJyYXkuaXNBcnJheShzKXx8MyE9PXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCBjb29yZGluYXRlcyBmb3IgeC95Iik7Zm9yKG89MDtvPDI7KytvKXt2YXIgYz1zW29dO2Zvcih5PTA7eTwyOysreSlpZihjLnNoYXBlW3ldIT09YVt5XSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGNvb3JkcyBoYXZlIGluY29ycmVjdCBzaGFwZSIpO2wodGhpcy5fZmllbGRbb10sYyl9fWVsc2UgaWYodC50aWNrcyl7dmFyIGY9dC50aWNrcztpZighQXJyYXkuaXNBcnJheShmKXx8MiE9PWYubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrcyIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIHA9ZltvXTtpZigoQXJyYXkuaXNBcnJheShwKXx8cC5sZW5ndGgpJiYocD1fKHApKSxwLnNoYXBlWzBdIT09YVtvXSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGljayBsZW5ndGgiKTt2YXIgbT1fKHAuZGF0YSxhKTttLnN0cmlkZVtvXT1wLnN0cmlkZVswXSxtLnN0cmlkZVsxXm9dPTAsbCh0aGlzLl9maWVsZFtvXSxtKX19ZWxzZXtmb3Iobz0wO288MjsrK28pe3ZhciB2PVswLDBdO3Zbb109MSx0aGlzLl9maWVsZFtvXT1fKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdLHYsMCl9dGhpcy5fZmllbGRbMF0uc2V0KDAsMCwwKTtmb3IodmFyIHk9MDt5PGFbMF07Kyt5KXRoaXMuX2ZpZWxkWzBdLnNldCh5KzEsMCx5KTtmb3IodGhpcy5fZmllbGRbMF0uc2V0KGFbMF0rMSwwLGFbMF0tMSksdGhpcy5fZmllbGRbMV0uc2V0KDAsMCwwKSx5PTA7eTxhWzFdOysreSl0aGlzLl9maWVsZFsxXS5zZXQoMCx5KzEseSk7dGhpcy5fZmllbGRbMV0uc2V0KDAsYVsxXSsxLGFbMV0tMSl9dmFyIGI9dGhpcy5fZmllbGQseD1fKGcubWFsbG9jRmxvYXQoMypiWzJdLnNpemUqMiksWzMsYVswXSsyLGFbMV0rMiwyXSk7Zm9yKG89MDtvPDM7KytvKVQoeC5waWNrKG8pLGJbb10sIm1pcnJvciIpO3ZhciBNPV8oZy5tYWxsb2NGbG9hdCgzKmJbMl0uc2l6ZSksW2FbMF0rMixhWzFdKzIsM10pO2ZvcihvPTA7bzxhWzBdKzI7KytvKWZvcih5PTA7eTxhWzFdKzI7Kyt5KXt2YXIgaz14LmdldCgwLG8seSwwKSxBPXguZ2V0KDAsbyx5LDEpLFM9eC5nZXQoMSxvLHksMCksRT14LmdldCgxLG8seSwxKSxMPXguZ2V0KDIsbyx5LDApLEM9eC5nZXQoMixvLHksMSksej1TKkMtRSpMLEk9TCpBLUMqayxEPWsqRS1BKlMsTz1NYXRoLnNxcnQoeip6K0kqSStEKkQpO088MWUtOD8oTz1NYXRoLm1heChNYXRoLmFicyh6KSxNYXRoLmFicyhJKSxNYXRoLmFicyhEKSksTzwxZS04PyhEPTEsST16PTAsTz0xKTpPPTEvTyk6Tz0xL01hdGguc3FydChPKSxNLnNldChvLHksMCx6Kk8pLE0uc2V0KG8seSwxLEkqTyksTS5zZXQobyx5LDIsRCpPKX1nLmZyZWUoeC5kYXRhKTt2YXIgUj1bMS8wLDEvMCwxLzBdLEY9Wy0xLzAsLTEvMCwtMS8wXSxqPTEvMCxOPS0xLzAsQj0oYVswXS0xKSooYVsxXS0xKSo2LFU9Zy5tYWxsb2NGbG9hdChkLm5leHRQb3cyKDEwKkIpKSxWPTAsSD0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKHk9MDt5PGFbMV0tMTsrK3kpe2Zvcih2YXIgcT0wO3E8MjsrK3EpZm9yKHZhciBHPTA7RzwyOysrRylmb3IodmFyIFk9MDtZPDM7KytZKXt2YXIgWD10aGlzLl9maWVsZFtZXS5nZXQoMStvK3EsMSt5K0cpO2lmKGlzTmFOKFgpfHwhaXNGaW5pdGUoWCkpY29udGludWUgdH1mb3IoWT0wO1k8NjsrK1kpe3ZhciBXPW8rUFtZXVswXSxaPXkrUFtZXVsxXSxKPXRoaXMuX2ZpZWxkWzBdLmdldChXKzEsWisxKSxLPXRoaXMuX2ZpZWxkWzFdLmdldChXKzEsWisxKTtYPXRoaXMuX2ZpZWxkWzJdLmdldChXKzEsWisxKTt2YXIgUT1YO3o9TS5nZXQoVysxLForMSwwKSxJPU0uZ2V0KFcrMSxaKzEsMSksRD1NLmdldChXKzEsWisxLDIpLHQuaW50ZW5zaXR5JiYoUT10LmludGVuc2l0eS5nZXQoVyxaKSksVVtWKytdPVcsVVtWKytdPVosVVtWKytdPUosVVtWKytdPUssVVtWKytdPVgsVVtWKytdPTAsVVtWKytdPVEsVVtWKytdPXosVVtWKytdPUksVVtWKytdPUQsUlswXT1NYXRoLm1pbihSWzBdLEopLFJbMV09TWF0aC5taW4oUlsxXSxLKSxSWzJdPU1hdGgubWluKFJbMl0sWCksaj1NYXRoLm1pbihqLFEpLEZbMF09TWF0aC5tYXgoRlswXSxKKSxGWzFdPU1hdGgubWF4KEZbMV0sSyksRlsyXT1NYXRoLm1heChGWzJdLFgpLE49TWF0aC5tYXgoTixRKSxIKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJihqPSt0LmludGVuc2l0eUJvdW5kc1swXSxOPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288VjtvKz0xMClVW29dPShVW29dLWopLyhOLWopO3RoaXMuX3ZlcnRleENvdW50PUgsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUoVS5zdWJhcnJheSgwLFYpKSxnLmZyZWVGbG9hdChVKSxnLmZyZWUoTS5kYXRhKSx0aGlzLmJvdW5kcz1bUixGXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT1qJiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PU58fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1baixOXX1pZigibGV2ZWxzImluIHQpe3ZhciAkPXQubGV2ZWxzO2ZvcigkPUFycmF5LmlzQXJyYXkoJFswXSk/JC5zbGljZSgpOltbXSxbXSwkXSxvPTA7bzwzOysrbykkW29dPSRbb10uc2xpY2UoKSwkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7dDpmb3Iobz0wO288MzsrK28pe2lmKCRbb10ubGVuZ3RoIT09dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aCl7cj0hMDticmVha31mb3IoeT0wO3k8JFtvXS5sZW5ndGg7Kyt5KWlmKCRbb11beV0hPT10aGlzLmNvbnRvdXJMZXZlbHNbb11beV0pe3I9ITA7YnJlYWsgdH19dGhpcy5jb250b3VyTGV2ZWxzPSR9aWYocil7Yj10aGlzLl9maWVsZCxhPXRoaXMuc2hhcGU7Zm9yKHZhciB0dD1bXSxldD0wO2V0PDM7KytldCl7JD10aGlzLmNvbnRvdXJMZXZlbHNbZXRdO3ZhciBydD1bXSxudD1bXSxpdD1bMCwwLDBdO2ZvcihvPTA7bzwkLmxlbmd0aDsrK28pe3ZhciBhdD13KHRoaXMuX2ZpZWxkW2V0XSwkW29dKTtydC5wdXNoKHR0Lmxlbmd0aC81fDApLEg9MDt0OmZvcih5PTA7eTxhdC5jZWxscy5sZW5ndGg7Kyt5KXt2YXIgb3Q9YXQuY2VsbHNbeV07Zm9yKFk9MDtZPDI7KytZKXt2YXIgc3Q9YXQucG9zaXRpb25zW290W1ldXSxsdD1zdFswXSx1dD0wfE1hdGguZmxvb3IobHQpLGN0PWx0LXV0LGh0PXN0WzFdLGZ0PTB8TWF0aC5mbG9vcihodCksZHQ9aHQtZnQscHQ9ITE7ZTpmb3IodmFyIG10PTA7bXQ8MzsrK210KXtpdFttdF09MDt2YXIgdnQ9KGV0K210KzEpJTM7Zm9yKHE9MDtxPDI7KytxKXt2YXIgZ3Q9cT9jdDoxLWN0O2ZvcihXPTB8TWF0aC5taW4oTWF0aC5tYXgodXQrcSwwKSxhWzBdKSxHPTA7RzwyOysrRyl7dmFyIHl0PUc/ZHQ6MS1kdDtpZihaPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrRywwKSxhWzFdKSxYPW10PDI/dGhpcy5fZmllbGRbdnRdLmdldChXLFopOih0aGlzLmludGVuc2l0eS5nZXQoVyxaKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoWCl8fGlzTmFOKFgpKXtwdD0hMDticmVhayBlfXZhciBidD1ndCp5dDtpdFttdF0rPWJ0Klh9fX1pZihwdCl7aWYoWT4wKXtmb3IodmFyIHh0PTA7eHQ8NTsrK3h0KXR0LnBvcCgpO0gtPTF9Y29udGludWUgdH10dC5wdXNoKGl0WzBdLGl0WzFdLHN0WzBdLHN0WzFdLGl0WzJdKSxIKz0xfX1udC5wdXNoKEgpfXRoaXMuX2NvbnRvdXJPZmZzZXRzW2V0XT1ydCx0aGlzLl9jb250b3VyQ291bnRzW2V0XT1udH12YXIgX3Q9Zy5tYWxsb2NGbG9hdCh0dC5sZW5ndGgpO2ZvcihvPTA7bzx0dC5sZW5ndGg7KytvKV90W29dPXR0W29dO3RoaXMuX2NvbnRvdXJCdWZmZXIudXBkYXRlKF90KSxnLmZyZWVGbG9hdChfdCl9dC5jb2xvcm1hcCYmdGhpcy5fY29sb3JNYXAuc2V0UGl4ZWxzKGkodC5jb2xvcm1hcCkpfSxGLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9zaGFkZXIuZGlzcG9zZSgpLHRoaXMuX3Zhby5kaXNwb3NlKCksdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29sb3JNYXAuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9keW5hbWljQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9keW5hbWljVkFPLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PDM7Kyt0KWcuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW3RdLmRhdGEpfSxGLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuZHlhbmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHZvaWQodGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdKTtmb3IodmFyIGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO3ZhciByO2lmKHI9dGhpcy5zbmFwVG9EYXRhP3QuZGF0YUNvb3JkaW5hdGU6dC5wb3NpdGlvbix0aGlzLmVuYWJsZUR5bmFtaWNbMF0mJnJbMF0hPT10aGlzLmR5bmFtaWNMZXZlbFswXXx8dGhpcy5lbmFibGVEeW5hbWljWzFdJiZyWzFdIT09dGhpcy5keW5hbWljTGV2ZWxbMV18fHRoaXMuZW5hYmxlRHluYW1pY1syXSYmclsyXSE9PXRoaXMuZHluYW1pY0xldmVsWzJdKXtmb3IodmFyIG49MCxpPXRoaXMuc2hhcGUsYT1nLm1hbGxvY0Zsb2F0KDEyKmlbMF0qaVsxXSksbz0wO288MzsrK28paWYodGhpcy5lbmFibGVEeW5hbWljW29dKXt0aGlzLmR5bmFtaWNMZXZlbFtvXT1yW29dO3ZhciBzPShvKzEpJTMsbD0obysyKSUzLHU9dGhpcy5fZmllbGRbb10sYz10aGlzLl9maWVsZFtzXSxoPXRoaXMuX2ZpZWxkW2xdLGY9KHRoaXMuaW50ZW5zaXR5LHcodSxyW29dKSksZD1mLmNlbGxzLHA9Zi5wb3NpdGlvbnM7Zm9yKHRoaXMuX2R5bmFtaWNPZmZzZXRzW29dPW4sZT0wO2U8ZC5sZW5ndGg7KytlKWZvcih2YXIgbT1kW2VdLHY9MDt2PDI7Kyt2KXt2YXIgeT1wW21bdl1dLGI9K3lbMF0seD0wfGIsXz0wfE1hdGgubWluKHgrMSxpWzBdKSxNPWIteCxrPTEtTSxBPSt5WzFdLFQ9MHxBLFM9MHxNYXRoLm1pbihUKzEsaVsxXSksRT1BLVQsTD0xLUUsQz1rKkwsej1rKkUsST1NKkwsRD1NKkUsUD1DKmMuZ2V0KHgsVCkreipjLmdldCh4LFMpK0kqYy5nZXQoXyxUKStEKmMuZ2V0KF8sUyksTz1DKmguZ2V0KHgsVCkreipoLmdldCh4LFMpK0kqaC5nZXQoXyxUKStEKmguZ2V0KF8sUyk7aWYoaXNOYU4oUCl8fGlzTmFOKE8pKXt2JiYobi09MSk7YnJlYWt9YVsyKm4rMF09UCxhWzIqbisxXT1PLG4rPTF9dGhpcy5fZHluYW1pY0NvdW50c1tvXT1uLXRoaXMuX2R5bmFtaWNPZmZzZXRzW29dfWVsc2UgdGhpcy5keW5hbWljTGV2ZWxbb109TmFOLHRoaXMuX2R5bmFtaWNDb3VudHNbb109MDt0aGlzLl9keW5hbWljQnVmZmVyLnVwZGF0ZShhLnN1YmFycmF5KDAsMipuKSksZy5mcmVlRmxvYXQoYSl9fX0seyIuL2xpYi9zaGFkZXJzIjoyNjMsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo2NCwiYml0LXR3aWRkbGUiOjY1LGNvbG9ybWFwOjk3LCJnbC1idWZmZXIiOjE1NCwiZ2wtbWF0NC9pbnZlcnQiOjE3OSwiZ2wtbWF0NC9tdWx0aXBseSI6MTgxLCJnbC10ZXh0dXJlMmQiOjI2NSwiZ2wtdmFvIjoyNjksbmRhcnJheTo0NjUsIm5kYXJyYXktZ3JhZGllbnQiOjQ1NiwibmRhcnJheS1vcHMiOjQ1OSwibmRhcnJheS1wYWNrIjo0NjAsInN1cmZhY2UtbmV0cyI6NTI5LCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDI2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2c9W3QuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9ORUFSRVNUXSx5PVt0Lk5FQVJFU1QsdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9ORUFSRVNULHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9MSU5FQVJdLGI9W3QuUkVQRUFULHQuQ0xBTVBfVE9fRURHRSx0Lk1JUlJPUkVEX1JFUEVBVF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2YgSW1hZ2VEYXRhfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTtyZXR1cm4gdC5fc2hhcGU9W2Uscl0sdC5iaW5kKCksbi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLHQuZm9ybWF0LGUsciwwLHQuZm9ybWF0LHQudHlwZSxudWxsKSx0Ll9taXBMZXZlbHM9WzBdLHR9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dGhpcy5nbD10LHRoaXMuaGFuZGxlPWUsdGhpcy5mb3JtYXQ9aSx0aGlzLnR5cGU9YSx0aGlzLl9zaGFwZT1bcixuXSx0aGlzLl9taXBMZXZlbHM9WzBdLHRoaXMuX21hZ0ZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fbWluRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl93cmFwUz10LkNMQU1QX1RPX0VER0UsdGhpcy5fd3JhcFQ9dC5DTEFNUF9UT19FREdFLHRoaXMuX2FuaXNvU2FtcGxlcz0xO3ZhciBvPXRoaXMscz1bdGhpcy5fd3JhcFMsdGhpcy5fd3JhcFRdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHMsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwUz10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBUPXR9fV0pLHRoaXMuX3dyYXBWZWN0b3I9czt2YXIgbD1bdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV1dO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53aWR0aD10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLmhlaWdodD10fX1dKSx0aGlzLl9zaGFwZVZlY3Rvcj1sfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gMz09PXQubGVuZ3RoPzE9PT1lWzJdJiZlWzFdPT09dFswXSp0WzJdJiZlWzBdPT09dFsyXToxPT09ZVswXSYmZVsxXT09PXRbMF19ZnVuY3Rpb24gbCh0LGUscixuLGksYSxvLGwpe3ZhciB1PWwuZHR5cGUsYz1sLnNoYXBlLnNsaWNlKCk7aWYoYy5sZW5ndGg8Mnx8Yy5sZW5ndGg+Myl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBuZGFycmF5LCBtdXN0IGJlIDJkIG9yIDNkIik7dmFyIGg9MCxmPTAsZD1zKGMsbC5zdHJpZGUuc2xpY2UoKSk7ImZsb2F0MzIiPT09dT9oPXQuRkxPQVQ6ImZsb2F0NjQiPT09dT8oaD10LkZMT0FULGQ9ITEsdT0iZmxvYXQzMiIpOiJ1aW50OCI9PT11P2g9dC5VTlNJR05FRF9CWVRFOihoPXQuVU5TSUdORURfQllURSxkPSExLHU9InVpbnQ4Iik7aWYoMj09PWMubGVuZ3RoKWY9dC5MVU1JTkFOQ0UsYz1bY1swXSxjWzFdLDFdLGw9cChsLmRhdGEsYyxbbC5zdHJpZGVbMF0sbC5zdHJpZGVbMV0sMV0sbC5vZmZzZXQpO2Vsc2V7aWYoMyE9PWMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PWNbMl0pZj10LkFMUEhBO2Vsc2UgaWYoMj09PWNbMl0pZj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1jWzJdKWY9dC5SR0I7ZWxzZXtpZig0IT09Y1syXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7Zj10LlJHQkF9Y1syXX1pZihmIT09dC5MVU1JTkFOQ0UmJmYhPT10LkFMUEhBfHxpIT09dC5MVU1JTkFOQ0UmJmkhPT10LkFMUEhBfHwoZj1pKSxmIT09aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW5jb21wYXRpYmxlIHRleHR1cmUgZm9ybWF0IGZvciBzZXRQaXhlbHMiKTt2YXIgZz1sLnNpemUseT1vLmluZGV4T2Yobik8MDtpZih5JiZvLnB1c2gobiksaD09PWEmJmQpMD09PWwub2Zmc2V0JiZsLmRhdGEubGVuZ3RoPT09Zz95P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbixpLGNbMF0sY1sxXSwwLGksYSxsLmRhdGEpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbixlLHIsY1swXSxjWzFdLGksYSxsLmRhdGEpOnk/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxuLGksY1swXSxjWzFdLDAsaSxhLGwuZGF0YS5zdWJhcnJheShsLm9mZnNldCxsLm9mZnNldCtnKSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxuLGUscixjWzBdLGNbMV0saSxhLGwuZGF0YS5zdWJhcnJheShsLm9mZnNldCxsLm9mZnNldCtnKSk7ZWxzZXt2YXIgYjtiPWE9PT10LkZMT0FUP3YubWFsbG9jRmxvYXQzMihnKTp2Lm1hbGxvY1VpbnQ4KGcpO3ZhciBfPXAoYixjLFtjWzJdLGNbMl0qY1swXSwxXSk7aD09PXQuRkxPQVQmJmE9PT10LlVOU0lHTkVEX0JZVEU/eChfLGwpOm0uYXNzaWduKF8sbCkseT90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG4saSxjWzBdLGNbMV0sMCxpLGEsYi5zdWJhcnJheSgwLGcpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG4sZSxyLGNbMF0sY1sxXSxpLGEsYi5zdWJhcnJheSgwLGcpKSxhPT09dC5GTE9BVD92LmZyZWVGbG9hdDMyKGIpOnYuZnJlZVVpbnQ4KGIpfX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuY3JlYXRlVGV4dHVyZSgpO3JldHVybiB0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLGV9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBhPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPmF8fHI8MHx8cj5hKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKTtpZihpPT09dC5GTE9BVCYmIXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBGbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTt2YXIgcz11KHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsbixlLHIsMCxuLGksbnVsbCksbmV3IG8odCxzLGUscixuLGkpfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBzPXUodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxpLGksYSxlKSxuZXcgbyh0LHMscixuLGksYSl9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWUuZHR5cGUsbj1lLnNoYXBlLnNsaWNlKCksaT10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG5bMF08MHx8blswXT5pfHxuWzFdPDB8fG5bMV0+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTt2YXIgYT1zKG4sZS5zdHJpZGUuc2xpY2UoKSksbD0wOyJmbG9hdDMyIj09PXI/bD10LkZMT0FUOiJmbG9hdDY0Ij09PXI/KGw9dC5GTE9BVCxhPSExLHI9ImZsb2F0MzIiKToidWludDgiPT09cj9sPXQuVU5TSUdORURfQllURToobD10LlVOU0lHTkVEX0JZVEUsYT0hMSxyPSJ1aW50OCIpO3ZhciBjPTA7aWYoMj09PW4ubGVuZ3RoKWM9dC5MVU1JTkFOQ0Usbj1bblswXSxuWzFdLDFdLGU9cChlLmRhdGEsbixbZS5zdHJpZGVbMF0sZS5zdHJpZGVbMV0sMV0sZS5vZmZzZXQpO2Vsc2V7aWYoMyE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PW5bMl0pYz10LkFMUEhBO2Vsc2UgaWYoMj09PW5bMl0pYz10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1uWzJdKWM9dC5SR0I7ZWxzZXtpZig0IT09blsyXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7Yz10LlJHQkF9fWwhPT10LkZMT0FUfHx0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKXx8KGw9dC5VTlNJR05FRF9CWVRFLGE9ITEpO3ZhciBoLGYsZD1lLnNpemU7aWYoYSloPTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PWQ/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCtkKTtlbHNle3ZhciBnPVtuWzJdLG5bMl0qblswXSwxXTtmPXYubWFsbG9jKGQscik7dmFyIHk9cChmLG4sZywwKTsiZmxvYXQzMiIhPT1yJiYiZmxvYXQ2NCIhPT1yfHxsIT09dC5VTlNJR05FRF9CWVRFP20uYXNzaWduKHksZSk6eCh5LGUpLGg9Zi5zdWJhcnJheSgwLGQpfXZhciBiPXUodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxjLG5bMF0sblsxXSwwLGMsbCxoKSxhfHx2LmZyZWUoZiksbmV3IG8odCxiLG5bMF0sblsxXSxjLGwpfWZ1bmN0aW9uIGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpO2lmKGd8fG4odCksIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIGModCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIGModCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPWkoZSk/ZTplLnJhdztpZihyKXJldHVybiBoKHQsciwwfGUud2lkdGgsMHxlLmhlaWdodCxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoZS5zaGFwZSYmZS5kYXRhJiZlLnN0cmlkZSlyZXR1cm4gZih0LGUpfXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIil9dmFyIHA9dCgibmRhcnJheSIpLG09dCgibmRhcnJheS1vcHMiKSx2PXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz1kO3ZhciBnPW51bGwseT1udWxsLGI9bnVsbCx4PWZ1bmN0aW9uKHQsZSl7bS5tdWxzKHQsZSwyNTUpfSxfPW8ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF8se21pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmZy5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSx5LmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLHQpLHRoaXMuX21pbkZpbHRlcj10fX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZnLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHkuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsdCksdGhpcy5fbWFnRmlsdGVyPXR9fSxtaXBTYW1wbGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYW5pc29TYW1wbGVzO2lmKHRoaXMuX2FuaXNvU2FtcGxlcz0wfE1hdGgubWF4KHQsMSksZSE9PXRoaXMuX2FuaXNvU2FtcGxlcyl7dmFyIHI9dGhpcy5nbC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3ImJnRoaXMuZ2wudGV4UGFyYW1ldGVyZih0aGlzLmdsLlRFWFRVUkVfMkQsci5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCx0aGlzLl9hbmlzb1NhbXBsZXMpfXJldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9fSx3cmFwUzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksYi5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfUyx0KSx0aGlzLl93cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGIuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1QsdCksdGhpcy5fd3JhcFQ9dH19LHdyYXA6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3QsdF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTXVzdCBzcGVjaWZ5IHdyYXAgbW9kZSBmb3Igcm93cyBhbmQgY29sdW1ucyIpO2Zvcih2YXIgZT0wO2U8MjsrK2UpaWYoYi5pbmRleE9mKHRbZV0pPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7dGhpcy5fd3JhcFM9dFswXSx0aGlzLl93cmFwVD10WzFdO3ZhciByPXRoaXMuZ2w7cmV0dXJuIHRoaXMuYmluZCgpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfUyx0aGlzLl93cmFwUyksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9ULHRoaXMuX3dyYXBUKSx0fX0sc2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIil9ZWxzZSB0PVswfHQsMHx0XTtyZXR1cm4gYSh0aGlzLDB8dFswXSwwfHRbMV0pLFswfHRbMF0sMHx0WzFdXX19LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxhKHRoaXMsdCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsYSh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLF8uYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LF8uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LF8uZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LF8uc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obj1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbj1ufHwwO3ZhciBvPWkodCk/dDp0LnJhdztpZihvKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihuKTwwPyhhLnRleEltYWdlMkQoYS5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLG8pLHRoaXMuX21pcExldmVscy5wdXNoKG4pKTphLnRleFN1YkltYWdlMkQoYS5URVhUVVJFXzJELG4sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxvKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO2lmKHQuc2hhcGUubGVuZ3RoPDJ8fGUrdC5zaGFwZVsxXT50aGlzLl9zaGFwZVsxXT4+Pm58fHIrdC5zaGFwZVswXT50aGlzLl9zaGFwZVswXT4+Pm58fGU8MHx8cjwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHMiKTtsKGEsZSxyLG4sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheTo0NjUsIm5kYXJyYXktb3BzIjo0NTksInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sMjY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2U/ZS5iaW5kKCk6dC5iaW5kQnVmZmVyKHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsbnVsbCk7dmFyIG49MHx0LmdldFBhcmFtZXRlcih0Lk1BWF9WRVJURVhfQVRUUklCUyk7aWYocil7aWYoci5sZW5ndGg+bil0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogVG9vIG1hbnkgdmVydGV4IGF0dHJpYnV0ZXMiKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoOysraSl7dmFyIGE9cltpXTtpZihhLmJ1ZmZlcil7dmFyIG89YS5idWZmZXIscz1hLnNpemV8fDQsbD1hLnR5cGV8fHQuRkxPQVQsdT0hIWEubm9ybWFsaXplZCxjPWEuc3RyaWRlfHwwLGg9YS5vZmZzZXR8fDA7by5iaW5kKCksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxzLGwsdSxjLGgpfWVsc2V7aWYoIm51bWJlciI9PXR5cGVvZiBhKXQudmVydGV4QXR0cmliMWYoaSxhKTtlbHNlIGlmKDE9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjFmKGksYVswXSk7ZWxzZSBpZigyPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIyZihpLGFbMF0sYVsxXSk7ZWxzZSBpZigzPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIzZihpLGFbMF0sYVsxXSxhWzJdKTtlbHNle2lmKDQhPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogSW52YWxpZCB2ZXJ0ZXggYXR0cmlidXRlIik7dC52ZXJ0ZXhBdHRyaWI0ZihpLGFbMF0sYVsxXSxhWzJdLGFbM10pfXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX1mb3IoO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9ZWxzZXt0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCk7Zm9yKHZhciBpPTA7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19ZS5leHBvcnRzPW59LHt9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmdsPXQsdGhpcy5fZWxlbWVudHM9bnVsbCx0aGlzLl9hdHRyaWJ1dGVzPW51bGwsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IG4odCl9dmFyIGE9dCgiLi9kby1iaW5kLmpzIik7bi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe2EodGhpcy5nbCx0aGlzLl9lbGVtZW50cyx0aGlzLl9hdHRyaWJ1dGVzKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbGVtZW50cz1lLHRoaXMuX2F0dHJpYnV0ZXM9dCx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sbi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl9lbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1pfSx7Ii4vZG8tYmluZC5qcyI6MjY2fV0sMjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3RoaXMubG9jYXRpb249dCx0aGlzLmRpbWVuc2lvbj1lLHRoaXMuYT1yLHRoaXMuYj1uLHRoaXMuYz1pLHRoaXMuZD1hfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLl9leHQ9ZSx0aGlzLmhhbmRsZT1yLHRoaXMuX2F0dHJpYnM9W10sdGhpcy5fdXNlRWxlbWVudHM9ITEsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuZXcgaSh0LGUsZS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKX12YXIgbz10KCIuL2RvLWJpbmQuanMiKTtuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmRpbWVuc2lvbil7Y2FzZSAxOnQudmVydGV4QXR0cmliMWYodGhpcy5sb2NhdGlvbix0aGlzLmEpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYik7YnJlYWs7Y2FzZSAzOnQudmVydGV4QXR0cmliM2YodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyk7YnJlYWs7Y2FzZSA0OnQudmVydGV4QXR0cmliNGYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyx0aGlzLmQpfX0saS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5fYXR0cmlicy5sZW5ndGg7Kyt0KXRoaXMuX2F0dHJpYnNbdF0uYmluZCh0aGlzLmdsKX0saS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0saS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5iaW5kKCksbyh0aGlzLmdsLGUsdCksdGhpcy51bmJpbmQoKSx0aGlzLl9hdHRyaWJzLmxlbmd0aD0wLHQpZm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBhPXRbaV07Im51bWJlciI9PXR5cGVvZiBhP3RoaXMuX2F0dHJpYnMucHVzaChuZXcgbihpLDEsYSkpOkFycmF5LmlzQXJyYXkoYSkmJnRoaXMuX2F0dHJpYnMucHVzaChuZXcgbihpLGEubGVuZ3RoLGFbMF0sYVsxXSxhWzJdLGFbM10pKX10aGlzLl91c2VFbGVtZW50cz0hIWUsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX3VzZUVsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWF9LHsiLi9kby1iaW5kLmpzIjoyNjZ9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10LmJpbmRWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuY3JlYXRlVmVydGV4QXJyYXlPRVM9dC5jcmVhdGVWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuZGVsZXRlVmVydGV4QXJyYXlPRVM9dC5kZWxldGVWZXJ0ZXhBcnJheS5iaW5kKHQpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBuKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybiBzPWw/YSh0LGwpOm8odCkscy51cGRhdGUoZSxyLGkpLHN9dmFyIGE9dCgiLi9saWIvdmFvLW5hdGl2ZS5qcyIpLG89dCgiLi9saWIvdmFvLWVtdWxhdGVkLmpzIik7ZS5leHBvcnRzPWl9LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjoyNjcsIi4vbGliL3Zhby1uYXRpdmUuanMiOjI2OH1dLDI3MDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH1lLmV4cG9ydHM9bn0se31dLDI3MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZS5leHBvcnRzPW59LHt9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuKX1lLmV4cG9ydHM9bn0se31dLDI3MzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0fWUuZXhwb3J0cz1ufSx7fV0sMjc0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO3JldHVybiBhPjAmJihhPTEvTWF0aC5zcXJ0KGEpLHRbMF09ZVswXSphLHRbMV09ZVsxXSphLHRbMl09ZVsyXSphKSx0fWUuZXhwb3J0cz1ufSx7fV0sMjc1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH1lLmV4cG9ydHM9bn0se31dLDI3NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGlbMF09bixpWzFdPXIsaVsyXT1lLGlbM109dCxhWzBdfWUuZXhwb3J0cz1uO3ZhciBpPW5ldyBVaW50OEFycmF5KDQpLGE9bmV3IEZsb2F0MzJBcnJheShpLmJ1ZmZlcil9LHt9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1BcnJheS5pc0FycmF5KHQpP3Q6aSh0KSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYoInByZXByb2Nlc3NvciI9PT1uLnR5cGUpe3ZhciBvPW4uZGF0YS5tYXRjaCgvXCNkZWZpbmVccytTSEFERVJfTkFNRShfQjY0KT9ccysoLispJC8pO2lmKG8mJm9bMl0pe3ZhciBzPW9bMV0sbD1vWzJdO3JldHVybihzP2EobCk6bCkudHJpbSgpfX19fXZhciBpPXQoImdsc2wtdG9rZW5pemVyIiksYT10KCJhdG9iLWxpdGUiKTtlLmV4cG9ydHM9bn0seyJhdG9iLWxpdGUiOjQ2LCJnbHNsLXRva2VuaXplciI6Mjg0fV0sMjc4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKHQpe3QubGVuZ3RoJiZWLnB1c2goe3R5cGU6TVtCXSxkYXRhOnQscG9zaXRpb246RyxsaW5lOkgsY29sdW1uOnF9KX1mdW5jdGlvbiByKHQpe2o9MCxXKz10LEY9Vy5sZW5ndGg7Zm9yKHZhciBlO089V1tqXSxqPEY7KXtzd2l0Y2goZT1qLEIpe2Nhc2UgaDpqPUUoKTticmVhaztjYXNlIGY6aj1TKCk7YnJlYWs7Y2FzZSBkOmo9VCgpO2JyZWFrO2Nhc2UgcDpqPUwoKTticmVhaztjYXNlIG06aj1JKCk7YnJlYWs7Y2FzZSB3Omo9eigpO2JyZWFrO2Nhc2UgdjpqPUQoKTticmVhaztjYXNlIGM6aj1QKCk7YnJlYWs7Y2FzZSB4Omo9QSgpO2JyZWFrO2Nhc2UgdTpqPWsoKX1pZihlIT09ailzd2l0Y2goV1tlXSl7Y2FzZSJcbiI6cT0wLCsrSDticmVhaztkZWZhdWx0OisrcX19cmV0dXJuIE4rPWosVz1XLnNsaWNlKGopLFZ9ZnVuY3Rpb24gbih0KXtyZXR1cm4gVS5sZW5ndGgmJmUoVS5qb2luKCIiKSksQj1fLGUoIihlb2YpIiksVn1mdW5jdGlvbiBrKCl7cmV0dXJuIFU9VS5sZW5ndGg/W106VSwiLyI9PT1SJiYiKiI9PT1PPyhHPU4rai0xLEI9aCxSPU8saisxKToiLyI9PT1SJiYiLyI9PT1PPyhHPU4rai0xLEI9ZixSPU8saisxKToiIyI9PT1PPyhCPWQsRz1OK2osaik6L1xzLy50ZXN0KE8pPyhCPXgsRz1OK2osaik6KFk9L1xkLy50ZXN0KE8pLFg9L1teXHdfXS8udGVzdChPKSxHPU4raixCPVk/bTpYP3A6YyxqKX1mdW5jdGlvbiBBKCl7cmV0dXJuL1teXHNdL2cudGVzdChPKT8oZShVLmpvaW4oIiIpKSxCPXUsaik6KFUucHVzaChPKSxSPU8saisxKX1mdW5jdGlvbiBUKCl7cmV0dXJuIlxyIiE9PU8mJiJcbiIhPT1PfHwiXFwiPT09Uj8oVS5wdXNoKE8pLFI9TyxqKzEpOihlKFUuam9pbigiIikpLEI9dSxqKX1mdW5jdGlvbiBTKCl7cmV0dXJuIFQoKX1mdW5jdGlvbiBFKCl7cmV0dXJuIi8iPT09TyYmIioiPT09Uj8oVS5wdXNoKE8pLGUoVS5qb2luKCIiKSksQj11LGorMSk6KFUucHVzaChPKSxSPU8saisxKX1mdW5jdGlvbiBMKCl7aWYoIi4iPT09UiYmL1xkLy50ZXN0KE8pKXJldHVybiBCPXYsajtpZigiLyI9PT1SJiYiKiI9PT1PKXJldHVybiBCPWgsajtpZigiLyI9PT1SJiYiLyI9PT1PKXJldHVybiBCPWYsajtpZigiLiI9PT1PJiZVLmxlbmd0aCl7Zm9yKDtDKFUpOyk7cmV0dXJuIEI9dixqfWlmKCI7Ij09PU98fCIpIj09PU98fCIoIj09PU8pe2lmKFUubGVuZ3RoKWZvcig7QyhVKTspO3JldHVybiBlKE8pLEI9dSxqKzF9dmFyIHQ9Mj09PVUubGVuZ3RoJiYiPSIhPT1PO2lmKC9bXHdfXGRcc10vLnRlc3QoTyl8fHQpe2Zvcig7QyhVKTspO3JldHVybiBCPXUsan1yZXR1cm4gVS5wdXNoKE8pLFI9TyxqKzF9ZnVuY3Rpb24gQyh0KXtmb3IodmFyIHIsbixpPTA7Oyl7aWYocj1hLmluZGV4T2YodC5zbGljZSgwLHQubGVuZ3RoK2kpLmpvaW4oIiIpKSxuPWFbcl0sLTE9PT1yKXtpZihpLS0rdC5sZW5ndGg+MCljb250aW51ZTtuPXQuc2xpY2UoMCwxKS5qb2luKCIiKX1yZXR1cm4gZShuKSxHKz1uLmxlbmd0aCxVPVUuc2xpY2Uobi5sZW5ndGgpLFUubGVuZ3RofX1mdW5jdGlvbiB6KCl7cmV0dXJuL1teYS1mQS1GMC05XS8udGVzdChPKT8oZShVLmpvaW4oIiIpKSxCPXUsaik6KFUucHVzaChPKSxSPU8saisxKX1mdW5jdGlvbiBJKCl7cmV0dXJuIi4iPT09Tz8oVS5wdXNoKE8pLEI9dixSPU8saisxKTovW2VFXS8udGVzdChPKT8oVS5wdXNoKE8pLEI9dixSPU8saisxKToieCI9PT1PJiYxPT09VS5sZW5ndGgmJiIwIj09PVVbMF0/KEI9dyxVLnB1c2goTyksUj1PLGorMSk6L1teXGRdLy50ZXN0KE8pPyhlKFUuam9pbigiIikpLEI9dSxqKTooVS5wdXNoKE8pLFI9TyxqKzEpfWZ1bmN0aW9uIEQoKXtyZXR1cm4iZiI9PT1PJiYoVS5wdXNoKE8pLFI9TyxqKz0xKSwvW2VFXS8udGVzdChPKT8oVS5wdXNoKE8pLFI9TyxqKzEpOiItIj09PU8mJi9bZUVdLy50ZXN0KFIpPyhVLnB1c2goTyksUj1PLGorMSk6L1teXGRdLy50ZXN0KE8pPyhlKFUuam9pbigiIikpLEI9dSxqKTooVS5wdXNoKE8pLFI9TyxqKzEpfWZ1bmN0aW9uIFAoKXtpZigvW15cZFx3X10vLnRlc3QoTykpe3ZhciB0PVUuam9pbigiIik7cmV0dXJuIEI9Si5pbmRleE9mKHQpPi0xP2I6Wi5pbmRleE9mKHQpPi0xP3k6ZyxlKFUuam9pbigiIikpLEI9dSxqfXJldHVybiBVLnB1c2goTyksUj1PLGorMX12YXIgTyxSLEYsaj0wLE49MCxCPXUsVT1bXSxWPVtdLEg9MSxxPTAsRz0wLFk9ITEsWD0hMSxXPSIiO3Q9dHx8e307dmFyIFo9byxKPWk7cmV0dXJuIjMwMCBlcyI9PT10LnZlcnNpb24mJihaPWwsSj1zKSxmdW5jdGlvbih0KXtyZXR1cm4gVj1bXSxudWxsIT09dD9yKHQucmVwbGFjZT90LnJlcGxhY2UoL1xyXG4vZywiXG4iKTp0KTpuKCl9fWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4vbGliL2xpdGVyYWxzIiksYT10KCIuL2xpYi9vcGVyYXRvcnMiKSxvPXQoIi4vbGliL2J1aWx0aW5zIikscz10KCIuL2xpYi9saXRlcmFscy0zMDBlcyIpLGw9dCgiLi9saWIvYnVpbHRpbnMtMzAwZXMiKSx1PTk5OSxjPTk5OTksaD0wLGY9MSxkPTIscD0zLG09NCx2PTUsZz02LHk9NyxiPTgseD05LF89MTAsdz0xMSxNPVsiYmxvY2stY29tbWVudCIsImxpbmUtY29tbWVudCIsInByZXByb2Nlc3NvciIsIm9wZXJhdG9yIiwiaW50ZWdlciIsImZsb2F0IiwiaWRlbnQiLCJidWlsdGluIiwia2V5d29yZCIsIndoaXRlc3BhY2UiLCJlb2YiLCJpbnRlZ2VyIl19LHsiLi9saWIvYnVpbHRpbnMiOjI4MCwiLi9saWIvYnVpbHRpbnMtMzAwZXMiOjI3OSwiLi9saWIvbGl0ZXJhbHMiOjI4MiwiLi9saWIvbGl0ZXJhbHMtMzAwZXMiOjI4MSwiLi9saWIvb3BlcmF0b3JzIjoyODN9XSwyNzk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2J1aWx0aW5zIik7bj1uLnNsaWNlKCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEvXihnbFxffHRleHR1cmUpLy50ZXN0KHQpfSksZS5leHBvcnRzPW4uY29uY2F0KFsiZ2xfVmVydGV4SUQiLCJnbF9JbnN0YW5jZUlEIiwiZ2xfUG9zaXRpb24iLCJnbF9Qb2ludFNpemUiLCJnbF9GcmFnQ29vcmQiLCJnbF9Gcm9udEZhY2luZyIsImdsX0ZyYWdEZXB0aCIsImdsX1BvaW50Q29vcmQiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIiwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01pblByb2dyYW1UZXhlbE9mZnNldCIsImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRGVwdGhSYW5nZSIsInRydW5jIiwicm91bmQiLCJyb3VuZEV2ZW4iLCJpc25hbiIsImlzaW5mIiwiZmxvYXRCaXRzVG9JbnQiLCJmbG9hdEJpdHNUb1VpbnQiLCJpbnRCaXRzVG9GbG9hdCIsInVpbnRCaXRzVG9GbG9hdCIsInBhY2tTbm9ybTJ4MTYiLCJ1bnBhY2tTbm9ybTJ4MTYiLCJwYWNrVW5vcm0yeDE2IiwidW5wYWNrVW5vcm0yeDE2IiwicGFja0hhbGYyeDE2IiwidW5wYWNrSGFsZjJ4MTYiLCJvdXRlclByb2R1Y3QiLCJ0cmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsImludmVyc2UiLCJ0ZXh0dXJlIiwidGV4dHVyZVNpemUiLCJ0ZXh0dXJlUHJvaiIsInRleHR1cmVMb2QiLCJ0ZXh0dXJlT2Zmc2V0IiwidGV4ZWxGZXRjaCIsInRleGVsRmV0Y2hPZmZzZXQiLCJ0ZXh0dXJlUHJvak9mZnNldCIsInRleHR1cmVMb2RPZmZzZXQiLCJ0ZXh0dXJlUHJvakxvZCIsInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwidGV4dHVyZUdyYWQiLCJ0ZXh0dXJlR3JhZE9mZnNldCIsInRleHR1cmVQcm9qR3JhZCIsInRleHR1cmVQcm9qR3JhZE9mZnNldCJdKX0seyIuL2J1aWx0aW5zIjoyODB9XSwyODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJhYnMiLCJhY29zIiwiYWxsIiwiYW55IiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY2xhbXAiLCJjb3MiLCJjcm9zcyIsImRGZHgiLCJkRmR5IiwiZGVncmVlcyIsImRpc3RhbmNlIiwiZG90IiwiZXF1YWwiLCJleHAiLCJleHAyIiwiZmFjZWZvcndhcmQiLCJmbG9vciIsImZyYWN0IiwiZ2xfQmFja0NvbG9yIiwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfQmFja0xpZ2h0UHJvZHVjdCIsImdsX0JhY2tNYXRlcmlhbCIsImdsX0JhY2tTZWNvbmRhcnlDb2xvciIsImdsX0NsaXBQbGFuZSIsImdsX0NsaXBWZXJ0ZXgiLCJnbF9Db2xvciIsImdsX0RlcHRoUmFuZ2UiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0V5ZVBsYW5lUSIsImdsX0V5ZVBsYW5lUiIsImdsX0V5ZVBsYW5lUyIsImdsX0V5ZVBsYW5lVCIsImdsX0ZvZyIsImdsX0ZvZ0Nvb3JkIiwiZ2xfRm9nRnJhZ0Nvb3JkIiwiZ2xfRm9nUGFyYW1ldGVycyIsImdsX0ZyYWdDb2xvciIsImdsX0ZyYWdDb29yZCIsImdsX0ZyYWdEYXRhIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfRnJhZ0RlcHRoRVhUIiwiZ2xfRnJvbnRDb2xvciIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCIsImdsX0Zyb250TGlnaHRQcm9kdWN0IiwiZ2xfRnJvbnRNYXRlcmlhbCIsImdsX0Zyb250U2Vjb25kYXJ5Q29sb3IiLCJnbF9MaWdodE1vZGVsIiwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnMiLCJnbF9MaWdodE1vZGVsUHJvZHVjdHMiLCJnbF9MaWdodFByb2R1Y3RzIiwiZ2xfTGlnaHRTb3VyY2UiLCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnMiLCJnbF9NYXRlcmlhbFBhcmFtZXRlcnMiLCJnbF9NYXhDbGlwUGxhbmVzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50cyIsImdsX01heExpZ2h0cyIsImdsX01heFRleHR1cmVDb29yZHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVVbml0cyIsImdsX01heFZhcnlpbmdGbG9hdHMiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtQ29tcG9uZW50cyIsImdsX01vZGVsVmlld01hdHJpeCIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfTXVsdGlUZXhDb29yZDAiLCJnbF9NdWx0aVRleENvb3JkMSIsImdsX011bHRpVGV4Q29vcmQyIiwiZ2xfTXVsdGlUZXhDb29yZDMiLCJnbF9NdWx0aVRleENvb3JkNCIsImdsX011bHRpVGV4Q29vcmQ1IiwiZ2xfTXVsdGlUZXhDb29yZDYiLCJnbF9NdWx0aVRleENvb3JkNyIsImdsX05vcm1hbCIsImdsX05vcm1hbE1hdHJpeCIsImdsX05vcm1hbFNjYWxlIiwiZ2xfT2JqZWN0UGxhbmVRIiwiZ2xfT2JqZWN0UGxhbmVSIiwiZ2xfT2JqZWN0UGxhbmVTIiwiZ2xfT2JqZWN0UGxhbmVUIiwiZ2xfUG9pbnQiLCJnbF9Qb2ludENvb3JkIiwiZ2xfUG9pbnRQYXJhbWV0ZXJzIiwiZ2xfUG9pbnRTaXplIiwiZ2xfUG9zaXRpb24iLCJnbF9Qcm9qZWN0aW9uTWF0cml4IiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9TZWNvbmRhcnlDb2xvciIsImdsX1RleENvb3JkIiwiZ2xfVGV4dHVyZUVudkNvbG9yIiwiZ2xfVGV4dHVyZU1hdHJpeCIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIiwiZ2xfVmVydGV4IiwiZ3JlYXRlclRoYW4iLCJncmVhdGVyVGhhbkVxdWFsIiwiaW52ZXJzZXNxcnQiLCJsZW5ndGgiLCJsZXNzVGhhbiIsImxlc3NUaGFuRXF1YWwiLCJsb2ciLCJsb2cyIiwibWF0cml4Q29tcE11bHQiLCJtYXgiLCJtaW4iLCJtaXgiLCJtb2QiLCJub3JtYWxpemUiLCJub3QiLCJub3RFcXVhbCIsInBvdyIsInJhZGlhbnMiLCJyZWZsZWN0IiwicmVmcmFjdCIsInNpZ24iLCJzaW4iLCJzbW9vdGhzdGVwIiwic3FydCIsInN0ZXAiLCJ0YW4iLCJ0ZXh0dXJlMkQiLCJ0ZXh0dXJlMkRMb2QiLCJ0ZXh0dXJlMkRQcm9qIiwidGV4dHVyZTJEUHJvakxvZCIsInRleHR1cmVDdWJlIiwidGV4dHVyZUN1YmVMb2QiLCJ0ZXh0dXJlMkRMb2RFWFQiLCJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwidGV4dHVyZUN1YmVMb2RFWFQiLCJ0ZXh0dXJlMkRHcmFkRVhUIiwidGV4dHVyZTJEUHJvakdyYWRFWFQiLCJ0ZXh0dXJlQ3ViZUdyYWRFWFQiXX0se31dLDI4MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbGl0ZXJhbHMiKQo7ZS5leHBvcnRzPW4uc2xpY2UoKS5jb25jYXQoWyJsYXlvdXQiLCJjZW50cm9pZCIsInNtb290aCIsImNhc2UiLCJtYXQyeDIiLCJtYXQyeDMiLCJtYXQyeDQiLCJtYXQzeDIiLCJtYXQzeDMiLCJtYXQzeDQiLCJtYXQ0eDIiLCJtYXQ0eDMiLCJtYXQ0eDQiLCJ1aW50IiwidXZlYzIiLCJ1dmVjMyIsInV2ZWM0Iiwic2FtcGxlckN1YmVTaGFkb3ciLCJzYW1wbGVyMkRBcnJheSIsInNhbXBsZXIyREFycmF5U2hhZG93IiwiaXNhbXBsZXIyRCIsImlzYW1wbGVyM0QiLCJpc2FtcGxlckN1YmUiLCJpc2FtcGxlcjJEQXJyYXkiLCJ1c2FtcGxlcjJEIiwidXNhbXBsZXIzRCIsInVzYW1wbGVyQ3ViZSIsInVzYW1wbGVyMkRBcnJheSIsImNvaGVyZW50IiwicmVzdHJpY3QiLCJyZWFkb25seSIsIndyaXRlb25seSIsInJlc291cmNlIiwiYXRvbWljX3VpbnQiLCJub3BlcnNwZWN0aXZlIiwicGF0Y2giLCJzYW1wbGUiLCJzdWJyb3V0aW5lIiwiY29tbW9uIiwicGFydGl0aW9uIiwiYWN0aXZlIiwiZmlsdGVyIiwiaW1hZ2UxRCIsImltYWdlMkQiLCJpbWFnZTNEIiwiaW1hZ2VDdWJlIiwiaWltYWdlMUQiLCJpaW1hZ2UyRCIsImlpbWFnZTNEIiwiaWltYWdlQ3ViZSIsInVpbWFnZTFEIiwidWltYWdlMkQiLCJ1aW1hZ2UzRCIsInVpbWFnZUN1YmUiLCJpbWFnZTFEQXJyYXkiLCJpbWFnZTJEQXJyYXkiLCJpaW1hZ2UxREFycmF5IiwiaWltYWdlMkRBcnJheSIsInVpbWFnZTFEQXJyYXkiLCJ1aW1hZ2UyREFycmF5IiwiaW1hZ2UxRFNoYWRvdyIsImltYWdlMkRTaGFkb3ciLCJpbWFnZTFEQXJyYXlTaGFkb3ciLCJpbWFnZTJEQXJyYXlTaGFkb3ciLCJpbWFnZUJ1ZmZlciIsImlpbWFnZUJ1ZmZlciIsInVpbWFnZUJ1ZmZlciIsInNhbXBsZXIxREFycmF5Iiwic2FtcGxlcjFEQXJyYXlTaGFkb3ciLCJpc2FtcGxlcjFEIiwiaXNhbXBsZXIxREFycmF5IiwidXNhbXBsZXIxRCIsInVzYW1wbGVyMURBcnJheSIsImlzYW1wbGVyMkRSZWN0IiwidXNhbXBsZXIyRFJlY3QiLCJzYW1wbGVyQnVmZmVyIiwiaXNhbXBsZXJCdWZmZXIiLCJ1c2FtcGxlckJ1ZmZlciIsInNhbXBsZXIyRE1TIiwiaXNhbXBsZXIyRE1TIiwidXNhbXBsZXIyRE1TIiwic2FtcGxlcjJETVNBcnJheSIsImlzYW1wbGVyMkRNU0FycmF5IiwidXNhbXBsZXIyRE1TQXJyYXkiXSl9LHsiLi9saXRlcmFscyI6MjgyfV0sMjgyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsicHJlY2lzaW9uIiwiaGlnaHAiLCJtZWRpdW1wIiwibG93cCIsImF0dHJpYnV0ZSIsImNvbnN0IiwidW5pZm9ybSIsInZhcnlpbmciLCJicmVhayIsImNvbnRpbnVlIiwiZG8iLCJmb3IiLCJ3aGlsZSIsImlmIiwiZWxzZSIsImluIiwib3V0IiwiaW5vdXQiLCJmbG9hdCIsImludCIsInZvaWQiLCJib29sIiwidHJ1ZSIsImZhbHNlIiwiZGlzY2FyZCIsInJldHVybiIsIm1hdDIiLCJtYXQzIiwibWF0NCIsInZlYzIiLCJ2ZWMzIiwidmVjNCIsIml2ZWMyIiwiaXZlYzMiLCJpdmVjNCIsImJ2ZWMyIiwiYnZlYzMiLCJidmVjNCIsInNhbXBsZXIxRCIsInNhbXBsZXIyRCIsInNhbXBsZXIzRCIsInNhbXBsZXJDdWJlIiwic2FtcGxlcjFEU2hhZG93Iiwic2FtcGxlcjJEU2hhZG93Iiwic3RydWN0IiwiYXNtIiwiY2xhc3MiLCJ1bmlvbiIsImVudW0iLCJ0eXBlZGVmIiwidGVtcGxhdGUiLCJ0aGlzIiwicGFja2VkIiwiZ290byIsInN3aXRjaCIsImRlZmF1bHQiLCJpbmxpbmUiLCJub2lubGluZSIsInZvbGF0aWxlIiwicHVibGljIiwic3RhdGljIiwiZXh0ZXJuIiwiZXh0ZXJuYWwiLCJpbnRlcmZhY2UiLCJsb25nIiwic2hvcnQiLCJkb3VibGUiLCJoYWxmIiwiZml4ZWQiLCJ1bnNpZ25lZCIsImlucHV0Iiwib3V0cHV0IiwiaHZlYzIiLCJodmVjMyIsImh2ZWM0IiwiZHZlYzIiLCJkdmVjMyIsImR2ZWM0IiwiZnZlYzIiLCJmdmVjMyIsImZ2ZWM0Iiwic2FtcGxlcjJEUmVjdCIsInNhbXBsZXIzRFJlY3QiLCJzYW1wbGVyMkRSZWN0U2hhZG93Iiwic2l6ZW9mIiwiY2FzdCIsIm5hbWVzcGFjZSIsInVzaW5nIl19LHt9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyI8PD0iLCI+Pj0iLCIrKyIsIi0tIiwiPDwiLCI+PiIsIjw9IiwiPj0iLCI9PSIsIiE9IiwiJiYiLCJ8fCIsIis9IiwiLT0iLCIqPSIsIi89IiwiJT0iLCImPSIsIl5eIiwiXj0iLCJ8PSIsIigiLCIpIiwiWyIsIl0iLCIuIiwiISIsIn4iLCIqIiwiLyIsIiUiLCIrIiwiLSIsIjwiLCI+IiwiJiIsIl4iLCJ8IiwiPyIsIjoiLCI9IiwiLCIsIjsiLCJ7IiwifSJdfSx7fV0sMjg0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWkoZSksbj1bXTtyZXR1cm4gbj1uLmNvbmNhdChyKHQpKSxuPW4uY29uY2F0KHIobnVsbCkpfXZhciBpPXQoIi4vaW5kZXgiKTtlLmV4cG9ydHM9bn0seyIuL2luZGV4IjoyNzh9XSwyODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49dGhpcy5jZWxscz1bXTtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3RoaXMuYXJyYXlCdWZmZXI9dDt2YXIgYT1uZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTt0PWFbMF0sZT1hWzFdLHI9YVsyXSx0aGlzLmQ9ZSsyKnI7Zm9yKHZhciBvPTA7bzx0aGlzLmQqdGhpcy5kO28rKyl7dmFyIHM9YVtpK29dLGw9YVtpK28rMV07bi5wdXNoKHM9PT1sP251bGw6YS5zdWJhcnJheShzLGwpKX12YXIgdT1hW2krbi5sZW5ndGhdLGM9YVtpK24ubGVuZ3RoKzFdO3RoaXMua2V5cz1hLnN1YmFycmF5KHUsYyksdGhpcy5iYm94ZXM9YS5zdWJhcnJheShjKSx0aGlzLmluc2VydD10aGlzLl9pbnNlcnRSZWFkb25seX1lbHNle3RoaXMuZD1lKzIqcjtmb3IodmFyIGg9MDtoPHRoaXMuZCp0aGlzLmQ7aCsrKW4ucHVzaChbXSk7dGhpcy5rZXlzPVtdLHRoaXMuYmJveGVzPVtdfXRoaXMubj1lLHRoaXMuZXh0ZW50PXQsdGhpcy5wYWRkaW5nPXIsdGhpcy5zY2FsZT1lL3QsdGhpcy51aWQ9MDt2YXIgZj1yL2UqdDt0aGlzLm1pbj0tZix0aGlzLm1heD10K2Z9ZS5leHBvcnRzPW47dmFyIGk9MztuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydENlbGwsdGhpcy51aWQrKyksdGhpcy5rZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sbi5wcm90b3R5cGUuX2luc2VydFJlYWRvbmx5PWZ1bmN0aW9uKCl7dGhyb3ciQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci4ifSxuLnByb3RvdHlwZS5faW5zZXJ0Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jZWxsc1tpXS5wdXNoKGEpfSxuLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLm1pbixhPXRoaXMubWF4O2lmKHQ8PWkmJmU8PWkmJmE8PXImJmE8PW4pcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMua2V5cyk7dmFyIG89W10scz17fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsbyxzKSxvfSxuLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXRoaXMuY2VsbHNbaV07aWYobnVsbCE9PXMpZm9yKHZhciBsPXRoaXMua2V5cyx1PXRoaXMuYmJveGVzLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGg9c1tjXTtpZih2b2lkIDA9PT1vW2hdKXt2YXIgZj00Kmg7dDw9dVtmKzJdJiZlPD11W2YrM10mJnI+PXVbZiswXSYmbj49dVtmKzFdPyhvW2hdPSEwLGEucHVzaChsW2hdKSk6b1toXT0hMX19fSxuLnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChlKSx1PXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChyKSxjPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChuKSxoPXM7aDw9dTtoKyspZm9yKHZhciBmPWw7Zjw9YztmKyspe3ZhciBkPXRoaXMuZCpmK2g7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixkLGEsbykpcmV0dXJufX0sbi5wcm90b3R5cGUuX2NvbnZlcnRUb0NlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmQtMSxNYXRoLmZsb29yKHQqdGhpcy5zY2FsZSkrdGhpcy5wYWRkaW5nKSl9LG4ucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtpZih0aGlzLmFycmF5QnVmZmVyKXJldHVybiB0aGlzLmFycmF5QnVmZmVyO2Zvcih2YXIgdD10aGlzLmNlbGxzLGU9aSt0aGlzLmNlbGxzLmxlbmd0aCsxKzEscj0wLG49MDtuPHRoaXMuY2VsbHMubGVuZ3RoO24rKylyKz10aGlzLmNlbGxzW25dLmxlbmd0aDt2YXIgYT1uZXcgSW50MzJBcnJheShlK3IrdGhpcy5rZXlzLmxlbmd0aCt0aGlzLmJib3hlcy5sZW5ndGgpO2FbMF09dGhpcy5leHRlbnQsYVsxXT10aGlzLm4sYVsyXT10aGlzLnBhZGRpbmc7Zm9yKHZhciBvPWUscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2FbaStzXT1vLGEuc2V0KGwsbyksbys9bC5sZW5ndGh9cmV0dXJuIGFbaSt0Lmxlbmd0aF09byxhLnNldCh0aGlzLmtleXMsbyksbys9dGhpcy5rZXlzLmxlbmd0aCxhW2krdC5sZW5ndGgrMV09byxhLnNldCh0aGlzLmJib3hlcyxvKSxvKz10aGlzLmJib3hlcy5sZW5ndGgsYS5idWZmZXJ9fSx7fV0sMjg2OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImlzLWJyb3dzZXIiKTtuPSJmdW5jdGlvbiI9PXR5cGVvZiByLm1hdGNoTWVkaWE/IXIubWF0Y2hNZWRpYSgiKGhvdmVyOiBub25lKSIpLm1hdGNoZXM6aSxlLmV4cG9ydHM9bn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjoyOTJ9XSwyODc6W2Z1bmN0aW9uKHQsZSxyKXtyLnJlYWQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9OCppLW4tMSxsPSgxPDxzKS0xLHU9bD4+MSxjPS03LGg9cj9pLTE6MCxmPXI/LTE6MSxkPXRbZStoXTtmb3IoaCs9ZixhPWQmKDE8PC1jKS0xLGQ+Pj0tYyxjKz1zO2M+MDthPTI1NiphK3RbZStoXSxoKz1mLGMtPTgpO2ZvcihvPWEmKDE8PC1jKS0xLGE+Pj0tYyxjKz1uO2M+MDtvPTI1NipvK3RbZStoXSxoKz1mLGMtPTgpO2lmKDA9PT1hKWE9MS11O2Vsc2V7aWYoYT09PWwpcmV0dXJuIG8/TmFOOjEvMCooZD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGEtPXV9cmV0dXJuKGQ/LTE6MSkqbypNYXRoLnBvdygyLGEtbil9LHIud3JpdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCx1PTgqYS1pLTEsYz0oMTw8dSktMSxoPWM+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9bj8wOmEtMSxwPW4/MTotMSxtPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz1jKToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLGUrPW8raD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCksZSpsPj0yJiYobysrLGwvPTIpLG8raD49Yz8ocz0wLG89Yyk6bytoPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1oKToocz1lKk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyx1Kz1pO3U+MDt0W3IrZF09MjU1Jm8sZCs9cCxvLz0yNTYsdS09OCk7dFtyK2QtcF18PTEyOCptfX0se31dLDI4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5hZGphY2VudD1lLHRoaXMuYm91bmRhcnk9cix0aGlzLmxhc3RWaXNpdGVkPS0xfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmNlbGw9ZSx0aGlzLmluZGV4PXJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBjKHQudmVydGljZXMsZS52ZXJ0aWNlcyl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9WyJmdW5jdGlvbiBvcmllbnQoKXt2YXIgdHVwbGU9dGhpcy50dXBsZTtyZXR1cm4gdGVzdCgiXSxyPTA7cjw9dDsrK3Ipcj4wJiZlLnB1c2goIiwiKSxlLnB1c2goInR1cGxlWyIsciwiXSIpO2UucHVzaCgiKX1yZXR1cm4gb3JpZW50Iik7dmFyIG49bmV3IEZ1bmN0aW9uKCJ0ZXN0IixlLmpvaW4oIiIpKSxpPXVbdCsxXTtyZXR1cm4gaXx8KGk9dSksbihpKX1mdW5jdGlvbiBzKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuYm91bmRhcnl9KSx0aGlzLnR1cGxlPW5ldyBBcnJheSh0KzEpO2Zvcih2YXIgbj0wO248PXQ7KytuKXRoaXMudHVwbGVbbl09dGhpcy52ZXJ0aWNlc1tuXTt2YXIgaT1oW3RdO2l8fChpPWhbdF09byh0KSksdGhpcy5vcmllbnQ9aX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3QgZCsxIHBvaW50cyIpO3ZhciBpPXRbMF0ubGVuZ3RoO2lmKHI8PWkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGlucHV0IGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgYT10LnNsaWNlKDAsaSsxKSxvPXUuYXBwbHkodm9pZCAwLGEpO2lmKDA9PT1vKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbm90IGluIGdlbmVyYWwgcG9zaXRpb24iKTtmb3IodmFyIGw9bmV3IEFycmF5KGkrMSksYz0wO2M8PWk7KytjKWxbY109YztvPDAmJihsWzBdPTEsbFsxXT0wKTtmb3IodmFyIGg9bmV3IG4obCxuZXcgQXJyYXkoaSsxKSwhMSksZj1oLmFkamFjZW50LGQ9bmV3IEFycmF5KGkrMiksYz0wO2M8PWk7KytjKXtmb3IodmFyIHA9bC5zbGljZSgpLG09MDttPD1pOysrbSltPT09YyYmKHBbbV09LTEpO3ZhciB2PXBbMF07cFswXT1wWzFdLHBbMV09djt2YXIgZz1uZXcgbihwLG5ldyBBcnJheShpKzEpLCEwKTtmW2NdPWcsZFtjXT1nfWRbaSsxXT1oO2Zvcih2YXIgYz0wO2M8PWk7KytjKWZvcih2YXIgcD1mW2NdLnZlcnRpY2VzLHk9ZltjXS5hZGphY2VudCxtPTA7bTw9aTsrK20pe3ZhciBiPXBbbV07aWYoYjwwKXlbbV09aDtlbHNlIGZvcih2YXIgeD0wO3g8PWk7Kyt4KWZbeF0udmVydGljZXMuaW5kZXhPZihiKTwwJiYoeVttXT1mW3hdKX1mb3IodmFyIF89bmV3IHMoaSxhLGQpLHc9ISFlLGM9aSsxO2M8cjsrK2MpXy5pbnNlcnQodFtjXSx3KTtyZXR1cm4gXy5ib3VuZGFyeSgpfWUuZXhwb3J0cz1sO3ZhciB1PXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGM9dCgic2ltcGxpY2lhbC1jb21wbGV4IikuY29tcGFyZUNlbGxzO24ucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgaD1bXSxmPXMucHJvdG90eXBlO2YuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kaW1lbnNpb24sbj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLGk9dGhpcy50dXBsZSxhPXRoaXMudmVydGljZXMsbz1bdF07Zm9yKHQubGFzdFZpc2l0ZWQ9LW47by5sZW5ndGg+MDspe3Q9by5wb3AoKTtmb3IodmFyIHM9KHQudmVydGljZXMsdC5hZGphY2VudCksbD0wO2w8PXI7KytsKXt2YXIgdT1zW2xdO2lmKHUuYm91bmRhcnkmJiEodS5sYXN0VmlzaXRlZDw9LW4pKXtmb3IodmFyIGM9dS52ZXJ0aWNlcyxoPTA7aDw9cjsrK2gpe3ZhciBmPWNbaF07aVtoXT1mPDA/ZTphW2ZdfXZhciBkPXRoaXMub3JpZW50KCk7aWYoZD4wKXJldHVybiB1O3UubGFzdFZpc2l0ZWQ9LW4sMD09PWQmJm8ucHVzaCh1KX19fXJldHVybiBudWxsfSxmLndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGE9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLHU9cy5hZGphY2VudCxjPTA7Yzw9bjsrK2MpYVtjXT1pW2xbY11dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodmFyIGM9MDtjPD1uOysrYyl7dmFyIGg9dVtjXTtpZighKGgubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgZj1hW2NdO2FbY109dDt2YXIgZD10aGlzLm9yaWVudCgpO2lmKGFbY109ZixkPDApe3M9aDtjb250aW51ZSB0fWguYm91bmRhcnk/aC5sYXN0VmlzaXRlZD0tcjpoLmxhc3RWaXNpdGVkPXJ9fXJldHVybn1yZXR1cm4gc30sZi5hZGRQZWFrcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbz10aGlzLmRpbWVuc2lvbixzPXRoaXMudmVydGljZXMsbD10aGlzLnR1cGxlLHU9dGhpcy5pbnRlcmlvcixjPXRoaXMuc2ltcGxpY2VzLGg9W2VdO2UubGFzdFZpc2l0ZWQ9cixlLnZlcnRpY2VzW2UudmVydGljZXMuaW5kZXhPZigtMSldPXIsZS5ib3VuZGFyeT0hMSx1LnB1c2goZSk7Zm9yKHZhciBmPVtdO2gubGVuZ3RoPjA7KXt2YXIgZT1oLnBvcCgpLGQ9ZS52ZXJ0aWNlcyxwPWUuYWRqYWNlbnQsbT1kLmluZGV4T2Yocik7aWYoIShtPDApKWZvcih2YXIgdj0wO3Y8PW87Kyt2KWlmKHYhPT1tKXt2YXIgZz1wW3ZdO2lmKGcuYm91bmRhcnkmJiEoZy5sYXN0VmlzaXRlZD49cikpe3ZhciB5PWcudmVydGljZXM7aWYoZy5sYXN0VmlzaXRlZCE9PS1yKXtmb3IodmFyIGI9MCx4PTA7eDw9bzsrK3gpeVt4XTwwPyhiPXgsbFt4XT10KTpsW3hdPXNbeVt4XV07dmFyIF89dGhpcy5vcmllbnQoKTtpZihfPjApe3lbYl09cixnLmJvdW5kYXJ5PSExLHUucHVzaChnKSxoLnB1c2goZyksZy5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfWcubGFzdFZpc2l0ZWQ9LXJ9dmFyIHc9Zy5hZGphY2VudCxNPWQuc2xpY2UoKSxrPXAuc2xpY2UoKSxBPW5ldyBuKE0saywhMCk7Yy5wdXNoKEEpO3ZhciBUPXcuaW5kZXhPZihlKTtpZighKFQ8MCkpe3dbVF09QSxrW21dPWcsTVt2XT0tMSxrW3ZdPWUscFt2XT1BLEEuZmxpcCgpO2Zvcih2YXIgeD0wO3g8PW87Kyt4KXt2YXIgUz1NW3hdO2lmKCEoUzwwfHxTPT09cikpe2Zvcih2YXIgRT1uZXcgQXJyYXkoby0xKSxMPTAsQz0wO0M8PW87KytDKXt2YXIgej1NW0NdO3o8MHx8Qz09PXh8fChFW0wrK109eil9Zi5wdXNoKG5ldyBpKEUsQSx4KSl9fX19fX1mLnNvcnQoYSk7Zm9yKHZhciB2PTA7disxPGYubGVuZ3RoO3YrPTIpe3ZhciBJPWZbdl0sRD1mW3YrMV0sUD1JLmluZGV4LE89RC5pbmRleDtQPDB8fE88MHx8KEkuY2VsbC5hZGphY2VudFtJLmluZGV4XT1ELmNlbGwsRC5jZWxsLmFkamFjZW50W0QuaW5kZXhdPUkuY2VsbCl9fSxmLmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXM7ci5wdXNoKHQpO3ZhciBuPXRoaXMud2Fsayh0LGUpO2lmKG4pe2Zvcih2YXIgaT10aGlzLmRpbWVuc2lvbixhPXRoaXMudHVwbGUsbz0wO288PWk7KytvKXt2YXIgcz1uLnZlcnRpY2VzW29dO2Fbb109czwwP3Q6cltzXX12YXIgbD10aGlzLm9yaWVudChhKTtsPDB8fCgwIT09bHx8KG49dGhpcy5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3kobix0KSkpJiZ0aGlzLmFkZFBlYWtzKHQsbil9fSxmLmJvdW5kYXJ5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZGltZW5zaW9uLGU9W10scj10aGlzLnNpbXBsaWNlcyxuPXIubGVuZ3RoLGk9MDtpPG47KytpKXt2YXIgYT1yW2ldO2lmKGEuYm91bmRhcnkpe2Zvcih2YXIgbz1uZXcgQXJyYXkodCkscz1hLnZlcnRpY2VzLGw9MCx1PTAsYz0wO2M8PXQ7KytjKXNbY10+PTA/b1tsKytdPXNbY106dT0xJmM7aWYodT09PSgxJnQpKXt2YXIgaD1vWzBdO29bMF09b1sxXSxvWzFdPWh9ZS5wdXNoKG8pfX1yZXR1cm4gZX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDYsInNpbXBsaWNpYWwtY29tcGxleCI6NTE3fV0sMjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLm1pZD10LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9cix0aGlzLmxlZnRQb2ludHM9bix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0oZT9lLmNvdW50OjApKyhyP3IuY291bnQ6MCkrbi5sZW5ndGh9ZnVuY3Rpb24gaSh0LGUpe3QubWlkPWUubWlkLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQubGVmdFBvaW50cz1lLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1lLnJpZ2h0UG9pbnRzLHQuY291bnQ9ZS5jb3VudH1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9cChlKTt0Lm1pZD1yLm1pZCx0LmxlZnQ9ci5sZWZ0LHQucmlnaHQ9ci5yaWdodCx0LmxlZnRQb2ludHM9ci5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ci5yaWdodFBvaW50cyx0LmNvdW50PXIuY291bnR9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKTtyLnB1c2goZSksYSh0LHIpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LmludGVydmFscyhbXSksbj1yLmluZGV4T2YoZSk7cmV0dXJuIG48MD95OihyLnNwbGljZShuLDEpLGEodCxyKSxiKX1mdW5jdGlvbiBsKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0W25dWzBdPD1lOysrbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wJiZ0W25dWzFdPj1lOy0tbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPWUodFtyXSk7aWYobilyZXR1cm4gbn19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gZih0LGUpe3ZhciByPXRbMF0tZVswXTtyZXR1cm4gcnx8dFsxXS1lWzFdfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10WzFdLWVbMV07cmV0dXJuIHJ8fHRbMF0tZVswXX1mdW5jdGlvbiBwKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChoKTtmb3IodmFyIGk9ZVtlLmxlbmd0aD4+MV0sYT1bXSxvPVtdLHM9W10scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08aT9hLnB1c2gobCk6aTxsWzBdP28ucHVzaChsKTpzLnB1c2gobCl9dmFyIHU9cyxjPXMuc2xpY2UoKTtyZXR1cm4gdS5zb3J0KGYpLGMuc29ydChkKSxuZXcgbihpLHAoYSkscChvKSx1LGMpfWZ1bmN0aW9uIG0odCl7dGhpcy5yb290PXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IG0odCYmMCE9PXQubGVuZ3RoP3AodCk6bnVsbCl9dmFyIGc9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSx5PTAsYj0xO2UuZXhwb3J0cz12O3ZhciB4PW4ucHJvdG90eXBlO3guaW50ZXJ2YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2guYXBwbHkodCx0aGlzLmxlZnRQb2ludHMpLHRoaXMubGVmdCYmdGhpcy5sZWZ0LmludGVydmFscyh0KSx0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmludGVydmFscyh0KSx0fSx4Lmluc2VydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cy5sZW5ndGg7aWYodGhpcy5jb3VudCs9MSx0WzFdPHRoaXMubWlkKXRoaXMubGVmdD80Kih0aGlzLmxlZnQuY291bnQrMSk+MyooZSsxKT9vKHRoaXMsdCk6dGhpcy5sZWZ0Lmluc2VydCh0KTp0aGlzLmxlZnQ9cChbdF0pO2Vsc2UgaWYodFswXT50aGlzLm1pZCl0aGlzLnJpZ2h0PzQqKHRoaXMucmlnaHQuY291bnQrMSk+MyooZSsxKT9vKHRoaXMsdCk6dGhpcy5yaWdodC5pbnNlcnQodCk6dGhpcy5yaWdodD1wKFt0XSk7ZWxzZXt2YXIgcj1nLmdlKHRoaXMubGVmdFBvaW50cyx0LGYpLG49Zy5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsZCk7dGhpcy5sZWZ0UG9pbnRzLnNwbGljZShyLDAsdCksdGhpcy5yaWdodFBvaW50cy5zcGxpY2UobiwwLHQpfX0seC5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHM7aWYodFsxXTx0aGlzLm1pZCl7aWYoIXRoaXMubGVmdClyZXR1cm4geTtpZig0Kih0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCk+MyooZS0xKSlyZXR1cm4gcyh0aGlzLHQpO3ZhciByPXRoaXMubGVmdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1yPyh0aGlzLmxlZnQ9bnVsbCx0aGlzLmNvdW50LT0xLGIpOihyPT09YiYmKHRoaXMuY291bnQtPTEpLHIpfWlmKHRbMF0+dGhpcy5taWQpe2lmKCF0aGlzLnJpZ2h0KXJldHVybiB5O2lmKDQqKHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCk+MyooZS0xKSlyZXR1cm4gcyh0aGlzLHQpO3ZhciByPXRoaXMucmlnaHQucmVtb3ZlKHQpO3JldHVybiAyPT09cj8odGhpcy5yaWdodD1udWxsLHRoaXMuY291bnQtPTEsYik6KHI9PT1iJiYodGhpcy5jb3VudC09MSkscil9aWYoMT09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMubGVmdFBvaW50c1swXT09PXQ/Mjp5O2lmKDE9PT10aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbMF09PT10KXtpZih0aGlzLmxlZnQmJnRoaXMucmlnaHQpe2Zvcih2YXIgbj10aGlzLGE9dGhpcy5sZWZ0O2EucmlnaHQ7KW49YSxhPWEucmlnaHQ7aWYobj09PXRoaXMpYS5yaWdodD10aGlzLnJpZ2h0O2Vsc2V7dmFyIG89dGhpcy5sZWZ0LHI9dGhpcy5yaWdodDtuLmNvdW50LT1hLmNvdW50LG4ucmlnaHQ9YS5sZWZ0LGEubGVmdD1vLGEucmlnaHQ9cn1pKHRoaXMsYSksdGhpcy5jb3VudD0odGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKSsodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApK3RoaXMubGVmdFBvaW50cy5sZW5ndGh9ZWxzZSB0aGlzLmxlZnQ/aSh0aGlzLHRoaXMubGVmdCk6aSh0aGlzLHRoaXMucmlnaHQpO3JldHVybiBifWZvcih2YXIgbz1nLmdlKHRoaXMubGVmdFBvaW50cyx0LGYpO288dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW29dWzBdPT09dFswXTsrK28paWYodGhpcy5sZWZ0UG9pbnRzW29dPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKG8sMSk7Zm9yKHZhciByPWcuZ2UodGhpcy5yaWdodFBvaW50cyx0LGQpO3I8dGhpcy5yaWdodFBvaW50cy5sZW5ndGgmJnRoaXMucmlnaHRQb2ludHNbcl1bMV09PT10WzFdOysrcilpZih0aGlzLnJpZ2h0UG9pbnRzW3JdPT09dClyZXR1cm4gdGhpcy5yaWdodFBvaW50cy5zcGxpY2UociwxKSxifXJldHVybiB5fSx4LnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0PHRoaXMubWlkKXtpZih0aGlzLmxlZnQpe3ZhciByPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSk7aWYocilyZXR1cm4gcn1yZXR1cm4gbCh0aGlzLmxlZnRQb2ludHMsdCxlKX1pZih0PnRoaXMubWlkKXtpZih0aGlzLnJpZ2h0KXt2YXIgcj10aGlzLnJpZ2h0LnF1ZXJ5UG9pbnQodCxlKTtpZihyKXJldHVybiByfXJldHVybiB1KHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gYyh0aGlzLmxlZnRQb2ludHMsZSl9LHgucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0KXt2YXIgbj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscik7aWYobilyZXR1cm4gbn1pZihlPnRoaXMubWlkJiZ0aGlzLnJpZ2h0KXt2YXIgbj10aGlzLnJpZ2h0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpO2lmKG4pcmV0dXJuIG59cmV0dXJuIGU8dGhpcy5taWQ/bCh0aGlzLmxlZnRQb2ludHMsZSxyKTp0PnRoaXMubWlkP3UodGhpcy5yaWdodFBvaW50cyx0LHIpOmModGhpcy5sZWZ0UG9pbnRzLHIpfTt2YXIgXz1tLnByb3RvdHlwZTtfLmluc2VydD1mdW5jdGlvbih0KXt0aGlzLnJvb3Q/dGhpcy5yb290Lmluc2VydCh0KTp0aGlzLnJvb3Q9bmV3IG4odFswXSxudWxsLG51bGwsW3RdLFt0XSl9LF8ucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucm9vdCl7dmFyIGU9dGhpcy5yb290LnJlbW92ZSh0KTtyZXR1cm4gMj09PWUmJih0aGlzLnJvb3Q9bnVsbCksZSE9PXl9cmV0dXJuITF9LF8ucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5UG9pbnQodCxlKX0sXy5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD1lJiZ0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeUludGVydmFsKHQsZSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sImNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiaW50ZXJ2YWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NjR9XSwyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2U9ZXx8bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillW3Rbcl1dPXI7cmV0dXJuIGV9ZS5leHBvcnRzPW59LHt9XSwyOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09cjtyZXR1cm4gZX1lLmV4cG9ydHM9bn0se31dLDI5MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDI5MzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih0KX1mdW5jdGlvbiBpKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZSYmbih0LnNsaWNlKDAsMCkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmKG4odCl8fGkodCl8fCEhdC5faXNCdWZmZXIpfX0se31dLDI5NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHR8fCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwodD1uYXZpZ2F0b3IudXNlckFnZW50KSx0JiZ0LmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgdC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJih0PXQuaGVhZGVyc1sidXNlci1hZ2VudCJdKSwic3RyaW5nIj09dHlwZW9mIHQmJigvKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWluby9pLnRlc3QodCl8fC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcLShufHUpfGM1NVwvfGNhcGl8Y2N3YXxjZG1cLXxjZWxsfGNodG18Y2xkY3xjbWRcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1wtc3xkZXZpfGRpY2F8ZG1vYnxkbyhjfHApb3xkcygxMnxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlwtNXxnXC1tb3xnbyhcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcLShtfHB8dCl8aGVpXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1wtY3xodChjKFwtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aVwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFwtfFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFwvKXxrbG9ufGtwdCB8a3djXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFwvKGt8bHx1KXw1MHw1NHxcLVthLXddKXxsaWJ3fGx5bnh8bTFcLXd8bTNnYXxtNTBcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8XC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFwtZ3xxYVwtYXxxYygwN3wxMnwyMXwzMnw2MHxcLVsyLTddfGlcLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFwtfG9vfHBcLSl8c2RrXC98c2UoYyhcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcLXxzaGFyfHNpZShcLXxtKXxza1wtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXC18dlwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXC18dGRnXC18dGVsKGl8bSl8dGltXC18dFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cLXxtM3xtNSl8dHhcLTl8dXAoXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXC18eW91cnx6ZXRvfHp0ZVwtL2kudGVzdCh0LnN1YnN0cigwLDQpKSl9ZS5leHBvcnRzPW59LHt9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1uLmNhbGwodCkmJihudWxsPT09KGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXx8ZT09PU9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpfX0se31dLDI5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSl7cmV0dXJuIG5ldyBpKHQsZSxyLG4sYSl9ZnVuY3Rpb24gaSh0LGUscixuLGkpe2U9ZXx8YSxyPXJ8fG8saT1pfHxBcnJheSx0aGlzLm5vZGVTaXplPW58fDY0LHRoaXMucG9pbnRzPXQsdGhpcy5pZHM9bmV3IGkodC5sZW5ndGgpLHRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpO2Zvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXRoaXMuaWRzW2xdPWwsdGhpcy5jb29yZHNbMipsXT1lKHRbbF0pLHRoaXMuY29vcmRzWzIqbCsxXT1yKHRbbF0pO3ModGhpcy5pZHMsdGhpcy5jb29yZHMsdGhpcy5ub2RlU2l6ZSwwLHRoaXMuaWRzLmxlbmd0aC0xLDApfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdFsxXX12YXIgcz10KCIuL3NvcnQiKSxsPXQoIi4vcmFuZ2UiKSx1PXQoIi4vd2l0aGluIik7ZS5leHBvcnRzPW4saS5wcm90b3R5cGU9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBsKHRoaXMuaWRzLHRoaXMuY29vcmRzLHQsZSxyLG4sdGhpcy5ub2RlU2l6ZSl9LHdpdGhpbjpmdW5jdGlvbih0LGUscil7cmV0dXJuIHUodGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9fX0seyIuL3JhbmdlIjoyOTcsIi4vc29ydCI6Mjk4LCIuL3dpdGhpbiI6Mjk5fV0sMjk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzLGwsdT1bMCx0Lmxlbmd0aC0xLDBdLGM9W107dS5sZW5ndGg7KXt2YXIgaD11LnBvcCgpLGY9dS5wb3AoKSxkPXUucG9wKCk7aWYoZi1kPD1vKWZvcih2YXIgcD1kO3A8PWY7cCsrKXM9ZVsyKnBdLGw9ZVsyKnArMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmYy5wdXNoKHRbcF0pO2Vsc2V7dmFyIG09TWF0aC5mbG9vcigoZCtmKS8yKTtzPWVbMiptXSxsPWVbMiptKzFdLHM+PXImJnM8PWkmJmw+PW4mJmw8PWEmJmMucHVzaCh0W21dKTt2YXIgdj0oaCsxKSUyOygwPT09aD9yPD1zOm48PWwpJiYodS5wdXNoKGQpLHUucHVzaChtLTEpLHUucHVzaCh2KSksKDA9PT1oP2k+PXM6YT49bCkmJih1LnB1c2gobSsxKSx1LnB1c2goZiksdS5wdXNoKHYpKX19cmV0dXJuIGN9ZS5leHBvcnRzPW59LHt9XSwyOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixhLG8scyl7aWYoIShvLWE8PXIpKXt2YXIgbD1NYXRoLmZsb29yKChhK28pLzIpO2kodCxlLGwsYSxvLHMlMiksbih0LGUscixhLGwtMSxzKzEpLG4odCxlLHIsbCsxLG8scysxKX19ZnVuY3Rpb24gaSh0LGUscixuLG8scyl7Zm9yKDtvPm47KXtpZihvLW4+NjAwKXt2YXIgbD1vLW4rMSx1PXItbisxLGM9TWF0aC5sb2cobCksaD0uNSpNYXRoLmV4cCgyKmMvMyksZj0uNSpNYXRoLnNxcnQoYypoKihsLWgpL2wpKih1LWwvMjwwPy0xOjEpO2kodCxlLHIsTWF0aC5tYXgobixNYXRoLmZsb29yKHItdSpoL2wrZikpLE1hdGgubWluKG8sTWF0aC5mbG9vcihyKyhsLXUpKmgvbCtmKSkscyl9dmFyIGQ9ZVsyKnIrc10scD1uLG09bztmb3IoYSh0LGUsbixyKSxlWzIqbytzXT5kJiZhKHQsZSxuLG8pO3A8bTspe2ZvcihhKHQsZSxwLG0pLHArKyxtLS07ZVsyKnArc108ZDspcCsrO2Zvcig7ZVsyKm0rc10+ZDspbS0tfWVbMipuK3NdPT09ZD9hKHQsZSxuLG0pOihtKyssYSh0LGUsbSxvKSksbTw9ciYmKG49bSsxKSxyPD1tJiYobz1tLTEpfX1mdW5jdGlvbiBhKHQsZSxyLG4pe28odCxyLG4pLG8oZSwyKnIsMipuKSxvKGUsMipyKzEsMipuKzEpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1lLmV4cG9ydHM9bn0se31dLDI5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSxvKXtmb3IodmFyIHM9WzAsdC5sZW5ndGgtMSwwXSxsPVtdLHU9YSphO3MubGVuZ3RoOyl7dmFyIGM9cy5wb3AoKSxoPXMucG9wKCksZj1zLnBvcCgpO2lmKGgtZjw9bylmb3IodmFyIGQ9ZjtkPD1oO2QrKylpKGVbMipkXSxlWzIqZCsxXSxyLG4pPD11JiZsLnB1c2godFtkXSk7ZWxzZXt2YXIgcD1NYXRoLmZsb29yKChmK2gpLzIpLG09ZVsyKnBdLHY9ZVsyKnArMV07aShtLHYscixuKTw9dSYmbC5wdXNoKHRbcF0pO3ZhciBnPShjKzEpJTI7KDA9PT1jP3ItYTw9bTpuLWE8PXYpJiYocy5wdXNoKGYpLHMucHVzaChwLTEpLHMucHVzaChnKSksKDA9PT1jP3IrYT49bTpuK2E+PXYpJiYocy5wdXNoKHArMSkscy5wdXNoKGgpLHMucHVzaChnKSl9fXJldHVybiBsfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfWUuZXhwb3J0cz1ufSx7fV0sMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcjtpZihoKHQpKXt2YXIgbCx1PXQuc3RvcHMmJiJvYmplY3QiPT10eXBlb2YgdC5zdG9wc1swXVswXSxjPXV8fHZvaWQgMCE9PXQucHJvcGVydHksZj11fHwhYyxkPXQudHlwZXx8ZXx8ImV4cG9uZW50aWFsIjtpZigiZXhwb25lbnRpYWwiPT09ZClsPW87ZWxzZSBpZigiaW50ZXJ2YWwiPT09ZClsPWE7ZWxzZSBpZigiY2F0ZWdvcmljYWwiPT09ZClsPWk7ZWxzZXtpZigiaWRlbnRpdHkiIT09ZCl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZnVuY3Rpb24gdHlwZSAiJytkKyciJyk7bD1zfWlmKHUpe2Zvcih2YXIgcD17fSxtPVtdLHY9MDt2PHQuc3RvcHMubGVuZ3RoO3YrKyl7dmFyIGc9dC5zdG9wc1t2XTt2b2lkIDA9PT1wW2dbMF0uem9vbV0mJihwW2dbMF0uem9vbV09e3pvb206Z1swXS56b29tLHR5cGU6dC50eXBlLHByb3BlcnR5OnQucHJvcGVydHksc3RvcHM6W119KSxwW2dbMF0uem9vbV0uc3RvcHMucHVzaChbZ1swXS52YWx1ZSxnWzFdXSl9Zm9yKHZhciB5IGluIHApbS5wdXNoKFtwW3ldLnpvb20sbihwW3ldKV0pO3I9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbyh7c3RvcHM6bSxiYXNlOnQuYmFzZX0sZSkoZSxyKX0sci5pc0ZlYXR1cmVDb25zdGFudD0hMSxyLmlzWm9vbUNvbnN0YW50PSExfWVsc2UgZj8ocj1mdW5jdGlvbihlKXtyZXR1cm4gbCh0LGUpfSxyLmlzRmVhdHVyZUNvbnN0YW50PSEwLHIuaXNab29tQ29uc3RhbnQ9ITEpOihyPWZ1bmN0aW9uKGUscil7cmV0dXJuIGwodCxyW3QucHJvcGVydHldKX0sci5pc0ZlYXR1cmVDb25zdGFudD0hMSxyLmlzWm9vbUNvbnN0YW50PSEwKX1lbHNlIHI9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sci5pc0ZlYXR1cmVDb25zdGFudD0hMCxyLmlzWm9vbUNvbnN0YW50PSEwO3JldHVybiByfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDtyPHQuc3RvcHMubGVuZ3RoO3IrKylpZihlPT09dC5zdG9wc1tyXVswXSlyZXR1cm4gdC5zdG9wc1tyXVsxXTtyZXR1cm4gdC5zdG9wc1swXVsxXX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjx0LnN0b3BzLmxlbmd0aCYmIShlPHQuc3RvcHNbcl1bMF0pO3IrKyk7cmV0dXJuIHQuc3RvcHNbTWF0aC5tYXgoci0xLDApXVsxXX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPXZvaWQgMCE9PXQuYmFzZT90LmJhc2U6MSxuPTA7Oyl7aWYobj49dC5zdG9wcy5sZW5ndGgpYnJlYWs7aWYoZTw9dC5zdG9wc1tuXVswXSlicmVhaztuKyt9cmV0dXJuIDA9PT1uP3Quc3RvcHNbbl1bMV06bj09PXQuc3RvcHMubGVuZ3RoP3Quc3RvcHNbbi0xXVsxXTpsKGUscix0LnN0b3BzW24tMV1bMF0sdC5zdG9wc1tuXVswXSx0LnN0b3BzW24tMV1bMV0sdC5zdG9wc1tuXVsxXSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBlfWZ1bmN0aW9uIGwodCxlLHIsbixpLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP2Z1bmN0aW9uKCl7dmFyIG89aS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSxzPWEuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyk7cmV0dXJuIGwodCxlLHIsbixvLHMpfTppLmxlbmd0aD9jKHQsZSxyLG4saSxhKTp1KHQsZSxyLG4saSxhKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbyxzPW4tcixsPXQtcjtyZXR1cm4gbz0xPT09ZT9sL3M6KE1hdGgucG93KGUsbCktMSkvKE1hdGgucG93KGUscyktMSksaSooMS1vKSthKm99ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MDtzPGkubGVuZ3RoO3MrKylvW3NdPXUodCxlLHIsbixpW3NdLGFbc10pO3JldHVybiBvfWZ1bmN0aW9uIGgodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYodC5zdG9wc3x8ImlkZW50aXR5Ij09PXQudHlwZSl9ZS5leHBvcnRzLmlzRnVuY3Rpb25EZWZpbml0aW9uPWgsZS5leHBvcnRzLmludGVycG9sYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0LCJleHBvbmVudGlhbCIpfSxlLmV4cG9ydHNbInBpZWNld2lzZS1jb25zdGFudCJdPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsImludGVydmFsIil9fSx7fV0sMzAxOltmdW5jdGlvbih0LGUscil7dCgicGF0aCIpO2UuZXhwb3J0cz17ZGVidWc6e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBsb3dwIHZlYzQgdV9jb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7XG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIHN0ZXAoMzI3NjcuMCwgYV9wb3MueCksIDEpO1xufVxuIn0sZmlsbDp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiBvcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xufVxuIn0sY2lyY2xlOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbnZhcnlpbmcgbG93cCBmbG9hdCB2X2FudGlhbGlhc2JsdXI7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGZsb2F0IHQgPSBzbW9vdGhzdGVwKDEuMCAtIG1heChibHVyLCB2X2FudGlhbGlhc2JsdXIpLCAxLjAsIGxlbmd0aCh2X2V4dHJ1ZGUpKTtcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqICgxLjAgLSB0KSAqIG9wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gYm9vbCB1X3NjYWxlX3dpdGhfbWFwO1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcbnVuaWZvcm0gZmxvYXQgdV9kZXZpY2VwaXhlbHJhdGlvO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xudmFyeWluZyBsb3dwIGZsb2F0IHZfYW50aWFsaWFzYmx1cjtcblxudm9pZCBtYWluKHZvaWQpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgLy8gdW5lbmNvZGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgdGhhdCB3ZSBzbnVjayBpbnRvIHRoZSBhX3BvcyB2ZWN0b3JcbiAgICB2X2V4dHJ1ZGUgPSB2ZWMyKG1vZChhX3BvcywgMi4wKSAqIDIuMCAtIDEuMCk7XG5cbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2V4dHJ1ZGUgKiByYWRpdXMgKiB1X2V4dHJ1ZGVfc2NhbGU7XG4gICAgLy8gbXVsdGlwbHkgYV9wb3MgYnkgMC41LCBzaW5jZSB3ZSBoYWQgaXQgKiAyIGluIG9yZGVyIHRvIHNuZWFrXG4gICAgLy8gaW4gZXh0cnVzaW9uIGRhdGFcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChmbG9vcihhX3BvcyAqIDAuNSksIDAsIDEpO1xuXG4gICAgaWYgKHVfc2NhbGVfd2l0aF9tYXApIHtcbiAgICAgICAgZ2xfUG9zaXRpb24ueHkgKz0gZXh0cnVkZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBleHRydWRlICogZ2xfUG9zaXRpb24udztcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgbWluaW11bSBibHVyIGRpc3RhbmNlIHRoYXQgc2VydmVzIGFzIGEgZmF1eC1hbnRpYWxpYXNpbmcgZm9yXG4gICAgLy8gdGhlIGNpcmNsZS4gc2luY2UgYmx1ciBpcyBhIHJhdGlvIG9mIHRoZSBjaXJjbGUncyBzaXplIGFuZCB0aGUgaW50ZW50IGlzXG4gICAgLy8gdG8ga2VlcCB0aGUgYmx1ciBhdCByb3VnaGx5IDFweCwgdGhlIHR3byBhcmUgaW52ZXJzZWx5IHJlbGF0ZWQuXG4gICAgdl9hbnRpYWxpYXNibHVyID0gMS4wIC8gdV9kZXZpY2VwaXhlbHJhdGlvIC8gcmFkaXVzO1xufVxuIn0sbGluZTp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGxvd3AgdmVjNCB1X2NvbG9yO1xudW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdV9ibHVyO1xuXG52YXJ5aW5nIHZlYzIgdl9saW5ld2lkdGg7XG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfbm9ybWFsKSAqIHZfbGluZXdpZHRoLnM7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cbiAgICAvLyB0aGUgbGluZSBpbiBjYXNlIG9mIGFuIG9mZnNldCBsaW5lICh2X2xpbmV3aWR0aC50KSBvciB3aGVuIGZhZGluZyBvdXRcbiAgICAvLyAodl9saW5ld2lkdGgucylcbiAgICBmbG9hdCBibHVyID0gdV9ibHVyICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfbGluZXdpZHRoLnQgLSBibHVyKSwgdl9saW5ld2lkdGgucyAtIGRpc3QpIC8gYmx1ciwgMC4wLCAxLjApO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvciAqIChhbHBoYSAqIHVfb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xuLy8gc3RvcmVkIGluIGEgYnl0ZSAoLTEyOC4uMTI3KS4gd2Ugc2NhbGUgcmVndWxhciBub3JtYWxzIHVwIHRvIGxlbmd0aCA2MywgYnV0XG4vLyB0aGVyZSBhcmUgYWxzbyBcInNwZWNpYWxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxuLy8gdGhpcyBjYXNlKS5cbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9saW5ld2lkdGg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9nYXB3aWR0aDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2FudGlhbGlhc2luZztcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2V4dHJhO1xudW5pZm9ybSBtYXQyIHVfYW50aWFsaWFzaW5nbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfb2Zmc2V0O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfYmx1cjtcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfbGluZXdpZHRoO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcblxuICAgIC8vIFdlIHN0b3JlIHRoZSB0ZXh0dXJlIG5vcm1hbHMgaW4gdGhlIG1vc3QgaW5zaWduaWZpY2FudCBiaXRcbiAgICAvLyB0cmFuc2Zvcm0geSBzbyB0aGF0IDAgPT4gLTEgYW5kIDEgPT4gMVxuICAgIC8vIEluIHRoZSB0ZXh0dXJlIG5vcm1hbCwgeCBpcyAwIGlmIHRoZSBub3JtYWwgcG9pbnRzIHN0cmFpZ2h0IHVwL2Rvd24gYW5kIDEgaWYgaXQncyBhIHJvdW5kIGNhcFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IG1vZChhX3BvcywgMi4wKTtcbiAgICBub3JtYWwueSA9IHNpZ24obm9ybWFsLnkgLSAwLjUpO1xuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xuXG4gICAgZmxvYXQgaW5zZXQgPSB1X2dhcHdpZHRoICsgKHVfZ2Fwd2lkdGggPiAwLjAgPyB1X2FudGlhbGlhc2luZyA6IDAuMCk7XG4gICAgZmxvYXQgb3V0c2V0ID0gdV9nYXB3aWR0aCArIHVfbGluZXdpZHRoICogKHVfZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApICsgdV9hbnRpYWxpYXNpbmc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQgPSB1X29mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcblxuICAgIC8vIFJlbW92ZSB0aGUgdGV4dHVyZSBub3JtYWwgYml0IG9mIHRoZSBwb3NpdGlvbiBiZWZvcmUgc2NhbGluZyBpdCB3aXRoIHRoZVxuICAgIC8vIG1vZGVsL3ZpZXcgbWF0cml4LlxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGZsb29yKGFfcG9zICogMC41KSArIChvZmZzZXQgKyBkaXN0KSAvIHVfcmF0aW8sIDAuMCwgMS4wKTtcblxuICAgIC8vIHBvc2l0aW9uIG9mIHkgb24gdGhlIHNjcmVlblxuICAgIGZsb2F0IHkgPSBnbF9Qb3NpdGlvbi55IC8gZ2xfUG9zaXRpb24udztcblxuICAgIC8vIGhvdyBtdWNoIGZlYXR1cmVzIGFyZSBzcXVpc2hlZCBpbiB0aGUgeSBkaXJlY3Rpb24gYnkgdGhlIHRpbHRcbiAgICBmbG9hdCBzcXVpc2hfc2NhbGUgPSBsZW5ndGgoYV9leHRydWRlKSAvIGxlbmd0aCh1X2FudGlhbGlhc2luZ21hdHJpeCAqIGFfZXh0cnVkZSk7XG5cbiAgICAvLyBob3cgbXVjaCBmZWF0dXJlcyBhcmUgc3F1aXNoZWQgaW4gYWxsIGRpcmVjdGlvbnMgYnkgdGhlIHBlcnNwZWN0aXZlbmVzc1xuICAgIGZsb2F0IHBlcnNwZWN0aXZlX3NjYWxlID0gMS4wIC8gKDEuMCAtIG1pbih5ICogdV9leHRyYSwgMC45KSk7XG5cbiAgICB2X2xpbmV3aWR0aCA9IHZlYzIob3V0c2V0LCBpbnNldCk7XG4gICAgdl9nYW1tYV9zY2FsZSA9IHBlcnNwZWN0aXZlX3NjYWxlICogc3F1aXNoX3NjYWxlO1xufVxuIn0sbGluZXBhdHRlcm46e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBmbG9hdCB1X2JsdXI7XG5cbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIGZsb2F0IHVfZmFkZTtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl9saW5ld2lkdGg7XG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X2xpbmV3aWR0aC5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl9saW5ld2lkdGgudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfbGluZXdpZHRoLnMpXG4gICAgZmxvYXQgYmx1ciA9IHVfYmx1ciAqIHZfZ2FtbWFfc2NhbGU7XG4gICAgZmxvYXQgYWxwaGEgPSBjbGFtcChtaW4oZGlzdCAtICh2X2xpbmV3aWR0aC50IC0gYmx1ciksIHZfbGluZXdpZHRoLnMgLSBkaXN0KSAvIGJsdXIsIDAuMCwgMS4wKTtcblxuICAgIGZsb2F0IHhfYSA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2EueCwgMS4wKTtcbiAgICBmbG9hdCB4X2IgPSBtb2Qodl9saW5lc29mYXIgLyB1X3BhdHRlcm5fc2l6ZV9iLngsIDEuMCk7XG4gICAgZmxvYXQgeV9hID0gMC41ICsgKHZfbm9ybWFsLnkgKiB2X2xpbmV3aWR0aC5zIC8gdV9wYXR0ZXJuX3NpemVfYS55KTtcbiAgICBmbG9hdCB5X2IgPSAwLjUgKyAodl9ub3JtYWwueSAqIHZfbGluZXdpZHRoLnMgLyB1X3BhdHRlcm5fc2l6ZV9iLnkpO1xuICAgIHZlYzIgcG9zX2EgPSBtaXgodV9wYXR0ZXJuX3RsX2EsIHVfcGF0dGVybl9icl9hLCB2ZWMyKHhfYSwgeV9hKSk7XG4gICAgdmVjMiBwb3NfYiA9IG1peCh1X3BhdHRlcm5fdGxfYiwgdV9wYXR0ZXJuX2JyX2IsIHZlYzIoeF9iLCB5X2IpKTtcblxuICAgIHZlYzQgY29sb3IgPSBtaXgodGV4dHVyZTJEKHVfaW1hZ2UsIHBvc19hKSwgdGV4dHVyZTJEKHVfaW1hZ2UsIHBvc19iKSwgdV9mYWRlKTtcblxuICAgIGFscGhhICo9IHVfb3BhY2l0eTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogYWxwaGE7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsCnZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG4vLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxuLy8gdGhlcmUgYXJlIGFsc28gXCJzcGVjaWFsXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cbi8vIHRoaXMgY2FzZSkuXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcblxuLy8gV2Ugc2NhbGUgdGhlIGRpc3RhbmNlIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGJ1ZmZlcnMgc28gdGhhdCB3ZSBjYW4gc3RvcmVcbi8vIGxvbmcgZGlzdGFuY2VzIGZvciBsb25nIHNlZ21lbnRzLiBVc2UgdGhpcyB2YWx1ZSB0byB1bnNjYWxlIHRoZSBkaXN0YW5jZS5cbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfbGluZXdpZHRoO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfZ2Fwd2lkdGg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9hbnRpYWxpYXNpbmc7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9leHRyYTtcbnVuaWZvcm0gbWF0MiB1X2FudGlhbGlhc2luZ21hdHJpeDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X29mZnNldDtcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfbGluZXdpZHRoO1xudmFyeWluZyBmbG9hdCB2X2xpbmVzb2ZhcjtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XG4gICAgZmxvYXQgYV9saW5lc29mYXIgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbiAgICAvLyBXZSBzdG9yZSB0aGUgdGV4dHVyZSBub3JtYWxzIGluIHRoZSBtb3N0IGluc2lnbmlmaWNhbnQgYml0XG4gICAgLy8gdHJhbnNmb3JtIHkgc28gdGhhdCAwID0+IC0xIGFuZCAxID0+IDFcbiAgICAvLyBJbiB0aGUgdGV4dHVyZSBub3JtYWwsIHggaXMgMCBpZiB0aGUgbm9ybWFsIHBvaW50cyBzdHJhaWdodCB1cC9kb3duIGFuZCAxIGlmIGl0J3MgYSByb3VuZCBjYXBcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBtb2QoYV9wb3MsIDIuMCk7XG4gICAgbm9ybWFsLnkgPSBzaWduKG5vcm1hbC55IC0gMC41KTtcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcblxuICAgIGZsb2F0IGluc2V0ID0gdV9nYXB3aWR0aCArICh1X2dhcHdpZHRoID4gMC4wID8gdV9hbnRpYWxpYXNpbmcgOiAwLjApO1xuICAgIGZsb2F0IG91dHNldCA9IHVfZ2Fwd2lkdGggKyB1X2xpbmV3aWR0aCAqICh1X2dhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIHVfYW50aWFsaWFzaW5nO1xuXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxuICAgIC8vIG9mIHRoaXMgdmVydGV4LlxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID0gb3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0ID0gdV9vZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIHRleHR1cmUgbm9ybWFsIGJpdCBvZiB0aGUgcG9zaXRpb24gYmVmb3JlIHNjYWxpbmcgaXQgd2l0aCB0aGVcbiAgICAvLyBtb2RlbC92aWV3IG1hdHJpeC5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChmbG9vcihhX3BvcyAqIDAuNSkgKyAob2Zmc2V0ICsgZGlzdCkgLyB1X3JhdGlvLCAwLjAsIDEuMCk7XG4gICAgdl9saW5lc29mYXIgPSBhX2xpbmVzb2ZhcjtcblxuICAgIC8vIHBvc2l0aW9uIG9mIHkgb24gdGhlIHNjcmVlblxuICAgIGZsb2F0IHkgPSBnbF9Qb3NpdGlvbi55IC8gZ2xfUG9zaXRpb24udztcblxuICAgIC8vIGhvdyBtdWNoIGZlYXR1cmVzIGFyZSBzcXVpc2hlZCBpbiB0aGUgeSBkaXJlY3Rpb24gYnkgdGhlIHRpbHRcbiAgICBmbG9hdCBzcXVpc2hfc2NhbGUgPSBsZW5ndGgoYV9leHRydWRlKSAvIGxlbmd0aCh1X2FudGlhbGlhc2luZ21hdHJpeCAqIGFfZXh0cnVkZSk7XG5cbiAgICAvLyBob3cgbXVjaCBmZWF0dXJlcyBhcmUgc3F1aXNoZWQgaW4gYWxsIGRpcmVjdGlvbnMgYnkgdGhlIHBlcnNwZWN0aXZlbmVzc1xuICAgIGZsb2F0IHBlcnNwZWN0aXZlX3NjYWxlID0gMS4wIC8gKDEuMCAtIG1pbih5ICogdV9leHRyYSwgMC45KSk7XG5cbiAgICB2X2xpbmV3aWR0aCA9IHZlYzIob3V0c2V0LCBpbnNldCk7XG4gICAgdl9nYW1tYV9zY2FsZSA9IHBlcnNwZWN0aXZlX3NjYWxlICogc3F1aXNoX3NjYWxlO1xufVxuIn0sbGluZXNkZnBhdHRlcm46e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBsb3dwIHZlYzQgdV9jb2xvcjtcbnVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7XG5cbnVuaWZvcm0gZmxvYXQgdV9ibHVyO1xudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcbnVuaWZvcm0gZmxvYXQgdV9zZGZnYW1tYTtcbnVuaWZvcm0gZmxvYXQgdV9taXg7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X2xpbmV3aWR0aDtcbnZhcnlpbmcgdmVjMiB2X3RleF9hO1xudmFyeWluZyB2ZWMyIHZfdGV4X2I7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfbm9ybWFsKSAqIHZfbGluZXdpZHRoLnM7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cbiAgICAvLyB0aGUgbGluZSBpbiBjYXNlIG9mIGFuIG9mZnNldCBsaW5lICh2X2xpbmV3aWR0aC50KSBvciB3aGVuIGZhZGluZyBvdXRcbiAgICAvLyAodl9saW5ld2lkdGgucylcbiAgICBmbG9hdCBibHVyID0gdV9ibHVyICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfbGluZXdpZHRoLnQgLSBibHVyKSwgdl9saW5ld2lkdGgucyAtIGRpc3QpIC8gYmx1ciwgMC4wLCAxLjApO1xuXG4gICAgZmxvYXQgc2RmZGlzdF9hID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfdGV4X2EpLmE7XG4gICAgZmxvYXQgc2RmZGlzdF9iID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfdGV4X2IpLmE7XG4gICAgZmxvYXQgc2RmZGlzdCA9IG1peChzZGZkaXN0X2EsIHNkZmRpc3RfYiwgdV9taXgpO1xuICAgIGFscGhhICo9IHNtb290aHN0ZXAoMC41IC0gdV9zZGZnYW1tYSwgMC41ICsgdV9zZGZnYW1tYSwgc2RmZGlzdCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yICogKGFscGhhICogdV9vcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcbi8vIHRoZXJlIGFyZSBhbHNvIFwic3BlY2lhbFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXG4vLyB0aGlzIGNhc2UpLlxuLy8gI2RlZmluZSBzY2FsZSA2My4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5cbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXG4vLyBsb25nIGRpc3RhbmNlcyBmb3IgbG9uZyBzZWdtZW50cy4gVXNlIHRoaXMgdmFsdWUgdG8gdW5zY2FsZSB0aGUgZGlzdGFuY2UuXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2xpbmV3aWR0aDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2dhcHdpZHRoO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfYW50aWFsaWFzaW5nO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2E7XG51bmlmb3JtIGZsb2F0IHVfdGV4X3lfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5zY2FsZV9iO1xudW5pZm9ybSBmbG9hdCB1X3RleF95X2I7XG51bmlmb3JtIGZsb2F0IHVfZXh0cmE7XG51bmlmb3JtIG1hdDIgdV9hbnRpYWxpYXNpbmdtYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9vZmZzZXQ7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X2xpbmV3aWR0aDtcbnZhcnlpbmcgdmVjMiB2X3RleF9hO1xudmFyeWluZyB2ZWMyIHZfdGV4X2I7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xuICAgIGZsb2F0IGFfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4gICAgLy8gV2Ugc3RvcmUgdGhlIHRleHR1cmUgbm9ybWFscyBpbiB0aGUgbW9zdCBpbnNpZ25pZmljYW50IGJpdFxuICAgIC8vIHRyYW5zZm9ybSB5IHNvIHRoYXQgMCA9PiAtMSBhbmQgMSA9PiAxXG4gICAgLy8gSW4gdGhlIHRleHR1cmUgbm9ybWFsLCB4IGlzIDAgaWYgdGhlIG5vcm1hbCBwb2ludHMgc3RyYWlnaHQgdXAvZG93biBhbmQgMSBpZiBpdCdzIGEgcm91bmQgY2FwXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gbW9kKGFfcG9zLCAyLjApO1xuICAgIG5vcm1hbC55ID0gc2lnbihub3JtYWwueSAtIDAuNSk7XG4gICAgdl9ub3JtYWwgPSBub3JtYWw7XG5cbiAgICBmbG9hdCBpbnNldCA9IHVfZ2Fwd2lkdGggKyAodV9nYXB3aWR0aCA+IDAuMCA/IHVfYW50aWFsaWFzaW5nIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSB1X2dhcHdpZHRoICsgdV9saW5ld2lkdGggKiAodV9nYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyB1X2FudGlhbGlhc2luZztcblxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9IG91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldCA9IHVfb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSB0ZXh0dXJlIG5vcm1hbCBiaXQgb2YgdGhlIHBvc2l0aW9uIGJlZm9yZSBzY2FsaW5nIGl0IHdpdGggdGhlXG4gICAgLy8gbW9kZWwvdmlldyBtYXRyaXguXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoZmxvb3IoYV9wb3MgKiAwLjUpICsgKG9mZnNldCArIGRpc3QpIC8gdV9yYXRpbywgMC4wLCAxLjApO1xuXG4gICAgdl90ZXhfYSA9IHZlYzIoYV9saW5lc29mYXIgKiB1X3BhdHRlcm5zY2FsZV9hLngsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYS55ICsgdV90ZXhfeV9hKTtcbiAgICB2X3RleF9iID0gdmVjMihhX2xpbmVzb2ZhciAqIHVfcGF0dGVybnNjYWxlX2IueCwgbm9ybWFsLnkgKiB1X3BhdHRlcm5zY2FsZV9iLnkgKyB1X3RleF95X2IpO1xuXG4gICAgLy8gcG9zaXRpb24gb2YgeSBvbiB0aGUgc2NyZWVuXG4gICAgZmxvYXQgeSA9IGdsX1Bvc2l0aW9uLnkgLyBnbF9Qb3NpdGlvbi53O1xuXG4gICAgLy8gaG93IG11Y2ggZmVhdHVyZXMgYXJlIHNxdWlzaGVkIGluIHRoZSB5IGRpcmVjdGlvbiBieSB0aGUgdGlsdFxuICAgIGZsb2F0IHNxdWlzaF9zY2FsZSA9IGxlbmd0aChhX2V4dHJ1ZGUpIC8gbGVuZ3RoKHVfYW50aWFsaWFzaW5nbWF0cml4ICogYV9leHRydWRlKTtcblxuICAgIC8vIGhvdyBtdWNoIGZlYXR1cmVzIGFyZSBzcXVpc2hlZCBpbiBhbGwgZGlyZWN0aW9ucyBieSB0aGUgcGVyc3BlY3RpdmVuZXNzXG4gICAgZmxvYXQgcGVyc3BlY3RpdmVfc2NhbGUgPSAxLjAgLyAoMS4wIC0gbWluKHkgKiB1X2V4dHJhLCAwLjkpKTtcblxuICAgIHZfbGluZXdpZHRoID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbiAgICB2X2dhbW1hX3NjYWxlID0gcGVyc3BlY3RpdmVfc2NhbGUgKiBzcXVpc2hfc2NhbGU7XG59XG4ifSxvdXRsaW5lOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBvdXRsaW5lX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfcG9zIC0gZ2xfRnJhZ0Nvb3JkLnh5KTtcbiAgICBmbG9hdCBhbHBoYSA9IHNtb290aHN0ZXAoMS4wLCAwLjAsIGRpc3QpO1xuICAgIGdsX0ZyYWdDb2xvciA9IG91dGxpbmVfY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3dvcmxkO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIHZlYzQgb3V0bGluZV9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIHZfcG9zID0gKGdsX1Bvc2l0aW9uLnh5IC8gZ2xfUG9zaXRpb24udyArIDEuMCkgLyAyLjAgKiB1X3dvcmxkO1xufVxuIn0sb3V0bGluZXBhdHRlcm46e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EsIHVfcGF0dGVybl9icl9hLCBpbWFnZWNvb3JkKTtcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xuXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IsIHVfcGF0dGVybl9icl9iLCBpbWFnZWNvb3JkX2IpO1xuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xuXG4gICAgLy8gZmluZCBkaXN0YW5jZSB0byBvdXRsaW5lIGZvciBhbHBoYSBpbnRlcnBvbGF0aW9uXG5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfcG9zIC0gZ2xfRnJhZ0Nvb3JkLnh5KTtcbiAgICBmbG9hdCBhbHBoYSA9IHNtb290aHN0ZXAoMS4wLCAwLjAsIGRpc3QpO1xuICAgIFxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiBhbHBoYSAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgdmVjMiBzY2FsZWRfc2l6ZV9hID0gdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYTtcbiAgICB2ZWMyIHNjYWxlZF9zaXplX2IgPSB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iO1xuXG4gICAgLy8gdGhlIGNvcnJlY3Qgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQuXG4gICAgLy9cbiAgICAvLyBUaGUgb2Zmc2V0IGRlcGVuZHMgb24gaG93IG1hbnkgcGl4ZWxzIGFyZSBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW4gYW5kXG4gICAgLy8gdGhlIGVkZ2Ugb2YgdGhlIHRpbGU6XG4gICAgLy8gdmVjMiBvZmZzZXQgPSBtb2QocGl4ZWxfY29vcmQsIHNpemUpXG4gICAgLy9cbiAgICAvLyBBdCBoaWdoIHpvb20gbGV2ZWxzIHRoZXJlIGFyZSBhIHRvbiBvZiBwaXhlbHMgYmV0d2VlbiB0aGUgd29ybGQgb3JpZ2luXG4gICAgLy8gYW5kIHRoZSBlZGdlIG9mIHRoZSB0aWxlLiBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mXG4gICAgLy8gcHJlY2lzaW9uIGZvciBoaWdocCBmbG9hdHMuIFdlIG5lZWQgbW9yZSB0aGFuIHRoYXQuXG4gICAgLy9cbiAgICAvLyBUaGUgcGl4ZWxfY29vcmQgaXMgcGFzc2VkIGluIGFzIHR3byAxNiBiaXQgdmFsdWVzOlxuICAgIC8vIHBpeGVsX2Nvb3JkX3VwcGVyID0gZmxvb3IocGl4ZWxfY29vcmQgLyAyXjE2KVxuICAgIC8vIHBpeGVsX2Nvb3JkX2xvd2VyID0gbW9kKHBpeGVsX2Nvb3JkLCAyXjE2KVxuICAgIC8vXG4gICAgLy8gVGhlIG9mZnNldCBpcyBjYWxjdWxhdGVkIGluIGEgc2VyaWVzIG9mIHN0ZXBzIHRoYXQgc2hvdWxkIHByZXNlcnZlIHRoaXMgcHJlY2lzaW9uOlxuICAgIHZlYzIgb2Zmc2V0X2EgPSBtb2QobW9kKG1vZCh1X3BpeGVsX2Nvb3JkX3VwcGVyLCBzY2FsZWRfc2l6ZV9hKSAqIDI1Ni4wLCBzY2FsZWRfc2l6ZV9hKSAqIDI1Ni4wICsgdV9waXhlbF9jb29yZF9sb3dlciwgc2NhbGVkX3NpemVfYSk7XG4gICAgdmVjMiBvZmZzZXRfYiA9IG1vZChtb2QobW9kKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHNjYWxlZF9zaXplX2IpICogMjU2LjAsIHNjYWxlZF9zaXplX2IpICogMjU2LjAgKyB1X3BpeGVsX2Nvb3JkX2xvd2VyLCBzY2FsZWRfc2l6ZV9iKTtcblxuICAgIHZfcG9zX2EgPSAodV90aWxlX3VuaXRzX3RvX3BpeGVscyAqIGFfcG9zICsgb2Zmc2V0X2EpIC8gc2NhbGVkX3NpemVfYTtcbiAgICB2X3Bvc19iID0gKHVfdGlsZV91bml0c190b19waXhlbHMgKiBhX3BvcyArIG9mZnNldF9iKSAvIHNjYWxlZF9zaXplX2I7XG5cbiAgICB2X3BvcyA9IChnbF9Qb3NpdGlvbi54eSAvIGdsX1Bvc2l0aW9uLncgKyAxLjApIC8gMi4wICogdV93b3JsZDtcbn1cbiJ9LHBhdHRlcm46e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG52b2lkIG1haW4oKSB7XG5cbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSwgdV9wYXR0ZXJuX2JyX2EsIGltYWdlY29vcmQpO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XG5cbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiwgdV9wYXR0ZXJuX2JyX2IsIGltYWdlY29vcmRfYik7XG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICB2ZWMyIHNjYWxlZF9zaXplX2EgPSB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hO1xuICAgIHZlYzIgc2NhbGVkX3NpemVfYiA9IHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2I7XG5cbiAgICAvLyB0aGUgY29ycmVjdCBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAvL1xuICAgIC8vIFRoZSBvZmZzZXQgZGVwZW5kcyBvbiBob3cgbWFueSBwaXhlbHMgYXJlIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmRcbiAgICAvLyB0aGUgZWRnZSBvZiB0aGUgdGlsZTpcbiAgICAvLyB2ZWMyIG9mZnNldCA9IG1vZChwaXhlbF9jb29yZCwgc2l6ZSlcbiAgICAvL1xuICAgIC8vIEF0IGhpZ2ggem9vbSBsZXZlbHMgdGhlcmUgYXJlIGEgdG9uIG9mIHBpeGVscyBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW5cbiAgICAvLyBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGUuIFRoZSBnbHNsIHNwZWMgb25seSBndWFyYW50ZWVzIDE2IGJpdHMgb2ZcbiAgICAvLyBwcmVjaXNpb24gZm9yIGhpZ2hwIGZsb2F0cy4gV2UgbmVlZCBtb3JlIHRoYW4gdGhhdC5cbiAgICAvL1xuICAgIC8vIFRoZSBwaXhlbF9jb29yZCBpcyBwYXNzZWQgaW4gYXMgdHdvIDE2IGJpdCB2YWx1ZXM6XG4gICAgLy8gcGl4ZWxfY29vcmRfdXBwZXIgPSBmbG9vcihwaXhlbF9jb29yZCAvIDJeMTYpXG4gICAgLy8gcGl4ZWxfY29vcmRfbG93ZXIgPSBtb2QocGl4ZWxfY29vcmQsIDJeMTYpXG4gICAgLy9cbiAgICAvLyBUaGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQgaW4gYSBzZXJpZXMgb2Ygc3RlcHMgdGhhdCBzaG91bGQgcHJlc2VydmUgdGhpcyBwcmVjaXNpb246XG4gICAgdmVjMiBvZmZzZXRfYSA9IG1vZChtb2QobW9kKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHNjYWxlZF9zaXplX2EpICogMjU2LjAsIHNjYWxlZF9zaXplX2EpICogMjU2LjAgKyB1X3BpeGVsX2Nvb3JkX2xvd2VyLCBzY2FsZWRfc2l6ZV9hKTtcbiAgICB2ZWMyIG9mZnNldF9iID0gbW9kKG1vZChtb2QodV9waXhlbF9jb29yZF91cHBlciwgc2NhbGVkX3NpemVfYikgKiAyNTYuMCwgc2NhbGVkX3NpemVfYikgKiAyNTYuMCArIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHNjYWxlZF9zaXplX2IpO1xuXG4gICAgdl9wb3NfYSA9ICh1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzICogYV9wb3MgKyBvZmZzZXRfYSkgLyBzY2FsZWRfc2l6ZV9hO1xuICAgIHZfcG9zX2IgPSAodV90aWxlX3VuaXRzX3RvX3BpeGVscyAqIGFfcG9zICsgb2Zmc2V0X2IpIC8gc2NhbGVkX3NpemVfYjtcbn1cbiJ9LHJhc3Rlcjp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTA7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTE7XG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UxO1xudmFyeWluZyB2ZWMyIHZfcG9zMDtcbnZhcnlpbmcgdmVjMiB2X3BvczE7XG5cbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2xvdztcbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7XG5cbnVuaWZvcm0gZmxvYXQgdV9zYXR1cmF0aW9uX2ZhY3RvcjtcbnVuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7XG51bmlmb3JtIHZlYzMgdV9zcGluX3dlaWdodHM7XG5cbnZvaWQgbWFpbigpIHtcblxuICAgIC8vIHJlYWQgYW5kIGNyb3NzLWZhZGUgY29sb3JzIGZyb20gdGhlIG1haW4gYW5kIHBhcmVudCB0aWxlc1xuICAgIHZlYzQgY29sb3IwID0gdGV4dHVyZTJEKHVfaW1hZ2UwLCB2X3BvczApO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UxLCB2X3BvczEpO1xuICAgIHZlYzQgY29sb3IgPSBjb2xvcjAgKiB1X29wYWNpdHkwICsgY29sb3IxICogdV9vcGFjaXR5MTtcbiAgICB2ZWMzIHJnYiA9IGNvbG9yLnJnYjtcblxuICAgIC8vIHNwaW5cbiAgICByZ2IgPSB2ZWMzKFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy54eXopLFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy56eHkpLFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy55engpKTtcblxuICAgIC8vIHNhdHVyYXRpb25cbiAgICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XG4gICAgcmdiICs9IChhdmVyYWdlIC0gcmdiKSAqIHVfc2F0dXJhdGlvbl9mYWN0b3I7XG5cbiAgICAvLyBjb250cmFzdFxuICAgIHJnYiA9IChyZ2IgLSAwLjUpICogdV9jb250cmFzdF9mYWN0b3IgKyAwLjU7XG5cbiAgICAvLyBicmlnaHRuZXNzXG4gICAgdmVjMyB1X2hpZ2hfdmVjID0gdmVjMyh1X2JyaWdodG5lc3NfbG93LCB1X2JyaWdodG5lc3NfbG93LCB1X2JyaWdodG5lc3NfbG93KTtcbiAgICB2ZWMzIHVfbG93X3ZlYyA9IHZlYzModV9icmlnaHRuZXNzX2hpZ2gsIHVfYnJpZ2h0bmVzc19oaWdoLCB1X2JyaWdodG5lc3NfaGlnaCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KG1peCh1X2hpZ2hfdmVjLCB1X2xvd192ZWMsIHJnYiksIGNvbG9yLmEpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV90bF9wYXJlbnQ7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfcGFyZW50O1xudW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xudmFyeWluZyB2ZWMyIHZfcG9zMTtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICB2X3BvczAgPSAoKChhX3RleHR1cmVfcG9zIC8gMzI3NjcuMCkgLSAwLjUpIC8gdV9idWZmZXJfc2NhbGUgKSArIDAuNTtcbiAgICB2X3BvczEgPSAodl9wb3MwICogdV9zY2FsZV9wYXJlbnQpICsgdV90bF9wYXJlbnQ7XG59XG4ifSxpY29uOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfZmFkZXRleHR1cmU7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzIgdl90ZXg7XG52YXJ5aW5nIHZlYzIgdl9mYWRlX3RleDtcblxudm9pZCBtYWluKCkge1xuICAgIGxvd3AgZmxvYXQgYWxwaGEgPSB0ZXh0dXJlMkQodV9mYWRldGV4dHVyZSwgdl9mYWRlX3RleCkuYSAqIHVfb3BhY2l0eTtcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodV90ZXh0dXJlLCB2X3RleCkgKiBhbHBoYTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX29mZnNldDtcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5cblxuLy8gbWF0cml4IGlzIGZvciB0aGUgdmVydGV4IHBvc2l0aW9uLlxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV96b29tO1xudW5pZm9ybSBib29sIHVfcm90YXRlX3dpdGhfbWFwO1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcblxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcblxudmFyeWluZyB2ZWMyIHZfdGV4O1xudmFyeWluZyB2ZWMyIHZfZmFkZV90ZXg7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGFfdGV4ID0gYV90ZXh0dXJlX3Bvcy54eTtcbiAgICBtZWRpdW1wIGZsb2F0IGFfbGFiZWxtaW56b29tID0gYV9kYXRhWzBdO1xuICAgIG1lZGl1bXAgdmVjMiBhX3pvb20gPSBhX2RhdGEucHE7XG4gICAgbWVkaXVtcCBmbG9hdCBhX21pbnpvb20gPSBhX3pvb21bMF07XG4gICAgbWVkaXVtcCBmbG9hdCBhX21heHpvb20gPSBhX3pvb21bMV07XG5cbiAgICAvLyB1X3pvb20gaXMgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBhZGp1c3RlZCBmb3IgdGhlIGNoYW5nZSBpbiBmb250IHNpemVcbiAgICBtZWRpdW1wIGZsb2F0IHogPSAyLjAgLSBzdGVwKGFfbWluem9vbSwgdV96b29tKSAtICgxLjAgLSBzdGVwKGFfbWF4em9vbSwgdV96b29tKSk7XG5cbiAgICB2ZWMyIGV4dHJ1ZGUgPSB1X2V4dHJ1ZGVfc2NhbGUgKiAoYV9vZmZzZXQgLyA2NC4wKTtcbiAgICBpZiAodV9yb3RhdGVfd2l0aF9tYXApIHtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyBleHRydWRlLCAwLCAxKTtcbiAgICAgICAgZ2xfUG9zaXRpb24ueiArPSB6ICogZ2xfUG9zaXRpb24udztcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSkgKyB2ZWM0KGV4dHJ1ZGUsIDAsIDApO1xuICAgIH1cblxuICAgIHZfdGV4ID0gYV90ZXggLyB1X3RleHNpemU7XG4gICAgdl9mYWRlX3RleCA9IHZlYzIoYV9sYWJlbG1pbnpvb20gLyAyNTUuMCwgMC4wKTtcbn1cbiJ9LHNkZjp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHNhbXBsZXIyRCB1X2ZhZGV0ZXh0dXJlO1xudW5pZm9ybSBsb3dwIHZlYzQgdV9jb2xvcjtcbnVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9idWZmZXI7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9nYW1tYTtcblxudmFyeWluZyB2ZWMyIHZfdGV4O1xudmFyeWluZyB2ZWMyIHZfZmFkZV90ZXg7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBsb3dwIGZsb2F0IGRpc3QgPSB0ZXh0dXJlMkQodV90ZXh0dXJlLCB2X3RleCkuYTtcbiAgICBsb3dwIGZsb2F0IGZhZGVfYWxwaGEgPSB0ZXh0dXJlMkQodV9mYWRldGV4dHVyZSwgdl9mYWRlX3RleCkuYTtcbiAgICBsb3dwIGZsb2F0IGdhbW1hID0gdV9nYW1tYSAqIHZfZ2FtbWFfc2NhbGU7XG4gICAgbG93cCBmbG9hdCBhbHBoYSA9IHNtb290aHN0ZXAodV9idWZmZXIgLSBnYW1tYSwgdV9idWZmZXIgKyBnYW1tYSwgZGlzdCkgKiBmYWRlX2FscGhhO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvciAqIChhbHBoYSAqIHVfb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV9vZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG5cbi8vIG1hdHJpeCBpcyBmb3IgdGhlIHZlcnRleCBwb3NpdGlvbi5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfem9vbTtcbnVuaWZvcm0gYm9vbCB1X3JvdGF0ZV93aXRoX21hcDtcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcGl0Y2g7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9iZWFyaW5nO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfYXNwZWN0X3JhdGlvO1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcblxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcblxudmFyeWluZyB2ZWMyIHZfdGV4O1xudmFyeWluZyB2ZWMyIHZfZmFkZV90ZXg7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGFfdGV4ID0gYV90ZXh0dXJlX3Bvcy54eTtcbiAgICBtZWRpdW1wIGZsb2F0IGFfbGFiZWxtaW56b29tID0gYV9kYXRhWzBdO1xuICAgIG1lZGl1bXAgdmVjMiBhX3pvb20gPSBhX2RhdGEucHE7XG4gICAgbWVkaXVtcCBmbG9hdCBhX21pbnpvb20gPSBhX3pvb21bMF07XG4gICAgbWVkaXVtcCBmbG9hdCBhX21heHpvb20gPSBhX3pvb21bMV07XG5cbiAgICAvLyB1X3pvb20gaXMgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBhZGp1c3RlZCBmb3IgdGhlIGNoYW5nZSBpbiBmb250IHNpemVcbiAgICBtZWRpdW1wIGZsb2F0IHogPSAyLjAgLSBzdGVwKGFfbWluem9vbSwgdV96b29tKSAtICgxLjAgLSBzdGVwKGFfbWF4em9vbSwgdV96b29tKSk7XG5cbiAgICAvLyBwaXRjaC1hbGlnbm1lbnQ6IG1hcFxuICAgIC8vIHJvdGF0aW9uLWFsaWdubWVudDogbWFwIHwgdmlld3BvcnRcbiAgICBpZiAodV9waXRjaF93aXRoX21hcCkge1xuICAgICAgICBsb3dwIGZsb2F0IGFuZ2xlID0gdV9yb3RhdGVfd2l0aF9tYXAgPyAoYV9kYXRhWzFdIC8gMjU2LjAgKiAyLjAgKiBQSSkgOiB1X2JlYXJpbmc7XG4gICAgICAgIGxvd3AgZmxvYXQgYXNpbiA9IHNpbihhbmdsZSk7XG4gICAgICAgIGxvd3AgZmxvYXQgYWNvcyA9IGNvcyhhbmdsZSk7XG4gICAgICAgIG1hdDIgUm90YXRpb25NYXRyaXggPSBtYXQyKGFjb3MsIGFzaW4sIC0xLjAgKiBhc2luLCBhY29zKTtcbiAgICAgICAgdmVjMiBvZmZzZXQgPSBSb3RhdGlvbk1hdHJpeCAqIGFfb2Zmc2V0O1xuICAgICAgICB2ZWMyIGV4dHJ1ZGUgPSB1X2V4dHJ1ZGVfc2NhbGUgKiAob2Zmc2V0IC8gNjQuMCk7XG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICsgZXh0cnVkZSwgMCwgMSk7XG4gICAgICAgIGdsX1Bvc2l0aW9uLnogKz0geiAqIGdsX1Bvc2l0aW9uLnc7XG4gICAgLy8gcGl0Y2gtYWxpZ25tZW50OiB2aWV3cG9ydFxuICAgIC8vIHJvdGF0aW9uLWFsaWdubWVudDogbWFwXG4gICAgfSBlbHNlIGlmICh1X3JvdGF0ZV93aXRoX21hcCkge1xuICAgICAgICAvLyBmb3Jlc2hvcnRlbmluZyBmYWN0b3IgdG8gYXBwbHkgb24gcGl0Y2hlZCBtYXBzXG4gICAgICAgIC8vIGFzIGEgbGFiZWwgZ29lcyBmcm9tIGhvcml6b250YWwgPD0+IHZlcnRpY2FsIGluIGFuZ2xlXG4gICAgICAgIC8vIGl0IGdvZXMgZnJvbSAwJSBmb3Jlc2hvcnRlbmluZyB0byB1cCB0byBhcm91bmQgNzAlIGZvcmVzaG9ydGVuaW5nXG4gICAgICAgIGxvd3AgZmxvYXQgcGl0Y2hmYWN0b3IgPSAxLjAgLSBjb3ModV9waXRjaCAqIHNpbih1X3BpdGNoICogMC43NSkpO1xuXG4gICAgICAgIGxvd3AgZmxvYXQgbGluZWFuZ2xlID0gYV9kYXRhWzFdIC8gMjU2LjAgKiAyLjAgKiBQSTtcblxuICAgICAgICAvLyB1c2UgdGhlIGxpbmVhbmdsZSB0byBwb3NpdGlvbiBwb2ludHMgYSxiIGFsb25nIHRoZSBsaW5lXG4gICAgICAgIC8vIHByb2plY3QgdGhlIHBvaW50cyBhbmQgY2FsY3VsYXRlIHRoZSBsYWJlbCBhbmdsZSBpbiBwcm9qZWN0ZWQgc3BhY2VcbiAgICAgICAgLy8gdGhpcyBjYWxjdWxhdGlvbiBhbGxvd3MgbGFiZWxzIHRvIGJlIHJlbmRlcmVkIHVuc2tld2VkIG9uIHBpdGNoZWQgbWFwc1xuICAgICAgICB2ZWM0IGEgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgICAgICB2ZWM0IGIgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyB2ZWMyKGNvcyhsaW5lYW5nbGUpLHNpbihsaW5lYW5nbGUpKSwgMCwgMSk7XG4gICAgICAgIGxvd3AgZmxvYXQgYW5nbGUgPSBhdGFuKChiWzFdL2JbM10gLSBhWzFdL2FbM10pL3VfYXNwZWN0X3JhdGlvLCBiWzBdL2JbM10gLSBhWzBdL2FbM10pO1xuICAgICAgICBsb3dwIGZsb2F0IGFzaW4gPSBzaW4oYW5nbGUpO1xuICAgICAgICBsb3dwIGZsb2F0IGFjb3MgPSBjb3MoYW5nbGUpO1xuICAgICAgICBtYXQyIFJvdGF0aW9uTWF0cml4ID0gbWF0MihhY29zLCAtMS4wICogYXNpbiwgYXNpbiwgYWNvcyk7XG5cbiAgICAgICAgdmVjMiBvZmZzZXQgPSBSb3RhdGlvbk1hdHJpeCAqICh2ZWMyKCgxLjAtcGl0Y2hmYWN0b3IpKyhwaXRjaGZhY3Rvcipjb3MoYW5nbGUqMi4wKSksIDEuMCkgKiBhX29mZnNldCk7XG4gICAgICAgIHZlYzIgZXh0cnVkZSA9IHVfZXh0cnVkZV9zY2FsZSAqIChvZmZzZXQgLyA2NC4wKTtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpICsgdmVjNChleHRydWRlLCAwLCAwKTtcbiAgICAgICAgZ2xfUG9zaXRpb24ueiArPSB6ICogZ2xfUG9zaXRpb24udztcbiAgICAvLyBwaXRjaC1hbGlnbm1lbnQ6IHZpZXdwb3J0XG4gICAgLy8gcm90YXRpb24tYWxpZ25tZW50OiB2aWV3cG9ydFxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZlYzIgZXh0cnVkZSA9IHVfZXh0cnVkZV9zY2FsZSAqIChhX29mZnNldCAvIDY0LjApO1xuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSkgKyB2ZWM0KGV4dHJ1ZGUsIDAsIDApO1xuICAgIH1cblxuICAgIHZfZ2FtbWFfc2NhbGUgPSAoZ2xfUG9zaXRpb24udyAtIDAuNSk7XG5cbiAgICB2X3RleCA9IGFfdGV4IC8gdV90ZXhzaXplO1xuICAgIHZfZmFkZV90ZXggPSB2ZWMyKGFfbGFiZWxtaW56b29tIC8gMjU1LjAsIDAuMCk7XG59XG4ifSxjb2xsaXNpb25ib3g6e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBmbG9hdCB1X3pvb207XG51bmlmb3JtIGZsb2F0IHVfbWF4em9vbTtcblxudmFyeWluZyBmbG9hdCB2X21heF96b29tO1xudmFyeWluZyBmbG9hdCB2X3BsYWNlbWVudF96b29tO1xuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCBhbHBoYSA9IDAuNTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAxLjAsIDAuMCwgMS4wKSAqIGFscGhhO1xuXG4gICAgaWYgKHZfcGxhY2VtZW50X3pvb20gPiB1X3pvb20pIHtcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApICogYWxwaGE7XG4gICAgfVxuXG4gICAgaWYgKHVfem9vbSA+PSB2X21heF96b29tKSB7XG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKSAqIGFscGhhICogMC4yNTtcbiAgICB9XG5cbiAgICBpZiAodl9wbGFjZW1lbnRfem9vbSA+PSB1X21heHpvb20pIHtcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMS4wLCAxLjApICogYWxwaGEgKiAwLjI7XG4gICAgfVxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX2V4dHJ1ZGU7XG5hdHRyaWJ1dGUgdmVjMiBhX2RhdGE7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZTtcblxudmFyeWluZyBmbG9hdCB2X21heF96b29tO1xudmFyeWluZyBmbG9hdCB2X3BsYWNlbWVudF96b29tO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyBhX2V4dHJ1ZGUgLyB1X3NjYWxlLCAwLjAsIDEuMCk7XG5cbiAgICB2X21heF96b29tID0gYV9kYXRhLng7XG4gICAgdl9wbGFjZW1lbnRfem9vbSA9IGFfZGF0YS55O1xufVxuIn19LGUuZXhwb3J0cy51dGlsPSJmbG9hdCBldmFsdWF0ZV96b29tX2Z1bmN0aW9uXzEoY29uc3QgdmVjNCB2YWx1ZXMsIGNvbnN0IGZsb2F0IHQpIHtcbiAgICBpZiAodCA8IDEuMCkge1xuICAgICAgICByZXR1cm4gbWl4KHZhbHVlc1swXSwgdmFsdWVzWzFdLCB0KTtcbiAgICB9IGVsc2UgaWYgKHQgPCAyLjApIHtcbiAgICAgICAgcmV0dXJuIG1peCh2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdCAtIDEuMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1peCh2YWx1ZXNbMl0sIHZhbHVlc1szXSwgdCAtIDIuMCk7XG4gICAgfVxufVxudmVjNCBldmFsdWF0ZV96b29tX2Z1bmN0aW9uXzQoY29uc3QgdmVjNCB2YWx1ZTAsIGNvbnN0IHZlYzQgdmFsdWUxLCBjb25zdCB2ZWM0IHZhbHVlMiwgY29uc3QgdmVjNCB2YWx1ZTMsIGNvbnN0IGZsb2F0IHQpIHtcbiAgICBpZiAodCA8IDEuMCkge1xuICAgICAgICByZXR1cm4gbWl4KHZhbHVlMCwgdmFsdWUxLCB0KTtcbiAgICB9IGVsc2UgaWYgKHQgPCAyLjApIHtcbiAgICAgICAgcmV0dXJuIG1peCh2YWx1ZTEsIHZhbHVlMiwgdCAtIDEuMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1peCh2YWx1ZTIsIHZhbHVlMywgdCAtIDIuMCk7XG4gICAgfVxufVxuIn0se3BhdGg6NDc0fV0sMzAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLm1lc3NhZ2U9KHQ/dCsiOiAiOiIiKStpLmFwcGx5KGksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKSxudWxsIT09ZSYmdm9pZCAwIT09ZSYmZS5fX2xpbmVfXyYmKHRoaXMubGluZT1lLl9fbGluZV9fKX12YXIgaT10KCJ1dGlsIikuZm9ybWF0O2UuZXhwb3J0cz1ufSx7dXRpbDo1NDd9XSwzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPWFyZ3VtZW50c1tlXTtmb3IodmFyIG4gaW4gcil0W25dPXJbbl19cmV0dXJuIHR9fSx7fV0sMzA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcj8ibnVtYmVyIjp0IGluc3RhbmNlb2YgU3RyaW5nPyJzdHJpbmciOnQgaW5zdGFuY2VvZiBCb29sZWFuPyJib29sZWFuIjpBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6bnVsbD09PXQ/Im51bGwiOnR5cGVvZiB0fX0se31dLDMwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBCb29sZWFuP3QudmFsdWVPZigpOnR9fSx7fV0sMzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4uL3V0aWwvZ2V0X3R5cGUiKSxhPXQoIi4uL3V0aWwvZXh0ZW5kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciByPXQoIi4vdmFsaWRhdGVfZnVuY3Rpb24iKSxvPXQoIi4vdmFsaWRhdGVfb2JqZWN0Iikscz17IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OnQoIi4vdmFsaWRhdGVfYXJyYXkiKSxib29sZWFuOnQoIi4vdmFsaWRhdGVfYm9vbGVhbiIpLG51bWJlcjp0KCIuL3ZhbGlkYXRlX251bWJlciIpLGNvbG9yOnQoIi4vdmFsaWRhdGVfY29sb3IiKSxjb25zdGFudHM6dCgiLi92YWxpZGF0ZV9jb25zdGFudHMiKSxlbnVtOnQoIi4vdmFsaWRhdGVfZW51bSIpLGZpbHRlcjp0KCIuL3ZhbGlkYXRlX2ZpbHRlciIpLGZ1bmN0aW9uOnQoIi4vdmFsaWRhdGVfZnVuY3Rpb24iKSxsYXllcjp0KCIuL3ZhbGlkYXRlX2xheWVyIiksb2JqZWN0OnQoIi4vdmFsaWRhdGVfb2JqZWN0Iiksc291cmNlOnQoIi4vdmFsaWRhdGVfc291cmNlIiksc3RyaW5nOnQoIi4vdmFsaWRhdGVfc3RyaW5nIil9LGw9ZS52YWx1ZSx1PWUudmFsdWVTcGVjLGM9ZS5rZXksaD1lLnN0eWxlU3BlYyxmPWUuc3R5bGU7aWYoInN0cmluZyI9PT1pKGwpJiYiQCI9PT1sWzBdKXtpZihoLiR2ZXJzaW9uPjcpcmV0dXJuW25ldyBuKGMsbCwiY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4IildO2lmKCEobCBpbiBmLmNvbnN0YW50cykpcmV0dXJuW25ldyBuKGMsbCwnY29uc3RhbnQgIiVzIiBub3QgZm91bmQnLGwpXTtlPWEoe30sZSx7dmFsdWU6Zi5jb25zdGFudHNbbF19KX1yZXR1cm4gdS5mdW5jdGlvbiYmIm9iamVjdCI9PT1pKGwpP3IoZSk6dS50eXBlJiZzW3UudHlwZV0/c1t1LnR5cGVdKGUpOm8oYSh7fSxlLHt2YWx1ZVNwZWM6dS50eXBlP2hbdS50eXBlXTp1fSkpfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZXh0ZW5kIjozMDMsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCwiLi92YWxpZGF0ZV9hcnJheSI6MzA3LCIuL3ZhbGlkYXRlX2Jvb2xlYW4iOjMwOCwiLi92YWxpZGF0ZV9jb2xvciI6MzA5LCIuL3ZhbGlkYXRlX2NvbnN0YW50cyI6MzEwLCIuL3ZhbGlkYXRlX2VudW0iOjMxMSwiLi92YWxpZGF0ZV9maWx0ZXIiOjMxMiwiLi92YWxpZGF0ZV9mdW5jdGlvbiI6MzEzLCIuL3ZhbGlkYXRlX2xheWVyIjozMTUsIi4vdmFsaWRhdGVfbnVtYmVyIjozMTcsIi4vdmFsaWRhdGVfb2JqZWN0IjozMTgsIi4vdmFsaWRhdGVfc291cmNlIjozMjAsIi4vdmFsaWRhdGVfc3RyaW5nIjozMjF9XSwzMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC9nZXRfdHlwZSIpLGk9dCgiLi92YWxpZGF0ZSIpLGE9dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbz10LnN0eWxlLHM9dC5zdHlsZVNwZWMsbD10LmtleSx1PXQuYXJyYXlFbGVtZW50VmFsaWRhdG9yfHxpO2lmKCJhcnJheSIhPT1uKGUpKXJldHVybltuZXcgYShsLGUsImFycmF5IGV4cGVjdGVkLCAlcyBmb3VuZCIsbihlKSldO2lmKHIubGVuZ3RoJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybltuZXcgYShsLGUsImFycmF5IGxlbmd0aCAlZCBleHBlY3RlZCwgbGVuZ3RoICVkIGZvdW5kIixyLmxlbmd0aCxlLmxlbmd0aCldO2lmKHJbIm1pbi1sZW5ndGgiXSYmZS5sZW5ndGg8clsibWluLWxlbmd0aCJdKXJldHVybltuZXcgYShsLGUsImFycmF5IGxlbmd0aCBhdCBsZWFzdCAlZCBleHBlY3RlZCwgbGVuZ3RoICVkIGZvdW5kIixyWyJtaW4tbGVuZ3RoIl0sZS5sZW5ndGgpXTt2YXIgYz17dHlwZTpyLnZhbHVlfTtzLiR2ZXJzaW9uPDcmJihjLmZ1bmN0aW9uPXIuZnVuY3Rpb24pLCJvYmplY3QiPT09bihyLnZhbHVlKSYmKGM9ci52YWx1ZSk7Zm9yKHZhciBoPVtdLGY9MDtmPGUubGVuZ3RoO2YrKyloPWguY29uY2F0KHUoe2FycmF5OmUsYXJyYXlJbmRleDpmLHZhbHVlOmVbZl0sdmFsdWVTcGVjOmMsc3R5bGU6byxzdHlsZVNwZWM6cyxrZXk6bCsiWyIrZisiXSJ9KSk7cmV0dXJuIGh9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC9nZXRfdHlwZSI6MzA0LCIuL3ZhbGlkYXRlIjozMDZ9XSwzMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC9nZXRfdHlwZSIpLGk9dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksYT1uKGUpO3JldHVybiJib29sZWFuIiE9PWE/W25ldyBpKHIsZSwiYm9vbGVhbiBleHBlY3RlZCwgJXMgZm91bmQiLGEpXTpbXX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzAyLCIuLi91dGlsL2dldF90eXBlIjozMDR9XSwzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi4vdXRpbC9nZXRfdHlwZSIpLGE9dCgiY3NzY29sb3JwYXJzZXIiKS5wYXJzZUNTU0NvbG9yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbz1pKHIpO3JldHVybiJzdHJpbmciIT09bz9bbmV3IG4oZSxyLCJjb2xvciBleHBlY3RlZCwgJXMgZm91bmQiLG8pXTpudWxsPT09YShyKT9bbmV3IG4oZSxyLCdjb2xvciBleHBlY3RlZCwgIiVzIiBmb3VuZCcscildOltdfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCxjc3Njb2xvcnBhcnNlcjoxMDZ9XSwzMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi4vdXRpbC9nZXRfdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWU7aWYodC5zdHlsZVNwZWMuJHZlcnNpb24+NylyZXR1cm4gcj9bbmV3IG4oZSxyLCJjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjgiKV06W107dmFyIGE9aShyKTtpZigib2JqZWN0IiE9PWEpcmV0dXJuW25ldyBuKGUsciwib2JqZWN0IGV4cGVjdGVkLCAlcyBmb3VuZCIsYSldO3ZhciBvPVtdO2Zvcih2YXIgcyBpbiByKSJAIiE9PXNbMF0mJm8ucHVzaChuZXcgbihlKyIuIitzLHJbc10sJ2NvbnN0YW50cyBtdXN0IHN0YXJ0IHdpdGggIkAiJykpO3JldHVybiBvfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNH1dLDMxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL3VuYnVuZGxlX2pzb25saW50Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxhPXQudmFsdWVTcGVjLG89W107cmV0dXJuLTE9PT1hLnZhbHVlcy5pbmRleE9mKGkocikpJiZvLnB1c2gobmV3IG4oZSxyLCJleHBlY3RlZCBvbmUgb2YgWyVzXSwgJXMgZm91bmQiLGEudmFsdWVzLmpvaW4oIiwgIikscikpLG99fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzA1fV0sMzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4vdmFsaWRhdGVfZW51bSIpLGE9dCgiLi4vdXRpbC9nZXRfdHlwZSIpLG89dCgiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe3ZhciByLHM9ZS52YWx1ZSxsPWUua2V5LHU9ZS5zdHlsZVNwZWMsYz1bXTtpZigiYXJyYXkiIT09YShzKSlyZXR1cm5bbmV3IG4obCxzLCJhcnJheSBleHBlY3RlZCwgJXMgZm91bmQiLGEocykpXTtpZihzLmxlbmd0aDwxKXJldHVybltuZXcgbihsLHMsImZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50IildO3N3aXRjaChjPWMuY29uY2F0KGkoe2tleTpsKyJbMF0iLHZhbHVlOnNbMF0sdmFsdWVTcGVjOnUuZmlsdGVyX29wZXJhdG9yLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpLG8oc1swXSkpe2Nhc2UiPCI6Y2FzZSI8PSI6Y2FzZSI+IjpjYXNlIj49IjpzLmxlbmd0aD49MiYmIiR0eXBlIj09c1sxXSYmYy5wdXNoKG5ldyBuKGwscywnIiR0eXBlIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgIiVzIicsc1swXSkpO2Nhc2UiPT0iOmNhc2UiIT0iOjMhPXMubGVuZ3RoJiZjLnB1c2gobmV3IG4obCxzLCdmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yICIlcyIgbXVzdCBoYXZlIDMgZWxlbWVudHMnLHNbMF0pKTtjYXNlImluIjpjYXNlIiFpbiI6cy5sZW5ndGg+PTImJihyPWEoc1sxXSksInN0cmluZyIhPT1yP2MucHVzaChuZXcgbihsKyJbMV0iLHNbMV0sInN0cmluZyBleHBlY3RlZCwgJXMgZm91bmQiLHIpKToiQCI9PT1zWzFdWzBdJiZjLnB1c2gobmV3IG4obCsiWzFdIixzWzFdLCJmaWx0ZXIga2V5IGNhbm5vdCBiZSBhIGNvbnN0YW50IikpKTtmb3IodmFyIGg9MjtoPHMubGVuZ3RoO2grKylyPWEoc1toXSksIiR0eXBlIj09c1sxXT9jPWMuY29uY2F0KGkoe2tleTpsKyJbIitoKyJdIix2YWx1ZTpzW2hdLHZhbHVlU3BlYzp1Lmdlb21ldHJ5X3R5cGUsc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk6InN0cmluZyI9PT1yJiYiQCI9PT1zW2hdWzBdP2MucHVzaChuZXcgbihsKyJbIitoKyJdIixzW2hdLCJmaWx0ZXIgdmFsdWUgY2Fubm90IGJlIGEgY29uc3RhbnQiKSk6InN0cmluZyIhPT1yJiYibnVtYmVyIiE9PXImJiJib29sZWFuIiE9PXImJmMucHVzaChuZXcgbihsKyJbIitoKyJdIixzW2hdLCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgJXMgZm91bmQiLHIpKTticmVhaztjYXNlImFueSI6Y2FzZSJhbGwiOmNhc2Uibm9uZSI6Zm9yKGg9MTtoPHMubGVuZ3RoO2grKyljPWMuY29uY2F0KHQoe2tleTpsKyJbIitoKyJdIix2YWx1ZTpzW2hdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2UiaGFzIjpjYXNlIiFoYXMiOnI9YShzWzFdKSwyIT09cy5sZW5ndGg/Yy5wdXNoKG5ldyBuKGwscywnZmlsdGVyIGFycmF5IGZvciAiJXMiIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJyxzWzBdKSk6InN0cmluZyIhPT1yP2MucHVzaChuZXcgbihsKyJbMV0iLHNbMV0sInN0cmluZyBleHBlY3RlZCwgJXMgZm91bmQiLHIpKToiQCI9PT1zWzFdWzBdJiZjLnB1c2gobmV3IG4obCsiWzFdIixzWzFdLCJmaWx0ZXIga2V5IGNhbm5vdCBiZSBhIGNvbnN0YW50IikpfXJldHVybiBjfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCwiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzA1LCIuL3ZhbGlkYXRlX2VudW0iOjMxMX1dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL2dldF90eXBlIiksYT10KCIuL3ZhbGlkYXRlIiksbz10KCIuL3ZhbGlkYXRlX29iamVjdCIpLHM9dCgiLi92YWxpZGF0ZV9hcnJheSIpLGw9dCgiLi92YWxpZGF0ZV9udW1iZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT1bXSxhPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQocyh7a2V5OnQua2V5LHZhbHVlOmEsdmFsdWVTcGVjOnQudmFsdWVTcGVjLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLGFycmF5RWxlbWVudFZhbGlkYXRvcjpyfSkpLCJhcnJheSI9PT1pKGEpJiYwPT09YS5sZW5ndGgmJmUucHVzaChuZXcgbih0LmtleSxhLCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3AiKSksZX1mdW5jdGlvbiByKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxzPXQua2V5O2lmKCJhcnJheSIhPT1pKHIpKXJldHVybltuZXcgbihzLHIsImFycmF5IGV4cGVjdGVkLCAlcyBmb3VuZCIsaShyKSldO2lmKDIhPT1yLmxlbmd0aClyZXR1cm5bbmV3IG4ocyxyLCJhcnJheSBsZW5ndGggJWQgZXhwZWN0ZWQsIGxlbmd0aCAlZCBmb3VuZCIsMixyLmxlbmd0aCldO3ZhciBmPWkoclswXSk7aWYoY3x8KGM9ZiksZiE9PWMpcmV0dXJuW25ldyBuKHMsciwiJXMgc3RvcCBrZXkgdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3Aga2V5IHR5cGUgJXMiLGYsYyldO2lmKCJvYmplY3QiPT09Zil7aWYodm9pZCAwPT09clswXS56b29tKXJldHVybltuZXcgbihzLHIsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgem9vbSIpXTtpZih2b2lkIDA9PT1yWzBdLnZhbHVlKXJldHVybltuZXcgbihzLHIsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWUiKV07ZT1lLmNvbmNhdChvKHtrZXk6cysiWzBdIix2YWx1ZTpyWzBdLHZhbHVlU3BlYzp7em9vbTp7fX0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3pvb206bCx2YWx1ZTp1fX0pKX1lbHNlIGU9ZS5jb25jYXQoKGQ/bDp1KSh7a2V5OnMrIlswXSIsdmFsdWU6clswXSx2YWx1ZVNwZWM6e30sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSk7cmV0dXJuIGU9ZS5jb25jYXQoYSh7a2V5OnMrIlsxXSIsdmFsdWU6clsxXSx2YWx1ZVNwZWM6aCxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKSwibnVtYmVyIj09PWkoclswXSkmJigicGllY2V3aXNlLWNvbnN0YW50Ij09PWguZnVuY3Rpb24mJnJbMF0lMSE9MCYmZS5wdXNoKG5ldyBuKHMrIlswXSIsclswXSwiem9vbSBsZXZlbCBmb3IgcGllY2V3aXNlLWNvbnN0YW50IGZ1bmN0aW9ucyBtdXN0IGJlIGFuIGludGVnZXIiKSksMCE9PXQuYXJyYXlJbmRleCYmclswXTx0LmFycmF5W3QuYXJyYXlJbmRleC0xXVswXSYmZS5wdXNoKG5ldyBuKHMrIlswXSIsclswXSwiYXJyYXkgc3RvcHMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIikpKSxlfWZ1bmN0aW9uIHUodCl7CnZhciBlPVtdLHI9aSh0LnZhbHVlKTtyZXR1cm4ibnVtYmVyIiE9PXImJiJzdHJpbmciIT09ciYmImFycmF5IiE9PXImJmUucHVzaChuZXcgbih0LmtleSx0LnZhbHVlLCJwcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcgb3IgYXJyYXkiKSksZX12YXIgYyxoPXQudmFsdWVTcGVjLGY9dm9pZCAwIT09dC52YWx1ZS5wcm9wZXJ0eXx8Im9iamVjdCI9PT1jLGQ9dm9pZCAwPT09dC52YWx1ZS5wcm9wZXJ0eXx8Im9iamVjdCI9PT1jLHA9byh7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOnQuc3R5bGVTcGVjLmZ1bmN0aW9uLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntzdG9wczplfX0pO3JldHVybiB0LnN0eWxlU3BlYy4kdmVyc2lvbj49OCYmKGYmJiF0LnZhbHVlU3BlY1sicHJvcGVydHktZnVuY3Rpb24iXT9wLnB1c2gobmV3IG4odC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6ZCYmIXQudmFsdWVTcGVjWyJ6b29tLWZ1bmN0aW9uIl0mJnAucHVzaChuZXcgbih0LmtleSx0LnZhbHVlLCJ6b29tIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpKSxwfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCwiLi92YWxpZGF0ZSI6MzA2LCIuL3ZhbGlkYXRlX2FycmF5IjozMDcsIi4vdmFsaWRhdGVfbnVtYmVyIjozMTcsIi4vdmFsaWRhdGVfb2JqZWN0IjozMTh9XSwzMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi92YWxpZGF0ZV9zdHJpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LGE9aSh0KTtyZXR1cm4gYS5sZW5ndGg/YTooLTE9PT1lLmluZGV4T2YoIntmb250c3RhY2t9IikmJmEucHVzaChuZXcgbihyLGUsJyJnbHlwaHMiIHVybCBtdXN0IGluY2x1ZGUgYSAie2ZvbnRzdGFja30iIHRva2VuJykpLC0xPT09ZS5pbmRleE9mKCJ7cmFuZ2V9IikmJmEucHVzaChuZXcgbihyLGUsJyJnbHlwaHMiIHVybCBtdXN0IGluY2x1ZGUgYSAie3JhbmdlfSIgdG9rZW4nKSksYSl9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi92YWxpZGF0ZV9zdHJpbmciOjMyMX1dLDMxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL3VuYnVuZGxlX2pzb25saW50IiksYT10KCIuL3ZhbGlkYXRlX29iamVjdCIpLG89dCgiLi92YWxpZGF0ZV9maWx0ZXIiKSxzPXQoIi4vdmFsaWRhdGVfcGFpbnRfcHJvcGVydHkiKSxsPXQoIi4vdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5IiksdT10KCIuLi91dGlsL2V4dGVuZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXSxyPXQudmFsdWUsYz10LmtleSxoPXQuc3R5bGUsZj10LnN0eWxlU3BlYztyLnR5cGV8fHIucmVmfHxlLnB1c2gobmV3IG4oYyxyLCdlaXRoZXIgInR5cGUiIG9yICJyZWYiIGlzIHJlcXVpcmVkJykpO3ZhciBkPWkoci50eXBlKSxwPWkoci5yZWYpO2lmKHIuaWQpZm9yKHZhciBtPTA7bTx0LmFycmF5SW5kZXg7bSsrKXt2YXIgdj1oLmxheWVyc1ttXTtpKHYuaWQpPT09aShyLmlkKSYmZS5wdXNoKG5ldyBuKGMsci5pZCwnZHVwbGljYXRlIGxheWVyIGlkICIlcyIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICVkJyxyLmlkLHYuaWQuX19saW5lX18pKX1pZigicmVmImluIHIpe1sidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsImZpbHRlciIsImxheW91dCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiZlLnB1c2gobmV3IG4oYyxyW3RdLCciJXMiIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnLHQpKX0pO3ZhciBnO2gubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5pZD09cCYmKGc9dCl9KSxnP2cucmVmP2UucHVzaChuZXcgbihjLHIucmVmLCJyZWYgY2Fubm90IHJlZmVyZW5jZSBhbm90aGVyIHJlZiBsYXllciIpKTpkPWkoZy50eXBlKTplLnB1c2gobmV3IG4oYyxyLnJlZiwncmVmIGxheWVyICIlcyIgbm90IGZvdW5kJyxwKSl9ZWxzZSBpZigiYmFja2dyb3VuZCIhPT1kKWlmKHIuc291cmNlKXt2YXIgeT1oLnNvdXJjZXMmJmguc291cmNlc1tyLnNvdXJjZV07eT8idmVjdG9yIj09eS50eXBlJiYicmFzdGVyIj09ZD9lLnB1c2gobmV3IG4oYyxyLnNvdXJjZSwnbGF5ZXIgIiVzIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnLHIuaWQpKToicmFzdGVyIj09eS50eXBlJiYicmFzdGVyIiE9ZD9lLnB1c2gobmV3IG4oYyxyLnNvdXJjZSwnbGF5ZXIgIiVzIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2UnLHIuaWQpKToidmVjdG9yIiE9eS50eXBlfHxyWyJzb3VyY2UtbGF5ZXIiXXx8ZS5wdXNoKG5ldyBuKGMsciwnbGF5ZXIgIiVzIiBtdXN0IHNwZWNpZnkgYSAic291cmNlLWxheWVyIicsci5pZCkpOmUucHVzaChuZXcgbihjLHIuc291cmNlLCdzb3VyY2UgIiVzIiBub3QgZm91bmQnLHIuc291cmNlKSl9ZWxzZSBlLnB1c2gobmV3IG4oYyxyLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzb3VyY2UiJykpO3JldHVybiBlPWUuY29uY2F0KGEoe2tleTpjLHZhbHVlOnIsdmFsdWVTcGVjOmYubGF5ZXIsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e2ZpbHRlcjpvLGxheW91dDpmdW5jdGlvbih0KXtyZXR1cm4gYSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiBsKHUoe2xheWVyVHlwZTpkfSx0KSl9fX0pfSxwYWludDpmdW5jdGlvbih0KXtyZXR1cm4gYSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiBzKHUoe2xheWVyVHlwZTpkfSx0KSl9fX0pfX19KSl9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC9leHRlbmQiOjMwMywiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzA1LCIuL3ZhbGlkYXRlX2ZpbHRlciI6MzEyLCIuL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eSI6MzE2LCIuL3ZhbGlkYXRlX29iamVjdCI6MzE4LCIuL3ZhbGlkYXRlX3BhaW50X3Byb3BlcnR5IjozMTl9XSwzMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZGF0ZSIpLGk9dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQuc3R5bGUsYT10LnN0eWxlU3BlYyxvPXQudmFsdWUscz10Lm9iamVjdEtleSxsPWFbImxheW91dF8iK3QubGF5ZXJUeXBlXTtpZih0LnZhbHVlU3BlY3x8bFtzXSl7dmFyIHU9W107cmV0dXJuInN5bWJvbCI9PT10LmxheWVyVHlwZSYmKCJpY29uLWltYWdlIj09PXMmJnImJiFyLnNwcml0ZT91LnB1c2gobmV3IGkoZSxvLCd1c2Ugb2YgImljb24taW1hZ2UiIHJlcXVpcmVzIGEgc3R5bGUgInNwcml0ZSIgcHJvcGVydHknKSk6InRleHQtZmllbGQiPT09cyYmciYmIXIuZ2x5cGhzJiZ1LnB1c2gobmV3IGkoZSxvLCd1c2Ugb2YgInRleHQtZmllbGQiIHJlcXVpcmVzIGEgc3R5bGUgImdseXBocyIgcHJvcGVydHknKSkpLHUuY29uY2F0KG4oe2tleTp0LmtleSx2YWx1ZTpvLHZhbHVlU3BlYzp0LnZhbHVlU3BlY3x8bFtzXSxzdHlsZTpyLHN0eWxlU3BlYzphfSkpfXJldHVybltuZXcgaShlLG8sJ3Vua25vd24gcHJvcGVydHkgIiVzIicscyldfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4vdmFsaWRhdGUiOjMwNn1dLDMxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL2dldF90eXBlIiksaT10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxhPXQudmFsdWVTcGVjLG89bihyKTtyZXR1cm4ibnVtYmVyIiE9PW8/W25ldyBpKGUsciwibnVtYmVyIGV4cGVjdGVkLCAlcyBmb3VuZCIsbyldOiJtaW5pbXVtImluIGEmJnI8YS5taW5pbXVtP1tuZXcgaShlLHIsIiVzIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAlcyIscixhLm1pbmltdW0pXToibWF4aW11bSJpbiBhJiZyPmEubWF4aW11bT9bbmV3IGkoZSxyLCIlcyBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgJXMiLHIsYS5tYXhpbXVtKV06W119fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC9nZXRfdHlwZSI6MzA0fV0sMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4uL3V0aWwvZ2V0X3R5cGUiKSxhPXQoIi4vdmFsaWRhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG89dC52YWx1ZVNwZWMscz10Lm9iamVjdEVsZW1lbnRWYWxpZGF0b3JzfHx7fSxsPXQuc3R5bGUsdT10LnN0eWxlU3BlYyxjPVtdLGg9aShyKTtpZigib2JqZWN0IiE9PWgpcmV0dXJuW25ldyBuKGUsciwib2JqZWN0IGV4cGVjdGVkLCAlcyBmb3VuZCIsaCldO2Zvcih2YXIgZiBpbiByKXt2YXIgZD1mLnNwbGl0KCIuIilbMF0scD1vJiYob1tkXXx8b1siKiJdKSxtPXNbZF18fHNbIioiXTtwfHxtP2M9Yy5jb25jYXQoKG18fGEpKHtrZXk6KGU/ZSsiLiI6ZSkrZix2YWx1ZTpyW2ZdLHZhbHVlU3BlYzpwLHN0eWxlOmwsc3R5bGVTcGVjOnUsb2JqZWN0OnIsb2JqZWN0S2V5OmZ9KSk6IiIhPT1lJiYxIT09ZS5zcGxpdCgiLiIpLmxlbmd0aCYmYy5wdXNoKG5ldyBuKGUscltmXSwndW5rbm93biBwcm9wZXJ0eSAiJXMiJyxmKSl9Zm9yKGQgaW4gbylvW2RdLnJlcXVpcmVkJiZ2b2lkIDA9PT1vW2RdLmRlZmF1bHQmJnZvaWQgMD09PXJbZF0mJmMucHVzaChuZXcgbihlLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgIiVzIicsZCkpO3JldHVybiBjfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCwiLi92YWxpZGF0ZSI6MzA2fV0sMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdmFsaWRhdGUiKSxpPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnN0eWxlLGE9dC5zdHlsZVNwZWMsbz10LnZhbHVlLHM9dC5vYmplY3RLZXksbD1hWyJwYWludF8iK3QubGF5ZXJUeXBlXSx1PXMubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7cmV0dXJuIHUmJmxbdVsxXV0mJmxbdVsxXV0udHJhbnNpdGlvbj9uKHtrZXk6ZSx2YWx1ZTpvLHZhbHVlU3BlYzphLnRyYW5zaXRpb24sc3R5bGU6cixzdHlsZVNwZWM6YX0pOnQudmFsdWVTcGVjfHxsW3NdP24oe2tleTp0LmtleSx2YWx1ZTpvLHZhbHVlU3BlYzp0LnZhbHVlU3BlY3x8bFtzXSxzdHlsZTpyLHN0eWxlU3BlYzphfSk6W25ldyBpKGUsbywndW5rbm93biBwcm9wZXJ0eSAiJXMiJyxzKV19fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi92YWxpZGF0ZSI6MzA2fV0sMzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQiKSxhPXQoIi4vdmFsaWRhdGVfb2JqZWN0Iiksbz10KCIuL3ZhbGlkYXRlX2VudW0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LHM9dC5zdHlsZVNwZWMsbD10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBuKHIsZSwnInR5cGUiIGlzIHJlcXVpcmVkJyldO3N3aXRjaChpKGUudHlwZSkpe2Nhc2UidmVjdG9yIjpjYXNlInJhc3RlciI6dmFyIHU9W107aWYodT11LmNvbmNhdChhKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpzLnNvdXJjZV90aWxlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnN9KSksInVybCJpbiBlKWZvcih2YXIgYyBpbiBlKVsidHlwZSIsInVybCIsInRpbGVTaXplIl0uaW5kZXhPZihjKTwwJiZ1LnB1c2gobmV3IG4ocisiLiIrYyxlW2NdLCdhIHNvdXJjZSB3aXRoIGEgInVybCIgcHJvcGVydHkgbWF5IG5vdCBpbmNsdWRlIGEgIiVzIiBwcm9wZXJ0eScsYykpO3JldHVybiB1O2Nhc2UiZ2VvanNvbiI6cmV0dXJuIGEoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOnMuc291cmNlX2dlb2pzb24sc3R5bGU6bCxzdHlsZVNwZWM6c30pO2Nhc2UidmlkZW8iOnJldHVybiBhKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpzLnNvdXJjZV92aWRlbyxzdHlsZTpsLHN0eWxlU3BlYzpzfSk7Y2FzZSJpbWFnZSI6cmV0dXJuIGEoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOnMuc291cmNlX2ltYWdlLHN0eWxlOmwsc3R5bGVTcGVjOnN9KTtkZWZhdWx0OnJldHVybiBvKHtrZXk6cisiLnR5cGUiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbInZlY3RvciIsInJhc3RlciIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIl19LHN0eWxlOmwsc3R5bGVTcGVjOnN9KX19fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzA1LCIuL3ZhbGlkYXRlX2VudW0iOjMxMSwiLi92YWxpZGF0ZV9vYmplY3QiOjMxOH1dLDMyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL2dldF90eXBlIiksaT10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxhPW4oZSk7cmV0dXJuInN0cmluZyIhPT1hP1tuZXcgaShyLGUsInN0cmluZyBleHBlY3RlZCwgJXMgZm91bmQiLGEpXTpbXX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzAyLCIuLi91dGlsL2dldF90eXBlIjozMDR9XSwzMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2U9ZXx8bDt2YXIgcj1bXTtyZXR1cm4gcj1yLmNvbmNhdChzKHtrZXk6IiIsdmFsdWU6dCx2YWx1ZVNwZWM6ZS4kcm9vdCxzdHlsZVNwZWM6ZSxzdHlsZTp0LG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntnbHlwaHM6dX19KSksZS4kdmVyc2lvbj43JiZ0LmNvbnN0YW50cyYmKHI9ci5jb25jYXQobyh7a2V5OiJjb25zdGFudHMiLHZhbHVlOnQuY29uc3RhbnRzLHN0eWxlOnQsc3R5bGVTcGVjOmV9KSkpLGkocil9ZnVuY3Rpb24gaSh0KXtyZXR1cm5bXS5jb25jYXQodCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmUtZS5saW5lfSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXZhciBvPXQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfY29uc3RhbnRzIikscz10KCIuL3ZhbGlkYXRlL3ZhbGlkYXRlIiksbD10KCIuLi9yZWZlcmVuY2UvbGF0ZXN0Lm1pbiIpLHU9dCgiLi92YWxpZGF0ZS92YWxpZGF0ZV9nbHlwaHNfdXJsIik7bi5zb3VyY2U9YSh0KCIuL3ZhbGlkYXRlL3ZhbGlkYXRlX3NvdXJjZSIpKSxuLmxheWVyPWEodCgiLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXllciIpKSxuLmZpbHRlcj1hKHQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyIikpLG4ucGFpbnRQcm9wZXJ0eT1hKHQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfcGFpbnRfcHJvcGVydHkiKSksbi5sYXlvdXRQcm9wZXJ0eT1hKHQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5IikpLGUuZXhwb3J0cz1ufSx7Ii4uL3JlZmVyZW5jZS9sYXRlc3QubWluIjozMjMsIi4vdmFsaWRhdGUvdmFsaWRhdGUiOjMwNiwiLi92YWxpZGF0ZS92YWxpZGF0ZV9jb25zdGFudHMiOjMxMCwiLi92YWxpZGF0ZS92YWxpZGF0ZV9maWx0ZXIiOjMxMiwiLi92YWxpZGF0ZS92YWxpZGF0ZV9nbHlwaHNfdXJsIjozMTQsIi4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5ZXIiOjMxNSwiLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHkiOjMxNiwiLi92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSI6MzE5LCIuL3ZhbGlkYXRlL3ZhbGlkYXRlX3NvdXJjZSI6MzIwfV0sMzIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vdjgubWluLmpzb24iKX0seyIuL3Y4Lm1pbi5qc29uIjozMjR9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9eyR2ZXJzaW9uOjgsJHJvb3Q6e3ZlcnNpb246e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczpbOF19LG5hbWU6e3R5cGU6InN0cmluZyJ9LG1ldGFkYXRhOnt0eXBlOiIqIn0sY2VudGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciJ9LHpvb206e3R5cGU6Im51bWJlciJ9LGJlYXJpbmc6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6ImRlZ3JlZXMifSxwaXRjaDp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImRlZ3JlZXMifSxzb3VyY2VzOntyZXF1aXJlZDohMCx0eXBlOiJzb3VyY2VzIn0sc3ByaXRlOnt0eXBlOiJzdHJpbmcifSxnbHlwaHM6e3R5cGU6InN0cmluZyJ9LHRyYW5zaXRpb246e3R5cGU6InRyYW5zaXRpb24ifSxsYXllcnM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5Iix2YWx1ZToibGF5ZXIifX0sc291cmNlczp7IioiOnt0eXBlOiJzb3VyY2UifX0sc291cmNlOlsic291cmNlX3RpbGUiLCJzb3VyY2VfZ2VvanNvbiIsInNvdXJjZV92aWRlbyIsInNvdXJjZV9pbWFnZSJdLHNvdXJjZV90aWxlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJ2ZWN0b3IiLCJyYXN0ZXIiXX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJnZW9qc29uIl19LGRhdGE6e3R5cGU6IioifSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTR9LGJ1ZmZlcjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjY0fSx0b2xlcmFuY2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozfSxjbHVzdGVyOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NDAwfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZToibnVtYmVyIn19LHNvdXJjZV92aWRlbzp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOlsidmlkZW8iXX0sdXJsczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJpbWFnZSJdfSx1cmw6e3JlcXVpcmVkOiEwLHR5cGU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxsYXllcjp7aWQ6e3R5cGU6InN0cmluZyIscmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6ImVudW0iLHZhbHVlczpbImZpbGwiLCJsaW5lIiwic3ltYm9sIiwiY2lyY2xlIiwicmFzdGVyIiwiYmFja2dyb3VuZCJdfSxtZXRhZGF0YTp7dHlwZToiKiJ9LHJlZjp7dHlwZToic3RyaW5nIn0sc291cmNlOnt0eXBlOiJzdHJpbmcifSwic291cmNlLWxheWVyIjp7dHlwZToic3RyaW5nIn0sbWluem9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyMn0sbWF4em9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyMn0saW50ZXJhY3RpdmU6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGZpbHRlcjp7dHlwZToiZmlsdGVyIn0sbGF5b3V0Ont0eXBlOiJsYXlvdXQifSxwYWludDp7dHlwZToicGFpbnQifSwicGFpbnQuKiI6e3R5cGU6InBhaW50In19LGxheW91dDpbImxheW91dF9maWxsIiwibGF5b3V0X2xpbmUiLCJsYXlvdXRfY2lyY2xlIiwibGF5b3V0X3N5bWJvbCIsImxheW91dF9yYXN0ZXIiLCJsYXlvdXRfYmFja2dyb3VuZCJdLGxheW91dF9iYWNrZ3JvdW5kOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9maWxsOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9jaXJjbGU6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6WyJ2aXNpYmxlIiwibm9uZSJdLGRlZmF1bHQ6InZpc2libGUifX0sbGF5b3V0X2xpbmU6eyJsaW5lLWNhcCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLGRlZmF1bHQ6ImJ1dHQifSwibGluZS1qb2luIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsiYmV2ZWwiLCJyb3VuZCIsIm1pdGVyIl0sZGVmYXVsdDoibWl0ZXIifSwibGluZS1taXRlci1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6Im1pdGVyIn1dfSwibGluZS1yb3VuZC1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLjA1LGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6InJvdW5kIn1dfSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9zeW1ib2w6eyJzeW1ib2wtcGxhY2VtZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsicG9pbnQiLCJsaW5lIl0sZGVmYXVsdDoicG9pbnQifSwic3ltYm9sLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjUwLG1pbmltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbeyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInN5bWJvbC1hdm9pZC1lZGdlcyI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITF9LCJpY29uLWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXX0sImljb24tcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJ2aWV3cG9ydCIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXRleHQtZml0Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdmFsdWVzOlsibm9uZSIsImJvdGgiLCJ3aWR0aCIsImhlaWdodCJdLGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXX0sImljb24tdGV4dC1maXQtcGFkZGluZyI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlswLDAsMCwwXSx1bml0czoicGl4ZWxzIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiLCJpY29uLXRleHQtZml0IiwidGV4dC1maWVsZCJdfSwiaWNvbi1pbWFnZSI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdG9rZW5zOiEwfSwiaWNvbi1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24ta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLHsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwiaWNvbi1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sInRleHQtcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJ2aWV3cG9ydCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWZpZWxkIjp7dHlwZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiIiLHRva2VuczohMH0sInRleHQtZm9udCI6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OlsiT3BlbiBTYW5zIFJlZ3VsYXIiLCJBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtc2l6ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxNixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LW1heC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMCxtaW5pbXVtOjAsdW5pdHM6ImVtIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbGluZS1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4yLHVuaXRzOiJlbSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWxldHRlci1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImVtIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtanVzdGlmeSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImNlbnRlciIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1tYXgtYW5nbGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NDUsdW5pdHM6ImRlZ3JlZXMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInRleHQtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWtlZXAtdXByaWdodCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InRleHQtcm90YXRpb24tYWxpZ25tZW50IjoibWFwIn0seyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInRleHQtdHJhbnNmb3JtIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibm9uZSIsInVwcGVyY2FzZSIsImxvd2VyY2FzZSJdLGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsdW5pdHM6ImVtcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwiaWNvbi1pbWFnZSJdfSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9yYXN0ZXI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6WyJ2aXNpYmxlIiwibm9uZSJdLGRlZmF1bHQ6InZpc2libGUifX0sZmlsdGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6IioifSxmaWx0ZXJfb3BlcmF0b3I6e3R5cGU6ImVudW0iLHZhbHVlczpbIj09IiwiIT0iLCI+IiwiPj0iLCI8IiwiPD0iLCJpbiIsIiFpbiIsImFsbCIsImFueSIsIm5vbmUiLCJoYXMiLCIhaGFzIl19LGdlb21ldHJ5X3R5cGU6e3R5cGU6ImVudW0iLHZhbHVlczpbIlBvaW50IiwiTGluZVN0cmluZyIsIlBvbHlnb24iXX0sY29sb3Jfb3BlcmF0aW9uOnt0eXBlOiJlbnVtIix2YWx1ZXM6WyJsaWdodGVuIiwic2F0dXJhdGUiLCJzcGluIiwiZmFkZSIsIm1peCJdfSxmdW5jdGlvbjp7c3RvcHM6e3R5cGU6ImFycmF5IixyZXF1aXJlZDohMCx2YWx1ZToiZnVuY3Rpb25fc3RvcCJ9LGJhc2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MH0scHJvcGVydHk6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiJHpvb20ifSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6WyJleHBvbmVudGlhbCIsImludGVydmFsIiwiY2F0ZWdvcmljYWwiXSxkZWZhdWx0OiJleHBvbmVudGlhbCJ9fSxmdW5jdGlvbl9zdG9wOnt0eXBlOiJhcnJheSIsbWluaW11bTowLG1heGltdW06MjIsdmFsdWU6WyJudW1iZXIiLCJjb2xvciJdLGxlbmd0aDoyfSxwYWludDpbInBhaW50X2ZpbGwiLCJwYWludF9saW5lIiwicGFpbnRfY2lyY2xlIiwicGFpbnRfc3ltYm9sIiwicGFpbnRfcmFzdGVyIiwicGFpbnRfYmFja2dyb3VuZCJdLHBhaW50X2ZpbGw6eyJmaWxsLWFudGlhbGlhcyI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITB9LCJmaWxsLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJmaWxsLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9XX0sImZpbGwtb3V0bGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLXBhdHRlcm4ifSx7ImZpbGwtYW50aWFsaWFzIjohMH1dfSwiZmlsbC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC10cmFuc2xhdGUiXX0sImZpbGwtcGF0dGVybiI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2xpbmU6eyJsaW5lLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XX0sImxpbmUtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImxpbmUtdHJhbnNsYXRlIl19LCJsaW5lLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWdhcC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWRhc2hhcnJheSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoibGluZSB3aWR0aHMiLHJlcXVpcmVzOlt7IiEiOiJsaW5lLXBhdHRlcm4ifV19LCJsaW5lLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9fSxwYWludF9jaXJjbGU6eyJjaXJjbGUtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJjaXJjbGUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiY2lyY2xlLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImNpcmNsZS10cmFuc2xhdGUiXX0sImNpcmNsZS1waXRjaC1zY2FsZSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIn19LHBhaW50X3N5bWJvbDp7Imljb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24taGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsImljb24tdHJhbnNsYXRlIl19LCJ0ZXh0LW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtaGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbInRleHQtZmllbGQiLCJ0ZXh0LXRyYW5zbGF0ZSJdfX0scGFpbnRfcmFzdGVyOnsicmFzdGVyLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWh1ZS1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJkZWdyZWVzIn0sInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MCxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLXNhdHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1jb250cmFzdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWZhZGUtZHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoibWlsbGlzZWNvbmRzIn19LHBhaW50X2JhY2tncm91bmQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJiYWNrZ3JvdW5kLXBhdHRlcm4ifV19LCJiYWNrZ3JvdW5kLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiYmFja2dyb3VuZC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn0sZGVsYXk6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn19fX0se31dLDMyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiEhKGkoKSYmYSgpJiZvKCkmJnMoKSYmbCgpJiZ1KCkmJmMoKSYmaCh0JiZ0LmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpKX1mdW5jdGlvbiBpKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnR9ZnVuY3Rpb24gYSgpe3JldHVybiBBcnJheS5wcm90b3R5cGUmJkFycmF5LnByb3RvdHlwZS5ldmVyeSYmQXJyYXkucHJvdG90eXBlLmZpbHRlciYmQXJyYXkucHJvdG90eXBlLmZvckVhY2gmJkFycmF5LnByb3RvdHlwZS5pbmRleE9mJiZBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5tYXAmJkFycmF5LnByb3RvdHlwZS5zb21lJiZBcnJheS5wcm90b3R5cGUucmVkdWNlJiZBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQmJkFycmF5LmlzQXJyYXl9ZnVuY3Rpb24gbygpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfWZ1bmN0aW9uIHMoKXtyZXR1cm4gT2JqZWN0LmtleXMmJk9iamVjdC5jcmVhdGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJk9iamVjdC5pc1NlYWxlZCYmT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNFeHRlbnNpYmxlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJiZPYmplY3Quc2VhbCYmT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zfWZ1bmN0aW9uIGwoKXtyZXR1cm4iSlNPTiJpbiB3aW5kb3cmJiJwYXJzZSJpbiBKU09OJiYic3RyaW5naWZ5ImluIEpTT059ZnVuY3Rpb24gdSgpe3JldHVybiJXb3JrZXIiaW4gd2luZG93fWZ1bmN0aW9uIGMoKXtyZXR1cm4iVWludDhDbGFtcGVkQXJyYXkiaW4gd2luZG93fWZ1bmN0aW9uIGgodCl7cmV0dXJuIHZvaWQgMD09PWRbdF0mJihkW3RdPWYodCkpLGRbdF19ZnVuY3Rpb24gZih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxyPU9iamVjdC5jcmVhdGUobi53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtyZXR1cm4gci5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQsZS5wcm9iYWJseVN1cHBvcnRzQ29udGV4dD9lLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIscil8fGUucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik6ZS5zdXBwb3J0c0NvbnRleHQ/ZS5zdXBwb3J0c0NvbnRleHQoIndlYmdsIixyKXx8ZS5zdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik6ZS5nZXRDb250ZXh0KCJ3ZWJnbCIscil8fGUuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixyKX12b2lkIDAhPT1lJiZlLmV4cG9ydHM/ZS5leHBvcnRzPW46d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1uKTt2YXIgZD17fTtuLndlYkdMQ29udGV4dEF0dHJpYnV0ZXM9e2FudGlhbGlhczohMSxhbHBoYTohMCxzdGVuY2lsOiEwLGRlcHRoOiEwfX0se31dLDMyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGF5b3V0VmVydGV4QXJyYXlUeXBlO3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IGU7dmFyIHI9dC5lbGVtZW50QXJyYXlUeXBlO3ImJih0aGlzLmVsZW1lbnRBcnJheT1uZXcgcik7dmFyIG49dC5lbGVtZW50QXJyYXlUeXBlMjtuJiYodGhpcy5lbGVtZW50QXJyYXkyPW5ldyBuKSx0aGlzLnBhaW50VmVydGV4QXJyYXlzPWkubWFwT2JqZWN0KHQucGFpbnRWZXJ0ZXhBcnJheVR5cGVzLGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdH0pfXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg9TWF0aC5wb3coMiwxNiktMSxuLnByb3RvdHlwZS5oYXNDYXBhY2l0eUZvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgrdDw9bi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSH0sbi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LG4ucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEFycmF5LnRyaW0oKSx0aGlzLmVsZW1lbnRBcnJheSYmdGhpcy5lbGVtZW50QXJyYXkudHJpbSgpLHRoaXMuZWxlbWVudEFycmF5MiYmdGhpcy5lbGVtZW50QXJyYXkyLnRyaW0oKTtmb3IodmFyIHQgaW4gdGhpcy5wYWludFZlcnRleEFycmF5cyl0aGlzLnBhaW50VmVydGV4QXJyYXlzW3RdLnRyaW0oKX0sbi5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue2xheW91dFZlcnRleEFycmF5OnRoaXMubGF5b3V0VmVydGV4QXJyYXkuc2VyaWFsaXplKCksZWxlbWVudEFycmF5OnRoaXMuZWxlbWVudEFycmF5JiZ0aGlzLmVsZW1lbnRBcnJheS5zZXJpYWxpemUoKSxlbGVtZW50QXJyYXkyOnRoaXMuZWxlbWVudEFycmF5MiYmdGhpcy5lbGVtZW50QXJyYXkyLnNlcmlhbGl6ZSgpLHBhaW50VmVydGV4QXJyYXlzOmkubWFwT2JqZWN0KHRoaXMucGFpbnRWZXJ0ZXhBcnJheXMsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KX19LG4ucHJvdG90eXBlLmdldFRyYW5zZmVyYWJsZXM9ZnVuY3Rpb24odCl7dC5wdXNoKHRoaXMubGF5b3V0VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpLHRoaXMuZWxlbWVudEFycmF5JiZ0LnB1c2godGhpcy5lbGVtZW50QXJyYXkuYXJyYXlCdWZmZXIpLHRoaXMuZWxlbWVudEFycmF5MiYmdC5wdXNoKHRoaXMuZWxlbWVudEFycmF5Mi5hcnJheUJ1ZmZlcik7Zm9yKHZhciBlIGluIHRoaXMucGFpbnRWZXJ0ZXhBcnJheXMpdC5wdXNoKHRoaXMucGFpbnRWZXJ0ZXhBcnJheXNbZV0uYXJyYXlCdWZmZXIpfX0seyIuLi91dGlsL3V0aWwiOjQ0MH1dLDMyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXI9dC5sYXllcix0aGlzLmNoaWxkTGF5ZXJzPXQuY2hpbGRMYXllcnMsdGhpcy50eXBlPXRoaXMubGF5ZXIudHlwZSx0aGlzLmZlYXR1cmVzPVtdLHRoaXMuaWQ9dGhpcy5sYXllci5pZCx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5zb3VyY2VMYXllcj10aGlzLmxheWVyLnNvdXJjZUxheWVyLHRoaXMuc291cmNlTGF5ZXJJbmRleD10LnNvdXJjZUxheWVySW5kZXgsdGhpcy5taW5ab29tPXRoaXMubGF5ZXIubWluem9vbSx0aGlzLm1heFpvb209dGhpcy5sYXllci5tYXh6b29tLHRoaXMucGFpbnRBdHRyaWJ1dGVzPWkodGhpcyksdC5hcnJheXMpe3ZhciBlPXRoaXMucHJvZ3JhbUludGVyZmFjZXM7dGhpcy5idWZmZXJHcm91cHM9Yy5tYXBPYmplY3QodC5hcnJheXMsZnVuY3Rpb24ocixuKXt2YXIgaT1lW25dLGE9dC5wYWludFZlcnRleEFycmF5VHlwZXNbbl07cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh0LHtsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6aS5sYXlvdXRWZXJ0ZXhBcnJheVR5cGUuc2VyaWFsaXplKCksZWxlbWVudEFycmF5VHlwZTppLmVsZW1lbnRBcnJheVR5cGUmJmkuZWxlbWVudEFycmF5VHlwZS5zZXJpYWxpemUoKSxlbGVtZW50QXJyYXlUeXBlMjppLmVsZW1lbnRBcnJheVR5cGUyJiZpLmVsZW1lbnRBcnJheVR5cGUyLnNlcmlhbGl6ZSgpLHBhaW50VmVydGV4QXJyYXlUeXBlczphfSl9KX0pfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0LnByb2dyYW1JbnRlcmZhY2VzKXtmb3IodmFyIG49ZVtyXT17fSxpPTA7aTx0LmNoaWxkTGF5ZXJzLmxlbmd0aDtpKyspe25bdC5jaGlsZExheWVyc1tpXS5pZF09e2F0dHJpYnV0ZXM6W10sdW5pZm9ybXM6W10sZGVmaW5lczpbXSx2ZXJ0ZXhQcmFnbWFzOntkZWZpbmU6e30saW5pdGlhbGl6ZTp7fX0sZnJhZ21lbnRQcmFnbWFzOntkZWZpbmU6e30saW5pdGlhbGl6ZTp7fX19fXZhciBzPXQucHJvZ3JhbUludGVyZmFjZXNbcl07aWYocy5wYWludEF0dHJpYnV0ZXMpZm9yKHZhciBsPTA7bDxzLnBhaW50QXR0cmlidXRlcy5sZW5ndGg7bCsrKXt2YXIgdT1zLnBhaW50QXR0cmlidXRlc1tsXTt1Lm11bHRpcGxpZXI9dS5tdWx0aXBsaWVyfHwxO2Zvcih2YXIgaD0wO2g8dC5jaGlsZExheWVycy5sZW5ndGg7aCsrKXt2YXIgZD10LmNoaWxkTGF5ZXJzW2hdLHA9bltkLmlkXSxtPXUubmFtZTtmKCJhXyI9PT11Lm5hbWUuc2xpY2UoMCwyKSk7dmFyIHYsZz11Lm5hbWUuc2xpY2UoMik7aWYocC5mcmFnbWVudFByYWdtYXMuaW5pdGlhbGl6ZVtnXT0iIixkLmlzUGFpbnRWYWx1ZUZlYXR1cmVDb25zdGFudCh1LnBhaW50UHJvcGVydHkpKXAudW5pZm9ybXMucHVzaCh1KSxwLmZyYWdtZW50UHJhZ21hcy5kZWZpbmVbZ109cC52ZXJ0ZXhQcmFnbWFzLmRlZmluZVtnXT1bInVuaWZvcm0iLCJ7cHJlY2lzaW9ufSIsInt0eXBlfSIsbV0uam9pbigiICIpKyI7IixwLmZyYWdtZW50UHJhZ21hcy5pbml0aWFsaXplW2ddPXAudmVydGV4UHJhZ21hcy5pbml0aWFsaXplW2ddPVsie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLGcsIj0iLG1dLmpvaW4oIiAiKSsiO1xuIjtlbHNlIGlmKGQuaXNQYWludFZhbHVlWm9vbUNvbnN0YW50KHUucGFpbnRQcm9wZXJ0eSkpe3AuYXR0cmlidXRlcy5wdXNoKGMuZXh0ZW5kKHt9LHUse25hbWU6bX0pKSx2PVsidmFyeWluZyIsIntwcmVjaXNpb259Iiwie3R5cGV9IixnXS5qb2luKCIgIikrIjtcbiI7dmFyIHk9W3AuZnJhZ21lbnRQcmFnbWFzLmRlZmluZVtnXSwiYXR0cmlidXRlIiwie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLG1dLmpvaW4oIiAiKSsiO1xuIjtwLmZyYWdtZW50UHJhZ21hcy5kZWZpbmVbZ109dixwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddPXYreSxwLnZlcnRleFByYWdtYXMuaW5pdGlhbGl6ZVtnXT1bZywiPSIsbSwiLyIsdS5tdWx0aXBsaWVyLnRvRml4ZWQoMSldLmpvaW4oIiAiKSsiO1xuIn1lbHNle2Zvcih2YXIgYj0idV8iK20uc2xpY2UoMikrIl90Iix4PWQuZ2V0UGFpbnRWYWx1ZVN0b3Bab29tTGV2ZWxzKHUucGFpbnRQcm9wZXJ0eSksXz0wO188eC5sZW5ndGgmJnhbX108dC56b29tOylfKys7Zm9yKHZhciB3PU1hdGgubWF4KDAsTWF0aC5taW4oeC5sZW5ndGgtNCxfLTIpKSxNPVtdLGs9MDtrPDQ7aysrKU0ucHVzaCh4W01hdGgubWluKHcrayx4Lmxlbmd0aC0xKV0pO3Y9WyJ2YXJ5aW5nIiwie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLGddLmpvaW4oIiAiKSsiO1xuIixwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddPXYrWyJ1bmlmb3JtIiwibG93cCIsImZsb2F0IixiXS5qb2luKCIgIikrIjtcbiIscC5mcmFnbWVudFByYWdtYXMuZGVmaW5lW2ddPXYscC51bmlmb3Jtcy5wdXNoKGMuZXh0ZW5kKHt9LHUse25hbWU6YixnZXRWYWx1ZTpvKHUsdyksY29tcG9uZW50czoxfSkpO3ZhciBBPXUuY29tcG9uZW50cztpZigxPT09QSlwLmF0dHJpYnV0ZXMucHVzaChjLmV4dGVuZCh7fSx1LHtnZXRWYWx1ZTphKHUsTSksaXNGdW5jdGlvbjohMCxjb21wb25lbnRzOjQqQX0pKSxwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddKz1bImF0dHJpYnV0ZSIsIntwcmVjaXNpb259IiwidmVjNCIsbV0uam9pbigiICIpKyI7XG4iLHAudmVydGV4UHJhZ21hcy5pbml0aWFsaXplW2ddPVtnLCI9IiwiZXZhbHVhdGVfem9vbV9mdW5jdGlvbl8xKCIrbSsiLCAiK2IrIikiLCIvIix1Lm11bHRpcGxpZXIudG9GaXhlZCgxKV0uam9pbigiICIpKyI7XG4iO2Vsc2V7Zm9yKHZhciBUPVtdLFM9MDtTPDQ7UysrKVQucHVzaChtK1MpLHAuYXR0cmlidXRlcy5wdXNoKGMuZXh0ZW5kKHt9LHUse2dldFZhbHVlOmEodSxbTVtTXV0pLGlzRnVuY3Rpb246ITAsbmFtZTptK1N9KSkscC52ZXJ0ZXhQcmFnbWFzLmRlZmluZVtnXSs9WyJhdHRyaWJ1dGUiLCJ7cHJlY2lzaW9ufSIsInt0eXBlfSIsbStTXS5qb2luKCIgIikrIjtcbiI7cC52ZXJ0ZXhQcmFnbWFzLmluaXRpYWxpemVbZ109W2csIiA9ICIsImV2YWx1YXRlX3pvb21fZnVuY3Rpb25fNCgiK1Quam9pbigiLCAiKSsiLCAiK2IrIikiLCIvIix1Lm11bHRpcGxpZXIudG9GaXhlZCgxKV0uam9pbigiICIpKyI7XG4ifX19fX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZ2V0VmFsdWUocixjLmV4dGVuZCh7fSxuLHt6b29tOmVbMF19KSxpKTtmb3IodmFyIGE9W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcz1lW29dO2EucHVzaCh0LmdldFZhbHVlKHIsYy5leHRlbmQoe30sbix7em9vbTpzfSksaSlbMF0pfXJldHVybiBhfX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5nZXRQYWludEludGVycG9sYXRpb25UKHQucGFpbnRQcm9wZXJ0eSxuLnpvb20pCjtyZXR1cm5bTWF0aC5tYXgoMCxNYXRoLm1pbig0LGktZSkpXX19dmFyIHM9dCgiZmVhdHVyZS1maWx0ZXIiKSxsPXQoIi4vYXJyYXlfZ3JvdXAiKSx1PXQoIi4vYnVmZmVyX2dyb3VwIiksYz10KCIuLi91dGlsL3V0aWwiKSxoPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IiksZj10KCJhc3NlcnQiKTtlLmV4cG9ydHM9bixuLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KHtmaWxsOnQoIi4vYnVja2V0L2ZpbGxfYnVja2V0IiksbGluZTp0KCIuL2J1Y2tldC9saW5lX2J1Y2tldCIpLGNpcmNsZTp0KCIuL2J1Y2tldC9jaXJjbGVfYnVja2V0Iiksc3ltYm9sOnQoIi4vYnVja2V0L3N5bWJvbF9idWNrZXQiKX1bZS5sYXllci50eXBlXSkoZSl9LG4uRVhURU5UPTgxOTIsbi5wcm90b3R5cGUucG9wdWxhdGVBcnJheXM9ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZUFycmF5cygpLHRoaXMucmVjYWxjdWxhdGVTdHlsZUxheWVycygpO2Zvcih2YXIgdD0wO3Q8dGhpcy5mZWF0dXJlcy5sZW5ndGg7dCsrKXRoaXMuYWRkRmVhdHVyZSh0aGlzLmZlYXR1cmVzW3RdKTt0aGlzLnRyaW1BcnJheXMoKX0sbi5wcm90b3R5cGUucHJlcGFyZUFycmF5R3JvdXA9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFycmF5R3JvdXBzW3RdLG49ci5sZW5ndGgmJnJbci5sZW5ndGgtMV07cmV0dXJuIG4mJm4uaGFzQ2FwYWNpdHlGb3IoZSl8fChuPW5ldyBsKHtsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6dGhpcy5wcm9ncmFtSW50ZXJmYWNlc1t0XS5sYXlvdXRWZXJ0ZXhBcnJheVR5cGUsZWxlbWVudEFycmF5VHlwZTp0aGlzLnByb2dyYW1JbnRlcmZhY2VzW3RdLmVsZW1lbnRBcnJheVR5cGUsZWxlbWVudEFycmF5VHlwZTI6dGhpcy5wcm9ncmFtSW50ZXJmYWNlc1t0XS5lbGVtZW50QXJyYXlUeXBlMixwYWludFZlcnRleEFycmF5VHlwZXM6dGhpcy5wYWludFZlcnRleEFycmF5VHlwZXNbdF19KSxuLmluZGV4PXIubGVuZ3RoLHIucHVzaChuKSksbn0sbi5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy5hcnJheUdyb3Vwcz17fSx0aGlzLnBhaW50VmVydGV4QXJyYXlUeXBlcz17fTtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtSW50ZXJmYWNlcyl7dGhpcy5hcnJheUdyb3Vwc1t0XT1bXTt2YXIgZT10aGlzLnBhaW50VmVydGV4QXJyYXlUeXBlc1t0XT17fSxyPXRoaXMucGFpbnRBdHRyaWJ1dGVzW3RdO2Zvcih2YXIgaSBpbiByKWVbaV09bmV3IG4uVmVydGV4QXJyYXlUeXBlKHJbaV0uYXR0cmlidXRlcyl9fSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJ1ZmZlckdyb3Vwcylmb3IodmFyIHI9dGhpcy5idWZmZXJHcm91cHNbZV0sbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZGVzdHJveSh0KX0sbi5wcm90b3R5cGUudHJpbUFycmF5cz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmFycmF5R3JvdXBzKWZvcih2YXIgZT10aGlzLmFycmF5R3JvdXBzW3RdLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLnRyaW0oKX0sbi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmFycmF5R3JvdXBzKWZvcih2YXIgZT10aGlzLmFycmF5R3JvdXBzW3RdLHI9MDtyPGUubGVuZ3RoO3IrKylpZighZVtyXS5pc0VtcHR5KCkpcmV0dXJuITE7cmV0dXJuITB9LG4ucHJvdG90eXBlLmdldFRyYW5zZmVyYWJsZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYXJyYXlHcm91cHMpZm9yKHZhciByPXRoaXMuYXJyYXlHcm91cHNbZV0sbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZ2V0VHJhbnNmZXJhYmxlcyh0KX0sbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dGhpcy5wYWludEF0dHJpYnV0ZXNbZV1bbi5pZF0udW5pZm9ybXMsbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9cltzLm5hbWVdO3RbInVuaWZvcm0iK3MuY29tcG9uZW50cysiZnYiXShsLHMuZ2V0VmFsdWUobixpKSl9fSxuLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57bGF5ZXJJZDp0aGlzLmxheWVyLmlkLHpvb206dGhpcy56b29tLGFycmF5czpjLm1hcE9iamVjdCh0aGlzLmFycmF5R3JvdXBzLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pfSkscGFpbnRWZXJ0ZXhBcnJheVR5cGVzOmMubWFwT2JqZWN0KHRoaXMucGFpbnRWZXJ0ZXhBcnJheVR5cGVzLGZ1bmN0aW9uKHQpe3JldHVybiBjLm1hcE9iamVjdCh0LGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSl9KSxjaGlsZExheWVySWRzOnRoaXMuY2hpbGRMYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSl9fSxuLnByb3RvdHlwZS5jcmVhdGVGaWx0ZXI9ZnVuY3Rpb24oKXt0aGlzLmZpbHRlcnx8KHRoaXMuZmlsdGVyPXModGhpcy5sYXllci5maWx0ZXIpKX07dmFyIGQ9e2xhc3RJbnRlZ2VyWm9vbToxLzAsbGFzdEludGVnZXJab29tVGltZTowLGxhc3Rab29tOjB9O24ucHJvdG90eXBlLnJlY2FsY3VsYXRlU3R5bGVMYXllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMuY2hpbGRMYXllcnMubGVuZ3RoO3QrKyl0aGlzLmNoaWxkTGF5ZXJzW3RdLnJlY2FsY3VsYXRlKHRoaXMuem9vbSxkKX0sbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dGhpcy5jaGlsZExheWVycy5sZW5ndGg7YSsrKWZvcih2YXIgbz10aGlzLmNoaWxkTGF5ZXJzW2FdLHM9dGhpcy5hcnJheUdyb3Vwc1t0XSxsPW4uaW5kZXg7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF0sYz11LmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxoPXUucGFpbnRWZXJ0ZXhBcnJheXNbby5pZF07aC5yZXNpemUoYyk7Zm9yKHZhciBmPXRoaXMucGFpbnRBdHRyaWJ1dGVzW3RdW28uaWRdLmF0dHJpYnV0ZXMsZD0wO2Q8Zi5sZW5ndGg7ZCsrKWZvcih2YXIgcD1mW2RdLG09cC5nZXRWYWx1ZShvLGUsciksdj1wLm11bHRpcGxpZXJ8fDEsZz1wLmNvbXBvbmVudHN8fDEseT1sPT09bi5pbmRleD9pOjAsYj15O2I8YztiKyspZm9yKHZhciB4PWguZ2V0KGIpLF89MDtfPGc7XysrKXt2YXIgdz1nPjE/cC5uYW1lK186cC5uYW1lO3hbd109bVtfXSp2fX19LG4uVmVydGV4QXJyYXlUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaCh7bWVtYmVyczp0LGFsaWdubWVudDo0fSl9LG4uRWxlbWVudEFycmF5VHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGgoe21lbWJlcnM6W3t0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2VzIixjb21wb25lbnRzOnR8fDN9XX0pfX0seyIuLi91dGlsL3N0cnVjdF9hcnJheSI6NDM4LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9hcnJheV9ncm91cCI6MzI2LCIuL2J1Y2tldC9jaXJjbGVfYnVja2V0IjozMjgsIi4vYnVja2V0L2ZpbGxfYnVja2V0IjozMjksIi4vYnVja2V0L2xpbmVfYnVja2V0IjozMzAsIi4vYnVja2V0L3N5bWJvbF9idWNrZXQiOjMzMSwiLi9idWZmZXJfZ3JvdXAiOjMzMyxhc3NlcnQ6NDUsImZlYXR1cmUtZmlsdGVyIjoxMzB9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2kuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpPXQoIi4uL2J1Y2tldCIpLGE9dCgiLi4vLi4vdXRpbC91dGlsIiksbz10KCIuLi9sb2FkX2dlb21ldHJ5Iikscz1pLkVYVEVOVDtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1hLmluaGVyaXQoaSx7fSksbi5wcm90b3R5cGUuYWRkQ2lyY2xlVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHQuZW1wbGFjZUJhY2soMiplKyhuKzEpLzIsMipyKyhpKzEpLzIpfSxuLnByb3RvdHlwZS5wcm9ncmFtSW50ZXJmYWNlcz17Y2lyY2xlOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IGkuVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSksZWxlbWVudEFycmF5VHlwZTpuZXcgaS5FbGVtZW50QXJyYXlUeXBlLHBhaW50QXR0cmlidXRlczpbe25hbWU6ImFfY29sb3IiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCIsZ2V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmdldFBhaW50VmFsdWUoImNpcmNsZS1jb2xvciIsZSxyKX0sbXVsdGlwbGllcjoyNTUscGFpbnRQcm9wZXJ0eToiY2lyY2xlLWNvbG9yIn0se25hbWU6ImFfcmFkaXVzIixjb21wb25lbnRzOjEsdHlwZToiVWludDE2Iixpc0xheWVyQ29uc3RhbnQ6ITEsZ2V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVyblt0LmdldFBhaW50VmFsdWUoImNpcmNsZS1yYWRpdXMiLGUscildfSxtdWx0aXBsaWVyOjEwLHBhaW50UHJvcGVydHk6ImNpcmNsZS1yYWRpdXMifSx7bmFtZToiYV9ibHVyIixjb21wb25lbnRzOjEsdHlwZToiVWludDE2Iixpc0xheWVyQ29uc3RhbnQ6ITEsZ2V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVyblt0LmdldFBhaW50VmFsdWUoImNpcmNsZS1ibHVyIixlLHIpXX0sbXVsdGlwbGllcjoxMCxwYWludFByb3BlcnR5OiJjaXJjbGUtYmx1ciJ9LHtuYW1lOiJhX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50MTYiLGlzTGF5ZXJDb25zdGFudDohMSxnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW3QuZ2V0UGFpbnRWYWx1ZSgiY2lyY2xlLW9wYWNpdHkiLGUscildfSxtdWx0aXBsaWVyOjI1NSxwYWludFByb3BlcnR5OiJjaXJjbGUtb3BhY2l0eSJ9XX19LG4ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt6b29tOnRoaXMuem9vbX0scj1vKHQpLG49dGhpcy5wcmVwYXJlQXJyYXlHcm91cCgiY2lyY2xlIiwwKSxpPW4ubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGE9MDthPHIubGVuZ3RoO2ErKylmb3IodmFyIGw9MDtsPHJbYV0ubGVuZ3RoO2wrKyl7dmFyIHU9clthXVtsXS54LGM9clthXVtsXS55O2lmKCEodTwwfHx1Pj1zfHxjPDB8fGM+PXMpKXt2YXIgaD10aGlzLnByZXBhcmVBcnJheUdyb3VwKCJjaXJjbGUiLDQpLGY9aC5sYXlvdXRWZXJ0ZXhBcnJheSxkPXRoaXMuYWRkQ2lyY2xlVmVydGV4KGYsdSxjLC0xLC0xKTt0aGlzLmFkZENpcmNsZVZlcnRleChmLHUsYywxLC0xKSx0aGlzLmFkZENpcmNsZVZlcnRleChmLHUsYywxLDEpLHRoaXMuYWRkQ2lyY2xlVmVydGV4KGYsdSxjLC0xLDEpLGguZWxlbWVudEFycmF5LmVtcGxhY2VCYWNrKGQsZCsxLGQrMiksaC5lbGVtZW50QXJyYXkuZW1wbGFjZUJhY2soZCxkKzMsZCsyKX19dGhpcy5wb3B1bGF0ZVBhaW50QXJyYXlzKCJjaXJjbGUiLGUsdC5wcm9wZXJ0aWVzLG4saSl9fSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9idWNrZXQiOjMyNywiLi4vbG9hZF9nZW9tZXRyeSI6MzM1fV0sMzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi9idWNrZXQiKSxhPXQoIi4uLy4uL3V0aWwvdXRpbCIpLG89dCgiLi4vbG9hZF9nZW9tZXRyeSIpLHM9dCgiZWFyY3V0IiksbD10KCIuLi8uLi91dGlsL2NsYXNzaWZ5X3JpbmdzIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9YS5pbmhlcml0KGkse30pLG4ucHJvdG90eXBlLnByb2dyYW1JbnRlcmZhY2VzPXtmaWxsOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IGkuVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSksZWxlbWVudEFycmF5VHlwZTpuZXcgaS5FbGVtZW50QXJyYXlUeXBlKDEpLGVsZW1lbnRBcnJheVR5cGUyOm5ldyBpLkVsZW1lbnRBcnJheVR5cGUoMikscGFpbnRBdHRyaWJ1dGVzOlt7bmFtZToiYV9jb2xvciIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQ4IixnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZ2V0UGFpbnRWYWx1ZSgiZmlsbC1jb2xvciIsZSxyKX0sbXVsdGlwbGllcjoyNTUscGFpbnRQcm9wZXJ0eToiZmlsbC1jb2xvciJ9LHtuYW1lOiJhX291dGxpbmVfY29sb3IiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCIsZ2V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmdldFBhaW50VmFsdWUoImZpbGwtb3V0bGluZS1jb2xvciIsZSxyKX0sbXVsdGlwbGllcjoyNTUscGFpbnRQcm9wZXJ0eToiZmlsbC1vdXRsaW5lLWNvbG9yIn0se25hbWU6ImFfb3BhY2l0eSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQ4IixnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW3QuZ2V0UGFpbnRWYWx1ZSgiZmlsbC1vcGFjaXR5IixlLHIpXX0sbXVsdGlwbGllcjoyNTUscGFpbnRQcm9wZXJ0eToiZmlsbC1vcGFjaXR5In1dfX0sbi5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9byh0KSxyPWwoZSw1MDApLG49dGhpcy5wcmVwYXJlQXJyYXlHcm91cCgiZmlsbCIsMCksaT1uLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxhPTA7YTxyLmxlbmd0aDthKyspdGhpcy5hZGRQb2x5Z29uKHJbYV0pO3RoaXMucG9wdWxhdGVQYWludEFycmF5cygiZmlsbCIse3pvb206dGhpcy56b29tfSx0LnByb3BlcnRpZXMsbixpKX0sbi5wcm90b3R5cGUuYWRkUG9seWdvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZSs9dFtyXS5sZW5ndGg7Zm9yKHZhciBuPXRoaXMucHJlcGFyZUFycmF5R3JvdXAoImZpbGwiLGUpLGk9W10sYT1bXSxvPW4ubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIHU9dFtsXTtsPjAmJmEucHVzaChpLmxlbmd0aC8yKTtmb3IodmFyIGM9MDtjPHUubGVuZ3RoO2MrKyl7dmFyIGg9dVtjXSxmPW4ubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soaC54LGgueSk7Yz49MSYmbi5lbGVtZW50QXJyYXkyLmVtcGxhY2VCYWNrKGYtMSxmKSxpLnB1c2goaC54KSxpLnB1c2goaC55KX19Zm9yKHZhciBkPXMoaSxhKSxwPTA7cDxkLmxlbmd0aDtwKyspbi5lbGVtZW50QXJyYXkuZW1wbGFjZUJhY2soZFtwXStvKX19LHsiLi4vLi4vdXRpbC9jbGFzc2lmeV9yaW5ncyI6NDI4LCIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi4vYnVja2V0IjozMjcsIi4uL2xvYWRfZ2VvbWV0cnkiOjMzNSxlYXJjdXQ6MTI0fV0sMzMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi9idWNrZXQiKSxhPXQoIi4uLy4uL3V0aWwvdXRpbCIpLG89dCgiLi4vbG9hZF9nZW9tZXRyeSIpLHM9aS5FWFRFTlQsbD1NYXRoLmNvcyhNYXRoLlBJLzE4MCozNy41KSx1PU1hdGgucG93KDIsMTQpLy41O2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWEuaW5oZXJpdChpLHt9KSxuLnByb3RvdHlwZS5hZGRMaW5lVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiB0LmVtcGxhY2VCYWNrKGUueDw8MXxuLGUueTw8MXxpLE1hdGgucm91bmQoNjMqci54KSsxMjgsTWF0aC5yb3VuZCg2MypyLnkpKzEyOCwxKygwPT09YT8wOmE8MD8tMToxKXwoLjUqbyY2Myk8PDIsLjUqbz4+Nil9LG4ucHJvdG90eXBlLnByb2dyYW1JbnRlcmZhY2VzPXtsaW5lOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IGkuVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCJ9XSksZWxlbWVudEFycmF5VHlwZTpuZXcgaS5FbGVtZW50QXJyYXlUeXBlfX0sbi5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9byh0LDE1KSxyPTA7cjxlLmxlbmd0aDtyKyspdGhpcy5hZGRMaW5lKGVbcl0sdGhpcy5sYXllci5sYXlvdXRbImxpbmUtam9pbiJdLHRoaXMubGF5ZXIubGF5b3V0WyJsaW5lLWNhcCJdLHRoaXMubGF5ZXIubGF5b3V0WyJsaW5lLW1pdGVyLWxpbWl0Il0sdGhpcy5sYXllci5sYXlvdXRbImxpbmUtcm91bmQtbGltaXQiXSl9LG4ucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dC5sZW5ndGg7YT4yJiZ0W2EtMV0uZXF1YWxzKHRbYS0yXSk7KWEtLTtpZighKHQubGVuZ3RoPDIpKXsiYmV2ZWwiPT09ZSYmKG49MS4wNSk7dmFyIG89cy8oNTEyKnRoaXMub3ZlcnNjYWxpbmcpKjE1LHU9dFswXSxjPXRbYS0xXSxoPXUuZXF1YWxzKGMpO2lmKHRoaXMucHJlcGFyZUFycmF5R3JvdXAoImxpbmUiLDEwKmEpLDIhPT1hfHwhaCl7dGhpcy5kaXN0YW5jZT0wO3ZhciBmLGQscCxtLHYsZyx5LGI9cix4PWg/ImJ1dHQiOnIsXz0hMDt0aGlzLmUxPXRoaXMuZTI9dGhpcy5lMz0tMSxoJiYoZj10W2EtMl0sdj11LnN1YihmKS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgdz0wO3c8YTt3KyspaWYoIShwPWgmJnc9PT1hLTE/dFsxXTp0W3crMV0pfHwhdFt3XS5lcXVhbHMocCkpe3YmJihtPXYpLGYmJihkPWYpLGY9dFt3XSx2PXA/cC5zdWIoZikuX3VuaXQoKS5fcGVycCgpOm0sbT1tfHx2O3ZhciBNPW0uYWRkKHYpLl91bml0KCksaz1NLngqdi54K00ueSp2LnksQT0xL2ssVD1rPGwmJmQmJnA7aWYoVCYmdz4wKXt2YXIgUz1mLmRpc3QoZCk7aWYoUz4yKm8pe3ZhciBFPWYuc3ViKGYuc3ViKGQpLl9tdWx0KG8vUykuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPUUuZGlzdChkKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoRSx0aGlzLmRpc3RhbmNlLG0ubXVsdCgxKSwwLDAsITEpLGQ9RX19dmFyIEw9ZCYmcCxDPUw/ZTpwP2I6eDtpZihMJiYicm91bmQiPT09QyYmKEE8aT9DPSJtaXRlciI6QTw9MiYmKEM9ImZha2Vyb3VuZCIpKSwibWl0ZXIiPT09QyYmQT5uJiYoQz0iYmV2ZWwiKSwiYmV2ZWwiPT09QyYmKEE+MiYmKEM9ImZsaXBiZXZlbCIpLEE8biYmKEM9Im1pdGVyIikpLGQmJih0aGlzLmRpc3RhbmNlKz1mLmRpc3QoZCkpLCJtaXRlciI9PT1DKU0uX211bHQoQSksdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxNLDAsMCwhMSk7ZWxzZSBpZigiZmxpcGJldmVsIj09PUMpe2lmKEE+MTAwKU09di5jbG9uZSgpO2Vsc2V7dmFyIHo9bS54KnYueS1tLnkqdi54PjA/LTE6MSxJPUEqbS5hZGQodikubWFnKCkvbS5zdWIodikubWFnKCk7TS5fcGVycCgpLl9tdWx0KEkqeil9dGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxNLDAsMCwhMSksdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxNLm11bHQoLTEpLDAsMCwhMSl9ZWxzZSBpZigiYmV2ZWwiPT09Q3x8ImZha2Vyb3VuZCI9PT1DKXt2YXIgRD1tLngqdi55LW0ueSp2Lng+MCxQPS1NYXRoLnNxcnQoQSpBLTEpO2lmKEQ/KHk9MCxnPVApOihnPTAseT1QKSxffHx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZix0aGlzLmRpc3RhbmNlLG0sZyx5LCExKSwiZmFrZXJvdW5kIj09PUMpe2Zvcih2YXIgTyxSPU1hdGguZmxvb3IoOCooLjUtKGstLjUpKSksRj0wO0Y8UjtGKyspTz12Lm11bHQoKEYrMSkvKFIrMSkpLl9hZGQobSkuX3VuaXQoKSx0aGlzLmFkZFBpZVNsaWNlVmVydGV4KGYsdGhpcy5kaXN0YW5jZSxPLEQpO3RoaXMuYWRkUGllU2xpY2VWZXJ0ZXgoZix0aGlzLmRpc3RhbmNlLE0sRCk7Zm9yKHZhciBqPVItMTtqPj0wO2otLSlPPW0ubXVsdCgoaisxKS8oUisxKSkuX2FkZCh2KS5fdW5pdCgpLHRoaXMuYWRkUGllU2xpY2VWZXJ0ZXgoZix0aGlzLmRpc3RhbmNlLE8sRCl9cCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSx2LC1nLC15LCExKX1lbHNlImJ1dHQiPT09Qz8oX3x8dGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxtLDAsMCwhMSkscCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSx2LDAsMCwhMSkpOiJzcXVhcmUiPT09Qz8oX3x8KHRoaXMuYWRkQ3VycmVudFZlcnRleChmLHRoaXMuZGlzdGFuY2UsbSwxLDEsITEpLHRoaXMuZTE9dGhpcy5lMj0tMSkscCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSx2LC0xLC0xLCExKSk6InJvdW5kIj09PUMmJihffHwodGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxtLDAsMCwhMSksdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxtLDEsMSwhMCksdGhpcy5lMT10aGlzLmUyPS0xKSxwJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSx2LC0xLC0xLCEwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZix0aGlzLmRpc3RhbmNlLHYsMCwwLCExKSkpO2lmKFQmJnc8YS0xKXt2YXIgTj1mLmRpc3QocCk7aWYoTj4yKm8pe3ZhciBCPWYuYWRkKHAuc3ViKGYpLl9tdWx0KG8vTikuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPUIuZGlzdChmKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoQix0aGlzLmRpc3RhbmNlLHYubXVsdCgxKSwwLDAsITEpLGY9Qn19Xz0hMX19fX0sbi5wcm90b3R5cGUuYWRkQ3VycmVudFZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scz1hPzE6MCxsPXRoaXMuYXJyYXlHcm91cHMubGluZVt0aGlzLmFycmF5R3JvdXBzLmxpbmUubGVuZ3RoLTFdLGM9bC5sYXlvdXRWZXJ0ZXhBcnJheSxoPWwuZWxlbWVudEFycmF5O289ci5jbG9uZSgpLG4mJm8uX3N1YihyLnBlcnAoKS5fbXVsdChuKSksdGhpcy5lMz10aGlzLmFkZExpbmVWZXJ0ZXgoYyx0LG8scywwLG4sZSksdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmaC5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxvPXIubXVsdCgtMSksaSYmby5fc3ViKHIucGVycCgpLl9tdWx0KGkpKSx0aGlzLmUzPXRoaXMuYWRkTGluZVZlcnRleChjLHQsbyxzLDEsLWksZSksdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmaC5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxlPnUvMiYmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodCx0aGlzLmRpc3RhbmNlLHIsbixpLGEpKX0sbi5wcm90b3R5cGUuYWRkUGllU2xpY2VWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bj8xOjA7cj1yLm11bHQobj8tMToxKTt2YXIgYT10aGlzLmFycmF5R3JvdXBzLmxpbmVbdGhpcy5hcnJheUdyb3Vwcy5saW5lLmxlbmd0aC0xXSxvPWEubGF5b3V0VmVydGV4QXJyYXkscz1hLmVsZW1lbnRBcnJheTt0aGlzLmUzPXRoaXMuYWRkTGluZVZlcnRleChvLHQsciwwLGksMCxlKSx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiZzLmVtcGxhY2VCYWNrKHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxuP3RoaXMuZTI9dGhpcy5lMzp0aGlzLmUxPXRoaXMuZTN9fSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9idWNrZXQiOjMyNywiLi4vbG9hZF9nZW9tZXRyeSI6MzM1fV0sMzMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7by5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLnN5bWJvbFF1YWRzQXJyYXk9dC5zeW1ib2xRdWFkc0FycmF5LHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXk9dC5zeW1ib2xJbnN0YW5jZXNBcnJheSx0aGlzLnNkZkljb25zPXQuc2RmSWNvbnMsdGhpcy5pY29uc05lZWRMaW5lYXI9dC5pY29uc05lZWRMaW5lYXIsdGhpcy5hZGp1c3RlZFRleHRTaXplPXQuYWRqdXN0ZWRUZXh0U2l6ZSx0aGlzLmFkanVzdGVkSWNvblNpemU9dC5hZGp1c3RlZEljb25TaXplLHRoaXMuZm9udHN0YWNrPXQuZm9udHN0YWNrfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEsbyxzLGwsdSxjKXtyZXR1cm4gdC5lbXBsYWNlQmFjayhlLHIsTWF0aC5yb3VuZCg2NCpuKSxNYXRoLnJvdW5kKDY0KmkpLGEvNCxvLzQsMTAqKHV8fDApLGMsMTAqKHN8fDApLDEwKk1hdGgubWluKGx8fDI1LDI1KSl9dmFyIGE9dCgicG9pbnQtZ2VvbWV0cnkiKSxvPXQoIi4uL2J1Y2tldCIpLHM9dCgiLi4vLi4vc3ltYm9sL2FuY2hvciIpLGw9dCgiLi4vLi4vc3ltYm9sL2dldF9hbmNob3JzIiksdT10KCIuLi8uLi91dGlsL3Rva2VuIiksYz10KCIuLi8uLi9zeW1ib2wvcXVhZHMiKSxoPXQoIi4uLy4uL3N5bWJvbC9zaGFwaW5nIiksZj10KCIuLi8uLi9zeW1ib2wvcmVzb2x2ZV90ZXh0IiksZD10KCIuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyIpLHA9dCgiLi4vLi4vc3ltYm9sL2NsaXBfbGluZSIpLG09dCgiLi4vLi4vdXRpbC91dGlsIiksdj10KCIuLi9sb2FkX2dlb21ldHJ5IiksZz10KCIuLi8uLi9zeW1ib2wvY29sbGlzaW9uX2ZlYXR1cmUiKSx5PWguc2hhcGVUZXh0LGI9aC5zaGFwZUljb24seD1jLmdldEdseXBoUXVhZHMsXz1jLmdldEljb25RdWFkcyx3PW8uRVhURU5UO2UuZXhwb3J0cz1uLG4uTUFYX1FVQURTPTY1NTM1LG4ucHJvdG90eXBlPW0uaW5oZXJpdChvLHt9KSxuLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1vLnByb3RvdHlwZS5zZXJpYWxpemUuYXBwbHkodGhpcyk7cmV0dXJuIHQuc2RmSWNvbnM9dGhpcy5zZGZJY29ucyx0Lmljb25zTmVlZExpbmVhcj10aGlzLmljb25zTmVlZExpbmVhcix0LmFkanVzdGVkVGV4dFNpemU9dGhpcy5hZGp1c3RlZFRleHRTaXplLHQuYWRqdXN0ZWRJY29uU2l6ZT10aGlzLmFkanVzdGVkSWNvblNpemUsdC5mb250c3RhY2s9dGhpcy5mb250c3RhY2ssdH07dmFyIE09bmV3IG8uVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX29mZnNldCIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfdGV4dHVyZV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDgifV0pLGs9bmV3IG8uRWxlbWVudEFycmF5VHlwZTtuLnByb3RvdHlwZS5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdC5lbXBsYWNlQmFjayhlLngsZS55LE1hdGgucm91bmQoci54KSxNYXRoLnJvdW5kKHIueSksMTAqbiwxMCppKX0sbi5wcm90b3R5cGUucHJvZ3JhbUludGVyZmFjZXM9e2dseXBoOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6TSxlbGVtZW50QXJyYXlUeXBlOmt9LGljb246e2xheW91dFZlcnRleEFycmF5VHlwZTpNLGVsZW1lbnRBcnJheVR5cGU6a30sY29sbGlzaW9uQm94OntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IG8uVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2V4dHJ1ZGUiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50OCJ9XSl9fSxuLnByb3RvdHlwZS5wb3B1bGF0ZUFycmF5cz1mdW5jdGlvbih0LGUscil7dmFyIG49e2xhc3RJbnRlZ2VyWm9vbToxLzAsbGFzdEludGVnZXJab29tVGltZTowLGxhc3Rab29tOjB9O3RoaXMuYWRqdXN0ZWRUZXh0TWF4U2l6ZT10aGlzLmxheWVyLmdldExheW91dFZhbHVlKCJ0ZXh0LXNpemUiLHt6b29tOjE4LHpvb21IaXN0b3J5Om59KSx0aGlzLmFkanVzdGVkVGV4dFNpemU9dGhpcy5sYXllci5nZXRMYXlvdXRWYWx1ZSgidGV4dC1zaXplIix7em9vbTp0aGlzLnpvb20rMSx6b29tSGlzdG9yeTpufSksdGhpcy5hZGp1c3RlZEljb25NYXhTaXplPXRoaXMubGF5ZXIuZ2V0TGF5b3V0VmFsdWUoImljb24tc2l6ZSIse3pvb206MTgsem9vbUhpc3Rvcnk6bn0pLHRoaXMuYWRqdXN0ZWRJY29uU2l6ZT10aGlzLmxheWVyLmdldExheW91dFZhbHVlKCJpY29uLXNpemUiLHt6b29tOnRoaXMuem9vbSsxLHpvb21IaXN0b3J5Om59KTt2YXIgaT01MTIqdGhpcy5vdmVyc2NhbGluZzt0aGlzLnRpbGVQaXhlbFJhdGlvPXcvaSx0aGlzLmNvbXBhcmVUZXh0PXt9LHRoaXMuaWNvbnNOZWVkTGluZWFyPSExLHRoaXMuc3ltYm9sSW5zdGFuY2VzU3RhcnRJbmRleD10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5Lmxlbmd0aDt2YXIgYT10aGlzLmxheWVyLmxheW91dCxvPXRoaXMuZmVhdHVyZXMscz10aGlzLnRleHRGZWF0dXJlcyxsPS41LGM9LjU7c3dpdGNoKGFbInRleHQtYW5jaG9yIl0pe2Nhc2UicmlnaHQiOmNhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6bD0xO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6bD0wfXN3aXRjaChhWyJ0ZXh0LWFuY2hvciJdKXtjYXNlImJvdHRvbSI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOmM9MTticmVhaztjYXNlInRvcCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOmM9MH1mb3IodmFyIGg9InJpZ2h0Ij09PWFbInRleHQtanVzdGlmeSJdPzE6ImxlZnQiPT09YVsidGV4dC1qdXN0aWZ5Il0/MDouNSxmPTI0KmFbInRleHQtbGluZS1oZWlnaHQiXSxwPSJsaW5lIiE9PWFbInN5bWJvbC1wbGFjZW1lbnQiXT8yNCphWyJ0ZXh0LW1heC13aWR0aCJdOjAsZz0yNCphWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0seD1bMjQqYVsidGV4dC1vZmZzZXQiXVswXSwyNCphWyJ0ZXh0LW9mZnNldCJdWzFdXSxfPXRoaXMuZm9udHN0YWNrPWFbInRleHQtZm9udCJdLmpvaW4oIiwiKSxNPVtdLGs9MDtrPG8ubGVuZ3RoO2srKylNLnB1c2godihvW2tdKSk7aWYoImxpbmUiPT09YVsic3ltYm9sLXBsYWNlbWVudCJdKXt2YXIgQT1kKG8scyxNKTtNPUEuZ2VvbWV0cmllcyxvPUEuZmVhdHVyZXMscz1BLnRleHRGZWF0dXJlc31mb3IodmFyIFQsUyxFPTA7RTxvLmxlbmd0aDtFKyspaWYoTVtFXSl7aWYoVD1zW0VdP3koc1tFXSxlW19dLHAsZixsLGMsaCxnLHgpOm51bGwsYVsiaWNvbi1pbWFnZSJdKXt2YXIgTD11KG9bRV0ucHJvcGVydGllcyxhWyJpY29uLWltYWdlIl0pLEM9cltMXTtTPWIoQyxhKSxDJiYodm9pZCAwPT09dGhpcy5zZGZJY29ucz90aGlzLnNkZkljb25zPUMuc2RmOnRoaXMuc2RmSWNvbnMhPT1DLnNkZiYmbS53YXJuT25jZSgiU3R5bGUgc2hlZXQgd2FybmluZzogQ2Fubm90IG1peCBTREYgYW5kIG5vbi1TREYgaWNvbnMgaW4gb25lIGJ1ZmZlciIpLDEhPT1DLnBpeGVsUmF0aW8/dGhpcy5pY29uc05lZWRMaW5lYXI9ITA6MD09PWFbImljb24tcm90YXRlIl0mJnRoaXMubGF5ZXIuaXNMYXlvdXRWYWx1ZUZlYXR1cmVDb25zdGFudCgiaWNvbi1yb3RhdGUiKXx8KHRoaXMuaWNvbnNOZWVkTGluZWFyPSEwKSl9ZWxzZSBTPW51bGw7KFR8fFMpJiZ0aGlzLmFkZEZlYXR1cmUoTVtFXSxULFMsb1tFXSl9dGhpcy5zeW1ib2xJbnN0YW5jZXNFbmRJbmRleD10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5Lmxlbmd0aCx0aGlzLnBsYWNlRmVhdHVyZXModCx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyksdGhpcy50cmltQXJyYXlzKCl9LG4ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sYXllci5sYXlvdXQsYT10aGlzLmFkanVzdGVkVGV4dFNpemUvMjQsbz12b2lkIDAhPT10aGlzLmFkanVzdGVkVGV4dE1heFNpemU/dGhpcy5hZGp1c3RlZFRleHRNYXhTaXplOnRoaXMuYWRqdXN0ZWRUZXh0U2l6ZSx1PXRoaXMudGlsZVBpeGVsUmF0aW8qYSxjPXRoaXMudGlsZVBpeGVsUmF0aW8qby8yNCxoPXRoaXMudGlsZVBpeGVsUmF0aW8qdGhpcy5hZGp1c3RlZEljb25TaXplLGY9dGhpcy50aWxlUGl4ZWxSYXRpbyppWyJzeW1ib2wtc3BhY2luZyJdLGQ9aVsic3ltYm9sLWF2b2lkLWVkZ2VzIl0sbT1pWyJ0ZXh0LXBhZGRpbmciXSp0aGlzLnRpbGVQaXhlbFJhdGlvLHY9aVsiaWNvbi1wYWRkaW5nIl0qdGhpcy50aWxlUGl4ZWxSYXRpbyxnPWlbInRleHQtbWF4LWFuZ2xlIl0vMTgwKk1hdGguUEkseT0ibWFwIj09PWlbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il0mJiJsaW5lIj09PWlbInN5bWJvbC1wbGFjZW1lbnQiXSxiPSJtYXAiPT09aVsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSYmImxpbmUiPT09aVsic3ltYm9sLXBsYWNlbWVudCJdLHg9aVsidGV4dC1hbGxvdy1vdmVybGFwIl18fGlbImljb24tYWxsb3ctb3ZlcmxhcCJdfHxpWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXXx8aVsiaWNvbi1pZ25vcmUtcGxhY2VtZW50Il0sXz0ibGluZSI9PT1pWyJzeW1ib2wtcGxhY2VtZW50Il0sTT1mLzI7XyYmKHQ9cCh0LDAsMCx3LHcpKTtmb3IodmFyIGs9MDtrPHQubGVuZ3RoO2srKyl7dmFyIEEsVD10W2tdO0E9Xz9sKFQsZixnLGUsciwyNCxjLHRoaXMub3ZlcnNjYWxpbmcsdyk6W25ldyBzKFRbMF0ueCxUWzBdLnksMCldO2Zvcih2YXIgUz0wLEU9QS5sZW5ndGg7UzxFO1MrKyl7dmFyIEw9QVtTXTtpZighKGUmJl8mJnRoaXMuYW5jaG9ySXNUb29DbG9zZShlLnRleHQsTSxMKSkpe3ZhciBDPSEoTC54PDB8fEwueD53fHxMLnk8MHx8TC55PncpO2lmKCFkfHxDKXt2YXIgej1DfHx4O3RoaXMuYWRkU3ltYm9sSW5zdGFuY2UoTCxULGUscix0aGlzLmxheWVyLHosdGhpcy5zeW1ib2xJbnN0YW5jZXNBcnJheS5sZW5ndGgsdGhpcy5jb2xsaXNpb25Cb3hBcnJheSxuLmluZGV4LHRoaXMuc291cmNlTGF5ZXJJbmRleCx0aGlzLmluZGV4LHUsbSx5LGgsdixiLHt6b29tOnRoaXMuem9vbX0sbi5wcm9wZXJ0aWVzKX19fX19LG4ucHJvdG90eXBlLmFuY2hvcklzVG9vQ2xvc2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuY29tcGFyZVRleHQ7aWYodCBpbiBuKXtmb3IodmFyIGk9blt0XSxhPWkubGVuZ3RoLTE7YT49MDthLS0paWYoci5kaXN0KGlbYV0pPGUpcmV0dXJuITB9ZWxzZSBuW3RdPVtdO3JldHVybiBuW3RdLnB1c2gociksITF9LG4ucHJvdG90eXBlLnBsYWNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY3VsYXRlU3R5bGVMYXllcnMoKSx0aGlzLmNyZWF0ZUFycmF5cygpO3ZhciByPXRoaXMubGF5ZXIubGF5b3V0LG49dC5tYXhTY2FsZSxpPSJtYXAiPT09clsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSYmImxpbmUiPT09clsic3ltYm9sLXBsYWNlbWVudCJdLGE9Im1hcCI9PT1yWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdJiYibGluZSI9PT1yWyJzeW1ib2wtcGxhY2VtZW50Il07aWYoclsidGV4dC1hbGxvdy1vdmVybGFwIl18fHJbImljb24tYWxsb3ctb3ZlcmxhcCJdfHxyWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXXx8clsiaWNvbi1pZ25vcmUtcGxhY2VtZW50Il0pe3ZhciBvPXRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkudG9BcnJheSh0aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXgsdGhpcy5zeW1ib2xJbnN0YW5jZXNFbmRJbmRleCkscz10LmFuZ2xlLGw9TWF0aC5zaW4ocyksdT1NYXRoLmNvcyhzKTt0aGlzLnNvcnRlZFN5bWJvbEluc3RhbmNlcz1vLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4obCp0LmFuY2hvclBvaW50WCt1KnQuYW5jaG9yUG9pbnRZfDApLShsKmUuYW5jaG9yUG9pbnRYK3UqZS5hbmNob3JQb2ludFl8MCl8fGUuaW5kZXgtdC5pbmRleH0pfWZvcih2YXIgYz10aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXg7Yzx0aGlzLnN5bWJvbEluc3RhbmNlc0VuZEluZGV4O2MrKyl7dmFyIGg9dGhpcy5zb3J0ZWRTeW1ib2xJbnN0YW5jZXM/dGhpcy5zb3J0ZWRTeW1ib2xJbnN0YW5jZXNbYy10aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXhdOnRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkuZ2V0KGMpLGY9e2JveFN0YXJ0SW5kZXg6aC50ZXh0Qm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpoLnRleHRCb3hFbmRJbmRleH0sZD17Ym94U3RhcnRJbmRleDpoLmljb25Cb3hTdGFydEluZGV4LGJveEVuZEluZGV4OmguaWNvbkJveEVuZEluZGV4fSxwPSEoaC50ZXh0Qm94U3RhcnRJbmRleD09PWgudGV4dEJveEVuZEluZGV4KSxtPSEoaC5pY29uQm94U3RhcnRJbmRleD09PWguaWNvbkJveEVuZEluZGV4KSx2PXJbInRleHQtb3B0aW9uYWwiXXx8IXAsZz1yWyJpY29uLW9wdGlvbmFsIl18fCFtLHk9cD90LnBsYWNlQ29sbGlzaW9uRmVhdHVyZShmLHJbInRleHQtYWxsb3ctb3ZlcmxhcCJdLHJbInN5bWJvbC1hdm9pZC1lZGdlcyJdKTp0Lm1pblNjYWxlLGI9bT90LnBsYWNlQ29sbGlzaW9uRmVhdHVyZShkLHJbImljb24tYWxsb3ctb3ZlcmxhcCJdLHJbInN5bWJvbC1hdm9pZC1lZGdlcyJdKTp0Lm1pblNjYWxlO3Z8fGc/IWcmJnk/eT1NYXRoLm1heChiLHkpOiF2JiZiJiYoYj1NYXRoLm1heChiLHkpKTpiPXk9TWF0aC5tYXgoYix5KSxwJiYodC5pbnNlcnRDb2xsaXNpb25GZWF0dXJlKGYseSxyWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXSkseTw9biYmdGhpcy5hZGRTeW1ib2xzKCJnbHlwaCIsaC5nbHlwaFF1YWRTdGFydEluZGV4LGguZ2x5cGhRdWFkRW5kSW5kZXgseSxyWyJ0ZXh0LWtlZXAtdXByaWdodCJdLGksdC5hbmdsZSkpLG0mJih0Lmluc2VydENvbGxpc2lvbkZlYXR1cmUoZCxiLHJbImljb24taWdub3JlLXBsYWNlbWVudCJdKSxiPD1uJiZ0aGlzLmFkZFN5bWJvbHMoImljb24iLGguaWNvblF1YWRTdGFydEluZGV4LGguaWNvblF1YWRFbmRJbmRleCxiLHJbImljb24ta2VlcC11cHJpZ2h0Il0sYSx0LmFuZ2xlKSl9ZSYmdGhpcy5hZGRUb0RlYnVnQnVmZmVycyh0KX0sbi5wcm90b3R5cGUuYWRkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGEsbyxzKXtmb3IodmFyIGw9dGhpcy5wcmVwYXJlQXJyYXlHcm91cCh0LDQqKHItZSkpLHU9bC5lbGVtZW50QXJyYXksYz1sLmxheW91dFZlcnRleEFycmF5LGg9dGhpcy56b29tLGY9TWF0aC5tYXgoTWF0aC5sb2cobikvTWF0aC5MTjIraCwwKSxkPWU7ZDxyO2QrKyl7dmFyIHA9dGhpcy5zeW1ib2xRdWFkc0FycmF5LmdldChkKS5TeW1ib2xRdWFkLG09KHAuYW5jaG9yQW5nbGUrcytNYXRoLlBJKSUoMipNYXRoLlBJKTtpZighKGEmJm8mJihtPD1NYXRoLlBJLzJ8fG0+MypNYXRoLlBJLzIpKSl7dmFyIHY9cC50bCxnPXAudHIseT1wLmJsLGI9cC5icix4PXAudGV4LF89cC5hbmNob3JQb2ludCx3PU1hdGgubWF4KGgrTWF0aC5sb2cocC5taW5TY2FsZSkvTWF0aC5MTjIsZiksTT1NYXRoLm1pbihoK01hdGgubG9nKHAubWF4U2NhbGUpL01hdGguTE4yLDI1KTtpZighKE08PXcpKXt3PT09ZiYmKHc9MCk7dmFyIGs9TWF0aC5yb3VuZChwLmdseXBoQW5nbGUvKDIqTWF0aC5QSSkqMjU2KSxBPWkoYyxfLngsXy55LHYueCx2LnkseC54LHgueSx3LE0sZixrKTtpKGMsXy54LF8ueSxnLngsZy55LHgueCt4LncseC55LHcsTSxmLGspLGkoYyxfLngsXy55LHkueCx5LnkseC54LHgueSt4LmgsdyxNLGYsayksaShjLF8ueCxfLnksYi54LGIueSx4LngreC53LHgueSt4LmgsdyxNLGYsayksdS5lbXBsYWNlQmFjayhBLEErMSxBKzIpLHUuZW1wbGFjZUJhY2soQSsxLEErMixBKzMpfX19fSxuLnByb3RvdHlwZS51cGRhdGVJY29ucz1mdW5jdGlvbih0KXt0aGlzLnJlY2FsY3VsYXRlU3R5bGVMYXllcnMoKTt2YXIgZT10aGlzLmxheWVyLmxheW91dFsiaWNvbi1pbWFnZSJdO2lmKGUpZm9yKHZhciByPTA7cjx0aGlzLmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBuPXUodGhpcy5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzLGUpO24mJih0W25dPSEwKX19LG4ucHJvdG90eXBlLnVwZGF0ZUZvbnQ9ZnVuY3Rpb24odCl7dGhpcy5yZWNhbGN1bGF0ZVN0eWxlTGF5ZXJzKCk7dmFyIGU9dGhpcy5sYXllci5sYXlvdXRbInRleHQtZm9udCJdLHI9dFtlXT10W2VdfHx7fTt0aGlzLnRleHRGZWF0dXJlcz1mKHRoaXMuZmVhdHVyZXMsdGhpcy5sYXllci5sYXlvdXQscil9LG4ucHJvdG90eXBlLmFkZFRvRGVidWdCdWZmZXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnByZXBhcmVBcnJheUdyb3VwKCJjb2xsaXNpb25Cb3giLDApLHI9ZS5sYXlvdXRWZXJ0ZXhBcnJheSxuPS10LmFuZ2xlLGk9dC55U3RyZXRjaCxvPXRoaXMuc3ltYm9sSW5zdGFuY2VzU3RhcnRJbmRleDtvPHRoaXMuc3ltYm9sSW5zdGFuY2VzRW5kSW5kZXg7bysrKXt2YXIgcz10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5LmdldChvKTtzLnRleHRDb2xsaXNpb25GZWF0dXJlPXtib3hTdGFydEluZGV4OnMudGV4dEJveFN0YXJ0SW5kZXgsYm94RW5kSW5kZXg6cy50ZXh0Qm94RW5kSW5kZXh9LHMuaWNvbkNvbGxpc2lvbkZlYXR1cmU9e2JveFN0YXJ0SW5kZXg6cy5pY29uQm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpzLmljb25Cb3hFbmRJbmRleH07Zm9yKHZhciBsPTA7bDwyO2wrKyl7dmFyIHU9c1swPT09bD8idGV4dENvbGxpc2lvbkZlYXR1cmUiOiJpY29uQ29sbGlzaW9uRmVhdHVyZSJdO2lmKHUpZm9yKHZhciBjPXUuYm94U3RhcnRJbmRleDtjPHUuYm94RW5kSW5kZXg7YysrKXt2YXIgaD10aGlzLmNvbGxpc2lvbkJveEFycmF5LmdldChjKSxmPWguYW5jaG9yUG9pbnQsZD1uZXcgYShoLngxLGgueTEqaSkuX3JvdGF0ZShuKSxwPW5ldyBhKGgueDIsaC55MSppKS5fcm90YXRlKG4pLG09bmV3IGEoaC54MSxoLnkyKmkpLl9yb3RhdGUobiksdj1uZXcgYShoLngyLGgueTIqaSkuX3JvdGF0ZShuKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMjUsdGhpcy56b29tK01hdGgubG9nKGgubWF4U2NhbGUpL01hdGguTE4yKSkseT1NYXRoLm1heCgwLE1hdGgubWluKDI1LHRoaXMuem9vbStNYXRoLmxvZyhoLnBsYWNlbWVudFNjYWxlKS9NYXRoLkxOMikpO3RoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsZixkLGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixmLHAsZyx5KSx0aGlzLmFkZENvbGxpc2lvbkJveFZlcnRleChyLGYscCxnLHkpLHRoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsZix2LGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixmLHYsZyx5KSx0aGlzLmFkZENvbGxpc2lvbkJveFZlcnRleChyLGYsbSxnLHkpLHRoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsZixtLGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixmLGQsZyx5KX19fX0sbi5wcm90b3R5cGUuYWRkU3ltYm9sSW5zdGFuY2U9ZnVuY3Rpb24odCxlLHIsaSxhLG8scyxsLHUsYyxoLGYsZCxwLHYseSxiLHcsTSl7dmFyIGssQSxULFMsRSxMLEMsejtpZihyJiYoQz1vP3godCxyLGYsZSxhLHApOltdLEU9bmV3IGcobCxlLHQsdSxjLGgscixmLGQscCwhMSkpLGs9dGhpcy5zeW1ib2xRdWFkc0FycmF5Lmxlbmd0aCxDJiZDLmxlbmd0aClmb3IodmFyIEk9MDtJPEMubGVuZ3RoO0krKyl0aGlzLmFkZFN5bWJvbFF1YWQoQ1tJXSk7QT10aGlzLnN5bWJvbFF1YWRzQXJyYXkubGVuZ3RoO3ZhciBEPUU/RS5ib3hTdGFydEluZGV4OnRoaXMuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLFA9RT9FLmJveEVuZEluZGV4OnRoaXMuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO2kmJih6PW8/Xyh0LGksdixlLGEsYixyLHcsTSk6W10sTD1uZXcgZyhsLGUsdCx1LGMsaCxpLHYseSxiLCEwKSksVD10aGlzLnN5bWJvbFF1YWRzQXJyYXkubGVuZ3RoLHomJjE9PT16Lmxlbmd0aCYmdGhpcy5hZGRTeW1ib2xRdWFkKHpbMF0pLFM9dGhpcy5zeW1ib2xRdWFkc0FycmF5Lmxlbmd0aDt2YXIgTz1MP0wuYm94U3RhcnRJbmRleDp0aGlzLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxSPUw/TC5ib3hFbmRJbmRleDp0aGlzLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtyZXR1cm4gUz5uLk1BWF9RVUFEUyYmbS53YXJuT25jZSgiVG9vIG1hbnkgc3ltYm9scyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwNyIpLEE+bi5NQVhfUVVBRFMmJm0ud2Fybk9uY2UoIlRvbyBtYW55IGdseXBocyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwNyIpLHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkuZW1wbGFjZUJhY2soRCxQLE8sUixrLEEsVCxTLHQueCx0Lnkscyl9LG4ucHJvdG90eXBlLmFkZFN5bWJvbFF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3ltYm9sUXVhZHNBcnJheS5lbXBsYWNlQmFjayh0LmFuY2hvclBvaW50LngsdC5hbmNob3JQb2ludC55LHQudGwueCx0LnRsLnksdC50ci54LHQudHIueSx0LmJsLngsdC5ibC55LHQuYnIueCx0LmJyLnksdC50ZXguaCx0LnRleC53LHQudGV4LngsdC50ZXgueSx0LmFuY2hvckFuZ2xlLHQuZ2x5cGhBbmdsZSx0Lm1heFNjYWxlLHQubWluU2NhbGUpfX0seyIuLi8uLi9zeW1ib2wvYW5jaG9yIjozODksIi4uLy4uL3N5bWJvbC9jbGlwX2xpbmUiOjM5MSwiLi4vLi4vc3ltYm9sL2NvbGxpc2lvbl9mZWF0dXJlIjozOTMsIi4uLy4uL3N5bWJvbC9nZXRfYW5jaG9ycyI6Mzk1LCIuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyI6Mzk4LCIuLi8uLi9zeW1ib2wvcXVhZHMiOjM5OSwiLi4vLi4vc3ltYm9sL3Jlc29sdmVfdGV4dCI6NDAwLCIuLi8uLi9zeW1ib2wvc2hhcGluZyI6NDAxLCIuLi8uLi91dGlsL3Rva2VuIjo0MzksIi4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9idWNrZXQiOjMyNywiLi4vbG9hZF9nZW9tZXRyeSI6MzM1LCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sMzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuYXJyYXlCdWZmZXI9dC5hcnJheUJ1ZmZlcix0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLmF0dHJpYnV0ZXM9ZS5tZW1iZXJzLHRoaXMuaXRlbVNpemU9ZS5ieXRlc1BlckVsZW1lbnQsdGhpcy50eXBlPXIsdGhpcy5hcnJheVR5cGU9ZX1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy50eXBlXTt0aGlzLmJ1ZmZlcj90LmJpbmRCdWZmZXIoZSx0aGlzLmJ1ZmZlcik6KHRoaXMuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUsdGhpcy5idWZmZXIpLHQuYnVmZmVyRGF0YShlLHRoaXMuYXJyYXlCdWZmZXIsdC5TVEFUSUNfRFJBVyksdGhpcy5hcnJheUJ1ZmZlcj1udWxsKX07dmFyIGk9e0ludDg6IkJZVEUiLFVpbnQ4OiJVTlNJR05FRF9CWVRFIixJbnQxNjoiU0hPUlQiLFVpbnQxNjoiVU5TSUdORURfU0hPUlQifTtuLnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYXR0cmlidXRlc1tyXSxhPWVbbi5uYW1lXTt2b2lkIDAhPT1hJiZ0LnZlcnRleEF0dHJpYlBvaW50ZXIoYSxuLmNvbXBvbmVudHMsdFtpW24udHlwZV1dLCExLHRoaXMuYXJyYXlUeXBlLmJ5dGVzUGVyRWxlbWVudCxuLm9mZnNldCl9fSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuYnVmZmVyJiZ0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcil9LG4uQnVmZmVyVHlwZT17VkVSVEVYOiJBUlJBWV9CVUZGRVIiLEVMRU1FTlQ6IkVMRU1FTlRfQVJSQVlfQlVGRkVSIn19LHt9XSwzMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPW5ldyBhKHQubGF5b3V0VmVydGV4QXJyYXksZS5sYXlvdXRWZXJ0ZXhBcnJheVR5cGUsYS5CdWZmZXJUeXBlLlZFUlRFWCksdC5lbGVtZW50QXJyYXkmJih0aGlzLmVsZW1lbnRCdWZmZXI9bmV3IGEodC5lbGVtZW50QXJyYXksZS5lbGVtZW50QXJyYXlUeXBlLGEuQnVmZmVyVHlwZS5FTEVNRU5UKSk7dmFyIHIsbj10aGlzLnZhb3M9e307dC5lbGVtZW50QXJyYXkyJiYodGhpcy5lbGVtZW50QnVmZmVyMj1uZXcgYSh0LmVsZW1lbnRBcnJheTIsZS5lbGVtZW50QXJyYXlUeXBlMixhLkJ1ZmZlclR5cGUuRUxFTUVOVCkscj10aGlzLnNlY29uZFZhb3M9e30pLHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzPWkubWFwT2JqZWN0KHQucGFpbnRWZXJ0ZXhBcnJheXMsZnVuY3Rpb24oaSxzKXtyZXR1cm4gbltzXT1uZXcgbyx0LmVsZW1lbnRBcnJheTImJihyW3NdPW5ldyBvKSxuZXcgYShpLGUucGFpbnRWZXJ0ZXhBcnJheVR5cGVzW3NdLGEuQnVmZmVyVHlwZS5WRVJURVgpfSl9dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuL2J1ZmZlciIpLG89dCgiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3kodCksdGhpcy5lbGVtZW50QnVmZmVyJiZ0aGlzLmVsZW1lbnRCdWZmZXIuZGVzdHJveSh0KSx0aGlzLmVsZW1lbnRCdWZmZXIyJiZ0aGlzLmVsZW1lbnRCdWZmZXIyLmRlc3Ryb3kodCk7Zm9yKHZhciBlIGluIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzKXRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzW2VdLmRlc3Ryb3kodCk7Zm9yKHZhciByIGluIHRoaXMudmFvcyl0aGlzLnZhb3Nbcl0uZGVzdHJveSh0KTtmb3IodmFyIG4gaW4gdGhpcy5zZWNvbmRWYW9zKXRoaXMuc2Vjb25kVmFvc1tuXS5kZXN0cm95KHQpfX0seyIuLi9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdCI6MzU1LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9idWZmZXIiOjMzMn1dLDMzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtpZih0LmdyaWQpe3ZhciBuPXQsaT1lO3Q9bi5jb29yZCxlPW4ub3ZlcnNjYWxpbmcsdGhpcy5ncmlkPW5ldyBwKG4uZ3JpZCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1uZXcgayhuLmZlYXR1cmVJbmRleEFycmF5KSx0aGlzLnJhd1RpbGVEYXRhPWksdGhpcy5idWNrZXRMYXllcklEcz1uLmJ1Y2tldExheWVySURzfWVsc2UgdGhpcy5ncmlkPW5ldyBwKGgsMTYsMCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1uZXcgazt0aGlzLmNvb3JkPXQsdGhpcy5vdmVyc2NhbGluZz1lLHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LU1hdGgubG9nKGUpL01hdGguTE4yLHRoaXMuc2V0Q29sbGlzaW9uVGlsZShyKX1mdW5jdGlvbiBpKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBlLXR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdFsibGluZS1nYXAtd2lkdGgiXT4wP3RbImxpbmUtZ2FwLXdpZHRoIl0rMip0WyJsaW5lLXdpZHRoIl06dFsibGluZS13aWR0aCJdfWZ1bmN0aW9uIHModCxlLHIsbixpKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7ZT11LmNvbnZlcnQoZSksInZpZXdwb3J0Ij09PXImJmUuX3JvdGF0ZSgtbik7Zm9yKHZhciBhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRbb10sbD1bXSxjPTA7YzxzLmxlbmd0aDtjKyspbC5wdXNoKHNbY10uc3ViKGUuX211bHQoaSkpKTthLnB1c2gobCl9cmV0dXJuIGF9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1bXSxuPW5ldyB1KDAsMCksaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzLTFdLGM9YVtzXSxoPWFbcysxXSxmPTA9PT1zP246Yy5zdWIobCkuX3VuaXQoKS5fcGVycCgpLGQ9cz09PWEubGVuZ3RoLTE/bjpoLnN1YihjKS5fdW5pdCgpLl9wZXJwKCkscD1mLl9hZGQoZCkuX3VuaXQoKSxtPXAueCpkLngrcC55KmQueTtwLl9tdWx0KDEvbSksby5wdXNoKHAuX211bHQoZSkuX2FkZChjKSl9ci5wdXNoKG8pfXJldHVybiByfXZhciB1PXQoInBvaW50LWdlb21ldHJ5IiksYz10KCIuL2xvYWRfZ2VvbWV0cnkiKSxoPXQoIi4vYnVja2V0IikuRVhURU5ULGY9dCgiZmVhdHVyZS1maWx0ZXIiKSxkPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IikscD10KCJncmlkLWluZGV4IiksbT10KCIuLi91dGlsL2RpY3Rpb25hcnlfY29kZXIiKSx2PXQoInZlY3Rvci10aWxlIiksZz10KCJwYmYiKSx5PXQoIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIiksYj10KCIuLi91dGlsL3V0aWwiKS5hcnJheXNJbnRlcnNlY3QseD10KCIuLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyIpLF89eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aVBvaW50LHc9eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uLE09eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUsaz1uZXcgZCh7bWVtYmVyczpbe3R5cGU6IlVpbnQzMiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToic291cmNlTGF5ZXJJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImJ1Y2tldEluZGV4In1dfSk7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO3RoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2soZSxyLG4pO2Zvcih2YXIgYT1jKHQpLG89MDtvPGEubGVuZ3RoO28rKyl7Zm9yKHZhciBzPWFbb10sbD1bMS8wLDEvMCwtMS8wLC0xLzBdLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XTtsWzBdPU1hdGgubWluKGxbMF0saC54KSxsWzFdPU1hdGgubWluKGxbMV0saC55KSxsWzJdPU1hdGgubWF4KGxbMl0saC54KSxsWzNdPU1hdGgubWF4KGxbM10saC55KX10aGlzLmdyaWQuaW5zZXJ0KGksbFswXSxsWzFdLGxbMl0sbFszXSl9fSxuLnByb3RvdHlwZS5zZXRDb2xsaXNpb25UaWxlPWZ1bmN0aW9uKHQpe3RoaXMuY29sbGlzaW9uVGlsZT10fSxuLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17Y29vcmQ6dGhpcy5jb29yZCxvdmVyc2NhbGluZzp0aGlzLm92ZXJzY2FsaW5nLGdyaWQ6dGhpcy5ncmlkLnRvQXJyYXlCdWZmZXIoKSxmZWF0dXJlSW5kZXhBcnJheTp0aGlzLmZlYXR1cmVJbmRleEFycmF5LnNlcmlhbGl6ZSgpLGJ1Y2tldExheWVySURzOnRoaXMuYnVja2V0TGF5ZXJJRHN9O3JldHVybntkYXRhOnQsdHJhbnNmZXJhYmxlczpbdC5ncmlkLHQuZmVhdHVyZUluZGV4QXJyYXkuYXJyYXlCdWZmZXJdfX0sbi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlKXt0aGlzLnZ0TGF5ZXJzfHwodGhpcy52dExheWVycz1uZXcgdi5WZWN0b3JUaWxlKG5ldyBnKG5ldyBVaW50OEFycmF5KHRoaXMucmF3VGlsZURhdGEpKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgbSh0aGlzLnZ0TGF5ZXJzP09iamVjdC5rZXlzKHRoaXMudnRMYXllcnMpLnNvcnQoKTpbIl9nZW9qc29uVGlsZUxheWVyIl0pKTt2YXIgcj17fSxuPXQucGFyYW1zfHx7fSxzPWgvdC50aWxlU2l6ZS90LnNjYWxlLGw9ZihuLmZpbHRlciksYz0wO2Zvcih2YXIgZCBpbiBlKXt2YXIgcD1lW2RdLHk9cC5wYWludCxiPTA7ImxpbmUiPT09cC50eXBlP2I9byh5KS8yK01hdGguYWJzKHlbImxpbmUtb2Zmc2V0Il0pK2koeVsibGluZS10cmFuc2xhdGUiXSk6ImZpbGwiPT09cC50eXBlP2I9aSh5WyJmaWxsLXRyYW5zbGF0ZSJdKToiY2lyY2xlIj09PXAudHlwZSYmKGI9eVsiY2lyY2xlLXJhZGl1cyJdK2koeVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSksYz1NYXRoLm1heChjLGIqcyl9Zm9yKHZhciB4PXQucXVlcnlHZW9tZXRyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh0LngsdC55KX0pfSksXz0xLzAsdz0xLzAsTT0tMS8wLGs9LTEvMCxBPTA7QTx4Lmxlbmd0aDtBKyspZm9yKHZhciBUPXhbQV0sUz0wO1M8VC5sZW5ndGg7UysrKXt2YXIgRT1UW1NdO189TWF0aC5taW4oXyxFLngpLHc9TWF0aC5taW4odyxFLnkpLE09TWF0aC5tYXgoTSxFLngpLGs9TWF0aC5tYXgoayxFLnkpfXZhciBMPXRoaXMuZ3JpZC5xdWVyeShfLWMsdy1jLE0rYyxrK2MpO0wuc29ydChhKSx0aGlzLmZpbHRlck1hdGNoaW5nKHIsTCx0aGlzLmZlYXR1cmVJbmRleEFycmF5LHgsbCxuLmxheWVycyxlLHQuYmVhcmluZyxzKTt2YXIgQz10aGlzLmNvbGxpc2lvblRpbGUucXVlcnlSZW5kZXJlZFN5bWJvbHMoXyx3LE0sayx0LnNjYWxlKTtyZXR1cm4gQy5zb3J0KCksdGhpcy5maWx0ZXJNYXRjaGluZyhyLEMsdGhpcy5jb2xsaXNpb25UaWxlLmNvbGxpc2lvbkJveEFycmF5LHgsbCxuLmxheWVycyxlLHQuYmVhcmluZyxzKSxyfSxuLnByb3RvdHlwZS5maWx0ZXJNYXRjaGluZz1mdW5jdGlvbih0LGUscixuLGksYSx1LGgsZil7Zm9yKHZhciBkLHA9MDtwPGUubGVuZ3RoO3ArKyl7dmFyIG09ZVtwXTtpZihtIT09ZCl7ZD1tO3ZhciB2PXIuZ2V0KG0pLGc9dGhpcy5idWNrZXRMYXllcklEc1t2LmJ1Y2tldEluZGV4XTtpZighYXx8YihhLGcpKXt2YXIgeD10aGlzLnNvdXJjZUxheWVyQ29kZXIuZGVjb2RlKHYuc291cmNlTGF5ZXJJbmRleCksaz10aGlzLnZ0TGF5ZXJzW3hdLEE9ay5mZWF0dXJlKHYuZmVhdHVyZUluZGV4KTtpZihpKEEpKWZvcih2YXIgVD1udWxsLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIEU9Z1tTXTtpZighKGEmJmEuaW5kZXhPZihFKTwwKSl7dmFyIEw9dVtFXTtpZihMKXt2YXIgQztpZigic3ltYm9sIiE9PUwudHlwZSl7VHx8KFQ9YyhBKSk7dmFyIHo9TC5wYWludDtpZigibGluZSI9PT1MLnR5cGUpe0M9cyhuLHpbImxpbmUtdHJhbnNsYXRlIl0selsibGluZS10cmFuc2xhdGUtYW5jaG9yIl0saCxmKTt2YXIgST1vKHopLzIqZjtpZih6WyJsaW5lLW9mZnNldCJdJiYoVD1sKFQselsibGluZS1vZmZzZXQiXSpmKSksIU0oQyxULEkpKWNvbnRpbnVlfWVsc2UgaWYoImZpbGwiPT09TC50eXBlKXtpZihDPXMobix6WyJmaWxsLXRyYW5zbGF0ZSJdLHpbImZpbGwtdHJhbnNsYXRlLWFuY2hvciJdLGgsZiksIXcoQyxUKSljb250aW51ZX1lbHNlIGlmKCJjaXJjbGUiPT09TC50eXBlKXtDPXMobix6WyJjaXJjbGUtdHJhbnNsYXRlIl0selsiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiXSxoLGYpO3ZhciBEPXpbImNpcmNsZS1yYWRpdXMiXSpmO2lmKCFfKEMsVCxEKSljb250aW51ZX19dmFyIFA9bmV3IHkoQSx0aGlzLnosdGhpcy54LHRoaXMueSk7UC5sYXllcj1MLnNlcmlhbGl6ZSh7aW5jbHVkZVJlZlByb3BlcnRpZXM6ITB9KTt2YXIgTz10W0VdO3ZvaWQgMD09PU8mJihPPXRbRV09W10pLE8ucHVzaChQKX19fX19fX19LHsiLi4vdXRpbC9kaWN0aW9uYXJ5X2NvZGVyIjo0MzAsIi4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzIjo0MzUsIi4uL3V0aWwvc3RydWN0X2FycmF5Ijo0MzgsIi4uL3V0aWwvdXRpbCI6NDQwLCIuLi91dGlsL3ZlY3RvcnRpbGVfdG9fZ2VvanNvbiI6NDQxLCIuL2J1Y2tldCI6MzI3LCIuL2xvYWRfZ2VvbWV0cnkiOjMzNSwiZmVhdHVyZS1maWx0ZXIiOjEzMCwiZ3JpZC1pbmRleCI6Mjg1LHBiZjo0NzYsInBvaW50LWdlb21ldHJ5Ijo0ODIsInZlY3Rvci10aWxlIjo1NDh9XSwzMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm57bWluOi0xKk1hdGgucG93KDIsdC0xKSxtYXg6TWF0aC5wb3coMix0LTEpLTF9fXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi9idWNrZXQiKS5FWFRFTlQsbz10KCJhc3NlcnQiKSxzPXsxNTpuKDE1KSwxNjpuKDE2KX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9c1tlfHwxNl07byhyKTtmb3IodmFyIG49YS90LmV4dGVudCxsPXQubG9hZEdlb21ldHJ5KCksdT0wO3U8bC5sZW5ndGg7dSsrKWZvcih2YXIgYz1sW3VdLGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGY9Y1toXTtmLng9TWF0aC5yb3VuZChmLngqbiksZi55PU1hdGgucm91bmQoZi55Km4pLChmLng8ci5taW58fGYueD5yLm1heHx8Zi55PHIubWlufHxmLnk+ci5tYXgpJiZpLndhcm5PbmNlKCJHZW9tZXRyeSBleGNlZWRzIGFsbG93ZWQgZXh0ZW50LCByZWR1Y2UgeW91ciB2ZWN0b3IgdGlsZSBidWZmZXIgc2l6ZSIpfXJldHVybiBsfX0seyIuLi91dGlsL3V0aWwiOjQ0MCwiLi9idWNrZXQiOjMyNyxhc3NlcnQ6NDV9XSwzMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5jb2x1bW49dCx0aGlzLnJvdz1lLHRoaXMuem9vbT1yfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLmNvbHVtbix0aGlzLnJvdyx0aGlzLnpvb20pfSx6b29tVG86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fem9vbVRvKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxfem9vbVRvOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDIsdC10aGlzLnpvb20pO3JldHVybiB0aGlzLmNvbHVtbio9ZSx0aGlzLnJvdyo9ZSx0aGlzLnpvb209dCx0aGlzfSxfc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0PXQuem9vbVRvKHRoaXMuem9vbSksdGhpcy5jb2x1bW4tPXQuY29sdW1uLHRoaXMucm93LT10LnJvdyx0aGlzfX19LHt9XSwzMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgTG5nTGF0IG9iamVjdDogKCIrdCsiLCAiK2UrIikiKTtpZih0aGlzLmxuZz0rdCx0aGlzLmxhdD0rZSx0aGlzLmxhdD45MHx8dGhpcy5sYXQ8LTkwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwIil9ZS5leHBvcnRzPW47dmFyIGk9dCgiLi4vdXRpbC91dGlsIikud3JhcDtuLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKGkodGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLmxuZyx0aGlzLmxhdF19LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdCgiK3RoaXMubG5nKyIsICIrdGhpcy5sYXQrIikifSxuLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgbih0WzBdLHRbMV0pOnR9fSx7Ii4uL3V0aWwvdXRpbCI6NDQwfV0sMzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0JiYoZT90aGlzLmV4dGVuZCh0KS5leHRlbmQoZSk6ND09PXQubGVuZ3RoP3RoaXMuZXh0ZW5kKFt0WzBdLHRbMV1dKS5leHRlbmQoW3RbMl0sdFszXV0pOnRoaXMuZXh0ZW5kKHRbMF0pLmV4dGVuZCh0WzFdKSl9ZS5leHBvcnRzPW47dmFyIGk9dCgiLi9sbmdfbGF0Iik7bi5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXt2YXIgZSxyLGE9dGhpcy5fc3csbz10aGlzLl9uZTtpZih0IGluc3RhbmNlb2YgaSllPXQscj10O2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgbikpcmV0dXJuIHQ/dGhpcy5leHRlbmQoaS5jb252ZXJ0KHQpfHxuLmNvbnZlcnQodCkpOnRoaXM7aWYoZT10Ll9zdyxyPXQuX25lLCFlfHwhcilyZXR1cm4gdGhpc31yZXR1cm4gYXx8bz8oYS5sbmc9TWF0aC5taW4oZS5sbmcsYS5sbmcpLGEubGF0PU1hdGgubWluKGUubGF0LGEubGF0KSxvLmxuZz1NYXRoLm1heChyLmxuZyxvLmxuZyksby5sYXQ9TWF0aC5tYXgoci5sYXQsby5sYXQpKToodGhpcy5fc3c9bmV3IGkoZS5sbmcsZS5sYXQpLHRoaXMuX25lPW5ldyBpKHIubG5nLHIubGF0KSksdGhpc30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKCh0aGlzLl9zdy5sbmcrdGhpcy5fbmUubG5nKS8yLCh0aGlzLl9zdy5sYXQrdGhpcy5fbmUubGF0KS8yKX0sZ2V0U291dGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3fSxnZXROb3J0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV9LGdldE5vcnRoV2VzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLmdldFdlc3QoKSx0aGlzLmdldE5vcnRoKCkpfSxnZXRTb3V0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkodGhpcy5nZXRFYXN0KCksdGhpcy5nZXRTb3V0aCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sbmd9LGdldFNvdXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxhdH0sZ2V0RWFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZS5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxhdH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVyblt0aGlzLl9zdy50b0FycmF5KCksdGhpcy5fbmUudG9BcnJheSgpXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iTG5nTGF0Qm91bmRzKCIrdGhpcy5fc3cudG9TdHJpbmcoKSsiLCAiK3RoaXMuX25lLnRvU3RyaW5nKCkrIikifX0sbi5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKHQpfX0sewoiLi9sbmdfbGF0IjozMzd9XSwzMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMudGlsZVNpemU9NTEyLHRoaXMuX21pblpvb209dHx8MCx0aGlzLl9tYXhab29tPWV8fDIyLHRoaXMubGF0UmFuZ2U9Wy04NS4wNTExMyw4NS4wNTExM10sdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5fY2VudGVyPW5ldyBpKDAsMCksdGhpcy56b29tPTAsdGhpcy5hbmdsZT0wLHRoaXMuX2FsdGl0dWRlPTEuNSx0aGlzLl9waXRjaD0wLHRoaXMuX3VubW9kaWZpZWQ9ITB9dmFyIGk9dCgiLi9sbmdfbGF0IiksYT10KCJwb2ludC1nZW9tZXRyeSIpLG89dCgiLi9jb29yZGluYXRlIikscz10KCIuLi91dGlsL3V0aWwiKS53cmFwLGw9dCgiLi4vdXRpbC9pbnRlcnBvbGF0ZSIpLHU9dCgiLi4vc291cmNlL3RpbGVfY29vcmQiKSxjPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5ULGg9dCgiZ2wtbWF0cml4IiksZj1oLnZlYzQsZD1oLm1hdDQscD1oLm1hdDI7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e2dldCBtaW5ab29tKCl7cmV0dXJuIHRoaXMuX21pblpvb219LHNldCBtaW5ab29tKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxnZXQgbWF4Wm9vbSgpe3JldHVybiB0aGlzLl9tYXhab29tfSxzZXQgbWF4Wm9vbSh0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sZ2V0IHdvcmxkU2l6ZSgpe3JldHVybiB0aGlzLnRpbGVTaXplKnRoaXMuc2NhbGV9LGdldCBjZW50ZXJQb2ludCgpe3JldHVybiB0aGlzLnNpemUuX2RpdigyKX0sZ2V0IHNpemUoKXtyZXR1cm4gbmV3IGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LGdldCBiZWFyaW5nKCl7cmV0dXJuLXRoaXMuYW5nbGUvTWF0aC5QSSoxODB9LHNldCBiZWFyaW5nKHQpe3ZhciBlPS1zKHQsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPWUsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD1wLmNyZWF0ZSgpLHAucm90YXRlKHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLmFuZ2xlKSl9LGdldCBwaXRjaCgpe3JldHVybiB0aGlzLl9waXRjaC9NYXRoLlBJKjE4MH0sc2V0IHBpdGNoKHQpe3ZhciBlPU1hdGgubWluKDYwLHQpLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ZSYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9ZSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LGdldCBhbHRpdHVkZSgpe3JldHVybiB0aGlzLl9hbHRpdHVkZX0sc2V0IGFsdGl0dWRlKHQpe3ZhciBlPU1hdGgubWF4KC43NSx0KTt0aGlzLl9hbHRpdHVkZSE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2FsdGl0dWRlPWUsdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxnZXQgem9vbSgpe3JldHVybiB0aGlzLl96b29tfSxzZXQgem9vbSh0KXt2YXIgZT1NYXRoLm1pbihNYXRoLm1heCh0LHRoaXMubWluWm9vbSksdGhpcy5tYXhab29tKTt0aGlzLl96b29tIT09ZSYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fem9vbT1lLHRoaXMuc2NhbGU9dGhpcy56b29tU2NhbGUoZSksdGhpcy50aWxlWm9vbT1NYXRoLmZsb29yKGUpLHRoaXMuem9vbUZyYWN0aW9uPWUtdGhpcy50aWxlWm9vbSx0aGlzLl9jYWxjTWF0cmljZXMoKSx0aGlzLl9jb25zdHJhaW4oKSl9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5fY2VudGVyfSxzZXQgY2VudGVyKHQpe3QubGF0PT09dGhpcy5fY2VudGVyLmxhdCYmdC5sbmc9PT10aGlzLl9jZW50ZXIubG5nfHwodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9jZW50ZXI9dCx0aGlzLl9jYWxjTWF0cmljZXMoKSx0aGlzLl9jb25zdHJhaW4oKSl9LGNvdmVyaW5nWm9vbUxldmVsOmZ1bmN0aW9uKHQpe3JldHVybih0LnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuem9vbSt0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplL3QudGlsZVNpemUpKX0sY292ZXJpbmdUaWxlczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdmVyaW5nWm9vbUxldmVsKHQpLHI9ZTtpZihlPHQubWluem9vbSlyZXR1cm5bXTtlPnQubWF4em9vbSYmKGU9dC5tYXh6b29tKTt2YXIgbj10aGlzLGk9bi5sb2NhdGlvbkNvb3JkaW5hdGUobi5jZW50ZXIpLl96b29tVG8oZSksbz1uZXcgYShpLmNvbHVtbi0uNSxpLnJvdy0uNSk7cmV0dXJuIHUuY292ZXIoZSxbbi5wb2ludENvb3JkaW5hdGUobmV3IGEoMCwwKSkuX3pvb21UbyhlKSxuLnBvaW50Q29vcmRpbmF0ZShuZXcgYShuLndpZHRoLDApKS5fem9vbVRvKGUpLG4ucG9pbnRDb29yZGluYXRlKG5ldyBhKG4ud2lkdGgsbi5oZWlnaHQpKS5fem9vbVRvKGUpLG4ucG9pbnRDb29yZGluYXRlKG5ldyBhKDAsbi5oZWlnaHQpKS5fem9vbVRvKGUpXSx0LnJlcGFyc2VPdmVyc2NhbGVkP3I6ZSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBvLmRpc3QodCktby5kaXN0KGUpfSl9LHJlc2l6ZTpmdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMucGl4ZWxzVG9HTFVuaXRzPVsyL3QsLTIvZV0sdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5fY29uc3RyYWluKCl9LGdldCB1bm1vZGlmaWVkKCl7cmV0dXJuIHRoaXMuX3VubW9kaWZpZWR9LHpvb21TY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sc2NhbGVab29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0scHJvamVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgYSh0aGlzLmxuZ1godC5sbmcsZSksdGhpcy5sYXRZKHQubGF0LGUpKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHRoaXMueExuZyh0LngsZSksdGhpcy55TGF0KHQueSxlKSl9LGdldCB4KCl7cmV0dXJuIHRoaXMubG5nWCh0aGlzLmNlbnRlci5sbmcpfSxnZXQgeSgpe3JldHVybiB0aGlzLmxhdFkodGhpcy5jZW50ZXIubGF0KX0sZ2V0IHBvaW50KCl7cmV0dXJuIG5ldyBhKHRoaXMueCx0aGlzLnkpfSxsbmdYOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDE4MCt0KSooZXx8dGhpcy53b3JsZFNpemUpLzM2MH0sbGF0WTpmdW5jdGlvbih0LGUpe3JldHVybigxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3QqTWF0aC5QSS8zNjApKSkqKGV8fHRoaXMud29ybGRTaXplKS8zNjB9LHhMbmc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzYwKnQvKGV8fHRoaXMud29ybGRTaXplKS0xODB9LHlMYXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj0xODAtMzYwKnQvKGV8fHRoaXMud29ybGRTaXplKTtyZXR1cm4gMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKHIqTWF0aC5QSS8xODApKS05MH0scGFuQnk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jZW50ZXJQb2ludC5fYWRkKHQpO3RoaXMuY2VudGVyPXRoaXMucG9pbnRMb2NhdGlvbihlKX0sc2V0TG9jYXRpb25BdFBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCksbj10aGlzLnBvaW50Q29vcmRpbmF0ZShlKSxpPXRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpLGE9bi5fc3ViKHIpO3RoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5jZW50ZXI9dGhpcy5jb29yZGluYXRlTG9jYXRpb24oaS5fc3ViKGEpKX0sbG9jYXRpb25Qb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkpfSxwb2ludExvY2F0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0KSl9LGxvY2F0aW9uQ29vcmRpbmF0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnpvb21TY2FsZSh0aGlzLnRpbGVab29tKS90aGlzLndvcmxkU2l6ZSxyPWkuY29udmVydCh0KTtyZXR1cm4gbmV3IG8odGhpcy5sbmdYKHIubG5nKSplLHRoaXMubGF0WShyLmxhdCkqZSx0aGlzLnRpbGVab29tKX0sY29vcmRpbmF0ZUxvY2F0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuem9vbVNjYWxlKHQuem9vbSk7cmV0dXJuIG5ldyBpKHRoaXMueExuZyh0LmNvbHVtbixlKSx0aGlzLnlMYXQodC5yb3csZSkpfSxwb2ludENvb3JkaW5hdGU6ZnVuY3Rpb24odCl7dmFyIGU9W3QueCx0LnksMCwxXSxyPVt0LngsdC55LDEsMV07Zi50cmFuc2Zvcm1NYXQ0KGUsZSx0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSksZi50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7dmFyIG49ZVszXSxpPXJbM10sYT1lWzBdL24scz1yWzBdL2ksdT1lWzFdL24sYz1yWzFdL2ksaD1lWzJdL24sZD1yWzJdL2kscD1oPT09ZD8wOigwLWgpLyhkLWgpLG09dGhpcy53b3JsZFNpemUvdGhpcy56b29tU2NhbGUodGhpcy50aWxlWm9vbSk7cmV0dXJuIG5ldyBvKGwoYSxzLHApL20sbCh1LGMscCkvbSx0aGlzLnRpbGVab29tKX0sY29vcmRpbmF0ZVBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKHQuem9vbSkscj1bdC5jb2x1bW4qZSx0LnJvdyplLDAsMV07cmV0dXJuIGYudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeCksbmV3IGEoclswXS9yWzNdLHJbMV0vclszXSl9LGNhbGN1bGF0ZVBvc01hdHJpeDpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTEvMCksdCBpbnN0YW5jZW9mIHUmJih0PXQudG9Db29yZGluYXRlKGUpKTt2YXIgcj1NYXRoLm1pbih0Lnpvb20sZSksbj10aGlzLndvcmxkU2l6ZS9NYXRoLnBvdygyLHIpLGk9bmV3IEZsb2F0NjRBcnJheSgxNik7cmV0dXJuIGQuaWRlbnRpdHkoaSksZC50cmFuc2xhdGUoaSxpLFt0LmNvbHVtbipuLHQucm93Km4sMF0pLGQuc2NhbGUoaSxpLFtuL2Msbi9jLDFdKSxkLm11bHRpcGx5KGksdGhpcy5wcm9qTWF0cml4LGkpLG5ldyBGbG9hdDMyQXJyYXkoaSl9LF9jb25zdHJhaW46ZnVuY3Rpb24oKXtpZih0aGlzLmNlbnRlciYmdGhpcy53aWR0aCYmdGhpcy5oZWlnaHQmJiF0aGlzLl9jb25zdHJhaW5pbmcpe3RoaXMuX2NvbnN0cmFpbmluZz0hMDt2YXIgdCxlLHIsbixpLG8scyxsLHU9dGhpcy5zaXplLGM9dGhpcy5fdW5tb2RpZmllZDt0aGlzLmxhdFJhbmdlJiYodD10aGlzLmxhdFkodGhpcy5sYXRSYW5nZVsxXSksZT10aGlzLmxhdFkodGhpcy5sYXRSYW5nZVswXSksaT1lLXQ8dS55P3UueS8oZS10KTowKSx0aGlzLmxuZ1JhbmdlJiYocj10aGlzLmxuZ1godGhpcy5sbmdSYW5nZVswXSksbj10aGlzLmxuZ1godGhpcy5sbmdSYW5nZVsxXSksbz1uLXI8dS54P3UueC8obi1yKTowKTt2YXIgaD1NYXRoLm1heChvfHwwLGl8fDApO2lmKGgpcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyBhKG8/KG4rcikvMjp0aGlzLngsaT8oZSt0KS8yOnRoaXMueSkpLHRoaXMuem9vbSs9dGhpcy5zY2FsZVpvb20oaCksdGhpcy5fdW5tb2RpZmllZD1jLHZvaWQodGhpcy5fY29uc3RyYWluaW5nPSExKTtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZj10aGlzLnksZD11LnkvMjtmLWQ8dCYmKGw9dCtkKSxmK2Q+ZSYmKGw9ZS1kKX1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgcD10aGlzLngsbT11LngvMjtwLW08ciYmKHM9cittKSxwK20+biYmKHM9bi1tKX12b2lkIDA9PT1zJiZ2b2lkIDA9PT1sfHwodGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IGEodm9pZCAwIT09cz9zOnRoaXMueCx2b2lkIDAhPT1sP2w6dGhpcy55KSkpLHRoaXMuX3VubW9kaWZpZWQ9Yyx0aGlzLl9jb25zdHJhaW5pbmc9ITF9fSxfY2FsY01hdHJpY2VzOmZ1bmN0aW9uKCl7aWYodGhpcy5oZWlnaHQpe3ZhciB0PU1hdGguYXRhbiguNS90aGlzLmFsdGl0dWRlKSxlPU1hdGguc2luKHQpKnRoaXMuYWx0aXR1ZGUvTWF0aC5zaW4oTWF0aC5QSS8yLXRoaXMuX3BpdGNoLXQpLHI9TWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSplK3RoaXMuYWx0aXR1ZGUsbj1uZXcgRmxvYXQ2NEFycmF5KDE2KTtpZihkLnBlcnNwZWN0aXZlKG4sMipNYXRoLmF0YW4odGhpcy5oZWlnaHQvMi90aGlzLmFsdGl0dWRlKSx0aGlzLndpZHRoL3RoaXMuaGVpZ2h0LC4xLHIpLGQudHJhbnNsYXRlKG4sbixbMCwwLC10aGlzLmFsdGl0dWRlXSksZC5zY2FsZShuLG4sWzEsLTEsMS90aGlzLmhlaWdodF0pLGQucm90YXRlWChuLG4sdGhpcy5fcGl0Y2gpLGQucm90YXRlWihuLG4sdGhpcy5hbmdsZSksZC50cmFuc2xhdGUobixuLFstdGhpcy54LC10aGlzLnksMF0pLHRoaXMucHJvak1hdHJpeD1uLG49ZC5jcmVhdGUoKSxkLnNjYWxlKG4sbixbdGhpcy53aWR0aC8yLC10aGlzLmhlaWdodC8yLDFdKSxkLnRyYW5zbGF0ZShuLG4sWzEsLTEsMF0pLHRoaXMucGl4ZWxNYXRyaXg9ZC5tdWx0aXBseShuZXcgRmxvYXQ2NEFycmF5KDE2KSxuLHRoaXMucHJvak1hdHJpeCksIShuPWQuaW52ZXJ0KG5ldyBGbG9hdDY0QXJyYXkoMTYpLHRoaXMucGl4ZWxNYXRyaXgpKSl0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBpbnZlcnQgbWF0cml4Iik7dGhpcy5waXhlbE1hdHJpeEludmVyc2U9bn19fX0seyIuLi9kYXRhL2J1Y2tldCI6MzI3LCIuLi9zb3VyY2UvdGlsZV9jb29yZCI6MzY3LCIuLi91dGlsL2ludGVycG9sYXRlIjo0MzQsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL2Nvb3JkaW5hdGUiOjMzNiwiLi9sbmdfbGF0IjozMzcsImdsLW1hdHJpeCI6MTkxLCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sMzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXsiICI6WzE2LFtdXSwiISI6WzEwLFs1LDIxLDUsNywtMSwtMSw1LDIsNCwxLDUsMCw2LDEsNSwyXV0sJyInOlsxNixbNCwyMSw0LDE0LC0xLC0xLDEyLDIxLDEyLDE0XV0sIiMiOlsyMSxbMTEsMjUsNCwtNywtMSwtMSwxNywyNSwxMCwtNywtMSwtMSw0LDEyLDE4LDEyLC0xLC0xLDMsNiwxNyw2XV0sJDpbMjAsWzgsMjUsOCwtNCwtMSwtMSwxMiwyNSwxMiwtNCwtMSwtMSwxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sIiUiOlsyNCxbMjEsMjEsMywwLC0xLC0xLDgsMjEsMTAsMTksMTAsMTcsOSwxNSw3LDE0LDUsMTQsMywxNiwzLDE4LDQsMjAsNiwyMSw4LDIxLDEwLDIwLDEzLDE5LDE2LDE5LDE5LDIwLDIxLDIxLC0xLC0xLDE3LDcsMTUsNiwxNCw0LDE0LDIsMTYsMCwxOCwwLDIwLDEsMjEsMywyMSw1LDE5LDcsMTcsN11dLCImIjpbMjYsWzIzLDEyLDIzLDEzLDIyLDE0LDIxLDE0LDIwLDEzLDE5LDExLDE3LDYsMTUsMywxMywxLDExLDAsNywwLDUsMSw0LDIsMyw0LDMsNiw0LDgsNSw5LDEyLDEzLDEzLDE0LDE0LDE2LDE0LDE4LDEzLDIwLDExLDIxLDksMjAsOCwxOCw4LDE2LDksMTMsMTEsMTAsMTYsMywxOCwxLDIwLDAsMjIsMCwyMywxLDIzLDJdXSwiJyI6WzEwLFs1LDE5LDQsMjAsNSwyMSw2LDIwLDYsMTgsNSwxNiw0LDE1XV0sIigiOlsxNCxbMTEsMjUsOSwyMyw3LDIwLDUsMTYsNCwxMSw0LDcsNSwyLDcsLTIsOSwtNSwxMSwtN11dLCIpIjpbMTQsWzMsMjUsNSwyMyw3LDIwLDksMTYsMTAsMTEsMTAsNyw5LDIsNywtMiw1LC01LDMsLTddXSwiKiI6WzE2LFs4LDIxLDgsOSwtMSwtMSwzLDE4LDEzLDEyLC0xLC0xLDEzLDE4LDMsMTJdXSwiKyI6WzI2LFsxMywxOCwxMywwLC0xLC0xLDQsOSwyMiw5XV0sIiwiOlsxMCxbNiwxLDUsMCw0LDEsNSwyLDYsMSw2LC0xLDUsLTMsNCwtNF1dLCItIjpbMjYsWzQsOSwyMiw5XV0sIi4iOlsxMCxbNSwyLDQsMSw1LDAsNiwxLDUsMl1dLCIvIjpbMjIsWzIwLDI1LDIsLTddXSwwOlsyMCxbOSwyMSw2LDIwLDQsMTcsMywxMiwzLDksNCw0LDYsMSw5LDAsMTEsMCwxNCwxLDE2LDQsMTcsOSwxNywxMiwxNiwxNywxNCwyMCwxMSwyMSw5LDIxXV0sMTpbMjAsWzYsMTcsOCwxOCwxMSwyMSwxMSwwXV0sMjpbMjAsWzQsMTYsNCwxNyw1LDE5LDYsMjAsOCwyMSwxMiwyMSwxNCwyMCwxNSwxOSwxNiwxNywxNiwxNSwxNSwxMywxMywxMCwzLDAsMTcsMF1dLDM6WzIwLFs1LDIxLDE2LDIxLDEwLDEzLDEzLDEzLDE1LDEyLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw0OlsyMCxbMTMsMjEsMyw3LDE4LDcsLTEsLTEsMTMsMjEsMTMsMF1dLDU6WzIwLFsxNSwyMSw1LDIxLDQsMTIsNSwxMyw4LDE0LDExLDE0LDE0LDEzLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw2OlsyMCxbMTYsMTgsMTUsMjAsMTIsMjEsMTAsMjEsNywyMCw1LDE3LDQsMTIsNCw3LDUsMyw3LDEsMTAsMCwxMSwwLDE0LDEsMTYsMywxNyw2LDE3LDcsMTYsMTAsMTQsMTIsMTEsMTMsMTAsMTMsNywxMiw1LDEwLDQsN11dLDc6WzIwLFsxNywyMSw3LDAsLTEsLTEsMywyMSwxNywyMV1dLDg6WzIwLFs4LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTQsNywxMywxMSwxMiwxNCwxMSwxNiw5LDE3LDcsMTcsNCwxNiwyLDE1LDEsMTIsMCw4LDAsNSwxLDQsMiwzLDQsMyw3LDQsOSw2LDExLDksMTIsMTMsMTMsMTUsMTQsMTYsMTYsMTYsMTgsMTUsMjAsMTIsMjEsOCwyMV1dLDk6WzIwLFsxNiwxNCwxNSwxMSwxMyw5LDEwLDgsOSw4LDYsOSw0LDExLDMsMTQsMywxNSw0LDE4LDYsMjAsOSwyMSwxMCwyMSwxMywyMCwxNSwxOCwxNiwxNCwxNiw5LDE1LDQsMTMsMSwxMCwwLDgsMCw1LDEsNCwzXV0sIjoiOlsxMCxbNSwxNCw0LDEzLDUsMTIsNiwxMyw1LDE0LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSwiOyI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNiwxLDUsMCw0LDEsNSwyLDYsMSw2LC0xLDUsLTMsNCwtNF1dLCI8IjpbMjQsWzIwLDE4LDQsOSwyMCwwXV0sIj0iOlsyNixbNCwxMiwyMiwxMiwtMSwtMSw0LDYsMjIsNl1dLCI+IjpbMjQsWzQsMTgsMjAsOSw0LDBdXSwiPyI6WzE4LFszLDE2LDMsMTcsNCwxOSw1LDIwLDcsMjEsMTEsMjEsMTMsMjAsMTQsMTksMTUsMTcsMTUsMTUsMTQsMTMsMTMsMTIsOSwxMCw5LDcsLTEsLTEsOSwyLDgsMSw5LDAsMTAsMSw5LDJdXSwiQCI6WzI3LFsxOCwxMywxNywxNSwxNSwxNiwxMiwxNiwxMCwxNSw5LDE0LDgsMTEsOCw4LDksNiwxMSw1LDE0LDUsMTYsNiwxNyw4LC0xLC0xLDEyLDE2LDEwLDE0LDksMTEsOSw4LDEwLDYsMTEsNSwtMSwtMSwxOCwxNiwxNyw4LDE3LDYsMTksNSwyMSw1LDIzLDcsMjQsMTAsMjQsMTIsMjMsMTUsMjIsMTcsMjAsMTksMTgsMjAsMTUsMjEsMTIsMjEsOSwyMCw3LDE5LDUsMTcsNCwxNSwzLDEyLDMsOSw0LDYsNSw0LDcsMiw5LDEsMTIsMCwxNSwwLDE4LDEsMjAsMiwyMSwzLC0xLC0xLDE5LDE2LDE4LDgsMTgsNiwxOSw1XV0sQTpbMTgsWzksMjEsMSwwLC0xLC0xLDksMjEsMTcsMCwtMSwtMSw0LDcsMTQsN11dLEI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLC0xLC0xLDQsMTEsMTMsMTEsMTYsMTAsMTcsOSwxOCw3LDE4LDQsMTcsMiwxNiwxLDEzLDAsNCwwXV0sQzpbMjEsWzE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDVdXSxEOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMSwyMSwxNCwyMCwxNiwxOCwxNywxNiwxOCwxMywxOCw4LDE3LDUsMTYsMywxNCwxLDExLDAsNCwwXV0sRTpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMSwtMSwtMSw0LDAsMTcsMF1dLEY6WzE4LFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE3LDIxLC0xLC0xLDQsMTEsMTIsMTFdXSxHOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOCw4LC0xLC0xLDEzLDgsMTgsOF1dLEg6WzIyLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSwxOCwwLC0xLC0xLDQsMTEsMTgsMTFdXSxJOls4LFs0LDIxLDQsMF1dLEo6WzE2LFsxMiwyMSwxMiw1LDExLDIsMTAsMSw4LDAsNiwwLDQsMSwzLDIsMiw1LDIsN11dLEs6WzIxLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSw0LDcsLTEsLTEsOSwxMiwxOCwwXV0sTDpbMTcsWzQsMjEsNCwwLC0xLC0xLDQsMCwxNiwwXV0sTTpbMjQsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTIsMCwtMSwtMSwyMCwyMSwxMiwwLC0xLC0xLDIwLDIxLDIwLDBdXSxOOlsyMixbNCwyMSw0LDAsLTEsLTEsNCwyMSwxOCwwLC0xLC0xLDE4LDIxLDE4LDBdXSxPOlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjFdXSxQOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNCwxNywxMiwxNiwxMSwxMywxMCw0LDEwXV0sUTpbMjIsWzksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDUsMTksOCwxOSwxMywxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLC0xLC0xLDEyLDQsMTgsLTJdXSxSOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNSwxNywxMywxNiwxMiwxMywxMSw0LDExLC0xLC0xLDExLDExLDE4LDBdXSxTOlsyMCxbMTcsMTgsMTUsMjAsMTIsMjEsOCwyMSw1LDIwLDMsMTgsMywxNiw0LDE0LDUsMTMsNywxMiwxMywxMCwxNSw5LDE2LDgsMTcsNiwxNywzLDE1LDEsMTIsMCw4LDAsNSwxLDMsM11dLFQ6WzE2LFs4LDIxLDgsMCwtMSwtMSwxLDIxLDE1LDIxXV0sVTpbMjIsWzQsMjEsNCw2LDUsMyw3LDEsMTAsMCwxMiwwLDE1LDEsMTcsMywxOCw2LDE4LDIxXV0sVjpbMTgsWzEsMjEsOSwwLC0xLC0xLDE3LDIxLDksMF1dLFc6WzI0LFsyLDIxLDcsMCwtMSwtMSwxMiwyMSw3LDAsLTEsLTEsMTIsMjEsMTcsMCwtMSwtMSwyMiwyMSwxNywwXV0sWDpbMjAsWzMsMjEsMTcsMCwtMSwtMSwxNywyMSwzLDBdXSxZOlsxOCxbMSwyMSw5LDExLDksMCwtMSwtMSwxNywyMSw5LDExXV0sWjpbMjAsWzE3LDIxLDMsMCwtMSwtMSwzLDIxLDE3LDIxLC0xLC0xLDMsMCwxNywwXV0sIlsiOlsxNCxbNCwyNSw0LC03LC0xLC0xLDUsMjUsNSwtNywtMSwtMSw0LDI1LDExLDI1LC0xLC0xLDQsLTcsMTEsLTddXSwiXFwiOlsxNCxbMCwyMSwxNCwtM11dLCJdIjpbMTQsWzksMjUsOSwtNywtMSwtMSwxMCwyNSwxMCwtNywtMSwtMSwzLDI1LDEwLDI1LC0xLC0xLDMsLTcsMTAsLTddXSwiXiI6WzE2LFs2LDE1LDgsMTgsMTAsMTUsLTEsLTEsMywxMiw4LDE3LDEzLDEyLC0xLC0xLDgsMTcsOCwwXV0sXzpbMTYsWzAsLTIsMTYsLTJdXSwiYCI6WzEwLFs2LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTUsNiwxNiw1LDE3XV0sYTpbMTksWzE1LDE0LDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGI6WzE5LFs0LDIxLDQsMCwtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxjOlsxOCxbMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGQ6WzE5LFsxNSwyMSwxNSwwLC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxlOlsxOCxbMyw4LDE1LDgsMTUsMTAsMTQsMTIsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGY6WzEyLFsxMCwyMSw4LDIxLDYsMjAsNSwxNyw1LDAsLTEsLTEsMiwxNCw5LDE0XV0sZzpbMTksWzE1LDE0LDE1LC0yLDE0LC01LDEzLC02LDExLC03LDgsLTcsNiwtNiwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0saDpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDBdXSxpOls4LFszLDIxLDQsMjAsNSwyMSw0LDIyLDMsMjEsLTEsLTEsNCwxNCw0LDBdXSxqOlsxMCxbNSwyMSw2LDIwLDcsMjEsNiwyMiw1LDIxLC0xLC0xLDYsMTQsNiwtMyw1LC02LDMsLTcsMSwtN11dLGs6WzE3LFs0LDIxLDQsMCwtMSwtMSwxNCwxNCw0LDQsLTEsLTEsOCw4LDE1LDBdXSxsOls4LFs0LDIxLDQsMF1dLG06WzMwLFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwLC0xLC0xLDE1LDEwLDE4LDEzLDIwLDE0LDIzLDE0LDI1LDEzLDI2LDEwLDI2LDBdXSxuOlsxOSxbNCwxNCw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLG86WzE5LFs4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzLDE2LDYsMTYsOCwxNSwxMSwxMywxMywxMSwxNCw4LDE0XV0scDpbMTksWzQsMTQsNCwtNywtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxxOlsxOSxbMTUsMTQsMTUsLTcsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLHI6WzEzLFs0LDE0LDQsMCwtMSwtMSw0LDgsNSwxMSw3LDEzLDksMTQsMTIsMTRdXSxzOlsxNyxbMTQsMTEsMTMsMTMsMTAsMTQsNywxNCw0LDEzLDMsMTEsNCw5LDYsOCwxMSw3LDEzLDYsMTQsNCwxNCwzLDEzLDEsMTAsMCw3LDAsNCwxLDMsM11dLHQ6WzEyLFs1LDIxLDUsNCw2LDEsOCwwLDEwLDAsLTEsLTEsMiwxNCw5LDE0XV0sdTpbMTksWzQsMTQsNCw0LDUsMSw3LDAsMTAsMCwxMiwxLDE1LDQsLTEsLTEsMTUsMTQsMTUsMF1dLHY6WzE2LFsyLDE0LDgsMCwtMSwtMSwxNCwxNCw4LDBdXSx3OlsyMixbMywxNCw3LDAsLTEsLTEsMTEsMTQsNywwLC0xLC0xLDExLDE0LDE1LDAsLTEsLTEsMTksMTQsMTUsMF1dLHg6WzE3LFszLDE0LDE0LDAsLTEsLTEsMTQsMTQsMywwXV0seTpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMCw2LC00LDQsLTYsMiwtNywxLC03XV0sejpbMTcsWzE0LDE0LDMsMCwtMSwtMSwzLDE0LDE0LDE0LC0xLC0xLDMsMCwxNCwwXV0sInsiOlsxNCxbOSwyNSw3LDI0LDYsMjMsNSwyMSw1LDE5LDYsMTcsNywxNiw4LDE0LDgsMTIsNiwxMCwtMSwtMSw3LDI0LDYsMjIsNiwyMCw3LDE4LDgsMTcsOSwxNSw5LDEzLDgsMTEsNCw5LDgsNyw5LDUsOSwzLDgsMSw3LDAsNiwtMiw2LC00LDcsLTYsLTEsLTEsNiw4LDgsNiw4LDQsNywyLDYsMSw1LC0xLDUsLTMsNiwtNSw3LC02LDksLTddXSwifCI6WzgsWzQsMjUsNCwtN11dLCJ9IjpbMTQsWzUsMjUsNywyNCw4LDIzLDksMjEsOSwxOSw4LDE3LDcsMTYsNiwxNCw2LDEyLDgsMTAsLTEsLTEsNywyNCw4LDIyLDgsMjAsNywxOCw2LDE3LDUsMTUsNSwxMyw2LDExLDEwLDksNiw3LDUsNSw1LDMsNiwxLDcsMCw4LC0yLDgsLTQsNywtNiwtMSwtMSw4LDgsNiw2LDYsNCw3LDIsOCwxLDksLTEsOSwtMyw4LC01LDcsLTYsNSwtN11dLCJ+IjpbMjQsWzMsNiwzLDgsNCwxMSw2LDEyLDgsMTIsMTAsMTEsMTQsOCwxNiw3LDE4LDcsMjAsOCwyMSwxMCwtMSwtMSwzLDgsNCwxMCw2LDExLDgsMTEsMTAsMTAsMTQsNywxNiw2LDE4LDYsMjAsNywyMSwxMCwyMSwxMl1dfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aT1pfHwxO3ZhciBhLG8scyxsLHUsYyxoLGYsZD1bXTtmb3IoYT0wLG89dC5sZW5ndGg7YTxvO2ErKylpZih1PW5bdFthXV0pe2ZvcihmPW51bGwscz0wLGw9dVsxXS5sZW5ndGg7czxsO3MrPTIpLTE9PT11WzFdW3NdJiYtMT09PXVbMV1bcysxXT9mPW51bGw6KGM9ZSt1WzFdW3NdKmksaD1yLXVbMV1bcysxXSppLGYmJmQucHVzaChmLngsZi55LGMsaCksZj17eDpjLHk6aH0pO2UrPXVbMF0qaX1yZXR1cm4gZH19LHt9XSwzNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9O24udmVyc2lvbj10KCIuLi9wYWNrYWdlLmpzb24iKS52ZXJzaW9uLG4uTWFwPXQoIi4vdWkvbWFwIiksbi5Db250cm9sPXQoIi4vdWkvY29udHJvbC9jb250cm9sIiksbi5OYXZpZ2F0aW9uPXQoIi4vdWkvY29udHJvbC9uYXZpZ2F0aW9uIiksbi5HZW9sb2NhdGU9dCgiLi91aS9jb250cm9sL2dlb2xvY2F0ZSIpLG4uQXR0cmlidXRpb249dCgiLi91aS9jb250cm9sL2F0dHJpYnV0aW9uIiksbi5Qb3B1cD10KCIuL3VpL3BvcHVwIiksbi5NYXJrZXI9dCgiLi91aS9tYXJrZXIiKSxuLlN0eWxlPXQoIi4vc3R5bGUvc3R5bGUiKSxuLkxuZ0xhdD10KCIuL2dlby9sbmdfbGF0Iiksbi5MbmdMYXRCb3VuZHM9dCgiLi9nZW8vbG5nX2xhdF9ib3VuZHMiKSxuLlBvaW50PXQoInBvaW50LWdlb21ldHJ5Iiksbi5FdmVudGVkPXQoIi4vdXRpbC9ldmVudGVkIiksbi51dGlsPXQoIi4vdXRpbC91dGlsIiksbi5zdXBwb3J0ZWQ9dCgiLi91dGlsL2Jyb3dzZXIiKS5zdXBwb3J0ZWQ7dmFyIGk9dCgiLi91dGlsL2FqYXgiKTtuLnV0aWwuZ2V0SlNPTj1pLmdldEpTT04sbi51dGlsLmdldEFycmF5QnVmZmVyPWkuZ2V0QXJyYXlCdWZmZXI7dmFyIGE9dCgiLi91dGlsL2NvbmZpZyIpO24uY29uZmlnPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImFjY2Vzc1Rva2VuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuQUNDRVNTX1RPS0VOfSxzZXQ6ZnVuY3Rpb24odCl7YS5BQ0NFU1NfVE9LRU49dH19KX0seyIuLi9wYWNrYWdlLmpzb24iOjQ0MiwiLi9nZW8vbG5nX2xhdCI6MzM3LCIuL2dlby9sbmdfbGF0X2JvdW5kcyI6MzM4LCIuL3N0eWxlL3N0eWxlIjozNzYsIi4vdWkvY29udHJvbC9hdHRyaWJ1dGlvbiI6NDA3LCIuL3VpL2NvbnRyb2wvY29udHJvbCI6NDA4LCIuL3VpL2NvbnRyb2wvZ2VvbG9jYXRlIjo0MDksIi4vdWkvY29udHJvbC9uYXZpZ2F0aW9uIjo0MTAsIi4vdWkvbWFwIjo0MTksIi4vdWkvbWFya2VyIjo0MjAsIi4vdWkvcG9wdXAiOjQyMSwiLi91dGlsL2FqYXgiOjQyMywiLi91dGlsL2Jyb3dzZXIiOjQyNCwiLi91dGlsL2NvbmZpZyI6NDI5LCIuL3V0aWwvZXZlbnRlZCI6NDMyLCIuL3V0aWwvdXRpbCI6NDQwLCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sMzQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFzc2VydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e2RlZmluZTp7fSxpbml0aWFsaXplOnt9fSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07bigidV8iPT09aS5uYW1lLnNsaWNlKDAsMikpO3ZhciBhPSJ7cHJlY2lzaW9ufSAiKygxPT09aS5jb21wb25lbnRzPyJmbG9hdCI6InZlYyIraS5jb21wb25lbnRzKTtlLmRlZmluZVtpLm5hbWUuc2xpY2UoMildPSJ1bmlmb3JtICIrYSsiICIraS5uYW1lKyI7XG4iLGUuaW5pdGlhbGl6ZVtpLm5hbWUuc2xpY2UoMildPWErIiAiK2kubmFtZS5zbGljZSgyKSsiID0gIitpLm5hbWUrIjtcbiJ9cmV0dXJuIGV9fSx7YXNzZXJ0OjQ1fV0sMzQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLHM9dC5nbCxsPXQudHJhbnNmb3JtLHU9ci5wYWludFsiYmFja2dyb3VuZC1jb2xvciJdLGM9ci5wYWludFsiYmFja2dyb3VuZC1wYXR0ZXJuIl0saD1yLnBhaW50WyJiYWNrZ3JvdW5kLW9wYWNpdHkiXSxmPWM/dC5zcHJpdGVBdGxhcy5nZXRQb3NpdGlvbihjLmZyb20sITApOm51bGwsZD1jP3Quc3ByaXRlQXRsYXMuZ2V0UG9zaXRpb24oYy50bywhMCk6bnVsbDtpZih0LnNldERlcHRoU3VibGF5ZXIoMCksZiYmZCl7aWYodC5pc09wYXF1ZVBhc3MpcmV0dXJuO249dC51c2VQcm9ncmFtKCJwYXR0ZXJuIikscy51bmlmb3JtMWkobi51X2ltYWdlLDApLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl90bF9hLGYudGwpLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl9icl9hLGYuYnIpLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl90bF9iLGQudGwpLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl9icl9iLGQuYnIpLHMudW5pZm9ybTFmKG4udV9vcGFjaXR5LGgpLHMudW5pZm9ybTFmKG4udV9taXgsYy50KSxzLnVuaWZvcm0yZnYobi51X3BhdHRlcm5fc2l6ZV9hLGYuc2l6ZSkscy51bmlmb3JtMmZ2KG4udV9wYXR0ZXJuX3NpemVfYixkLnNpemUpLHMudW5pZm9ybTFmKG4udV9zY2FsZV9hLGMuZnJvbVNjYWxlKSxzLnVuaWZvcm0xZihuLnVfc2NhbGVfYixjLnRvU2NhbGUpLHMuYWN0aXZlVGV4dHVyZShzLlRFWFRVUkUwKSx0LnNwcml0ZUF0bGFzLmJpbmQocywhMCksdC50aWxlRXh0ZW50UGF0dGVyblZBTy5iaW5kKHMsbix0LnRpbGVFeHRlbnRCdWZmZXIpfWVsc2V7aWYodC5pc09wYXF1ZVBhc3MhPT0oMT09PXVbM10pKXJldHVybjt2YXIgcD1hKFt7bmFtZToidV9jb2xvciIsY29tcG9uZW50czo0fSx7bmFtZToidV9vcGFjaXR5Iixjb21wb25lbnRzOjF9XSk7bj10LnVzZVByb2dyYW0oImZpbGwiLFtdLHAscCkscy51bmlmb3JtNGZ2KG4udV9jb2xvcix1KSxzLnVuaWZvcm0xZihuLnVfb3BhY2l0eSxoKSx0LnRpbGVFeHRlbnRWQU8uYmluZChzLG4sdC50aWxlRXh0ZW50QnVmZmVyKX1zLmRpc2FibGUocy5TVEVOQ0lMX1RFU1QpO2Zvcih2YXIgbT1sLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOm99KSx2PTA7djxtLmxlbmd0aDt2Kyspe3ZhciBnPW1bdl07aWYoZiYmZCl7dmFyIHk9e2Nvb3JkOmcsdGlsZVNpemU6b307cy51bmlmb3JtMWYobi51X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLDEvaSh5LDEsdC50cmFuc2Zvcm0udGlsZVpvb20pKTt2YXIgYj15LnRpbGVTaXplKk1hdGgucG93KDIsdC50cmFuc2Zvcm0udGlsZVpvb20teS5jb29yZC56KSx4PWIqKHkuY29vcmQueCtnLncqTWF0aC5wb3coMix5LmNvb3JkLnopKSxfPWIqeS5jb29yZC55O3MudW5pZm9ybTJmKG4udV9waXhlbF9jb29yZF91cHBlcix4Pj4xNixfPj4xNikscy51bmlmb3JtMmYobi51X3BpeGVsX2Nvb3JkX2xvd2VyLDY1NTM1JngsNjU1MzUmXyl9cy51bmlmb3JtTWF0cml4NGZ2KG4udV9tYXRyaXgsITEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGcpKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRV9TVFJJUCwwLHQudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfXMuc3RlbmNpbE1hc2soMCkscy5zdGVuY2lsRnVuYyhzLkVRVUFMLDEyOCwxMjgpfXZhciBpPXQoIi4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyIpLGE9dCgiLi9jcmVhdGVfdW5pZm9ybV9wcmFnbWFzIiksbz01MTI7ZS5leHBvcnRzPW59LHsiLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzIjozNjEsIi4vY3JlYXRlX3VuaWZvcm1fcHJhZ21hcyI6MzQyfV0sMzQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7aWYoIXQuaXNPcGFxdWVQYXNzKXt2YXIgYT10LmdsO3Quc2V0RGVwdGhTdWJsYXllcigwKSx0LmRlcHRoTWFzayghMSksYS5kaXNhYmxlKGEuU1RFTkNJTF9URVNUKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXSxsPWUuZ2V0VGlsZShzKSx1PWwuZ2V0QnVja2V0KHIpO2lmKHUpe3ZhciBjPXUuYnVmZmVyR3JvdXBzLmNpcmNsZTtpZihjKXt2YXIgaD11LnBhaW50QXR0cmlidXRlcy5jaXJjbGVbci5pZF0sZj10LnVzZVByb2dyYW0oImNpcmNsZSIsaC5kZWZpbmVzLGgudmVydGV4UHJhZ21hcyxoLmZyYWdtZW50UHJhZ21hcyk7Im1hcCI9PT1yLnBhaW50WyJjaXJjbGUtcGl0Y2gtc2NhbGUiXT8oYS51bmlmb3JtMWkoZi51X3NjYWxlX3dpdGhfbWFwLCEwKSxhLnVuaWZvcm0yZihmLnVfZXh0cnVkZV9zY2FsZSx0LnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0qdC50cmFuc2Zvcm0uYWx0aXR1ZGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdKnQudHJhbnNmb3JtLmFsdGl0dWRlKSk6KGEudW5pZm9ybTFpKGYudV9zY2FsZV93aXRoX21hcCwhMSksYS51bmlmb3JtMmZ2KGYudV9leHRydWRlX3NjYWxlLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0cykpLGEudW5pZm9ybTFmKGYudV9kZXZpY2VwaXhlbHJhdGlvLGkuZGV2aWNlUGl4ZWxSYXRpbyksYS51bmlmb3JtTWF0cml4NGZ2KGYudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgocy5wb3NNYXRyaXgsbCxyLnBhaW50WyJjaXJjbGUtdHJhbnNsYXRlIl0sci5wYWludFsiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiXSkpLHUuc2V0VW5pZm9ybXMoYSwiY2lyY2xlIixmLHIse3pvb206dC50cmFuc2Zvcm0uem9vbX0pO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgcD1jW2RdO3AudmFvc1tyLmlkXS5iaW5kKGEsZixwLmxheW91dFZlcnRleEJ1ZmZlcixwLmVsZW1lbnRCdWZmZXIscC5wYWludFZlcnRleEJ1ZmZlcnNbci5pZF0pLGEuZHJhd0VsZW1lbnRzKGEuVFJJQU5HTEVTLDMqcC5lbGVtZW50QnVmZmVyLmxlbmd0aCxhLlVOU0lHTkVEX1NIT1JULDApfX19fX19dmFyIGk9dCgiLi4vdXRpbC9icm93c2VyIik7ZS5leHBvcnRzPW59LHsiLi4vdXRpbC9icm93c2VyIjo0MjR9XSwzNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaT10LmdsO2kuZW5hYmxlKGkuU1RFTkNJTF9URVNUKTtmb3IodmFyIGE9dC51c2VQcm9ncmFtKCJjb2xsaXNpb25ib3giKSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb10sbD1lLmdldFRpbGUocyksdT1sLmdldEJ1Y2tldChyKTtpZih1KXt2YXIgYz11LmJ1ZmZlckdyb3Vwcy5jb2xsaXNpb25Cb3g7aWYoYyYmYy5sZW5ndGgpe3ZhciBoPWNbMF07MCE9PWgubGF5b3V0VmVydGV4QnVmZmVyLmxlbmd0aCYmKGkudW5pZm9ybU1hdHJpeDRmdihhLnVfbWF0cml4LCExLHMucG9zTWF0cml4KSx0LmVuYWJsZVRpbGVDbGlwcGluZ01hc2socyksdC5saW5lV2lkdGgoMSksaS51bmlmb3JtMWYoYS51X3NjYWxlLE1hdGgucG93KDIsdC50cmFuc2Zvcm0uem9vbS1sLmNvb3JkLnopKSxpLnVuaWZvcm0xZihhLnVfem9vbSwxMCp0LnRyYW5zZm9ybS56b29tKSxpLnVuaWZvcm0xZihhLnVfbWF4em9vbSwxMCoobC5jb29yZC56KzEpKSxoLnZhb3Nbci5pZF0uYmluZChpLGEsaC5sYXlvdXRWZXJ0ZXhCdWZmZXIpLGkuZHJhd0FycmF5cyhpLkxJTkVTLDAsaC5sYXlvdXRWZXJ0ZXhCdWZmZXIubGVuZ3RoKSl9fX19ZS5leHBvcnRzPW59LHt9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYoIXQuaXNPcGFxdWVQYXNzJiZ0Lm9wdGlvbnMuZGVidWcpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspaSh0LGUscltuXSl9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49dC5nbDtuLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpLHQubGluZVdpZHRoKDEqby5kZXZpY2VQaXhlbFJhdGlvKTt2YXIgaT1yLnBvc01hdHJpeCxoPXQudXNlUHJvZ3JhbSgiZGVidWciKTtuLnVuaWZvcm1NYXRyaXg0ZnYoaC51X21hdHJpeCwhMSxpKSxuLnVuaWZvcm00ZihoLnVfY29sb3IsMSwwLDAsMSksdC5kZWJ1Z1ZBTy5iaW5kKG4saCx0LmRlYnVnQnVmZmVyKSxuLmRyYXdBcnJheXMobi5MSU5FX1NUUklQLDAsdC5kZWJ1Z0J1ZmZlci5sZW5ndGgpO2Zvcih2YXIgZj1hKHIudG9TdHJpbmcoKSw1MCwyMDAsNSksZD1uZXcgdC5Qb3NBcnJheSxwPTA7cDxmLmxlbmd0aDtwKz0yKWQuZW1wbGFjZUJhY2soZltwXSxmW3ArMV0pO3ZhciBtPW5ldyB1KGQuc2VyaWFsaXplKCksdC5Qb3NBcnJheS5zZXJpYWxpemUoKSx1LkJ1ZmZlclR5cGUuVkVSVEVYKTsobmV3IGMpLmJpbmQobixoLG0pLG4udW5pZm9ybTRmKGgudV9jb2xvciwxLDEsMSwxKTtmb3IodmFyIHY9ZS5nZXRUaWxlKHIpLnRpbGVTaXplLGc9bC8oTWF0aC5wb3coMix0LnRyYW5zZm9ybS56b29tLXIueikqdikseT1bWy0xLC0xXSxbLTEsMV0sWzEsLTFdLFsxLDFdXSxiPTA7Yjx5Lmxlbmd0aDtiKyspe3ZhciB4PXlbYl07bi51bmlmb3JtTWF0cml4NGZ2KGgudV9tYXRyaXgsITEscy50cmFuc2xhdGUoW10saSxbZyp4WzBdLGcqeFsxXSwwXSkpLG4uZHJhd0FycmF5cyhuLkxJTkVTLDAsbS5sZW5ndGgpfW4udW5pZm9ybTRmKGgudV9jb2xvciwwLDAsMCwxKSxuLnVuaWZvcm1NYXRyaXg0ZnYoaC51X21hdHJpeCwhMSxpKSxuLmRyYXdBcnJheXMobi5MSU5FUywwLG0ubGVuZ3RoKX12YXIgYT10KCIuLi9saWIvZGVidWd0ZXh0Iiksbz10KCIuLi91dGlsL2Jyb3dzZXIiKSxzPXQoImdsLW1hdHJpeCIpLm1hdDQsbD10KCIuLi9kYXRhL2J1Y2tldCIpLkVYVEVOVCx1PXQoIi4uL2RhdGEvYnVmZmVyIiksYz10KCIuL3ZlcnRleF9hcnJheV9vYmplY3QiKTtlLmV4cG9ydHM9bn0seyIuLi9kYXRhL2J1Y2tldCI6MzI3LCIuLi9kYXRhL2J1ZmZlciI6MzMyLCIuLi9saWIvZGVidWd0ZXh0IjozNDAsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuL3ZlcnRleF9hcnJheV9vYmplY3QiOjM1NSwiZ2wtbWF0cml4IjoxOTF9XSwzNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgbz10LmdsO28uZW5hYmxlKG8uU1RFTkNJTF9URVNUKTt2YXIgcztpZihzPSFyLnBhaW50WyJmaWxsLXBhdHRlcm4iXSYmKHIuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50KCJmaWxsLWNvbG9yIikmJnIuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50KCJmaWxsLW9wYWNpdHkiKSYmMT09PXIucGFpbnRbImZpbGwtY29sb3IiXVszXSYmMT09PXIucGFpbnRbImZpbGwtb3BhY2l0eSJdKSx0LmlzT3BhcXVlUGFzcz09PXMpe3Quc2V0RGVwdGhTdWJsYXllcigxKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKylpKHQsZSxyLG5bbF0pfWlmKCF0LmlzT3BhcXVlUGFzcyYmci5wYWludFsiZmlsbC1hbnRpYWxpYXMiXSl7dC5saW5lV2lkdGgoMiksdC5kZXB0aE1hc2soITEpO3ZhciB1PXIuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik7KHV8fCFyLnBhaW50WyJmaWxsLXBhdHRlcm4iXSkmJnU/dC5zZXREZXB0aFN1YmxheWVyKDIpOnQuc2V0RGVwdGhTdWJsYXllcigwKTtmb3IodmFyIGM9MDtjPG4ubGVuZ3RoO2MrKylhKHQsZSxyLG5bY10pfX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPWUuZ2V0VGlsZShuKSxhPWkuZ2V0QnVja2V0KHIpO2lmKGEpe3ZhciBzPWEuYnVmZmVyR3JvdXBzLmZpbGw7aWYocyl7dmFyIGwsdT10LmdsLGM9ci5wYWludFsiZmlsbC1wYXR0ZXJuIl07aWYoYylsPXQudXNlUHJvZ3JhbSgicGF0dGVybiIpLG8oYyxyLnBhaW50WyJmaWxsLW9wYWNpdHkiXSxpLG4sdCxsKSx1LmFjdGl2ZVRleHR1cmUodS5URVhUVVJFMCksdC5zcHJpdGVBdGxhcy5iaW5kKHUsITApO2Vsc2V7dmFyIGg9YS5wYWludEF0dHJpYnV0ZXMuZmlsbFtyLmlkXTtsPXQudXNlUHJvZ3JhbSgiZmlsbCIsaC5kZWZpbmVzLGgudmVydGV4UHJhZ21hcyxoLmZyYWdtZW50UHJhZ21hcyksYS5zZXRVbmlmb3Jtcyh1LCJmaWxsIixsLHIse3pvb206dC50cmFuc2Zvcm0uem9vbX0pfXUudW5pZm9ybU1hdHJpeDRmdihsLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KG4ucG9zTWF0cml4LGksci5wYWludFsiZmlsbC10cmFuc2xhdGUiXSxyLnBhaW50WyJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiXSkpLHQuZW5hYmxlVGlsZUNsaXBwaW5nTWFzayhuKTtmb3IodmFyIGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIGQ9c1tmXTtkLnZhb3Nbci5pZF0uYmluZCh1LGwsZC5sYXlvdXRWZXJ0ZXhCdWZmZXIsZC5lbGVtZW50QnVmZmVyLGQucGFpbnRWZXJ0ZXhCdWZmZXJzW3IuaWRdKSx1LmRyYXdFbGVtZW50cyh1LlRSSUFOR0xFUyxkLmVsZW1lbnRCdWZmZXIubGVuZ3RoLHUuVU5TSUdORURfU0hPUlQsMCl9fX19ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1lLmdldFRpbGUobiksYT1pLmdldEJ1Y2tldChyKTtpZihhKXt2YXIgcyxsPXQuZ2wsdT1hLmJ1ZmZlckdyb3Vwcy5maWxsLGM9ci5wYWludFsiZmlsbC1wYXR0ZXJuIl0saD1yLnBhaW50WyJmaWxsLW9wYWNpdHkiXSxmPXIuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik7aWYoYyYmIWYpcz10LnVzZVByb2dyYW0oIm91dGxpbmVwYXR0ZXJuIiksbC51bmlmb3JtMmYocy51X3dvcmxkLGwuZHJhd2luZ0J1ZmZlcldpZHRoLGwuZHJhd2luZ0J1ZmZlckhlaWdodCk7ZWxzZXt2YXIgZD1hLnBhaW50QXR0cmlidXRlcy5maWxsW3IuaWRdO3M9dC51c2VQcm9ncmFtKCJvdXRsaW5lIixkLmRlZmluZXMsZC52ZXJ0ZXhQcmFnbWFzLGQuZnJhZ21lbnRQcmFnbWFzKSxsLnVuaWZvcm0yZihzLnVfd29ybGQsbC5kcmF3aW5nQnVmZmVyV2lkdGgsbC5kcmF3aW5nQnVmZmVySGVpZ2h0KSxsLnVuaWZvcm0xZihzLnVfb3BhY2l0eSxoKSxhLnNldFVuaWZvcm1zKGwsImZpbGwiLHMscix7em9vbTp0LnRyYW5zZm9ybS56b29tfSl9bC51bmlmb3JtTWF0cml4NGZ2KHMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgobi5wb3NNYXRyaXgsaSxyLnBhaW50WyJmaWxsLXRyYW5zbGF0ZSJdLHIucGFpbnRbImZpbGwtdHJhbnNsYXRlLWFuY2hvciJdKSksYyYmbyhjLGgsaSxuLHQscyksdC5lbmFibGVUaWxlQ2xpcHBpbmdNYXNrKG4pO2Zvcih2YXIgcD0wO3A8dS5sZW5ndGg7cCsrKXt2YXIgbT11W3BdO20uc2Vjb25kVmFvc1tyLmlkXS5iaW5kKGwscyxtLmxheW91dFZlcnRleEJ1ZmZlcixtLmVsZW1lbnRCdWZmZXIyLG0ucGFpbnRWZXJ0ZXhCdWZmZXJzW3IuaWRdKSxsLmRyYXdFbGVtZW50cyhsLkxJTkVTLDIqbS5lbGVtZW50QnVmZmVyMi5sZW5ndGgsbC5VTlNJR05FRF9TSE9SVCwwKX19fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3ZhciBvPWkuZ2wsbD1pLnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHQuZnJvbSwhMCksdT1pLnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHQudG8sITApO2lmKGwmJnUpe28udW5pZm9ybTFpKGEudV9pbWFnZSwwKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fdGxfYSxsLnRsKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fYnJfYSxsLmJyKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fdGxfYix1LnRsKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fYnJfYix1LmJyKSxvLnVuaWZvcm0xZihhLnVfb3BhY2l0eSxlKSxvLnVuaWZvcm0xZihhLnVfbWl4LHQudCksby51bmlmb3JtMWYoYS51X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLDEvcyhyLDEsaS50cmFuc2Zvcm0udGlsZVpvb20pKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fc2l6ZV9hLGwuc2l6ZSksby51bmlmb3JtMmZ2KGEudV9wYXR0ZXJuX3NpemVfYix1LnNpemUpLG8udW5pZm9ybTFmKGEudV9zY2FsZV9hLHQuZnJvbVNjYWxlKSxvLnVuaWZvcm0xZihhLnVfc2NhbGVfYix0LnRvU2NhbGUpO3ZhciBjPXIudGlsZVNpemUqTWF0aC5wb3coMixpLnRyYW5zZm9ybS50aWxlWm9vbS1yLmNvb3JkLnopLGg9Yyooci5jb29yZC54K24udypNYXRoLnBvdygyLHIuY29vcmQueikpLGY9YypyLmNvb3JkLnk7by51bmlmb3JtMmYoYS51X3BpeGVsX2Nvb3JkX3VwcGVyLGg+PjE2LGY+PjE2KSxvLnVuaWZvcm0yZihhLnVfcGl4ZWxfY29vcmRfbG93ZXIsNjU1MzUmaCw2NTUzNSZmKSxvLmFjdGl2ZVRleHR1cmUoby5URVhUVVJFMCksaS5zcHJpdGVBdGxhcy5iaW5kKG8sITApfX12YXIgcz10KCIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiKTtlLmV4cG9ydHM9bn0seyIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiOjM2MX1dLDM0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL2Jyb3dzZXIiKSxpPXQoImdsLW1hdHJpeCIpLm1hdDIsYT10KCIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7aWYoIXQuaXNPcGFxdWVQYXNzKXt0LnNldERlcHRoU3VibGF5ZXIoMCksdC5kZXB0aE1hc2soITEpO3ZhciBzPXQuZ2w7aWYocy5lbmFibGUocy5TVEVOQ0lMX1RFU1QpLCEoci5wYWludFsibGluZS13aWR0aCJdPD0wKSl7dmFyIGw9MS9uLmRldmljZVBpeGVsUmF0aW8sdT1yLnBhaW50WyJsaW5lLWJsdXIiXStsLGM9ci5wYWludFsibGluZS1jb2xvciJdLGg9dC50cmFuc2Zvcm0sZj1pLmNyZWF0ZSgpO2kuc2NhbGUoZixmLFsxLE1hdGguY29zKGguX3BpdGNoKV0pLGkucm90YXRlKGYsZix0LnRyYW5zZm9ybS5hbmdsZSk7dmFyIGQscCxtLHYsZyx5PU1hdGguc3FydChoLmhlaWdodCpoLmhlaWdodC80KigxK2guYWx0aXR1ZGUqaC5hbHRpdHVkZSkpLGI9aC5oZWlnaHQvMipNYXRoLnRhbihoLl9waXRjaCkseD0oeStiKS95LTEsXz1yLnBhaW50WyJsaW5lLWRhc2hhcnJheSJdLHc9ci5wYWludFsibGluZS1wYXR0ZXJuIl07aWYoXylkPXQudXNlUHJvZ3JhbSgibGluZXNkZnBhdHRlcm4iKSxzLnVuaWZvcm0xZihkLnVfbGluZXdpZHRoLHIucGFpbnRbImxpbmUtd2lkdGgiXS8yKSxzLnVuaWZvcm0xZihkLnVfZ2Fwd2lkdGgsci5wYWludFsibGluZS1nYXAtd2lkdGgiXS8yKSxzLnVuaWZvcm0xZihkLnVfYW50aWFsaWFzaW5nLGwvMikscy51bmlmb3JtMWYoZC51X2JsdXIsdSkscy51bmlmb3JtNGZ2KGQudV9jb2xvcixjKSxzLnVuaWZvcm0xZihkLnVfb3BhY2l0eSxyLnBhaW50WyJsaW5lLW9wYWNpdHkiXSkscD10LmxpbmVBdGxhcy5nZXREYXNoKF8uZnJvbSwicm91bmQiPT09ci5sYXlvdXRbImxpbmUtY2FwIl0pLG09dC5saW5lQXRsYXMuZ2V0RGFzaChfLnRvLCJyb3VuZCI9PT1yLmxheW91dFsibGluZS1jYXAiXSkscy51bmlmb3JtMWkoZC51X2ltYWdlLDApLHMuYWN0aXZlVGV4dHVyZShzLlRFWFRVUkUwKSx0LmxpbmVBdGxhcy5iaW5kKHMpLHMudW5pZm9ybTFmKGQudV90ZXhfeV9hLHAueSkscy51bmlmb3JtMWYoZC51X3RleF95X2IsbS55KSxzLnVuaWZvcm0xZihkLnVfbWl4LF8udCkscy51bmlmb3JtMWYoZC51X2V4dHJhLHgpLHMudW5pZm9ybTFmKGQudV9vZmZzZXQsLXIucGFpbnRbImxpbmUtb2Zmc2V0Il0pLHMudW5pZm9ybU1hdHJpeDJmdihkLnVfYW50aWFsaWFzaW5nbWF0cml4LCExLGYpO2Vsc2UgaWYodyl7aWYodj10LnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHcuZnJvbSwhMCksZz10LnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHcudG8sITApLCF2fHwhZylyZXR1cm47ZD10LnVzZVByb2dyYW0oImxpbmVwYXR0ZXJuIikscy51bmlmb3JtMWkoZC51X2ltYWdlLDApLHMuYWN0aXZlVGV4dHVyZShzLlRFWFRVUkUwKSx0LnNwcml0ZUF0bGFzLmJpbmQocywhMCkscy51bmlmb3JtMWYoZC51X2xpbmV3aWR0aCxyLnBhaW50WyJsaW5lLXdpZHRoIl0vMikscy51bmlmb3JtMWYoZC51X2dhcHdpZHRoLHIucGFpbnRbImxpbmUtZ2FwLXdpZHRoIl0vMikscy51bmlmb3JtMWYoZC51X2FudGlhbGlhc2luZyxsLzIpLHMudW5pZm9ybTFmKGQudV9ibHVyLHUpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybl90bF9hLHYudGwpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybl9icl9hLHYuYnIpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybl90bF9iLGcudGwpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybl9icl9iLGcuYnIpLHMudW5pZm9ybTFmKGQudV9mYWRlLHcudCkscy51bmlmb3JtMWYoZC51X29wYWNpdHksci5wYWludFsibGluZS1vcGFjaXR5Il0pLHMudW5pZm9ybTFmKGQudV9leHRyYSx4KSxzLnVuaWZvcm0xZihkLnVfb2Zmc2V0LC1yLnBhaW50WyJsaW5lLW9mZnNldCJdKSxzLnVuaWZvcm1NYXRyaXgyZnYoZC51X2FudGlhbGlhc2luZ21hdHJpeCwhMSxmKX1lbHNlIGQ9dC51c2VQcm9ncmFtKCJsaW5lIikscy51bmlmb3JtMWYoZC51X2xpbmV3aWR0aCxyLnBhaW50WyJsaW5lLXdpZHRoIl0vMikscy51bmlmb3JtMWYoZC51X2dhcHdpZHRoLHIucGFpbnRbImxpbmUtZ2FwLXdpZHRoIl0vMikscy51bmlmb3JtMWYoZC51X2FudGlhbGlhc2luZyxsLzIpLHMudW5pZm9ybTFmKGQudV9ibHVyLHUpLHMudW5pZm9ybTFmKGQudV9leHRyYSx4KSxzLnVuaWZvcm0xZihkLnVfb2Zmc2V0LC1yLnBhaW50WyJsaW5lLW9mZnNldCJdKSxzLnVuaWZvcm1NYXRyaXgyZnYoZC51X2FudGlhbGlhc2luZ21hdHJpeCwhMSxmKSxzLnVuaWZvcm00ZnYoZC51X2NvbG9yLGMpLHMudW5pZm9ybTFmKGQudV9vcGFjaXR5LHIucGFpbnRbImxpbmUtb3BhY2l0eSJdKTtmb3IodmFyIE09MDtNPG8ubGVuZ3RoO00rKyl7dmFyIGs9b1tNXSxBPWUuZ2V0VGlsZShrKSxUPUEuZ2V0QnVja2V0KHIpO2lmKFQpe3ZhciBTPVQuYnVmZmVyR3JvdXBzLmxpbmU7aWYoUyl7dC5lbmFibGVUaWxlQ2xpcHBpbmdNYXNrKGspO3ZhciBFPXQudHJhbnNsYXRlUG9zTWF0cml4KGsucG9zTWF0cml4LEEsci5wYWludFsibGluZS10cmFuc2xhdGUiXSxyLnBhaW50WyJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiXSk7cy51bmlmb3JtTWF0cml4NGZ2KGQudV9tYXRyaXgsITEsRSk7dmFyIEw9MS9hKEEsMSx0LnRyYW5zZm9ybS56b29tKTtpZihfKXt2YXIgQz1wLndpZHRoKl8uZnJvbVNjYWxlLHo9bS53aWR0aCpfLnRvU2NhbGUsST1bMS9hKEEsQyx0LnRyYW5zZm9ybS50aWxlWm9vbSksLXAuaGVpZ2h0LzJdLEQ9WzEvYShBLHosdC50cmFuc2Zvcm0udGlsZVpvb20pLC1tLmhlaWdodC8yXSxQPXQubGluZUF0bGFzLndpZHRoLygyNTYqTWF0aC5taW4oQyx6KSpuLmRldmljZVBpeGVsUmF0aW8pLzI7cy51bmlmb3JtMWYoZC51X3JhdGlvLEwpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybnNjYWxlX2EsSSkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuc2NhbGVfYixEKSxzLnVuaWZvcm0xZihkLnVfc2RmZ2FtbWEsUCl9ZWxzZSB3PyhzLnVuaWZvcm0xZihkLnVfcmF0aW8sTCkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuX3NpemVfYSxbYShBLHYuc2l6ZVswXSp3LmZyb21TY2FsZSx0LnRyYW5zZm9ybS50aWxlWm9vbSksZy5zaXplWzFdXSkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuX3NpemVfYixbYShBLGcuc2l6ZVswXSp3LnRvU2NhbGUsdC50cmFuc2Zvcm0udGlsZVpvb20pLGcuc2l6ZVsxXV0pKTpzLnVuaWZvcm0xZihkLnVfcmF0aW8sTCk7Zm9yKHZhciBPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBSPVNbT107Ui52YW9zW3IuaWRdLmJpbmQocyxkLFIubGF5b3V0VmVydGV4QnVmZmVyLFIuZWxlbWVudEJ1ZmZlcikscy5kcmF3RWxlbWVudHMocy5UUklBTkdMRVMsMypSLmVsZW1lbnRCdWZmZXIubGVuZ3RoLHMuVU5TSUdORURfU0hPUlQsMCl9fX19fX19fSx7Ii4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyI6MzYxLCIuLi91dGlsL2Jyb3dzZXIiOjQyNCwiZ2wtbWF0cml4IjoxOTF9XSwzNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtpZighdC5pc09wYXF1ZVBhc3Mpe3ZhciBhPXQuZ2w7YS5lbmFibGUoYS5ERVBUSF9URVNUKSx0LmRlcHRoTWFzayghMCksYS5kZXB0aEZ1bmMoYS5MRVNTKTtmb3IodmFyIG89bi5sZW5ndGgmJm5bMF0ueixzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBsPW5bc107dC5zZXREZXB0aFN1YmxheWVyKGwuei1vKSxpKHQsZSxyLGwpfWEuZGVwdGhGdW5jKGEuTEVRVUFMKX19ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT10LmdsO2kuZGlzYWJsZShpLlNURU5DSUxfVEVTVCk7dmFyIHU9ZS5nZXRUaWxlKG4pLGM9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KG4sZS5tYXh6b29tKSxoPXQudXNlUHJvZ3JhbSgicmFzdGVyIik7aS51bmlmb3JtTWF0cml4NGZ2KGgudV9tYXRyaXgsITEsYyksaS51bmlmb3JtMWYoaC51X2JyaWdodG5lc3NfbG93LHIucGFpbnRbInJhc3Rlci1icmlnaHRuZXNzLW1pbiJdKSxpLnVuaWZvcm0xZihoLnVfYnJpZ2h0bmVzc19oaWdoLHIucGFpbnRbInJhc3Rlci1icmlnaHRuZXNzLW1heCJdKSxpLnVuaWZvcm0xZihoLnVfc2F0dXJhdGlvbl9mYWN0b3IscyhyLnBhaW50WyJyYXN0ZXItc2F0dXJhdGlvbiJdKSksaS51bmlmb3JtMWYoaC51X2NvbnRyYXN0X2ZhY3RvcixvKHIucGFpbnRbInJhc3Rlci1jb250cmFzdCJdKSksaS51bmlmb3JtM2Z2KGgudV9zcGluX3dlaWdodHMsYShyLnBhaW50WyJyYXN0ZXItaHVlLXJvdGF0ZSJdKSk7dmFyIGYsZCxwPXUuc291cmNlJiZ1LnNvdXJjZS5maW5kTG9hZGVkUGFyZW50KG4sMCx7fSksbT1sKHUscCxyLHQudHJhbnNmb3JtKTtpLmFjdGl2ZVRleHR1cmUoaS5URVhUVVJFMCksaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQsdS50ZXh0dXJlKSxpLmFjdGl2ZVRleHR1cmUoaS5URVhUVVJFMSkscD8oaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQscC50ZXh0dXJlKSxmPU1hdGgucG93KDIscC5jb29yZC56LXUuY29vcmQueiksZD1bdS5jb29yZC54KmYlMSx1LmNvb3JkLnkqZiUxXSk6KGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHUudGV4dHVyZSksbVsxXT0wKSxpLnVuaWZvcm0yZnYoaC51X3RsX3BhcmVudCxkfHxbMCwwXSksaS51bmlmb3JtMWYoaC51X3NjYWxlX3BhcmVudCxmfHwxKSxpLnVuaWZvcm0xZihoLnVfYnVmZmVyX3NjYWxlLDEpLGkudW5pZm9ybTFmKGgudV9vcGFjaXR5MCxtWzBdKSxpLnVuaWZvcm0xZihoLnVfb3BhY2l0eTEsbVsxXSksaS51bmlmb3JtMWkoaC51X2ltYWdlMCwwKSxpLnVuaWZvcm0xaShoLnVfaW1hZ2UxLDEpO3ZhciB2PXUuYm91bmRzQnVmZmVyfHx0LnJhc3RlckJvdW5kc0J1ZmZlcjsodS5ib3VuZHNWQU98fHQucmFzdGVyQm91bmRzVkFPKS5iaW5kKGksaCx2KSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRV9TVFJJUCwwLHYubGVuZ3RoKX1mdW5jdGlvbiBhKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PjA/MS8oMS10KToxK3R9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdD4wPzEtMS8oMS4wMDEtdCk6LXR9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgaT1bMSwwXSxhPXIucGFpbnRbInJhc3Rlci1mYWRlLWR1cmF0aW9uIl07aWYodC5zb3VyY2UmJmE+MCl7dmFyIG89KG5ldyBEYXRlKS5nZXRUaW1lKCkscz0oby10LnRpbWVBZGRlZCkvYSxsPWU/KG8tZS50aW1lQWRkZWQpL2E6LTEsYz1uLmNvdmVyaW5nWm9vbUxldmVsKHQuc291cmNlKSxoPSEhZSYmTWF0aC5hYnMoZS5jb29yZC56LWMpPk1hdGguYWJzKHQuY29vcmQuei1jKTshZXx8aD8oaVswXT11LmNsYW1wKHMsMCwxKSxpWzFdPTEtaVswXSk6KGlbMF09dS5jbGFtcCgxLWwsMCwxKSxpWzFdPTEtaVswXSl9dmFyIGY9ci5wYWludFsicmFzdGVyLW9wYWNpdHkiXTtyZXR1cm4gaVswXSo9ZixpWzFdKj1mLGl9dmFyIHU9dCgiLi4vdXRpbC91dGlsIiksYz10KCIuLi91dGlsL3N0cnVjdF9hcnJheSIpO2UuZXhwb3J0cz1uLG4uUmFzdGVyQm91bmRzQXJyYXk9bmV3IGMoe21lbWJlcnM6W3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn0se25hbWU6ImFfdGV4dHVyZV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9XX0pfSx7Ii4uL3V0aWwvc3RydWN0X2FycmF5Ijo0MzgsIi4uL3V0aWwvdXRpbCI6NDQwfV0sMzUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7aWYoIXQuaXNPcGFxdWVQYXNzKXt2YXIgYT0hKHIubGF5b3V0WyJ0ZXh0LWFsbG93LW92ZXJsYXAiXXx8ci5sYXlvdXRbImljb24tYWxsb3ctb3ZlcmxhcCJdfHxyLmxheW91dFsidGV4dC1pZ25vcmUtcGxhY2VtZW50Il18fHIubGF5b3V0WyJpY29uLWlnbm9yZS1wbGFjZW1lbnQiXSksbz10LmdsO2E/by5kaXNhYmxlKG8uU1RFTkNJTF9URVNUKTpvLmVuYWJsZShvLlNURU5DSUxfVEVTVCksdC5zZXREZXB0aFN1YmxheWVyKDApLHQuZGVwdGhNYXNrKCExKSxvLmRpc2FibGUoby5ERVBUSF9URVNUKSxpKHQsZSxyLG4sITEsci5wYWludFsiaWNvbi10cmFuc2xhdGUiXSxyLnBhaW50WyJpY29uLXRyYW5zbGF0ZS1hbmNob3IiXSxyLmxheW91dFsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSxyLmxheW91dFsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSxyLmxheW91dFsiaWNvbi1zaXplIl0sci5wYWludFsiaWNvbi1oYWxvLXdpZHRoIl0sci5wYWludFsiaWNvbi1oYWxvLWNvbG9yIl0sci5wYWludFsiaWNvbi1oYWxvLWJsdXIiXSxyLnBhaW50WyJpY29uLW9wYWNpdHkiXSxyLnBhaW50WyJpY29uLWNvbG9yIl0pLGkodCxlLHIsbiwhMCxyLnBhaW50WyJ0ZXh0LXRyYW5zbGF0ZSJdLHIucGFpbnRbInRleHQtdHJhbnNsYXRlLWFuY2hvciJdLHIubGF5b3V0WyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdLHIubGF5b3V0WyJ0ZXh0LXBpdGNoLWFsaWdubWVudCJdLHIubGF5b3V0WyJ0ZXh0LXNpemUiXSxyLnBhaW50WyJ0ZXh0LWhhbG8td2lkdGgiXSxyLnBhaW50WyJ0ZXh0LWhhbG8tY29sb3IiXSxyLnBhaW50WyJ0ZXh0LWhhbG8tYmx1ciJdLHIucGFpbnRbInRleHQtb3BhY2l0eSJdLHIucGFpbnRbInRleHQtY29sb3IiXSksby5lbmFibGUoby5ERVBUSF9URVNUKSxlLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMmJnModCxlLHIsbil9fWZ1bmN0aW9uIGkodCxlLHIsbixpLG8scyxsLHUsYyxoLGYsZCxwLG0pe2Zvcih2YXIgdj0wO3Y8bi5sZW5ndGg7disrKXt2YXIgZz1lLmdldFRpbGUoblt2XSkseT1nLmdldEJ1Y2tldChyKTtpZih5KXt2YXIgYj15LmJ1ZmZlckdyb3Vwcyx4PWk/Yi5nbHlwaDpiLmljb247eC5sZW5ndGgmJih0LmVuYWJsZVRpbGVDbGlwcGluZ01hc2soblt2XSksYSh0LHIsblt2XS5wb3NNYXRyaXgsZyx5LHgsaSxpfHx5LnNkZkljb25zLCFpJiZ5Lmljb25zTmVlZExpbmVhcixpP3kuYWRqdXN0ZWRUZXh0U2l6ZTp5LmFkanVzdGVkSWNvblNpemUseS5mb250c3RhY2ssbyxzLGwsdSxjLGgsZixkLHAsbSkpfX19ZnVuY3Rpb24gYSh0LGUscixuLGksYSxzLHUsYyxoLGYsZCxwLG0sdixnLHksYix4LF8sdyl7dmFyIE0sayxBLFQ9dC5nbCxTPXQudHJhbnNmb3JtLEU9Im1hcCI9PT1tLEw9Im1hcCI9PT12LEM9cz8yNDoxLHo9Zy9DO2lmKEw/KGs9bChuLDEsdC50cmFuc2Zvcm0uem9vbSkqeixBPTEvTWF0aC5jb3MoUy5fcGl0Y2gpLE09W2ssa10pOihrPXQudHJhbnNmb3JtLmFsdGl0dWRlKnosQT0xLE09W1MucGl4ZWxzVG9HTFVuaXRzWzBdKmssUy5waXhlbHNUb0dMVW5pdHNbMV0qa10pLHN8fHQuc3R5bGUuc3ByaXRlLmxvYWRlZCgpKXt2YXIgST10LnVzZVByb2dyYW0odT8ic2RmIjoiaWNvbiIpO2lmKFQudW5pZm9ybU1hdHJpeDRmdihJLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KHIsbixkLHApKSxULnVuaWZvcm0xaShJLnVfcm90YXRlX3dpdGhfbWFwLEUpLFQudW5pZm9ybTFpKEkudV9waXRjaF93aXRoX21hcCxMKSxULnVuaWZvcm0yZnYoSS51X2V4dHJ1ZGVfc2NhbGUsTSksVC5hY3RpdmVUZXh0dXJlKFQuVEVYVFVSRTApLFQudW5pZm9ybTFpKEkudV90ZXh0dXJlLDApLHMpe3ZhciBEPWYmJnQuZ2x5cGhTb3VyY2UuZ2V0R2x5cGhBdGxhcyhmKTtpZighRClyZXR1cm47RC51cGRhdGVUZXh0dXJlKFQpLFQudW5pZm9ybTJmKEkudV90ZXhzaXplLEQud2lkdGgvNCxELmhlaWdodC80KX1lbHNle3ZhciBQPXQub3B0aW9ucy5yb3RhdGluZ3x8dC5vcHRpb25zLnpvb21pbmcsTz0xIT09enx8by5kZXZpY2VQaXhlbFJhdGlvIT09dC5zcHJpdGVBdGxhcy5waXhlbFJhdGlvfHxjLFI9THx8dC50cmFuc2Zvcm0ucGl0Y2g7dC5zcHJpdGVBdGxhcy5iaW5kKFQsdXx8UHx8T3x8UiksVC51bmlmb3JtMmYoSS51X3RleHNpemUsdC5zcHJpdGVBdGxhcy53aWR0aC80LHQuc3ByaXRlQXRsYXMuaGVpZ2h0LzQpfXZhciBGPU1hdGgubG9nKGcvaCkvTWF0aC5MTjJ8fDA7VC51bmlmb3JtMWYoSS51X3pvb20sMTAqKHQudHJhbnNmb3JtLnpvb20tRikpLFQuYWN0aXZlVGV4dHVyZShULlRFWFRVUkUxKSx0LmZyYW1lSGlzdG9yeS5iaW5kKFQpLFQudW5pZm9ybTFpKEkudV9mYWRldGV4dHVyZSwxKTt2YXIgajtpZih1KXt2YXIgTj0uMTA1KkMvZy9vLmRldmljZVBpeGVsUmF0aW87aWYoeSl7ClQudW5pZm9ybTFmKEkudV9nYW1tYSwoMS4xOSp4L3ovOCtOKSpBKSxULnVuaWZvcm00ZnYoSS51X2NvbG9yLGIpLFQudW5pZm9ybTFmKEkudV9vcGFjaXR5LF8pLFQudW5pZm9ybTFmKEkudV9idWZmZXIsKDYteS96KS84KTtmb3IodmFyIEI9MDtCPGEubGVuZ3RoO0IrKylqPWFbQl0sai52YW9zW2UuaWRdLmJpbmQoVCxJLGoubGF5b3V0VmVydGV4QnVmZmVyLGouZWxlbWVudEJ1ZmZlciksVC5kcmF3RWxlbWVudHMoVC5UUklBTkdMRVMsMypqLmVsZW1lbnRCdWZmZXIubGVuZ3RoLFQuVU5TSUdORURfU0hPUlQsMCl9VC51bmlmb3JtMWYoSS51X2dhbW1hLE4qQSksVC51bmlmb3JtNGZ2KEkudV9jb2xvcix3KSxULnVuaWZvcm0xZihJLnVfb3BhY2l0eSxfKSxULnVuaWZvcm0xZihJLnVfYnVmZmVyLC43NSksVC51bmlmb3JtMWYoSS51X3BpdGNoLFMucGl0Y2gvMzYwKjIqTWF0aC5QSSksVC51bmlmb3JtMWYoSS51X2JlYXJpbmcsUy5iZWFyaW5nLzM2MCoyKk1hdGguUEkpLFQudW5pZm9ybTFmKEkudV9hc3BlY3RfcmF0aW8sUy53aWR0aC9TLmhlaWdodCk7Zm9yKHZhciBVPTA7VTxhLmxlbmd0aDtVKyspaj1hW1VdLGoudmFvc1tlLmlkXS5iaW5kKFQsSSxqLmxheW91dFZlcnRleEJ1ZmZlcixqLmVsZW1lbnRCdWZmZXIpLFQuZHJhd0VsZW1lbnRzKFQuVFJJQU5HTEVTLDMqai5lbGVtZW50QnVmZmVyLmxlbmd0aCxULlVOU0lHTkVEX1NIT1JULDApfWVsc2V7VC51bmlmb3JtMWYoSS51X29wYWNpdHksXyk7Zm9yKHZhciBWPTA7VjxhLmxlbmd0aDtWKyspaj1hW1ZdLGoudmFvc1tlLmlkXS5iaW5kKFQsSSxqLmxheW91dFZlcnRleEJ1ZmZlcixqLmVsZW1lbnRCdWZmZXIpLFQuZHJhd0VsZW1lbnRzKFQuVFJJQU5HTEVTLDMqai5lbGVtZW50QnVmZmVyLmxlbmd0aCxULlVOU0lHTkVEX1NIT1JULDApfX19dmFyIG89dCgiLi4vdXRpbC9icm93c2VyIikscz10KCIuL2RyYXdfY29sbGlzaW9uX2RlYnVnIiksbD10KCIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiKTtlLmV4cG9ydHM9bn0seyIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiOjM2MSwiLi4vdXRpbC9icm93c2VyIjo0MjQsIi4vZHJhd19jb2xsaXNpb25fZGVidWciOjM0NX1dLDM1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5jaGFuZ2VUaW1lcz1uZXcgRmxvYXQ2NEFycmF5KDI1NiksdGhpcy5jaGFuZ2VPcGFjaXRpZXM9bmV3IFVpbnQ4QXJyYXkoMjU2KSx0aGlzLm9wYWNpdGllcz1uZXcgVWludDhDbGFtcGVkQXJyYXkoMjU2KSx0aGlzLmFycmF5PW5ldyBVaW50OEFycmF5KHRoaXMub3BhY2l0aWVzLmJ1ZmZlciksdGhpcy5mYWRlRHVyYXRpb249MzAwLHRoaXMucHJldmlvdXNab29tPTAsdGhpcy5maXJzdEZyYW1lPSEwfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnJlY29yZD1mdW5jdGlvbih0KXt2YXIgZT1EYXRlLm5vdygpO3RoaXMuZmlyc3RGcmFtZSYmKGU9MCx0aGlzLmZpcnN0RnJhbWU9ITEpLHQ9TWF0aC5mbG9vcigxMCp0KTt2YXIgcjtpZih0PHRoaXMucHJldmlvdXNab29tKWZvcihyPXQrMTtyPD10aGlzLnByZXZpb3VzWm9vbTtyKyspdGhpcy5jaGFuZ2VUaW1lc1tyXT1lLHRoaXMuY2hhbmdlT3BhY2l0aWVzW3JdPXRoaXMub3BhY2l0aWVzW3JdO2Vsc2UgZm9yKHI9dDtyPnRoaXMucHJldmlvdXNab29tO3ItLSl0aGlzLmNoYW5nZVRpbWVzW3JdPWUsdGhpcy5jaGFuZ2VPcGFjaXRpZXNbcl09dGhpcy5vcGFjaXRpZXNbcl07Zm9yKHI9MDtyPDI1NjtyKyspe3ZhciBuPWUtdGhpcy5jaGFuZ2VUaW1lc1tyXSxpPW4vdGhpcy5mYWRlRHVyYXRpb24qMjU1O3RoaXMub3BhY2l0aWVzW3JdPXI8PXQ/dGhpcy5jaGFuZ2VPcGFjaXRpZXNbcl0raTp0aGlzLmNoYW5nZU9wYWNpdGllc1tyXS1pfXRoaXMuY2hhbmdlZD0hMCx0aGlzLnByZXZpb3VzWm9vbT10fSxuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3RoaXMudGV4dHVyZT8odC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmNoYW5nZWQmJih0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELDAsMCwwLDI1NiwxLHQuQUxQSEEsdC5VTlNJR05FRF9CWVRFLHRoaXMuYXJyYXkpLHRoaXMuY2hhbmdlZD0hMSkpOih0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LkFMUEhBLDI1NiwxLDAsdC5BTFBIQSx0LlVOU0lHTkVEX0JZVEUsdGhpcy5hcnJheSkpfX0se31dLDM1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5uZXh0Um93PTAsdGhpcy5ieXRlcz00LHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KnRoaXMuYnl0ZXMpLHRoaXMucG9zaXRpb25zPXt9fXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNldFNwcml0ZT1mdW5jdGlvbih0KXt0aGlzLnNwcml0ZT10fSxuLnByb3RvdHlwZS5nZXREYXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5qb2luKCIsIikrZTtyZXR1cm4gdGhpcy5wb3NpdGlvbnNbcl18fCh0aGlzLnBvc2l0aW9uc1tyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5wb3NpdGlvbnNbcl19LG4ucHJvdG90eXBlLmFkZERhc2g9ZnVuY3Rpb24odCxlKXt2YXIgcj1lPzc6MCxuPTIqcisxO2lmKHRoaXMubmV4dFJvdytuPnRoaXMuaGVpZ2h0KXJldHVybiBpLndhcm5PbmNlKCJMaW5lQXRsYXMgb3V0IG9mIHNwYWNlIiksbnVsbDtmb3IodmFyIGE9MCxvPTA7bzx0Lmxlbmd0aDtvKyspYSs9dFtvXTtmb3IodmFyIHM9dGhpcy53aWR0aC9hLGw9cy8yLHU9dC5sZW5ndGglMj09MSxjPS1yO2M8PXI7YysrKWZvcih2YXIgaD10aGlzLm5leHRSb3crcitjLGY9dGhpcy53aWR0aCpoLGQ9dT8tdFt0Lmxlbmd0aC0xXTowLHA9dFswXSxtPTEsdj0wO3Y8dGhpcy53aWR0aDt2Kyspe2Zvcig7cDx2L3M7KWQ9cCxwKz10W21dLHUmJm09PT10Lmxlbmd0aC0xJiYocCs9dFswXSksbSsrO3ZhciBnLHk9TWF0aC5hYnModi1kKnMpLGI9TWF0aC5hYnModi1wKnMpLHg9TWF0aC5taW4oeSxiKSxfPW0lMj09MTtpZihlKXt2YXIgdz1yP2MvcioobCsxKTowO2lmKF8pe3ZhciBNPWwtTWF0aC5hYnModyk7Zz1NYXRoLnNxcnQoeCp4K00qTSl9ZWxzZSBnPWwtTWF0aC5zcXJ0KHgqeCt3KncpfWVsc2UgZz0oXz8xOi0xKSp4O3RoaXMuZGF0YVszKzQqKGYrdildPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LGcrMTI4KSl9dmFyIGs9e3k6KHRoaXMubmV4dFJvdytyKy41KS90aGlzLmhlaWdodCxoZWlnaHQ6MipyL3RoaXMuaGVpZ2h0LHdpZHRoOmF9O3JldHVybiB0aGlzLm5leHRSb3crPW4sdGhpcy5kaXJ0eT0hMCxrfSxuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3RoaXMudGV4dHVyZT8odC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsdC5SR0JBLHQuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LlJFUEVBVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuUkVQRUFUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTElORUFSKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTElORUFSKSx0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5SR0JBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpfX0seyIuLi91dGlsL3V0aWwiOjQ0MH1dLDM1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5nbD10LHRoaXMudHJhbnNmb3JtPWUsdGhpcy5yZXVzYWJsZVRleHR1cmVzPXt9LHRoaXMucHJlRmJvcz17fSx0aGlzLmZyYW1lSGlzdG9yeT1uZXcgbyx0aGlzLnNldHVwKCksdGhpcy5udW1TdWJsYXllcnM9cy5tYXhVbmRlcnpvb21pbmcrcy5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5saW5lV2lkdGhSYW5nZT10LmdldFBhcmFtZXRlcih0LkFMSUFTRURfTElORV9XSURUSF9SQU5HRSl9dmFyIGk9dCgiLi4vdXRpbC9icm93c2VyIiksYT10KCJnbC1tYXRyaXgiKS5tYXQ0LG89dCgiLi9mcmFtZV9oaXN0b3J5Iikscz10KCIuLi9zb3VyY2Uvc291cmNlX2NhY2hlIiksbD10KCIuLi9kYXRhL2J1Y2tldCIpLkVYVEVOVCx1PXQoIi4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyIpLGM9dCgiLi4vdXRpbC91dGlsIiksaD10KCIuLi91dGlsL3N0cnVjdF9hcnJheSIpLGY9dCgiLi4vZGF0YS9idWZmZXIiKSxkPXQoIi4vdmVydGV4X2FycmF5X29iamVjdCIpLHA9dCgiLi9kcmF3X3Jhc3RlciIpLlJhc3RlckJvdW5kc0FycmF5LG09dCgiLi9jcmVhdGVfdW5pZm9ybV9wcmFnbWFzIik7ZS5leHBvcnRzPW4sYy5leHRlbmQobi5wcm90b3R5cGUsdCgiLi9wYWludGVyL3VzZV9wcm9ncmFtIikpLG4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2w7dGhpcy53aWR0aD10KmkuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1lKmkuZGV2aWNlUGl4ZWxSYXRpbyxyLnZpZXdwb3J0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX0sbi5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QudmVyYm9zZT0hMCx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHQuZW5hYmxlKHQuU1RFTkNJTF9URVNUKSx0LmVuYWJsZSh0LkRFUFRIX1RFU1QpLHQuZGVwdGhGdW5jKHQuTEVRVUFMKSx0aGlzLl9kZXB0aE1hc2s9ITEsdC5kZXB0aE1hc2soITEpO3ZhciBlPXRoaXMuUG9zQXJyYXk9bmV3IGgoe21lbWJlcnM6W3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn1dfSkscj1uZXcgZTtyLmVtcGxhY2VCYWNrKDAsMCksci5lbXBsYWNlQmFjayhsLDApLHIuZW1wbGFjZUJhY2soMCxsKSxyLmVtcGxhY2VCYWNrKGwsbCksdGhpcy50aWxlRXh0ZW50QnVmZmVyPW5ldyBmKHIuc2VyaWFsaXplKCksZS5zZXJpYWxpemUoKSxmLkJ1ZmZlclR5cGUuVkVSVEVYKSx0aGlzLnRpbGVFeHRlbnRWQU89bmV3IGQsdGhpcy50aWxlRXh0ZW50UGF0dGVyblZBTz1uZXcgZDt2YXIgbj1uZXcgZTtuLmVtcGxhY2VCYWNrKDAsMCksbi5lbXBsYWNlQmFjayhsLDApLG4uZW1wbGFjZUJhY2sobCxsKSxuLmVtcGxhY2VCYWNrKDAsbCksbi5lbXBsYWNlQmFjaygwLDApLHRoaXMuZGVidWdCdWZmZXI9bmV3IGYobi5zZXJpYWxpemUoKSxlLnNlcmlhbGl6ZSgpLGYuQnVmZmVyVHlwZS5WRVJURVgpLHRoaXMuZGVidWdWQU89bmV3IGQ7dmFyIGk9bmV3IHA7aS5lbXBsYWNlQmFjaygwLDAsMCwwKSxpLmVtcGxhY2VCYWNrKGwsMCwzMjc2NywwKSxpLmVtcGxhY2VCYWNrKDAsbCwwLDMyNzY3KSxpLmVtcGxhY2VCYWNrKGwsbCwzMjc2NywzMjc2NyksdGhpcy5yYXN0ZXJCb3VuZHNCdWZmZXI9bmV3IGYoaS5zZXJpYWxpemUoKSxwLnNlcmlhbGl6ZSgpLGYuQnVmZmVyVHlwZS5WRVJURVgpLHRoaXMucmFzdGVyQm91bmRzVkFPPW5ldyBkfSxuLnByb3RvdHlwZS5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0LmNsZWFyQ29sb3IoMCwwLDAsMCksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVQpfSxuLnByb3RvdHlwZS5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QuY2xlYXJTdGVuY2lsKDApLHQuc3RlbmNpbE1hc2soMjU1KSx0LmNsZWFyKHQuU1RFTkNJTF9CVUZGRVJfQklUKX0sbi5wcm90b3R5cGUuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dC5jbGVhckRlcHRoKDEpLHRoaXMuZGVwdGhNYXNrKCEwKSx0LmNsZWFyKHQuREVQVEhfQlVGRkVSX0JJVCl9LG4ucHJvdG90eXBlLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO2UuY29sb3JNYXNrKCExLCExLCExLCExKSx0aGlzLmRlcHRoTWFzayghMSksZS5kaXNhYmxlKGUuREVQVEhfVEVTVCksZS5lbmFibGUoZS5TVEVOQ0lMX1RFU1QpLGUuc3RlbmNpbE1hc2soMjQ4KSxlLnN0ZW5jaWxPcChlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSk7dmFyIHI9MTt0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzPXt9O2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1tpLmlkXT1yKys8PDM7ZS5zdGVuY2lsRnVuYyhlLkFMV0FZUyxhLDI0OCk7dmFyIG89bShbe25hbWU6InVfY29sb3IiLGNvbXBvbmVudHM6NH0se25hbWU6InVfb3BhY2l0eSIsY29tcG9uZW50czoxfV0pLHM9dGhpcy51c2VQcm9ncmFtKCJmaWxsIixbXSxvLG8pO2UudW5pZm9ybU1hdHJpeDRmdihzLnVfbWF0cml4LCExLGkucG9zTWF0cml4KSx0aGlzLnRpbGVFeHRlbnRWQU8uYmluZChlLHMsdGhpcy50aWxlRXh0ZW50QnVmZmVyKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRV9TVFJJUCwwLHRoaXMudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfWUuc3RlbmNpbE1hc2soMCksZS5jb2xvck1hc2soITAsITAsITAsITApLHRoaXMuZGVwdGhNYXNrKCEwKSxlLmVuYWJsZShlLkRFUFRIX1RFU1QpfSxuLnByb3RvdHlwZS5lbmFibGVUaWxlQ2xpcHBpbmdNYXNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7ZS5zdGVuY2lsRnVuYyhlLkVRVUFMLHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdC5pZF0sMjQ4KX0sbi5wcm90b3R5cGUucHJlcGFyZUJ1ZmZlcnM9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmJpbmREZWZhdWx0RnJhbWVidWZmZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsbnVsbCl9O3ZhciB2PXtzeW1ib2w6dCgiLi9kcmF3X3N5bWJvbCIpLGNpcmNsZTp0KCIuL2RyYXdfY2lyY2xlIiksbGluZTp0KCIuL2RyYXdfbGluZSIpLGZpbGw6dCgiLi9kcmF3X2ZpbGwiKSxyYXN0ZXI6dCgiLi9kcmF3X3Jhc3RlciIpLGJhY2tncm91bmQ6dCgiLi9kcmF3X2JhY2tncm91bmQiKSxkZWJ1Zzp0KCIuL2RyYXdfZGVidWciKX07bi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdHlsZT10LHRoaXMub3B0aW9ucz1lLHRoaXMubGluZUF0bGFzPXQubGluZUF0bGFzLHRoaXMuc3ByaXRlQXRsYXM9dC5zcHJpdGVBdGxhcyx0aGlzLnNwcml0ZUF0bGFzLnNldFNwcml0ZSh0LnNwcml0ZSksdGhpcy5nbHlwaFNvdXJjZT10LmdseXBoU291cmNlLHRoaXMuZnJhbWVIaXN0b3J5LnJlY29yZCh0aGlzLnRyYW5zZm9ybS56b29tKSx0aGlzLnByZXBhcmVCdWZmZXJzKCksdGhpcy5jbGVhckNvbG9yKCksdGhpcy5jbGVhckRlcHRoKCksdGhpcy5zaG93T3ZlcmRyYXdJbnNwZWN0b3IoZS5zaG93T3ZlcmRyYXdJbnNwZWN0b3IpLHRoaXMuZGVwdGhSYW5nZT0odC5fb3JkZXIubGVuZ3RoKzIpKnRoaXMubnVtU3VibGF5ZXJzKnRoaXMuZGVwdGhFcHNpbG9uLHRoaXMucmVuZGVyUGFzcyh7aXNPcGFxdWVQYXNzOiEwfSksdGhpcy5yZW5kZXJQYXNzKHtpc09wYXF1ZVBhc3M6ITF9KX0sbi5wcm90b3R5cGUucmVuZGVyUGFzcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0eWxlLl9ncm91cHMscj10LmlzT3BhcXVlUGFzczt0aGlzLmN1cnJlbnRMYXllcj1yP3RoaXMuc3R5bGUuX29yZGVyLmxlbmd0aDotMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGksYT1lW3I/ZS5sZW5ndGgtMS1uOm5dLG89dGhpcy5zdHlsZS5zb3VyY2VzW2Euc291cmNlXSxzPVtdO2lmKG8pe2ZvcihzPW8uZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCksaT0wO2k8cy5sZW5ndGg7aSsrKXNbaV0ucG9zTWF0cml4PXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChzW2ldLG8ubWF4em9vbSk7dGhpcy5jbGVhclN0ZW5jaWwoKSxvLnByZXBhcmUmJm8ucHJlcGFyZSgpLG8uaXNUaWxlQ2xpcHBlZCYmdGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3Mocyl9Zm9yKHI/KHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcnx8dGhpcy5nbC5kaXNhYmxlKHRoaXMuZ2wuQkxFTkQpLHRoaXMuaXNPcGFxdWVQYXNzPSEwKToodGhpcy5nbC5lbmFibGUodGhpcy5nbC5CTEVORCksdGhpcy5pc09wYXF1ZVBhc3M9ITEscy5yZXZlcnNlKCkpLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIGw9YVtyP2EubGVuZ3RoLTEtaTppXTt0aGlzLmN1cnJlbnRMYXllcis9cj8tMToxLHRoaXMucmVuZGVyTGF5ZXIodGhpcyxvLGwscyl9byYmdi5kZWJ1Zyh0aGlzLG8scyl9fSxuLnByb3RvdHlwZS5kZXB0aE1hc2s9ZnVuY3Rpb24odCl7dCE9PXRoaXMuX2RlcHRoTWFzayYmKHRoaXMuX2RlcHRoTWFzaz10LHRoaXMuZ2wuZGVwdGhNYXNrKHQpKX0sbi5wcm90b3R5cGUucmVuZGVyTGF5ZXI9ZnVuY3Rpb24odCxlLHIsbil7ci5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKXx8KCJiYWNrZ3JvdW5kIj09PXIudHlwZXx8bi5sZW5ndGgpJiYodGhpcy5pZD1yLmlkLHZbci50eXBlXSh0LGUscixuKSl9LG4ucHJvdG90eXBlLnNldERlcHRoU3VibGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9MS0oKDErdGhpcy5jdXJyZW50TGF5ZXIpKnRoaXMubnVtU3VibGF5ZXJzK3QpKnRoaXMuZGVwdGhFcHNpbG9uLHI9ZS0xK3RoaXMuZGVwdGhSYW5nZTt0aGlzLmdsLmRlcHRoUmFuZ2UocixlKX0sbi5wcm90b3R5cGUudHJhbnNsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCFyWzBdJiYhclsxXSlyZXR1cm4gdDtpZigidmlld3BvcnQiPT09bil7dmFyIGk9TWF0aC5zaW4oLXRoaXMudHJhbnNmb3JtLmFuZ2xlKSxvPU1hdGguY29zKC10aGlzLnRyYW5zZm9ybS5hbmdsZSk7cj1bclswXSpvLXJbMV0qaSxyWzBdKmkrclsxXSpvXX12YXIgcz1bdShlLHJbMF0sdGhpcy50cmFuc2Zvcm0uem9vbSksdShlLHJbMV0sdGhpcy50cmFuc2Zvcm0uem9vbSksMF0sbD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gYS50cmFuc2xhdGUobCx0LHMpLGx9LG4ucHJvdG90eXBlLnNhdmVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmV1c2FibGVUZXh0dXJlc1t0LnNpemVdO2U/ZS5wdXNoKHQpOnRoaXMucmV1c2FibGVUZXh0dXJlc1t0LnNpemVdPVt0XX0sbi5wcm90b3R5cGUuZ2V0VGV4dHVyZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJldXNhYmxlVGV4dHVyZXNbdF07cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZS5wb3AoKTpudWxsfSxuLnByb3RvdHlwZS5saW5lV2lkdGg9ZnVuY3Rpb24odCl7dGhpcy5nbC5saW5lV2lkdGgoYy5jbGFtcCh0LHRoaXMubGluZVdpZHRoUmFuZ2VbMF0sdGhpcy5saW5lV2lkdGhSYW5nZVsxXSkpfSxuLnByb3RvdHlwZS5zaG93T3ZlcmRyYXdJbnNwZWN0b3I9ZnVuY3Rpb24odCl7aWYodHx8dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKXt0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9dDt2YXIgZT10aGlzLmdsO2lmKHQpe2UuYmxlbmRGdW5jKGUuQ09OU1RBTlRfQ09MT1IsZS5PTkUpO2UuYmxlbmRDb2xvcigxLzgsMS84LDEvOCwwKSxlLmNsZWFyQ29sb3IoMCwwLDAsMSksZS5jbGVhcihlLkNPTE9SX0JVRkZFUl9CSVQpfWVsc2UgZS5ibGVuZEZ1bmMoZS5PTkUsZS5PTkVfTUlOVVNfU1JDX0FMUEhBKX19fSx7Ii4uL2RhdGEvYnVja2V0IjozMjcsIi4uL2RhdGEvYnVmZmVyIjozMzIsIi4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyI6MzYxLCIuLi9zb3VyY2Uvc291cmNlX2NhY2hlIjozNjUsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL3N0cnVjdF9hcnJheSI6NDM4LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9jcmVhdGVfdW5pZm9ybV9wcmFnbWFzIjozNDIsIi4vZHJhd19iYWNrZ3JvdW5kIjozNDMsIi4vZHJhd19jaXJjbGUiOjM0NCwiLi9kcmF3X2RlYnVnIjozNDYsIi4vZHJhd19maWxsIjozNDcsIi4vZHJhd19saW5lIjozNDgsIi4vZHJhd19yYXN0ZXIiOjM0OSwiLi9kcmF3X3N5bWJvbCI6MzUwLCIuL2ZyYW1lX2hpc3RvcnkiOjM1MSwiLi9wYWludGVyL3VzZV9wcm9ncmFtIjozNTQsIi4vdmVydGV4X2FycmF5X29iamVjdCI6MzU1LCJnbC1tYXRyaXgiOjE5MX1dLDM1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQucmVwbGFjZSgvI3ByYWdtYSBtYXBib3g6IChbXHddKykgKFtcd10rKSAoW1x3XSspIChbXHddKykvZyxmdW5jdGlvbih0LHIsbixpLGEpe3JldHVybiBlW3JdW2FdLnJlcGxhY2UoL3t0eXBlfS9nLGkpLnJlcGxhY2UoL3twcmVjaXNpb259L2csbil9KX12YXIgaT10KCJhc3NlcnQiKSxhPXQoIi4uLy4uL3V0aWwvdXRpbCIpLG89dCgibWFwYm94LWdsLXNoYWRlcnMiKSxzPW8udXRpbDtlLmV4cG9ydHMuX2NyZWF0ZVByb2dyYW09ZnVuY3Rpb24odCxlLHIsbCl7Zm9yKHZhciB1PXRoaXMuZ2wsYz11LmNyZWF0ZVByb2dyYW0oKSxoPW9bdF0sZj0iI2RlZmluZSBNQVBCT1hfR0xfSlM7XG4iLGQ9MDtkPGUubGVuZ3RoO2QrKylmKz0iI2RlZmluZSAiK2VbZF0rIjtcbiI7dmFyIHA9dS5jcmVhdGVTaGFkZXIodS5GUkFHTUVOVF9TSEFERVIpO3Uuc2hhZGVyU291cmNlKHAsbihmK2guZnJhZ21lbnRTb3VyY2UsbCkpLHUuY29tcGlsZVNoYWRlcihwKSxpKHUuZ2V0U2hhZGVyUGFyYW1ldGVyKHAsdS5DT01QSUxFX1NUQVRVUyksdS5nZXRTaGFkZXJJbmZvTG9nKHApKSx1LmF0dGFjaFNoYWRlcihjLHApO3ZhciBtPXUuY3JlYXRlU2hhZGVyKHUuVkVSVEVYX1NIQURFUik7dS5zaGFkZXJTb3VyY2UobSxuKGYrcytoLnZlcnRleFNvdXJjZSxyKSksdS5jb21waWxlU2hhZGVyKG0pLGkodS5nZXRTaGFkZXJQYXJhbWV0ZXIobSx1LkNPTVBJTEVfU1RBVFVTKSx1LmdldFNoYWRlckluZm9Mb2cobSkpLHUuYXR0YWNoU2hhZGVyKGMsbSksdS5saW5rUHJvZ3JhbShjKSxpKHUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihjLHUuTElOS19TVEFUVVMpLHUuZ2V0UHJvZ3JhbUluZm9Mb2coYykpO2Zvcih2YXIgdj17fSxnPXUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihjLHUuQUNUSVZFX0FUVFJJQlVURVMpLHk9MDt5PGc7eSsrKXt2YXIgYj11LmdldEFjdGl2ZUF0dHJpYihjLHkpO3ZbYi5uYW1lXT11LmdldEF0dHJpYkxvY2F0aW9uKGMsYi5uYW1lKX1mb3IodmFyIHg9e30sXz11LmdldFByb2dyYW1QYXJhbWV0ZXIoYyx1LkFDVElWRV9VTklGT1JNUyksdz0wO3c8Xzt3Kyspe3ZhciBNPXUuZ2V0QWN0aXZlVW5pZm9ybShjLHcpO3hbTS5uYW1lXT11LmdldFVuaWZvcm1Mb2NhdGlvbihjLE0ubmFtZSl9cmV0dXJuIGEuZXh0ZW5kKHtwcm9ncmFtOmMsZGVmaW5pdGlvbjpoLGF0dHJpYnV0ZXM6dixudW1BdHRyaWJ1dGVzOmd9LHYseCl9LGUuZXhwb3J0cy5fY3JlYXRlUHJvZ3JhbUNhY2hlZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNhY2hlPXRoaXMuY2FjaGV8fHt9O3ZhciBpPUpTT04uc3RyaW5naWZ5KHtuYW1lOnQsZGVmaW5lczplLHZlcnRleFByYWdtYXM6cixmcmFnbWVudFByYWdtYXM6bn0pO3JldHVybiB0aGlzLmNhY2hlW2ldfHwodGhpcy5jYWNoZVtpXT10aGlzLl9jcmVhdGVQcm9ncmFtKHQsZSxyLG4pKSx0aGlzLmNhY2hlW2ldfSxlLmV4cG9ydHMudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmdsO2U9ZXx8W10sdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yJiYoZT1lLmNvbmNhdCgiT1ZFUkRSQVdfSU5TUEVDVE9SIikpO3ZhciBhPXRoaXMuX2NyZWF0ZVByb2dyYW1DYWNoZWQodCxlLHIsbik7cmV0dXJuIHRoaXMuY3VycmVudFByb2dyYW0hPT1hJiYoaS51c2VQcm9ncmFtKGEucHJvZ3JhbSksdGhpcy5jdXJyZW50UHJvZ3JhbT1hKSxhfX0seyIuLi8uLi91dGlsL3V0aWwiOjQ0MCxhc3NlcnQ6NDUsIm1hcGJveC1nbC1zaGFkZXJzIjozMDF9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuYm91bmRQcm9ncmFtPW51bGwsdGhpcy5ib3VuZFZlcnRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRWZXJ0ZXhCdWZmZXIyPW51bGwsdGhpcy5ib3VuZEVsZW1lbnRCdWZmZXI9bnVsbCx0aGlzLnZhbz1udWxsfXZhciBpPXQoImFzc2VydCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2b2lkIDA9PT10LmV4dFZlcnRleEFycmF5T2JqZWN0JiYodC5leHRWZXJ0ZXhBcnJheU9iamVjdD10LmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSk7dmFyIGE9IXRoaXMudmFvfHx0aGlzLmJvdW5kUHJvZ3JhbSE9PWV8fHRoaXMuYm91bmRWZXJ0ZXhCdWZmZXIhPT1yfHx0aGlzLmJvdW5kVmVydGV4QnVmZmVyMiE9PWl8fHRoaXMuYm91bmRFbGVtZW50QnVmZmVyIT09bjshdC5leHRWZXJ0ZXhBcnJheU9iamVjdHx8YT90aGlzLmZyZXNoQmluZCh0LGUscixuLGkpOnQuZXh0VmVydGV4QXJyYXlPYmplY3QuYmluZFZlcnRleEFycmF5T0VTKHRoaXMudmFvKX0sbi5wcm90b3R5cGUuZnJlc2hCaW5kPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8scz1lLm51bUF0dHJpYnV0ZXM7aWYodC5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KHQpLHRoaXMudmFvPXQuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSx0LmV4dFZlcnRleEFycmF5T2JqZWN0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksbz0wLHRoaXMuYm91bmRQcm9ncmFtPWUsdGhpcy5ib3VuZFZlcnRleEJ1ZmZlcj1yLHRoaXMuYm91bmRWZXJ0ZXhCdWZmZXIyPWEsdGhpcy5ib3VuZEVsZW1lbnRCdWZmZXI9bjtlbHNle289dC5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGw9cztsPG87bCsrKWkoMCE9PWwpLHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGwpfWZvcih2YXIgdT1vO3U8czt1KyspdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1KTtyLmJpbmQodCksci5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh0LGUpLGEmJihhLmJpbmQodCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh0LGUpKSxuJiZuLmJpbmQodCksdC5jdXJyZW50TnVtQXR0cmlidXRlcz1zfSxuLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5leHRWZXJ0ZXhBcnJheU9iamVjdDtlJiZlLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0sbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXt2YXIgZT10LmV4dFZlcnRleEFycmF5T2JqZWN0O2UmJnRoaXMudmFvJiYoZS5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksdGhpcy52YW89bnVsbCl9fSx7YXNzZXJ0OjQ1fV0sMzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2U9ZXx8e30sdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1yLHRoaXMuX2RhdGE9ZS5kYXRhLHZvaWQgMCE9PWUubWF4em9vbSYmKHRoaXMubWF4em9vbT1lLm1heHpvb20pLGUudHlwZSYmKHRoaXMudHlwZT1lLnR5cGUpO3ZhciBuPXMvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9YS5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6ZS5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PWUuYnVmZmVyP2UuYnVmZmVyOjEyOCkqbix0b2xlcmFuY2U6KHZvaWQgMCE9PWUudG9sZXJhbmNlP2UudG9sZXJhbmNlOi4zNzUpKm4sZXh0ZW50OnMsbWF4Wm9vbTp0aGlzLm1heHpvb219LHN1cGVyY2x1c3Rlck9wdGlvbnM6e21heFpvb206TWF0aC5taW4oZS5jbHVzdGVyTWF4Wm9vbSx0aGlzLm1heHpvb20tMSl8fHRoaXMubWF4em9vbS0xLGV4dGVudDpzLHJhZGl1czooZS5jbHVzdGVyUmFkaXVzfHw1MCkqbixsb2c6ITF9fSxlLndvcmtlck9wdGlvbnMpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24odCl7aWYodClyZXR1cm4gdm9pZCB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO3RoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKX12YXIgaT10KCIuLi91dGlsL2V2ZW50ZWQiKSxhPXQoIi4uL3V0aWwvdXRpbCIpLG89dCgicmVzb2x2ZS11cmwiKSxzPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5UO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWEuaW5oZXJpdChpLHt0eXBlOiJnZW9qc29uIixtaW56b29tOjAsbWF4em9vbToxOCx0aWxlU2l6ZTo1MTIsaXNUaWxlQ2xpcHBlZDohMCxyZXBhcnNlT3ZlcnNjYWxlZDohMCxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLm1hcD10fSxzZXREYXRhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kYXRhPXQsdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbih0KXtpZih0KXJldHVybiB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO3RoaXMuZmlyZSgiY2hhbmdlIil9LmJpbmQodGhpcykpLHRoaXN9LF91cGRhdGVXb3JrZXJEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucykscj10aGlzLl9kYXRhOyJzdHJpbmciPT10eXBlb2Ygcj9lLnVybD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz9vKHdpbmRvdy5sb2NhdGlvbi5ocmVmLHIpOnI6ZS5kYXRhPUpTT04uc3RyaW5naWZ5KHIpLHRoaXMud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQodGhpcy50eXBlKyIubG9hZERhdGEiLGUsZnVuY3Rpb24oZSl7dGhpcy5fbG9hZGVkPSEwLHQoZSl9LmJpbmQodGhpcykpfSxsb2FkVGlsZTpmdW5jdGlvbih0LGUpe3ZhciByPXQuY29vcmQuej50aGlzLm1heHpvb20/TWF0aC5wb3coMix0LmNvb3JkLnotdGhpcy5tYXh6b29tKToxLG49e3R5cGU6dGhpcy50eXBlLHVpZDp0LnVpZCxjb29yZDp0LmNvb3JkLHpvb206dC5jb29yZC56LG1heFpvb206dGhpcy5tYXh6b29tLHRpbGVTaXplOnRoaXMudGlsZVNpemUsc291cmNlOnRoaXMuaWQsb3ZlcnNjYWxpbmc6cixhbmdsZTp0aGlzLm1hcC50cmFuc2Zvcm0uYW5nbGUscGl0Y2g6dGhpcy5tYXAudHJhbnNmb3JtLnBpdGNoLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O3Qud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQoImxvYWQgdGlsZSIsbixmdW5jdGlvbihyLG4pe2lmKHQudW5sb2FkVmVjdG9yRGF0YSh0aGlzLm1hcC5wYWludGVyKSwhdC5hYm9ydGVkKXJldHVybiByP2Uocik6KHQubG9hZFZlY3RvckRhdGEobix0aGlzLm1hcC5zdHlsZSksdC5yZWRvV2hlbkRvbmUmJih0LnJlZG9XaGVuRG9uZT0hMSx0LnJlZG9QbGFjZW1lbnQodGhpcykpLGUobnVsbCkpfS5iaW5kKHRoaXMpLHRoaXMud29ya2VySUQpfSxhYm9ydFRpbGU6ZnVuY3Rpb24odCl7dC5hYm9ydGVkPSEwfSx1bmxvYWRUaWxlOmZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSh0aGlzLm1hcC5wYWludGVyKSx0aGlzLmRpc3BhdGNoZXIuc2VuZCgicmVtb3ZlIHRpbGUiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9LGZ1bmN0aW9uKCl7fSx0LndvcmtlcklEKX0sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLGRhdGE6dGhpcy5fZGF0YX19fSl9LHsiLi4vZGF0YS9idWNrZXQiOjMyNywiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvdXRpbCI6NDQwLCJyZXNvbHZlLXVybCI6NDk5fV0sMzU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ImJih0aGlzLmxvYWRHZW9KU09OPXIpLGguY2FsbCh0aGlzLHQsZSl9dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuLi91dGlsL2FqYXgiKSxvPXQoImdlb2pzb24tcmV3aW5kIikscz10KCIuL2dlb2pzb25fd3JhcHBlciIpLGw9dCgidnQtcGJmIiksdT10KCJzdXBlcmNsdXN0ZXIiKSxjPXQoImdlb2pzb24tdnQiKSxoPXQoIi4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChoLHtfZ2VvSlNPTkluZGV4ZXM6e30sbG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNvdXJjZSxuPXQuY29vcmQ7aWYoIXRoaXMuX2dlb0pTT05JbmRleGVzW3JdKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGk9dGhpcy5fZ2VvSlNPTkluZGV4ZXNbcl0uZ2V0VGlsZShNYXRoLm1pbihuLnosdC5tYXhab29tKSxuLngsbi55KTtpZighaSlyZXR1cm4gZShudWxsLG51bGwpO3ZhciBhPW5ldyBzKGkuZmVhdHVyZXMpO2EubmFtZT0iX2dlb2pzb25UaWxlTGF5ZXIiO3ZhciBvPWwoe2xheWVyczp7X2dlb2pzb25UaWxlTGF5ZXI6YX19KTswPT09by5ieXRlT2Zmc2V0JiZvLmJ5dGVMZW5ndGg9PT1vLmJ1ZmZlci5ieXRlTGVuZ3RofHwobz1uZXcgVWludDhBcnJheShvKSksZShudWxsLHt0aWxlOmEscmF3VGlsZURhdGE6by5idWZmZXJ9KX0sbG9hZERhdGE6ZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbihyLG4pe3JldHVybiByP2Uocik6Im9iamVjdCIhPXR5cGVvZiBuP2UobmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKToobyhuLCEwKSx2b2lkIHRoaXMuX2luZGV4RGF0YShuLHQsZnVuY3Rpb24ocixuKXtpZihyKXJldHVybiBlKHIpO3RoaXMuX2dlb0pTT05JbmRleGVzW3Quc291cmNlXT1uLGUobnVsbCl9LmJpbmQodGhpcykpKX0uYmluZCh0aGlzKTt0aGlzLmxvYWRHZW9KU09OKHQscil9LGxvYWRHZW9KU09OOmZ1bmN0aW9uKHQsZSl7aWYodC51cmwpYS5nZXRKU09OKHQudXJsLGUpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiB0LmRhdGEpcmV0dXJuIGUobmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTt0cnl7cmV0dXJuIGUobnVsbCxKU09OLnBhcnNlKHQuZGF0YSkpfWNhdGNoKHQpe3JldHVybiBlKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSl9fX0sX2luZGV4RGF0YTpmdW5jdGlvbih0LGUscil7dHJ5e2UuY2x1c3Rlcj9yKG51bGwsdShlLnN1cGVyY2x1c3Rlck9wdGlvbnMpLmxvYWQodC5mZWF0dXJlcykpOnIobnVsbCxjKHQsZS5nZW9qc29uVnRPcHRpb25zKSl9Y2F0Y2godCl7cmV0dXJuIHIodCl9fX0pfSx7Ii4uL3V0aWwvYWpheCI6NDIzLCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9nZW9qc29uX3dyYXBwZXIiOjM1OCwiLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlIjozNjksImdlb2pzb24tcmV3aW5kIjoxMzYsImdlb2pzb24tdnQiOjE0MCxzdXBlcmNsdXN0ZXI6NTI3LCJ2dC1wYmYiOjU1NH1dLDM1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuZmVhdHVyZXM9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLmV4dGVudD1zfWZ1bmN0aW9uIGkodCl7aWYodGhpcy50eXBlPXQudHlwZSwxPT09dC50eXBlKXt0aGlzLnJhd0dlb21ldHJ5PVtdO2Zvcih2YXIgZT0wO2U8dC5nZW9tZXRyeS5sZW5ndGg7ZSsrKXRoaXMucmF3R2VvbWV0cnkucHVzaChbdC5nZW9tZXRyeVtlXV0pfWVsc2UgdGhpcy5yYXdHZW9tZXRyeT10Lmdlb21ldHJ5O3RoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9c312YXIgYT10KCJwb2ludC1nZW9tZXRyeSIpLG89dCgidmVjdG9yLXRpbGUiKS5WZWN0b3JUaWxlRmVhdHVyZSxzPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5UO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHRoaXMuZmVhdHVyZXNbdF0pfSxpLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe2Zvcih2YXIgcj10W2VdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW4ucHVzaChuZXcgYShyW2ldWzBdLHJbaV1bMV0pKTt0aGlzLmdlb21ldHJ5LnB1c2gobil9cmV0dXJuIHRoaXMuZ2VvbWV0cnl9LGkucHJvdG90eXBlLmJib3g9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5fHx0aGlzLmxvYWRHZW9tZXRyeSgpO2Zvcih2YXIgdD10aGlzLmdlb21ldHJ5LGU9MS8wLHI9LTEvMCxuPTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz10W2FdLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtlPU1hdGgubWluKGUsbC54KSxyPU1hdGgubWF4KHIsbC54KSxuPU1hdGgubWluKG4sbC55KSxpPU1hdGgubWF4KGksbC55KX1yZXR1cm5bZSxuLHIsaV19LGkucHJvdG90eXBlLnRvR2VvSlNPTj1vLnByb3RvdHlwZS50b0dlb0pTT059LHsiLi4vZGF0YS9idWNrZXQiOjMyNywicG9pbnQtZ2VvbWV0cnkiOjQ4MiwidmVjdG9yLXRpbGUiOjU0OH1dLDM1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPXIsdGhpcy51cmw9ZS51cmwsdGhpcy5jb29yZGluYXRlcz1lLmNvb3JkaW5hdGVzLHUuZ2V0SW1hZ2UoZS51cmwsZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO3RoaXMuaW1hZ2U9cix0aGlzLmltYWdlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7dGhpcy5tYXAuX3JlcmVuZGVyKCl9LmJpbmQodGhpcykpLHRoaXMuX2xvYWRlZD0hMCx0aGlzLmZpcmUoImxvYWQiKSx0aGlzLm1hcCYmdGhpcy5zZXRDb29yZGluYXRlcyhlLmNvb3JkaW5hdGVzKX0uYmluZCh0aGlzKSl9dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuL3RpbGVfY29vcmQiKSxvPXQoIi4uL2dlby9sbmdfbGF0Iikscz10KCJwb2ludC1nZW9tZXRyeSIpLGw9dCgiLi4vdXRpbC9ldmVudGVkIiksdT10KCIuLi91dGlsL2FqYXgiKSxjPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5ULGg9dCgiLi4vcmVuZGVyL2RyYXdfcmFzdGVyIikuUmFzdGVyQm91bmRzQXJyYXksZj10KCIuLi9kYXRhL2J1ZmZlciIpLGQ9dCgiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1pLmluaGVyaXQobCx7bWluem9vbTowLG1heHpvb206MjIsdGlsZVNpemU6NTEyLG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5pbWFnZSYmdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKX0sc2V0Q29vcmRpbmF0ZXM6ZnVuY3Rpb24odCl7dGhpcy5jb29yZGluYXRlcz10O3ZhciBlPXRoaXMubWFwLHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUudHJhbnNmb3JtLmxvY2F0aW9uQ29vcmRpbmF0ZShvLmNvbnZlcnQodCkpLnpvb21UbygwKX0pLG49dGhpcy5jZW50ZXJDb29yZD1pLmdldENvb3JkaW5hdGVzQ2VudGVyKHIpO3JldHVybiBuLmNvbHVtbj1NYXRoLnJvdW5kKG4uY29sdW1uKSxuLnJvdz1NYXRoLnJvdW5kKG4ucm93KSx0aGlzLm1pbnpvb209dGhpcy5tYXh6b29tPW4uem9vbSx0aGlzLl9jb29yZD1uZXcgYShuLnpvb20sbi5jb2x1bW4sbi5yb3cpLHRoaXMuX3RpbGVDb29yZHM9ci5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC56b29tVG8obi56b29tKTtyZXR1cm4gbmV3IHMoTWF0aC5yb3VuZCgoZS5jb2x1bW4tbi5jb2x1bW4pKmMpLE1hdGgucm91bmQoKGUucm93LW4ucm93KSpjKSl9KSx0aGlzLmZpcmUoImNoYW5nZSIpLHRoaXN9LF9zZXRUaWxlOmZ1bmN0aW9uKHQpe3RoaXMuX3ByZXBhcmVkPSExLHRoaXMudGlsZT10O3ZhciBlPW5ldyBoO2UuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1swXS54LHRoaXMuX3RpbGVDb29yZHNbMF0ueSwwLDApLGUuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1sxXS54LHRoaXMuX3RpbGVDb29yZHNbMV0ueSwzMjc2NywwKSxlLmVtcGxhY2VCYWNrKHRoaXMuX3RpbGVDb29yZHNbM10ueCx0aGlzLl90aWxlQ29vcmRzWzNdLnksMCwzMjc2NyksZS5lbXBsYWNlQmFjayh0aGlzLl90aWxlQ29vcmRzWzJdLngsdGhpcy5fdGlsZUNvb3Jkc1syXS55LDMyNzY3LDMyNzY3KSx0aGlzLnRpbGUuYnVja2V0cz17fSx0aGlzLnRpbGUuYm91bmRzQnVmZmVyPW5ldyBmKGUuc2VyaWFsaXplKCksaC5zZXJpYWxpemUoKSxmLkJ1ZmZlclR5cGUuVkVSVEVYKSx0aGlzLnRpbGUuYm91bmRzVkFPPW5ldyBkLHRoaXMudGlsZS5zdGF0ZT0ibG9hZGVkIn0scHJlcGFyZTpmdW5jdGlvbigpe2lmKHRoaXMuX2xvYWRlZCYmdGhpcy5pbWFnZSYmdGhpcy5pbWFnZS5jb21wbGV0ZSYmdGhpcy50aWxlKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLGU9dC5nbDt0aGlzLl9wcmVwYXJlZD8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50aWxlLnRleHR1cmUpLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmltYWdlKSk6KHRoaXMudGlsZS50ZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGlsZS50ZXh0dXJlKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1QsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5SR0JBLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5pbWFnZSkpfX0sbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXt0aGlzLl9jb29yZCYmdGhpcy5fY29vcmQudG9TdHJpbmcoKT09PXQuY29vcmQudG9TdHJpbmcoKT8odGhpcy5fc2V0VGlsZSh0KSxlKG51bGwpKToodC5zdGF0ZT0iZXJyb3JlZCIsZShudWxsKSl9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsdXJsczp0aGlzLnVybCxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX19KX0seyIuLi9kYXRhL2J1Y2tldCI6MzI3LCIuLi9kYXRhL2J1ZmZlciI6MzMyLCIuLi9nZW8vbG5nX2xhdCI6MzM3LCIuLi9yZW5kZXIvZHJhd19yYXN0ZXIiOjM0OSwiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiOjM1NSwiLi4vdXRpbC9hamF4Ijo0MjMsIi4uL3V0aWwvZXZlbnRlZCI6NDMyLCIuLi91dGlsL3V0aWwiOjQ0MCwiLi90aWxlX2Nvb3JkIjozNjcsInBvaW50LWdlb21ldHJ5Ijo0ODJ9XSwzNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC91dGlsIiksaT10KCIuLi91dGlsL2FqYXgiKSxhPXQoIi4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vdXRpbC9tYXBib3giKS5ub3JtYWxpemVTb3VyY2VVUkw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiBlKHQpO3ZhciBpPW4ucGljayhyLFsidGlsZXMiLCJtaW56b29tIiwibWF4em9vbSIsImF0dHJpYnV0aW9uIl0pO3IudmVjdG9yX2xheWVycyYmKGkudmVjdG9yTGF5ZXJzPXIudmVjdG9yX2xheWVycyxpLnZlY3RvckxheWVySWRzPWkudmVjdG9yTGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSxlKG51bGwsaSl9O3QudXJsP2kuZ2V0SlNPTihvKHQudXJsKSxyKTphLmZyYW1lKHIuYmluZChudWxsLG51bGwsdCkpfX0seyIuLi91dGlsL2FqYXgiOjQyMywiLi4vdXRpbC9icm93c2VyIjo0MjQsIi4uL3V0aWwvbWFwYm94Ijo0MzcsIi4uL3V0aWwvdXRpbCI6NDQwfV0sMzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2RhdGEvYnVja2V0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSoobi5FWFRFTlQvKHQudGlsZVNpemUqTWF0aC5wb3coMixyLXQuY29vcmQueikpKX19LHsiLi4vZGF0YS9idWNrZXQiOjMyN31dLDM2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dC5jb29yZCxuPWUuY29vcmQ7cmV0dXJuIHIuei1uLnp8fHIueS1uLnl8fHIudy1uLnd8fHIueC1uLnh9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9dFswXXx8e30scj0xO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2Zvcih2YXIgaSBpbiBuKXt2YXIgYT1uW2ldLG89ZVtpXTtpZih2b2lkIDA9PT1vKW89ZVtpXT1hO2Vsc2UgZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspby5wdXNoKGFbc10pfX1yZXR1cm4gZX12YXIgYT10KCIuL3RpbGVfY29vcmQiKTtyLnJlbmRlcmVkPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD10LnRpbGVzSW4ocik7bC5zb3J0KG4pO2Zvcih2YXIgdT1bXSxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciBoPWxbY107aC50aWxlLmZlYXR1cmVJbmRleCYmdS5wdXNoKGgudGlsZS5mZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6aC5xdWVyeUdlb21ldHJ5LHNjYWxlOmguc2NhbGUsdGlsZVNpemU6aC50aWxlLnRpbGVTaXplLGJlYXJpbmc6cyxwYXJhbXM6YX0sZSkpfXJldHVybiBpKHUpfSxyLnNvdXJjZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0VGlsZUJ5SUQoZSl9KSxuPVtdLGk9e30sbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dLGw9bmV3IGEoTWF0aC5taW4ocy5zb3VyY2VNYXhab29tLHMuY29vcmQueikscy5jb29yZC54LHMuY29vcmQueSwwKS5pZDtpW2xdfHwoaVtsXT0hMCxzLnF1ZXJ5U291cmNlRmVhdHVyZXMobixlKSl9cmV0dXJuIG59fSx7Ii4vdGlsZV9jb29yZCI6MzY3fV0sMzYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9cixpLmV4dGVuZCh0aGlzLGkucGljayhlLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpLHMoZSxmdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIHRoaXMuZmlyZSgiZXJyb3IiLHQpO2kuZXh0ZW5kKHRoaXMsZSksdGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpfXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vdXRpbC9hamF4Iiksbz10KCIuLi91dGlsL2V2ZW50ZWQiKSxzPXQoIi4vbG9hZF90aWxlanNvbiIpLGw9dCgiLi4vdXRpbC9tYXBib3giKS5ub3JtYWxpemVUaWxlVVJMO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChvLHttaW56b29tOjAsbWF4em9vbToyMixyb3VuZFpvb206ITAsc2NoZW1lOiJ4eXoiLHRpbGVTaXplOjUxMixfbG9hZGVkOiExLG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMubWFwPXR9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJyYXN0ZXIiLHVybDp0aGlzLnVybCx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplfX0sbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsbil7aWYoZGVsZXRlIHQucmVxdWVzdCwhdC5hYm9ydGVkKXtpZihyKXJldHVybiBlKHIpO3ZhciBpPXRoaXMubWFwLnBhaW50ZXIuZ2w7dC50ZXh0dXJlPXRoaXMubWFwLnBhaW50ZXIuZ2V0VGV4dHVyZShuLndpZHRoKSx0LnRleHR1cmU/KGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHQudGV4dHVyZSksaS50ZXhTdWJJbWFnZTJEKGkuVEVYVFVSRV8yRCwwLDAsMCxpLlJHQkEsaS5VTlNJR05FRF9CWVRFLG4pKToodC50ZXh0dXJlPWkuY3JlYXRlVGV4dHVyZSgpLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHQudGV4dHVyZSksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfTUlOX0ZJTFRFUixpLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfTUFHX0ZJTFRFUixpLkxJTkVBUiksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfV1JBUF9TLGkuQ0xBTVBfVE9fRURHRSksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfV1JBUF9ULGkuQ0xBTVBfVE9fRURHRSksaS5waXhlbFN0b3JlaShpLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwhMCksaS50ZXhJbWFnZTJEKGkuVEVYVFVSRV8yRCwwLGkuUkdCQSxpLlJHQkEsaS5VTlNJR05FRF9CWVRFLG4pLHQudGV4dHVyZS5zaXplPW4ud2lkdGgpLGkuZ2VuZXJhdGVNaXBtYXAoaS5URVhUVVJFXzJEKSx0aGlzLm1hcC5hbmltYXRpb25Mb29wLnNldCh0aGlzLm1hcC5zdHlsZS5yYXN0ZXJGYWRlRHVyYXRpb24pLHQuc3RhdGU9ImxvYWRlZCIsZShudWxsKX19dmFyIG49bCh0LmNvb3JkLnVybCh0aGlzLnRpbGVzLG51bGwsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO3QucmVxdWVzdD1hLmdldEltYWdlKG4sci5iaW5kKHRoaXMpKX0sYWJvcnRUaWxlOmZ1bmN0aW9uKHQpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5hYm9ydCgpLGRlbGV0ZSB0LnJlcXVlc3QpfSx1bmxvYWRUaWxlOmZ1bmN0aW9uKHQpe3QudGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGV4dHVyZSh0LnRleHR1cmUpfX0pfSx7Ii4uL3V0aWwvYWpheCI6NDIzLCIuLi91dGlsL2V2ZW50ZWQiOjQzMiwiLi4vdXRpbC9tYXBib3giOjQzNywiLi4vdXRpbC91dGlsIjo0NDAsIi4vbG9hZF90aWxlanNvbiI6MzYwfV0sMzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvdXRpbCIpLGk9e3ZlY3Rvcjp0KCIuLi9zb3VyY2UvdmVjdG9yX3RpbGVfc291cmNlIikscmFzdGVyOnQoIi4uL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UiKSxnZW9qc29uOnQoIi4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSIpLHZpZGVvOnQoIi4uL3NvdXJjZS92aWRlb19zb3VyY2UiKSxpbWFnZTp0KCIuLi9zb3VyY2UvaW1hZ2Vfc291cmNlIil9O3IuY3JlYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihlPW5ldyBpW2UudHlwZV0odCxlLHIpLGUuaWQhPT10KXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICIrdCsiIGluc3RlYWQgb2YgIitlLmlkKTtyZXR1cm4gbi5iaW5kQWxsKFsibG9hZCIsImFib3J0IiwidW5sb2FkIiwic2VyaWFsaXplIiwicHJlcGFyZSJdLGUpLGV9LHIuZ2V0VHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XX0sci5zZXRUeXBlPWZ1bmN0aW9uKHQsZSl7aVt0XT1lfX0seyIuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UiOjM1NiwiLi4vc291cmNlL2ltYWdlX3NvdXJjZSI6MzU5LCIuLi9zb3VyY2UvcmFzdGVyX3RpbGVfc291cmNlIjozNjMsIi4uL3NvdXJjZS92ZWN0b3JfdGlsZV9zb3VyY2UiOjM2OCwiLi4vc291cmNlL3ZpZGVvX3NvdXJjZSI6MzcwLCIuLi91dGlsL3V0aWwiOjQ0MH1dLDM2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPXI7dmFyIG49dGhpcy5fc291cmNlPW8uY3JlYXRlKHQsZSxyKS5vbigibG9hZCIsZnVuY3Rpb24oKXt0aGlzLm1hcCYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodGhpcy5tYXApLHRoaXMuX3NvdXJjZUxvYWRlZD0hMCx0aGlzLnRpbGVTaXplPW4udGlsZVNpemUsdGhpcy5taW56b29tPW4ubWluem9vbSx0aGlzLm1heHpvb209bi5tYXh6b29tLHRoaXMucm91bmRab29tPW4ucm91bmRab29tLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9bi5yZXBhcnNlT3ZlcnNjYWxlZCx0aGlzLmlzVGlsZUNsaXBwZWQ9bi5pc1RpbGVDbGlwcGVkLHRoaXMuYXR0cmlidXRpb249bi5hdHRyaWJ1dGlvbix0aGlzLnZlY3RvckxheWVySWRzPW4udmVjdG9yTGF5ZXJJZHMsdGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpLm9uKCJlcnJvciIsZnVuY3Rpb24odCl7dGhpcy5fc291cmNlRXJyb3JlZD0hMCx0aGlzLmZpcmUoImVycm9yIix0KX0uYmluZCh0aGlzKSkub24oImNoYW5nZSIsZnVuY3Rpb24oKXt0aGlzLnJlbG9hZCgpLHRoaXMudHJhbnNmb3JtJiZ0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSx0aGlzLm1hcCYmdGhpcy5tYXAuc3R5bGUucmFzdGVyRmFkZUR1cmF0aW9uKSx0aGlzLmZpcmUoImNoYW5nZSIpfS5iaW5kKHRoaXMpKTt0aGlzLl90aWxlcz17fSx0aGlzLl9jYWNoZT1uZXcgYygwLHRoaXMudW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl9pc0lkUmVuZGVyYWJsZT10aGlzLl9pc0lkUmVuZGVyYWJsZS5iaW5kKHRoaXMpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPXIuem9vbVRvKE1hdGgubWluKHQueixlKSk7cmV0dXJue3g6KG4uY29sdW1uLSh0LngrdC53Kk1hdGgucG93KDIsdC56KSkpKmQseToobi5yb3ctdC55KSpkfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQlMzItZSUzMn12YXIgbz10KCIuL3NvdXJjZSIpLHM9dCgiLi90aWxlIiksbD10KCIuLi91dGlsL2V2ZW50ZWQiKSx1PXQoIi4vdGlsZV9jb29yZCIpLGM9dCgiLi4vdXRpbC9scnVfY2FjaGUiKSxoPXQoIi4uL2dlby9jb29yZGluYXRlIiksZj10KCIuLi91dGlsL3V0aWwiKSxkPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5UO2UuZXhwb3J0cz1uLG4ubWF4T3Zlcnpvb21pbmc9MTAsbi5tYXhVbmRlcnpvb21pbmc9MyxuLnByb3RvdHlwZT1mLmluaGVyaXQobCx7b25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5vbkFkZCYmdGhpcy5fc291cmNlLm9uQWRkKHQpfSxsb2FkZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2VFcnJvcmVkKXJldHVybiEwO2lmKCF0aGlzLl9zb3VyY2VMb2FkZWQpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZigibG9hZGVkIiE9PWUuc3RhdGUmJiJlcnJvcmVkIiE9PWUuc3RhdGUpcmV0dXJuITF9cmV0dXJuITB9LGdldFNvdXJjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2V9LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSx1bmxvYWRUaWxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSh0KX0sYWJvcnRUaWxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUodCl9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCl9LHByZXBhcmU6ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2VMb2FkZWQmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKXJldHVybiB0aGlzLl9zb3VyY2UucHJlcGFyZSgpfSxnZXRJZHM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGlsZXMpLm1hcChOdW1iZXIpLnNvcnQoYSl9LGdldFJlbmRlcmFibGVJZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRJZHMoKS5maWx0ZXIodGhpcy5faXNJZFJlbmRlcmFibGUpfSxfaXNJZFJlbmRlcmFibGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdLmlzUmVuZGVyYWJsZSgpJiYhdGhpcy5fY292ZXJlZFRpbGVzW3RdfSxyZWxvYWQ6ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZS5yZXNldCgpO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ImxvYWRpbmciIT09ZS5zdGF0ZSYmKGUuc3RhdGU9InJlbG9hZGluZyIpLHRoaXMubG9hZFRpbGUodGhpcy5fdGlsZXNbdF0sdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMsdGhpcy5fdGlsZXNbdF0pKX19LF90aWxlTG9hZGVkOmZ1bmN0aW9uKHQsZSl7aWYoZSlyZXR1cm4gdC5zdGF0ZT0iZXJyb3JlZCIsdGhpcy5maXJlKCJ0aWxlLmVycm9yIix7dGlsZTp0LGVycm9yOmV9KSx2b2lkIHRoaXMuX3NvdXJjZS5maXJlKCJ0aWxlLmVycm9yIix7dGlsZTp0LGVycm9yOmV9KTt0LnNvdXJjZT10aGlzLHQudGltZUFkZGVkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZmlyZSgidGlsZS5sb2FkIix7dGlsZTp0fSksdGhpcy5fc291cmNlLmZpcmUoInRpbGUubG9hZCIse3RpbGU6dH0pfSxnZXRUaWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQuaWQpfSxnZXRUaWxlQnlJRDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZXNbdF19LGdldFpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHQuem9vbSt0LnNjYWxlWm9vbSh0LnRpbGVTaXplL3RoaXMudGlsZVNpemUpfSxmaW5kTG9hZGVkQ2hpbGRyZW46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSExO2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07aWYoIShyW2ldfHwhYS5pc1JlbmRlcmFibGUoKXx8YS5jb29yZC56PD10Lnp8fGEuY29vcmQuej5lKSl7dmFyIG89TWF0aC5wb3coMixNYXRoLm1pbihhLmNvb3JkLnosdGhpcy5tYXh6b29tKS1NYXRoLm1pbih0LnosdGhpcy5tYXh6b29tKSk7aWYoTWF0aC5mbG9vcihhLmNvb3JkLngvbyk9PT10LngmJk1hdGguZmxvb3IoYS5jb29yZC55L28pPT09dC55KWZvcihyW2ldPSEwLG49ITA7YSYmYS5jb29yZC56LTE+dC56Oyl7dmFyIHM9YS5jb29yZC5wYXJlbnQodGhpcy5tYXh6b29tKS5pZDthPXRoaXMuX3RpbGVzW3NdLGEmJmEuaXNSZW5kZXJhYmxlKCkmJihkZWxldGUgcltpXSxyW3NdPSEwKX19fXJldHVybiBufSxmaW5kTG9hZGVkUGFyZW50OmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC56LTE7bj49ZTtuLS0pe3Q9dC5wYXJlbnQodGhpcy5tYXh6b29tKTt2YXIgaT10aGlzLl90aWxlc1t0LmlkXTtpZihpJiZpLmlzUmVuZGVyYWJsZSgpKXJldHVybiByW3QuaWRdPSEwLGk7aWYodGhpcy5fY2FjaGUuaGFzKHQuaWQpKXJldHVybiB0aGlzLmFkZFRpbGUodCksclt0LmlkXT0hMCx0aGlzLl90aWxlc1t0LmlkXX19LHVwZGF0ZUNhY2hlU2l6ZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNlaWwodC53aWR0aC90LnRpbGVTaXplKSsxLHI9TWF0aC5jZWlsKHQuaGVpZ2h0L3QudGlsZVNpemUpKzEsbj1lKnI7dGhpcy5fY2FjaGUuc2V0TWF4U2l6ZShNYXRoLmZsb29yKDUqbikpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9zb3VyY2VMb2FkZWQpe3ZhciByLGksYTt0aGlzLnVwZGF0ZUNhY2hlU2l6ZSh0KTt2YXIgbz0odGhpcy5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLmdldFpvb20odCkpLHM9TWF0aC5tYXgoby1uLm1heE92ZXJ6b29taW5nLHRoaXMubWluem9vbSksbD1NYXRoLm1heChvK24ubWF4VW5kZXJ6b29taW5nLHRoaXMubWluem9vbSksYz17fSxoPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3RoaXMuX2NvdmVyZWRUaWxlcz17fTt2YXIgZD10aGlzLnVzZWQ/dC5jb3ZlcmluZ1RpbGVzKHRoaXMuX3NvdXJjZSk6W107Zm9yKHI9MDtyPGQubGVuZ3RoO3IrKylpPWRbcl0sYT10aGlzLmFkZFRpbGUoaSksY1tpLmlkXT0hMCxhLmlzUmVuZGVyYWJsZSgpfHx0aGlzLmZpbmRMb2FkZWRDaGlsZHJlbihpLGwsYyl8fHRoaXMuZmluZExvYWRlZFBhcmVudChpLHMsYyk7Zm9yKHZhciBwPXt9LG09T2JqZWN0LmtleXMoYyksdj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgZz1tW3ZdO2k9dS5mcm9tSUQoZyksYT10aGlzLl90aWxlc1tnXSxhJiZhLnRpbWVBZGRlZD5oLShlfHwwKSYmKHRoaXMuZmluZExvYWRlZENoaWxkcmVuKGksbCxjKSYmKGNbZ109ITApLHRoaXMuZmluZExvYWRlZFBhcmVudChpLHMscCkpfXZhciB5O2Zvcih5IGluIHApY1t5XXx8KHRoaXMuX2NvdmVyZWRUaWxlc1t5XT0hMCk7Zm9yKHkgaW4gcCljW3ldPSEwO3ZhciBiPWYua2V5c0RpZmZlcmVuY2UodGhpcy5fdGlsZXMsYyk7Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl0aGlzLnJlbW92ZVRpbGUoK2Jbcl0pO3RoaXMudHJhbnNmb3JtPXR9fSxhZGRUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3QuaWRdO2lmKGUpcmV0dXJuIGU7dmFyIHI9dC53cmFwcGVkKCk7aWYoZT10aGlzLl90aWxlc1tyLmlkXSxlfHwoZT10aGlzLl9jYWNoZS5nZXQoci5pZCkpJiZ0aGlzLl9yZWRvUGxhY2VtZW50JiZ0aGlzLl9yZWRvUGxhY2VtZW50KGUpLCFlKXt2YXIgbj10LnosaT1uPnRoaXMubWF4em9vbT9NYXRoLnBvdygyLG4tdGhpcy5tYXh6b29tKToxO2U9bmV3IHMocix0aGlzLnRpbGVTaXplKmksdGhpcy5tYXh6b29tKSx0aGlzLmxvYWRUaWxlKGUsdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMsZSkpfXJldHVybiBlLnVzZXMrKyx0aGlzLl90aWxlc1t0LmlkXT1lLHRoaXMuZmlyZSgidGlsZS5hZGQiLHt0aWxlOmV9KSx0aGlzLl9zb3VyY2UuZmlyZSgidGlsZS5hZGQiLHt0aWxlOmV9KSxlfSxyZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2UmJihlLnVzZXMtLSxkZWxldGUgdGhpcy5fdGlsZXNbdF0sdGhpcy5maXJlKCJ0aWxlLnJlbW92ZSIse3RpbGU6ZX0pLHRoaXMuX3NvdXJjZS5maXJlKCJ0aWxlLnJlbW92ZSIse3RpbGU6ZX0pLGUudXNlcz4wfHwoZS5pc1JlbmRlcmFibGUoKT90aGlzLl9jYWNoZS5hZGQoZS5jb29yZC53cmFwcGVkKCkuaWQsZSk6KGUuYWJvcnRlZD0hMCx0aGlzLmFib3J0VGlsZShlKSx0aGlzLnVubG9hZFRpbGUoZSkpKSl9LGNsZWFyVGlsZXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5yZW1vdmVUaWxlKHQpO3RoaXMuX2NhY2hlLnJlc2V0KCl9LHRpbGVzSW46ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9dGhpcy5nZXRJZHMoKSxuPTEvMCxhPTEvMCxvPS0xLzAscz0tMS8wLGw9dFswXS56b29tLGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIGY9dFtjXTtuPU1hdGgubWluKG4sZi5jb2x1bW4pLGE9TWF0aC5taW4oYSxmLnJvdyksbz1NYXRoLm1heChvLGYuY29sdW1uKSxzPU1hdGgubWF4KHMsZi5yb3cpfWZvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgbT10aGlzLl90aWxlc1tyW3BdXSx2PXUuZnJvbUlEKHJbcF0pLGc9W2kodixtLnNvdXJjZU1heFpvb20sbmV3IGgobixhLGwpKSxpKHYsbS5zb3VyY2VNYXhab29tLG5ldyBoKG8scyxsKSldO2lmKGdbMF0ueDxkJiZnWzBdLnk8ZCYmZ1sxXS54Pj0wJiZnWzFdLnk+PTApe2Zvcih2YXIgeT1bXSxiPTA7Yjx0Lmxlbmd0aDtiKyspeS5wdXNoKGkodixtLnNvdXJjZU1heFpvb20sdFtiXSkpO3ZhciB4PWVbbS5jb29yZC5pZF07dm9pZCAwPT09eCYmKHg9ZVttLmNvb3JkLmlkXT17dGlsZTptLGNvb3JkOnYscXVlcnlHZW9tZXRyeTpbXSxzY2FsZTpNYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tbS5jb29yZC56KX0pLHgucXVlcnlHZW9tZXRyeS5wdXNoKHkpfX12YXIgXz1bXTtmb3IodmFyIHcgaW4gZSlfLnB1c2goZVt3XSk7cmV0dXJuIF99LHJlZG9QbGFjZW1lbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5nZXRJZHMoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3RoaXMuZ2V0VGlsZUJ5SUQodFtlXSkucmVkb1BsYWNlbWVudCh0aGlzKX19LGdldFZpc2libGVDb29yZGluYXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJZHMoKS5tYXAodS5mcm9tSUQpfX0pfSx7Ii4uL2RhdGEvYnVja2V0IjozMjcsIi4uL2dlby9jb29yZGluYXRlIjozMzYsIi4uL3V0aWwvZXZlbnRlZCI6NDMyLCIuLi91dGlsL2xydV9jYWNoZSI6NDM2LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9zb3VyY2UiOjM2NCwiLi90aWxlIjozNjYsIi4vdGlsZV9jb29yZCI6MzY3fV0sMzY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuY29vcmQ9dCwKdGhpcy51aWQ9YS51bmlxdWVJZCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9ZSx0aGlzLnNvdXJjZU1heFpvb209cix0aGlzLmJ1Y2tldHM9e30sdGhpcy5zdGF0ZT0ibG9hZGluZyJ9ZnVuY3Rpb24gaSh0LGUpe2lmKGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUuZ2V0TGF5ZXIodFtuXS5sYXllcklkKTtpZihpKXt2YXIgcz1vLmNyZWF0ZShhLmV4dGVuZCh7bGF5ZXI6aSxjaGlsZExheWVyczp0W25dLmNoaWxkTGF5ZXJJZHMubWFwKGUuZ2V0TGF5ZXIuYmluZChlKSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSl9LHRbbl0pKTtyW3MuaWRdPXN9fXJldHVybiByfX12YXIgYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4uL2RhdGEvYnVja2V0Iikscz10KCIuLi9kYXRhL2ZlYXR1cmVfaW5kZXgiKSxsPXQoInZlY3Rvci10aWxlIiksdT10KCJwYmYiKSxjPXQoIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIiksaD10KCJmZWF0dXJlLWZpbHRlciIpLGY9dCgiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIiksZD10KCIuLi9zeW1ib2wvY29sbGlzaW9uX2JveCIpLHA9dCgiLi4vc3ltYm9sL3N5bWJvbF9pbnN0YW5jZXMiKSxtPXQoIi4uL3N5bWJvbC9zeW1ib2xfcXVhZHMiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17bG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlPSJsb2FkZWQiLHQmJih0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyBkKHQuY29sbGlzaW9uQm94QXJyYXkpLHRoaXMuY29sbGlzaW9uVGlsZT1uZXcgZih0LmNvbGxpc2lvblRpbGUsdGhpcy5jb2xsaXNpb25Cb3hBcnJheSksdGhpcy5zeW1ib2xJbnN0YW5jZXNBcnJheT1uZXcgcCh0LnN5bWJvbEluc3RhbmNlc0FycmF5KSx0aGlzLnN5bWJvbFF1YWRzQXJyYXk9bmV3IG0odC5zeW1ib2xRdWFkc0FycmF5KSx0aGlzLmZlYXR1cmVJbmRleD1uZXcgcyh0LmZlYXR1cmVJbmRleCx0LnJhd1RpbGVEYXRhLHRoaXMuY29sbGlzaW9uVGlsZSksdGhpcy5yYXdUaWxlRGF0YT10LnJhd1RpbGVEYXRhLHRoaXMuYnVja2V0cz1pKHQuYnVja2V0cyxlKSl9LHJlbG9hZFN5bWJvbERhdGE6ZnVuY3Rpb24odCxlLHIpe2lmKCJ1bmxvYWRlZCIhPT10aGlzLnN0YXRlKXt0aGlzLmNvbGxpc2lvblRpbGU9bmV3IGYodC5jb2xsaXNpb25UaWxlLHRoaXMuY29sbGlzaW9uQm94QXJyYXkpLHRoaXMuZmVhdHVyZUluZGV4LnNldENvbGxpc2lvblRpbGUodGhpcy5jb2xsaXNpb25UaWxlKTtmb3IodmFyIG4gaW4gdGhpcy5idWNrZXRzKXt2YXIgbz10aGlzLmJ1Y2tldHNbbl07InN5bWJvbCI9PT1vLnR5cGUmJihvLmRlc3Ryb3koZS5nbCksZGVsZXRlIHRoaXMuYnVja2V0c1tuXSl9YS5leHRlbmQodGhpcy5idWNrZXRzLGkodC5idWNrZXRzLHIpKX19LHVubG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYnVja2V0cyl7dGhpcy5idWNrZXRzW2VdLmRlc3Ryb3kodC5nbCl9dGhpcy5jb2xsaXNpb25Cb3hBcnJheT1udWxsLHRoaXMuc3ltYm9sUXVhZHNBcnJheT1udWxsLHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXk9bnVsbCx0aGlzLmNvbGxpc2lvblRpbGU9bnVsbCx0aGlzLmZlYXR1cmVJbmRleD1udWxsLHRoaXMucmF3VGlsZURhdGE9bnVsbCx0aGlzLmJ1Y2tldHM9bnVsbCx0aGlzLnN0YXRlPSJ1bmxvYWRlZCJ9LHJlZG9QbGFjZW1lbnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3RoaXMucmVsb2FkU3ltYm9sRGF0YShyLHQubWFwLnBhaW50ZXIsdC5tYXAuc3R5bGUpLHQuZmlyZSgidGlsZS5sb2FkIix7dGlsZTp0aGlzfSksdGhpcy5zdGF0ZT0ibG9hZGVkIix0aGlzLnJlZG9XaGVuRG9uZSYmKHRoaXMucmVkb1BsYWNlbWVudCh0KSx0aGlzLnJlZG9XaGVuRG9uZT0hMSl9aWYoImxvYWRlZCIhPT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGUpcmV0dXJuIHZvaWQodGhpcy5yZWRvV2hlbkRvbmU9ITApO3RoaXMuc3RhdGU9InJlbG9hZGluZyIsdC5kaXNwYXRjaGVyLnNlbmQoInJlZG8gcGxhY2VtZW50Iix7dWlkOnRoaXMudWlkLHNvdXJjZTp0LmlkLGFuZ2xlOnQubWFwLnRyYW5zZm9ybS5hbmdsZSxwaXRjaDp0Lm1hcC50cmFuc2Zvcm0ucGl0Y2gsc2hvd0NvbGxpc2lvbkJveGVzOnQubWFwLnNob3dDb2xsaXNpb25Cb3hlc30sZS5iaW5kKHRoaXMpLHRoaXMud29ya2VySUQpfSxnZXRCdWNrZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnVja2V0cyYmdGhpcy5idWNrZXRzW3QucmVmfHx0LmlkXX0scXVlcnlTb3VyY2VGZWF0dXJlczpmdW5jdGlvbih0LGUpe2lmKHRoaXMucmF3VGlsZURhdGEpe3RoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBsLlZlY3RvclRpbGUobmV3IHUobmV3IFVpbnQ4QXJyYXkodGhpcy5yYXdUaWxlRGF0YSkpKS5sYXllcnMpO3ZhciByPXRoaXMudnRMYXllcnMuX2dlb2pzb25UaWxlTGF5ZXJ8fHRoaXMudnRMYXllcnNbZS5zb3VyY2VMYXllcl07aWYocilmb3IodmFyIG49aChlLmZpbHRlciksaT17ejp0aGlzLmNvb3JkLnoseDp0aGlzLmNvb3JkLngseTp0aGlzLmNvb3JkLnl9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89ci5mZWF0dXJlKGEpO2lmKG4obykpe3ZhciBzPW5ldyBjKG8sdGhpcy5jb29yZC56LHRoaXMuY29vcmQueCx0aGlzLmNvb3JkLnkpO3MudGlsZT1pLHQucHVzaChzKX19fX0saXNSZW5kZXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuImxvYWRlZCI9PT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGV9fX0seyIuLi9kYXRhL2J1Y2tldCI6MzI3LCIuLi9kYXRhL2ZlYXR1cmVfaW5kZXgiOjMzNCwiLi4vc3ltYm9sL2NvbGxpc2lvbl9ib3giOjM5MiwiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIjozOTQsIi4uL3N5bWJvbC9zeW1ib2xfaW5zdGFuY2VzIjo0MDMsIi4uL3N5bWJvbC9zeW1ib2xfcXVhZHMiOjQwNCwiLi4vdXRpbC91dGlsIjo0NDAsIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIjo0NDEsImZlYXR1cmUtZmlsdGVyIjoxMzAscGJmOjQ3NiwidmVjdG9yLXRpbGUiOjU0OH1dLDM2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2woIWlzTmFOKHQpJiZ0Pj0wJiZ0JTE9PTApLGwoIWlzTmFOKGUpJiZlPj0wJiZlJTE9PTApLGwoIWlzTmFOKHIpJiZyPj0wJiZyJTE9PTApLGlzTmFOKG4pJiYobj0wKSx0aGlzLno9K3QsdGhpcy54PStlLHRoaXMueT0rcix0aGlzLnc9K24sKG4qPTIpPDAmJihuPS0xKm4tMSk7dmFyIGk9MTw8dGhpcy56O3RoaXMuaWQ9MzIqKGkqaSpuK2kqdGhpcy55K3RoaXMueCkrdGhpcy56LHRoaXMucG9zTWF0cml4PW51bGx9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuLGk9IiIsYT10O2E+MDthLS0pbj0xPDxhLTEsaSs9KGUmbj8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX1mdW5jdGlvbiBhKHQsZSl7aWYodC5yb3c+ZS5yb3cpe3ZhciByPXQ7dD1lLGU9cn1yZXR1cm57eDA6dC5jb2x1bW4seTA6dC5yb3cseDE6ZS5jb2x1bW4seTE6ZS5yb3csZHg6ZS5jb2x1bW4tdC5jb2x1bW4sZHk6ZS5yb3ctdC5yb3d9fWZ1bmN0aW9uIG8odCxlLHIsbixpKXt2YXIgYT1NYXRoLm1heChyLE1hdGguZmxvb3IoZS55MCkpLG89TWF0aC5taW4obixNYXRoLmNlaWwoZS55MSkpO2lmKHQueDA9PT1lLngwJiZ0LnkwPT09ZS55MD90LngwK2UuZHkvdC5keSp0LmR4PGUueDE6dC54MS1lLmR5L3QuZHkqdC5keDxlLngwKXt2YXIgcz10O3Q9ZSxlPXN9Zm9yKHZhciBsPXQuZHgvdC5keSx1PWUuZHgvZS5keSxjPXQuZHg+MCxoPWUuZHg8MCxmPWE7ZjxvO2YrKyl7dmFyIGQ9bCpNYXRoLm1heCgwLE1hdGgubWluKHQuZHksZitjLXQueTApKSt0LngwLHA9dSpNYXRoLm1heCgwLE1hdGgubWluKGUuZHksZitoLWUueTApKStlLngwO2koTWF0aC5mbG9vcihwKSxNYXRoLmNlaWwoZCksZil9fWZ1bmN0aW9uIHModCxlLHIsbixpLHMpe3ZhciBsLHU9YSh0LGUpLGM9YShlLHIpLGg9YShyLHQpO3UuZHk+Yy5keSYmKGw9dSx1PWMsYz1sKSx1LmR5PmguZHkmJihsPXUsdT1oLGg9bCksYy5keT5oLmR5JiYobD1jLGM9aCxoPWwpLHUuZHkmJm8oaCx1LG4saSxzKSxjLmR5JiZvKGgsYyxuLGkscyl9dmFyIGw9dCgiYXNzZXJ0IiksdT10KCJ3aG9vdHMtanMiKSxjPXQoIi4uL2dlby9jb29yZGluYXRlIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56KyIvIit0aGlzLngrIi8iK3RoaXMueX0sbi5wcm90b3R5cGUudG9Db29yZGluYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKHRoaXMueix0KSxyPU1hdGgucG93KDIsZSksbj10aGlzLnksaT10aGlzLngrcip0aGlzLnc7cmV0dXJuIG5ldyBjKGksbixlKX0sbi5mcm9tSUQ9ZnVuY3Rpb24odCl7dmFyIGU9dCUzMixyPTE8PGUsaT0odC1lKS8zMixhPWklcixvPShpLWEpL3IlcixzPU1hdGguZmxvb3IoaS8ocipyKSk7cmV0dXJuIHMlMiE9MCYmKHM9LTEqcy0xKSxzLz0yLG5ldyBuKGUsYSxvLHMpfSxuLnByb3RvdHlwZS51cmw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXUuZ2V0VGlsZUJCb3godGhpcy54LHRoaXMueSx0aGlzLnopLGE9aSh0aGlzLnosdGhpcy54LHRoaXMueSk7cmV0dXJuIHRbKHRoaXMueCt0aGlzLnkpJXQubGVuZ3RoXS5yZXBsYWNlKCJ7cHJlZml4fSIsKHRoaXMueCUxNikudG9TdHJpbmcoMTYpKyh0aGlzLnklMTYpLnRvU3RyaW5nKDE2KSkucmVwbGFjZSgie3p9IixNYXRoLm1pbih0aGlzLnosZXx8dGhpcy56KSkucmVwbGFjZSgie3h9Iix0aGlzLngpLnJlcGxhY2UoInt5fSIsInRtcyI9PT1yP01hdGgucG93KDIsdGhpcy56KS10aGlzLnktMTp0aGlzLnkpLnJlcGxhY2UoIntxdWFka2V5fSIsYSkucmVwbGFjZSgie2Jib3gtZXBzZy0zODU3fSIsbil9LG4ucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuej9udWxsOnRoaXMuej50P25ldyBuKHRoaXMuei0xLHRoaXMueCx0aGlzLnksdGhpcy53KTpuZXcgbih0aGlzLnotMSxNYXRoLmZsb29yKHRoaXMueC8yKSxNYXRoLmZsb29yKHRoaXMueS8yKSx0aGlzLncpfSxuLnByb3RvdHlwZS53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueix0aGlzLngsdGhpcy55LDApfSxuLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLno+PXQpcmV0dXJuW25ldyBuKHRoaXMueisxLHRoaXMueCx0aGlzLnksdGhpcy53KV07dmFyIGU9dGhpcy56KzEscj0yKnRoaXMueCxpPTIqdGhpcy55O3JldHVybltuZXcgbihlLHIsaSx0aGlzLncpLG5ldyBuKGUscisxLGksdGhpcy53KSxuZXcgbihlLHIsaSsxLHRoaXMudyksbmV3IG4oZSxyKzEsaSsxLHRoaXMudyldfSxuLmNvdmVyPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgcyxsLHU7aWYoaT49MCYmaTw9YSlmb3Iocz10O3M8ZTtzKyspbD0ocyVhK2EpJWEsdT1uZXcgbihyLGwsaSxNYXRoLmZsb29yKHMvYSkpLG9bdS5pZF09dX12YXIgYT0xPDx0LG89e307cmV0dXJuIHMoZVswXSxlWzFdLGVbMl0sMCxhLGkpLHMoZVsyXSxlWzNdLGVbMF0sMCxhLGkpLE9iamVjdC5rZXlzKG8pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gb1t0XX0pfX0seyIuLi9nZW8vY29vcmRpbmF0ZSI6MzM2LGFzc2VydDo0NSwid2hvb3RzLWpzIjo1NjR9XSwzNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYodGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1yLGEuZXh0ZW5kKHRoaXMsYS5waWNrKGUsWyJ1cmwiLCJzY2hlbWUiLCJ0aWxlU2l6ZSJdKSksdGhpcy5fb3B0aW9ucz1hLmV4dGVuZCh7dHlwZToidmVjdG9yIn0sZSksNTEyIT09dGhpcy50aWxlU2l6ZSl0aHJvdyBuZXcgRXJyb3IoInZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyIik7byhlLGZ1bmN0aW9uKHQsZSl7aWYodClyZXR1cm4gdm9pZCB0aGlzLmZpcmUoImVycm9yIix0KTthLmV4dGVuZCh0aGlzLGUpLHRoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKX12YXIgaT10KCIuLi91dGlsL2V2ZW50ZWQiKSxhPXQoIi4uL3V0aWwvdXRpbCIpLG89dCgiLi9sb2FkX3RpbGVqc29uIikscz10KCIuLi91dGlsL21hcGJveCIpLm5vcm1hbGl6ZVRpbGVVUkw7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9YS5pbmhlcml0KGkse21pbnpvb206MCxtYXh6b29tOjIyLHNjaGVtZToieHl6Iix0aWxlU2l6ZTo1MTIscmVwYXJzZU92ZXJzY2FsZWQ6ITAsaXNUaWxlQ2xpcHBlZDohMCxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLm1hcD10fSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLG4pe2lmKCF0LmFib3J0ZWQpe2lmKHIpcmV0dXJuIGUocik7dC5sb2FkVmVjdG9yRGF0YShuLHRoaXMubWFwLnN0eWxlKSx0LnJlZG9XaGVuRG9uZSYmKHQucmVkb1doZW5Eb25lPSExLHQucmVkb1BsYWNlbWVudCh0aGlzKSksZShudWxsKSx0LnJlbG9hZENhbGxiYWNrJiYodGhpcy5sb2FkVGlsZSh0LHQucmVsb2FkQ2FsbGJhY2spLHQucmVsb2FkQ2FsbGJhY2s9bnVsbCl9fXZhciBuPXQuY29vcmQuej50aGlzLm1heHpvb20/TWF0aC5wb3coMix0LmNvb3JkLnotdGhpcy5tYXh6b29tKToxLGk9e3VybDpzKHQuY29vcmQudXJsKHRoaXMudGlsZXMsdGhpcy5tYXh6b29tLHRoaXMuc2NoZW1lKSx0aGlzLnVybCksdWlkOnQudWlkLGNvb3JkOnQuY29vcmQsem9vbTp0LmNvb3JkLnosdGlsZVNpemU6dGhpcy50aWxlU2l6ZSpuLHNvdXJjZTp0aGlzLmlkLG92ZXJzY2FsaW5nOm4sYW5nbGU6dGhpcy5tYXAudHJhbnNmb3JtLmFuZ2xlLHBpdGNoOnRoaXMubWFwLnRyYW5zZm9ybS5waXRjaCxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzfTt0LndvcmtlcklEPyJsb2FkaW5nIj09PXQuc3RhdGU/dC5yZWxvYWRDYWxsYmFjaz1lOihpLnJhd1RpbGVEYXRhPXQucmF3VGlsZURhdGEsdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbG9hZCB0aWxlIixpLHIuYmluZCh0aGlzKSx0LndvcmtlcklEKSk6dC53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCgibG9hZCB0aWxlIixpLHIuYmluZCh0aGlzKSl9LGFib3J0VGlsZTpmdW5jdGlvbih0KXt0aGlzLmRpc3BhdGNoZXIuc2VuZCgiYWJvcnQgdGlsZSIse3VpZDp0LnVpZCxzb3VyY2U6dGhpcy5pZH0sbnVsbCx0LndvcmtlcklEKX0sdW5sb2FkVGlsZTpmdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEodGhpcy5tYXAucGFpbnRlciksdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbW92ZSB0aWxlIix7dWlkOnQudWlkLHNvdXJjZTp0aGlzLmlkfSxudWxsLHQud29ya2VySUQpfX0pfSx7Ii4uL3V0aWwvZXZlbnRlZCI6NDMyLCIuLi91dGlsL21hcGJveCI6NDM3LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9sb2FkX3RpbGVqc29uIjozNjB9XSwzNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5hY3Rvcj10LHRoaXMuc3R5bGVMYXllcnM9ZSxyJiYodGhpcy5sb2FkVmVjdG9yRGF0YT1yKSx0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319dmFyIGk9dCgiLi4vdXRpbC9hamF4IiksYT10KCJ2ZWN0b3ItdGlsZSIpLG89dCgicGJmIikscz10KCIuL3dvcmtlcl90aWxlIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e2xvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIpe3JldHVybiBkZWxldGUgdGhpcy5sb2FkaW5nW25dW2ldLHQ/ZSh0KTpyPyhhLmRhdGE9ci50aWxlLGEucGFyc2UoYS5kYXRhLHRoaXMuc3R5bGVMYXllcnMuZ2V0TGF5ZXJGYW1pbGllcygpLHRoaXMuYWN0b3Isci5yYXdUaWxlRGF0YSxlKSx0aGlzLmxvYWRlZFtuXT10aGlzLmxvYWRlZFtuXXx8e30sdm9pZCh0aGlzLmxvYWRlZFtuXVtpXT1hKSk6ZShudWxsLG51bGwpfXZhciBuPXQuc291cmNlLGk9dC51aWQ7dGhpcy5sb2FkaW5nW25dfHwodGhpcy5sb2FkaW5nW25dPXt9KTt2YXIgYT10aGlzLmxvYWRpbmdbbl1baV09bmV3IHModCk7YS5hYm9ydD10aGlzLmxvYWRWZWN0b3JEYXRhKHQsci5iaW5kKHRoaXMpKX0scmVsb2FkVGlsZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkW3Quc291cmNlXSxuPXQudWlkO2lmKHImJnJbbl0pe3ZhciBpPXJbbl07aS5wYXJzZShpLmRhdGEsdGhpcy5zdHlsZUxheWVycy5nZXRMYXllckZhbWlsaWVzKCksdGhpcy5hY3Rvcix0LnJhd1RpbGVEYXRhLGUpfX0sYWJvcnRUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubG9hZGluZ1t0LnNvdXJjZV0scj10LnVpZDtlJiZlW3JdJiZlW3JdLmFib3J0JiYoZVtyXS5hYm9ydCgpLGRlbGV0ZSBlW3JdKX0scmVtb3ZlVGlsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRlZFt0LnNvdXJjZV0scj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX0sbG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscil7aWYodClyZXR1cm4gZSh0KTt2YXIgbj1uZXcgYS5WZWN0b3JUaWxlKG5ldyBvKG5ldyBVaW50OEFycmF5KHIpKSk7ZSh0LHt0aWxlOm4scmF3VGlsZURhdGE6cn0pfXZhciBuPWkuZ2V0QXJyYXlCdWZmZXIodC51cmwsci5iaW5kKHRoaXMpKTtyZXR1cm4gZnVuY3Rpb24oKXtuLmFib3J0KCl9fSxyZWRvUGxhY2VtZW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkZWRbdC5zb3VyY2VdLG49dGhpcy5sb2FkaW5nW3Quc291cmNlXSxpPXQudWlkO2lmKHImJnJbaV0pe3ZhciBhPXJbaV0sbz1hLnJlZG9QbGFjZW1lbnQodC5hbmdsZSx0LnBpdGNoLHQuc2hvd0NvbGxpc2lvbkJveGVzKTtvLnJlc3VsdCYmZShudWxsLG8ucmVzdWx0LG8udHJhbnNmZXJhYmxlcyl9ZWxzZSBuJiZuW2ldJiYobltpXS5hbmdsZT10LmFuZ2xlKX19fSx7Ii4uL3V0aWwvYWpheCI6NDIzLCIuL3dvcmtlcl90aWxlIjozNzIscGJmOjQ3NiwidmVjdG9yLXRpbGUiOjU0OH1dLDM3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5pZD10LHRoaXMudXJscz1lLnVybHMsdGhpcy5jb29yZGluYXRlcz1lLmNvb3JkaW5hdGVzLHUuZ2V0VmlkZW8oZS51cmxzLGZ1bmN0aW9uKHQscil7aWYodClyZXR1cm4gdGhpcy5maXJlKCJlcnJvciIse2Vycm9yOnR9KTt0aGlzLnZpZGVvPXIsdGhpcy52aWRlby5sb29wPSEwO3ZhciBuO3RoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigicGxheWluZyIsZnVuY3Rpb24oKXtuPXRoaXMubWFwLnN0eWxlLmFuaW1hdGlvbkxvb3Auc2V0KDEvMCksdGhpcy5tYXAuX3JlcmVuZGVyKCl9LmJpbmQodGhpcykpLHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigicGF1c2UiLGZ1bmN0aW9uKCl7dGhpcy5tYXAuc3R5bGUuYW5pbWF0aW9uTG9vcC5jYW5jZWwobil9LmJpbmQodGhpcykpLHRoaXMubWFwJiYodGhpcy52aWRlby5wbGF5KCksdGhpcy5zZXRDb29yZGluYXRlcyhlLmNvb3JkaW5hdGVzKSksdGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpfXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi90aWxlX2Nvb3JkIiksbz10KCIuLi9nZW8vbG5nX2xhdCIpLHM9dCgicG9pbnQtZ2VvbWV0cnkiKSxsPXQoIi4uL3V0aWwvZXZlbnRlZCIpLHU9dCgiLi4vdXRpbC9hamF4IiksYz10KCIuLi9kYXRhL2J1Y2tldCIpLkVYVEVOVCxoPXQoIi4uL3JlbmRlci9kcmF3X3Jhc3RlciIpLlJhc3RlckJvdW5kc0FycmF5LGY9dCgiLi4vZGF0YS9idWZmZXIiKSxkPXQoIi4uL3JlbmRlci92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9aS5pbmhlcml0KGwse21pbnpvb206MCxtYXh6b29tOjIyLHRpbGVTaXplOjUxMixyb3VuZFpvb206ITAsZ2V0VmlkZW86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb30sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5tYXB8fCh0aGlzLm1hcD10LHRoaXMudmlkZW8mJih0aGlzLnZpZGVvLnBsYXkoKSx0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpKSl9LHNldENvb3JkaW5hdGVzOmZ1bmN0aW9uKHQpe3RoaXMuY29vcmRpbmF0ZXM9dDt2YXIgZT10aGlzLm1hcCxyPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYW5zZm9ybS5sb2NhdGlvbkNvb3JkaW5hdGUoby5jb252ZXJ0KHQpKS56b29tVG8oMCl9KSxuPXRoaXMuY2VudGVyQ29vcmQ9aS5nZXRDb29yZGluYXRlc0NlbnRlcihyKTtyZXR1cm4gbi5jb2x1bW49TWF0aC5yb3VuZChuLmNvbHVtbiksbi5yb3c9TWF0aC5yb3VuZChuLnJvdyksdGhpcy5taW56b29tPXRoaXMubWF4em9vbT1uLnpvb20sdGhpcy5fY29vcmQ9bmV3IGEobi56b29tLG4uY29sdW1uLG4ucm93KSx0aGlzLl90aWxlQ29vcmRzPXIubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuem9vbVRvKG4uem9vbSk7cmV0dXJuIG5ldyBzKE1hdGgucm91bmQoKGUuY29sdW1uLW4uY29sdW1uKSpjKSxNYXRoLnJvdW5kKChlLnJvdy1uLnJvdykqYykpfSksdGhpcy5maXJlKCJjaGFuZ2UiKSx0aGlzfSxfc2V0VGlsZTpmdW5jdGlvbih0KXt0aGlzLl9wcmVwYXJlZD0hMSx0aGlzLnRpbGU9dDt2YXIgZT1uZXcgaDtlLmVtcGxhY2VCYWNrKHRoaXMuX3RpbGVDb29yZHNbMF0ueCx0aGlzLl90aWxlQ29vcmRzWzBdLnksMCwwKSxlLmVtcGxhY2VCYWNrKHRoaXMuX3RpbGVDb29yZHNbMV0ueCx0aGlzLl90aWxlQ29vcmRzWzFdLnksMzI3NjcsMCksZS5lbXBsYWNlQmFjayh0aGlzLl90aWxlQ29vcmRzWzNdLngsdGhpcy5fdGlsZUNvb3Jkc1szXS55LDAsMzI3NjcpLGUuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1syXS54LHRoaXMuX3RpbGVDb29yZHNbMl0ueSwzMjc2NywzMjc2NyksdGhpcy50aWxlLmJ1Y2tldHM9e30sdGhpcy50aWxlLmJvdW5kc0J1ZmZlcj1uZXcgZihlLnNlcmlhbGl6ZSgpLGguc2VyaWFsaXplKCksZi5CdWZmZXJUeXBlLlZFUlRFWCksdGhpcy50aWxlLmJvdW5kc1ZBTz1uZXcgZCx0aGlzLnRpbGUuc3RhdGU9ImxvYWRlZCJ9LHByZXBhcmU6ZnVuY3Rpb24oKXtpZighKHRoaXMudmlkZW8ucmVhZHlTdGF0ZTwyKSYmdGhpcy50aWxlKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLmdsO3RoaXMuX3ByZXBhcmVkPyh0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRpbGUudGV4dHVyZSksdC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLDAsMCx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLHRoaXMudmlkZW8pKToodGhpcy5fcHJlcGFyZWQ9ITAsdGhpcy50aWxlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50aWxlLnRleHR1cmUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5MSU5FQVIpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5MSU5FQVIpLHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsdC5SR0JBLHQuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSksdGhpcy5fY3VycmVudFRpbWU9dGhpcy52aWRlby5jdXJyZW50VGltZX19LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29vcmQmJnRoaXMuX2Nvb3JkLnRvU3RyaW5nKCk9PT10LmNvb3JkLnRvU3RyaW5nKCk/KHRoaXMuX3NldFRpbGUodCksZShudWxsKSk6KHQuc3RhdGU9ImVycm9yZWQiLGUobnVsbCkpfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToidmlkZW8iLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fX0pfSx7Ii4uL2RhdGEvYnVja2V0IjozMjcsIi4uL2RhdGEvYnVmZmVyIjozMzIsIi4uL2dlby9sbmdfbGF0IjozMzcsIi4uL3JlbmRlci9kcmF3X3Jhc3RlciI6MzQ5LCIuLi9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdCI6MzU1LCIuLi91dGlsL2FqYXgiOjQyMywiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL3RpbGVfY29vcmQiOjM2NywicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDM3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuc2VsZj10LHRoaXMuYWN0b3I9bmV3IGEodCx0aGlzKTt2YXIgZT17Z2V0TGF5ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJzfS5iaW5kKHRoaXMpLGdldExheWVyRmFtaWxpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXllckZhbWlsaWVzfS5iaW5kKHRoaXMpfTt0aGlzLndvcmtlclNvdXJjZXM9e3ZlY3RvcjpuZXcgbCh0aGlzLmFjdG9yLGUpLGdlb2pzb246bmV3IHUodGhpcy5hY3RvcixlKX0sdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlPWZ1bmN0aW9uKHQscil7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdKXRocm93IG5ldyBFcnJvcignV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgIicrdCsnIiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7dGhpcy53b3JrZXJTb3VyY2VzW3RdPW5ldyByKHRoaXMuYWN0b3IsZSl9LmJpbmQodGhpcyl9ZnVuY3Rpb24gaSh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXSxpPW4ucmVmfHxuLmlkLGE9dFtpXTthLmxheW91dCYmIm5vbmUiPT09YS5sYXlvdXQudmlzaWJpbGl0eXx8KGVbaV09ZVtpXXx8W10scj09PWk/ZVtpXS51bnNoaWZ0KG4pOmVbaV0ucHVzaChuKSl9cmV0dXJuIGV9dmFyIGE9dCgiLi4vdXRpbC9hY3RvciIpLG89dCgiLi4vc3R5bGUvc3R5bGVfbGF5ZXIiKSxzPXQoIi4uL3V0aWwvdXRpbCIpLGw9dCgiLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlIiksdT10KCIuL2dlb2pzb25fd29ya2VyX3NvdXJjZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9LHMuZXh0ZW5kKG4ucHJvdG90eXBlLHsic2V0IGxheWVycyI6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT1vLmNyZWF0ZSh0LHQucmVmJiZyLmxheWVyc1t0LnJlZl0pO2UudXBkYXRlUGFpbnRUcmFuc2l0aW9ucyh7fSx7dHJhbnNpdGlvbjohMX0pLHIubGF5ZXJzW2UuaWRdPWV9dGhpcy5sYXllcnM9e307Zm9yKHZhciByPXRoaXMsbj1bXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV07ImZpbGwiIT09cy50eXBlJiYibGluZSIhPT1zLnR5cGUmJiJjaXJjbGUiIT09cy50eXBlJiYic3ltYm9sIiE9PXMudHlwZXx8KHMucmVmP24ucHVzaChhKTplKHMpKX1mb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyllKHRbbltsXV0pO3RoaXMubGF5ZXJGYW1pbGllcz1pKHRoaXMubGF5ZXJzKX0sInVwZGF0ZSBsYXllcnMiOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9YS5sYXllcnNbdC5yZWZdO2EubGF5ZXJzW3QuaWRdP2EubGF5ZXJzW3QuaWRdLnNldCh0LGUpOmEubGF5ZXJzW3QuaWRdPW8uY3JlYXRlKHQsZSksYS5sYXllcnNbdC5pZF0udXBkYXRlUGFpbnRUcmFuc2l0aW9ucyh7fSx7dHJhbnNpdGlvbjohMX0pfXZhciByLG4sYT10aGlzO2ZvcihyIGluIHQpbj10W3JdLG4ucmVmJiZlKG4pO2ZvcihyIGluIHQpbj10W3JdLG4ucmVmfHxlKG4pO3RoaXMubGF5ZXJGYW1pbGllcz1pKHRoaXMubGF5ZXJzKX0sImxvYWQgdGlsZSI6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGV8fCJ2ZWN0b3IiO3RoaXMud29ya2VyU291cmNlc1tyXS5sb2FkVGlsZSh0LGUpfSwicmVsb2FkIHRpbGUiOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50eXBlfHwidmVjdG9yIjt0aGlzLndvcmtlclNvdXJjZXNbcl0ucmVsb2FkVGlsZSh0LGUpfSwiYWJvcnQgdGlsZSI6ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlfHwidmVjdG9yIjt0aGlzLndvcmtlclNvdXJjZXNbZV0uYWJvcnRUaWxlKHQpfSwicmVtb3ZlIHRpbGUiOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZXx8InZlY3RvciI7dGhpcy53b3JrZXJTb3VyY2VzW2VdLnJlbW92ZVRpbGUodCl9LCJyZWRvIHBsYWNlbWVudCI6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGV8fCJ2ZWN0b3IiO3RoaXMud29ya2VyU291cmNlc1tyXS5yZWRvUGxhY2VtZW50KHQsZSl9LCJsb2FkIHdvcmtlciBzb3VyY2UiOmZ1bmN0aW9uKHQsZSl7dHJ5e3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHQudXJsKSxlKCl9Y2F0Y2godCl7ZSh0KX19fSl9LHsiLi4vc3R5bGUvc3R5bGVfbGF5ZXIiOjM3OSwiLi4vdXRpbC9hY3RvciI6NDIyLCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9nZW9qc29uX3dvcmtlcl9zb3VyY2UiOjM1NywiLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlIjozNjl9XSwzNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmNvb3JkPXQuY29vcmQsdGhpcy51aWQ9dC51aWQsdGhpcy56b29tPXQuem9vbSx0aGlzLnRpbGVTaXplPXQudGlsZVNpemUsdGhpcy5zb3VyY2U9dC5zb3VyY2UsdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBpdGNoPXQucGl0Y2gsdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXN9ZnVuY3Rpb24gaSh0KXtyZXR1cm4hdC5pc0VtcHR5KCl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX1mdW5jdGlvbiBvKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KXRbcl0uZ2V0VHJhbnNmZXJhYmxlcyhlKTtyZXR1cm4gZX1mdW5jdGlvbiBzKHQpe3JldHVybiB0LmlkfXZhciBsPXQoIi4uL2RhdGEvZmVhdHVyZV9pbmRleCIpLHU9dCgiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIiksYz10KCIuLi9kYXRhL2J1Y2tldCIpLGg9dCgiLi4vc3ltYm9sL2NvbGxpc2lvbl9ib3giKSxmPXQoIi4uL3V0aWwvZGljdGlvbmFyeV9jb2RlciIpLGQ9dCgiLi4vdXRpbC91dGlsIikscD10KCIuLi9zeW1ib2wvc3ltYm9sX2luc3RhbmNlcyIpLG09dCgiLi4vc3ltYm9sL3N5bWJvbF9xdWFkcyIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyLG4sdil7ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10LmZlYXR1cmUocik7bi5pbmRleD1yO2Zvcih2YXIgaSBpbiBlKWVbaV0uZmlsdGVyKG4pJiZlW2ldLmZlYXR1cmVzLnB1c2gobil9fWZ1bmN0aW9uIHkodCl7aWYodClyZXR1cm4gdih0KTtpZigyPT09KytOKXtmb3IodmFyIGU9UC5sZW5ndGgtMTtlPj0wO2UtLSliKEUsUFtlXSk7eCgpfX1mdW5jdGlvbiBiKHQsZSl7aWYoZS5wb3B1bGF0ZUFycmF5cyhBLGosRiksInN5bWJvbCIhPT1lLnR5cGUpZm9yKHZhciByPTA7cjxlLmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBuPWUuZmVhdHVyZXNbcl07VC5pbnNlcnQobixuLmluZGV4LGUuc291cmNlTGF5ZXJJbmRleCxlLmluZGV4KX1lLmZlYXR1cmVzPW51bGx9ZnVuY3Rpb24geCgpe0Uuc3RhdHVzPSJkb25lIixFLnJlZG9QbGFjZW1lbnRBZnRlckRvbmUmJihFLnJlZG9QbGFjZW1lbnQoRS5hbmdsZSxFLnBpdGNoLG51bGwpLEUucmVkb1BsYWNlbWVudEFmdGVyRG9uZT0hMSk7dmFyIHQ9VC5zZXJpYWxpemUoKSxlPUEuc2VyaWFsaXplKCkscj1FLmNvbGxpc2lvbkJveEFycmF5LnNlcmlhbGl6ZSgpLHM9RS5zeW1ib2xJbnN0YW5jZXNBcnJheS5zZXJpYWxpemUoKSxsPUUuc3ltYm9sUXVhZHNBcnJheS5zZXJpYWxpemUoKSx1PVtuXS5jb25jYXQodC50cmFuc2ZlcmFibGVzKS5jb25jYXQoZS50cmFuc2ZlcmFibGVzKSxjPUQuZmlsdGVyKGkpO3YobnVsbCx7YnVja2V0czpjLm1hcChhKSxmZWF0dXJlSW5kZXg6dC5kYXRhLGNvbGxpc2lvblRpbGU6ZS5kYXRhLGNvbGxpc2lvbkJveEFycmF5OnIsc3ltYm9sSW5zdGFuY2VzQXJyYXk6cyxzeW1ib2xRdWFkc0FycmF5OmwscmF3VGlsZURhdGE6bn0sbyhjKS5jb25jYXQodSkpfXRoaXMuc3RhdHVzPSJwYXJzaW5nIix0aGlzLmRhdGE9dCx0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyBoLHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXk9bmV3IHAsdGhpcy5zeW1ib2xRdWFkc0FycmF5PW5ldyBtO3ZhciBfLHcsTSxrLEE9bmV3IHUodGhpcy5hbmdsZSx0aGlzLnBpdGNoLHRoaXMuY29sbGlzaW9uQm94QXJyYXkpLFQ9bmV3IGwodGhpcy5jb29yZCx0aGlzLm92ZXJzY2FsaW5nLEEsdC5sYXllcnMpLFM9bmV3IGYodC5sYXllcnM/T2JqZWN0LmtleXModC5sYXllcnMpLnNvcnQoKTpbIl9nZW9qc29uVGlsZUxheWVyIl0pLEU9dGhpcyxMPXt9LEM9e30sej0wO2Zvcih2YXIgSSBpbiBlKXc9ZVtJXVswXSx3LnNvdXJjZT09PXRoaXMuc291cmNlJiYody5yZWZ8fHcubWluem9vbSYmdGhpcy56b29tPHcubWluem9vbXx8dy5tYXh6b29tJiZ0aGlzLnpvb20+PXcubWF4em9vbXx8dy5sYXlvdXQmJiJub25lIj09PXcubGF5b3V0LnZpc2liaWxpdHl8fHQubGF5ZXJzJiYhdC5sYXllcnNbdy5zb3VyY2VMYXllcl18fChrPWMuY3JlYXRlKHtsYXllcjp3LGluZGV4OnorKyxjaGlsZExheWVyczplW0ldLHpvb206dGhpcy56b29tLG92ZXJzY2FsaW5nOnRoaXMub3ZlcnNjYWxpbmcsc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLGNvbGxpc2lvbkJveEFycmF5OnRoaXMuY29sbGlzaW9uQm94QXJyYXksc3ltYm9sUXVhZHNBcnJheTp0aGlzLnN5bWJvbFF1YWRzQXJyYXksc3ltYm9sSW5zdGFuY2VzQXJyYXk6dGhpcy5zeW1ib2xJbnN0YW5jZXNBcnJheSxzb3VyY2VMYXllckluZGV4OlMuZW5jb2RlKHcuc291cmNlTGF5ZXJ8fCJfZ2VvanNvblRpbGVMYXllciIpfSksay5jcmVhdGVGaWx0ZXIoKSxMW3cuaWRdPWssdC5sYXllcnMmJihNPXcuc291cmNlTGF5ZXIsQ1tNXT1DW01dfHx7fSxDW01dW3cuaWRdPWspKSk7aWYodC5sYXllcnMpZm9yKE0gaW4gQykxPT09dy52ZXJzaW9uJiZkLndhcm5PbmNlKCdWZWN0b3IgdGlsZSBzb3VyY2UgIicrdGhpcy5zb3VyY2UrJyIgbGF5ZXIgIicrTSsnIiBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy4nKSwodz10LmxheWVyc1tNXSkmJmcodyxDW01dKTtlbHNlIGcodCxMKTt2YXIgRD1bXSxQPXRoaXMuc3ltYm9sQnVja2V0cz1bXSxPPVtdO1QuYnVja2V0TGF5ZXJJRHM9e307Zm9yKHZhciBSIGluIEwpaz1MW1JdLDAhPT1rLmZlYXR1cmVzLmxlbmd0aCYmKFQuYnVja2V0TGF5ZXJJRHNbay5pbmRleF09ay5jaGlsZExheWVycy5tYXAocyksRC5wdXNoKGspLCJzeW1ib2wiPT09ay50eXBlP1AucHVzaChrKTpPLnB1c2goaykpO3ZhciBGPXt9LGo9e30sTj0wO2lmKFAubGVuZ3RoPjApe2ZvcihfPVAubGVuZ3RoLTE7Xz49MDtfLS0pUFtfXS51cGRhdGVJY29ucyhGKSxQW19dLnVwZGF0ZUZvbnQoaik7Zm9yKHZhciBCIGluIGopaltCXT1PYmplY3Qua2V5cyhqW0JdKS5tYXAoTnVtYmVyKTtGPU9iamVjdC5rZXlzKEYpLHIuc2VuZCgiZ2V0IGdseXBocyIse3VpZDp0aGlzLnVpZCxzdGFja3M6an0sZnVuY3Rpb24odCxlKXtqPWUseSh0KX0pLEYubGVuZ3RoP3Iuc2VuZCgiZ2V0IGljb25zIix7aWNvbnM6Rn0sZnVuY3Rpb24odCxlKXtGPWUseSh0KX0pOnkoKX1mb3IoXz1PLmxlbmd0aC0xO18+PTA7Xy0tKWIodGhpcyxPW19dKTtpZigwPT09UC5sZW5ndGgpcmV0dXJuIHgoKX0sbi5wcm90b3R5cGUucmVkb1BsYWNlbWVudD1mdW5jdGlvbih0LGUscil7aWYoImRvbmUiIT09dGhpcy5zdGF0dXMpcmV0dXJuIHRoaXMucmVkb1BsYWNlbWVudEFmdGVyRG9uZT0hMCx0aGlzLmFuZ2xlPXQse307Zm9yKHZhciBuPW5ldyB1KHQsZSx0aGlzLmNvbGxpc2lvbkJveEFycmF5KSxzPXRoaXMuc3ltYm9sQnVja2V0cyxsPXMubGVuZ3RoLTE7bD49MDtsLS0pc1tsXS5wbGFjZUZlYXR1cmVzKG4scik7dmFyIGM9bi5zZXJpYWxpemUoKSxoPXMuZmlsdGVyKGkpO3JldHVybntyZXN1bHQ6e2J1Y2tldHM6aC5tYXAoYSksY29sbGlzaW9uVGlsZTpjLmRhdGF9LHRyYW5zZmVyYWJsZXM6byhoKS5jb25jYXQoYy50cmFuc2ZlcmFibGVzKX19fSx7Ii4uL2RhdGEvYnVja2V0IjozMjcsIi4uL2RhdGEvZmVhdHVyZV9pbmRleCI6MzM0LCIuLi9zeW1ib2wvY29sbGlzaW9uX2JveCI6MzkyLCIuLi9zeW1ib2wvY29sbGlzaW9uX3RpbGUiOjM5NCwiLi4vc3ltYm9sL3N5bWJvbF9pbnN0YW5jZXMiOjQwMywiLi4vc3ltYm9sL3N5bWJvbF9xdWFkcyI6NDA0LCIuLi91dGlsL2RpY3Rpb25hcnlfY29kZXIiOjQzMCwiLi4vdXRpbC91dGlsIjo0NDB9XSwzNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMubj0wLHRoaXMudGltZXM9W119ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuc3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbWVzPXRoaXMudGltZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbWU+PShuZXcgRGF0ZSkuZ2V0VGltZSgpfSksIXRoaXMudGltZXMubGVuZ3RofSxuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGltZXMucHVzaCh7aWQ6dGhpcy5uLHRpbWU6dCsobmV3IERhdGUpLmdldFRpbWUoKX0pLHRoaXMubisrfSxuLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24odCl7dGhpcy50aW1lcz10aGlzLnRpbWVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pZCE9PXR9KX19LHt9XSwzNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmJhc2U9dCx0aGlzLnJldGluYT1zLmRldmljZVBpeGVsUmF0aW8+MTt2YXIgZT10aGlzLnJldGluYT8iQDJ4IjoiIjtvLmdldEpTT04obCh0LGUsIi5qc29uIiksZnVuY3Rpb24odCxlKXtpZih0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjp0fSk7dGhpcy5kYXRhPWUsdGhpcy5pbWcmJnRoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKSxvLmdldEltYWdlKGwodCxlLCIucG5nIiksZnVuY3Rpb24odCxlKXtpZih0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjp0fSk7Zm9yKHZhciByPWUuZ2V0RGF0YSgpLG49ZS5kYXRhPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKSxpPTA7aTxyLmxlbmd0aDtpKz00KXt2YXIgYT1yW2krM10vMjU1O25baSswXT1yW2krMF0qYSxuW2krMV09cltpKzFdKmEsbltpKzJdPXJbaSsyXSphLG5baSszXT1yW2krM119dGhpcy5pbWc9ZSx0aGlzLmRhdGEmJnRoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKX1mdW5jdGlvbiBpKCl7fXZhciBhPXQoIi4uL3V0aWwvZXZlbnRlZCIpLG89dCgiLi4vdXRpbC9hamF4Iikscz10KCIuLi91dGlsL2Jyb3dzZXIiKSxsPXQoIi4uL3V0aWwvbWFwYm94Iikubm9ybWFsaXplU3ByaXRlVVJMO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYSksbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmFzZX0sbi5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5kYXRhfHwhdGhpcy5pbWcpfSxuLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXtpZihzLmRldmljZVBpeGVsUmF0aW8+MSE9PXRoaXMucmV0aW5hKXt2YXIgdD1uZXcgbih0aGlzLmJhc2UpO3Qub24oImxvYWQiLGZ1bmN0aW9uKCl7dGhpcy5pbWc9dC5pbWcsdGhpcy5kYXRhPXQuZGF0YSx0aGlzLnJldGluYT10LnJldGluYX0uYmluZCh0aGlzKSl9fSxpLnByb3RvdHlwZT17eDowLHk6MCx3aWR0aDowLGhlaWdodDowLHBpeGVsUmF0aW86MSxzZGY6ITF9LG4ucHJvdG90eXBlLmdldFNwcml0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxvYWRlZCgpKXJldHVybiBuZXcgaTt2YXIgZT10aGlzLmRhdGEmJnRoaXMuZGF0YVt0XTtyZXR1cm4gZSYmdGhpcy5pbWc/ZTpuZXcgaX19LHsiLi4vdXRpbC9hamF4Ijo0MjMsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL2V2ZW50ZWQiOjQzMiwiLi4vdXRpbC9tYXBib3giOjQzN31dLDM3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3Njb2xvcnBhcnNlciIpLnBhcnNlQ1NTQ29sb3IsaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoIi4vc3R5bGVfZnVuY3Rpb24iKSxvPXt9O2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKGEuaXNGdW5jdGlvbkRlZmluaXRpb24oZSkpcmV0dXJuIGkuZXh0ZW5kKHt9LGUse3N0b3BzOmUuc3RvcHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlWzBdLHQoZVsxXSldfSl9KTtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCFvW2VdKXt2YXIgcj1uKGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciAiK2UpO29bZV09W3JbMF0vMjU1KnJbM10sclsxXS8yNTUqclszXSxyWzJdLzI1NSpyWzNdLHJbM11dfXJldHVybiBvW2VdfXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciAiK2UpfX0seyIuLi91dGlsL3V0aWwiOjQ0MCwiLi9zdHlsZV9mdW5jdGlvbiI6Mzc4LGNzc2NvbG9ycGFyc2VyOjEwNn1dLDM3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmFuaW1hdGlvbkxvb3A9ZXx8bmV3IG0sdGhpcy5kaXNwYXRjaGVyPW5ldyBwKHJ8fDEsdGhpcyksdGhpcy5zcHJpdGVBdGxhcz1uZXcgbCgxMDI0LDEwMjQpLHRoaXMubGluZUF0bGFzPW5ldyB1KDI1Niw1MTIpLHRoaXMuX2xheWVycz17fSx0aGlzLl9vcmRlcj1bXSx0aGlzLl9ncm91cHM9W10sdGhpcy5zb3VyY2VzPXt9LHRoaXMuem9vbUhpc3Rvcnk9e30sYy5iaW5kQWxsKFsiX2ZvcndhcmRTb3VyY2VFdmVudCIsIl9mb3J3YXJkVGlsZUV2ZW50IiwiX2ZvcndhcmRMYXllckV2ZW50IiwiX3JlZG9QbGFjZW1lbnQiXSx0aGlzKSx0aGlzLl9yZXNldFVwZGF0ZXMoKTt2YXIgbj1mdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIHZvaWQgdGhpcy5maXJlKCJlcnJvciIse2Vycm9yOnR9KTtpZighdi5lbWl0RXJyb3JzKHRoaXMsdihlKSkpe3RoaXMuX2xvYWRlZD0hMCx0aGlzLnN0eWxlc2hlZXQ9ZSx0aGlzLnVwZGF0ZUNsYXNzZXMoKTt2YXIgcj1lLnNvdXJjZXM7Zm9yKHZhciBuIGluIHIpdGhpcy5hZGRTb3VyY2UobixyW25dKTtlLnNwcml0ZSYmKHRoaXMuc3ByaXRlPW5ldyBvKGUuc3ByaXRlKSx0aGlzLnNwcml0ZS5vbigibG9hZCIsdGhpcy5maXJlLmJpbmQodGhpcywiY2hhbmdlIikpKSx0aGlzLmdseXBoU291cmNlPW5ldyBzKGUuZ2x5cGhzKSx0aGlzLl9yZXNvbHZlKCksdGhpcy5maXJlKCJsb2FkIil9fS5iaW5kKHRoaXMpOyJzdHJpbmciPT10eXBlb2YgdD9oLmdldEpTT04oZih0KSxuKTpkLmZyYW1lKG4uYmluZCh0aGlzLG51bGwsdCkpLHRoaXMub24oInNvdXJjZS5sb2FkIixmdW5jdGlvbih0KXt2YXIgZT10LnNvdXJjZTtpZihlJiZlLnZlY3RvckxheWVySWRzKWZvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpe3ZhciBuPXRoaXMuX2xheWVyc1tyXTtuLnNvdXJjZT09PWUuaWQmJnRoaXMuX3ZhbGlkYXRlTGF5ZXIobil9fSl9dmFyIGk9dCgiLi4vdXRpbC9ldmVudGVkIiksYT10KCIuL3N0eWxlX2xheWVyIiksbz10KCIuL2ltYWdlX3Nwcml0ZSIpLHM9dCgiLi4vc3ltYm9sL2dseXBoX3NvdXJjZSIpLGw9dCgiLi4vc3ltYm9sL3Nwcml0ZV9hdGxhcyIpLHU9dCgiLi4vcmVuZGVyL2xpbmVfYXRsYXMiKSxjPXQoIi4uL3V0aWwvdXRpbCIpLGg9dCgiLi4vdXRpbC9hamF4IiksZj10KCIuLi91dGlsL21hcGJveCIpLm5vcm1hbGl6ZVN0eWxlVVJMLGQ9dCgiLi4vdXRpbC9icm93c2VyIikscD10KCIuLi91dGlsL2Rpc3BhdGNoZXIiKSxtPXQoIi4vYW5pbWF0aW9uX2xvb3AiKSx2PXQoIi4vdmFsaWRhdGVfc3R5bGUiKSxnPXQoIi4uL3NvdXJjZS9zb3VyY2UiKSx5PXQoIi4uL3NvdXJjZS9xdWVyeV9mZWF0dXJlcyIpLGI9dCgiLi4vc291cmNlL3NvdXJjZV9jYWNoZSIpLHg9dCgiLi9zdHlsZV9zcGVjIiksXz10KCIuL3N0eWxlX2Z1bmN0aW9uIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9Yy5pbmhlcml0KGkse19sb2FkZWQ6ITEsX3ZhbGlkYXRlTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zb3VyY2VzW3Quc291cmNlXTt0LnNvdXJjZUxheWVyJiZlJiZlLnZlY3RvckxheWVySWRzJiYtMT09PWUudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZih0LnNvdXJjZUxheWVyKSYmdGhpcy5maXJlKCJlcnJvciIse2Vycm9yOm5ldyBFcnJvcignU291cmNlIGxheWVyICInK3Quc291cmNlTGF5ZXIrJyIgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlICInK2UuaWQrJyIgYXMgc3BlY2lmaWVkIGJ5IHN0eWxlIGxheWVyICInK3QuaWQrJyInKX0pfSxsb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZXMuc291cmNlcykubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZXMpaWYoIXRoaXMuc291cmNlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hKHRoaXMuc3ByaXRlJiYhdGhpcy5zcHJpdGUubG9hZGVkKCkpfSxfcmVzb2x2ZTpmdW5jdGlvbigpe3ZhciB0LGU7dGhpcy5fbGF5ZXJzPXt9LHRoaXMuX29yZGVyPXRoaXMuc3R5bGVzaGVldC5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7Zm9yKHZhciByPTA7cjx0aGlzLnN0eWxlc2hlZXQubGF5ZXJzLmxlbmd0aDtyKyspZT10aGlzLnN0eWxlc2hlZXQubGF5ZXJzW3JdLGUucmVmfHwodD1hLmNyZWF0ZShlKSx0aGlzLl9sYXllcnNbdC5pZF09dCx0Lm9uKCJlcnJvciIsdGhpcy5fZm9yd2FyZExheWVyRXZlbnQpKTtmb3IodmFyIG49MDtuPHRoaXMuc3R5bGVzaGVldC5sYXllcnMubGVuZ3RoO24rKylpZihlPXRoaXMuc3R5bGVzaGVldC5sYXllcnNbbl0sZS5yZWYpe3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZS5yZWYpO3Q9YS5jcmVhdGUoZSxpKSx0aGlzLl9sYXllcnNbdC5pZF09dCx0Lm9uKCJlcnJvciIsdGhpcy5fZm9yd2FyZExheWVyRXZlbnQpfXRoaXMuX2dyb3VwTGF5ZXJzKCksdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKCl9LF9ncm91cExheWVyczpmdW5jdGlvbigpe3ZhciB0O3RoaXMuX2dyb3Vwcz1bXTtmb3IodmFyIGU9MDtlPHRoaXMuX29yZGVyLmxlbmd0aDsrK2Upe3ZhciByPXRoaXMuX2xheWVyc1t0aGlzLl9vcmRlcltlXV07dCYmci5zb3VyY2U9PT10LnNvdXJjZXx8KHQ9W10sdC5zb3VyY2U9ci5zb3VyY2UsdGhpcy5fZ3JvdXBzLnB1c2godCkpLHQucHVzaChyKX19LF91cGRhdGVXb3JrZXJMYXllcnM6ZnVuY3Rpb24odCl7dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCh0PyJ1cGRhdGUgbGF5ZXJzIjoic2V0IGxheWVycyIsdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHQpKX0sX3NlcmlhbGl6ZUxheWVyczpmdW5jdGlvbih0KXt0PXR8fHRoaXMuX29yZGVyO2Zvcih2YXIgZT1bXSxyPXtpbmNsdWRlUmVmUHJvcGVydGllczohMH0sbj0wO248dC5sZW5ndGg7bisrKWUucHVzaCh0aGlzLl9sYXllcnNbdFtuXV0uc2VyaWFsaXplKHIpKTtyZXR1cm4gZX0sX2FwcGx5Q2xhc3NlczpmdW5jdGlvbih0LGUpe2lmKHRoaXMuX2xvYWRlZCl7dD10fHxbXSxlPWV8fHt0cmFuc2l0aW9uOiEwfTt2YXIgcj10aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbnx8e30sbj10aGlzLl91cGRhdGVzLmFsbFBhaW50UHJvcHM/dGhpcy5fbGF5ZXJzOnRoaXMuX3VwZGF0ZXMucGFpbnRQcm9wcztmb3IodmFyIGkgaW4gbil7dmFyIGE9dGhpcy5fbGF5ZXJzW2ldLG89dGhpcy5fdXBkYXRlcy5wYWludFByb3BzW2ldO2lmKHRoaXMuX3VwZGF0ZXMuYWxsUGFpbnRQcm9wc3x8by5hbGwpYS51cGRhdGVQYWludFRyYW5zaXRpb25zKHQsZSxyLHRoaXMuYW5pbWF0aW9uTG9vcCk7ZWxzZSBmb3IodmFyIHMgaW4gbyl0aGlzLl9sYXllcnNbaV0udXBkYXRlUGFpbnRUcmFuc2l0aW9uKHMsdCxlLHIsdGhpcy5hbmltYXRpb25Mb29wKX19fSxfcmVjYWxjdWxhdGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlcyl0aGlzLnNvdXJjZXNbZV0udXNlZD0hMTt0aGlzLl91cGRhdGVab29tSGlzdG9yeSh0KSx0aGlzLnJhc3RlckZhZGVEdXJhdGlvbj0zMDA7Zm9yKHZhciByIGluIHRoaXMuX2xheWVycyl7dmFyIG49dGhpcy5fbGF5ZXJzW3JdO24ucmVjYWxjdWxhdGUodCx0aGlzLnpvb21IaXN0b3J5KSwhbi5pc0hpZGRlbih0KSYmbi5zb3VyY2UmJih0aGlzLnNvdXJjZXNbbi5zb3VyY2VdLnVzZWQ9ITApfU1hdGguZmxvb3IodGhpcy56KSE9PU1hdGguZmxvb3IodCkmJnRoaXMuYW5pbWF0aW9uTG9vcC5zZXQoMzAwKSx0aGlzLno9dCx0aGlzLmZpcmUoInpvb20iKX0sX3VwZGF0ZVpvb21IaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuem9vbUhpc3Rvcnk7dm9pZCAwPT09ZS5sYXN0SW50ZWdlclpvb20mJihlLmxhc3RJbnRlZ2VyWm9vbT1NYXRoLmZsb29yKHQpLGUubGFzdEludGVnZXJab29tVGltZT0wLGUubGFzdFpvb209dCksTWF0aC5mbG9vcihlLmxhc3Rab29tKTxNYXRoLmZsb29yKHQpPyhlLmxhc3RJbnRlZ2VyWm9vbT1NYXRoLmZsb29yKHQpLGUubGFzdEludGVnZXJab29tVGltZT1EYXRlLm5vdygpKTpNYXRoLmZsb29yKGUubGFzdFpvb20pPk1hdGguZmxvb3IodCkmJihlLmxhc3RJbnRlZ2VyWm9vbT1NYXRoLmZsb29yKHQrMSksZS5sYXN0SW50ZWdlclpvb21UaW1lPURhdGUubm93KCkpLGUubGFzdFpvb209dH0sX2NoZWNrTG9hZGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZCl0aHJvdyBuZXcgRXJyb3IoIlN0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmciKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX3VwZGF0ZXMuY2hhbmdlZClyZXR1cm4gdGhpcztpZih0aGlzLl91cGRhdGVzLmFsbExheWVycyl0aGlzLl9ncm91cExheWVycygpLHRoaXMuX3VwZGF0ZVdvcmtlckxheWVycygpO2Vsc2V7dmFyIHI9T2JqZWN0LmtleXModGhpcy5fdXBkYXRlcy5sYXllcnMpO3IubGVuZ3RoJiZ0aGlzLl91cGRhdGVXb3JrZXJMYXllcnMocil9dmFyIG4saT1PYmplY3Qua2V5cyh0aGlzLl91cGRhdGVzLnNvdXJjZXMpO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspdGhpcy5fcmVsb2FkU291cmNlKGlbbl0pO2ZvcihuPTA7bjx0aGlzLl91cGRhdGVzLmV2ZW50cy5sZW5ndGg7bisrKXt2YXIgYT10aGlzLl91cGRhdGVzLmV2ZW50c1tuXTt0aGlzLmZpcmUoYVswXSxhWzFdKX1yZXR1cm4gdGhpcy5fYXBwbHlDbGFzc2VzKHQsZSksdGhpcy5fdXBkYXRlcy5jaGFuZ2VkJiZ0aGlzLmZpcmUoImNoYW5nZSIpLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXN9LF9yZXNldFVwZGF0ZXM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVzPXtldmVudHM6W10sbGF5ZXJzOnt9LHNvdXJjZXM6e30scGFpbnRQcm9wczp7fX19LGFkZFNvdXJjZTpmdW5jdGlvbih0LGUpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdm9pZCAwIT09dGhpcy5zb3VyY2VzW3RdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgYWxyZWFkeSBhIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtpZighZS50eXBlKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46ICIrT2JqZWN0LmtleXMoZSkrIi4iKTtyZXR1cm5bInZlY3RvciIsInJhc3RlciIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIl0uaW5kZXhPZihlLnR5cGUpPj0wJiZ0aGlzLl9oYW5kbGVFcnJvcnModi5zb3VyY2UsInNvdXJjZXMuIit0LGUpP3RoaXM6KGU9bmV3IGIodCxlLHRoaXMuZGlzcGF0Y2hlciksdGhpcy5zb3VyY2VzW3RdPWUsZS5zdHlsZT10aGlzLGUub24oImxvYWQiLHRoaXMuX2ZvcndhcmRTb3VyY2VFdmVudCkub24oImVycm9yIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9uKCJjaGFuZ2UiLHRoaXMuX2ZvcndhcmRTb3VyY2VFdmVudCkub24oInRpbGUuYWRkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5sb2FkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5lcnJvciIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub24oInRpbGUucmVtb3ZlIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5zdGF0cyIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCksdGhpcy5fdXBkYXRlcy5ldmVudHMucHVzaChbInNvdXJjZS5hZGQiLHtzb3VyY2U6ZX1dKSx0aGlzLl91cGRhdGVzLmNoYW5nZWQ9ITAsdGhpcyl9LHJlbW92ZVNvdXJjZTpmdW5jdGlvbih0KXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlc1t0XSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTt2YXIgZT10aGlzLnNvdXJjZXNbdF07cmV0dXJuIGRlbGV0ZSB0aGlzLnNvdXJjZXNbdF0sZGVsZXRlIHRoaXMuX3VwZGF0ZXMuc291cmNlc1t0XSxlLm9mZigibG9hZCIsdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KS5vZmYoImVycm9yIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9mZigiY2hhbmdlIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9mZigidGlsZS5hZGQiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9mZigidGlsZS5sb2FkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUuZXJyb3IiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9mZigidGlsZS5yZW1vdmUiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9mZigidGlsZS5zdGF0cyIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCksdGhpcy5fdXBkYXRlcy5ldmVudHMucHVzaChbInNvdXJjZS5yZW1vdmUiLHtzb3VyY2U6ZX1dKSx0aGlzLl91cGRhdGVzLmNoYW5nZWQ9ITAsdGhpc30sZ2V0U291cmNlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZXNbdF0mJnRoaXMuc291cmNlc1t0XS5nZXRTb3VyY2UoKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLCEodCBpbnN0YW5jZW9mIGEpKXtpZih0aGlzLl9oYW5kbGVFcnJvcnModi5sYXllciwibGF5ZXJzLiIrdC5pZCx0LCExLHthcnJheUluZGV4Oi0xfSkpcmV0dXJuIHRoaXM7dmFyIHI9dC5yZWYmJnRoaXMuZ2V0TGF5ZXIodC5yZWYpO3Q9YS5jcmVhdGUodCxyKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMYXllcih0KSx0Lm9uKCJlcnJvciIsdGhpcy5fZm9yd2FyZExheWVyRXZlbnQpLHRoaXMuX2xheWVyc1t0LmlkXT10LHRoaXMuX29yZGVyLnNwbGljZShlP3RoaXMuX29yZGVyLmluZGV4T2YoZSk6MS8wLDAsdC5pZCksdGhpcy5fdXBkYXRlcy5hbGxMYXllcnM9ITAsdC5zb3VyY2UmJih0aGlzLl91cGRhdGVzLnNvdXJjZXNbdC5zb3VyY2VdPSEwKSx0aGlzLl91cGRhdGVzLmV2ZW50cy5wdXNoKFsibGF5ZXIuYWRkIix7bGF5ZXI6dH1dKSx0aGlzLnVwZGF0ZUNsYXNzZXModC5pZCl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGU9dGhpcy5fbGF5ZXJzW3RdO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBsYXllciB3aXRoIHRoaXMgSUQiKTtmb3IodmFyIHIgaW4gdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1tyXS5yZWY9PT10JiZ0aGlzLnJlbW92ZUxheWVyKHIpO3JldHVybiBlLm9mZigiZXJyb3IiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KSxkZWxldGUgdGhpcy5fbGF5ZXJzW3RdLGRlbGV0ZSB0aGlzLl91cGRhdGVzLmxheWVyc1t0XSxkZWxldGUgdGhpcy5fdXBkYXRlcy5wYWludFByb3BzW3RdLHRoaXMuX29yZGVyLnNwbGljZSh0aGlzLl9vcmRlci5pbmRleE9mKHQpLDEpLHRoaXMuX3VwZGF0ZXMuYWxsTGF5ZXJzPSEwLHRoaXMuX3VwZGF0ZXMuZXZlbnRzLnB1c2goWyJsYXllci5yZW1vdmUiLHtsYXllcjplfV0pLHRoaXMuX3VwZGF0ZXMuY2hhbmdlZD0hMCx0aGlzfSxnZXRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxnZXRSZWZlcmVudExheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0TGF5ZXIodCk7cmV0dXJuIGUucmVmJiYoZT10aGlzLmdldExheWVyKGUucmVmKSksZX0sc2V0TGF5ZXJab29tUmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49dGhpcy5nZXRSZWZlcmVudExheWVyKHQpO3JldHVybiBuLm1pbnpvb209PT1lJiZuLm1heHpvb209PT1yP3RoaXM6KG51bGwhPWUmJihuLm1pbnpvb209ZSksbnVsbCE9ciYmKG4ubWF4em9vbT1yKSx0aGlzLl91cGRhdGVMYXllcihuKSl9LHNldEZpbHRlcjpmdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9dGhpcy5nZXRSZWZlcmVudExheWVyKHQpO3JldHVybiBudWxsIT09ZSYmdGhpcy5faGFuZGxlRXJyb3JzKHYuZmlsdGVyLCJsYXllcnMuIityLmlkKyIuZmlsdGVyIixlKT90aGlzOmMuZGVlcEVxdWFsKHIuZmlsdGVyLGUpP3RoaXM6KHIuZmlsdGVyPWMuY2xvbmUoZSksdGhpcy5fdXBkYXRlTGF5ZXIocikpfSxnZXRGaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0UmVmZXJlbnRMYXllcih0KS5maWx0ZXJ9LHNldExheW91dFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPXRoaXMuZ2V0UmVmZXJlbnRMYXllcih0KTtyZXR1cm4gYy5kZWVwRXF1YWwobi5nZXRMYXlvdXRQcm9wZXJ0eShlKSxyKT90aGlzOihuLnNldExheW91dFByb3BlcnR5KGUsciksdGhpcy5fdXBkYXRlTGF5ZXIobikpfSxnZXRMYXlvdXRQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFJlZmVyZW50TGF5ZXIodCkuZ2V0TGF5b3V0UHJvcGVydHkoZSl9LHNldFBhaW50UHJvcGVydHk6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKHQpO2lmKGMuZGVlcEVxdWFsKGkuZ2V0UGFpbnRQcm9wZXJ0eShlLG4pLHIpKXJldHVybiB0aGlzO3ZhciBhPWkuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50KGUpO3JldHVybiBpLnNldFBhaW50UHJvcGVydHkoZSxyLG4pLCEociYmXy5pc0Z1bmN0aW9uRGVmaW5pdGlvbihyKSYmIiR6b29tIiE9PXIucHJvcGVydHkmJnZvaWQgMCE9PXIucHJvcGVydHkpJiZhfHwodGhpcy5fdXBkYXRlcy5sYXllcnNbdF09ITAsaS5zb3VyY2UmJih0aGlzLl91cGRhdGVzLnNvdXJjZXNbaS5zb3VyY2VdPSEwKSksdGhpcy51cGRhdGVDbGFzc2VzKHQsZSl9LGdldFBhaW50UHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldFBhaW50UHJvcGVydHkoZSxyKX0sdXBkYXRlQ2xhc3NlczpmdW5jdGlvbih0LGUpe2lmKHRoaXMuX3VwZGF0ZXMuY2hhbmdlZD0hMCx0KXt2YXIgcj10aGlzLl91cGRhdGVzLnBhaW50UHJvcHM7clt0XXx8KHJbdF09e30pLHJbdF1bZXx8ImFsbCJdPSEwfWVsc2UgdGhpcy5fdXBkYXRlcy5hbGxQYWludFByb3BzPSEwO3JldHVybiB0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maWx0ZXJPYmplY3Qoe3ZlcnNpb246dGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sbmFtZTp0aGlzLnN0eWxlc2hlZXQubmFtZSxtZXRhZGF0YTp0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsY2VudGVyOnRoaXMuc3R5bGVzaGVldC5jZW50ZXIsem9vbTp0aGlzLnN0eWxlc2hlZXQuem9vbSxiZWFyaW5nOnRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLHBpdGNoOnRoaXMuc3R5bGVzaGVldC5waXRjaCxzcHJpdGU6dGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxnbHlwaHM6dGhpcy5zdHlsZXNoZWV0LmdseXBocyx0cmFuc2l0aW9uOnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLHNvdXJjZXM6Yy5tYXBPYmplY3QodGhpcy5zb3VyY2VzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSksbGF5ZXJzOnRoaXMuX29yZGVyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdLnNlcmlhbGl6ZSgpfSx0aGlzKX0sZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXR9KX0sX3VwZGF0ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl91cGRhdGVzLmxheWVyc1t0LmlkXT0hMCx0LnNvdXJjZSYmKHRoaXMuX3VwZGF0ZXMuc291cmNlc1t0LnNvdXJjZV09ITApLHRoaXMuX3VwZGF0ZXMuY2hhbmdlZD0hMCx0aGlzfSxfZmxhdHRlblJlbmRlcmVkRmVhdHVyZXM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcy5fb3JkZXIubGVuZ3RoLTE7cj49MDtyLS0pZm9yKHZhciBuPXRoaXMuX29yZGVyW3JdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXVtuXTtpZihhKWZvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKWUucHVzaChhW29dKX1yZXR1cm4gZX0scXVlcnlSZW5kZXJlZEZlYXR1cmVzOmZ1bmN0aW9uKHQsZSxyLG4pe2UmJmUuZmlsdGVyJiZ0aGlzLl9oYW5kbGVFcnJvcnModi5maWx0ZXIsInF1ZXJ5UmVuZGVyZWRGZWF0dXJlcy5maWx0ZXIiLGUuZmlsdGVyLCEwKTt2YXIgaT17fTtpZihlJiZlLmxheWVycylmb3IodmFyIGE9MDthPGUubGF5ZXJzLmxlbmd0aDthKyspe3ZhciBvPWUubGF5ZXJzW2FdO2lbdGhpcy5fbGF5ZXJzW29dLnNvdXJjZV09ITB9dmFyIHM9W107Zm9yKHZhciBsIGluIHRoaXMuc291cmNlcylpZighZS5sYXllcnN8fGlbbF0pe3ZhciB1PXRoaXMuc291cmNlc1tsXSxjPXkucmVuZGVyZWQodSx0aGlzLl9sYXllcnMsdCxlLHIsbik7cy5wdXNoKGMpfXJldHVybiB0aGlzLl9mbGF0dGVuUmVuZGVyZWRGZWF0dXJlcyhzKX0scXVlcnlTb3VyY2VGZWF0dXJlczpmdW5jdGlvbih0LGUpe2UmJmUuZmlsdGVyJiZ0aGlzLl9oYW5kbGVFcnJvcnModi5maWx0ZXIsInF1ZXJ5U291cmNlRmVhdHVyZXMuZmlsdGVyIixlLmZpbHRlciwhMCk7dmFyIHI9dGhpcy5zb3VyY2VzW3RdO3JldHVybiByP3kuc291cmNlKHIsZSk6W119LGFkZFNvdXJjZVR5cGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBnLmdldFR5cGUodCk/cihuZXcgRXJyb3IoJ0Egc291cmNlIHR5cGUgY2FsbGVkICInK3QrJyIgYWxyZWFkeSBleGlzdHMuJykpOihnLnNldFR5cGUodCxlKSxlLndvcmtlclNvdXJjZVVSTD92b2lkIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoImxvYWQgd29ya2VyIHNvdXJjZSIse25hbWU6dCx1cmw6ZS53b3JrZXJTb3VyY2VVUkx9LHIpOnIobnVsbCxudWxsKSl9LF9oYW5kbGVFcnJvcnM6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uP3YudGhyb3dFcnJvcnM6di5lbWl0RXJyb3JzLG89dC5jYWxsKHYsYy5leHRlbmQoe2tleTplLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6cixzdHlsZVNwZWM6eH0saSkpO3JldHVybiBhLmNhbGwodix0aGlzLG8pfSxfcmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaGVyLnJlbW92ZSgpfSxfcmVsb2FkU291cmNlOmZ1bmN0aW9uKHQpe3RoaXMuc291cmNlc1t0XS5yZWxvYWQoKX0sX3VwZGF0ZVNvdXJjZXM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlcyl0aGlzLnNvdXJjZXNbZV0udXBkYXRlKHQpfSxfcmVkb1BsYWNlbWVudDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZXMpdGhpcy5zb3VyY2VzW3RdLnJlZG9QbGFjZW1lbnQmJnRoaXMuc291cmNlc1t0XS5yZWRvUGxhY2VtZW50KCl9LF9mb3J3YXJkU291cmNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKCJzb3VyY2UuIit0LnR5cGUsYy5leHRlbmQoe3NvdXJjZTp0LnRhcmdldC5nZXRTb3VyY2UoKX0sdCkpfSxfZm9yd2FyZFRpbGVFdmVudDpmdW5jdGlvbih0KXt0aGlzLmZpcmUodC50eXBlLGMuZXh0ZW5kKHtzb3VyY2U6dC50YXJnZXR9LHQpKX0sX2ZvcndhcmRMYXllckV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSgibGF5ZXIuIit0LnR5cGUsYy5leHRlbmQoe2xheWVyOntpZDp0LnRhcmdldC5pZH19LHQpKX0sImdldCBzcHJpdGUganNvbiI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNwcml0ZTtyLmxvYWRlZCgpP2UobnVsbCx7c3ByaXRlOnIuZGF0YSxyZXRpbmE6ci5yZXRpbmF9KTpyLm9uKCJsb2FkIixmdW5jdGlvbigpe2UobnVsbCx7c3ByaXRlOnIuZGF0YSxyZXRpbmE6ci5yZXRpbmF9KX0pfSwiZ2V0IGljb25zIjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc3ByaXRlLG49dGhpcy5zcHJpdGVBdGxhcztyLmxvYWRlZCgpPyhuLnNldFNwcml0ZShyKSxuLmFkZEljb25zKHQuaWNvbnMsZSkpOnIub24oImxvYWQiLGZ1bmN0aW9uKCl7Cm4uc2V0U3ByaXRlKHIpLG4uYWRkSWNvbnModC5pY29ucyxlKX0pfSwiZ2V0IGdseXBocyI6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscixuKXt0JiZjb25zb2xlLmVycm9yKHQpLGFbbl09ciwwPT09LS1pJiZlKG51bGwsYSl9dmFyIG49dC5zdGFja3MsaT1PYmplY3Qua2V5cyhuKS5sZW5ndGgsYT17fTtmb3IodmFyIG8gaW4gbil0aGlzLmdseXBoU291cmNlLmdldFNpbXBsZUdseXBocyhvLG5bb10sdC51aWQscil9fSl9LHsiLi4vcmVuZGVyL2xpbmVfYXRsYXMiOjM1MiwiLi4vc291cmNlL3F1ZXJ5X2ZlYXR1cmVzIjozNjIsIi4uL3NvdXJjZS9zb3VyY2UiOjM2NCwiLi4vc291cmNlL3NvdXJjZV9jYWNoZSI6MzY1LCIuLi9zeW1ib2wvZ2x5cGhfc291cmNlIjozOTcsIi4uL3N5bWJvbC9zcHJpdGVfYXRsYXMiOjQwMiwiLi4vdXRpbC9hamF4Ijo0MjMsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL2Rpc3BhdGNoZXIiOjQzMSwiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvbWFwYm94Ijo0MzcsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL2FuaW1hdGlvbl9sb29wIjozNzMsIi4vaW1hZ2Vfc3ByaXRlIjozNzQsIi4vc3R5bGVfZnVuY3Rpb24iOjM3OCwiLi9zdHlsZV9sYXllciI6Mzc5LCIuL3N0eWxlX3NwZWMiOjM4NiwiLi92YWxpZGF0ZV9zdHlsZSI6Mzg4fV0sMzc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnZhbHVlPXMuY2xvbmUoZSksdGhpcy5pc0Z1bmN0aW9uPWEuaXNGdW5jdGlvbkRlZmluaXRpb24oZSksdGhpcy5qc29uPUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpO3ZhciByPSJjb2xvciI9PT10LnR5cGUmJnRoaXMudmFsdWU/byh0aGlzLnZhbHVlKTplO2lmKHRoaXMuY2FsY3VsYXRlPWFbdC5mdW5jdGlvbnx8InBpZWNld2lzZS1jb25zdGFudCJdKHIpLHRoaXMuaXNGZWF0dXJlQ29uc3RhbnQ9dGhpcy5jYWxjdWxhdGUuaXNGZWF0dXJlQ29uc3RhbnQsdGhpcy5pc1pvb21Db25zdGFudD10aGlzLmNhbGN1bGF0ZS5pc1pvb21Db25zdGFudCwicGllY2V3aXNlLWNvbnN0YW50Ij09PXQuZnVuY3Rpb24mJnQudHJhbnNpdGlvbiYmKHRoaXMuY2FsY3VsYXRlPWkodGhpcy5jYWxjdWxhdGUpKSwhdGhpcy5pc0ZlYXR1cmVDb25zdGFudCYmIXRoaXMuaXNab29tQ29uc3RhbnQpe3RoaXMuc3RvcFpvb21MZXZlbHM9W107Zm9yKHZhciBuPVtdLGw9dGhpcy52YWx1ZS5zdG9wcyx1PTA7dTx0aGlzLnZhbHVlLnN0b3BzLmxlbmd0aDt1Kyspe3ZhciBjPWxbdV1bMF0uem9vbTt0aGlzLnN0b3Bab29tTGV2ZWxzLmluZGV4T2YoYyk8MCYmKHRoaXMuc3RvcFpvb21MZXZlbHMucHVzaChjKSxuLnB1c2goW2Msbi5sZW5ndGhdKSl9dGhpcy5jYWxjdWxhdGVJbnRlcnBvbGF0aW9uVD1hLmludGVycG9sYXRlZCh7c3RvcHM6bixiYXNlOmUuYmFzZX0pfX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuLGksYSxvPWUuem9vbSxzPWUuem9vbUhpc3RvcnksbD1lLmR1cmF0aW9uLHU9byUxLGM9TWF0aC5taW4oKERhdGUubm93KCktcy5sYXN0SW50ZWdlclpvb21UaW1lKS9sLDEpLGg9MTtyZXR1cm4gbz5zLmxhc3RJbnRlZ2VyWm9vbT8obj11KygxLXUpKmMsaCo9MixpPXQoe3pvb206by0xfSxyKSxhPXQoe3pvb206b30scikpOihuPTEtKDEtYykqdSxhPXQoe3pvb206b30sciksaT10KHt6b29tOm8rMX0sciksaC89Miksdm9pZCAwPT09aXx8dm9pZCAwPT09YT92b2lkIDA6e2Zyb206aSxmcm9tU2NhbGU6aCx0bzphLHRvU2NhbGU6MSx0Om59fX12YXIgYT10KCIuL3N0eWxlX2Z1bmN0aW9uIiksbz10KCIuL3BhcnNlX2NvbG9yIikscz10KCIuLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bn0seyIuLi91dGlsL3V0aWwiOjQ0MCwiLi9wYXJzZV9jb2xvciI6Mzc1LCIuL3N0eWxlX2Z1bmN0aW9uIjozNzh9XSwzNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibWFwYm94LWdsLWZ1bmN0aW9uIik7ci5pbnRlcnBvbGF0ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnRlcnBvbGF0ZWQodCkscj1mdW5jdGlvbih0LHIpe3JldHVybiBlKHQmJnQuem9vbSxyfHx7fSl9O3JldHVybiByLmlzRmVhdHVyZUNvbnN0YW50PWUuaXNGZWF0dXJlQ29uc3RhbnQsci5pc1pvb21Db25zdGFudD1lLmlzWm9vbUNvbnN0YW50LHJ9LHJbInBpZWNld2lzZS1jb25zdGFudCJdPWZ1bmN0aW9uKHQpe3ZhciBlPW5bInBpZWNld2lzZS1jb25zdGFudCJdKHQpLHI9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0JiZ0Lnpvb20scnx8e30pfTtyZXR1cm4gci5pc0ZlYXR1cmVDb25zdGFudD1lLmlzRmVhdHVyZUNvbnN0YW50LHIuaXNab29tQ29uc3RhbnQ9ZS5pc1pvb21Db25zdGFudCxyfSxyLmlzRnVuY3Rpb25EZWZpbml0aW9uPW4uaXNGdW5jdGlvbkRlZmluaXRpb259LHsibWFwYm94LWdsLWZ1bmN0aW9uIjozMDB9XSwzNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuc2V0KHQsZSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC52YWx1ZX12YXIgYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4vc3R5bGVfdHJhbnNpdGlvbiIpLHM9dCgiLi9zdHlsZV9kZWNsYXJhdGlvbiIpLGw9dCgiLi9zdHlsZV9zcGVjIiksdT10KCIuL3ZhbGlkYXRlX3N0eWxlIiksYz10KCIuL3BhcnNlX2NvbG9yIiksaD10KCIuLi91dGlsL2V2ZW50ZWQiKTtlLmV4cG9ydHM9bjtuLmNyZWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiBuZXcoe2JhY2tncm91bmQ6dCgiLi9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyIiksY2lyY2xlOnQoIi4vc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyIiksZmlsbDp0KCIuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXIiKSxsaW5lOnQoIi4vc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllciIpLHJhc3Rlcjp0KCIuL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllciIpLHN5bWJvbDp0KCIuL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllciIpfVsocnx8ZSkudHlwZV0pKGUscil9LG4ucHJvdG90eXBlPWEuaW5oZXJpdChoLHtzZXQ6ZnVuY3Rpb24odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5yZWY9dC5yZWYsdGhpcy5tZXRhZGF0YT10Lm1ldGFkYXRhLHRoaXMudHlwZT0oZXx8dCkudHlwZSx0aGlzLnNvdXJjZT0oZXx8dCkuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9KGV8fHQpWyJzb3VyY2UtbGF5ZXIiXSx0aGlzLm1pbnpvb209KGV8fHQpLm1pbnpvb20sdGhpcy5tYXh6b29tPShlfHx0KS5tYXh6b29tLHRoaXMuZmlsdGVyPShlfHx0KS5maWx0ZXIsdGhpcy5wYWludD17fSx0aGlzLmxheW91dD17fSx0aGlzLl9wYWludFNwZWNpZmljYXRpb25zPWxbInBhaW50XyIrdGhpcy50eXBlXSx0aGlzLl9sYXlvdXRTcGVjaWZpY2F0aW9ucz1sWyJsYXlvdXRfIit0aGlzLnR5cGVdLHRoaXMuX3BhaW50VHJhbnNpdGlvbnM9e30sdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9ucz17fSx0aGlzLl9wYWludERlY2xhcmF0aW9ucz17fSx0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnM9e30sdGhpcy5fbGF5b3V0RnVuY3Rpb25zPXt9O3ZhciByLG47Zm9yKHZhciBpIGluIHQpe3ZhciBhPWkubWF0Y2goL15wYWludCg/OlwuKC4qKSk/JC8pO2lmKGEpe3ZhciBvPWFbMV18fCIiO2ZvcihyIGluIHRbaV0pdGhpcy5zZXRQYWludFByb3BlcnR5KHIsdFtpXVtyXSxvKX19aWYodGhpcy5yZWYpdGhpcy5fbGF5b3V0RGVjbGFyYXRpb25zPWUuX2xheW91dERlY2xhcmF0aW9ucztlbHNlIGZvcihuIGluIHQubGF5b3V0KXRoaXMuc2V0TGF5b3V0UHJvcGVydHkobix0LmxheW91dFtuXSk7Zm9yKHIgaW4gdGhpcy5fcGFpbnRTcGVjaWZpY2F0aW9ucyl0aGlzLnBhaW50W3JdPXRoaXMuZ2V0UGFpbnRWYWx1ZShyKTtmb3IobiBpbiB0aGlzLl9sYXlvdXRTcGVjaWZpY2F0aW9ucyl0aGlzLl91cGRhdGVMYXlvdXRWYWx1ZShuKX0sc2V0TGF5b3V0UHJvcGVydHk6ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKWRlbGV0ZSB0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF07ZWxzZXt2YXIgcj0ibGF5ZXJzLiIrdGhpcy5pZCsiLmxheW91dC4iK3Q7aWYodGhpcy5faGFuZGxlRXJyb3JzKHUubGF5b3V0UHJvcGVydHkscix0LGUpKXJldHVybjt0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF09bmV3IHModGhpcy5fbGF5b3V0U3BlY2lmaWNhdGlvbnNbdF0sZSl9dGhpcy5fdXBkYXRlTGF5b3V0VmFsdWUodCl9LGdldExheW91dFByb3BlcnR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF0mJnRoaXMuX2xheW91dERlY2xhcmF0aW9uc1t0XS52YWx1ZX0sZ2V0TGF5b3V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2xheW91dFNwZWNpZmljYXRpb25zW3RdLGk9dGhpcy5fbGF5b3V0RGVjbGFyYXRpb25zW3RdO3JldHVybiBpP2kuY2FsY3VsYXRlKGUscik6bi5kZWZhdWx0fSxzZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsocj8nWyJwYWludC4nK3IrJyJdLic6Ii5wYWludC4iKSt0O2lmKGEuZW5kc1dpdGgodCwiLXRyYW5zaXRpb24iKSlpZih0aGlzLl9wYWludFRyYW5zaXRpb25PcHRpb25zW3J8fCIiXXx8KHRoaXMuX3BhaW50VHJhbnNpdGlvbk9wdGlvbnNbcnx8IiJdPXt9KSxudWxsPT09ZXx8dm9pZCAwPT09ZSlkZWxldGUgdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tyfHwiIl1bdF07ZWxzZXtpZih0aGlzLl9oYW5kbGVFcnJvcnModS5wYWludFByb3BlcnR5LG4sdCxlKSlyZXR1cm47dGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tyfHwiIl1bdF09ZX1lbHNlIGlmKHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXXx8KHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXT17fSksbnVsbD09PWV8fHZvaWQgMD09PWUpZGVsZXRlIHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXVt0XTtlbHNle2lmKHRoaXMuX2hhbmRsZUVycm9ycyh1LnBhaW50UHJvcGVydHksbix0LGUpKXJldHVybjt0aGlzLl9wYWludERlY2xhcmF0aW9uc1tyfHwiIl1bdF09bmV3IHModGhpcy5fcGFpbnRTcGVjaWZpY2F0aW9uc1t0XSxlKX19LGdldFBhaW50UHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwiIixhLmVuZHNXaXRoKHQsIi10cmFuc2l0aW9uIik/dGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tlXSYmdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tlXVt0XTp0aGlzLl9wYWludERlY2xhcmF0aW9uc1tlXSYmdGhpcy5fcGFpbnREZWNsYXJhdGlvbnNbZV1bdF0mJnRoaXMuX3BhaW50RGVjbGFyYXRpb25zW2VdW3RdLnZhbHVlfSxnZXRQYWludFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9wYWludFNwZWNpZmljYXRpb25zW3RdLGk9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4gaT9pLmNhbGN1bGF0ZShlLHIpOiJjb2xvciI9PT1uLnR5cGUmJm4uZGVmYXVsdD9jKG4uZGVmYXVsdCk6bi5kZWZhdWx0fSxnZXRQYWludFZhbHVlU3RvcFpvb21MZXZlbHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4gZT9lLmRlY2xhcmF0aW9uLnN0b3Bab29tTGV2ZWxzOltdfSxnZXRQYWludEludGVycG9sYXRpb25UOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhaW50VHJhbnNpdGlvbnNbdF0uZGVjbGFyYXRpb24uY2FsY3VsYXRlSW50ZXJwb2xhdGlvblQoe3pvb206ZX0pfSxpc1BhaW50VmFsdWVGZWF0dXJlQ29uc3RhbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4hZXx8ZS5kZWNsYXJhdGlvbi5pc0ZlYXR1cmVDb25zdGFudH0saXNMYXlvdXRWYWx1ZUZlYXR1cmVDb25zdGFudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF07cmV0dXJuIWV8fGUuaXNGZWF0dXJlQ29uc3RhbnR9LGlzUGFpbnRWYWx1ZVpvb21Db25zdGFudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYWludFRyYW5zaXRpb25zW3RdO3JldHVybiFlfHxlLmRlY2xhcmF0aW9uLmlzWm9vbUNvbnN0YW50fSxpc0hpZGRlbjpmdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8KCEhKHRoaXMubWF4em9vbSYmdD49dGhpcy5tYXh6b29tKXx8KCJub25lIj09PXRoaXMubGF5b3V0LnZpc2liaWxpdHl8fDA9PT10aGlzLnBhaW50W3RoaXMudHlwZSsiLW9wYWNpdHkiXSkpfSx1cGRhdGVQYWludFRyYW5zaXRpb25zOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1hLmV4dGVuZCh7fSx0aGlzLl9wYWludERlY2xhcmF0aW9uc1siIl0pLG89MDtvPHQubGVuZ3RoO28rKylhLmV4dGVuZChpLHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3Rbb11dKTt2YXIgcztmb3IocyBpbiBpKXRoaXMuX2FwcGx5UGFpbnREZWNsYXJhdGlvbihzLGlbc10sZSxyLG4pO2ZvcihzIGluIHRoaXMuX3BhaW50VHJhbnNpdGlvbnMpcyBpbiBpfHx0aGlzLl9hcHBseVBhaW50RGVjbGFyYXRpb24ocyxudWxsLGUscixuKX0sdXBkYXRlUGFpbnRUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPXRoaXMuX3BhaW50RGVjbGFyYXRpb25zWyIiXVt0XSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBzPXRoaXMuX3BhaW50RGVjbGFyYXRpb25zW2Vbb11dO3MmJnNbdF0mJihhPXNbdF0pfXRoaXMuX2FwcGx5UGFpbnREZWNsYXJhdGlvbih0LGEscixuLGkpfSxyZWNhbGN1bGF0ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLl9wYWludFRyYW5zaXRpb25zKXRoaXMucGFpbnRbcl09dGhpcy5nZXRQYWludFZhbHVlKHIse3pvb206dCx6b29tSGlzdG9yeTplfSk7Zm9yKHZhciBuIGluIHRoaXMuX2xheW91dEZ1bmN0aW9ucyl0aGlzLmxheW91dFtuXT10aGlzLmdldExheW91dFZhbHVlKG4se3pvb206dCx6b29tSGlzdG9yeTplfSl9LHNlcmlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgZT17aWQ6dGhpcy5pZCxyZWY6dGhpcy5yZWYsbWV0YWRhdGE6dGhpcy5tZXRhZGF0YSxtaW56b29tOnRoaXMubWluem9vbSxtYXh6b29tOnRoaXMubWF4em9vbX07Zm9yKHZhciByIGluIHRoaXMuX3BhaW50RGVjbGFyYXRpb25zKXtlWyIiPT09cj8icGFpbnQiOiJwYWludC4iK3JdPWEubWFwT2JqZWN0KHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3JdLGkpfXJldHVybighdGhpcy5yZWZ8fHQmJnQuaW5jbHVkZVJlZlByb3BlcnRpZXMpJiZhLmV4dGVuZChlLHt0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5zb3VyY2UsInNvdXJjZS1sYXllciI6dGhpcy5zb3VyY2VMYXllcixmaWx0ZXI6dGhpcy5maWx0ZXIsbGF5b3V0OmEubWFwT2JqZWN0KHRoaXMuX2xheW91dERlY2xhcmF0aW9ucyxpKX0pLGEuZmlsdGVyT2JqZWN0KGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwIT09dCYmISgibGF5b3V0Ij09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGgpfSl9LF9hcHBseVBhaW50RGVjbGFyYXRpb246ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbD1yLnRyYW5zaXRpb24/dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTp2b2lkIDAsdT10aGlzLl9wYWludFNwZWNpZmljYXRpb25zW3RdO2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1lfHwoZT1uZXcgcyh1LHUuZGVmYXVsdCkpLCFsfHxsLmRlY2xhcmF0aW9uLmpzb24hPT1lLmpzb24pe3ZhciBjPWEuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sbix0aGlzLmdldFBhaW50UHJvcGVydHkodCsiLXRyYW5zaXRpb24iKSksaD10aGlzLl9wYWludFRyYW5zaXRpb25zW3RdPW5ldyBvKHUsZSxsLGMpO2guaW5zdGFudCgpfHwoaC5sb29wSUQ9aS5zZXQoaC5lbmRUaW1lLURhdGUubm93KCkpKSxsJiZpLmNhbmNlbChsLmxvb3BJRCl9fSxfdXBkYXRlTGF5b3V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbGF5b3V0RGVjbGFyYXRpb25zW3RdO2UmJmUuaXNGdW5jdGlvbj90aGlzLl9sYXlvdXRGdW5jdGlvbnNbdF09ITA6KGRlbGV0ZSB0aGlzLl9sYXlvdXRGdW5jdGlvbnNbdF0sdGhpcy5sYXlvdXRbdF09dGhpcy5nZXRMYXlvdXRWYWx1ZSh0KSl9LF9oYW5kbGVFcnJvcnM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHUuZW1pdEVycm9ycyh0aGlzLHQuY2FsbCh1LHtrZXk6ZSxsYXllclR5cGU6dGhpcy50eXBlLG9iamVjdEtleTpyLHZhbHVlOm4sc3R5bGVTcGVjOmwsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9fSkpfX0pfSx7Ii4uL3V0aWwvZXZlbnRlZCI6NDMyLCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9wYXJzZV9jb2xvciI6Mzc1LCIuL3N0eWxlX2RlY2xhcmF0aW9uIjozNzcsIi4vc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllciI6MzgwLCIuL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllciI6MzgxLCIuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXIiOjM4MiwiLi9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyIjozODMsIi4vc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyIjozODQsIi4vc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyIjozODUsIi4vc3R5bGVfc3BlYyI6Mzg2LCIuL3N0eWxlX3RyYW5zaXRpb24iOjM4NywiLi92YWxpZGF0ZV9zdHlsZSI6Mzg4fV0sMzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi8uLi91dGlsL3V0aWwiKSxhPXQoIi4uL3N0eWxlX2xheWVyIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9aS5pbmhlcml0KGEse30pfSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9zdHlsZV9sYXllciI6Mzc5fV0sMzgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi8uLi91dGlsL3V0aWwiKSxhPXQoIi4uL3N0eWxlX2xheWVyIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9aS5pbmhlcml0KGEse30pfSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9zdHlsZV9sYXllciI6Mzc5fV0sMzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi8uLi91dGlsL3V0aWwiKSxhPXQoIi4uL3N0eWxlX2xheWVyIik7bi5wcm90b3R5cGU9aS5pbmhlcml0KGEse2dldFBhaW50VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiJmaWxsLW91dGxpbmUtY29sb3IiPT09dCYmdm9pZCAwPT09dGhpcy5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9hLnByb3RvdHlwZS5nZXRQYWludFZhbHVlLmNhbGwodGhpcywiZmlsbC1jb2xvciIsZSxyKTphLnByb3RvdHlwZS5nZXRQYWludFZhbHVlLmNhbGwodGhpcyx0LGUscil9LGdldFBhaW50VmFsdWVTdG9wWm9vbUxldmVsczpmdW5jdGlvbih0KXtyZXR1cm4iZmlsbC1vdXRsaW5lLWNvbG9yIj09PXQmJnZvaWQgMD09PXRoaXMuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/YS5wcm90b3R5cGUuZ2V0UGFpbnRWYWx1ZVN0b3Bab29tTGV2ZWxzLmNhbGwodGhpcywiZmlsbC1jb2xvciIpOmEucHJvdG90eXBlLmdldFBhaW50VmFsdWVTdG9wWm9vbUxldmVscy5jYWxsKHRoaXMsYXJndW1lbnRzKX0sZ2V0UGFpbnRJbnRlcnBvbGF0aW9uVDpmdW5jdGlvbih0LGUpe3JldHVybiJmaWxsLW91dGxpbmUtY29sb3IiPT09dCYmdm9pZCAwPT09dGhpcy5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9hLnByb3RvdHlwZS5nZXRQYWludEludGVycG9sYXRpb25ULmNhbGwodGhpcywiZmlsbC1jb2xvciIsZSk6YS5wcm90b3R5cGUuZ2V0UGFpbnRJbnRlcnBvbGF0aW9uVC5jYWxsKHRoaXMsdCxlKX0saXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50OmZ1bmN0aW9uKHQpe3JldHVybiJmaWxsLW91dGxpbmUtY29sb3IiPT09dCYmdm9pZCAwPT09dGhpcy5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9hLnByb3RvdHlwZS5pc1BhaW50VmFsdWVGZWF0dXJlQ29uc3RhbnQuY2FsbCh0aGlzLCJmaWxsLWNvbG9yIik6YS5wcm90b3R5cGUuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50LmNhbGwodGhpcyx0KX0saXNQYWludFZhbHVlWm9vbUNvbnN0YW50OmZ1bmN0aW9uKHQpe3JldHVybiJmaWxsLW91dGxpbmUtY29sb3IiPT09dCYmdm9pZCAwPT09dGhpcy5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9hLnByb3RvdHlwZS5pc1BhaW50VmFsdWVab29tQ29uc3RhbnQuY2FsbCh0aGlzLCJmaWxsLWNvbG9yIik6YS5wcm90b3R5cGUuaXNQYWludFZhbHVlWm9vbUNvbnN0YW50LmNhbGwodGhpcyx0KX19KSxlLmV4cG9ydHM9bn0seyIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi4vc3R5bGVfbGF5ZXIiOjM3OX1dLDM4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChhLHtnZXRQYWludFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hLnByb3RvdHlwZS5nZXRQYWludFZhbHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihuJiYibGluZS1kYXNoYXJyYXkiPT09dCl7dmFyIGk9TWF0aC5mbG9vcihlLnpvb20pO3RoaXMuX2Zsb29yZWRab29tIT09aSYmKHRoaXMuX2Zsb29yZWRab29tPWksdGhpcy5fZmxvb3JlZExpbmVXaWR0aD10aGlzLmdldFBhaW50VmFsdWUoImxpbmUtd2lkdGgiLGUscikpLG4uZnJvbVNjYWxlKj10aGlzLl9mbG9vcmVkTGluZVdpZHRoLG4udG9TY2FsZSo9dGhpcy5fZmxvb3JlZExpbmVXaWR0aH1yZXR1cm4gbn19KX0seyIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi4vc3R5bGVfbGF5ZXIiOjM3OX1dLDM4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChhLHt9KX0seyIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi4vc3R5bGVfbGF5ZXIiOjM3OX1dLDM4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChhLHtpc0hpZGRlbjpmdW5jdGlvbigpe2lmKGEucHJvdG90eXBlLmlzSGlkZGVuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm4hMDt2YXIgdD0wPT09dGhpcy5wYWludFsidGV4dC1vcGFjaXR5Il18fCF0aGlzLmxheW91dFsidGV4dC1maWVsZCJdLGU9MD09PXRoaXMucGFpbnRbImljb24tb3BhY2l0eSJdfHwhdGhpcy5sYXlvdXRbImljb24taW1hZ2UiXTtyZXR1cm4hKCF0fHwhZSl9LGdldExheW91dFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oInRleHQtcm90YXRpb24tYWxpZ25tZW50IiE9PXR8fCJsaW5lIiE9PXRoaXMuZ2V0TGF5b3V0VmFsdWUoInN5bWJvbC1wbGFjZW1lbnQiLGUscil8fHRoaXMuZ2V0TGF5b3V0UHJvcGVydHkoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikpJiYoImljb24tcm90YXRpb24tYWxpZ25tZW50IiE9PXR8fCJsaW5lIiE9PXRoaXMuZ2V0TGF5b3V0VmFsdWUoInN5bWJvbC1wbGFjZW1lbnQiLGUscil8fHRoaXMuZ2V0TGF5b3V0UHJvcGVydHkoImljb24tcm90YXRpb24tYWxpZ25tZW50IikpPyJ0ZXh0LXBpdGNoLWFsaWdubWVudCIhPT10fHx0aGlzLmdldExheW91dFByb3BlcnR5KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpP2EucHJvdG90eXBlLmdldExheW91dFZhbHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmdldExheW91dFZhbHVlKCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpOiJtYXAifX0pfSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9zdHlsZV9sYXllciI6Mzc5fV0sMzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCJtYXBib3gtZ2wtc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0Lm1pbiIpfSx7Im1hcGJveC1nbC1zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QubWluIjozMjN9XSwzODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmRlY2xhcmF0aW9uPWUsdGhpcy5zdGFydFRpbWU9dGhpcy5lbmRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLCJwaWVjZXdpc2UtY29uc3RhbnQiPT09dC5mdW5jdGlvbiYmdC50cmFuc2l0aW9uP3RoaXMuaW50ZXJwPWk6dGhpcy5pbnRlcnA9b1t0LnR5cGVdLHRoaXMub2xkVHJhbnNpdGlvbj1yLHRoaXMuZHVyYXRpb249bi5kdXJhdGlvbnx8MCx0aGlzLmRlbGF5PW4uZGVsYXl8fDAsdGhpcy5pbnN0YW50KCl8fCh0aGlzLmVuZFRpbWU9dGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbit0aGlzLmRlbGF5LHRoaXMuZWFzZT1hLmVhc2VDdWJpY0luT3V0KSxyJiZyLmVuZFRpbWU8PXRoaXMuc3RhcnRUaW1lJiZkZWxldGUgci5vbGRUcmFuc2l0aW9ufWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiB2b2lkIDA9PT0odCYmdC50byl8fHZvaWQgMD09PShlJiZlLnRvKT92b2lkIDA6e2Zyb206dC50byxmcm9tU2NhbGU6dC50b1NjYWxlLHRvOmUudG8sdG9TY2FsZTplLnRvU2NhbGUsdDpyfX12YXIgYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4uL3V0aWwvaW50ZXJwb2xhdGUiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5pbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub2xkVHJhbnNpdGlvbnx8IXRoaXMuaW50ZXJwfHwwPT09dGhpcy5kdXJhdGlvbiYmMD09PXRoaXMuZGVsYXl9LG4ucHJvdG90eXBlLmNhbGN1bGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZGVjbGFyYXRpb24uY2FsY3VsYXRlKGEuZXh0ZW5kKHt9LHQse2R1cmF0aW9uOnRoaXMuZHVyYXRpb259KSxlKTtpZih0aGlzLmluc3RhbnQoKSlyZXR1cm4gcjt2YXIgbj10LnRpbWV8fERhdGUubm93KCk7aWYobjx0aGlzLmVuZFRpbWUpe3ZhciBpPXRoaXMub2xkVHJhbnNpdGlvbi5jYWxjdWxhdGUoYS5leHRlbmQoe30sdCx7dGltZTp0aGlzLnN0YXJ0VGltZX0pLGUpLG89dGhpcy5lYXNlKChuLXRoaXMuc3RhcnRUaW1lLXRoaXMuZGVsYXkpL3RoaXMuZHVyYXRpb24pO3I9dGhpcy5pbnRlcnAoaSxyLG8pfXJldHVybiByfX0seyIuLi91dGlsL2ludGVycG9sYXRlIjo0MzQsIi4uL3V0aWwvdXRpbCI6NDQwfV0sMzg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCJtYXBib3gtZ2wtc3R5bGUtc3BlYy9saWIvdmFsaWRhdGVfc3R5bGUubWluIiksZS5leHBvcnRzLmVtaXRFcnJvcnM9ZnVuY3Rpb24odCxlKXtpZihlJiZlLmxlbmd0aCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdC5maXJlKCJlcnJvciIse2Vycm9yOm5ldyBFcnJvcihlW3JdLm1lc3NhZ2UpfSk7cmV0dXJuITB9cmV0dXJuITF9LGUuZXhwb3J0cy50aHJvd0Vycm9ycz1mdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhyb3cgbmV3IEVycm9yKGVbcl0ubWVzc2FnZSl9fSx7Im1hcGJveC1nbC1zdHlsZS1zcGVjL2xpYi92YWxpZGF0ZV9zdHlsZS5taW4iOjMyMn1dLDM4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMueD10LHRoaXMueT1lLHRoaXMuYW5nbGU9cix2b2lkIDAhPT1uJiYodGhpcy5zZWdtZW50PW4pfXZhciBpPXQoInBvaW50LWdlb21ldHJ5Iik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSx0aGlzLmFuZ2xlLHRoaXMuc2VnbWVudCl9fSx7InBvaW50LWdlb21ldHJ5Ijo0ODJ9XSwzOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe2lmKHZvaWQgMD09PWUuc2VnbWVudClyZXR1cm4hMDtmb3IodmFyIGE9ZSxvPWUuc2VnbWVudCsxLHM9MDtzPi1yLzI7KXtpZigtLW88MClyZXR1cm4hMTtzLT10W29dLmRpc3QoYSksYT10W29dfXMrPXRbb10uZGlzdCh0W28rMV0pLG8rKztmb3IodmFyIGw9W10sdT0wO3M8ci8yOyl7dmFyIGM9dFtvLTFdLGg9dFtvXSxmPXRbbysxXTtpZighZilyZXR1cm4hMTt2YXIgZD1jLmFuZ2xlVG8oaCktaC5hbmdsZVRvKGYpO2ZvcihkPU1hdGguYWJzKChkKzMqTWF0aC5QSSklKDIqTWF0aC5QSSktTWF0aC5QSSksbC5wdXNoKHtkaXN0YW5jZTpzLGFuZ2xlRGVsdGE6ZH0pLHUrPWQ7cy1sWzBdLmRpc3RhbmNlPm47KXUtPWwuc2hpZnQoKS5hbmdsZURlbHRhO2lmKHU+aSlyZXR1cm4hMTtvKysscys9aC5kaXN0KGYpfXJldHVybiEwfWUuZXhwb3J0cz1ufSx7fV0sMzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixhKXtmb3IodmFyIG89W10scz0wO3M8dC5sZW5ndGg7cysrKWZvcih2YXIgbCx1PXRbc10sYz0wO2M8dS5sZW5ndGgtMTtjKyspe3ZhciBoPXVbY10sZj11W2MrMV07aC54PGUmJmYueDxlfHwoaC54PGU/aD1uZXcgaShlLGgueSsoZi55LWgueSkqKChlLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCk6Zi54PGUmJihmPW5ldyBpKGUsaC55KyhmLnktaC55KSooKGUtaC54KS8oZi54LWgueCkpKS5fcm91bmQoKSksaC55PHImJmYueTxyfHwoaC55PHI/aD1uZXcgaShoLngrKGYueC1oLngpKigoci1oLnkpLyhmLnktaC55KSkscikuX3JvdW5kKCk6Zi55PHImJihmPW5ldyBpKGgueCsoZi54LWgueCkqKChyLWgueSkvKGYueS1oLnkpKSxyKS5fcm91bmQoKSksaC54Pj1uJiZmLng+PW58fChoLng+PW4/aD1uZXcgaShuLGgueSsoZi55LWgueSkqKChuLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCk6Zi54Pj1uJiYoZj1uZXcgaShuLGgueSsoZi55LWgueSkqKChuLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCkpLGgueT49YSYmZi55Pj1hfHwoaC55Pj1hP2g9bmV3IGkoaC54KyhmLngtaC54KSooKGEtaC55KS8oZi55LWgueSkpLGEpLl9yb3VuZCgpOmYueT49YSYmKGY9bmV3IGkoaC54KyhmLngtaC54KSooKGEtaC55KS8oZi55LWgueSkpLGEpLl9yb3VuZCgpKSxsJiZoLmVxdWFscyhsW2wubGVuZ3RoLTFdKXx8KGw9W2hdLG8ucHVzaChsKSksbC5wdXNoKGYpKSkpKX1yZXR1cm4gb312YXIgaT10KCJwb2ludC1nZW9tZXRyeSIpO2UuZXhwb3J0cz1ufSx7InBvaW50LWdlb21ldHJ5Ijo0ODJ9XSwzOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC9zdHJ1Y3RfYXJyYXkiKSxpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgicG9pbnQtZ2VvbWV0cnkiKSxvPWUuZXhwb3J0cz1uZXcgbih7bWVtYmVyczpbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDEifSx7dHlwZToiSW50MTYiLG5hbWU6InkxIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MiJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTIifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibWF4U2NhbGUifSx7dHlwZToiVWludDMyIixuYW1lOiJmZWF0dXJlSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJzb3VyY2VMYXllckluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiYnVja2V0SW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6ImJib3gwIn0se3R5cGU6IkludDE2IixuYW1lOiJiYm94MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYmJveDIifSx7dHlwZToiSW50MTYiLG5hbWU6ImJib3gzIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6InBsYWNlbWVudFNjYWxlIn1dfSk7aS5leHRlbmRBbGwoby5wcm90b3R5cGUuU3RydWN0VHlwZS5wcm90b3R5cGUse2dldCBhbmNob3JQb2ludCgpe3JldHVybiBuZXcgYSh0aGlzLmFuY2hvclBvaW50WCx0aGlzLmFuY2hvclBvaW50WSl9fSl9LHsiLi4vdXRpbC9zdHJ1Y3RfYXJyYXkiOjQzOCwiLi4vdXRpbC91dGlsIjo0NDAsInBvaW50LWdlb21ldHJ5Ijo0ODJ9XSwzOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMsbCx1LGMpe3ZhciBoPW8udG9wKnMtbCxmPW8uYm90dG9tKnMrbCxkPW8ubGVmdCpzLWwscD1vLnJpZ2h0KnMrbDtpZih0aGlzLmJveFN0YXJ0SW5kZXg9dC5sZW5ndGgsdSl7dmFyIG09Zi1oLHY9cC1kO2lmKG0+MClpZihtPU1hdGgubWF4KDEwKnMsbSksYyl7dmFyIGc9ZVtyLnNlZ21lbnQrMV0uc3ViKGVbci5zZWdtZW50XSkuX3VuaXQoKS5fbXVsdCh2KSx5PVtyLnN1YihnKSxyLmFkZChnKV07dGhpcy5fYWRkTGluZUNvbGxpc2lvbkJveGVzKHQseSxyLDAsdixtLG4saSxhKX1lbHNlIHRoaXMuX2FkZExpbmVDb2xsaXNpb25Cb3hlcyh0LGUscixyLnNlZ21lbnQsdixtLG4saSxhKX1lbHNlIHQuZW1wbGFjZUJhY2soci54LHIueSxkLGgscCxmLDEvMCxuLGksYSwwLDAsMCwwLDApO3RoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2FkZExpbmVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7dmFyIHU9YS8yLGM9TWF0aC5mbG9vcihpL3UpLGg9LWEvMixmPXRoaXMuYm94ZXMsZD1yLHA9bisxLG09aDtkb3tpZigtLXA8MClyZXR1cm4gZjttLT1lW3BdLmRpc3QoZCksZD1lW3BdfXdoaWxlKG0+LWkvMik7Zm9yKHZhciB2PWVbcF0uZGlzdChlW3ArMV0pLGc9MDtnPGM7ZysrKXtmb3IodmFyIHk9LWkvMitnKnU7bSt2PHk7KXtpZihtKz12LCsrcCsxPj1lLmxlbmd0aClyZXR1cm4gZjt2PWVbcF0uZGlzdChlW3ArMV0pfXZhciBiPXktbSx4PWVbcF0sXz1lW3ArMV0sdz1fLnN1Yih4KS5fdW5pdCgpLl9tdWx0KGIpLl9hZGQoeCkuX3JvdW5kKCksTT1NYXRoLm1heChNYXRoLmFicyh5LWgpLXUvMiwwKSxrPWkvMi9NO3QuZW1wbGFjZUJhY2sody54LHcueSwtYS8yLC1hLzIsYS8yLGEvMixrLG8scyxsLDAsMCwwLDAsMCl9cmV0dXJuIGZ9fSx7fV0sMzk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIG49dDtyPWUsdD1uLmFuZ2xlLGU9bi5waXRjaCx0aGlzLmdyaWQ9bmV3IG8obi5ncmlkKSx0aGlzLmlnbm9yZWRHcmlkPW5ldyBvKG4uaWdub3JlZEdyaWQpfWVsc2UgdGhpcy5ncmlkPW5ldyBvKGEsMTIsNiksdGhpcy5pZ25vcmVkR3JpZD1uZXcgbyhhLDEyLDApO3RoaXMuYW5nbGU9dCx0aGlzLnBpdGNoPWU7dmFyIGk9TWF0aC5zaW4odCkscz1NYXRoLmNvcyh0KTtpZih0aGlzLnJvdGF0aW9uTWF0cml4PVtzLC1pLGksc10sdGhpcy5yZXZlcnNlUm90YXRpb25NYXRyaXg9W3MsaSwtaSxzXSx0aGlzLnlTdHJldGNoPTEvTWF0aC5jb3MoZS8xODAqTWF0aC5QSSksdGhpcy55U3RyZXRjaD1NYXRoLnBvdyh0aGlzLnlTdHJldGNoLDEuMyksdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1yLDA9PT1yLmxlbmd0aCl7ci5lbXBsYWNlQmFjaygpO3IuZW1wbGFjZUJhY2soMCwwLDAsLTMyNzY3LDAsMzI3NjcsMzI3NjcsMCwwLDAsMCwwLDAsMCwwLDApLHIuZW1wbGFjZUJhY2soYSwwLDAsLTMyNzY3LDAsMzI3NjcsMzI3NjcsMCwwLDAsMCwwLDAsMCwwLDApLHIuZW1wbGFjZUJhY2soMCwwLC0zMjc2NywwLDMyNzY3LDAsMzI3NjcsMCwwLDAsMCwwLDAsMCwwLDApLHIuZW1wbGFjZUJhY2soMCxhLC0zMjc2NywwLDMyNzY3LDAsMzI3NjcsMCwwLDAsMCwwLDAsMCwwLDApfXRoaXMudGVtcENvbGxpc2lvbkJveD1yLmdldCgwKSx0aGlzLmVkZ2VzPVtyLmdldCgxKSxyLmdldCgyKSxyLmdldCgzKSxyLmdldCg0KV19dmFyIGk9dCgicG9pbnQtZ2VvbWV0cnkiKSxhPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5ULG89dCgiZ3JpZC1pbmRleCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXthbmdsZTp0aGlzLmFuZ2xlLHBpdGNoOnRoaXMucGl0Y2gsZ3JpZDp0aGlzLmdyaWQudG9BcnJheUJ1ZmZlcigpLGlnbm9yZWRHcmlkOnRoaXMuaWdub3JlZEdyaWQudG9BcnJheUJ1ZmZlcigpfTtyZXR1cm57ZGF0YTp0LHRyYW5zZmVyYWJsZXM6W3QuZ3JpZCx0Lmlnbm9yZWRHcmlkXX19LG4ucHJvdG90eXBlLm1pblNjYWxlPS4yNSxuLnByb3RvdHlwZS5tYXhTY2FsZT0yLG4ucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uRmVhdHVyZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMuY29sbGlzaW9uQm94QXJyYXksYT10aGlzLm1pblNjYWxlLG89dGhpcy5yb3RhdGlvbk1hdHJpeCxzPXRoaXMueVN0cmV0Y2gsbD10LmJveFN0YXJ0SW5kZXg7bDx0LmJveEVuZEluZGV4O2wrKyl7dmFyIHU9bi5nZXQobCksYz11LmFuY2hvclBvaW50Ll9tYXRNdWx0KG8pLGg9Yy54LGY9Yy55LGQ9aCt1LngxLHA9Zit1LnkxKnMsbT1oK3UueDIsdj1mK3UueTIqcztpZih1LmJib3gwPWQsdS5iYm94MT1wLHUuYmJveDI9bSx1LmJib3gzPXYsIWUpZm9yKHZhciBnPXRoaXMuZ3JpZC5xdWVyeShkLHAsbSx2KSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBiPW4uZ2V0KGdbeV0pLHg9Yi5hbmNob3JQb2ludC5fbWF0TXVsdChvKTtpZigoYT10aGlzLmdldFBsYWNlbWVudFNjYWxlKGEsYyx1LHgsYikpPj10aGlzLm1heFNjYWxlKXJldHVybiBhfWlmKHIpe3ZhciBfO2lmKHRoaXMuYW5nbGUpe3ZhciB3PXRoaXMucmV2ZXJzZVJvdGF0aW9uTWF0cml4LE09bmV3IGkodS54MSx1LnkxKS5tYXRNdWx0KHcpLGs9bmV3IGkodS54Mix1LnkxKS5tYXRNdWx0KHcpLEE9bmV3IGkodS54MSx1LnkyKS5tYXRNdWx0KHcpLFQ9bmV3IGkodS54Mix1LnkyKS5tYXRNdWx0KHcpO189dGhpcy50ZW1wQ29sbGlzaW9uQm94LF8uYW5jaG9yUG9pbnRYPXUuYW5jaG9yUG9pbnQueCxfLmFuY2hvclBvaW50WT11LmFuY2hvclBvaW50LnksXy54MT1NYXRoLm1pbihNLngsay54LEEueCxULngpLF8ueTE9TWF0aC5taW4oTS55LGsueCxBLngsVC54KSxfLngyPU1hdGgubWF4KE0ueCxrLngsQS54LFQueCksXy55Mj1NYXRoLm1heChNLnksay54LEEueCxULngpLF8ubWF4U2NhbGU9dS5tYXhTY2FsZX1lbHNlIF89dTtmb3IodmFyIFM9MDtTPHRoaXMuZWRnZXMubGVuZ3RoO1MrKyl7dmFyIEU9dGhpcy5lZGdlc1tTXTtpZigoYT10aGlzLmdldFBsYWNlbWVudFNjYWxlKGEsdS5hbmNob3JQb2ludCxfLEUuYW5jaG9yUG9pbnQsRSkpPj10aGlzLm1heFNjYWxlKXJldHVybiBhfX19cmV0dXJuIGF9LG4ucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89e30scz1bXSxsPXRoaXMuY29sbGlzaW9uQm94QXJyYXksdT10aGlzLnJvdGF0aW9uTWF0cml4LGM9bmV3IGkodCxlKS5fbWF0TXVsdCh1KSxoPXRoaXMudGVtcENvbGxpc2lvbkJveDtoLmFuY2hvclg9Yy54LGguYW5jaG9yWT1jLnksaC54MT0wLGgueTE9MCxoLngyPXItdCxoLnkyPW4tZSxoLm1heFNjYWxlPWEsYT1oLm1heFNjYWxlO2Zvcih2YXIgZj1bYy54K2gueDEvYSxjLnkraC55MS9hKnRoaXMueVN0cmV0Y2gsYy54K2gueDIvYSxjLnkraC55Mi9hKnRoaXMueVN0cmV0Y2hdLGQ9dGhpcy5ncmlkLnF1ZXJ5KGZbMF0sZlsxXSxmWzJdLGZbM10pLHA9dGhpcy5pZ25vcmVkR3JpZC5xdWVyeShmWzBdLGZbMV0sZlsyXSxmWzNdKSxtPTA7bTxwLmxlbmd0aDttKyspZC5wdXNoKHBbbV0pO2Zvcih2YXIgdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgZz1sLmdldChkW3ZdKSx5PWcuc291cmNlTGF5ZXJJbmRleCxiPWcuZmVhdHVyZUluZGV4O2lmKHZvaWQgMD09PW9beV0mJihvW3ldPXt9KSwhb1t5XVtiXSl7dmFyIHg9Zy5hbmNob3JQb2ludC5tYXRNdWx0KHUpO3RoaXMuZ2V0UGxhY2VtZW50U2NhbGUodGhpcy5taW5TY2FsZSxjLGgseCxnKT49YSYmKG9beV1bYl09ITAscy5wdXNoKGRbdl0pKX19cmV0dXJuIHN9LG4ucHJvdG90eXBlLmdldFBsYWNlbWVudFNjYWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ZS54LW4ueCxvPWUueS1uLnkscz0oaS54MS1yLngyKS9hLGw9KGkueDItci54MSkvYSx1PShpLnkxLXIueTIpKnRoaXMueVN0cmV0Y2gvbyxjPShpLnkyLXIueTEpKnRoaXMueVN0cmV0Y2gvbzsoaXNOYU4ocyl8fGlzTmFOKGwpKSYmKHM9bD0xKSwoaXNOYU4odSl8fGlzTmFOKGMpKSYmKHU9Yz0xKTt2YXIgaD1NYXRoLm1pbihNYXRoLm1heChzLGwpLE1hdGgubWF4KHUsYykpLGY9aS5tYXhTY2FsZSxkPXIubWF4U2NhbGU7cmV0dXJuIGg+ZiYmKGg9ZiksaD5kJiYoaD1kKSxoPnQmJmg+PWkucGxhY2VtZW50U2NhbGUmJih0PWgpLHR9LG4ucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkZlYXR1cmU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkLGk9dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxhPXQuYm94U3RhcnRJbmRleDthPHQuYm94RW5kSW5kZXg7YSsrKXt2YXIgbz1pLmdldChhKTtvLnBsYWNlbWVudFNjYWxlPWUsZTx0aGlzLm1heFNjYWxlJiZuLmluc2VydChhLG8uYmJveDAsby5iYm94MSxvLmJib3gyLG8uYmJveDMpfX19LHsiLi4vZGF0YS9idWNrZXQiOjMyNywiZ3JpZC1pbmRleCI6Mjg1LCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sMzk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixhLG8scyxsLHUpe3ZhciBjPW4/LjYqbypzOjAsaD1NYXRoLm1heChuP24ucmlnaHQtbi5sZWZ0OjAsYT9hLnJpZ2h0LWEubGVmdDowKSxmPTA9PT10WzBdLnh8fHRbMF0ueD09PXV8fDA9PT10WzBdLnl8fHRbMF0ueT09PXU7ZS1oKnM8ZS80JiYoZT1oKnMrZS80KTt2YXIgZD0yKm87cmV0dXJuIGkodCxmP2UvMipsJWU6KGgvMitkKSpzKmwlZSxlLGMscixoKnMsZiwhMSx1KX1mdW5jdGlvbiBpKHQsZSxyLG4sbCx1LGMsaCxmKXtmb3IodmFyIGQ9dS8yLHA9MCxtPTA7bTx0Lmxlbmd0aC0xO20rKylwKz10W21dLmRpc3QodFttKzFdKTtmb3IodmFyIHY9MCxnPWUtcix5PVtdLGI9MDtiPHQubGVuZ3RoLTE7YisrKXtmb3IodmFyIHg9dFtiXSxfPXRbYisxXSx3PXguZGlzdChfKSxNPV8uYW5nbGVUbyh4KTtnK3I8dit3Oyl7Zys9cjt2YXIgaz0oZy12KS93LEE9YSh4LngsXy54LGspLFQ9YSh4LnksXy55LGspO2lmKEE+PTAmJkE8ZiYmVD49MCYmVDxmJiZnLWQ+PTAmJmcrZDw9cCl7dmFyIFM9bmV3IG8oQSxULE0sYikuX3JvdW5kKCk7biYmIXModCxTLHUsbixsKXx8eS5wdXNoKFMpfX12Kz13fXJldHVybiBofHx5Lmxlbmd0aHx8Y3x8KHk9aSh0LHYvMixyLG4sbCx1LGMsITAsZikpLHl9dmFyIGE9dCgiLi4vdXRpbC9pbnRlcnBvbGF0ZSIpLG89dCgiLi4vc3ltYm9sL2FuY2hvciIpLHM9dCgiLi9jaGVja19tYXhfYW5nbGUiKTtlLmV4cG9ydHM9bn0seyIuLi9zeW1ib2wvYW5jaG9yIjozODksIi4uL3V0aWwvaW50ZXJwb2xhdGUiOjQzNCwiLi9jaGVja19tYXhfYW5nbGUiOjM5MH1dLDM5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy53aWR0aD1vLHRoaXMuaGVpZ2h0PW8sdGhpcy5iaW49bmV3IGkodGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5pbmRleD17fSx0aGlzLmlkcz17fSx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy53aWR0aCp0aGlzLmhlaWdodCl9dmFyIGk9dCgic2hlbGYtcGFjayIpLGE9dCgiLi4vdXRpbC91dGlsIiksbz0xMjg7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49e307Zm9yKHZhciBpIGluIHRoaXMuaWRzKXQ9aS5zcGxpdCgiIyIpLGU9dFswXSxyPXRbMV0sbltlXXx8KG5bZV09W10pLG5bZV0ucHVzaChyKTtyZXR1cm4gbn0sbi5wcm90b3R5cGUuZ2V0UmVjdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj17fTtmb3IodmFyIGkgaW4gdGhpcy5pZHMpdD1pLnNwbGl0KCIjIiksZT10WzBdLHI9dFsxXSxuW2VdfHwobltlXT17fSksbltlXVtyXT10aGlzLmluZGV4W2ldO3JldHVybiBufSxuLnByb3RvdHlwZS5hZGRHbHlwaD1mdW5jdGlvbih0LGUscixuKXtpZighcilyZXR1cm4gbnVsbDt2YXIgaT1lKyIjIityLmlkO2lmKHRoaXMuaW5kZXhbaV0pcmV0dXJuIHRoaXMuaWRzW2ldLmluZGV4T2YodCk8MCYmdGhpcy5pZHNbaV0ucHVzaCh0KSx0aGlzLmluZGV4W2ldO2lmKCFyLmJpdG1hcClyZXR1cm4gbnVsbDt2YXIgbz1yLndpZHRoKzIqbixzPXIuaGVpZ2h0KzIqbixsPW8rMix1PXMrMjtsKz00LWwlNCx1Kz00LXUlNDt2YXIgYz10aGlzLmJpbi5wYWNrT25lKGwsdSk7aWYoY3x8KHRoaXMucmVzaXplKCksYz10aGlzLmJpbi5wYWNrT25lKGwsdSkpLCFjKXJldHVybiBhLndhcm5PbmNlKCJnbHlwaCBiaXRtYXAgb3ZlcmZsb3ciKSxudWxsO3RoaXMuaW5kZXhbaV09Yyx0aGlzLmlkc1tpXT1bdF07Zm9yKHZhciBoPXRoaXMuZGF0YSxmPXIuYml0bWFwLGQ9MDtkPHM7ZCsrKWZvcih2YXIgcD10aGlzLndpZHRoKihjLnkrZCsxKStjLngrMSxtPW8qZCx2PTA7djxvO3YrKyloW3Ardl09ZlttK3ZdO3JldHVybiB0aGlzLmRpcnR5PSEwLGN9LG4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMud2lkdGgsZT10aGlzLmhlaWdodDtpZighKHQ+PTIwNDh8fGU+PTIwNDgpKXt0aGlzLnRleHR1cmUmJih0aGlzLmdsJiZ0aGlzLmdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKSx0aGlzLnRleHR1cmU9bnVsbCksdGhpcy53aWR0aCo9NCx0aGlzLmhlaWdodCo9NCx0aGlzLmJpbi5yZXNpemUodGhpcy53aWR0aCx0aGlzLmhlaWdodCk7Zm9yKHZhciByPW5ldyBBcnJheUJ1ZmZlcih0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KSxuPTA7bjxlO24rKyl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcixlKm4sdCk7bmV3IFVpbnQ4QXJyYXkocixlKm4qNCx0KS5zZXQoaSl9dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHIpfX0sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy50ZXh0dXJlP3QuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHRoaXMudGV4dHVyZSk6KHRoaXMudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5MSU5FQVIpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5MSU5FQVIpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LkFMUEhBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCx0LkFMUEhBLHQuVU5TSUdORURfQllURSxudWxsKSl9LG4ucHJvdG90eXBlLnVwZGF0ZVRleHR1cmU9ZnVuY3Rpb24odCl7dGhpcy5iaW5kKHQpLHRoaXMuZGlydHkmJih0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsdC5BTFBIQSx0LlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSx0aGlzLmRpcnR5PSExKX19LHsiLi4vdXRpbC91dGlsIjo0NDAsInNoZWxmLXBhY2siOjUxMn1dLDM5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMudXJsPXQmJm8odCksdGhpcy5hdGxhc2VzPXt9LHRoaXMuc3RhY2tzPXt9LHRoaXMubG9hZGluZz17fX1mdW5jdGlvbiBpKHQsZSxyKXt0aGlzLmFkdmFuY2U9dC5hZHZhbmNlLHRoaXMubGVmdD10LmxlZnQtci0xLHRoaXMudG9wPXQudG9wK3IrMSx0aGlzLnJlY3Q9ZX1mdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVybiBuPW58fCJhYmMiLHIucmVwbGFjZSgie3N9IixuW3QubGVuZ3RoJW4ubGVuZ3RoXSkucmVwbGFjZSgie2ZvbnRzdGFja30iLHQpLnJlcGxhY2UoIntyYW5nZX0iLGUpfXZhciBvPXQoIi4uL3V0aWwvbWFwYm94Iikubm9ybWFsaXplR2x5cGhzVVJMLHM9dCgiLi4vdXRpbC9hamF4IikuZ2V0QXJyYXlCdWZmZXIsbD10KCIuLi91dGlsL2dseXBocyIpLHU9dCgiLi4vc3ltYm9sL2dseXBoX2F0bGFzIiksYz10KCJwYmYiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5nZXRTaW1wbGVHbHlwaHM9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09dGhpcy5zdGFja3NbdF0mJih0aGlzLnN0YWNrc1t0XT17fSksdm9pZCAwPT09dGhpcy5hdGxhc2VzW3RdJiYodGhpcy5hdGxhc2VzW3RdPW5ldyB1KTtmb3IodmFyIGEsbz17fSxzPXRoaXMuc3RhY2tzW3RdLGw9dGhpcy5hdGxhc2VzW3RdLGM9e30saD0wLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGQ9ZVtmXTtpZihhPU1hdGguZmxvb3IoZC8yNTYpLHNbYV0pe3ZhciBwPXNbYV0uZ2x5cGhzW2RdLG09bC5hZGRHbHlwaChyLHQscCwzKTtwJiYob1tkXT1uZXcgaShwLG0sMykpfWVsc2Ugdm9pZCAwPT09Y1thXSYmKGNbYV09W10saCsrKSxjW2FdLnB1c2goZCl9aHx8bih2b2lkIDAsbyx0KTt2YXIgdj1mdW5jdGlvbihlLGEscyl7aWYoIWUpZm9yKHZhciB1PXRoaXMuc3RhY2tzW3RdW2FdPXMuc3RhY2tzWzBdLGY9MDtmPGNbYV0ubGVuZ3RoO2YrKyl7dmFyIGQ9Y1thXVtmXSxwPXUuZ2x5cGhzW2RdLG09bC5hZGRHbHlwaChyLHQscCwzKTtwJiYob1tkXT1uZXcgaShwLG0sMykpfS0taHx8bih2b2lkIDAsbyx0KX0uYmluZCh0aGlzKTtmb3IodmFyIGcgaW4gYyl0aGlzLmxvYWRSYW5nZSh0LGcsdil9LG4ucHJvdG90eXBlLmxvYWRSYW5nZT1mdW5jdGlvbih0LGUscil7aWYoMjU2KmU+NjU1MzUpcmV0dXJuIHIoImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQiKTt2b2lkIDA9PT10aGlzLmxvYWRpbmdbdF0mJih0aGlzLmxvYWRpbmdbdF09e30pO3ZhciBuPXRoaXMubG9hZGluZ1t0XTtpZihuW2VdKW5bZV0ucHVzaChyKTtlbHNle25bZV09W3JdO3ZhciBpPTI1NiplKyItIisoMjU2KmUrMjU1KSxvPWEodCxpLHRoaXMudXJsKTtzKG8sZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9IXQmJm5ldyBsKG5ldyBjKG5ldyBVaW50OEFycmF5KHIpKSksYT0wO2E8bltlXS5sZW5ndGg7YSsrKW5bZV1bYV0odCxlLGkpO2RlbGV0ZSBuW2VdfSl9fSxuLnByb3RvdHlwZS5nZXRHbHlwaEF0bGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF0bGFzZXNbdF19fSx7Ii4uL3N5bWJvbC9nbHlwaF9hdGxhcyI6Mzk2LCIuLi91dGlsL2FqYXgiOjQyMywiLi4vdXRpbC9nbHlwaHMiOjQzMywiLi4vdXRpbC9tYXBib3giOjQzNyxwYmY6NDc2fV0sMzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihuKXtjLnB1c2godFtuXSksaC5wdXNoKHJbbl0pLGYucHVzaChlW25dKSxkKyt9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49dVt0XTtyZXR1cm4gZGVsZXRlIHVbdF0sdVtlXT1uLGhbbl1bMF0ucG9wKCksaFtuXVswXT1oW25dWzBdLmNvbmNhdChyWzBdKSxufWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPWxbZV07cmV0dXJuIGRlbGV0ZSBsW2VdLGxbdF09bixoW25dWzBdLnNoaWZ0KCksaFtuXVswXT1yWzBdLmNvbmNhdChoW25dWzBdKSxufWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXI/ZVswXVtlWzBdLmxlbmd0aC0xXTplWzBdWzBdO3JldHVybiB0KyI6IituLngrIjoiK24ueX12YXIgcyxsPXt9LHU9e30sYz1bXSxoPVtdLGY9W10sZD0wO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBwPXJbc10sbT1lW3NdO2lmKG0pe3ZhciB2PW8obSxwKSxnPW8obSxwLCEwKTtpZih2IGluIHUmJmcgaW4gbCYmdVt2XSE9PWxbZ10pe3ZhciB5PWEodixnLHApLGI9aSh2LGcsaFt5XSk7ZGVsZXRlIGxbdl0sZGVsZXRlIHVbZ10sdVtvKG0saFtiXSwhMCldPWIsaFt5XT1udWxsfWVsc2UgdiBpbiB1P2kodixnLHApOmcgaW4gbD9hKHYsZyxwKToobihzKSxsW3ZdPWQtMSx1W2ddPWQtMSl9ZWxzZSBuKHMpfXJldHVybntmZWF0dXJlczpjLHRleHRGZWF0dXJlczpmLGdlb21ldHJpZXM6aH19fSx7fV0sMzk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsdSl7dGhpcy5hbmNob3JQb2ludD10LHRoaXMudGw9ZSx0aGlzLnRyPXIsdGhpcy5ibD1uLHRoaXMuYnI9aSx0aGlzLnRleD1hLHRoaXMuYW5jaG9yQW5nbGU9byx0aGlzLmdseXBoQW5nbGU9cyx0aGlzLm1pblNjYWxlPWwsdGhpcy5tYXhTY2FsZT11fWZ1bmN0aW9uIGkodCxlLHIsaSxhLG8sdSxjLGgpe3ZhciBmLGQscCxtLHY9ZS5pbWFnZS5yZWN0LGc9YS5sYXlvdXQseT1lLmxlZnQtMSxiPXkrdi53L2UuaW1hZ2UucGl4ZWxSYXRpbyx4PWUudG9wLTEsXz14K3YuaC9lLmltYWdlLnBpeGVsUmF0aW87aWYoIm5vbmUiIT09Z1siaWNvbi10ZXh0LWZpdCJdJiZ1KXt2YXIgdz1iLXksTT1fLXgsaz1nWyJ0ZXh0LXNpemUiXS8yNCxBPXUubGVmdCprLFQ9dS5yaWdodCprLFM9dS50b3AqayxFPXUuYm90dG9tKmssTD1ULUEsQz1FLVMsej1nWyJpY29uLXRleHQtZml0LXBhZGRpbmciXVswXSxJPWdbImljb24tdGV4dC1maXQtcGFkZGluZyJdWzFdLEQ9Z1siaWNvbi10ZXh0LWZpdC1wYWRkaW5nIl1bMl0sUD1nWyJpY29uLXRleHQtZml0LXBhZGRpbmciXVszXSxPPSJ3aWR0aCI9PT1nWyJpY29uLXRleHQtZml0Il0/LjUqKEMtTSk6MCxSPSJoZWlnaHQiPT09Z1siaWNvbi10ZXh0LWZpdCJdPy41KihMLXcpOjAsRj0id2lkdGgiPT09Z1siaWNvbi10ZXh0LWZpdCJdfHwiYm90aCI9PT1nWyJpY29uLXRleHQtZml0Il0/TDp3LGo9ImhlaWdodCI9PT1nWyJpY29uLXRleHQtZml0Il18fCJib3RoIj09PWdbImljb24tdGV4dC1maXQiXT9DOk07Zj1uZXcgcyhBK1ItUCxTK08teiksZD1uZXcgcyhBK1IrSStGLFMrTy16KSxwPW5ldyBzKEErUitJK0YsUytPK0QraiksbT1uZXcgcyhBK1ItUCxTK08rRCtqKX1lbHNlIGY9bmV3IHMoeSx4KSxkPW5ldyBzKGIseCkscD1uZXcgcyhiLF8pLG09bmV3IHMoeSxfKTt2YXIgTj1hLmdldExheW91dFZhbHVlKCJpY29uLXJvdGF0ZSIsYyxoKSpNYXRoLlBJLzE4MDtpZihvKXt2YXIgQj1pW3Quc2VnbWVudF07aWYodC55PT09Qi55JiZ0Lng9PT1CLngmJnQuc2VnbWVudCsxPGkubGVuZ3RoKXt2YXIgVT1pW3Quc2VnbWVudCsxXTtOKz1NYXRoLmF0YW4yKHQueS1VLnksdC54LVUueCkrTWF0aC5QSX1lbHNlIE4rPU1hdGguYXRhbjIodC55LUIueSx0LngtQi54KX1pZihOKXt2YXIgVj1NYXRoLnNpbihOKSxIPU1hdGguY29zKE4pLHE9W0gsLVYsVixIXTtmPWYubWF0TXVsdChxKSxkPWQubWF0TXVsdChxKSxtPW0ubWF0TXVsdChxKSxwPXAubWF0TXVsdChxKX1yZXR1cm5bbmV3IG4obmV3IHModC54LHQueSksZixkLG0scCxlLmltYWdlLnJlY3QsMCwwLGwsMS8wKV19ZnVuY3Rpb24gYSh0LGUscixpLGEsdSl7Zm9yKHZhciBjPWEubGF5b3V0WyJ0ZXh0LXJvdGF0ZSJdKk1hdGguUEkvMTgwLGg9YS5sYXlvdXRbInRleHQta2VlcC11cHJpZ2h0Il0sZj1lLnBvc2l0aW9uZWRHbHlwaHMsZD1bXSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBtPWZbcF0sdj1tLmdseXBoLGc9di5yZWN0O2lmKGcpe3ZhciB5LGI9KG0ueCt2LmFkdmFuY2UvMikqcix4PWw7dT8oeT1bXSx4PW8oeSx0LGIsaSx0LnNlZ21lbnQsITApLGgmJih4PU1hdGgubWluKHgsbyh5LHQsYixpLHQuc2VnbWVudCwhMSkpKSk6eT1be2FuY2hvclBvaW50Om5ldyBzKHQueCx0LnkpLG9mZnNldDowLGFuZ2xlOjAsbWF4U2NhbGU6MS8wLG1pblNjYWxlOmx9XTtmb3IodmFyIF89bS54K3YubGVmdCx3PW0ueS12LnRvcCxNPV8rZy53LGs9dytnLmgsQT1uZXcgcyhfLHcpLFQ9bmV3IHMoTSx3KSxTPW5ldyBzKF8sayksRT1uZXcgcyhNLGspLEw9MDtMPHkubGVuZ3RoO0wrKyl7dmFyIEM9eVtMXSx6PUEsST1ULEQ9UyxQPUU7aWYoYyl7dmFyIE89TWF0aC5zaW4oYyksUj1NYXRoLmNvcyhjKSxGPVtSLC1PLE8sUl07ej16Lm1hdE11bHQoRiksST1JLm1hdE11bHQoRiksRD1ELm1hdE11bHQoRiksUD1QLm1hdE11bHQoRil9dmFyIGo9TWF0aC5tYXgoQy5taW5TY2FsZSx4KSxOPSh0LmFuZ2xlK0Mub2Zmc2V0KzIqTWF0aC5QSSklKDIqTWF0aC5QSSksQj0oQy5hbmdsZStDLm9mZnNldCsyKk1hdGguUEkpJSgyKk1hdGguUEkpO2QucHVzaChuZXcgbihDLmFuY2hvclBvaW50LHosSSxELFAsZyxOLEIsaixDLm1heFNjYWxlKSl9fX1yZXR1cm4gZH1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXt2YXIgbz0hYTtyPDAmJihhPSFhKSxhJiZpKys7dmFyIHU9bmV3IHMoZS54LGUueSksYz1uW2ldLGg9MS8wO3I9TWF0aC5hYnMocik7Zm9yKHZhciBmPWw7Oyl7dmFyIGQ9dS5kaXN0KGMpLHA9ci9kLG09TWF0aC5hdGFuMihjLnktdS55LGMueC11LngpO2lmKGF8fChtKz1NYXRoLlBJKSx0LnB1c2goe2FuY2hvclBvaW50OnUsb2Zmc2V0Om8/TWF0aC5QSTowLG1pblNjYWxlOnAsbWF4U2NhbGU6aCxhbmdsZToobSsyKk1hdGguUEkpJSgyKk1hdGguUEkpfSkscDw9ZilicmVhaztmb3IodT1jO3UuZXF1YWxzKGMpOylpZihpKz1hPzE6LTEsIShjPW5baV0pKXJldHVybiBwO3ZhciB2PWMuc3ViKHUpLl91bml0KCk7dT11LnN1Yih2Ll9tdWx0KGQpKSxoPXB9cmV0dXJuIGZ9dmFyIHM9dCgicG9pbnQtZ2VvbWV0cnkiKTtlLmV4cG9ydHM9e2dldEljb25RdWFkczppLGdldEdseXBoUXVhZHM6YSxTeW1ib2xRdWFkOm59O3ZhciBsPS41fSx7InBvaW50LWdlb21ldHJ5Ijo0ODJ9XSw0MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPVtdLGE9MCxvPXQubGVuZ3RoO2E8bzthKyspe3ZhciBzPWkodFthXS5wcm9wZXJ0aWVzLGVbInRleHQtZmllbGQiXSk7aWYocyl7cz1zLnRvU3RyaW5nKCk7dmFyIGw9ZVsidGV4dC10cmFuc2Zvcm0iXTsidXBwZXJjYXNlIj09PWw/cz1zLnRvTG9jYWxlVXBwZXJDYXNlKCk6Imxvd2VyY2FzZSI9PT1sJiYocz1zLnRvTG9jYWxlTG93ZXJDYXNlKCkpO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXJbcy5jaGFyQ29kZUF0KHUpXT0hMDtuW2FdPXN9ZWxzZSBuW2FdPW51bGx9cmV0dXJuIG59dmFyIGk9dCgiLi4vdXRpbC90b2tlbiIpO2UuZXhwb3J0cz1ufSx7Ii4uL3V0aWwvdG9rZW4iOjQzOX1dLDQwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuY29kZVBvaW50PXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5nbHlwaD1ufWZ1bmN0aW9uIGkodCxlLHIsbixpLGEpe3RoaXMucG9zaXRpb25lZEdseXBocz10LHRoaXMudGV4dD1lLHRoaXMudG9wPXIsdGhpcy5ib3R0b209bix0aGlzLmxlZnQ9aSx0aGlzLnJpZ2h0PWF9ZnVuY3Rpb24gYSh0LGUscixhLHMsbCx1LGMsaCl7Zm9yKHZhciBmPVtdLGQ9bmV3IGkoZix0LGhbMV0saFsxXSxoWzBdLGhbMF0pLHA9MCxtPTA7bTx0Lmxlbmd0aDttKyspe3ZhciB2PXQuY2hhckNvZGVBdChtKSxnPWVbdl07ZyYmKGYucHVzaChuZXcgbih2LHAsLTE3LGcpKSxwKz1nLmFkdmFuY2UrYyl9cmV0dXJuISFmLmxlbmd0aCYmKG8oZCxlLGEscixzLGwsdSxoKSxkKX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhLG8sdSl7dmFyIGM9bnVsbCxkPTAscD0wLG09MCx2PTAsZz10LnBvc2l0aW9uZWRHbHlwaHM7aWYobilmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIGI9Z1t5XTtpZihiLngtPWQsYi55Kz1yKm0sYi54Pm4mJm51bGwhPT1jKXt2YXIgeD1nW2MrMV0ueDt2PU1hdGgubWF4KHgsdik7Zm9yKHZhciBfPWMrMTtfPD15O18rKylnW19dLnkrPXIsZ1tfXS54LT14O2lmKG8pe3ZhciB3PWM7aFtnW2NdLmNvZGVQb2ludF0mJnctLSxzKGcsZSxwLHcsbyl9cD1jKzEsYz1udWxsLGQrPXgsbSsrfWZbYi5jb2RlUG9pbnRdJiYoYz15KX12YXIgTT1nW2cubGVuZ3RoLTFdLGs9TS54K2VbTS5jb2RlUG9pbnRdLmFkdmFuY2U7dj1NYXRoLm1heCh2LGspO3ZhciBBPShtKzEpKnI7cyhnLGUscCxnLmxlbmd0aC0xLG8pLGwoZyxvLGksYSx2LHIsbSx1KSx0LnRvcCs9LWEqQSx0LmJvdHRvbT10LnRvcCtBLHQubGVmdCs9LWkqdix0LnJpZ2h0PXQubGVmdCt2fWZ1bmN0aW9uIHModCxlLHIsbixpKXtmb3IodmFyIGE9ZVt0W25dLmNvZGVQb2ludF0uYWR2YW5jZSxvPSh0W25dLngrYSkqaSxzPXI7czw9bjtzKyspdFtzXS54LT1vfWZ1bmN0aW9uIGwodCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9KGUtcikqaStzWzBdLHU9KC1uKihvKzEpKy41KSphK3NbMV0sYz0wO2M8dC5sZW5ndGg7YysrKXRbY10ueCs9bCx0W2NdLnkrPXV9ZnVuY3Rpb24gdSh0LGUpe2lmKCF0fHwhdC5yZWN0KXJldHVybiBudWxsO3ZhciByPWVbImljb24tb2Zmc2V0Il1bMF0sbj1lWyJpY29uLW9mZnNldCJdWzFdLGk9ci10LndpZHRoLzIsYT1pK3Qud2lkdGgsbz1uLXQuaGVpZ2h0LzI7cmV0dXJuIG5ldyBjKHQsbyxvK3QuaGVpZ2h0LGksYSl9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3RoaXMuaW1hZ2U9dCx0aGlzLnRvcD1lLHRoaXMuYm90dG9tPXIsdGhpcy5sZWZ0PW4sdGhpcy5yaWdodD1pfWUuZXhwb3J0cz17c2hhcGVUZXh0OmEsc2hhcGVJY29uOnV9O3ZhciBoPXszMjohMCw4MjAzOiEwfSxmPXszMjohMCwzODohMCw0MzohMCw0NTohMCw0NzohMCwxNzM6ITAsMTgzOiEwLDgyMDM6ITAsODIwODohMCw4MjExOiEwfX0se31dLDQwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5iaW49bmV3IG8odCxlKSx0aGlzLmltYWdlcz17fSx0aGlzLmRhdGE9ITEsdGhpcy50ZXh0dXJlPTAsdGhpcy5maWx0ZXI9MCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmRpcnR5PSEwfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEsbyxzLGwsdSxjKXt2YXIgaCxmLGQ9biplK3IscD1zKmErbztpZihjKWZvcihwLT1hLGY9LTE7Zjw9dTtmKyssZD0oKGYrdSkldStuKSplK3IscCs9YSlmb3IoaD0tMTtoPD1sO2grKylpW3AraF09dFtkKyhoK2wpJWxdO2Vsc2UgZm9yKGY9MDtmPHU7ZisrLGQrPWUscCs9YSlmb3IoaD0wO2g8bDtoKyspaVtwK2hdPXRbZCtoXX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7dGhpcy5yZWN0PXQsdGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5zZGY9bix0aGlzLnBpeGVsUmF0aW89aX12YXIgbz10KCJzaGVsZi1wYWNrIikscz10KCIuLi91dGlsL2Jyb3dzZXIiKSxsPXQoIi4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmFsbG9jYXRlSW1hZ2U9ZnVuY3Rpb24odCxlKXt0Lz10aGlzLnBpeGVsUmF0aW8sZS89dGhpcy5waXhlbFJhdGlvO3ZhciByPXQrMisoNC0odCsyKSU0KSxuPWUrMisoNC0oZSsyKSU0KSxpPXRoaXMuYmluLnBhY2tPbmUocixuKTtyZXR1cm4gaXx8KGwud2Fybk9uY2UoIlNwcml0ZUF0bGFzIG91dCBvZiBzcGFjZS4iKSxudWxsKX0sbi5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmltYWdlc1t0XSlyZXR1cm4gdGhpcy5pbWFnZXNbdF07aWYoIXRoaXMuc3ByaXRlKXJldHVybiBudWxsO3ZhciByPXRoaXMuc3ByaXRlLmdldFNwcml0ZVBvc2l0aW9uKHQpO2lmKCFyLndpZHRofHwhci5oZWlnaHQpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5hbGxvY2F0ZUltYWdlKHIud2lkdGgsci5oZWlnaHQpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5ldyBhKG4sci53aWR0aC9yLnBpeGVsUmF0aW8sci5oZWlnaHQvci5waXhlbFJhdGlvLHIuc2RmLHIucGl4ZWxSYXRpby90aGlzLnBpeGVsUmF0aW8pO3JldHVybiB0aGlzLmltYWdlc1t0XT1pLHRoaXMuY29weShuLHIsZSksaX0sbi5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldEltYWdlKHQsZSksbj1yJiZyLnJlY3Q7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9ci53aWR0aCpyLnBpeGVsUmF0aW8sYT1yLmhlaWdodCpyLnBpeGVsUmF0aW87cmV0dXJue3NpemU6W3Iud2lkdGgsci5oZWlnaHRdLAp0bDpbKG4ueCsxKS90aGlzLndpZHRoLChuLnkrMSkvdGhpcy5oZWlnaHRdLGJyOlsobi54KzEraSkvdGhpcy53aWR0aCwobi55KzErYSkvdGhpcy5oZWlnaHRdfX0sbi5wcm90b3R5cGUuYWxsb2NhdGU9ZnVuY3Rpb24oKXtpZighdGhpcy5kYXRhKXt2YXIgdD1NYXRoLmZsb29yKHRoaXMud2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlPU1hdGguZmxvb3IodGhpcy5oZWlnaHQqdGhpcy5waXhlbFJhdGlvKTt0aGlzLmRhdGE9bmV3IFVpbnQzMkFycmF5KHQqZSk7Zm9yKHZhciByPTA7cjx0aGlzLmRhdGEubGVuZ3RoO3IrKyl0aGlzLmRhdGFbcl09MH19LG4ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuc3ByaXRlLmltZy5kYXRhKXt2YXIgbj1uZXcgVWludDMyQXJyYXkodGhpcy5zcHJpdGUuaW1nLmRhdGEuYnVmZmVyKTt0aGlzLmFsbG9jYXRlKCk7dmFyIGE9dGhpcy5kYXRhO2kobix0aGlzLnNwcml0ZS5pbWcud2lkdGgsZS54LGUueSxhLHRoaXMud2lkdGgqdGhpcy5waXhlbFJhdGlvLCh0LngrMSkqdGhpcy5waXhlbFJhdGlvLCh0LnkrMSkqdGhpcy5waXhlbFJhdGlvLGUud2lkdGgsZS5oZWlnaHQsciksdGhpcy5kaXJ0eT0hMH19LG4ucHJvdG90eXBlLnNldFNwcml0ZT1mdW5jdGlvbih0KXt0JiYodGhpcy5waXhlbFJhdGlvPXMuZGV2aWNlUGl4ZWxSYXRpbz4xPzI6MSx0aGlzLmNhbnZhcyYmKHRoaXMuY2FudmFzLndpZHRoPXRoaXMud2lkdGgqdGhpcy5waXhlbFJhdGlvLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodCp0aGlzLnBpeGVsUmF0aW8pKSx0aGlzLnNwcml0ZT10fSxuLnByb3RvdHlwZS5hZGRJY29ucz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMuZ2V0SW1hZ2UodFtyXSk7ZShudWxsLHRoaXMuaW1hZ2VzKX0sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUpe3ZhciByPSExO3RoaXMudGV4dHVyZT90LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpOih0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSxyPSEwKTt2YXIgbj1lP3QuTElORUFSOnQuTkVBUkVTVDtuIT09dGhpcy5maWx0ZXImJih0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLG4pLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsbiksdGhpcy5maWx0ZXI9biksdGhpcy5kaXJ0eSYmKHRoaXMuYWxsb2NhdGUoKSxyP3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsdGhpcy53aWR0aCp0aGlzLnBpeGVsUmF0aW8sdGhpcy5oZWlnaHQqdGhpcy5waXhlbFJhdGlvLDAsdC5SR0JBLHQuVU5TSUdORURfQllURSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLDAsMCx0aGlzLndpZHRoKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmhlaWdodCp0aGlzLnBpeGVsUmF0aW8sdC5SR0JBLHQuVU5TSUdORURfQllURSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKSksdGhpcy5kaXJ0eT0hMSl9fSx7Ii4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL3V0aWwiOjQ0MCwic2hlbGYtcGFjayI6NTEyfV0sNDAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IiksaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoInBvaW50LWdlb21ldHJ5Iiksbz1lLmV4cG9ydHM9bmV3IG4oe21lbWJlcnM6W3t0eXBlOiJVaW50MTYiLG5hbWU6InRleHRCb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidGV4dEJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvbkJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uQm94RW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJnbHlwaFF1YWRTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiZ2x5cGhRdWFkRW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uUXVhZFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uUXVhZEVuZEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJJbnQ4IixuYW1lOiJpbmRleCJ9XX0pO2kuZXh0ZW5kQWxsKG8ucHJvdG90eXBlLlN0cnVjdFR5cGUucHJvdG90eXBlLHtnZXQgYW5jaG9yUG9pbnQoKXtyZXR1cm4gbmV3IGEodGhpcy5hbmNob3JQb2ludFgsdGhpcy5hbmNob3JQb2ludFkpfX0pfSx7Ii4uL3V0aWwvc3RydWN0X2FycmF5Ijo0MzgsIi4uL3V0aWwvdXRpbCI6NDQwLCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sNDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IiksaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoInBvaW50LWdlb21ldHJ5Iiksbz10KCIuL3F1YWRzIikuU3ltYm9sUXVhZCxzPWUuZXhwb3J0cz1uZXcgbih7bWVtYmVyczpbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJ0bFgifSx7dHlwZToiRmxvYXQzMiIsbmFtZToidGxZIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6InRyWCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJ0clkifSx7dHlwZToiRmxvYXQzMiIsbmFtZToiYmxYIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImJsWSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJiclgifSx7dHlwZToiRmxvYXQzMiIsbmFtZToiYnJZIn0se3R5cGU6IkludDE2IixuYW1lOiJ0ZXhIIn0se3R5cGU6IkludDE2IixuYW1lOiJ0ZXhXIn0se3R5cGU6IkludDE2IixuYW1lOiJ0ZXhYIn0se3R5cGU6IkludDE2IixuYW1lOiJ0ZXhZIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImFuY2hvckFuZ2xlIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImdseXBoQW5nbGUifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibWF4U2NhbGUifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibWluU2NhbGUifV19KTtpLmV4dGVuZEFsbChzLnByb3RvdHlwZS5TdHJ1Y3RUeXBlLnByb3RvdHlwZSx7Z2V0IGFuY2hvclBvaW50KCl7cmV0dXJuIG5ldyBhKHRoaXMuYW5jaG9yUG9pbnRYLHRoaXMuYW5jaG9yUG9pbnRZKX0sZ2V0IFN5bWJvbFF1YWQoKXtyZXR1cm4gbmV3IG8odGhpcy5hbmNob3JQb2ludCxuZXcgYSh0aGlzLnRsWCx0aGlzLnRsWSksbmV3IGEodGhpcy50clgsdGhpcy50clkpLG5ldyBhKHRoaXMuYmxYLHRoaXMuYmxZKSxuZXcgYSh0aGlzLmJyWCx0aGlzLmJyWSkse3g6dGhpcy50ZXhYLHk6dGhpcy50ZXhZLGg6dGhpcy50ZXhILHc6dGhpcy50ZXhXLGhlaWdodDp0aGlzLnRleEgsd2lkdGg6dGhpcy50ZXhXfSx0aGlzLmFuY2hvckFuZ2xlLHRoaXMuZ2x5cGhBbmdsZSx0aGlzLm1pblNjYWxlLHRoaXMubWF4U2NhbGUpfX0pfSx7Ii4uL3V0aWwvc3RydWN0X2FycmF5Ijo0MzgsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL3F1YWRzIjozOTksInBvaW50LWdlb21ldHJ5Ijo0ODJ9XSw0MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC9kb20iKSxpPXQoInBvaW50LWdlb21ldHJ5IiksYT17c2Nyb2xsWm9vbTp0KCIuL2hhbmRsZXIvc2Nyb2xsX3pvb20iKSxib3hab29tOnQoIi4vaGFuZGxlci9ib3hfem9vbSIpLGRyYWdSb3RhdGU6dCgiLi9oYW5kbGVyL2RyYWdfcm90YXRlIiksZHJhZ1Bhbjp0KCIuL2hhbmRsZXIvZHJhZ19wYW4iKSxrZXlib2FyZDp0KCIuL2hhbmRsZXIva2V5Ym9hcmQiKSxkb3VibGVDbGlja1pvb206dCgiLi9oYW5kbGVyL2RibGNsaWNrX3pvb20iKSx0b3VjaFpvb21Sb3RhdGU6dCgiLi9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlIil9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7ZygibW91c2VvdXQiLHQpfWZ1bmN0aW9uIG8oZSl7dC5zdG9wKCksXz1uLm1vdXNlUG9zKGIsZSksZygibW91c2Vkb3duIixlKX1mdW5jdGlvbiBzKGUpe3ZhciByPXQuZHJhZ1JvdGF0ZSYmdC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7eCYmIXImJmcoImNvbnRleHRtZW51Iix4KSx4PW51bGwsZygibW91c2V1cCIsZSl9ZnVuY3Rpb24gbChlKXtpZighKHQuZHJhZ1BhbiYmdC5kcmFnUGFuLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZSYmdC5kcmFnUm90YXRlLmlzQWN0aXZlKCkpKXtmb3IodmFyIHI9ZS50b0VsZW1lbnR8fGUudGFyZ2V0O3ImJnIhPT1iOylyPXIucGFyZW50Tm9kZTtyPT09YiYmZygibW91c2Vtb3ZlIixlKX19ZnVuY3Rpb24gdShlKXt0LnN0b3AoKSx5KCJ0b3VjaHN0YXJ0IixlKSwhZS50b3VjaGVzfHxlLnRvdWNoZXMubGVuZ3RoPjF8fCh3PyhjbGVhclRpbWVvdXQodyksdz1udWxsLGcoImRibGNsaWNrIixlKSk6dz1zZXRUaW1lb3V0KGQsMzAwKSl9ZnVuY3Rpb24gYyh0KXt5KCJ0b3VjaG1vdmUiLHQpfWZ1bmN0aW9uIGgodCl7eSgidG91Y2hlbmQiLHQpfWZ1bmN0aW9uIGYodCl7eSgidG91Y2hjYW5jZWwiLHQpfWZ1bmN0aW9uIGQoKXt3PW51bGx9ZnVuY3Rpb24gcCh0KXtuLm1vdXNlUG9zKGIsdCkuZXF1YWxzKF8pJiZnKCJjbGljayIsdCl9ZnVuY3Rpb24gbSh0KXtnKCJkYmxjbGljayIsdCksdC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIHYodCl7eD10LHQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBnKGUscil7dmFyIGk9bi5tb3VzZVBvcyhiLHIpO3JldHVybiB0LmZpcmUoZSx7bG5nTGF0OnQudW5wcm9qZWN0KGkpLHBvaW50Omksb3JpZ2luYWxFdmVudDpyfSl9ZnVuY3Rpb24geShlLHIpe3ZhciBhPW4udG91Y2hQb3MoYixyKSxvPWEucmVkdWNlKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmFkZChlLmRpdihuLmxlbmd0aCkpfSxuZXcgaSgwLDApKTtyZXR1cm4gdC5maXJlKGUse2xuZ0xhdDp0LnVucHJvamVjdChvKSxwb2ludDpvLGxuZ0xhdHM6YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQudW5wcm9qZWN0KGUpfSx0aGlzKSxwb2ludHM6YSxvcmlnaW5hbEV2ZW50OnJ9KX12YXIgYj10LmdldENhbnZhc0NvbnRhaW5lcigpLHg9bnVsbCxfPW51bGwsdz1udWxsO2Zvcih2YXIgTSBpbiBhKXRbTV09bmV3IGFbTV0odCxlKSxlLmludGVyYWN0aXZlJiZlW01dJiZ0W01dLmVuYWJsZSgpO2IuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHIsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixvLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHMsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixsLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHUsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGgsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixjLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIixmLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixwLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIixtLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix2LCExKX19LHsiLi4vdXRpbC9kb20iOjQyNiwiLi9oYW5kbGVyL2JveF96b29tIjo0MTEsIi4vaGFuZGxlci9kYmxjbGlja196b29tIjo0MTIsIi4vaGFuZGxlci9kcmFnX3BhbiI6NDEzLCIuL2hhbmRsZXIvZHJhZ19yb3RhdGUiOjQxNCwiLi9oYW5kbGVyL2tleWJvYXJkIjo0MTUsIi4vaGFuZGxlci9zY3JvbGxfem9vbSI6NDE2LCIuL2hhbmRsZXIvdG91Y2hfem9vbV9yb3RhdGUiOjQxNywicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDQwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL3V0aWwiKSxpPXQoIi4uL3V0aWwvaW50ZXJwb2xhdGUiKSxhPXQoIi4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vZ2VvL2xuZ19sYXQiKSxzPXQoIi4uL2dlby9sbmdfbGF0X2JvdW5kcyIpLGw9dCgicG9pbnQtZ2VvbWV0cnkiKSx1PWUuZXhwb3J0cz1mdW5jdGlvbigpe307bi5leHRlbmQodS5wcm90b3R5cGUse2dldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5jZW50ZXJ9LHNldENlbnRlcjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7Y2VudGVyOnR9LGUpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsbi5leHRlbmQoe29mZnNldDpsLmNvbnZlcnQodCkubXVsdCgtMSl9LGUpLHIpLHRoaXN9LHBhblRvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5lYXNlVG8obi5leHRlbmQoe2NlbnRlcjp0fSxlKSxyKX0sZ2V0Wm9vbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxzZXRab29tOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHpvb21UbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZWFzZVRvKG4uZXh0ZW5kKHt6b29tOnR9LGUpLHIpfSx6b29tSW46ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHpvb21PdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LGdldEJlYXJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sc2V0QmVhcmluZzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyb3RhdGVUbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZWFzZVRvKG4uZXh0ZW5kKHtiZWFyaW5nOnR9LGUpLHIpfSxyZXNldE5vcnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucm90YXRlVG8oMCxuLmV4dGVuZCh7ZHVyYXRpb246MWUzfSx0KSxlKSx0aGlzfSxzbmFwVG9Ob3J0aDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSk8dGhpcy5fYmVhcmluZ1NuYXA/dGhpcy5yZXNldE5vcnRoKHQsZSk6dGhpc30sZ2V0UGl0Y2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2h9LHNldFBpdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtwaXRjaDp0fSxlKSx0aGlzfSxmaXRCb3VuZHM6ZnVuY3Rpb24odCxlLHIpe2U9bi5leHRlbmQoe3BhZGRpbmc6MCxvZmZzZXQ6WzAsMF0sbWF4Wm9vbToxLzB9LGUpLHQ9cy5jb252ZXJ0KHQpO3ZhciBpPWwuY29udmVydChlLm9mZnNldCksYT10aGlzLnRyYW5zZm9ybSxvPWEucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpKSx1PWEucHJvamVjdCh0LmdldFNvdXRoRWFzdCgpKSxjPXUuc3ViKG8pLGg9KGEud2lkdGgtMiplLnBhZGRpbmctMipNYXRoLmFicyhpLngpKS9jLngsZj0oYS5oZWlnaHQtMiplLnBhZGRpbmctMipNYXRoLmFicyhpLnkpKS9jLnk7cmV0dXJuIGUuY2VudGVyPWEudW5wcm9qZWN0KG8uYWRkKHUpLmRpdigyKSksZS56b29tPU1hdGgubWluKGEuc2NhbGVab29tKGEuc2NhbGUqTWF0aC5taW4oaCxmKSksZS5tYXhab29tKSxlLmJlYXJpbmc9MCxlLmxpbmVhcj90aGlzLmVhc2VUbyhlLHIpOnRoaXMuZmx5VG8oZSxyKX0sanVtcFRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9wKCk7dmFyIHI9dGhpcy50cmFuc2Zvcm0sbj0hMSxpPSExLGE9ITE7cmV0dXJuInpvb20iaW4gdCYmci56b29tIT09K3Quem9vbSYmKG49ITAsci56b29tPSt0Lnpvb20pLCJjZW50ZXIiaW4gdCYmKHIuY2VudGVyPW8uY29udmVydCh0LmNlbnRlcikpLCJiZWFyaW5nImluIHQmJnIuYmVhcmluZyE9PSt0LmJlYXJpbmcmJihpPSEwLHIuYmVhcmluZz0rdC5iZWFyaW5nKSwicGl0Y2giaW4gdCYmci5waXRjaCE9PSt0LnBpdGNoJiYoYT0hMCxyLnBpdGNoPSt0LnBpdGNoKSx0aGlzLmZpcmUoIm1vdmVzdGFydCIsZSkuZmlyZSgibW92ZSIsZSksbiYmdGhpcy5maXJlKCJ6b29tc3RhcnQiLGUpLmZpcmUoInpvb20iLGUpLmZpcmUoInpvb21lbmQiLGUpLGkmJnRoaXMuZmlyZSgicm90YXRlIixlKSxhJiZ0aGlzLmZpcmUoInBpdGNoIixlKSx0aGlzLmZpcmUoIm1vdmVlbmQiLGUpfSxlYXNlVG86ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3AoKSx0PW4uZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sZHVyYXRpb246NTAwLGVhc2luZzpuLmVhc2V9LHQpO3ZhciByLGEscz10aGlzLnRyYW5zZm9ybSx1PWwuY29udmVydCh0Lm9mZnNldCksYz10aGlzLmdldFpvb20oKSxoPXRoaXMuZ2V0QmVhcmluZygpLGY9dGhpcy5nZXRQaXRjaCgpLGQ9Inpvb20iaW4gdD8rdC56b29tOmMscD0iYmVhcmluZyJpbiB0P3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcodC5iZWFyaW5nLGgpOmgsbT0icGl0Y2giaW4gdD8rdC5waXRjaDpmOyJjZW50ZXIiaW4gdD8ocj1vLmNvbnZlcnQodC5jZW50ZXIpLGE9cy5jZW50ZXJQb2ludC5hZGQodSkpOiJhcm91bmQiaW4gdD8ocj1vLmNvbnZlcnQodC5hcm91bmQpLGE9cy5sb2NhdGlvblBvaW50KHIpKTooYT1zLmNlbnRlclBvaW50LmFkZCh1KSxyPXMucG9pbnRMb2NhdGlvbihhKSk7dmFyIHY9cy5sb2NhdGlvblBvaW50KHIpO3JldHVybiExPT09dC5hbmltYXRlJiYodC5kdXJhdGlvbj0wKSx0aGlzLnpvb21pbmc9ZCE9PWMsdGhpcy5yb3RhdGluZz1oIT09cCx0aGlzLnBpdGNoaW5nPW0hPT1mLHQubm9Nb3ZlU3RhcnR8fHRoaXMuZmlyZSgibW92ZXN0YXJ0IixlKSx0aGlzLnpvb21pbmcmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IixlKSxjbGVhclRpbWVvdXQodGhpcy5fb25FYXNlRW5kKSx0aGlzLl9lYXNlKGZ1bmN0aW9uKHQpe3RoaXMuem9vbWluZyYmKHMuem9vbT1pKGMsZCx0KSksdGhpcy5yb3RhdGluZyYmKHMuYmVhcmluZz1pKGgscCx0KSksdGhpcy5waXRjaGluZyYmKHMucGl0Y2g9aShmLG0sdCkpLHMuc2V0TG9jYXRpb25BdFBvaW50KHIsdi5hZGQoYS5zdWIodikuX211bHQodCkpKSx0aGlzLmZpcmUoIm1vdmUiLGUpLHRoaXMuem9vbWluZyYmdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLnJvdGF0aW5nJiZ0aGlzLmZpcmUoInJvdGF0ZSIsZSksdGhpcy5waXRjaGluZyYmdGhpcy5maXJlKCJwaXRjaCIsZSl9LGZ1bmN0aW9uKCl7dC5kZWxheUVuZEV2ZW50cz90aGlzLl9vbkVhc2VFbmQ9c2V0VGltZW91dCh0aGlzLl9lYXNlVG9FbmQuYmluZCh0aGlzLGUpLHQuZGVsYXlFbmRFdmVudHMpOnRoaXMuX2Vhc2VUb0VuZChlKX0uYmluZCh0aGlzKSx0KSx0aGlzfSxfZWFzZVRvRW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuem9vbWluZzt0aGlzLnpvb21pbmc9ITEsdGhpcy5yb3RhdGluZz0hMSx0aGlzLnBpdGNoaW5nPSExLGUmJnRoaXMuZmlyZSgiem9vbWVuZCIsdCksdGhpcy5maXJlKCJtb3ZlZW5kIix0KX0sZmx5VG86ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPShBKkEtayprKyh0Py0xOjEpKkwqTCpUKlQpLygyKih0P0E6aykqTCpUKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBhKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGEodCkvcyh0KX10aGlzLnN0b3AoKSx0PW4uZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sc3BlZWQ6MS4yLGN1cnZlOjEuNDIsZWFzaW5nOm4uZWFzZX0sdCk7dmFyIGM9dGhpcy50cmFuc2Zvcm0saD1sLmNvbnZlcnQodC5vZmZzZXQpLGY9dGhpcy5nZXRab29tKCksZD10aGlzLmdldEJlYXJpbmcoKSxwPXRoaXMuZ2V0UGl0Y2goKSxtPSJjZW50ZXIiaW4gdD9vLmNvbnZlcnQodC5jZW50ZXIpOnRoaXMuZ2V0Q2VudGVyKCksdj0iem9vbSJpbiB0Pyt0Lnpvb206ZixnPSJiZWFyaW5nImluIHQ/dGhpcy5fbm9ybWFsaXplQmVhcmluZyh0LmJlYXJpbmcsZCk6ZCx5PSJwaXRjaCJpbiB0Pyt0LnBpdGNoOnA7TWF0aC5hYnMoYy5jZW50ZXIubG5nKStNYXRoLmFicyhtLmxuZyk+MTgwJiYoYy5jZW50ZXIubG5nPjAmJm0ubG5nPDA/bS5sbmcrPTM2MDpjLmNlbnRlci5sbmc8MCYmbS5sbmc+MCYmKG0ubG5nLT0zNjApKTt2YXIgYj1jLnpvb21TY2FsZSh2LWYpLHg9Yy5wb2ludCxfPSJjZW50ZXIiaW4gdD9jLnByb2plY3QobSkuc3ViKGguZGl2KGIpKTp4LHc9Yy53b3JsZFNpemUsTT10LmN1cnZlLGs9TWF0aC5tYXgoYy53aWR0aCxjLmhlaWdodCksQT1rL2IsVD1fLnN1Yih4KS5tYWcoKTtpZigibWluWm9vbSJpbiB0KXt2YXIgUz1uLmNsYW1wKE1hdGgubWluKHQubWluWm9vbSxmLHYpLGMubWluWm9vbSxjLm1heFpvb20pLEU9ay9jLnpvb21TY2FsZShTLWYpO009TWF0aC5zcXJ0KEUvVCoyKX12YXIgTD1NKk0sQz1yKDApLHo9ZnVuY3Rpb24odCl7cmV0dXJuIHMoQykvcyhDK00qdCl9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIGsqKChzKEMpKnUoQytNKnQpLWEoQykpL0wpL1R9LEQ9KHIoMSktQykvTTtpZihNYXRoLmFicyhUKTwxZS02KXtpZihNYXRoLmFicyhrLUEpPDFlLTYpcmV0dXJuIHRoaXMuZWFzZVRvKHQpO3ZhciBQPUE8az8tMToxO0Q9TWF0aC5hYnMoTWF0aC5sb2coQS9rKSkvTSxJPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHo9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKFAqTSp0KX19aWYoImR1cmF0aW9uImluIHQpdC5kdXJhdGlvbj0rdC5kdXJhdGlvbjtlbHNle3ZhciBPPSJzY3JlZW5TcGVlZCJpbiB0Pyt0LnNjcmVlblNwZWVkL006K3Quc3BlZWQ7dC5kdXJhdGlvbj0xZTMqRC9PfXJldHVybiB0aGlzLnpvb21pbmc9ITAsZCE9PWcmJih0aGlzLnJvdGF0aW5nPSEwKSxwIT09eSYmKHRoaXMucGl0Y2hpbmc9ITApLHRoaXMuZmlyZSgibW92ZXN0YXJ0IixlKSx0aGlzLmZpcmUoInpvb21zdGFydCIsZSksdGhpcy5fZWFzZShmdW5jdGlvbih0KXt2YXIgcj10KkQsbj1JKHIpO2Muem9vbT1mK2Muc2NhbGVab29tKDEveihyKSksYy5jZW50ZXI9Yy51bnByb2plY3QoeC5hZGQoXy5zdWIoeCkubXVsdChuKSksdyksdGhpcy5yb3RhdGluZyYmKGMuYmVhcmluZz1pKGQsZyx0KSksdGhpcy5waXRjaGluZyYmKGMucGl0Y2g9aShwLHksdCkpLHRoaXMuZmlyZSgibW92ZSIsZSksdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLnJvdGF0aW5nJiZ0aGlzLmZpcmUoInJvdGF0ZSIsZSksdGhpcy5waXRjaGluZyYmdGhpcy5maXJlKCJwaXRjaCIsZSl9LGZ1bmN0aW9uKCl7dGhpcy56b29taW5nPSExLHRoaXMucm90YXRpbmc9ITEsdGhpcy5waXRjaGluZz0hMSx0aGlzLmZpcmUoInpvb21lbmQiLGUpLHRoaXMuZmlyZSgibW92ZWVuZCIsZSl9LHQpLHRoaXN9LGlzRWFzaW5nOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hYm9ydEZufSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fib3J0Rm4mJih0aGlzLl9hYm9ydEZuKCksdGhpcy5fZmluaXNoRWFzZSgpKSx0aGlzfSxfZWFzZTpmdW5jdGlvbih0LGUscil7dGhpcy5fZmluaXNoRm49ZSx0aGlzLl9hYm9ydEZuPWEudGltZWQoZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsci5lYXNpbmcoZSkpLDE9PT1lJiZ0aGlzLl9maW5pc2hFYXNlKCl9LCExPT09ci5hbmltYXRlPzA6ci5kdXJhdGlvbix0aGlzKX0sX2ZpbmlzaEVhc2U6ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fYWJvcnRGbjt2YXIgdD10aGlzLl9maW5pc2hGbjtkZWxldGUgdGhpcy5fZmluaXNoRm4sdC5jYWxsKHRoaXMpfSxfbm9ybWFsaXplQmVhcmluZzpmdW5jdGlvbih0LGUpe3Q9bi53cmFwKHQsLTE4MCwxODApO3ZhciByPU1hdGguYWJzKHQtZSk7cmV0dXJuIE1hdGguYWJzKHQtMzYwLWUpPHImJih0LT0zNjApLE1hdGguYWJzKHQrMzYwLWUpPHImJih0Kz0zNjApLHR9LF91cGRhdGVFYXNpbmc6ZnVuY3Rpb24odCxlLHIpe3ZhciBpO2lmKHRoaXMuZWFzZSl7dmFyIGE9dGhpcy5lYXNlLG89KERhdGUubm93KCktYS5zdGFydCkvYS5kdXJhdGlvbixzPWEuZWFzaW5nKG8rLjAxKS1hLmVhc2luZyhvKSxsPS4yNy9NYXRoLnNxcnQocypzKzFlLTQpKi4wMSx1PU1hdGguc3FydCguMDcyOS1sKmwpO2k9bi5iZXppZXIobCx1LC4yNSwxKX1lbHNlIGk9cj9uLmJlemllci5hcHBseShuLHIpOm4uZWFzZTtyZXR1cm4gdGhpcy5lYXNlPXtzdGFydDoobmV3IERhdGUpLmdldFRpbWUoKSx0bzpNYXRoLnBvdygyLGUpLGR1cmF0aW9uOnQsZWFzaW5nOml9LGl9fSl9LHsiLi4vZ2VvL2xuZ19sYXQiOjMzNywiLi4vZ2VvL2xuZ19sYXRfYm91bmRzIjozMzgsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL2ludGVycG9sYXRlIjo0MzQsIi4uL3V0aWwvdXRpbCI6NDQwLCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sNDA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9dmFyIGk9dCgiLi9jb250cm9sIiksYT10KCIuLi8uLi91dGlsL2RvbSIpLG89dCgiLi4vLi4vdXRpbC91dGlsIik7ZS5leHBvcnRzPW4sbi5jcmVhdGVBdHRyaWJ1dGlvblN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXTtuLmF0dHJpYnV0aW9uJiZlLmluZGV4T2Yobi5hdHRyaWJ1dGlvbik8MCYmZS5wdXNoKG4uYXR0cmlidXRpb24pfXJldHVybiBlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSxlPWUuZmlsdGVyKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPXIrMTtuPGUubGVuZ3RoO24rKylpZihlW25dLmluZGV4T2YodCk+PTApcmV0dXJuITE7cmV0dXJuITB9KSxlLmpvaW4oIiB8ICIpfSxuLnByb3RvdHlwZT1vLmluaGVyaXQoaSx7b3B0aW9uczp7cG9zaXRpb246ImJvdHRvbS1yaWdodCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcj1hLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybC1hdHRyaWIiLHQuZ2V0Q29udGFpbmVyKCkpO3JldHVybiB0aGlzLl91cGRhdGUoKSx0Lm9uKCJzb3VyY2UubG9hZCIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcykpLHQub24oInNvdXJjZS5jaGFuZ2UiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpKSx0Lm9uKCJzb3VyY2UucmVtb3ZlIix0aGlzLl91cGRhdGUuYmluZCh0aGlzKSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmsuYmluZCh0aGlzKSksZX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5zdHlsZSYmKHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9bi5jcmVhdGVBdHRyaWJ1dGlvblN0cmluZyh0aGlzLl9tYXAuc3R5bGUuc291cmNlcykpLHRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtYXBib3gtaW1wcm92ZS1tYXAiKVswXSx0aGlzLl91cGRhdGVFZGl0TGluaygpfSxfdXBkYXRlRWRpdExpbms6ZnVuY3Rpb24oKXtpZih0aGlzLl9lZGl0TGluayl7dmFyIHQ9dGhpcy5fbWFwLmdldENlbnRlcigpO3RoaXMuX2VkaXRMaW5rLmhyZWY9Imh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwLWZlZWRiYWNrLyMvIit0LmxuZysiLyIrdC5sYXQrIi8iK01hdGgucm91bmQodGhpcy5fbWFwLmdldFpvb20oKSsxKX19fSl9LHsiLi4vLi4vdXRpbC9kb20iOjQyNiwiLi4vLi4vdXRpbC91dGlsIjo0NDAsIi4vY29udHJvbCI6NDA4fV0sNDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi8uLi91dGlsL2V2ZW50ZWQiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17YWRkVG86ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQ7dmFyIGU9dGhpcy5fY29udGFpbmVyPXRoaXMub25BZGQodCk7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMucG9zaXRpb24pe3ZhciByPXRoaXMub3B0aW9ucy5wb3NpdGlvbixuPXQuX2NvbnRyb2xDb3JuZXJzW3JdO2UuY2xhc3NOYW1lKz0iIG1hcGJveGdsLWN0cmwiLC0xIT09ci5pbmRleE9mKCJib3R0b20iKT9uLmluc2VydEJlZm9yZShlLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChlKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vblJlbW92ZSYmdGhpcy5vblJlbW92ZSh0aGlzLl9tYXApLHRoaXMuX21hcD1udWxsLHRoaXN9fSxpLmV4dGVuZChuLnByb3RvdHlwZSxhKX0seyIuLi8uLi91dGlsL2V2ZW50ZWQiOjQzMiwiLi4vLi4vdXRpbC91dGlsIjo0NDB9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtzLnNldE9wdGlvbnModGhpcyx0KX12YXIgaT10KCIuL2NvbnRyb2wiKSxhPXQoIi4uLy4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vLi4vdXRpbC9kb20iKSxzPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uO3ZhciBsPXtlbmFibGVIaWdoQWNjdXJhY3k6ITEsdGltZW91dDo2ZTN9O24ucHJvdG90eXBlPXMuaW5oZXJpdChpLHtvcHRpb25zOntwb3NpdGlvbjoidG9wLXJpZ2h0In0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29udGFpbmVyPW8uY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsLWdyb3VwIix0LmdldENvbnRhaW5lcigpKTtyZXR1cm4gYS5zdXBwb3J0c0dlb2xvY2F0aW9uPyh0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPW8uY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrR2VvbG9jYXRlLmJpbmQodGhpcykpLGUpOmV9LF9vbkNvbnRleHRNZW51OmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sX29uQ2xpY2tHZW9sb2NhdGU6ZnVuY3Rpb24oKXtuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMuX3N1Y2Nlc3MuYmluZCh0aGlzKSx0aGlzLl9lcnJvci5iaW5kKHRoaXMpLGwpLHRoaXMuX3RpbWVvdXRJZD1zZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaC5iaW5kKHRoaXMpLDFlNCl9LF9zdWNjZXNzOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC5qdW1wVG8oe2NlbnRlcjpbdC5jb29yZHMubG9uZ2l0dWRlLHQuY29vcmRzLmxhdGl0dWRlXSx6b29tOjE3LGJlYXJpbmc6MCxwaXRjaDowfSksdGhpcy5maXJlKCJnZW9sb2NhdGUiLHQpLHRoaXMuX2ZpbmlzaCgpfSxfZXJyb3I6ZnVuY3Rpb24odCl7dGhpcy5maXJlKCJlcnJvciIsdCksdGhpcy5fZmluaXNoKCl9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9fSl9LHsiLi4vLi4vdXRpbC9icm93c2VyIjo0MjQsIi4uLy4uL3V0aWwvZG9tIjo0MjYsIi4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuL2NvbnRyb2wiOjQwOH1dLDQxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3Muc2V0T3B0aW9ucyh0aGlzLHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KHQudHlwZSx7YnV0dG9uOjIsYnV0dG9uczoyLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxkZXRhaWw6dC5kZXRhaWwsdmlldzp0LnZpZXcsc2NyZWVuWDp0LnNjcmVlblgsc2NyZWVuWTp0LnNjcmVlblksY2xpZW50WDp0LmNsaWVudFgsY2xpZW50WTp0LmNsaWVudFksbW92ZW1lbnRYOnQubW92ZW1lbnRYLG1vdmVtZW50WTp0Lm1vdmVtZW50WSxjdHJsS2V5OnQuY3RybEtleSxzaGlmdEtleTp0LnNoaWZ0S2V5LGFsdEtleTp0LmFsdEtleSxtZXRhS2V5OnQubWV0YUtleX0pfXZhciBhPXQoIi4vY29udHJvbCIpLG89dCgiLi4vLi4vdXRpbC9kb20iKSxzPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXMuaW5oZXJpdChhLHtvcHRpb25zOntwb3NpdGlvbjoidG9wLXJpZ2h0In0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGU9Im1hcGJveGdsLWN0cmwiLHI9dGhpcy5fY29udGFpbmVyPW8uY3JlYXRlKCJkaXYiLGUrIi1ncm91cCIsdC5nZXRDb250YWluZXIoKSk7cmV0dXJuIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fb25Db250ZXh0TWVudS5iaW5kKHRoaXMpKSx0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKGUrIi1pY29uICIrZSsiLXpvb20taW4iLHQuem9vbUluLmJpbmQodCkpLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKGUrIi1pY29uICIrZSsiLXpvb20tb3V0Iix0Lnpvb21PdXQuYmluZCh0KSksdGhpcy5fY29tcGFzcz10aGlzLl9jcmVhdGVCdXR0b24oZSsiLWljb24gIitlKyItY29tcGFzcyIsdC5yZXNldE5vcnRoLmJpbmQodCkpLHRoaXMuX2NvbXBhc3NBcnJvdz1vLmNyZWF0ZSgiZGl2IiwiYXJyb3ciLHRoaXMuX2NvbXBhc3MpLHRoaXMuX2NvbXBhc3MuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbkNvbXBhc3NEb3duLmJpbmQodGhpcykpLHRoaXMuX29uQ29tcGFzc01vdmU9dGhpcy5fb25Db21wYXNzTW92ZS5iaW5kKHRoaXMpLHRoaXMuX29uQ29tcGFzc1VwPXRoaXMuX29uQ29tcGFzc1VwLmJpbmQodGhpcyksdC5vbigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cuYmluZCh0aGlzKSksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5fZWw9dC5nZXRDYW52YXNDb250YWluZXIoKSxyfSxfb25Db250ZXh0TWVudTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9LF9vbkNvbXBhc3NEb3duOmZ1bmN0aW9uKHQpezA9PT10LmJ1dHRvbiYmKG8uZGlzYWJsZURyYWcoKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uQ29tcGFzc01vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uQ29tcGFzc1VwKSx0aGlzLl9lbC5kaXNwYXRjaEV2ZW50KGkodCkpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfSxfb25Db21wYXNzTW92ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJih0aGlzLl9lbC5kaXNwYXRjaEV2ZW50KGkodCkpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfSxfb25Db21wYXNzVXA6ZnVuY3Rpb24odCl7MD09PXQuYnV0dG9uJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbkNvbXBhc3NNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbkNvbXBhc3NVcCksby5lbmFibGVEcmFnKCksdGhpcy5fZWwuZGlzcGF0Y2hFdmVudChpKHQpKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX2NyZWF0ZUJ1dHRvbjpmdW5jdGlvbih0LGUpe3ZhciByPW8uY3JlYXRlKCJidXR0b24iLHQsdGhpcy5fY29udGFpbmVyKTtyZXR1cm4gci50eXBlPSJidXR0b24iLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSkscn0sX3JvdGF0ZUNvbXBhc3NBcnJvdzpmdW5jdGlvbigpe3ZhciB0PSJyb3RhdGUoIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrImRlZykiO3RoaXMuX2NvbXBhc3NBcnJvdy5zdHlsZS50cmFuc2Zvcm09dH19KX0seyIuLi8uLi91dGlsL2RvbSI6NDI2LCIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi9jb250cm9sIjo0MDh9XSw0MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj10LmdldENvbnRhaW5lcigpLG8uYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi9nZW8vbG5nX2xhdF9ib3VuZHMiKSxvPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxfYWN0aXZlOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLCExKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe3Quc2hpZnRLZXkmJjA9PT10LmJ1dHRvbiYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLCExKSxpLmRpc2FibGVEcmFnKCksdGhpcy5fc3RhcnRQb3M9aS5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl9hY3RpdmU9ITApfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhcnRQb3Mscj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpO3RoaXMuX2JveHx8KHRoaXMuX2JveD1pLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtYm94em9vbSIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tc3RhcnQiLHQpKTt2YXIgbj1NYXRoLm1pbihlLngsci54KSxhPU1hdGgubWF4KGUueCxyLngpLG89TWF0aC5taW4oZS55LHIueSkscz1NYXRoLm1heChlLnksci55KTtpLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsInRyYW5zbGF0ZSgiK24rInB4LCIrbysicHgpIiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWEtbisicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9cy1vKyJweCJ9LF9vbk1vdXNlVXA6ZnVuY3Rpb24odCl7aWYoMD09PXQuYnV0dG9uKXt2YXIgZT10aGlzLl9zdGFydFBvcyxyPWkubW91c2VQb3ModGhpcy5fZWwsdCksbj1uZXcgYSh0aGlzLl9tYXAudW5wcm9qZWN0KGUpLHRoaXMuX21hcC51bnByb2plY3QocikpO3RoaXMuX2ZpbmlzaCgpLGUueD09PXIueCYmZS55PT09ci55P3RoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsdCk6dGhpcy5fbWFwLmZpdEJvdW5kcyhuLHtsaW5lYXI6ITB9KS5maXJlKCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDp0LGJveFpvb21Cb3VuZHM6bn0pfX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmKHRoaXMuX2ZpbmlzaCgpLHRoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsdCkpfSxfZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLCExKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fYm94JiYodGhpcy5fYm94LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCksaS5lbmFibGVEcmFnKCl9LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUodCx7b3JpZ2luYWxFdmVudDplfSl9fX0seyIuLi8uLi9nZW8vbG5nX2xhdF9ib3VuZHMiOjMzOCwiLi4vLi4vdXRpbC9kb20iOjQyNiwiLi4vLi4vdXRpbC91dGlsIjo0NDB9XSw0MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9vbkRibENsaWNrPXRoaXMuX29uRGJsQ2xpY2suYmluZCh0aGlzKX1lLmV4cG9ydHM9bixuLnByb3RvdHlwZT17X2VuYWJsZWQ6ITEsaXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9tYXAub24oImRibGNsaWNrIix0aGlzLl9vbkRibENsaWNrKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9tYXAub2ZmKCJkYmxjbGljayIsdGhpcy5fb25EYmxDbGljayksdGhpcy5fZW5hYmxlZD0hMSl9LF9vbkRibENsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC56b29tVG8odGhpcy5fbWFwLmdldFpvb20oKSsodC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5Py0xOjEpLHthcm91bmQ6dC5sbmdMYXR9LHQpfX19LHt9XSw0MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLGEuYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgbz1hLmJlemllcigwLDAsLjMsMSk7bi5wcm90b3R5cGU9e19lbmFibGVkOiExLF9hY3RpdmU6ITEsaXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LGlzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Eb3duKSx0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Eb3duKSx0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe3RoaXMuX2lnbm9yZUV2ZW50KHQpfHx0aGlzLmlzQWN0aXZlKCl8fCh0LnRvdWNoZXM/KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCkpOihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSksdGhpcy5fYWN0aXZlPSExLHRoaXMuX3N0YXJ0UG9zPXRoaXMuX3Bvcz1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLHRoaXMuX2luZXJ0aWE9W1tEYXRlLm5vdygpLHRoaXMuX3Bvc11dKX0sX29uTW92ZTpmdW5jdGlvbih0KXtpZighdGhpcy5faWdub3JlRXZlbnQodCkpe3RoaXMuaXNBY3RpdmUoKXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9maXJlRXZlbnQoImRyYWdzdGFydCIsdCksdGhpcy5fZmlyZUV2ZW50KCJtb3Zlc3RhcnQiLHQpKTt2YXIgZT1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLHI9dGhpcy5fbWFwO3Iuc3RvcCgpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbRGF0ZS5ub3coKSxlXSksci50cmFuc2Zvcm0uc2V0TG9jYXRpb25BdFBvaW50KHIudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odGhpcy5fcG9zKSxlKSx0aGlzLl9maXJlRXZlbnQoImRyYWciLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZSIsdCksdGhpcy5fcG9zPWUsdC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uVXA6ZnVuY3Rpb24odCl7aWYodGhpcy5pc0FjdGl2ZSgpKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgZT1mdW5jdGlvbigpe3RoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCl9LmJpbmQodGhpcykscj10aGlzLl9pbmVydGlhO2lmKHIubGVuZ3RoPDIpcmV0dXJuIHZvaWQgZSgpO3ZhciBuPXJbci5sZW5ndGgtMV0saT1yWzBdLGE9blsxXS5zdWIoaVsxXSkscz0oblswXS1pWzBdKS8xZTM7aWYoMD09PXN8fG5bMV0uZXF1YWxzKGlbMV0pKXJldHVybiB2b2lkIGUoKTt2YXIgbD1hLm11bHQoLjMvcyksdT1sLm1hZygpO3U+MTQwMCYmKHU9MTQwMCxsLl91bml0KCkuX211bHQodSkpO3ZhciBjPXUvNzUwLGg9bC5tdWx0KC1jLzIpO3RoaXMuX21hcC5wYW5CeShoLHtkdXJhdGlvbjoxZTMqYyxlYXNpbmc6byxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXt0aGlzLl9pZ25vcmVFdmVudCh0KXx8KHRoaXMuX29uVXAodCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCkpfSxfb25Ub3VjaEVuZDpmdW5jdGlvbih0KXt0aGlzLl9pZ25vcmVFdmVudCh0KXx8KHRoaXMuX29uVXAodCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kKSl9LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUodCx7b3JpZ2luYWxFdmVudDplfSl9LF9pZ25vcmVFdmVudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXA7aWYoZS5ib3hab29tJiZlLmJveFpvb20uaXNBY3RpdmUoKSlyZXR1cm4hMDtpZihlLmRyYWdSb3RhdGUmJmUuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKXJldHVybiEwO2lmKHQudG91Y2hlcylyZXR1cm4gdC50b3VjaGVzLmxlbmd0aD4xO2lmKHQuY3RybEtleSlyZXR1cm4hMDtyZXR1cm4ibW91c2Vtb3ZlIj09PXQudHlwZT8hMSZ0LmJ1dHRvbnM6MCE9PXQuYnV0dG9ufSxfZHJhaW5JbmVydGlhQnVmZmVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1EYXRlLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX19fSx7Ii4uLy4uL3V0aWwvZG9tIjo0MjYsIi4uLy4uL3V0aWwvdXRpbCI6NDQwfV0sNDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsby5iaW5kSGFuZGxlcnModGhpcyl9dmFyIGk9dCgiLi4vLi4vdXRpbC9kb20iKSxhPXQoInBvaW50LWdlb21ldHJ5Iiksbz10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgcz1vLmJlemllcigwLDAsLjI1LDEpO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxfYWN0aXZlOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uRG93biksdGhpcy5fZW5hYmxlZD0hMCl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9pZ25vcmVFdmVudCh0KSYmIXRoaXMuaXNBY3RpdmUoKSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uVXApLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9pbmVydGlhPVtbRGF0ZS5ub3coKSx0aGlzLl9tYXAuZ2V0QmVhcmluZygpXV0sdGhpcy5fc3RhcnRQb3M9dGhpcy5fcG9zPWkubW91c2VQb3ModGhpcy5fZWwsdCksdGhpcy5fY2VudGVyPXRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyUG9pbnQ7dmFyIGU9dGhpcy5fc3RhcnRQb3Muc3ViKHRoaXMuX2NlbnRlcik7ZS5tYWcoKTwyMDAmJih0aGlzLl9jZW50ZXI9dGhpcy5fc3RhcnRQb3MuYWRkKG5ldyBhKC0yMDAsMCkuX3JvdGF0ZShlLmFuZ2xlKCkpKSksdC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uTW92ZTpmdW5jdGlvbih0KXtpZighdGhpcy5faWdub3JlRXZlbnQodCkpe3RoaXMuaXNBY3RpdmUoKXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZXN0YXJ0Iix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsdCkpO3ZhciBlPXRoaXMuX21hcDtlLnN0b3AoKTt2YXIgcj10aGlzLl9wb3Msbj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLGE9dGhpcy5fY2VudGVyLG89ci5zdWIoYSkuYW5nbGVXaXRoKG4uc3ViKGEpKS9NYXRoLlBJKjE4MCxzPWUuZ2V0QmVhcmluZygpLW8sbD10aGlzLl9pbmVydGlhLHU9bFtsLmxlbmd0aC0xXTt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSxsLnB1c2goW0RhdGUubm93KCksZS5fbm9ybWFsaXplQmVhcmluZyhzLHVbMV0pXSksZS50cmFuc2Zvcm0uYmVhcmluZz1zLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmUiLHQpLHRoaXMuX3Bvcz1ufX0sX29uVXA6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2lnbm9yZUV2ZW50KHQpJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uVXApLHRoaXMuaXNBY3RpdmUoKSkpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZWVuZCIsdCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7dmFyIGU9dGhpcy5fbWFwLHI9ZS5nZXRCZWFyaW5nKCksbj10aGlzLl9pbmVydGlhLGk9ZnVuY3Rpb24oKXtNYXRoLmFicyhyKTx0aGlzLl9iZWFyaW5nU25hcD9lLnJlc2V0Tm9ydGgoe25vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSk6dGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIix0KX0uYmluZCh0aGlzKTtpZihuLmxlbmd0aDwyKXJldHVybiB2b2lkIGkoKTt2YXIgYT1uWzBdLG89bltuLmxlbmd0aC0xXSxsPW5bbi5sZW5ndGgtMl0sdT1lLl9ub3JtYWxpemVCZWFyaW5nKHIsbFsxXSksYz1vWzFdLWFbMV0saD1jPDA/LTE6MSxmPShvWzBdLWFbMF0pLzFlMztpZigwPT09Y3x8MD09PWYpcmV0dXJuIHZvaWQgaSgpO3ZhciBkPU1hdGguYWJzKGMqKC4yNS9mKSk7ZD4xODAmJihkPTE4MCk7dmFyIHA9ZC8xODA7dSs9aCpkKihwLzIpLE1hdGguYWJzKGUuX25vcm1hbGl6ZUJlYXJpbmcodSwwKSk8dGhpcy5fYmVhcmluZ1NuYXAmJih1PWUuX25vcm1hbGl6ZUJlYXJpbmcoMCx1KSksZS5yb3RhdGVUbyh1LHtkdXJhdGlvbjoxZTMqcCxlYXNpbmc6cyxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfX0sX2ZpcmVFdmVudDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9tYXAuZmlyZSh0LHtvcmlnaW5hbEV2ZW50OmV9KX0sX2lnbm9yZUV2ZW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtpZihlLmJveFpvb20mJmUuYm94Wm9vbS5pc0FjdGl2ZSgpKXJldHVybiEwO2lmKGUuZHJhZ1BhbiYmZS5kcmFnUGFuLmlzQWN0aXZlKCkpcmV0dXJuITA7aWYodC50b3VjaGVzKXJldHVybiB0LnRvdWNoZXMubGVuZ3RoPjE7dmFyIHI9dC5jdHJsS2V5PzE6MixuPXQuY3RybEtleT8wOjI7cmV0dXJuIm1vdXNlbW92ZSI9PT10LnR5cGU/dC5idXR0b25zJjA9PT1yOnQuYnV0dG9uIT09bn0sX2RyYWluSW5lcnRpYUJ1ZmZlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9pbmVydGlhLGU9RGF0ZS5ub3coKTt0Lmxlbmd0aD4wJiZlLXRbMF1bMF0+MTYwOyl0LnNoaWZ0KCl9fX0seyIuLi8uLi91dGlsL2RvbSI6NDI2LCIuLi8uLi91dGlsL3V0aWwiOjQ0MCwicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDQxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuX21hcD10LHRoaXMuX2VsPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fb25LZXlEb3duPXRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpfWUuZXhwb3J0cz1uO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksdGhpcy5fZW5hYmxlZD0hMCl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXtpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciBlPXRoaXMuX21hcCxyPXtvcmlnaW5hbEV2ZW50OnR9O2lmKCFlLmlzRWFzaW5nKCkpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA2MTpjYXNlIDEwNzpjYXNlIDE3MTpjYXNlIDE4NzplLnpvb21UbyhNYXRoLnJvdW5kKGUuZ2V0Wm9vbSgpKSsodC5zaGlmdEtleT8yOjEpLHIpO2JyZWFrO2Nhc2UgMTg5OmNhc2UgMTA5OmNhc2UgMTczOmUuem9vbVRvKE1hdGgucm91bmQoZS5nZXRab29tKCkpLSh0LnNoaWZ0S2V5PzI6MSkscik7YnJlYWs7Y2FzZSAzNzp0LnNoaWZ0S2V5P2UuZWFzZVRvKHtiZWFyaW5nOmUuZ2V0QmVhcmluZygpLTJ9LHIpOih0LnByZXZlbnREZWZhdWx0KCksZS5wYW5CeShbLTgwLDBdLHIpKTticmVhaztjYXNlIDM5OnQuc2hpZnRLZXk/ZS5lYXNlVG8oe2JlYXJpbmc6ZS5nZXRCZWFyaW5nKCkrMn0scik6KHQucHJldmVudERlZmF1bHQoKSxlLnBhbkJ5KFs4MCwwXSxyKSk7YnJlYWs7Y2FzZSAzODp0LnNoaWZ0S2V5P2UuZWFzZVRvKHtwaXRjaDplLmdldFBpdGNoKCkrNX0scik6KHQucHJldmVudERlZmF1bHQoKSxlLnBhbkJ5KFswLC04MF0scikpO2JyZWFrO2Nhc2UgNDA6dC5zaGlmdEtleT9lLmVhc2VUbyh7cGl0Y2g6TWF0aC5tYXgoZS5nZXRQaXRjaCgpLTUsMCl9LHIpOih0LnByZXZlbnREZWZhdWx0KCksZS5wYW5CeShbMCw4MF0scikpfX19fX0se31dLDQxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuX21hcD10LHRoaXMuX2VsPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksby5iaW5kSGFuZGxlcnModGhpcyl9dmFyIGk9dCgiLi4vLi4vdXRpbC9kb20iKSxhPXQoIi4uLy4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vLi4vdXRpbC91dGlsIik7ZS5leHBvcnRzPW47dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3I/bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOiIiLGw9LTEhPT1zLmluZGV4T2YoImZpcmVmb3giKSx1PS0xIT09cy5pbmRleE9mKCJzYWZhcmkiKSYmLTE9PT1zLmluZGV4T2YoImNocm9tIik7bi5wcm90b3R5cGU9e19lbmFibGVkOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwsITEpLHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWwsITEpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLl9lbmFibGVkPSExKX0sX29uV2hlZWw6ZnVuY3Rpb24odCl7dmFyIGU7IndoZWVsIj09PXQudHlwZT8oZT10LmRlbHRhWSxsJiZ0LmRlbHRhTW9kZT09PXdpbmRvdy5XaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTCYmKGUvPWEuZGV2aWNlUGl4ZWxSYXRpbyksdC5kZWx0YU1vZGU9PT13aW5kb3cuV2hlZWxFdmVudC5ET01fREVMVEFfTElORSYmKGUqPTQwKSk6Im1vdXNld2hlZWwiPT09dC50eXBlJiYoZT0tdC53aGVlbERlbHRhWSx1JiYoZS89MykpO3ZhciByPWEubm93KCksbj1yLSh0aGlzLl90aW1lfHwwKTt0aGlzLl9wb3M9aS5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl90aW1lPXIsMCE9PWUmJmUlNC4wMDAyNDQxNDA2MjU9PTA/KHRoaXMuX3R5cGU9IndoZWVsIixlPU1hdGguZmxvb3IoZS80KSk6MCE9PWUmJk1hdGguYWJzKGUpPDQ/dGhpcy5fdHlwZT0idHJhY2twYWQiOm4+NDAwPyh0aGlzLl90eXBlPW51bGwsdGhpcy5fbGFzdFZhbHVlPWUsdGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX29uVGltZW91dCw0MCkpOnRoaXMuX3R5cGV8fCh0aGlzLl90eXBlPU1hdGguYWJzKG4qZSk8MjAwPyJ0cmFja3BhZCI6IndoZWVsIix0aGlzLl90aW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCxlKz10aGlzLl9sYXN0VmFsdWUpKSx0LnNoaWZ0S2V5JiZlJiYoZS89NCksdGhpcy5fdHlwZSYmdGhpcy5fem9vbSgtZSx0KSx0LnByZXZlbnREZWZhdWx0KCl9LF9vblRpbWVvdXQ6ZnVuY3Rpb24oKXt0aGlzLl90eXBlPSJ3aGVlbCIsdGhpcy5fem9vbSgtdGhpcy5fbGFzdFZhbHVlKX0sX3pvb206ZnVuY3Rpb24odCxlKXtpZigwIT09dCl7dmFyIHI9dGhpcy5fbWFwLG49Mi8oMStNYXRoLmV4cCgtTWF0aC5hYnModC8xMDApKSk7dDwwJiYwIT09biYmKG49MS9uKTt2YXIgaT1yLmVhc2U/ci5lYXNlLnRvOnIudHJhbnNmb3JtLnNjYWxlLGE9ci50cmFuc2Zvcm0uc2NhbGVab29tKGkqbik7ci56b29tVG8oYSx7ZHVyYXRpb246MCxhcm91bmQ6ci51bnByb2plY3QodGhpcy5fcG9zKSxkZWxheUVuZEV2ZW50czoyMDB9LHtvcmlnaW5hbEV2ZW50OmV9KX19fX0seyIuLi8uLi91dGlsL2Jyb3dzZXIiOjQyNCwiLi4vLi4vdXRpbC9kb20iOjQyNiwiLi4vLi4vdXRpbC91dGlsIjo0NDB9XSw0MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLGEuYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgbz1hLmJlemllcigwLDAsLjE1LDEpO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uU3RhcnQsITEpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uU3RhcnQpLHRoaXMuX2VuYWJsZWQ9ITEpfSxkaXNhYmxlUm90YXRpb246ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSEwfSxlbmFibGVSb3RhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITF9LF9vblN0YXJ0OmZ1bmN0aW9uKHQpe2lmKDI9PT10LnRvdWNoZXMubGVuZ3RoKXt2YXIgZT1pLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1swXSkscj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1sxXSk7dGhpcy5fc3RhcnRWZWM9ZS5zdWIociksdGhpcy5fc3RhcnRTY2FsZT10aGlzLl9tYXAudHJhbnNmb3JtLnNjYWxlLHRoaXMuX3N0YXJ0QmVhcmluZz10aGlzLl9tYXAudHJhbnNmb3JtLmJlYXJpbmcsdGhpcy5fZ2VzdHVyZUludGVudD12b2lkIDAsdGhpcy5faW5lcnRpYT1bXSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSwhMSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMuX29uRW5kLCExKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYoMj09PXQudG91Y2hlcy5sZW5ndGgpe3ZhciBlPWkubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzBdKSxyPWkubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzFdKSxuPWUuYWRkKHIpLmRpdigyKSxhPWUuc3ViKHIpLG89YS5tYWcoKS90aGlzLl9zdGFydFZlYy5tYWcoKSxzPXRoaXMuX3JvdGF0aW9uRGlzYWJsZWQ/MDoxODAqYS5hbmdsZVdpdGgodGhpcy5fc3RhcnRWZWMpL01hdGguUEksbD10aGlzLl9tYXA7aWYodGhpcy5fZ2VzdHVyZUludGVudCl7dmFyIHU9e2R1cmF0aW9uOjAsYXJvdW5kOmwudW5wcm9qZWN0KG4pfTsicm90YXRlIj09PXRoaXMuX2dlc3R1cmVJbnRlbnQmJih1LmJlYXJpbmc9dGhpcy5fc3RhcnRCZWFyaW5nK3MpLCJ6b29tIiE9PXRoaXMuX2dlc3R1cmVJbnRlbnQmJiJyb3RhdGUiIT09dGhpcy5fZ2VzdHVyZUludGVudHx8KHUuem9vbT1sLnRyYW5zZm9ybS5zY2FsZVpvb20odGhpcy5fc3RhcnRTY2FsZSpvKSksbC5zdG9wKCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksdGhpcy5faW5lcnRpYS5wdXNoKFtEYXRlLm5vdygpLG8sbl0pLGwuZWFzZVRvKHUse29yaWdpbmFsRXZlbnQ6dH0pfWVsc2V7dmFyIGM9TWF0aC5hYnMoMS1vKT4uMTU7TWF0aC5hYnMocyk+ND90aGlzLl9nZXN0dXJlSW50ZW50PSJyb3RhdGUiOmMmJih0aGlzLl9nZXN0dXJlSW50ZW50PSJ6b29tIiksdGhpcy5fZ2VzdHVyZUludGVudCYmKHRoaXMuX3N0YXJ0VmVjPWEsdGhpcy5fc3RhcnRTY2FsZT1sLnRyYW5zZm9ybS5zY2FsZSx0aGlzLl9zdGFydEJlYXJpbmc9bC50cmFuc2Zvcm0uYmVhcmluZyl9dC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uRW5kOmZ1bmN0aW9uKHQpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25FbmQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBlPXRoaXMuX2luZXJ0aWEscj10aGlzLl9tYXA7aWYoZS5sZW5ndGg8MilyZXR1cm4gdm9pZCByLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KTt2YXIgbj1lW2UubGVuZ3RoLTFdLGk9ZVswXSxhPXIudHJhbnNmb3JtLnNjYWxlWm9vbSh0aGlzLl9zdGFydFNjYWxlKm5bMV0pLHM9ci50cmFuc2Zvcm0uc2NhbGVab29tKHRoaXMuX3N0YXJ0U2NhbGUqaVsxXSksbD1hLXMsdT0oblswXS1pWzBdKS8xZTMsYz1uWzJdO2lmKDA9PT11fHxhPT09cylyZXR1cm4gdm9pZCByLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KTt2YXIgaD0uMTUqbC91O01hdGguYWJzKGgpPjIuNSYmKGg9aD4wPzIuNTotMi41KTt2YXIgZj0xZTMqTWF0aC5hYnMoaC8oMTIqLjE1KSksZD1hK2gqZi8yZTM7ZDwwJiYoZD0wKSxyLmVhc2VUbyh7em9vbTpkLGR1cmF0aW9uOmYsZWFzaW5nOm8sYXJvdW5kOnIudW5wcm9qZWN0KGMpfSx7b3JpZ2luYWxFdmVudDp0fSl9LF9kcmFpbkluZXJ0aWFCdWZmZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPURhdGUubm93KCk7dC5sZW5ndGg+MiYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfX19LHsiLi4vLi4vdXRpbC9kb20iOjQyNiwiLi4vLi4vdXRpbC91dGlsIjo0NDB9XSw0MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2kuYmluZEFsbChbIl9vbkhhc2hDaGFuZ2UiLCJfdXBkYXRlSGFzaCJdLHRoaXMpfQplLmV4cG9ydHM9bjt2YXIgaT10KCIuLi91dGlsL3V0aWwiKTtuLnByb3RvdHlwZT17YWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlSGFzaCksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLGRlbGV0ZSB0aGlzLl9tYXAsdGhpc30sX29uSGFzaENoYW5nZTpmdW5jdGlvbigpe3ZhciB0PWxvY2F0aW9uLmhhc2gucmVwbGFjZSgiIyIsIiIpLnNwbGl0KCIvIik7cmV0dXJuIHQubGVuZ3RoPj0zJiYodGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrdFsyXSwrdFsxXV0sem9vbTordFswXSxiZWFyaW5nOisodFszXXx8MCl9KSwhMCl9LF91cGRhdGVIYXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmdldENlbnRlcigpLGU9dGhpcy5fbWFwLmdldFpvb20oKSxyPXRoaXMuX21hcC5nZXRCZWFyaW5nKCksbj1NYXRoLm1heCgwLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpLGk9IiMiK01hdGgucm91bmQoMTAwKmUpLzEwMCsiLyIrdC5sYXQudG9GaXhlZChuKSsiLyIrdC5sbmcudG9GaXhlZChuKSsocj8iLyIrTWF0aC5yb3VuZCgxMCpyKS8xMDoiIik7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKCIiLCIiLGkpfX19LHsiLi4vdXRpbC91dGlsIjo0NDB9XSw0MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX12YXIgaT10KCIuLi91dGlsL2NhbnZhcyIpLGE9dCgiLi4vdXRpbC91dGlsIiksbz10KCIuLi91dGlsL2Jyb3dzZXIiKSxzPXQoIi4uL3V0aWwvYnJvd3NlciIpLndpbmRvdyxsPXQoIi4uL3V0aWwvZXZlbnRlZCIpLHU9dCgiLi4vdXRpbC9kb20iKSxjPXQoIi4uL3N0eWxlL3N0eWxlIiksaD10KCIuLi9zdHlsZS9hbmltYXRpb25fbG9vcCIpLGY9dCgiLi4vcmVuZGVyL3BhaW50ZXIiKSxkPXQoIi4uL2dlby90cmFuc2Zvcm0iKSxwPXQoIi4vaGFzaCIpLG09dCgiLi9iaW5kX2hhbmRsZXJzIiksdj10KCIuL2NhbWVyYSIpLGc9dCgiLi4vZ2VvL2xuZ19sYXQiKSx5PXQoIi4uL2dlby9sbmdfbGF0X2JvdW5kcyIpLGI9dCgicG9pbnQtZ2VvbWV0cnkiKSx4PXQoIi4vY29udHJvbC9hdHRyaWJ1dGlvbiIpLF89e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTowLG1heFpvb206MjAsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLGJlYXJpbmdTbmFwOjcsaGFzaDohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITAsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsdHJhY2tSZXNpemU6ITAsd29ya2VyQ291bnQ6TWF0aC5tYXgoby5oYXJkd2FyZUNvbmN1cnJlbmN5LTEsMSl9LHc9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHQ9YS5leHRlbmQoe30sXyx0KSx0LndvcmtlckNvdW50PDEpdGhyb3cgbmV3IEVycm9yKCJ3b3JrZXJDb3VudCBtdXN0IGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuIik7dGhpcy5faW50ZXJhY3RpdmU9dC5pbnRlcmFjdGl2ZSx0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9dC5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsdGhpcy5fdHJhY2tSZXNpemU9dC50cmFja1Jlc2l6ZSx0aGlzLl93b3JrZXJDb3VudD10LndvcmtlckNvdW50LHRoaXMuX2JlYXJpbmdTbmFwPXQuYmVhcmluZ1NuYXAsInN0cmluZyI9PXR5cGVvZiB0LmNvbnRhaW5lcj90aGlzLl9jb250YWluZXI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodC5jb250YWluZXIpOnRoaXMuX2NvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmFuaW1hdGlvbkxvb3A9bmV3IGgsdGhpcy50cmFuc2Zvcm09bmV3IGQodC5taW5ab29tLHQubWF4Wm9vbSksdC5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKHQubWF4Qm91bmRzKSxhLmJpbmRBbGwoWyJfZm9yd2FyZFN0eWxlRXZlbnQiLCJfZm9yd2FyZFNvdXJjZUV2ZW50IiwiX2ZvcndhcmRMYXllckV2ZW50IiwiX2ZvcndhcmRUaWxlRXZlbnQiLCJfb25TdHlsZUxvYWQiLCJfb25TdHlsZUNoYW5nZSIsIl9vblNvdXJjZUFkZCIsIl9vblNvdXJjZVJlbW92ZSIsIl9vblNvdXJjZVVwZGF0ZSIsIl9vbldpbmRvd09ubGluZSIsIl9vbldpbmRvd1Jlc2l6ZSIsIl91cGRhdGUiLCJfcmVuZGVyIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUuYmluZCh0aGlzLCExKSksdGhpcy5vbigiem9vbSIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcywhMCkpLHRoaXMub24oIm1vdmVlbmQiLGZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Mb29wLnNldCgzMDApLHRoaXMuX3JlcmVuZGVyKCl9LmJpbmQodGhpcykpLHZvaWQgMCE9PXMmJihzLmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSkpLG0odGhpcyx0KSx0aGlzLl9oYXNoPXQuaGFzaCYmKG5ldyBwKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8dGhpcy5qdW1wVG8oe2NlbnRlcjp0LmNlbnRlcix6b29tOnQuem9vbSxiZWFyaW5nOnQuYmVhcmluZyxwaXRjaDp0LnBpdGNofSksdGhpcy5zdGFja3M9e30sdGhpcy5fY2xhc3Nlcz1bXSx0aGlzLnJlc2l6ZSgpLHQuY2xhc3NlcyYmdGhpcy5zZXRDbGFzc2VzKHQuY2xhc3NlcyksdC5zdHlsZSYmdGhpcy5zZXRTdHlsZSh0LnN0eWxlKSx0LmF0dHJpYnV0aW9uQ29udHJvbCYmdGhpcy5hZGRDb250cm9sKG5ldyB4KHQuYXR0cmlidXRpb25Db250cm9sKSk7dmFyIGU9dGhpcy5maXJlLmJpbmQodGhpcywiZXJyb3IiKTt0aGlzLm9uKCJzdHlsZS5lcnJvciIsZSksdGhpcy5vbigic291cmNlLmVycm9yIixlKSx0aGlzLm9uKCJ0aWxlLmVycm9yIixlKSx0aGlzLm9uKCJsYXllci5lcnJvciIsZSl9O2EuZXh0ZW5kKHcucHJvdG90eXBlLGwpLGEuZXh0ZW5kKHcucHJvdG90eXBlLHYucHJvdG90eXBlKSxhLmV4dGVuZCh3LnByb3RvdHlwZSx7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxhZGRDbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jbGFzc2VzLmluZGV4T2YodCk+PTB8fCIiPT09dD90aGlzOih0aGlzLl9jbGFzc2VzLnB1c2godCksdGhpcy5fY2xhc3NPcHRpb25zPWUsdGhpcy5zdHlsZSYmdGhpcy5zdHlsZS51cGRhdGVDbGFzc2VzKCksdGhpcy5fdXBkYXRlKCEwKSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fY2xhc3Nlcy5pbmRleE9mKHQpO3JldHVybiByPDB8fCIiPT09dD90aGlzOih0aGlzLl9jbGFzc2VzLnNwbGljZShyLDEpLHRoaXMuX2NsYXNzT3B0aW9ucz1lLHRoaXMuc3R5bGUmJnRoaXMuc3R5bGUudXBkYXRlQ2xhc3NlcygpLHRoaXMuX3VwZGF0ZSghMCkpfSxzZXRDbGFzc2VzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPHQubGVuZ3RoO24rKykiIiE9PXRbbl0mJihyW3Rbbl1dPSEwKTtyZXR1cm4gdGhpcy5fY2xhc3Nlcz1PYmplY3Qua2V5cyhyKSx0aGlzLl9jbGFzc09wdGlvbnM9ZSx0aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnVwZGF0ZUNsYXNzZXMoKSx0aGlzLl91cGRhdGUoITApfSxoYXNDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2xhc3Nlcy5pbmRleE9mKHQpPj0wfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsYXNzZXN9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTAsZT0wO3JldHVybiB0aGlzLl9jb250YWluZXImJih0PXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aHx8NDAwLGU9dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodHx8MzAwKSx0aGlzLl9jYW52YXMucmVzaXplKHQsZSksdGhpcy50cmFuc2Zvcm0ucmVzaXplKHQsZSksdGhpcy5wYWludGVyLnJlc2l6ZSh0LGUpLHRoaXMuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgibW92ZSIpLmZpcmUoInJlc2l6ZSIpLmZpcmUoIm1vdmVlbmQiKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHkodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgYigwLDApKSx0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHRoaXMudHJhbnNmb3JtLnNpemUpKTtyZXR1cm4odGhpcy50cmFuc2Zvcm0uYW5nbGV8fHRoaXMudHJhbnNmb3JtLnBpdGNoKSYmKHQuZXh0ZW5kKHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24obmV3IGIodGhpcy50cmFuc2Zvcm0uc2l6ZS54LDApKSksdC5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgYigwLHRoaXMudHJhbnNmb3JtLnNpemUueSkpKSksdH0sc2V0TWF4Qm91bmRzOmZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXkuY29udmVydCh0KTt0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZT1bZS5nZXRXZXN0KCksZS5nZXRFYXN0KCldLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPVtlLmdldFNvdXRoKCksZS5nZXROb3J0aCgpXSx0aGlzLnRyYW5zZm9ybS5fY29uc3RyYWluKCksdGhpcy5fdXBkYXRlKCl9ZWxzZSBudWxsIT09dCYmdm9pZCAwIT09dHx8KHRoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPVtdLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPVtdLHRoaXMuX3VwZGF0ZSgpKTtyZXR1cm4gdGhpc30sc2V0TWluWm9vbTpmdW5jdGlvbih0KXtpZigodD1udWxsPT09dHx8dm9pZCAwPT09dD8wOnQpPj0wJiZ0PD10aGlzLnRyYW5zZm9ybS5tYXhab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk8dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtaW5ab29tIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgY3VycmVudCBtYXhab29tLCBpbmNsdXNpdmUiKX0sc2V0TWF4Wm9vbTpmdW5jdGlvbih0KXtpZigodD1udWxsPT09dHx8dm9pZCAwPT09dD8yMDp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSYmdDw9MjApcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb209dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFpvb20oKT50JiZ0aGlzLnNldFpvb20odCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gbXVzdCBiZSBiZXR3ZWVuIHRoZSBjdXJyZW50IG1pblpvb20gYW5kIDIwLCBpbmNsdXNpdmUiKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChnLmNvbnZlcnQodCkpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oYi5jb252ZXJ0KHQpKX0scXVlcnlSZW5kZXJlZEZlYXR1cmVzOmZ1bmN0aW9uKCl7dmFyIHQsZT17fTtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGg/KHQ9YXJndW1lbnRzWzBdLGU9YXJndW1lbnRzWzFdKToxPT09YXJndW1lbnRzLmxlbmd0aCYmZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBifHxBcnJheS5pc0FycmF5KHQpfShhcmd1bWVudHNbMF0pP3Q9YXJndW1lbnRzWzBdOjE9PT1hcmd1bWVudHMubGVuZ3RoJiYoZT1hcmd1bWVudHNbMF0pLHRoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHRoaXMuX21ha2VRdWVyeUdlb21ldHJ5KHQpLGUsdGhpcy50cmFuc2Zvcm0uem9vbSx0aGlzLnRyYW5zZm9ybS5hbmdsZSl9LF9tYWtlUXVlcnlHZW9tZXRyeTpmdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1bYi5jb252ZXJ0KFswLDBdKSxiLmNvbnZlcnQoW3RoaXMudHJhbnNmb3JtLndpZHRoLHRoaXMudHJhbnNmb3JtLmhlaWdodF0pXSk7dmFyIGU7aWYodCBpbnN0YW5jZW9mIGJ8fCJudW1iZXIiPT10eXBlb2YgdFswXSllPVtiLmNvbnZlcnQodCldO2Vsc2V7dmFyIHI9W2IuY29udmVydCh0WzBdKSxiLmNvbnZlcnQodFsxXSldO2U9W3JbMF0sbmV3IGIoclsxXS54LHJbMF0ueSksclsxXSxuZXcgYihyWzBdLngsclsxXS55KSxyWzBdXX1yZXR1cm4gZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9pbnRDb29yZGluYXRlKHQpfS5iaW5kKHRoaXMpKX0scXVlcnlTb3VyY2VGZWF0dXJlczpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnF1ZXJ5U291cmNlRmVhdHVyZXModCxlKX0sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLm9mZigibG9hZCIsdGhpcy5fb25TdHlsZUxvYWQpLm9mZigiZXJyb3IiLHRoaXMuX2ZvcndhcmRTdHlsZUV2ZW50KS5vZmYoImNoYW5nZSIsdGhpcy5fb25TdHlsZUNoYW5nZSkub2ZmKCJzb3VyY2UuYWRkIix0aGlzLl9vblNvdXJjZUFkZCkub2ZmKCJzb3VyY2UucmVtb3ZlIix0aGlzLl9vblNvdXJjZVJlbW92ZSkub2ZmKCJzb3VyY2UubG9hZCIsdGhpcy5fb25Tb3VyY2VVcGRhdGUpLm9mZigic291cmNlLmVycm9yIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9mZigic291cmNlLmNoYW5nZSIsdGhpcy5fb25Tb3VyY2VVcGRhdGUpLm9mZigibGF5ZXIuYWRkIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub2ZmKCJsYXllci5yZW1vdmUiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KS5vZmYoImxheWVyLmVycm9yIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub2ZmKCJ0aWxlLmFkZCIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub2ZmKCJ0aWxlLnJlbW92ZSIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub2ZmKCJ0aWxlLmxvYWQiLHRoaXMuX3VwZGF0ZSkub2ZmKCJ0aWxlLmVycm9yIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUuc3RhdHMiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLl9yZW1vdmUoKSx0aGlzLm9mZigicm90YXRlIix0aGlzLnN0eWxlLl9yZWRvUGxhY2VtZW50KSx0aGlzLm9mZigicGl0Y2giLHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQpKSx0Pyh0aGlzLnN0eWxlPXQgaW5zdGFuY2VvZiBjP3Q6bmV3IGModCx0aGlzLmFuaW1hdGlvbkxvb3AsdGhpcy5fd29ya2VyQ291bnQpLHRoaXMuc3R5bGUub24oImxvYWQiLHRoaXMuX29uU3R5bGVMb2FkKS5vbigiZXJyb3IiLHRoaXMuX2ZvcndhcmRTdHlsZUV2ZW50KS5vbigiY2hhbmdlIix0aGlzLl9vblN0eWxlQ2hhbmdlKS5vbigic291cmNlLmFkZCIsdGhpcy5fb25Tb3VyY2VBZGQpLm9uKCJzb3VyY2UucmVtb3ZlIix0aGlzLl9vblNvdXJjZVJlbW92ZSkub24oInNvdXJjZS5sb2FkIix0aGlzLl9vblNvdXJjZVVwZGF0ZSkub24oInNvdXJjZS5lcnJvciIsdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KS5vbigic291cmNlLmNoYW5nZSIsdGhpcy5fb25Tb3VyY2VVcGRhdGUpLm9uKCJsYXllci5hZGQiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KS5vbigibGF5ZXIucmVtb3ZlIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub24oImxheWVyLmVycm9yIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub24oInRpbGUuYWRkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5yZW1vdmUiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9uKCJ0aWxlLmxvYWQiLHRoaXMuX3VwZGF0ZSkub24oInRpbGUuZXJyb3IiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9uKCJ0aWxlLnN0YXRzIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KSx0aGlzLm9uKCJyb3RhdGUiLHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQpLHRoaXMub24oInBpdGNoIix0aGlzLnN0eWxlLl9yZWRvUGxhY2VtZW50KSx0aGlzKToodGhpcy5zdHlsZT1udWxsLHRoaXMpfSxnZXRTdHlsZTpmdW5jdGlvbigpe2lmKHRoaXMuc3R5bGUpcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCl9LGFkZFNvdXJjZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sYWRkU291cmNlVHlwZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LHJlbW92ZVNvdXJjZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRTb3VyY2U6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKHQpfSxhZGRMYXllcjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVMYXllcih0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LGdldExheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldExheWVyKHQpfSxzZXRGaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRGaWx0ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LHNldExheWVyWm9vbVJhbmdlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMYXllclpvb21SYW5nZSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmlsdGVyKHQpfSxzZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkodCxlLHIsbiksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRQYWludFByb3BlcnR5KHQsZSxyKX0sc2V0TGF5b3V0UHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LGdldExheW91dFByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkodCxlKX0sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sZ2V0Q2FudmFzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcn0sZ2V0Q2FudmFzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhcy5nZXRFbGVtZW50KCl9LF9zZXR1cENvbnRhaW5lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcCIpO3ZhciBlPXRoaXMuX2NhbnZhc0NvbnRhaW5lcj11LmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lciIsdCk7dGhpcy5faW50ZXJhY3RpdmUmJmUuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtaW50ZXJhY3RpdmUiKSx0aGlzLl9jYW52YXM9bmV3IGkodGhpcyxlKTt2YXIgcj10aGlzLl9jb250cm9sQ29udGFpbmVyPXUuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lciIsdCksbj10aGlzLl9jb250cm9sQ29ybmVycz17fTtbInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dS5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtIit0LHIpfSl9LF9zZXR1cFBhaW50ZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYW52YXMuZ2V0V2ViR0xDb250ZXh0KHtmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQscHJlc2VydmVEcmF3aW5nQnVmZmVyOnRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcn0pO2lmKCF0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjpuZXcgRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMIil9KTt0aGlzLnBhaW50ZXI9bmV3IGYodCx0aGlzLnRyYW5zZm9ybSl9LF9jb250ZXh0TG9zdDpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZnJhbWVJZCYmby5jYW5jZWxGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLmZpcmUoIndlYmdsY29udGV4dGxvc3QiLHtvcmlnaW5hbEV2ZW50OnR9KX0sX2NvbnRleHRSZXN0b3JlZDpmdW5jdGlvbih0KXt0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuZmlyZSgid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHtvcmlnaW5hbEV2ZW50OnR9KX0sbG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3N0eWxlRGlydHkmJiF0aGlzLl9zb3VyY2VzRGlydHkmJiEoIXRoaXMuc3R5bGV8fCF0aGlzLnN0eWxlLmxvYWRlZCgpKX0sX3VwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZT8odGhpcy5fc3R5bGVEaXJ0eT10aGlzLl9zdHlsZURpcnR5fHx0LHRoaXMuX3NvdXJjZXNEaXJ0eT0hMCx0aGlzLl9yZXJlbmRlcigpLHRoaXMpOnRoaXN9LF9yZW5kZXI6ZnVuY3Rpb24oKXt0cnl7dGhpcy5zdHlsZSYmdGhpcy5fc3R5bGVEaXJ0eSYmKHRoaXMuX3N0eWxlRGlydHk9ITEsdGhpcy5zdHlsZS51cGRhdGUodGhpcy5fY2xhc3Nlcyx0aGlzLl9jbGFzc09wdGlvbnMpLHRoaXMuX2NsYXNzT3B0aW9ucz1udWxsLHRoaXMuc3R5bGUuX3JlY2FsY3VsYXRlKHRoaXMudHJhbnNmb3JtLnpvb20pKSx0aGlzLnN0eWxlJiZ0aGlzLl9zb3VyY2VzRGlydHkmJih0aGlzLl9zb3VyY2VzRGlydHk9ITEsdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSkpLHRoaXMucGFpbnRlci5yZW5kZXIodGhpcy5zdHlsZSx7ZGVidWc6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcix2ZXJ0aWNlczp0aGlzLnZlcnRpY2VzLHJvdGF0aW5nOnRoaXMucm90YXRpbmcsem9vbWluZzp0aGlzLnpvb21pbmd9KSx0aGlzLmZpcmUoInJlbmRlciIpLHRoaXMubG9hZGVkKCkmJiF0aGlzLl9sb2FkZWQmJih0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKCJsb2FkIikpLHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmFuaW1hdGlvbkxvb3Auc3RvcHBlZCgpfHwodGhpcy5fc3R5bGVEaXJ0eT0hMCksKHRoaXMuX3NvdXJjZXNEaXJ0eXx8dGhpcy5fcmVwYWludHx8dGhpcy5fc3R5bGVEaXJ0eSkmJnRoaXMuX3JlcmVuZGVyKCl9Y2F0Y2godCl7dGhpcy5maXJlKCJlcnJvciIse2Vycm9yOnR9KX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5faGFzaCYmdGhpcy5faGFzaC5yZW1vdmUoKSxvLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuc2V0U3R5bGUobnVsbCksdm9pZCAwIT09cyYmcy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKTt2YXIgdD10aGlzLnBhaW50ZXIuZ2wuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTt0JiZ0Lmxvc2VDb250ZXh0KCksbih0aGlzLl9jYW52YXNDb250YWluZXIpLG4odGhpcy5fY29udHJvbENvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLW1hcCIpfSxfcmVyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlJiYhdGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9by5mcmFtZSh0aGlzLl9yZW5kZXIpKX0sX2ZvcndhcmRTdHlsZUV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSgic3R5bGUuIit0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9mb3J3YXJkU291cmNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKHQudHlwZSxhLmV4dGVuZCh7c3R5bGU6dC50YXJnZXR9LHQpKX0sX2ZvcndhcmRMYXllckV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSh0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9mb3J3YXJkVGlsZUV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSh0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9vblN0eWxlTG9hZDpmdW5jdGlvbih0KXt0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkJiZ0aGlzLmp1bXBUbyh0aGlzLnN0eWxlLnN0eWxlc2hlZXQpLHRoaXMuc3R5bGUudXBkYXRlKHRoaXMuX2NsYXNzZXMse3RyYW5zaXRpb246ITF9KSx0aGlzLl9mb3J3YXJkU3R5bGVFdmVudCh0KX0sX29uU3R5bGVDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKCEwKSx0aGlzLl9mb3J3YXJkU3R5bGVFdmVudCh0KX0sX29uU291cmNlQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc291cmNlO2Uub25BZGQmJmUub25BZGQodGhpcyksdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KHQpfSxfb25Tb3VyY2VSZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zb3VyY2U7ZS5vblJlbW92ZSYmZS5vblJlbW92ZSh0aGlzKSx0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQodCl9LF9vblNvdXJjZVVwZGF0ZTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGUoKSx0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQodCl9LF9vbldpbmRvd09ubGluZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxfb25XaW5kb3dSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLl90cmFja1Jlc2l6ZSYmdGhpcy5zdG9wKCkucmVzaXplKCkuX3VwZGF0ZSgpfX0pLGEuZXh0ZW5kQWxsKHcucHJvdG90eXBlLHtfc2hvd1RpbGVCb3VuZGFyaWVzOiExLGdldCBzaG93VGlsZUJvdW5kYXJpZXMoKXtyZXR1cm4gdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzfSxzZXQgc2hvd1RpbGVCb3VuZGFyaWVzKHQpe3RoaXMuX3Nob3dUaWxlQm91bmRhcmllcyE9PXQmJih0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXM9dCx0aGlzLl91cGRhdGUoKSl9LF9zaG93Q29sbGlzaW9uQm94ZXM6ITEsZ2V0IHNob3dDb2xsaXNpb25Cb3hlcygpe3JldHVybiB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXN9LHNldCBzaG93Q29sbGlzaW9uQm94ZXModCl7dGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzIT09dCYmKHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz10LHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQoKSl9LF9zaG93T3ZlcmRyYXdJbnNwZWN0b3I6ITEsZ2V0IHNob3dPdmVyZHJhd0luc3BlY3Rvcigpe3JldHVybiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3J9LHNldCBzaG93T3ZlcmRyYXdJbnNwZWN0b3IodCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0sX3JlcGFpbnQ6ITEsZ2V0IHJlcGFpbnQoKXtyZXR1cm4gdGhpcy5fcmVwYWludH0sc2V0IHJlcGFpbnQodCl7dGhpcy5fcmVwYWludD10LHRoaXMuX3VwZGF0ZSgpfSxfdmVydGljZXM6ITEsZ2V0IHZlcnRpY2VzKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2VzfSxzZXQgdmVydGljZXModCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX19KX0seyIuLi9nZW8vbG5nX2xhdCI6MzM3LCIuLi9nZW8vbG5nX2xhdF9ib3VuZHMiOjMzOCwiLi4vZ2VvL3RyYW5zZm9ybSI6MzM5LCIuLi9yZW5kZXIvcGFpbnRlciI6MzUzLCIuLi9zdHlsZS9hbmltYXRpb25fbG9vcCI6MzczLCIuLi9zdHlsZS9zdHlsZSI6Mzc2LCIuLi91dGlsL2Jyb3dzZXIiOjQyNCwiLi4vdXRpbC9jYW52YXMiOjQyNSwiLi4vdXRpbC9kb20iOjQyNiwiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL2JpbmRfaGFuZGxlcnMiOjQwNSwiLi9jYW1lcmEiOjQwNiwiLi9jb250cm9sL2F0dHJpYnV0aW9uIjo0MDcsIi4vaGFzaCI6NDE4LCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sNDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0fHwodD1pLmNyZWF0ZSgiZGl2IikpLHQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtbWFya2VyIiksdGhpcy5fZWw9dCx0aGlzLl9vZmZzZXQ9by5jb252ZXJ0KGUmJmUub2Zmc2V0fHxbMCwwXSksdGhpcy5fdXBkYXRlPXRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4uL3V0aWwvZG9tIiksYT10KCIuLi9nZW8vbG5nX2xhdCIpLG89dCgicG9pbnQtZ2VvbWV0cnkiKTtuLnByb3RvdHlwZT17YWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQsdC5nZXRDYW52YXNDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbCksdC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcD1udWxsKTt2YXIgdD10aGlzLl9lbC5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnJlbW92ZUNoaWxkKHRoaXMuX2VsKSx0aGlzfSxnZXRMbmdMYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxzZXRMbmdMYXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xuZ0xhdD1hLmNvbnZlcnQodCksdGhpcy5fdXBkYXRlKCksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbH0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCk7aS5zZXRUcmFuc2Zvcm0odGhpcy5fZWwsInRyYW5zbGF0ZSgiK3QueCsicHgsIit0LnkrInB4KSIpfX19fSx7Ii4uL2dlby9sbmdfbGF0IjozMzcsIi4uL3V0aWwvZG9tIjo0MjYsInBvaW50LWdlb21ldHJ5Ijo0ODJ9XSw0MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpLnNldE9wdGlvbnModGhpcyx0KSxpLmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uQ2xpY2tDbG9zZSJdLHRoaXMpfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vdXRpbC9ldmVudGVkIiksbz10KCIuLi91dGlsL2RvbSIpLHM9dCgiLi4vZ2VvL2xuZ19sYXQiKTtuLnByb3RvdHlwZT1pLmluaGVyaXQoYSx7b3B0aW9uczp7Y2xvc2VCdXR0b246ITAsY2xvc2VPbkNsaWNrOiEwfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2smJnRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSksdGhpcy5fdXBkYXRlKCksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnQmJnRoaXMuX2NvbnRlbnQucGFyZW50Tm9kZSYmdGhpcy5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRhaW5lciYmKHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwJiYodGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSxkZWxldGUgdGhpcy5fbWFwKSx0aGlzLmZpcmUoImNsb3NlIiksdGhpc30sZ2V0TG5nTGF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sc2V0TG5nTGF0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9cy5jb252ZXJ0KHQpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LHNldFRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KSl9LHNldEhUTUw6ZnVuY3Rpb24odCl7dmFyIGUscj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7Zm9yKG4uaW5uZXJIVE1MPXQ7Oyl7aWYoIShlPW4uZmlyc3RDaGlsZCkpYnJlYWs7ci5hcHBlbmRDaGlsZChlKX1yZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHIpfSxzZXRET01Db250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxfY3JlYXRlQ29udGVudDpmdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnRoaXMuX2NvbnRlbnQucGFyZW50Tm9kZSYmdGhpcy5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9by5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLWNvbnRlbnQiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249by5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbiIsdGhpcy5fY29udGVudCksdGhpcy5fY2xvc2VCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9IiYjMjE1OyIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwJiZ0aGlzLl9sbmdMYXQmJnRoaXMuX2NvbnRlbnQpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj1vLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPW8uY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC10aXAiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpKTt2YXIgdD10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLnJvdW5kKCksZT10aGlzLm9wdGlvbnMuYW5jaG9yO2lmKCFlKXt2YXIgcj10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGgsbj10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O2U9dC55PG4/WyJ0b3AiXTp0Lnk+dGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQtbj9bImJvdHRvbSJdOltdLHQueDxyLzI/ZS5wdXNoKCJsZWZ0Iik6dC54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtci8yJiZlLnB1c2goInJpZ2h0IiksZT0wPT09ZS5sZW5ndGg/ImJvdHRvbSI6ZS5qb2luKCItIil9dmFyIGk9e3RvcDoidHJhbnNsYXRlKC01MCUsMCkiLCJ0b3AtbGVmdCI6InRyYW5zbGF0ZSgwLDApIiwidG9wLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLDApIixib3R0b206InRyYW5zbGF0ZSgtNTAlLC0xMDAlKSIsImJvdHRvbS1sZWZ0IjoidHJhbnNsYXRlKDAsLTEwMCUpIiwiYm90dG9tLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLC0xMDAlKSIsbGVmdDoidHJhbnNsYXRlKDAsLTUwJSkiLHJpZ2h0OiJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkifSxhPXRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3Q7Zm9yKHZhciBzIGluIGkpYS5yZW1vdmUoIm1hcGJveGdsLXBvcHVwLWFuY2hvci0iK3MpO2EuYWRkKCJtYXBib3hnbC1wb3B1cC1hbmNob3ItIitlKSxvLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsaVtlXSsiIHRyYW5zbGF0ZSgiK3QueCsicHgsIit0LnkrInB4KSIpfX0sX29uQ2xpY2tDbG9zZTpmdW5jdGlvbigpe3RoaXMucmVtb3ZlKCl9fSl9LHsiLi4vZ2VvL2xuZ19sYXQiOjMzNywiLi4vdXRpbC9kb20iOjQyNiwiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvdXRpbCI6NDQwfV0sNDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnRhcmdldD10LHRoaXMucGFyZW50PWUsdGhpcy5jYWxsYmFja3M9e30sdGhpcy5jYWxsYmFja0lEPTAsdGhpcy5yZWNlaXZlPXRoaXMucmVjZWl2ZS5iaW5kKHRoaXMpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxyKXt0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiI8cmVzcG9uc2U+IixpZDpTdHJpbmcoaSksZXJyb3I6dD9TdHJpbmcodCk6bnVsbCxkYXRhOmV9LHIpfXZhciByLG49dC5kYXRhLGk9bi5pZDtpZigiPHJlc3BvbnNlPiI9PT1uLnR5cGUpcj10aGlzLmNhbGxiYWNrc1tuLmlkXSxkZWxldGUgdGhpcy5jYWxsYmFja3Nbbi5pZF0sciYmcihuLmVycm9yfHxudWxsLG4uZGF0YSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudFtuLnR5cGVdKXRoaXMucGFyZW50W24udHlwZV0obi5kYXRhLGUuYmluZCh0aGlzKSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudC53b3JrZXJTb3VyY2VzKXt2YXIgYT1uLnR5cGUuc3BsaXQoIi4iKTt0aGlzLnBhcmVudC53b3JrZXJTb3VyY2VzW2FbMF1dW2FbMV1dKG4uZGF0YSxlLmJpbmQodGhpcykpfWVsc2UgdGhpcy5wYXJlbnRbbi50eXBlXShuLmRhdGEpfSxuLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW51bGw7ciYmKHRoaXMuY2FsbGJhY2tzW2k9dGhpcy5jYWxsYmFja0lEKytdPXIpLHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDpTdHJpbmcoaSksZGF0YTplfSxuKX0sbi5wcm90b3R5cGUucG9zdE1lc3NhZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh0LGUpfX0se31dLDQyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPXQsZS5wcm90b2NvbD09PWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sJiZlLmhvc3Q9PT1kb2N1bWVudC5sb2NhdGlvbi5ob3N0fXIuZ2V0SlNPTj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLHQsITApLHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiIpLHIub25lcnJvcj1mdW5jdGlvbih0KXtlKHQpfSxyLm9ubG9hZD1mdW5jdGlvbigpe2lmKHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMCYmci5yZXNwb25zZSl7dmFyIHQ7dHJ5e3Q9SlNPTi5wYXJzZShyLnJlc3BvbnNlKX1jYXRjaCh0KXtyZXR1cm4gZSh0KX1lKG51bGwsdCl9ZWxzZSBlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5zZW5kKCkscn0sci5nZXRBcnJheUJ1ZmZlcj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLHQsITApLHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsci5vbmVycm9yPWZ1bmN0aW9uKHQpe2UodCl9LHIub25sb2FkPWZ1bmN0aW9uKCl7ci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwJiZyLnJlc3BvbnNlP2UobnVsbCxyLnJlc3BvbnNlKTplKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5zZW5kKCkscn0sci5nZXRJbWFnZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmdldEFycmF5QnVmZmVyKHQsZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiBlKHQpO3ZhciBuPW5ldyBJbWFnZTtuLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxuKSwod2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCkucmV2b2tlT2JqZWN0VVJMKG4uc3JjKX07dmFyIGk9bmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHIpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO3JldHVybiBuLnNyYz0od2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCkuY3JlYXRlT2JqZWN0VVJMKGkpLG4uZ2V0RGF0YT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGU9dC5nZXRDb250ZXh0KCIyZCIpO3JldHVybiB0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHQsZS5kcmF3SW1hZ2UobiwwLDApLGUuZ2V0SW1hZ2VEYXRhKDAsMCxuLndpZHRoLG4uaGVpZ2h0KS5kYXRhfSxufSl9LHIuZ2V0VmlkZW89ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpO3Iub25sb2Fkc3RhcnQ9ZnVuY3Rpb24oKXtlKG51bGwscil9O2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtuKHRbaV0pfHwoci5jcm9zc09yaWdpbj0iQW5vbnltb3VzIiksYS5zcmM9dFtpXSxyLmFwcGVuZENoaWxkKGEpfXJldHVybiByLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gcn0scn19LHt9XSw0MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci53aW5kb3c9d2luZG93LGUuZXhwb3J0cy5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpOkRhdGUubm93LmJpbmQoRGF0ZSl9KCk7dmFyIG49d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lO3IuZnJhbWU9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9O3ZhciBpPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8d2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lO3IuY2FuY2VsRnJhbWU9ZnVuY3Rpb24odCl7aSh0KX0sci50aW1lZD1mdW5jdGlvbih0LG4saSl7ZnVuY3Rpb24gYShsKXtvfHwobD1lLmV4cG9ydHMubm93KCksbD49cytuP3QuY2FsbChpLDEpOih0LmNhbGwoaSwobC1zKS9uKSxyLmZyYW1lKGEpKSl9aWYoIW4pcmV0dXJuIHQuY2FsbChpLDEpLG51bGw7dmFyIG89ITEscz1lLmV4cG9ydHMubm93KCk7cmV0dXJuIHIuZnJhbWUoYSksZnVuY3Rpb24oKXtvPSEwfX0sci5zdXBwb3J0ZWQ9dCgibWFwYm94LWdsLXN1cHBvcnRlZCIpLHIuaGFyZHdhcmVDb25jdXJyZW5jeT1uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeXx8NCxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGV2aWNlUGl4ZWxSYXRpbyIse2dldDpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb319KSxyLnN1cHBvcnRzV2VicD0hMTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTthLm9ubG9hZD1mdW5jdGlvbigpe3Iuc3VwcG9ydHNXZWJwPSEwfSxhLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmg0QUFBQlhSVUpRVmxBNFRCRUFBQUF2QVFBQUFBZlEvLzczdi8rQmlPaC9BQUE9IixyLnN1cHBvcnRzR2VvbG9jYXRpb249ISFuYXZpZ2F0b3IuZ2VvbG9jYXRpb259LHsibWFwYm94LWdsLXN1cHBvcnRlZCI6MzI1fV0sNDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0JiZlJiYodGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmNhbnZhcy5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jYW52YXMiKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix0Ll9jb250ZXh0TG9zdC5iaW5kKHQpLCExKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdC5fY29udGV4dFJlc3RvcmVkLmJpbmQodCksITEpLHRoaXMuY2FudmFzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLDApLGUuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpKX12YXIgaT10KCIuLi91dGlsIiksYT10KCJtYXBib3gtZ2wtc3VwcG9ydGVkIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5jYW52YXMud2lkdGg9cip0LHRoaXMuY2FudmFzLmhlaWdodD1yKmUsdGhpcy5jYW52YXMuc3R5bGUud2lkdGg9dCsicHgiLHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodD1lKyJweCJ9LG4ucHJvdG90eXBlLmdldFdlYkdMQ29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdD1pLmV4dGVuZCh7fSx0LGEud2ViR0xDb250ZXh0QXR0cmlidXRlcyksdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLHQpfHx0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHQpfSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzfX0seyIuLi91dGlsIjo0NDAsIm1hcGJveC1nbC1zdXBwb3J0ZWQiOjMyNX1dLDQyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV1pbiBzKXJldHVybiB0W2VdfWZ1bmN0aW9uIGkodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixpLCEwKX12YXIgYT10KCJwb2ludC1nZW9tZXRyeSIpO3IuY3JlYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBlJiYobi5jbGFzc05hbWU9ZSksciYmci5hcHBlbmRDaGlsZChuKSxufTt2YXIgbyxzPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxsPW4oWyJ1c2VyU2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7ci5kaXNhYmxlRHJhZz1mdW5jdGlvbigpe2wmJihvPXNbbF0sc1tsXT0ibm9uZSIpfSxyLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiYoc1tsXT1vKX07dmFyIHU9bihbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSJdKTtyLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbdV09ZX0sci5zdXBwcmVzc0NsaWNrPWZ1bmN0aW9uKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixpLCEwKSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsaSwhMCl9LDApfSxyLm1vdXNlUG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZT1lLnRvdWNoZXM/ZS50b3VjaGVzWzBdOmUsbmV3IGEoZS5jbGllbnRYLXIubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLXIudG9wLXQuY2xpZW50VG9wKX0sci50b3VjaFBvcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49W10saT0wO2k8ZS50b3VjaGVzLmxlbmd0aDtpKyspbi5wdXNoKG5ldyBhKGUudG91Y2hlc1tpXS5jbGllbnRYLXIubGVmdC10LmNsaWVudExlZnQsZS50b3VjaGVzW2ldLmNsaWVudFktci50b3AtdC5jbGllbnRUb3ApKTtyZXR1cm4gbn19LHsicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDQyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ3ZWJ3b3JraWZ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHQoIi4uLy4uL3NvdXJjZS93b3JrZXIiKSl9fSx7Ii4uLy4uL3NvdXJjZS93b3JrZXIiOjM3MSx3ZWJ3b3JraWZ5OjU2Mn1dLDQyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGUuYXJlYS10LmFyZWF9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxyPXRbb10sbis9KHIueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn12YXIgYT10KCJxdWlja3NlbGVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKHI8PTEpcmV0dXJuW3RdO2Zvcih2YXIgbyxzLGw9W10sdT0wO3U8cjt1Kyspe3ZhciBjPWkodFt1XSk7MCE9PWMmJih0W3VdLmFyZWE9TWF0aC5hYnMoYyksdm9pZCAwPT09cyYmKHM9YzwwKSxzPT09YzwwPyhvJiZsLnB1c2gobyksbz1bdFt1XV0pOm8ucHVzaCh0W3VdKSl9aWYobyYmbC5wdXNoKG8pLGU+MSlmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKylsW2hdLmxlbmd0aDw9ZXx8KGEobFtoXSxlLDEsbFtoXS5sZW5ndGgtMSxuKSxsW2hdPWxbaF0uc2xpY2UoMCxlKSk7cmV0dXJuIGx9fSx7cXVpY2tzZWxlY3Q6NDkxfV0sNDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17QVBJX1VSTDoiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITB9fSx7fV0sNDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5fc3RyaW5nVG9OdW1iZXI9e30sdGhpcy5fbnVtYmVyVG9TdHJpbmc9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07dGhpcy5fc3RyaW5nVG9OdW1iZXJbcl09ZSx0aGlzLl9udW1iZXJUb1N0cmluZ1tlXT1yfX12YXIgaT10KCJhc3NlcnQiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCBpbiB0aGlzLl9zdHJpbmdUb051bWJlciksdGhpcy5fc3RyaW5nVG9OdW1iZXJbdF19LG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0PHRoaXMuX251bWJlclRvU3RyaW5nLmxlbmd0aCksdGhpcy5fbnVtYmVyVG9TdHJpbmdbdF19fSx7YXNzZXJ0OjQ1fV0sNDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmN1cnJlbnRBY3Rvcj0wO2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBuPW5ldyBvLGk9bmV3IGEobixlKTtpLm5hbWU9IldvcmtlciAiK3IsdGhpcy5hY3RvcnMucHVzaChpKX19dmFyIGk9dCgiLi91dGlsIiksYT10KCIuL2FjdG9yIiksbz10KCIuL3dlYl93b3JrZXIiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17YnJvYWRjYXN0OmZ1bmN0aW9uKHQsZSxyKXtyPXJ8fGZ1bmN0aW9uKCl7fSxpLmFzeW5jQWxsKHRoaXMuYWN0b3JzLGZ1bmN0aW9uKHIsbil7ci5zZW5kKHQsZSxuKX0scil9LHNlbmQ6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4oIm51bWJlciIhPXR5cGVvZiBufHxpc05hTihuKSkmJihuPXRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgpLHRoaXMuYWN0b3JzW25dLnNlbmQodCxlLHIsaSksbn0scmVtb3ZlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLmFjdG9ycy5sZW5ndGg7dCsrKXRoaXMuYWN0b3JzW3RdLnRhcmdldC50ZXJtaW5hdGUoKTt0aGlzLmFjdG9ycz1bXX19fSx7Ii4vYWN0b3IiOjQyMiwiLi91dGlsIjo0NDAsIi4vd2ViX3dvcmtlciI6NDI3fV0sNDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdXRpbCIpLGk9e29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX2V2ZW50c1t0XT10aGlzLl9ldmVudHNbdF18fFtdLHRoaXMuX2V2ZW50c1t0XS5wdXNoKGUpLHRoaXN9LG9mZjpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzLHRoaXM7aWYoIXRoaXMubGlzdGVucyh0KSlyZXR1cm4gdGhpcztpZihlKXt2YXIgcj10aGlzLl9ldmVudHNbdF0uaW5kZXhPZihlKTtyPj0wJiZ0aGlzLl9ldmVudHNbdF0uc3BsaWNlKHIsMSksdGhpcy5fZXZlbnRzW3RdLmxlbmd0aHx8ZGVsZXRlIHRoaXMuX2V2ZW50c1t0XX1lbHNlIGRlbGV0ZSB0aGlzLl9ldmVudHNbdF07cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbihuKXt0aGlzLm9mZih0LHIpLGUuY2FsbCh0aGlzLG4pfS5iaW5kKHRoaXMpO3JldHVybiB0aGlzLm9uKHQsciksdGhpc30sZmlyZTpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLmxpc3RlbnModCkpcmV0dXJuIG4uZW5kc1dpdGgodCwiZXJyb3IiKSYmY29uc29sZS5lcnJvcihlJiZlLmVycm9yfHxlfHwiRW1wdHkgZXJyb3IgZXZlbnQiKSx0aGlzO2U9bi5leHRlbmQoe30sZSksbi5leHRlbmQoZSx7dHlwZTp0LHRhcmdldDp0aGlzfSk7Zm9yKHZhciByPXRoaXMuX2V2ZW50c1t0XS5zbGljZSgpLGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmNhbGwodGhpcyxlKTtyZXR1cm4gdGhpc30sbGlzdGVuczpmdW5jdGlvbih0KXtyZXR1cm4hKCF0aGlzLl9ldmVudHN8fCF0aGlzLl9ldmVudHNbdF0pfX07ZS5leHBvcnRzPWl9LHsiLi91dGlsIjo0NDB9XSw0MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuc3RhY2tzPXQucmVhZEZpZWxkcyhpLFtdLGUpfWZ1bmN0aW9uIGkodCxlLHIpe2lmKDE9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKGEse2dseXBoczp7fX0pO2UucHVzaChuKX19ZnVuY3Rpb24gYSh0LGUscil7aWYoMT09PXQpZS5uYW1lPXIucmVhZFN0cmluZygpO2Vsc2UgaWYoMj09PXQpZS5yYW5nZT1yLnJlYWRTdHJpbmcoKTtlbHNlIGlmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKG8se30pO2UuZ2x5cGhzW24uaWRdPW59fWZ1bmN0aW9uIG8odCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX1lLmV4cG9ydHM9bn0se31dLDQzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9ZS5leHBvcnRzPW4sbi5udW1iZXI9bixuLnZlYzI9ZnVuY3Rpb24odCxlLHIpe3JldHVybltuKHRbMF0sZVswXSxyKSxuKHRbMV0sZVsxXSxyKV19LG4uY29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybltuKHRbMF0sZVswXSxyKSxuKHRbMV0sZVsxXSxyKSxuKHRbMl0sZVsyXSxyKSxuKHRbM10sZVszXSxyKV19LG4uYXJyYXk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGkpe3JldHVybiBuKHQsZVtpXSxyKX0pfX0se31dLDQzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylmb3IodmFyIGk9dFtuXSxhPTA7YTxlLmxlbmd0aDthKyspZm9yKHZhciBvPWVbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2lmKGQoaSxsKSlyZXR1cm4hMDtpZihjKGwsaSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpKHQsZSl7aWYoMT09PXQubGVuZ3RoJiYxPT09dFswXS5sZW5ndGgpcmV0dXJuIGYoZSx0WzBdWzBdKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoZih0LG5baV0pKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxsPTA7bDxvLmxlbmd0aDtsKyspaWYoZihlLG9bbF0pKXJldHVybiEwO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKWlmKHMobyxlW3VdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9ZVtuXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV07aWYocy5sZW5ndGg+PTMpZm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspaWYoZChzLGlbbF0pKXJldHVybiEwO2lmKG8ocyxpLHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKHModCxlKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihjKGVbbl0sdCxyKSlyZXR1cm4hMH1mb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZihjKHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aC0xO3IrKylmb3IodmFyIG49dFtyXSxpPXRbcisxXSxhPTA7YTxlLmxlbmd0aC0xO2ErKyl7dmFyIG89ZVthXSxzPWVbYSsxXTtpZih1KG4saSxvLHMpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybihyLnktdC55KSooZS54LXQueCk+KGUueS10LnkpKihyLngtdC54KX1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiBsKHQscixuKSE9PWwoZSxyLG4pJiZsKHQsZSxyKSE9PWwodCxlLG4pfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXIqcjtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZGlzdFNxcihlWzBdKTxuO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGg7aSsrKXtpZihoKHQsZVtpLTFdLGVbaV0pPG4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gaTwwP3QuZGlzdFNxcihlKTppPjE/dC5kaXN0U3FyKHIpOnQuZGlzdFNxcihyLnN1YihlKS5fbXVsdChpKS5fYWRkKGUpKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByLG4saSxhPSExLG89MDtvPHQubGVuZ3RoO28rKyl7cj10W29dO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGgtMTtzPHIubGVuZ3RoO2w9cysrKW49cltzXSxpPXJbbF0sbi55PmUueSE9aS55PmUueSYmZS54PChpLngtbi54KSooZS55LW4ueSkvKGkueS1uLnkpK24ueCYmKGE9IWEpfXJldHVybiBhfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ITEsbj0wLGk9dC5sZW5ndGgtMTtuPHQubGVuZ3RoO2k9bisrKXt2YXIgYT10W25dLG89dFtpXTthLnk+ZS55IT1vLnk+ZS55JiZlLng8KG8ueC1hLngpKihlLnktYS55KS8oby55LWEueSkrYS54JiYocj0hcil9cmV0dXJuIHJ9ZS5leHBvcnRzPXttdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aVBvaW50Om4sbXVsdGlQb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbjppLG11bHRpUG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZTphfX0se31dLDQzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5tYXg9dCx0aGlzLm9uUmVtb3ZlPWUsdGhpcy5yZXNldCgpfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSl0aGlzLm9uUmVtb3ZlKHRoaXMuZGF0YVt0XSk7cmV0dXJuIHRoaXMuZGF0YT17fSx0aGlzLm9yZGVyPVtdLHRoaXN9LG4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaGFzKHQpKXRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZih0KSwxKSx0aGlzLmRhdGFbdF09ZSx0aGlzLm9yZGVyLnB1c2godCk7ZWxzZSBpZih0aGlzLmRhdGFbdF09ZSx0aGlzLm9yZGVyLnB1c2godCksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciByPXRoaXMuZ2V0KHRoaXMub3JkZXJbMF0pO3ImJnRoaXMub25SZW1vdmUocil9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLmRhdGF9LG4ucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcmRlcn0sbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmhhcyh0KSlyZXR1cm4gbnVsbDt2YXIgZT10aGlzLmRhdGFbdF07cmV0dXJuIGRlbGV0ZSB0aGlzLmRhdGFbdF0sdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHQpLDEpLGV9LG4ucHJvdG90eXBlLnNldE1heFNpemU9ZnVuY3Rpb24odCl7Zm9yKHRoaXMubWF4PXQ7dGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXg7KXt2YXIgZT10aGlzLmdldCh0aGlzLm9yZGVyWzBdKTtlJiZ0aGlzLm9uUmVtb3ZlKGUpfXJldHVybiB0aGlzfX0se31dLDQzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtpZighKHI9cnx8by5BQ0NFU1NfVE9LRU4pJiZvLlJFUVVJUkVfQUNDRVNTX1RPS0VOKXRocm93IG5ldyBFcnJvcigiQW4gQVBJIGFjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCB0byB1c2UgTWFwYm94IEdMLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9kZXZlbG9wZXJzL2FwaS8jYWNjZXNzLXRva2VucyIpO2lmKHQ9dC5yZXBsYWNlKC9ebWFwYm94OlwvXC8vLG8uQVBJX1VSTCtlKSx0Kz0tMSE9PXQuaW5kZXhPZigiPyIpPyImYWNjZXNzX3Rva2VuPSI6Ij9hY2Nlc3NfdG9rZW49IixvLlJFUVVJUkVfQUNDRVNTX1RPS0VOKXtpZigicyI9PT1yWzBdKXRocm93IG5ldyBFcnJvcigiVXNlIGEgcHVibGljIGFjY2VzcyB0b2tlbiAocGsuKikgd2l0aCBNYXBib3ggR0wgSlMsIG5vdCBhIHNlY3JldCBhY2Nlc3MgdG9rZW4gKHNrLiopLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9kZXZlbG9wZXJzL2FwaS8jYWNjZXNzLXRva2VucyIpO3QrPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdD8iPyIrdDoiIn1mdW5jdGlvbiBhKHQpe3JldHVybiB0LmFjY2Vzc190b2tlbiYmInRrLiI9PT10LmFjY2Vzc190b2tlbi5zbGljZSgwLDMpP3UuZXh0ZW5kKHt9LHQse2FjY2Vzc190b2tlbjpvLkFDQ0VTU19UT0tFTn0pOnR9dmFyIG89dCgiLi9jb25maWciKSxzPXQoIi4vYnJvd3NlciIpLGw9dCgidXJsIiksdT10KCIuL3V0aWwiKTtlLmV4cG9ydHMubm9ybWFsaXplU3R5bGVVUkw9ZnVuY3Rpb24odCxlKXt2YXIgcj1sLnBhcnNlKHQpO3JldHVybiJtYXBib3g6IiE9PXIucHJvdG9jb2w/dDpuKCJtYXBib3g6LyIrci5wYXRobmFtZStpKHIucXVlcnkpLCIvc3R5bGVzL3YxLyIsZSl9LGUuZXhwb3J0cy5ub3JtYWxpemVTb3VyY2VVUkw9ZnVuY3Rpb24odCxlKXtyZXR1cm4ibWFwYm94OiIhPT1sLnBhcnNlKHQpLnByb3RvY29sP3Q6bih0KyIuanNvbiIsIi92NC8iLGUpKyImc2VjdXJlIn0sZS5leHBvcnRzLm5vcm1hbGl6ZUdseXBoc1VSTD1mdW5jdGlvbih0LGUpe3ZhciByPWwucGFyc2UodCk7cmV0dXJuIm1hcGJveDoiIT09ci5wcm90b2NvbD90Om4oIm1hcGJveDovLyIrci5wYXRobmFtZS5zcGxpdCgiLyIpWzFdKyIve2ZvbnRzdGFja30ve3JhbmdlfS5wYmYiK2koci5xdWVyeSksIi9mb250cy92MS8iLGUpfSxlLmV4cG9ydHMubm9ybWFsaXplU3ByaXRlVVJMPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWwucGFyc2UodCk7cmV0dXJuIm1hcGJveDoiIT09by5wcm90b2NvbD8oby5wYXRobmFtZSs9ZStyLGwuZm9ybWF0KG8pKTpuKCJtYXBib3g6LyIrby5wYXRobmFtZSsiL3Nwcml0ZSIrZStyK2koby5xdWVyeSksIi9zdHlsZXMvdjEvIixhKX0sZS5leHBvcnRzLm5vcm1hbGl6ZVRpbGVVUkw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWwucGFyc2UodCwhMCk7aWYoIWUpcmV0dXJuIHQ7aWYoIm1hcGJveDoiIT09bC5wYXJzZShlKS5wcm90b2NvbClyZXR1cm4gdDt2YXIgaT1zLnN1cHBvcnRzV2VicD8iLndlYnAiOiIkMSIsbz1zLmRldmljZVBpeGVsUmF0aW8+PTJ8fDUxMj09PXI/IkAyeCI6IiI7cmV0dXJuIGwuZm9ybWF0KHtwcm90b2NvbDpuLnByb3RvY29sLGhvc3RuYW1lOm4uaG9zdG5hbWUscGF0aG5hbWU6bi5wYXRobmFtZS5yZXBsYWNlKC8oXC4oPzpwbmd8anBnKVxkKikvLG8raSkscXVlcnk6YShuLnF1ZXJ5KX0pfX0seyIuL2Jyb3dzZXIiOjQyNCwiLi9jb25maWciOjQyOSwiLi91dGlsIjo0NDAsdXJsOjU0M31dLDQzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXtmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiByKCl7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5tZW1iZXJzPWUucHJvdG90eXBlLm1lbWJlcnN9dmFyIG49SlNPTi5zdHJpbmdpZnkodCk7aWYodltuXSlyZXR1cm4gdltuXTt2b2lkIDA9PT10LmFsaWdubWVudCYmKHQuYWxpZ25tZW50PTEpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZi5wcm90b3R5cGUpO3ZhciBzPTAsdT0wLGc9WyJVaW50OCJdO3JldHVybiBlLnByb3RvdHlwZS5tZW1iZXJzPXQubWVtYmVycy5tYXAoZnVuY3Rpb24ocil7cj17bmFtZTpyLm5hbWUsdHlwZTpyLnR5cGUsCmNvbXBvbmVudHM6ci5jb21wb25lbnRzfHwxfSxwKHIubmFtZS5sZW5ndGgpLHAoci50eXBlIGluIG0pLGcuaW5kZXhPZihyLnR5cGUpPDAmJmcucHVzaChyLnR5cGUpO3ZhciBuPW8oci50eXBlKTt1PU1hdGgubWF4KHUsbiksci5vZmZzZXQ9cz1hKHMsTWF0aC5tYXgodC5hbGlnbm1lbnQsbikpO2Zvcih2YXIgaT0wO2k8ci5jb21wb25lbnRzO2krKylPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsci5uYW1lKygxPT09ci5jb21wb25lbnRzPyIiOmkpLHtnZXQ6YyhyLGkpLHNldDpoKHIsaSl9KTtyZXR1cm4gcys9bipyLmNvbXBvbmVudHMscn0pLGUucHJvdG90eXBlLmFsaWdubWVudD10LmFsaWdubWVudCxlLnByb3RvdHlwZS5zaXplPWEocyxNYXRoLm1heCh1LHQuYWxpZ25tZW50KSksci5zZXJpYWxpemU9aSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxyLnByb3RvdHlwZS5TdHJ1Y3RUeXBlPWUsci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PWUucHJvdG90eXBlLnNpemUsci5wcm90b3R5cGUuZW1wbGFjZUJhY2s9bChlLnByb3RvdHlwZS5tZW1iZXJzLGUucHJvdG90eXBlLnNpemUpLHIucHJvdG90eXBlLl91c2VkVHlwZXM9Zyx2W25dPXIscn1mdW5jdGlvbiBpKCl7cmV0dXJue21lbWJlcnM6dGhpcy5wcm90b3R5cGUuU3RydWN0VHlwZS5wcm90b3R5cGUubWVtYmVycyxhbGlnbm1lbnQ6dGhpcy5wcm90b3R5cGUuU3RydWN0VHlwZS5wcm90b3R5cGUuYWxpZ25tZW50LGJ5dGVzUGVyRWxlbWVudDp0aGlzLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnR9fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX1mdW5jdGlvbiBvKHQpe3JldHVybiBtW3RdLkJZVEVTX1BFUl9FTEVNRU5UfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT0idmFyIGkgPSB0aGlzLmxlbmd0aDtcbnRoaXMucmVzaXplKHRoaXMubGVuZ3RoICsgMSk7XG4iLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGw9dFthXSx1PW8obC50eXBlKTtyLmluZGV4T2YodSk8MCYmKHIucHVzaCh1KSxpKz0idmFyIG8iK3UudG9GaXhlZCgwKSsiID0gaSAqICIrKGUvdSkudG9GaXhlZCgwKSsiO1xuIik7Zm9yKHZhciBjPTA7YzxsLmNvbXBvbmVudHM7YysrKXt2YXIgaD0idiIrbi5sZW5ndGgsZj0ibyIrdS50b0ZpeGVkKDApKyIgKyAiKyhsLm9mZnNldC91K2MpLnRvRml4ZWQoMCk7aSs9InRoaXMuIitzKGwudHlwZSkrIlsiK2YrIl0gPSAiK2grIjtcbiIsbi5wdXNoKGgpfX1yZXR1cm4gaSs9InJldHVybiBpOyIsbmV3IEZ1bmN0aW9uKG4saSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSJ0aGlzLl9wb3MiK28odC50eXBlKS50b0ZpeGVkKDApLG49KHQub2Zmc2V0L28odC50eXBlKStlKS50b0ZpeGVkKDApLGk9cisiICsgIituO3JldHVybiJ0aGlzLl9zdHJ1Y3RBcnJheS4iK3ModC50eXBlKSsiWyIraSsiXSJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBuZXcgRnVuY3Rpb24oW10sInJldHVybiAiK3UodCxlKSsiOyIpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFsieCJdLHUodCxlKSsiID0geDsiKX1mdW5jdGlvbiBmKHQsZSl7dGhpcy5fc3RydWN0QXJyYXk9dCx0aGlzLl9wb3MxPWUqdGhpcy5zaXplLHRoaXMuX3BvczI9dGhpcy5fcG9zMS8yLHRoaXMuX3BvczQ9dGhpcy5fcG9zMS80LHRoaXMuX3Bvczg9dGhpcy5fcG9zMS84fWZ1bmN0aW9uIGQodCl7dm9pZCAwIT09dD8odGhpcy5hcnJheUJ1ZmZlcj10LmFycmF5QnVmZmVyLHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuY2FwYWNpdHk9dGhpcy5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoL3RoaXMuYnl0ZXNQZXJFbGVtZW50LHRoaXMuX3JlZnJlc2hWaWV3cygpKToodGhpcy5jYXBhY2l0eT0tMSx0aGlzLnJlc2l6ZSgwKSl9dmFyIHA9dCgiYXNzZXJ0Iik7ZS5leHBvcnRzPW47dmFyIG09e0ludDg6SW50OEFycmF5LFVpbnQ4OlVpbnQ4QXJyYXksVWludDhDbGFtcGVkOlVpbnQ4Q2xhbXBlZEFycmF5LEludDE2OkludDE2QXJyYXksVWludDE2OlVpbnQxNkFycmF5LEludDMyOkludDMyQXJyYXksVWludDMyOlVpbnQzMkFycmF5LEZsb2F0MzI6RmxvYXQzMkFycmF5LEZsb2F0NjQ6RmxvYXQ2NEFycmF5fSx2PXt9O2QucHJvdG90eXBlLkRFRkFVTFRfQ0FQQUNJVFk9MTI4LGQucHJvdG90eXBlLlJFU0laRV9NVUxUSVBMSUVSPTUsZC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJpbSgpLHtsZW5ndGg6dGhpcy5sZW5ndGgsYXJyYXlCdWZmZXI6dGhpcy5hcnJheUJ1ZmZlcn19LGQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHRoaXMuU3RydWN0VHlwZSh0aGlzLHQpfSxkLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGghPT10aGlzLmNhcGFjaXR5JiYodGhpcy5jYXBhY2l0eT10aGlzLmxlbmd0aCx0aGlzLmFycmF5QnVmZmVyPXRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCx0aGlzLmxlbmd0aCp0aGlzLmJ5dGVzUGVyRWxlbWVudCksdGhpcy5fcmVmcmVzaFZpZXdzKCkpfSxkLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg9dCx0PnRoaXMuY2FwYWNpdHkpe3RoaXMuY2FwYWNpdHk9TWF0aC5tYXgodCxNYXRoLmZsb29yKHRoaXMuY2FwYWNpdHkqdGhpcy5SRVNJWkVfTVVMVElQTElFUiksdGhpcy5ERUZBVUxUX0NBUEFDSVRZKSx0aGlzLmFycmF5QnVmZmVyPW5ldyBBcnJheUJ1ZmZlcih0aGlzLmNhcGFjaXR5KnRoaXMuYnl0ZXNQZXJFbGVtZW50KTt2YXIgZT10aGlzLnVpbnQ4O3RoaXMuX3JlZnJlc2hWaWV3cygpLGUmJnRoaXMudWludDguc2V0KGUpfX0sZC5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5fdXNlZFR5cGVzLmxlbmd0aDt0Kyspe3ZhciBlPXRoaXMuX3VzZWRUeXBlc1t0XTt0aGlzW3MoZSldPW5ldyBtW2VdKHRoaXMuYXJyYXlCdWZmZXIpfX0sZC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQ7bjxlO24rKyl7dmFyIGk9dGhpcy5nZXQobik7ci5wdXNoKGkpfXJldHVybiByfX0se2Fzc2VydDo0NX1dLDQzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGUucmVwbGFjZSgveyhbXnt9XSspfS9nLGZ1bmN0aW9uKGUscil7cmV0dXJuIHIgaW4gdD90W3JdOiIifSl9ZS5leHBvcnRzPW59LHt9XSw0NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidW5pdGJlemllciIpLGk9dCgiLi4vZ2VvL2Nvb3JkaW5hdGUiKTtyLmVhc2VDdWJpY0luT3V0PWZ1bmN0aW9uKHQpe2lmKHQ8PTApcmV0dXJuIDA7aWYodD49MSlyZXR1cm4gMTt2YXIgZT10KnQscj1lKnQ7cmV0dXJuIDQqKHQ8LjU/cjozKih0LWUpK3ItLjc1KX0sci5iZXppZXI9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bmV3IG4odCxlLHIsaSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhLnNvbHZlKHQpfX0sci5lYXNlPXIuYmV6aWVyKC4yNSwuMSwuMjUsMSksci5jbGFtcD1mdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgoZSx0KSl9LHIud3JhcD1mdW5jdGlvbih0LGUscil7dmFyIG49ci1lLGk9KCh0LWUpJW4rbiklbitlO3JldHVybiBpPT09ZT9yOml9LHIuY29hbGVzY2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgZT1hcmd1bWVudHNbdF07aWYobnVsbCE9PWUmJnZvaWQgMCE9PWUpcmV0dXJuIGV9fSxyLmFzeW5jQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZighdC5sZW5ndGgpcmV0dXJuIHIobnVsbCxbXSk7dmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkodC5sZW5ndGgpLGE9bnVsbDt0LmZvckVhY2goZnVuY3Rpb24odCxvKXtlKHQsZnVuY3Rpb24odCxlKXt0JiYoYT10KSxpW29dPWUsMD09LS1uJiZyKGEsaSl9KX0pfSxyLmtleXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHQpbiBpbiBlfHxyLnB1c2gobik7cmV0dXJuIHJ9LHIuZXh0ZW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPWFyZ3VtZW50c1tlXTtmb3IodmFyIG4gaW4gcil0W25dPXJbbl19cmV0dXJuIHR9LHIuZXh0ZW5kQWxsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscikpO3JldHVybiB0fSxyLmluaGVyaXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90LnByb3RvdHlwZTp0LGk9T2JqZWN0LmNyZWF0ZShuKTtyZXR1cm4gci5leHRlbmRBbGwoaSxlKSxpfSxyLnBpY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kgaW4gdCYmKHJbaV09dFtpXSl9cmV0dXJuIHJ9O3ZhciBhPTE7ci51bmlxdWVJZD1mdW5jdGlvbigpe3JldHVybiBhKyt9LHIuZGVib3VuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe249YXJndW1lbnRzLGNsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmFwcGx5KG51bGwsbil9LGUpfX0sci5iaW5kQWxsPWZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KX0sci5iaW5kSGFuZGxlcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJjA9PT1lLmluZGV4T2YoIl9vbiIpJiYodFtlXT10W2VdLmJpbmQodCkpfSxyLnNldE9wdGlvbnM9ZnVuY3Rpb24odCxlKXt0Lmhhc093blByb3BlcnR5KCJvcHRpb25zIil8fCh0Lm9wdGlvbnM9dC5vcHRpb25zP09iamVjdC5jcmVhdGUodC5vcHRpb25zKTp7fSk7Zm9yKHZhciByIGluIGUpdC5vcHRpb25zW3JdPWVbcl07cmV0dXJuIHQub3B0aW9uc30sci5nZXRDb29yZGluYXRlc0NlbnRlcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxhPS0xLzAsbz0wO288dC5sZW5ndGg7bysrKWU9TWF0aC5taW4oZSx0W29dLmNvbHVtbikscj1NYXRoLm1pbihyLHRbb10ucm93KSxuPU1hdGgubWF4KG4sdFtvXS5jb2x1bW4pLGE9TWF0aC5tYXgoYSx0W29dLnJvdyk7dmFyIHM9bi1lLGw9YS1yLHU9TWF0aC5tYXgocyxsKTtyZXR1cm4gbmV3IGkoKGUrbikvMiwocithKS8yLDApLnpvb21UbyhNYXRoLmZsb29yKC1NYXRoLmxvZyh1KS9NYXRoLkxOMikpfSxyLmVuZHNXaXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9LHIuc3RhcnRzV2l0aD1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dC5pbmRleE9mKGUpfSxyLm1hcE9iamVjdD1mdW5jdGlvbih0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpbltpXT1lLmNhbGwocnx8dGhpcyx0W2ldLGksdCk7cmV0dXJuIG59LHIuZmlsdGVyT2JqZWN0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdCllLmNhbGwocnx8dGhpcyx0W2ldLGksdCkmJihuW2ldPXRbaV0pO3JldHVybiBufSxyLmRlZXBFcXVhbD1mdW5jdGlvbiB0KGUscil7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoIUFycmF5LmlzQXJyYXkocil8fGUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoIXQoZVtuXSxyW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT09cil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiExO2lmKE9iamVjdC5rZXlzKGUpLmxlbmd0aCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGkgaW4gZSlpZighdChlW2ldLHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiBlPT09cn0sci5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcChyLmNsb25lKToib2JqZWN0Ij09dHlwZW9mIHQ/ci5tYXBPYmplY3QodCxyLmNsb25lKTp0fSxyLmFycmF5c0ludGVyc2VjdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGUuaW5kZXhPZih0W3JdKT49MClyZXR1cm4hMDtyZXR1cm4hMX07dmFyIG89e307ci53YXJuT25jZT1mdW5jdGlvbih0KXtvW3RdfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odCksb1t0XT0hMCl9fSx7Ii4uL2dlby9jb29yZGluYXRlIjozMzYsdW5pdGJlemllcjo1NDJ9XSw0NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsbnVsbCE9dC5pZCYmKHRoaXMuaWQ9dC5pZCl9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e3R5cGU6IkZlYXR1cmUiLGdldCBnZW9tZXRyeSgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxzZXQgZ2VvbWV0cnkodCl7dGhpcy5fZ2VvbWV0cnk9dH0sdG9KU09OOmZ1bmN0aW9uKCl7dmFyIHQ9e307Zm9yKHZhciBlIGluIHRoaXMpIl9nZW9tZXRyeSIhPT1lJiYiX3ZlY3RvclRpbGVGZWF0dXJlIiE9PWUmJiJ0b0pTT04iIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9fX0se31dLDQ0MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17X2FyZ3M6W1t7cmF3OiJtYXBib3gtZ2xAXjAuMjIuMCIsc2NvcGU6bnVsbCxlc2NhcGVkTmFtZToibWFwYm94LWdsIixuYW1lOiJtYXBib3gtZ2wiLHJhd1NwZWM6Il4wLjIyLjAiLHNwZWM6Ij49MC4yMi4wIDwwLjIzLjAiLHR5cGU6InJhbmdlIn0sIi9ob21lL2V0aWVubmUvRG9jdW1lbnRzL3Bsb3RseS9wbG90bHkuanMiXV0sX2Zyb206Im1hcGJveC1nbEA+PTAuMjIuMCA8MC4yMy4wIixfaWQ6Im1hcGJveC1nbEAwLjIyLjEiLF9pbkNhY2hlOiEwLF9sb2NhdGlvbjoiL21hcGJveC1nbCIsX25vZGVWZXJzaW9uOiI0LjQuNSIsX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6e2hvc3Q6InBhY2thZ2VzLTEyLXdlc3QuaW50ZXJuYWwubnBtanMuY29tIix0bXA6InRtcC9tYXBib3gtZ2wtMC4yMi4xLnRnel8xNDcxNTQ5ODkxNjcwXzAuODc2MjYzMDU2NjQ4ODk1MSJ9LF9ucG1Vc2VyOntuYW1lOiJsdWNhc3dvaiIsZW1haWw6Imx1Y2FzQGx1Y2Fzd29qLmNvbSJ9LF9ucG1WZXJzaW9uOiIyLjE1LjUiLF9waGFudG9tQ2hpbGRyZW46e30sX3JlcXVlc3RlZDp7cmF3OiJtYXBib3gtZ2xAXjAuMjIuMCIsc2NvcGU6bnVsbCxlc2NhcGVkTmFtZToibWFwYm94LWdsIixuYW1lOiJtYXBib3gtZ2wiLHJhd1NwZWM6Il4wLjIyLjAiLHNwZWM6Ij49MC4yMi4wIDwwLjIzLjAiLHR5cGU6InJhbmdlIn0sX3JlcXVpcmVkQnk6WyIvIl0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYXBib3gtZ2wvLS9tYXBib3gtZ2wtMC4yMi4xLnRneiIsX3NoYXN1bToiOTJhOTY1NTQ3ZDRjMmYyNGMyMmNiYzQ4N2VlZGE0ODY5NGNiNjI3YSIsX3Nocmlua3dyYXA6bnVsbCxfc3BlYzoibWFwYm94LWdsQF4wLjIyLjAiLF93aGVyZToiL2hvbWUvZXRpZW5uZS9Eb2N1bWVudHMvcGxvdGx5L3Bsb3RseS5qcyIsYnJvd3Nlcjp7Ii4vanMvdXRpbC9hamF4LmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvYWpheC5qcyIsIi4vanMvdXRpbC9icm93c2VyLmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvYnJvd3Nlci5qcyIsIi4vanMvdXRpbC9jYW52YXMuanMiOiIuL2pzL3V0aWwvYnJvd3Nlci9jYW52YXMuanMiLCIuL2pzL3V0aWwvZG9tLmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvZG9tLmpzIiwiLi9qcy91dGlsL3dlYl93b3JrZXIuanMiOiIuL2pzL3V0aWwvYnJvd3Nlci93ZWJfd29ya2VyLmpzIn0sYnVnczp7dXJsOiJodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMifSxkZXBlbmRlbmNpZXM6e2Nzc2NvbG9ycGFyc2VyOiJeMS4wLjIiLGVhcmN1dDoiXjIuMC4zIiwiZmVhdHVyZS1maWx0ZXIiOiJeMi4yLjAiLCJnZW9qc29uLXJld2luZCI6Il4wLjEuMCIsImdlb2pzb24tdnQiOiJeMi40LjAiLCJnbC1tYXRyaXgiOiJeMi4zLjEiLCJncmlkLWluZGV4IjoiXjEuMC4wIiwibWFwYm94LWdsLWZ1bmN0aW9uIjoiXjEuMi4xIiwibWFwYm94LWdsLXNoYWRlcnMiOiJnaXRodWI6bWFwYm94L21hcGJveC1nbC1zaGFkZXJzI2RlMmFiMDA3NDU1YWEyNTg3YzU1MjY5NGM2ODU4M2Y5NGM5ZjI3NDciLCJtYXBib3gtZ2wtc3R5bGUtc3BlYyI6ImdpdGh1YjptYXBib3gvbWFwYm94LWdsLXN0eWxlLXNwZWMjODNiMWEzZTU4MzdkNzg1YWY1ODJlZmQ1ZWQxYTIxMmYyZGY2YTRhZSIsIm1hcGJveC1nbC1zdXBwb3J0ZWQiOiJeMS4yLjAiLHBiZjoiXjEuMy4yIixwbmdqczoiXjIuMi4wIiwicG9pbnQtZ2VvbWV0cnkiOiJeMC4wLjAiLHF1aWNrc2VsZWN0OiJeMS4wLjAiLHJlcXVlc3Q6Il4yLjM5LjAiLCJyZXNvbHZlLXVybCI6Il4wLjIuMSIsInNoZWxmLXBhY2siOiJeMS4wLjAiLHN1cGVyY2x1c3RlcjoiXjIuMC4xIix1bmFzc2VydGlmeToiXjIuMC4wIix1bml0YmV6aWVyOiJeMC4wLjAiLCJ2ZWN0b3ItdGlsZSI6Il4xLjMuMCIsInZ0LXBiZiI6Il4yLjAuMiIsd2Vid29ya2lmeToiXjEuMy4wIiwid2hvb3RzLWpzIjoiXjIuMC4wIn0sZGVzY3JpcHRpb246IkEgV2ViR0wgaW50ZXJhY3RpdmUgbWFwcyBsaWJyYXJ5IixkZXZEZXBlbmRlbmNpZXM6eyJiYWJlbC1wcmVzZXQtcmVhY3QiOiJeNi4xMS4xIixiYWJlbGlmeToiXjcuMy4wIixiZW5jaG1hcms6In4yLjEuMCIsYnJvd3NlcmlmeToiXjEzLjAuMCIsY2xpcGJvYXJkOiJeMS41LjEyIiwiY29uY2F0LXN0cmVhbSI6IjEuNS4xIixjb3ZlcmFsbHM6Il4yLjExLjgiLGRvY3RyaW5lOiJeMS4yLjEiLGRvY3VtZW50YXRpb246Imh0dHBzOi8vZ2l0aHViLmNvbS9kb2N1bWVudGF0aW9uanMvZG9jdW1lbnRhdGlvbi9hcmNoaXZlL2JiNDE2MTljNzM0ZTU5ZWYzZmJjMzY0ODYxMDAzMmVmY2ZkYWFhY2UudGFyLmd6IiwiZG9jdW1lbnRhdGlvbi10aGVtZS11dGlscyI6IjMuMC4wIixlbnZpZnk6Il4zLjQuMCIsZXNsaW50OiJeMi41LjMiLCJlc2xpbnQtY29uZmlnLW1vdXJuZXIiOiJeMi4wLjAiLCJlc2xpbnQtcGx1Z2luLWh0bWwiOiJeMS41LjEiLGdsOiJeNC4wLjEiLGhhbmRsZWJhcnM6IjQuMC41IiwiaGlnaGxpZ2h0LmpzIjoiOS4zLjAiLGlzdGFuYnVsOiJeMC40LjIiLCJqc29uLWxvYWRlciI6Il4wLjUuNCIsbG9kYXNoOiJeNC4xMy4xIiwibWFwYm94LWdsLXRlc3Qtc3VpdGUiOiJnaXRodWI6bWFwYm94L21hcGJveC1nbC10ZXN0LXN1aXRlIzdiYWJhYjUyZmIwMjc4OGViYmMzODM4NDEzOWJmMzUwZThlMzg1NTIiLCJtZW1vcnktZnMiOiJeMC4zLjAiLG1pbmlmeWlmeToiXjcuMC4xIiwibnBtLXJ1bi1hbGwiOiJeMy4wLjAiLG55YzoiNi40LjAiLHByb3h5cXVpcmU6Il4xLjcuOSIscmVtYXJrOiI0LjIuMiIsInJlbWFyay1odG1sIjoiMy4wLjAiLHNpbm9uOiJeMS4xNS40IixzdDoiXjEuMi4wIix0YXA6Il41LjcuMCIsInRyYW5zZm9ybS1sb2FkZXIiOiJeMC4yLjMiLCJ1bmlzdC11dGlsLXZpc2l0IjoiMS4xLjAiLHZpbnlsOiIxLjEuMSIsInZpbnlsLWZzIjoiMi40LjMiLHdhdGNoaWZ5OiJeMy43LjAiLHdlYnBhY2s6Il4xLjEzLjEiLCJ3ZWJ3b3JraWZ5LXdlYnBhY2siOiJeMS4xLjMifSxkaXJlY3Rvcmllczp7fSxkaXN0OntzaGFzdW06IjkyYTk2NTU0N2Q0YzJmMjRjMjJjYmM0ODdlZWRhNDg2OTRjYjYyN2EiLHRhcmJhbGw6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hcGJveC1nbC8tL21hcGJveC1nbC0wLjIyLjEudGd6In0sZW5naW5lczp7bm9kZToiPj00LjAuMCJ9LGdpdEhlYWQ6IjEzYTkwMTUzNDFmMDYwMmNjYjU1Yzk4YzUzMDc5ODM4YWQ0YjcwYjUiLGhvbWVwYWdlOiJodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcyNyZWFkbWUiLGxpY2Vuc2U6IkJTRC0zLUNsYXVzZSIsbWFpbjoianMvbWFwYm94LWdsLmpzIixtYWludGFpbmVyczpbe25hbWU6ImFhcm9ubGlkbWFuIixlbWFpbDoiYWFyb25saWRtYW5AZ21haWwuY29tIn0se25hbWU6ImFqYXNodG9uIixlbWFpbDoiYWouYXNodG9uQGdtYWlsLmNvbSJ9LHtuYW1lOiJhbnNpcyIsZW1haWw6ImFuc2lzLmJyYW1tYW5pc0BnbWFpbC5jb20ifSx7bmFtZToiYmVyZ3dlcmtnaXMiLGVtYWlsOiJ3YkBiZXJnd2Vyay1naXMuYXQifSx7bmFtZToiYmhvdXNlbCIsZW1haWw6ImJyeWFuQG1hcGJveC5jb20ifSx7bmFtZToiYnN1ZGVrdW0iLGVtYWlsOiJib2JieUBtYXBib3guY29tIn0se25hbWU6ImNhbWlsbGVhbm5lIixlbWFpbDoiY2FtaWxsZUBtYXBib3guY29tIn0se25hbWU6ImRub21hZGIiLGVtYWlsOiJkYW1vbkBtYXBib3guY29tIn0se25hbWU6ImR0aG9tcHNvbiIsZW1haWw6ImR0aG9tcHNvbkBnbWFpbC5jb20ifSx7bmFtZToiZW1pbHltY2FmZWUiLGVtYWlsOiJlbWlseUBtYXBib3guY29tIn0se25hbWU6ImZsaXBwbW9rZSIsZW1haWw6ImZsaXBwbW9rZUBnbWFpbC5jb20ifSx7bmFtZToiZnJlZW5lcmQiLGVtYWlsOiJzcGFtQGZyZWVuZXJkLmRlIn0se25hbWU6ImdyZXRhY2IiLGVtYWlsOiJjYXJvbEBtYXBib3guY29tIn0se25hbWU6ImlhbjI5IixlbWFpbDoiaWFuLnZpbGxlZGFAZ21haWwuY29tIn0se25hbWU6ImlhbnNod2FyZCIsZW1haWw6ImlhbkBtYXBib3guY29tIn0se25hbWU6ImluZ2FsbHMiLGVtYWlsOiJuaWNob2xhcy5pbmdhbGxzQGdtYWlsLmNvbSJ9LHtuYW1lOiJqZmlyZWJhdWdoIixlbWFpbDoiam9obi5maXJlYmF1Z2hAZ21haWwuY29tIn0se25hbWU6ImpycHJ1aXQxIixlbWFpbDoiamFrZUBqYWtlcHJ1aXR0LmNvbSJ9LHtuYW1lOiJrYXJlbnpzaGVhIixlbWFpbDoia2FyZW5AbWFwYm94LmNvbSJ9LHtuYW1lOiJra2FlZmVyIixlbWFpbDoia2thZWZlckBnbWFpbC5jb20ifSx7bmFtZToibGJ1ZCIsZW1haWw6ImxhdXJlbkBtYXBib3guY29tIn0se25hbWU6Imx1Y2Fzd29qIixlbWFpbDoibHVjYXNAbHVjYXN3b2ouY29tIn0se25hbWU6Imx4YmFydGgiLGVtYWlsOiJhbGV4QG1hcGJveC5jb20ifSx7bmFtZToibHl6aWRpYW1vbmQiLGVtYWlsOiJseXppQG1hcGJveC5jb20ifSx7bmFtZToibWFwYm94LWFkbWluIixlbWFpbDoiYWNjb3VudHNAbWFwYm94LmNvbSJ9LHtuYW1lOiJtYXRlb3YiLGVtYWlsOiJtYXR0QG1hcGJveC5jb20ifSx7bmFtZToibWN3aGl0dGVtb3JlIixlbWFpbDoibWN3aGl0dGVtb3JlQGdtYWlsLmNvbSJ9LHtuYW1lOiJtaWNjb2xpcyIsZW1haWw6ImplZmZAbWljY29saXMubmV0In0se25hbWU6Im1pa2Vtb3JyaXMiLGVtYWlsOiJtaWNoYWVsLnBhdHJpY2subW9ycmlzQGdtYWlsLmNvbSJ9LHtuYW1lOiJtb3JnYW5oZXJsb2NrZXIiLGVtYWlsOiJtb3JnYW4uaGVybG9ja2VyQGdtYWlsLmNvbSJ9LHtuYW1lOiJtb3VybmVyIixlbWFpbDoiYWdhZm9ua2luQGdtYWlsLmNvbSJ9LHtuYW1lOiJuaWNraWRsdWdhc2giLGVtYWlsOiJuaWNraUBtYXBib3guY29tIn0se25hbWU6InJjbGFyayIsZW1haWw6InJ5YW4uY2xhcmsuakBnbWFpbC5jb20ifSx7bmFtZToic2FtYW5iYiIsZW1haWw6InNhbWFuQG1hcGJveC5jb20ifSx7bmFtZToic2JtYTQ0IixlbWFpbDoidGxlZUBtYXBib3guY29tIn0se25hbWU6InNjb3RoaXMiLGVtYWlsOiJzY290aGlzQGdtYWlsLmNvbSJ9LHtuYW1lOiJzZ2lsbGllcyIsZW1haWw6InNlYW5AbWFwYm94LmNvbSJ9LHtuYW1lOiJzcHJpbmdtZXllciIsZW1haWw6ImRhbmVAbWFwYm94LmNvbSJ9LHtuYW1lOiJ0aGVtYXJleCIsZW1haWw6InBhdHJpY2tAbWFwYm94LmNvbSJ9LHtuYW1lOiJ0bWN3IixlbWFpbDoidG9tQG1hY3dyaWdodC5vcmcifSx7bmFtZToidHJpc3RlbiIsZW1haWw6InRyaXN0ZW4uYnJvd25AZ21haWwuY29tIn0se25hbWU6IndpbGx3aGl0ZSIsZW1haWw6IndpbGxAbWFwYm94LmNvbSJ9LHtuYW1lOiJ5aGFobiIsZW1haWw6InlvdW5nQG1hcGJveC5jb20ifV0sbmFtZToibWFwYm94LWdsIixvcHRpb25hbERlcGVuZGVuY2llczp7fSxyZWFkbWU6IkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEiLHJlcG9zaXRvcnk6e3R5cGU6ImdpdCIsdXJsOiJnaXQ6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMuZ2l0In0sc2NyaXB0czp7YnVpbGQ6Im5wbSBydW4gYnVpbGQtZG9jcyAjIGludm9rZWQgYnkgcHVibGlzaGVyIHdoZW4gcHVibGlzaGluZyBkb2NzIG9uIHRoZSBtYi1wYWdlcyBicmFuY2giLCJidWlsZC1kZXYiOiJicm93c2VyaWZ5IGpzL21hcGJveC1nbC5qcyAtLWRlYnVnIC0tc3RhbmRhbG9uZSBtYXBib3hnbCA+IGRpc3QvbWFwYm94LWdsLWRldi5qcyAmJiB0YXAgLS1uby1jb3ZlcmFnZSB0ZXN0L2J1aWxkL2Rldi50ZXN0LmpzIiwiYnVpbGQtZG9jcyI6ImRvY3VtZW50YXRpb24gYnVpbGQgLS1naXRodWIgLS1mb3JtYXQgaHRtbCAtYyBkb2N1bWVudGF0aW9uLnltbCAtLXRoZW1lIC4vZG9jcy9fdGhlbWUgLS1vdXRwdXQgZG9jcy9hcGkvIiwiYnVpbGQtbWluIjoiYnJvd3NlcmlmeSBqcy9tYXBib3gtZ2wuanMgLS1kZWJ1ZyAtdCB1bmFzc2VydGlmeSAtLXBsdWdpbiBbbWluaWZ5aWZ5IC0tbWFwIG1hcGJveC1nbC5qcy5tYXAgLS1vdXRwdXQgZGlzdC9tYXBib3gtZ2wuanMubWFwXSAtLXN0YW5kYWxvbmUgbWFwYm94Z2wgPiBkaXN0L21hcGJveC1nbC5qcyAmJiB0YXAgLS1uby1jb3ZlcmFnZSB0ZXN0L2J1aWxkL21pbi50ZXN0LmpzIiwiYnVpbGQtdG9rZW4iOiJicm93c2VyaWZ5IGRlYnVnL2FjY2Vzcy10b2tlbi1zcmMuanMgLS1kZWJ1ZyAtdCBlbnZpZnkgPiBkZWJ1Zy9hY2Nlc3MtdG9rZW4uanMiLGxpbnQ6ImVzbGludCAgLS1pZ25vcmUtcGF0aCAuZ2l0aWdub3JlIGpzIHRlc3QgYmVuY2ggZG9jcy9fcG9zdHMvZXhhbXBsZXMvKi5odG1sIiwib3Blbi1jaGFuZ2VkLWV4YW1wbGVzIjoiZ2l0IGRpZmYgLS1uYW1lLW9ubHkgbWItcGFnZXMgSEVBRCAtLSBkb2NzL19wb3N0cy9leGFtcGxlcy8qLmh0bWwgfCBhd2sgJ3twcmludCBcImh0dHA6Ly8xMjcuMC4wLjE6NDAwMC9tYXBib3gtZ2wtanMvZXhhbXBsZS9cIiBzdWJzdHIoJDAsMzMsbGVuZ3RoKCQwKS0zNyl9JyB8IHhhcmdzIG9wZW4iLHN0YXJ0OiJydW4tcCBidWlsZC10b2tlbiB3YXRjaC1kZXYgd2F0Y2gtYmVuY2ggc3RhcnQtc2VydmVyIiwic3RhcnQtYmVuY2giOiJydW4tcCBidWlsZC10b2tlbiB3YXRjaC1iZW5jaCBzdGFydC1zZXJ2ZXIiLCJzdGFydC1kZWJ1ZyI6InJ1bi1wIGJ1aWxkLXRva2VuIHdhdGNoLWRldiBzdGFydC1zZXJ2ZXIiLCJzdGFydC1kb2NzIjoibnBtIHJ1biBidWlsZC1taW4gJiYgbnBtIHJ1biBidWlsZC1kb2NzICYmIGpla3lsbCBzZXJ2ZSAtdyIsInN0YXJ0LXNlcnZlciI6InN0IC0tbm8tY2FjaGUgLS1sb2NhbGhvc3QgLS1wb3J0IDk5NjYgLS1pbmRleCBpbmRleC5odG1sIC4iLHRlc3Q6Im5wbSBydW4gbGludCAmJiB0YXAgLS1yZXBvcnRlciBkb3QgdGVzdC9qcy8qLyouanMgdGVzdC9idWlsZC93ZWJwYWNrLnRlc3QuanMiLCJ0ZXN0LXN1aXRlIjoibm9kZSB0ZXN0L3JlbmRlci50ZXN0LmpzICYmIG5vZGUgdGVzdC9xdWVyeS50ZXN0LmpzIiwid2F0Y2gtYmVuY2giOiJub2RlIGJlbmNoL2Rvd25sb2FkLWRhdGEuanMgJiYgd2F0Y2hpZnkgYmVuY2gvaW5kZXguanMgLS1wbHVnaW4gW21pbmlmeWlmeSAtLW5vLW1hcF0gLXQgW2JhYmVsaWZ5IC0tcHJlc2V0cyByZWFjdF0gLXQgdW5hc3NlcnRpZnkgLXQgZW52aWZ5IC1vIGJlbmNoL2JlbmNoLmpzIC12Iiwid2F0Y2gtZGV2Ijoid2F0Y2hpZnkganMvbWFwYm94LWdsLmpzIC0tZGVidWcgLS1zdGFuZGFsb25lIG1hcGJveGdsIC1vIGRpc3QvbWFwYm94LWdsLWRldi5qcyAtdiJ9LHZlcnNpb246IjAuMjIuMSJ9fSx7fV0sNDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpbltpXT0wLGk9PT1lJiYobltpXSs9LjUpLGk9PT1yJiYobltpXSs9LjUpO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXtpZigwPT09ZXx8ZT09PSgxPDx0KzEpLTEpcmV0dXJuW107Zm9yKHZhciByPVtdLGk9W10sYT0wO2E8PXQ7KythKWlmKGUmMTw8YSl7ci5wdXNoKG4odCxhLTEsYS0xKSksaS5wdXNoKG51bGwpO2Zvcih2YXIgcz0wO3M8PXQ7KytzKX5lJjE8PHMmJihyLnB1c2gobih0LGEtMSxzLTEpKSxpLnB1c2goW2Esc10pKX12YXIgbD1vKHIpLHU9W107dDpmb3IodmFyIGE9MDthPGwubGVuZ3RoOysrYSl7Zm9yKHZhciBjPWxbYV0saD1bXSxzPTA7czxjLmxlbmd0aDsrK3Mpe2lmKCFpW2Nbc11dKWNvbnRpbnVlIHQ7aC5wdXNoKGlbY1tzXV0uc2xpY2UoKSl9dS5wdXNoKGgpfXJldHVybiB1fWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWkodCxuKTtyZXR1cm4gcn1lLmV4cG9ydHM9YTt2YXIgbz10KCJjb252ZXgtaHVsbCIpfSx7ImNvbnZleC1odWxsIjoxMDF9XSw0NDQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV0qbyx0fWZ1bmN0aW9uIGkodCxlKXt0WzBdWzBdPWVbMF0sdFswXVsxXT1lWzFdLHRbMF1bMl09ZVsyXSx0WzFdWzBdPWVbNF0sdFsxXVsxXT1lWzVdLHRbMV1bMl09ZVs2XSx0WzJdWzBdPWVbOF0sdFsyXVsxXT1lWzldLHRbMl1bMl09ZVsxMF19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfXZhciBvPXQoIi4vbm9ybWFsaXplIikscz10KCJnbC1tYXQ0L2NyZWF0ZSIpLGw9dCgiZ2wtbWF0NC9jbG9uZSIpLHU9dCgiZ2wtbWF0NC9kZXRlcm1pbmFudCIpLGM9dCgiZ2wtbWF0NC9pbnZlcnQiKSxoPXQoImdsLW1hdDQvdHJhbnNwb3NlIiksZj17bGVuZ3RoOnQoImdsLXZlYzMvbGVuZ3RoIiksbm9ybWFsaXplOnQoImdsLXZlYzMvbm9ybWFsaXplIiksZG90OnQoImdsLXZlYzMvZG90IiksY3Jvc3M6dCgiZ2wtdmVjMy9jcm9zcyIpfSxkPXMoKSxwPXMoKSxtPVswLDAsMCwwXSx2PVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sZz1bMCwwLDBdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLHksYil7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksc3x8KHM9WzAsMCwwXSkseXx8KHk9WzAsMCwwLDFdKSxifHwoYj1bMCwwLDAsMV0pLCFvKGQsdCkpcmV0dXJuITE7aWYobChwLGQpLHBbM109MCxwWzddPTAscFsxMV09MCxwWzE1XT0xLE1hdGguYWJzKHUocCk8MWUtOCkpcmV0dXJuITE7dmFyIHg9ZFszXSxfPWRbN10sdz1kWzExXSxNPWRbMTJdLGs9ZFsxM10sQT1kWzE0XSxUPWRbMTVdO2lmKDAhPT14fHwwIT09X3x8MCE9PXcpe21bMF09eCxtWzFdPV8sbVsyXT13LG1bM109VDtpZighYyhwLHApKXJldHVybiExO2gocCxwKSxuKHksbSxwKX1lbHNlIHlbMF09eVsxXT15WzJdPTAseVszXT0xO2lmKGVbMF09TSxlWzFdPWssZVsyXT1BLGkodixkKSxyWzBdPWYubGVuZ3RoKHZbMF0pLGYubm9ybWFsaXplKHZbMF0sdlswXSksc1swXT1mLmRvdCh2WzBdLHZbMV0pLGEodlsxXSx2WzFdLHZbMF0sMSwtc1swXSksclsxXT1mLmxlbmd0aCh2WzFdKSxmLm5vcm1hbGl6ZSh2WzFdLHZbMV0pLHNbMF0vPXJbMV0sc1sxXT1mLmRvdCh2WzBdLHZbMl0pLGEodlsyXSx2WzJdLHZbMF0sMSwtc1sxXSksc1syXT1mLmRvdCh2WzFdLHZbMl0pLGEodlsyXSx2WzJdLHZbMV0sMSwtc1syXSksclsyXT1mLmxlbmd0aCh2WzJdKSxmLm5vcm1hbGl6ZSh2WzJdLHZbMl0pLHNbMV0vPXJbMl0sc1syXS89clsyXSxmLmNyb3NzKGcsdlsxXSx2WzJdKSxmLmRvdCh2WzBdLGcpPDApZm9yKHZhciBTPTA7UzwzO1MrKylyW1NdKj0tMSx2W1NdWzBdKj0tMSx2W1NdWzFdKj0tMSx2W1NdWzJdKj0tMTtyZXR1cm4gYlswXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMSt2WzBdWzBdLXZbMV1bMV0tdlsyXVsyXSwwKSksYlsxXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS12WzBdWzBdK3ZbMV1bMV0tdlsyXVsyXSwwKSksYlsyXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS12WzBdWzBdLXZbMV1bMV0rdlsyXVsyXSwwKSksYlszXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMSt2WzBdWzBdK3ZbMV1bMV0rdlsyXVsyXSwwKSksdlsyXVsxXT52WzFdWzJdJiYoYlswXT0tYlswXSksdlswXVsyXT52WzJdWzBdJiYoYlsxXT0tYlsxXSksdlsxXVswXT52WzBdWzFdJiYoYlsyXT0tYlsyXSksITB9fSx7Ii4vbm9ybWFsaXplIjo0NDUsImdsLW1hdDQvY2xvbmUiOjE3MywiZ2wtbWF0NC9jcmVhdGUiOjE3NCwiZ2wtbWF0NC9kZXRlcm1pbmFudCI6MTc1LCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L3RyYW5zcG9zZSI6MTg5LCJnbC12ZWMzL2Nyb3NzIjoyNzAsImdsLXZlYzMvZG90IjoyNzEsImdsLXZlYzMvbGVuZ3RoIjoyNzIsImdsLXZlYzMvbm9ybWFsaXplIjoyNzR9XSw0NDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzE1XTtpZigwPT09cilyZXR1cm4hMTtmb3IodmFyIG49MS9yLGk9MDtpPDE2O2krKyl0W2ldPWVbaV0qbjtyZXR1cm4hMH19LHt9XSw0NDY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe2lmKDA9PT1jKGUpfHwwPT09YyhyKSlyZXR1cm4hMTt2YXIgaT11KGUsZi50cmFuc2xhdGUsZi5zY2FsZSxmLnNrZXcsZi5wZXJzcGVjdGl2ZSxmLnF1YXRlcm5pb24pLGE9dShyLGQudHJhbnNsYXRlLGQuc2NhbGUsZC5za2V3LGQucGVyc3BlY3RpdmUsZC5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFpfHwhYSkmJihzKHAudHJhbnNsYXRlLGYudHJhbnNsYXRlLGQudHJhbnNsYXRlLG4pLHMocC5za2V3LGYuc2tldyxkLnNrZXcsbikscyhwLnNjYWxlLGYuc2NhbGUsZC5zY2FsZSxuKSxzKHAucGVyc3BlY3RpdmUsZi5wZXJzcGVjdGl2ZSxkLnBlcnNwZWN0aXZlLG4pLGgocC5xdWF0ZXJuaW9uLGYucXVhdGVybmlvbixkLnF1YXRlcm5pb24sbiksbCh0LHAudHJhbnNsYXRlLHAuc2NhbGUscC5za2V3LHAucGVyc3BlY3RpdmUscC5xdWF0ZXJuaW9uKSwhMCl9ZnVuY3Rpb24gaSgpe3JldHVybnt0cmFuc2xhdGU6YSgpLHNjYWxlOmEoMSksc2tldzphKCkscGVyc3BlY3RpdmU6bygpLHF1YXRlcm5pb246bygpfX1mdW5jdGlvbiBhKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZnVuY3Rpb24gbygpe3JldHVyblswLDAsMCwxXX12YXIgcz10KCJnbC12ZWMzL2xlcnAiKSxsPXQoIm1hdDQtcmVjb21wb3NlIiksdT10KCJtYXQ0LWRlY29tcG9zZSIpLGM9dCgiZ2wtbWF0NC9kZXRlcm1pbmFudCIpLGg9dCgicXVhdC1zbGVycCIpLGY9aSgpLGQ9aSgpLHA9aSgpO2UuZXhwb3J0cz1ufSx7ImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjE3NSwiZ2wtdmVjMy9sZXJwIjoyNzMsIm1hdDQtZGVjb21wb3NlIjo0NDQsIm1hdDQtcmVjb21wb3NlIjo0NDcsInF1YXQtc2xlcnAiOjQ4N31dLDQ0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjE3NCwiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6MTc3LCJnbC1tYXQ0L2lkZW50aXR5IjoxNzgsImdsLW1hdDQvbXVsdGlwbHkiOjE4MSwiZ2wtbWF0NC9zY2FsZSI6MTg3LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6MTg4fV0sNDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5fY29tcG9uZW50cz10LnNsaWNlKCksdGhpcy5fdGltZT1bMF0sdGhpcy5wcmV2TWF0cml4PXQuc2xpY2UoKSx0aGlzLm5leHRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRJbnZlcnNlPXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZFVwPVswLDAsMF0sdGhpcy5jb21wdXRlZENlbnRlcj1bMCwwLDBdLHRoaXMuY29tcHV0ZWRSYWRpdXM9WzBdLHRoaXMuX2xpbWl0cz1bLTEvMCwxLzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ9dHx8e30sbmV3IG4odC5tYXRyaXh8fFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSl9dmFyIGE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxvPXQoIm1hdDQtaW50ZXJwb2xhdGUiKSxzPXQoImdsLW1hdDQvaW52ZXJ0IiksbD10KCJnbC1tYXQ0L3JvdGF0ZVgiKSx1PXQoImdsLW1hdDQvcm90YXRlWSIpLGM9dCgiZ2wtbWF0NC9yb3RhdGVaIiksaD10KCJnbC1tYXQ0L2xvb2tBdCIpLGY9dCgiZ2wtbWF0NC90cmFuc2xhdGUiKSxkPSh0KCJnbC1tYXQ0L3NjYWxlIiksdCgiZ2wtdmVjMy9ub3JtYWxpemUiKSkscD1bMCwwLDBdO2UuZXhwb3J0cz1pO3ZhciBtPW4ucHJvdG90eXBlO20ucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1hLmxlKGUsdCksbj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKCEocjwwKSl7dmFyIGk9dGhpcy5fY29tcG9uZW50cztpZihyPT09ZS5sZW5ndGgtMSlmb3IodmFyIGw9MTYqcix1PTA7dTwxNjsrK3Upblt1XT1pW2wrK107ZWxzZXtmb3IodmFyIGM9ZVtyKzFdLWVbcl0sbD0xNipyLGg9dGhpcy5wcmV2TWF0cml4LGY9ITAsdT0wO3U8MTY7Kyt1KWhbdV09aVtsKytdO2Zvcih2YXIgcD10aGlzLm5leHRNYXRyaXgsdT0wO3U8MTY7Kyt1KXBbdV09aVtsKytdLGY9ZiYmaFt1XT09PXBbdV07aWYoYzwxZS02fHxmKWZvcih2YXIgdT0wO3U8MTY7Kyt1KW5bdV09aFt1XTtlbHNlIG8obixoLHAsKHQtZVtyXSkvYyl9dmFyIG09dGhpcy5jb21wdXRlZFVwO21bMF09blsxXSxtWzFdPW5bNV0sbVsyXT1uWzldLGQobSxtKTt2YXIgdj10aGlzLmNvbXB1dGVkSW52ZXJzZTtzKHYsbik7dmFyIGc9dGhpcy5jb21wdXRlZEV5ZSx5PXZbMTVdO2dbMF09dlsxMl0veSxnWzFdPXZbMTNdL3ksZ1syXT12WzE0XS95O2Zvcih2YXIgYj10aGlzLmNvbXB1dGVkQ2VudGVyLHg9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksdT0wO3U8MzsrK3UpYlt1XT1nW3VdLW5bMis0KnVdKnh9fSxtLmlkbGU9ZnVuY3Rpb24odCl7aWYoISh0PHRoaXMubGFzdFQoKSkpe2Zvcih2YXIgZT10aGlzLl9jb21wb25lbnRzLHI9ZS5sZW5ndGgtMTYsbj0wO248MTY7KytuKWUucHVzaChlW3IrK10pO3RoaXMuX3RpbWUucHVzaCh0KX19LG0uZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9YS5ndCh0aGlzLl90aW1lLHQpLTI7ZTwwfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9jb21wb25lbnRzLnNwbGljZSgwLDE2KmUpKX0sbS5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lW3RoaXMuX3RpbWUubGVuZ3RoLTFdfSxtLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHxwLG49bnx8dGhpcy5jb21wdXRlZFVwLHRoaXMuc2V0TWF0cml4KHQsaCh0aGlzLmNvbXB1dGVkTWF0cml4LGUscixuKSk7Zm9yKHZhciBpPTAsYT0wO2E8MzsrK2EpaSs9TWF0aC5wb3coclthXS1lW2FdLDIpO2k9TWF0aC5sb2coTWF0aC5zcXJ0KGkpKSx0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWl9LG0ucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2UmJnUoaSxpLGUpLHImJmwoaSxpLHIpLG4mJmMoaSxpLG4pLHRoaXMuc2V0TWF0cml4KHQscyh0aGlzLmNvbXB1dGVkTWF0cml4LGkpKX07dmFyIHY9WzAsMCwwXTttLnBhbj1mdW5jdGlvbih0LGUscixuKXt2WzBdPS0oZXx8MCksdlsxXT0tKHJ8fDApLHZbMl09LShufHwwKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTtmKGksaSx2KSx0aGlzLnNldE1hdHJpeCh0LHMoaSxpKSl9LG0udHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZbMF09ZXx8MCx2WzFdPXJ8fDAsdlsyXT1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZihpLGksdiksdGhpcy5zZXRNYXRyaXgodCxpKX0sbS5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgcj0wO3I8MTY7KytyKXRoaXMuX2NvbXBvbmVudHMucHVzaChlW3JdKX19LG0uc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWV9LG0uc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9saW1pdHM7clswXT10LHJbMV09ZX0sbS5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9saW1pdHM7cmV0dXJuIHQ/KHRbMF09ZVswXSx0WzFdPWVbMV0sdCk6ZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjY0LCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L2xvb2tBdCI6MTgwLCJnbC1tYXQ0L3JvdGF0ZVgiOjE4NCwiZ2wtbWF0NC9yb3RhdGVZIjoxODUsImdsLW1hdDQvcm90YXRlWiI6MTg2LCJnbC1tYXQ0L3NjYWxlIjoxODcsImdsLW1hdDQvdHJhbnNsYXRlIjoxODgsImdsLXZlYzMvbm9ybWFsaXplIjoyNzQsIm1hdDQtaW50ZXJwb2xhdGUiOjQ0Nn1dLDQ0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPW47cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9Zm9yKHZhciBhPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilhW25dPW47YS5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBufHx0W2VdWzFdLXRbcl1bMV19KTtmb3IodmFyIG89W2FbMF0sYVsxXV0scz1bYVswXSxhWzFdXSxuPTI7bjxlOysrbil7Zm9yKHZhciBsPWFbbl0sdT10W2xdLGM9by5sZW5ndGg7Yz4xJiZpKHRbb1tjLTJdXSx0W29bYy0xXV0sdSk8PTA7KWMtPTEsby5wb3AoKTtmb3Ioby5wdXNoKGwpLGM9cy5sZW5ndGg7Yz4xJiZpKHRbc1tjLTJdXSx0W3NbYy0xXV0sdSk+PTA7KWMtPTEscy5wb3AoKTtzLnB1c2gobCl9Zm9yKHZhciByPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKSxoPTAsbj0wLGY9by5sZW5ndGg7bjxmOysrbilyW2grK109b1tuXTtmb3IodmFyIGQ9cy5sZW5ndGgtMjtkPjA7LS1kKXJbaCsrXT1zW2RdO3JldHVybiByfWUuZXhwb3J0cz1uO3ZhciBpPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTA2fV0sNDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPSExO3JldHVybiJhbHRLZXkiaW4gdCYmKGU9ZXx8dC5hbHRLZXkhPT12LmFsdCx2LmFsdD0hIXQuYWx0S2V5KSwic2hpZnRLZXkiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PXYuc2hpZnQsdi5zaGlmdD0hIXQuc2hpZnRLZXkpLCJjdHJsS2V5ImluIHQmJihlPWV8fHQuY3RybEtleSE9PXYuY29udHJvbCx2LmNvbnRyb2w9ISF0LmN0cmxLZXkpLCJtZXRhS2V5ImluIHQmJihlPWV8fHQubWV0YUtleSE9PXYubWV0YSx2Lm1ldGE9ISF0Lm1ldGFLZXkpLGV9ZnVuY3Rpb24gbih0LG4pe3ZhciBhPWkueChuKSxvPWkueShuKTsiYnV0dG9ucyJpbiBuJiYodD0wfG4uYnV0dG9ucyksKHQhPT1kfHxhIT09cHx8byE9PW18fHIobikpJiYoZD0wfHQscD1hfHwwLG09b3x8MCxlJiZlKGQscCxtLHYpKX1mdW5jdGlvbiBhKHQpe24oMCx0KX1mdW5jdGlvbiBvKCl7KGR8fHB8fG18fHYuc2hpZnR8fHYuYWx0fHx2Lm1ldGF8fHYuY29udHJvbCkmJihwPW09MCxkPTAsdi5zaGlmdD12LmFsdD12LmNvbnRyb2w9di5tZXRhPSExLGUmJmUoMCwwLDAsdikpfWZ1bmN0aW9uIHModCl7cih0KSYmZSYmZShkLHAsbSx2KX1mdW5jdGlvbiBsKHQpezA9PT1pLmJ1dHRvbnModCk/bigwLHQpOm4oZCx0KX1mdW5jdGlvbiB1KHQpe24oZHxpLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gYyh0KXtuKGQmfmkuYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBoKCl7Z3x8KGc9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGwpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGMpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsYSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixhKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixhKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsYSksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixvKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHMpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHMpLHQhPT13aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixzKSkpfWZ1bmN0aW9uIGYoKXtnJiYoZz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixhKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixhKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLG8pLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIscyksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixvKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHMpKSl9ZXx8KGU9dCx0PXdpbmRvdyk7dmFyIGQ9MCxwPTAsbT0wLHY9e3NoaWZ0OiExLGFsdDohMSxjb250cm9sOiExLG1ldGE6ITF9LGc9ITE7aCgpO3ZhciB5PXtlbGVtZW50OnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh5LHtlbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKHQpe3Q/aCgpOmYoKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBwfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGVudW1lcmFibGU6ITB9fSkseX1lLmV4cG9ydHM9bjt2YXIgaT10KCJtb3VzZS1ldmVudCIpfSx7Im1vdXNlLWV2ZW50Ijo0NTJ9XSw0NTE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgbj10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz1pKGUpO3JldHVybiByWzBdPW4tby5sZWZ0LHJbMV09YS1vLnRvcCxyfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ9PT13aW5kb3d8fHQ9PT1kb2N1bWVudHx8dD09PWRvY3VtZW50LmJvZHk/YTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfXZhciBhPXtsZWZ0OjAsdG9wOjB9O2UuZXhwb3J0cz1ufSx7fV0sNDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigiYnV0dG9ucyJpbiB0KXJldHVybiB0LmJ1dHRvbnM7aWYoIndoaWNoImluIHQpe3ZhciBlPXQud2hpY2g7aWYoMj09PWUpcmV0dXJuIDQ7aWYoMz09PWUpcmV0dXJuIDI7aWYoZT4wKXJldHVybiAxPDxlLTF9ZWxzZSBpZigiYnV0dG9uImluIHQpe3ZhciBlPXQuYnV0dG9uO2lmKDE9PT1lKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31mdW5jdGlvbiBhKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFgiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPWkodCkscj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFgtci5sZWZ0fXJldHVybiAwfWZ1bmN0aW9uIG8odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WSJpbiB0KXJldHVybiB0Lm9mZnNldFk7dmFyIGU9aSh0KSxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1yLnRvcH1yZXR1cm4gMH1yLmJ1dHRvbnM9bixyLmVsZW1lbnQ9aSxyLng9YSxyLnk9b30se31dLDQ1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHI9ISFlLGU9dCx0PXdpbmRvdyk7dmFyIG49aSgiZXgiLHQpLGE9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPXQuZGVsdGFYfHwwLGE9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPXQuZGVsdGFNb2RlLGw9MTtzd2l0Y2gocyl7Y2FzZSAxOmw9bjticmVhaztjYXNlIDI6bD13aW5kb3cuaW5uZXJIZWlnaHR9aWYoaSo9bCxhKj1sLG8qPWwsaXx8YXx8bylyZXR1cm4gZShpLGEsbyx0KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEpLGF9dmFyIGk9dCgidG8tcHgiKTtlLmV4cG9ydHM9bn0seyJ0by1weCI6NTMzfV0sNDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuImEiK3R9ZnVuY3Rpb24gaSh0KXtyZXR1cm4iZCIrdH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuImMiK3QrIl8iK2V9ZnVuY3Rpb24gbyh0KXtyZXR1cm4icyIrdH1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuInQiK3QrIl8iK2V9ZnVuY3Rpb24gbCh0KXtyZXR1cm4ibyIrdH1mdW5jdGlvbiB1KHQpe3JldHVybiJ4Iit0fWZ1bmN0aW9uIGModCl7cmV0dXJuInAiK3R9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiJkIit0KyJfIitlfWZ1bmN0aW9uIGYodCl7cmV0dXJuImkiK3R9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiJ1Iit0KyJfIitlfWZ1bmN0aW9uIHAodCl7cmV0dXJuImIiK3R9ZnVuY3Rpb24gbSh0KXtyZXR1cm4ieSIrdH1mdW5jdGlvbiB2KHQpe3JldHVybiJlIit0fWZ1bmN0aW9uIGcodCl7cmV0dXJuInYiK3R9ZnVuY3Rpb24geSh0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpZSYxPDxpJiYobnw9MTw8cltpXSk7cmV0dXJuIG59ZnVuY3Rpb24gYih0LGUscixiLHgsRSl7ZnVuY3Rpb24gTCh0LGUpe2oucHVzaCgiZm9yKCIsZih4W3RdKSwiPSIsZSwiOyIsZih4W3RdKSwiPCIsbyh4W3RdKSwiOyIsIisrIixmKHhbdF0pLCIpeyIpfWZ1bmN0aW9uIEModCl7Zm9yKHZhciBlPTA7ZTxPOysrZSlqLnB1c2goYyhlKSwiKz0iLGQoZSx4W3RdKSwiOyIpO2oucHVzaCgifSIpfWZ1bmN0aW9uIHoodCl7Zm9yKHZhciBlPXQtMTtlPj0wOy0tZSlMKGUsMCk7Zm9yKHZhciByPVtdLGU9MDtlPE87KytlKUVbZV0/ci5wdXNoKGkoZSkrIi5nZXQoIitjKGUpKyIpIik6ci5wdXNoKGkoZSkrIlsiK2MoZSkrIl0iKTtmb3IodmFyIGU9MDtlPGI7KytlKXIucHVzaCh1KGUpKTtqLnB1c2goTSwiWyIsVCwiKytdPXBoYXNlKCIsci5qb2luKCksIik7Iik7Zm9yKHZhciBlPTA7ZTx0OysrZSlDKGUpO2Zvcih2YXIgbj0wO248TzsrK24pai5wdXNoKGMobiksIis9IixkKG4seFt0XSksIjsiKX1mdW5jdGlvbiBJKHQpe2Zvcih2YXIgZT0wO2U8TzsrK2UpRVtlXT9qLnB1c2goYShlLDApLCI9IixpKGUpLCIuZ2V0KCIsYyhlKSwiKTsiKTpqLnB1c2goYShlLDApLCI9IixpKGUpLCJbIixjKGUpLCJdOyIpO2Zvcih2YXIgcj1bXSxlPTA7ZTxPOysrZSlyLnB1c2goYShlLDApKTtmb3IodmFyIGU9MDtlPGI7KytlKXIucHVzaCh1KGUpKTtqLnB1c2gocCgwKSwiPSIsTSwiWyIsVCwiXT1waGFzZSgiLHIuam9pbigpLCIpOyIpO2Zvcih2YXIgbj0xO248MTw8UjsrK24pai5wdXNoKHAobiksIj0iLE0sIlsiLFQsIisiLHYobiksIl07Iik7Zm9yKHZhciBvPVtdLG49MTtuPDE8PFI7KytuKW8ucHVzaCgiKCIrcCgwKSsiIT09IitwKG4pKyIpIik7ai5wdXNoKCJpZigiLG8uam9pbigifHwiKSwiKXsiKTtmb3IodmFyIHM9W10sZT0wO2U8UjsrK2Upcy5wdXNoKGYoZSkpO2Zvcih2YXIgZT0wO2U8TzsrK2Upe3MucHVzaChhKGUsMCkpO2Zvcih2YXIgbj0xO248MTw8UjsrK24pRVtlXT9qLnB1c2goYShlLG4pLCI9IixpKGUpLCIuZ2V0KCIsYyhlKSwiKyIsaChlLG4pLCIpOyIpOmoucHVzaChhKGUsbiksIj0iLGkoZSksIlsiLGMoZSksIisiLGgoZSxuKSwiXTsiKSxzLnB1c2goYShlLG4pKX1mb3IodmFyIGU9MDtlPDE8PFI7KytlKXMucHVzaChwKGUpKTtmb3IodmFyIGU9MDtlPGI7KytlKXMucHVzaCh1KGUpKTtqLnB1c2goInZlcnRleCgiLHMuam9pbigpLCIpOyIsZygwKSwiPSIsdywiWyIsVCwiXT0iLGssIisrOyIpO2Zvcih2YXIgbD0oMTw8UiktMSxkPXAobCksbj0wO248UjsrK24paWYoMD09KHQmfigxPDxuKSkpe2Zvcih2YXIgbT1sXjE8PG4seT1wKG0pLHg9W10sXz1tO18+MDtfPV8tMSZtKXgucHVzaCh3KyJbIitUKyIrIit2KF8pKyJdIik7eC5wdXNoKGcoMCkpO2Zvcih2YXIgXz0wO188TzsrK18pMSZuP3gucHVzaChhKF8sbCksYShfLG0pKTp4LnB1c2goYShfLG0pLGEoXyxsKSk7MSZuP3gucHVzaChkLHkpOngucHVzaCh5LGQpO2Zvcih2YXIgXz0wO188YjsrK18peC5wdXNoKHUoXykpO2oucHVzaCgiaWYoIixkLCIhPT0iLHksIil7IiwiZmFjZSgiLHguam9pbigpLCIpfSIpfWoucHVzaCgifSIsVCwiKz0xOyIpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHQ9MTt0PDE8PFI7Kyt0KWoucHVzaChTLCI9Iix2KHQpLCI7Iix2KHQpLCI9IixtKHQpLCI7IixtKHQpLCI9IixTLCI7Iil9ZnVuY3Rpb24gUCh0LGUpe2lmKHQ8MClyZXR1cm4gdm9pZCBJKGUpO3oodCksai5wdXNoKCJpZigiLG8oeFt0XSksIj4wKXsiLGYoeFt0XSksIj0xOyIpLFAodC0xLGV8MTw8eFt0XSk7Zm9yKHZhciByPTA7cjxPOysrcilqLnB1c2goYyhyKSwiKz0iLGQocix4W3RdKSwiOyIpO3Q9PT1SLTEmJihqLnB1c2goVCwiPTA7IiksRCgpKSxMKHQsMiksUCh0LTEsZSksdD09PVItMSYmKGoucHVzaCgiaWYoIixmKHhbUi0xXSksIiYxKXsiLFQsIj0wO30iKSxEKCkpLEModCksai5wdXNoKCJ9Iil9dmFyIE89RS5sZW5ndGgsUj14Lmxlbmd0aDtpZihSPDIpdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWV4dHJhY3QtY29udG91cjogRGltZW5zaW9uIG11c3QgYmUgYXQgbGVhc3QgMiIpO2Zvcih2YXIgRj0iZXh0cmFjdENvbnRvdXIiK3guam9pbigiXyIpLGo9W10sTj1bXSxCPVtdLFU9MDtVPE87KytVKUIucHVzaChuKFUpKTtmb3IodmFyIFU9MDtVPGI7KytVKUIucHVzaCh1KFUpKTtmb3IodmFyIFU9MDtVPFI7KytVKU4ucHVzaChvKFUpKyI9IituKDApKyIuc2hhcGVbIitVKyJdfDAiKTtmb3IodmFyIFU9MDtVPE87KytVKXtOLnB1c2goaShVKSsiPSIrbihVKSsiLmRhdGEiLGwoVSkrIj0iK24oVSkrIi5vZmZzZXR8MCIpO2Zvcih2YXIgVj0wO1Y8UjsrK1YpTi5wdXNoKHMoVSxWKSsiPSIrbihVKSsiLnN0cmlkZVsiK1YrIl18MCIpfWZvcih2YXIgVT0wO1U8TzsrK1Upe04ucHVzaChjKFUpKyI9IitsKFUpKSxOLnB1c2goYShVLDApKTtmb3IodmFyIFY9MTtWPDE8PFI7KytWKXtmb3IodmFyIEg9W10scT0wO3E8UjsrK3EpViYxPDxxJiZILnB1c2goIi0iK3MoVSxxKSk7Ti5wdXNoKGgoVSxWKSsiPSgiK0guam9pbigiIikrIil8MCIpLE4ucHVzaChhKFUsVikrIj0wIil9fWZvcih2YXIgVT0wO1U8TzsrK1UpZm9yKHZhciBWPTA7VjxSOysrVil7dmFyIEc9W3MoVSx4W1ZdKV07Vj4wJiZHLnB1c2gocyhVLHhbVi0xXSkrIioiK28oeFtWLTFdKSksTi5wdXNoKGQoVSx4W1ZdKSsiPSgiK0cuam9pbigiLSIpKyIpfDAiKX1mb3IodmFyIFU9MDtVPFI7KytVKU4ucHVzaChmKFUpKyI9MCIpO04ucHVzaChrKyI9MCIpO2Zvcih2YXIgWT1bIjIiXSxVPVItMjtVPj0wOy0tVSlZLnB1c2gobyh4W1VdKSk7Ti5wdXNoKEErIj0oIitZLmpvaW4oIioiKSsiKXwwIixNKyI9bWFsbG9jVWludDMyKCIrQSsiKSIsdysiPW1hbGxvY1VpbnQzMigiK0ErIikiLFQrIj0wIiksTi5wdXNoKHAoMCkrIj0wIik7Zm9yKHZhciBWPTE7VjwxPDxSOysrVil7Zm9yKHZhciBYPVtdLFc9W10scT0wO3E8UjsrK3EpViYxPDxxJiYoMD09PVcubGVuZ3RoP1gucHVzaCgiMSIpOlgudW5zaGlmdChXLmpvaW4oIioiKSkpLFcucHVzaChvKHhbcV0pKTt2YXIgWj0iIjtYWzBdLmluZGV4T2Yobyh4W1ItMl0pKTwwJiYoWj0iLSIpO3ZhciBKPXkoUixWLHgpO04ucHVzaCh2KEopKyI9KC0iK1guam9pbigiLSIpKyIpfDAiLG0oSikrIj0oIitaK1guam9pbigiLSIpKyIpfDAiLHAoSikrIj0wIil9Ti5wdXNoKGcoMCkrIj0wIixTKyI9MCIpLFAoUi0xLDApLGoucHVzaCgiZnJlZVVpbnQzMigiLHcsIik7ZnJlZVVpbnQzMigiLE0sIik7Iik7dmFyIEs9WyIndXNlIHN0cmljdCc7IiwiZnVuY3Rpb24gIixGLCIoIixCLmpvaW4oKSwiKXsiLCJ2YXIgIixOLmpvaW4oKSwiOyIsai5qb2luKCIiKSwifSIsInJldHVybiAiLEZdLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oInZlcnRleCIsImZhY2UiLCJwaGFzZSIsIm1hbGxvY1VpbnQzMiIsImZyZWVVaW50MzIiLEspKHQsZSxyLF8ubWFsbG9jVWludDMyLF8uZnJlZVVpbnQzMil9ZnVuY3Rpb24geCh0KXtmdW5jdGlvbiBlKHQpe3Rocm93IG5ldyBFcnJvcigibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6ICIrdCl9Im9iamVjdCIhPXR5cGVvZiB0JiZlKCJNdXN0IHNwZWNpZnkgYXJndW1lbnRzIik7dmFyIHI9dC5vcmRlcjtBcnJheS5pc0FycmF5KHIpfHxlKCJNdXN0IHNwZWNpZnkgb3JkZXIiKTt2YXIgbj10LmFycmF5QXJndW1lbnRzfHwxO248MSYmZSgiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBhcnJheSBhcmd1bWVudCIpO3ZhciBpPXQuc2NhbGFyQXJndW1lbnRzfHwwO2k8MCYmZSgiU2NhbGFyIGFyZyBjb3VudCBtdXN0IGJlID4gMCIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LnZlcnRleCYmZSgiTXVzdCBzcGVjaWZ5IHZlcnRleCBjcmVhdGlvbiBmdW5jdGlvbiIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNlbGwmJmUoIk11c3Qgc3BlY2lmeSBjZWxsIGNyZWF0aW9uIGZ1bmN0aW9uIiksImZ1bmN0aW9uIiE9dHlwZW9mIHQucGhhc2UmJmUoIk11c3Qgc3BlY2lmeSBwaGFzZSBmdW5jdGlvbiIpO2Zvcih2YXIgYT10LmdldHRlcnN8fFtdLG89bmV3IEFycmF5KG4pLHM9MDtzPG47KytzKWEuaW5kZXhPZihzKT49MD9vW3NdPSEwOm9bc109ITE7cmV0dXJuIGIodC52ZXJ0ZXgsdC5jZWxsLHQucGhhc2UsaSxyLG8pfXZhciBfPXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz14O3ZhciB3PSJWIixNPSJQIixrPSJOIixBPSJRIixUPSJYIixTPSJUIn0seyJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDQ1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV8xX2FyZzFfPV9pbmxpbmVfMV9hcmcyXy5hcHBseSh2b2lkIDAsX2lubGluZV8xX2FyZzBfKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6ImN3aXNlIixibG9ja1NpemU6NjR9KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLHR9fSx7ImN3aXNlL2xpYi93cmFwcGVyIjoxMTF9XSw0NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZih0IGluIGwpcmV0dXJuIGxbdF07Zm9yKHZhciBlPVtdLHI9MDtyPHQ7KytyKWUucHVzaCgib3V0IixyLCJzPTAuNSooaW5wIixyLCJsLWlucCIsciwicik7Iik7Zm9yKHZhciBuPVsiYXJyYXkiXSxpPVsianVuayJdLHI9MDtyPHQ7KytyKXtuLnB1c2goImFycmF5IiksaS5wdXNoKCJvdXQiK3IrInMiKTt2YXIgYT1vKHQpO2Fbcl09LTEsbi5wdXNoKHthcnJheTowLG9mZnNldDphLnNsaWNlKCl9KSxhW3JdPTEsbi5wdXNoKHthcnJheTowLG9mZnNldDphLnNsaWNlKCl9KSxpLnB1c2goImlucCIrcisibCIsImlucCIrcisiciIpfXJldHVybiBsW3RdPXMoe2FyZ3M6bixwcmU6Yyxwb3N0OmMsYm9keTp7Ym9keTplLmpvaW4oIiIpLGFyZ3M6aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZigib3V0IikscnZhbHVlOjA9PT10LmluZGV4T2YoImlucCIpLGNvdW50OiJqdW5rIiE9PXR8MH19KSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJmZFRlbXBsYXRlIit0fSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmpvaW4oKSxyPXVbZV07aWYocilyZXR1cm4gcjtmb3IodmFyIGk9dC5sZW5ndGgsYT1bImZ1bmN0aW9uIGdyYWRpZW50KGRzdCxzcmMpe3ZhciBzPXNyYy5zaGFwZS5zbGljZSgpOyJdLG89MDtvPDE8PGk7KytvKXtmb3IodmFyIHM9W10sYz0wO2M8aTsrK2MpbyYxPDxjJiZzLnB1c2goYysxKTtmb3IodmFyIGQ9MDtkPDE8PHMubGVuZ3RoOysrZCl7Zm9yKHZhciBwPXMuc2xpY2UoKSxjPTA7YzxzLmxlbmd0aDsrK2MpZCYxPDxjJiYocFtjXT0tcFtjXSk7IWZ1bmN0aW9uKGUpewpmb3IodmFyIHI9aS1lLmxlbmd0aCxuPVtdLG89W10scz1bXSxsPTA7bDxpOysrbCllLmluZGV4T2YobCsxKT49MD9zLnB1c2goIjAiKTplLmluZGV4T2YoLShsKzEpKT49MD9zLnB1c2goInNbIitsKyJdLTEiKToocy5wdXNoKCItMSIpLG4ucHVzaCgiMSIpLG8ucHVzaCgic1siK2wrIl0tMiIpKTt2YXIgdT0iLmxvKCIrbi5qb2luKCkrIikuaGkoIitvLmpvaW4oKSsiKSI7aWYoMD09PW4ubGVuZ3RoJiYodT0iIikscj4wKXthLnB1c2goImlmKDEiKTtmb3IodmFyIGw9MDtsPGk7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8YS5wdXNoKCImJnNbIixsLCJdPjIiKTthLnB1c2goIil7Z3JhZCIsciwiKHNyYy5waWNrKCIscy5qb2luKCksIikiLHUpO2Zvcih2YXIgbD0wO2w8aTsrK2wpZS5pbmRleE9mKGwrMSk+PTB8fGUuaW5kZXhPZigtKGwrMSkpPj0wfHxhLnB1c2goIixkc3QucGljaygiLHMuam9pbigpLCIsIixsLCIpIix1KTthLnB1c2goIik7Iil9Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBjPU1hdGguYWJzKGVbbF0pLTEsaD0iZHN0LnBpY2soIitzLmpvaW4oKSsiLCIrYysiKSIrdTtzd2l0Y2godFtjXSl7Y2FzZSJjbGFtcCI6dmFyIGY9cy5zbGljZSgpLGQ9cy5zbGljZSgpO2VbbF08MD9mW2NdPSJzWyIrYysiXS0yIjpkW2NdPSIxIiwwPT09cj9hLnB1c2goImlmKHNbIixjLCJdPjEpe2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsYywiLDAuNSooc3JjLmdldCgiLGYuam9pbigpLCIpLXNyYy5nZXQoIixkLmpvaW4oKSwiKSkpfWVsc2V7ZHN0LnNldCgiLHMuam9pbigpLCIsIixjLCIsMCl9OyIpOmEucHVzaCgiaWYoc1siLGMsIl0+MSl7ZGlmZigiLGgsIixzcmMucGljaygiLGYuam9pbigpLCIpIix1LCIsc3JjLnBpY2soIixkLmpvaW4oKSwiKSIsdSwiKTt9ZWxzZXt6ZXJvKCIsaCwiKTt9OyIpO2JyZWFrO2Nhc2UibWlycm9yIjowPT09cj9hLnB1c2goImRzdC5zZXQoIixzLmpvaW4oKSwiLCIsYywiLDApOyIpOmEucHVzaCgiemVybygiLGgsIik7Iik7YnJlYWs7Y2FzZSJ3cmFwIjp2YXIgcD1zLnNsaWNlKCksbT1zLnNsaWNlKCk7ZVtsXTwwPyhwW2NdPSJzWyIrYysiXS0yIixtW2NdPSIwIik6KHBbY109InNbIitjKyJdLTEiLG1bY109IjEiKSwwPT09cj9hLnB1c2goImlmKHNbIixjLCJdPjIpe2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsYywiLDAuNSooc3JjLmdldCgiLHAuam9pbigpLCIpLXNyYy5nZXQoIixtLmpvaW4oKSwiKSkpfWVsc2V7ZHN0LnNldCgiLHMuam9pbigpLCIsIixjLCIsMCl9OyIpOmEucHVzaCgiaWYoc1siLGMsIl0+Mil7ZGlmZigiLGgsIixzcmMucGljaygiLHAuam9pbigpLCIpIix1LCIsc3JjLnBpY2soIixtLmpvaW4oKSwiKSIsdSwiKTt9ZWxzZXt6ZXJvKCIsaCwiKTt9OyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBJbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvbiIpfX1yPjAmJmEucHVzaCgifTsiKX0ocCl9fWEucHVzaCgicmV0dXJuIGRzdDt9O3JldHVybiBncmFkaWVudCIpO2Zvcih2YXIgbT1bImRpZmYiLCJ6ZXJvIl0sdj1baCxmXSxvPTE7bzw9aTsrK28pbS5wdXNoKCJncmFkIitvKSx2LnB1c2gobihvKSk7bS5wdXNoKGEuam9pbigiIikpO3ZhciBnPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxtKSxyPWcuYXBwbHkodm9pZCAwLHYpO3JldHVybiBsW2VdPXIscn1mdW5jdGlvbiBhKHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHIpKXtpZihyLmxlbmd0aCE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogaW52YWxpZCBib3VuZGFyeSBjb25kaXRpb25zIil9ZWxzZSByPSJzdHJpbmciPT10eXBlb2Ygcj9vKGUuZGltZW5zaW9uLHIpOm8oZS5kaW1lbnNpb24sImNsYW1wIik7aWYodC5kaW1lbnNpb24hPT1lLmRpbWVuc2lvbisxKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IGRpbWVuc2lvbiBtdXN0IGJlICsxIGlucHV0IGRpbWVuc2lvbiIpO2lmKHQuc2hhcGVbZS5kaW1lbnNpb25dIT09ZS5kaW1lbnNpb24pdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgc2hhcGUgbXVzdCBtYXRjaCBpbnB1dCBzaGFwZSIpO2Zvcih2YXIgbj0wO248ZS5kaW1lbnNpb247KytuKWlmKHQuc2hhcGVbbl0hPT1lLnNoYXBlW25dKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogc2hhcGUgbWlzbWF0Y2giKTtyZXR1cm4gMD09PWUuc2l6ZT90OmUuZGltZW5zaW9uPD0wPyh0LnNldCgwKSx0KTppKHIpKHQsZSl9ZS5leHBvcnRzPWE7dmFyIG89dCgiZHVwIikscz10KCJjd2lzZS1jb21waWxlciIpLGw9e30sdT17fSxjPXtib2R5OiIiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxoPXMoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6Yyxwb3N0OmMsYm9keTp7YXJnczpbe25hbWU6Im91dCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToibGVmdCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToicmlnaHQiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6Im91dD0wLjUqKGxlZnQtcmlnaHQpIix0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjZGlmZiJ9KSxmPXMoe2FyZ3M6WyJhcnJheSJdLHByZTpjLHBvc3Q6Yyxib2R5OnthcmdzOlt7bmFtZToib3V0IixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9XSxib2R5OiJvdXQ9MCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiemVybyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTA4LGR1cDoxMjN9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZS5kaW1lbnNpb24sbz1hKFtdLHIpO3JldHVybiBpKHQsZSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8bjsrK3Ipe3Rbcl09b1sobisxKSpuK3JdO2Zvcih2YXIgaT0wO2k8bjsrK2kpdFtyXSs9b1sobisxKSppK3JdKmVbaV19Zm9yKHZhciBhPW9bKG4rMSkqKG4rMSktMV0saT0wO2k8bjsrK2kpYSs9b1sobisxKSppK25dKmVbaV07Zm9yKHZhciBzPTEvYSxyPTA7cjxuOysrcil0W3JdKj1zO3JldHVybiB0fSksdH12YXIgaT10KCJuZGFycmF5LXdhcnAiKSxhPXQoImdsLW1hdHJpeC1pbnZlcnQiKTtlLmV4cG9ydHM9bn0seyJnbC1tYXRyaXgtaW52ZXJ0IjoxOTAsIm5kYXJyYXktd2FycCI6NDY0fV0sNDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1NYXRoLmZsb29yKGUpLG49ZS1yLGk9MDw9ciYmcjx0LnNoYXBlWzBdLGE9MDw9cisxJiZyKzE8dC5zaGFwZVswXTtyZXR1cm4oMS1uKSooaT8rdC5nZXQocik6MCkrbiooYT8rdC5nZXQocisxKTowKX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKGUpLGk9ZS1uLGE9MDw9biYmbjx0LnNoYXBlWzBdLG89MDw9bisxJiZuKzE8dC5zaGFwZVswXSxzPU1hdGguZmxvb3IociksbD1yLXMsdT0wPD1zJiZzPHQuc2hhcGVbMV0sYz0wPD1zKzEmJnMrMTx0LnNoYXBlWzFdLGg9YSYmdT90LmdldChuLHMpOjAsZj1hJiZjP3QuZ2V0KG4scysxKTowO3JldHVybigxLWwpKigoMS1pKSpoK2kqKG8mJnU/dC5nZXQobisxLHMpOjApKStsKigoMS1pKSpmK2kqKG8mJmM/dC5nZXQobisxLHMrMSk6MCkpfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk9TWF0aC5mbG9vcihlKSxhPWUtaSxvPTA8PWkmJmk8dC5zaGFwZVswXSxzPTA8PWkrMSYmaSsxPHQuc2hhcGVbMF0sbD1NYXRoLmZsb29yKHIpLHU9ci1sLGM9MDw9bCYmbDx0LnNoYXBlWzFdLGg9MDw9bCsxJiZsKzE8dC5zaGFwZVsxXSxmPU1hdGguZmxvb3IobiksZD1uLWYscD0wPD1mJiZmPHQuc2hhcGVbMl0sbT0wPD1mKzEmJmYrMTx0LnNoYXBlWzJdLHY9byYmYyYmcD90LmdldChpLGwsZik6MCxnPW8mJmgmJnA/dC5nZXQoaSxsKzEsZik6MCx5PXMmJmMmJnA/dC5nZXQoaSsxLGwsZik6MCxiPXMmJmgmJnA/dC5nZXQoaSsxLGwrMSxmKTowLHg9byYmYyYmbT90LmdldChpLGwsZisxKTowLF89byYmaCYmbT90LmdldChpLGwrMSxmKzEpOjA7cmV0dXJuKDEtZCkqKCgxLXUpKigoMS1hKSp2K2EqeSkrdSooKDEtYSkqZythKmIpKStkKigoMS11KSooKDEtYSkqeCthKihzJiZjJiZtP3QuZ2V0KGkrMSxsLGYrMSk6MCkpK3UqKCgxLWEpKl8rYSoocyYmaCYmbT90LmdldChpKzEsbCsxLGYrMSk6MCkpKX1mdW5jdGlvbiBvKHQpe3ZhciBlLHIsbj0wfHQuc2hhcGUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlyPSthcmd1bWVudHNbZSsxXSxpW2VdPU1hdGguZmxvb3IociksYVtlXT1yLWlbZV0sb1tlXT0wPD1pW2VdJiZpW2VdPHQuc2hhcGVbZV0sc1tlXT0wPD1pW2VdKzEmJmlbZV0rMTx0LnNoYXBlW2VdO3ZhciBsLHUsYyxoPTA7dDpmb3IoZT0wO2U8MTw8bjsrK2Upe2Zvcih1PTEsYz10Lm9mZnNldCxsPTA7bDxuOysrbClpZihlJjE8PGwpe2lmKCFzW2xdKWNvbnRpbnVlIHQ7dSo9YVtsXSxjKz10LnN0cmlkZVtsXSooaVtsXSsxKX1lbHNle2lmKCFvW2xdKWNvbnRpbnVlIHQ7dSo9MS1hW2xdLGMrPXQuc3RyaWRlW2xdKmlbbF19aCs9dSp0LmRhdGFbY119cmV0dXJuIGh9ZnVuY3Rpb24gcyh0LGUscixzKXtzd2l0Y2godC5zaGFwZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIG4odCxlKTtjYXNlIDI6cmV0dXJuIGkodCxlLHIpO2Nhc2UgMzpyZXR1cm4gYSh0LGUscixzKTtkZWZhdWx0OnJldHVybiBvLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1lLmV4cG9ydHM9cyxlLmV4cG9ydHMuZDE9bixlLmV4cG9ydHMuZDI9aSxlLmV4cG9ydHMuZDM9YX0se31dLDQ1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKCF0KXJldHVybiBzO2Zvcih2YXIgZT0wO2U8dC5hcmdzLmxlbmd0aDsrK2Upe3ZhciByPXQuYXJnc1tlXTt0LmFyZ3NbZV09MD09PWU/e25hbWU6cixsdmFsdWU6ITAscnZhbHVlOiEhdC5ydmFsdWUsY291bnQ6dC5jb3VudHx8MX06e25hbWU6cixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9fXJldHVybiB0LnRoaXNWYXJzfHwodC50aGlzVmFycz1bXSksdC5sb2NhbFZhcnN8fCh0LmxvY2FsVmFycz1bXSksdH1mdW5jdGlvbiBpKHQpe3JldHVybiBvKHthcmdzOnQuYXJncyxwcmU6bih0LnByZSksYm9keTpuKHQuYm9keSkscG9zdDpuKHQucHJvYyksZnVuY05hbWU6dC5mdW5jTmFtZX0pfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQuYXJncy5sZW5ndGg7KytyKWUucHVzaCgiYSIrcik7cmV0dXJuIG5ldyBGdW5jdGlvbigiUCIsWyJyZXR1cm4gZnVuY3Rpb24gIix0LmZ1bmNOYW1lLCJfbmRhcnJheW9wcygiLGUuam9pbigiLCIpLCIpIHtQKCIsZS5qb2luKCIsIiksIik7cmV0dXJuIGEwfSJdLmpvaW4oIiIpKShpKHQpKX12YXIgbz10KCJjd2lzZS1jb21waWxlciIpLHM9e2JvZHk6IiIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGw9e2FkZDoiKyIsc3ViOiItIixtdWw6IioiLGRpdjoiLyIsbW9kOiIlIixiYW5kOiImIixib3I6InwiLGJ4b3I6Il4iLGxzaGlmdDoiPDwiLHJzaGlmdDoiPj4iLHJyc2hpZnQ6Ij4+PiJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsKXt2YXIgZT1sW3RdO3JbdF09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYSIrZSsiPWIifSxydmFsdWU6ITAsZnVuY05hbWU6dCsiZXEifSksclt0KyJzIl09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrInNlcSJdPWEoe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImEiK2UrIj1zIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIHU9e25vdDoiISIsYm5vdDoifiIsbmVnOiItIixyZWNpcDoiMS4wLyJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB1KXt2YXIgZT11W3RdO3JbdF09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPSIrZSsiYiJ9LGZ1bmNOYW1lOnR9KSxyW3QrImVxIl09YSh7YXJnczpbImFycmF5Il0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPSIrZSsiYSJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pfX0oKTt2YXIgYz17YW5kOiImJiIsb3I6Inx8IixlcToiPT09IixuZXE6IiE9PSIsbHQ6IjwiLGd0OiI+IixsZXE6Ijw9IixnZXE6Ij49In07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGMpe3ZhciBlPWNbdF07clt0XT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9YiIrZSsiYyJ9LGZ1bmNOYW1lOnR9KSxyW3QrInMiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsInMiXSxib2R5OiJhPWIiK2UrInMifSxmdW5jTmFtZTp0KyJzIn0pLHJbdCsiZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YSIrZSsiYiJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsic2VxIl09YSh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJzIl0sYm9keToiYT1hIitlKyJzIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCsic2VxIn0pfX0oKTt2YXIgaD1bImFicyIsImFjb3MiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjb3MiLCJleHAiLCJmbG9vciIsImxvZyIsInJvdW5kIiwic2luIiwic3FydCIsInRhbiJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aC5sZW5ndGg7Kyt0KXt2YXIgZT1oW3RdO3JbZV09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJlcSJdPWEoe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZihhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSl9fSgpO3ZhciBmPVsibWF4IiwibWluIiwiYXRhbjIiLCJwb3ciXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2VdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJzIl09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJzIn0pLHJbZSsiZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYSxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSkscltlKyJzZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGEsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrInNlcSJ9KX19KCk7dmFyIGQ9WyJhdGFuMiIsInBvdyJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZC5sZW5ndGg7Kyt0KXt2YXIgZT1kW3RdO3JbZSsib3AiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYyxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsib3AifSkscltlKyJvcHMiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGMsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrIm9wcyJ9KSxyW2UrIm9wZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYixhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsib3BlcSJ9KSxyW2UrIm9wc2VxIl09YSh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiLGEpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJvcHNlcSJ9KX19KCksci5hbnk9byh7YXJnczpbImFycmF5Il0scHJlOnMsYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKGEpe3JldHVybiB0cnVlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gZmFsc2UifSxmdW5jTmFtZToiYW55In0pLHIuYWxsPW8oe2FyZ3M6WyJhcnJheSJdLHByZTpzLGJvZHk6e2FyZ3M6W3tuYW1lOiJ4IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZigheCl7cmV0dXJuIGZhbHNlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gdHJ1ZSJ9LGZ1bmNOYW1lOiJhbGwifSksci5zdW09byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6InRoaXNfcys9YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJzdW0ifSksci5wcm9kPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MSJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJ0aGlzX3MqPWEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToicHJvZCJ9KSxyLm5vcm0yc3F1YXJlZD1vKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keToidGhpc19zKz1hKmEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybTJzcXVhcmVkIn0pLHIubm9ybTI9byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6InRoaXNfcys9YSphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gTWF0aC5zcXJ0KHRoaXNfcykifSxmdW5jTmFtZToibm9ybTIifSksci5ub3JtaW5mPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSxib2R5OiJpZigtYT50aGlzX3Mpe3RoaXNfcz0tYX1lbHNlIGlmKGE+dGhpc19zKXt0aGlzX3M9YX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybWluZiJ9KSxyLm5vcm0xPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjN9XSxib2R5OiJ0aGlzX3MrPWE8MD8tYTphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm0xIn0pLHIuc3VwPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7Ym9keToidGhpc19oPS1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPnRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmluZj1vKHthcmdzOlsiYXJyYXkiXSxwcmU6e2JvZHk6InRoaXNfaD1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPHRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21pbj1vKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9IixhcmdzOlt7bmFtZToiX2lubGluZV8wX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzFfYXJnMV88dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9rIl19LHBvc3Q6e2JvZHk6IntyZXR1cm4gdGhpc19pfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaSJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21heD1vKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PS1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xX2FyZzFfPnRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfayJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuIHRoaXNfaX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2kiXSxsb2NhbFZhcnM6W119fSksci5yYW5kb209YSh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLnJhbmRvbSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZigpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZToicmFuZG9tIn0pLHIuYXNzaWduPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbiJ9KSxyLmFzc2lnbnM9YSh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbnMifSksci5lcXVhbHM9byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6cyxib2R5OnthcmdzOlt7bmFtZToieCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToieSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoeCE9PXkpe3JldHVybiBmYWxzZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIHRydWUifSxmdW5jTmFtZToiZXF1YWxzIn0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxMDh9XSw0NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10LG89MTtBcnJheS5pc0FycmF5KGEpOylyLnB1c2goYS5sZW5ndGgpLG8qPWEubGVuZ3RoLGE9YVswXTtyZXR1cm4gMD09PXIubGVuZ3RoP24oKTooZXx8KGU9bihuZXcgRmxvYXQ2NEFycmF5KG8pLHIpKSxpKGUsdCksZSl9fSx7Ii4vZG9Db252ZXJ0LmpzIjo0NjEsbmRhcnJheTo0NjV9XSw0NjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiY3dpc2UtY29tcGlsZXIiKSh7YXJnczpbImFycmF5Iiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie1xudmFyIF9pbmxpbmVfMV92PV9pbmxpbmVfMV9hcmcxXyxfaW5saW5lXzFfaVxuZm9yKF9pbmxpbmVfMV9pPTA7X2lubGluZV8xX2k8X2lubGluZV8xX2FyZzJfLmxlbmd0aC0xOysrX2lubGluZV8xX2kpIHtcbl9pbmxpbmVfMV92PV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfaV1dXG59XG5faW5saW5lXzFfYXJnMF89X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMV1dXG59IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOlsiX2lubGluZV8xX2kiLCJfaW5saW5lXzFfdiJdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjb252ZXJ0IixibG9ja1NpemU6NjR9KX0seyJjd2lzZS1jb21waWxlciI6MTA4fV0sNDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7c3dpdGNoKHQpe2Nhc2UidWludDgiOnJldHVybltsLm1hbGxvY1VpbnQ4LGwuZnJlZVVpbnQ4XTtjYXNlInVpbnQxNiI6cmV0dXJuW2wubWFsbG9jVWludDE2LGwuZnJlZVVpbnQxNl07Y2FzZSJ1aW50MzIiOnJldHVybltsLm1hbGxvY1VpbnQzMixsLmZyZWVVaW50MzJdO2Nhc2UiaW50OCI6cmV0dXJuW2wubWFsbG9jSW50OCxsLmZyZWVJbnQ4XTtjYXNlImludDE2IjpyZXR1cm5bbC5tYWxsb2NJbnQxNixsLmZyZWVJbnQxNl07Y2FzZSJpbnQzMiI6cmV0dXJuW2wubWFsbG9jSW50MzIsbC5mcmVlSW50MzJdO2Nhc2UiZmxvYXQzMiI6cmV0dXJuW2wubWFsbG9jRmxvYXQsbC5mcmVlRmxvYXRdO2Nhc2UiZmxvYXQ2NCI6cmV0dXJuW2wubWFsbG9jRG91YmxlLGwuZnJlZURvdWJsZV07ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKCJzIityKTtmb3IodmFyIHI9MDtyPHQ7KytyKWUucHVzaCgibiIrcik7Zm9yKHZhciByPTE7cjx0OysrcillLnB1c2goImQiK3IpO2Zvcih2YXIgcj0xO3I8dDsrK3IpZS5wdXNoKCJlIityKTtmb3IodmFyIHI9MTtyPHQ7KytyKWUucHVzaCgiZiIrcik7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBhKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX12YXIgbz1bIid1c2Ugc3RyaWN0JyJdLHM9WyJuZGFycmF5SW5zZXJ0aW9uU29ydCIsdC5qb2luKCJkIiksZV0uam9pbigiIiksbD1bImxlZnQiLCJyaWdodCIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQoaSh0Lmxlbmd0aCkpLHU9bihlKSxjPVsiaSxqLGNwdHIscHRyPWxlZnQqczArb2Zmc2V0Il07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBoPVtdLGY9MTtmPHQubGVuZ3RoOysrZiljLnB1c2goImkiK2YpLGgucHVzaCgibiIrZik7dT9jLnB1c2goInNjcmF0Y2g9bWFsbG9jKCIraC5qb2luKCIqIikrIikiKTpjLnB1c2goInNjcmF0Y2g9bmV3IEFycmF5KCIraC5qb2luKCIqIikrIikiKSxjLnB1c2goImRwdHIiLCJzcHRyIiwiYSIsImIiKX1lbHNlIGMucHVzaCgic2NyYXRjaCIpO2lmKG8ucHVzaChbImZ1bmN0aW9uICIscywiKCIsbC5qb2luKCIsIiksIil7dmFyICIsYy5qb2luKCIsIildLmpvaW4oIiIpLCJmb3IoaT1sZWZ0KzE7aTw9cmlnaHQ7KytpKXsiLCJqPWk7cHRyKz1zMCIsImNwdHI9cHRyIiksdC5sZW5ndGg+MSl7by5wdXNoKCJkcHRyPTA7c3B0cj1wdHIiKTtmb3IodmFyIGY9dC5sZW5ndGgtMTtmPj0wOy0tZil7dmFyIGQ9dFtmXTswIT09ZCYmby5wdXNoKFsiZm9yKGkiLGQsIj0wO2kiLGQsIjxuIixkLCI7KytpIixkLCIpeyJdLmpvaW4oIiIpKX1vLnB1c2goInNjcmF0Y2hbZHB0cisrXT0iLHIoInNwdHIiKSk7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDsrK2Ype3ZhciBkPXRbZl07MCE9PWQmJm8ucHVzaCgic3B0cis9ZCIrZCwifSIpfW8ucHVzaCgiX19nOndoaWxlKGotLVx4M2VsZWZ0KXsiLCJkcHRyPTAiLCJzcHRyPWNwdHItczAiKTtmb3IodmFyIGY9MTtmPHQubGVuZ3RoOysrZikxPT09ZiYmby5wdXNoKCJfX2w6Iiksby5wdXNoKFsiZm9yKGkiLGYsIj0wO2kiLGYsIjxuIixmLCI7KytpIixmLCIpeyJdLmpvaW4oIiIpKTtvLnB1c2goWyJhPSIscigic3B0ciIpLCJcbmI9c2NyYXRjaFtkcHRyXVxuaWYoYTxiKXticmVhayBfX2d9XG5pZihhPmIpe2JyZWFrIF9fbH0iXS5qb2luKCIiKSk7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MTstLWYpby5wdXNoKCJzcHRyKz1lIitmLCJkcHRyKz1mIitmLCJ9Iik7by5wdXNoKCJkcHRyPWNwdHI7c3B0cj1jcHRyLXMwIik7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciBkPXRbZl07MCE9PWQmJm8ucHVzaChbImZvcihpIixkLCI9MDtpIixkLCI8biIsZCwiOysraSIsZCwiKXsiXS5qb2luKCIiKSl9by5wdXNoKGEoImRwdHIiLHIoInNwdHIiKSkpO2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGg7KytmKXt2YXIgZD10W2ZdOzAhPT1kJiZvLnB1c2goWyJkcHRyKz1kIixkLCI7c3B0cis9ZCIsZF0uam9pbigiIiksIn0iKX1vLnB1c2goImNwdHItPXMwXG59Iiksby5wdXNoKCJkcHRyPWNwdHI7c3B0cj0wIik7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciBkPXRbZl07MCE9PWQmJm8ucHVzaChbImZvcihpIixkLCI9MDtpIixkLCI8biIsZCwiOysraSIsZCwiKXsiXS5qb2luKCIiKSl9by5wdXNoKGEoImRwdHIiLCJzY3JhdGNoW3NwdHIrK10iKSk7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDsrK2Ype3ZhciBkPXRbZl07MCE9PWQmJm8ucHVzaCgiZHB0cis9ZCIrZCwifSIpfX1lbHNlIG8ucHVzaCgic2NyYXRjaD0iK3IoInB0ciIpLCJ3aGlsZSgoai0tXHgzZWxlZnQpJiYoIityKCJjcHRyLXMwIikrIj5zY3JhdGNoKSl7IixhKCJjcHRyIixyKCJjcHRyLXMwIikpLCJjcHRyLT1zMCIsIn0iLGEoImNwdHIiLCJzY3JhdGNoIikpO2lmKG8ucHVzaCgifSIpLHQubGVuZ3RoPjEmJnUmJm8ucHVzaCgiZnJlZShzY3JhdGNoKSIpLG8ucHVzaCgifSByZXR1cm4gIitzKSx1KXt2YXIgcD1uZXcgRnVuY3Rpb24oIm1hbGxvYyIsImZyZWUiLG8uam9pbigiXG4iKSk7cmV0dXJuIHAodVswXSx1WzFdKX12YXIgcD1uZXcgRnVuY3Rpb24oby5qb2luKCJcbiIpKTtyZXR1cm4gcCgpfWZ1bmN0aW9uIG8odCxlLHIpe2Z1bmN0aW9uIGEodCl7cmV0dXJuWyIob2Zmc2V0KyIsdCwiKnMwKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIG8odCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBzKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1mdW5jdGlvbiBsKGUscixuKXtpZigxPT09ZS5sZW5ndGgpXy5wdXNoKCJwdHIwPSIrYShlWzBdKSk7ZWxzZSBmb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSlfLnB1c2goWyJiX3B0ciIsaSwiPXMwKiIsZVtpXV0uam9pbigiIikpO3ImJl8ucHVzaCgicGl2b3RfcHRyPTAiKSxfLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKTtmb3IodmFyIGk9dC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89dFtpXTswIT09byYmXy5wdXNoKFsiZm9yKGkiLG8sIj0wO2kiLG8sIjxuIixvLCI7KytpIixvLCIpeyJdLmpvaW4oIiIpKX1pZihlLmxlbmd0aD4xKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKV8ucHVzaChbInB0ciIsaSwiPWJfcHRyIixpLCIrcHRyX3NoaWZ0Il0uam9pbigiIikpO18ucHVzaChuKSxyJiZfLnB1c2goIisrcGl2b3RfcHRyIik7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV07MCE9PW8mJihlLmxlbmd0aD4xP18ucHVzaCgicHRyX3NoaWZ0Kz1kIitvKTpfLnB1c2goInB0cjArPWQiK28pLF8ucHVzaCgifSIpKX19ZnVuY3Rpb24gYyhlLHIsbixpKXtpZigxPT09ci5sZW5ndGgpXy5wdXNoKCJwdHIwPSIrYShyWzBdKSk7ZWxzZXtmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbylfLnB1c2goWyJiX3B0ciIsbywiPXMwKiIscltvXV0uam9pbigiIikpO18ucHVzaCgicHRyX3NoaWZ0PW9mZnNldCIpfW4mJl8ucHVzaCgicGl2b3RfcHRyPTAiKSxlJiZfLnB1c2goZSsiOiIpO2Zvcih2YXIgbz0xO288dC5sZW5ndGg7KytvKV8ucHVzaChbImZvcihpIixvLCI9MDtpIixvLCI8biIsbywiOysraSIsbywiKXsiXS5qb2luKCIiKSk7aWYoci5sZW5ndGg+MSlmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbylfLnB1c2goWyJwdHIiLG8sIj1iX3B0ciIsbywiK3B0cl9zaGlmdCJdLmpvaW4oIiIpKTtfLnB1c2goaSk7Zm9yKHZhciBvPXQubGVuZ3RoLTE7bz49MTstLW8pbiYmXy5wdXNoKCJwaXZvdF9wdHIrPWYiK28pLHIubGVuZ3RoPjE/Xy5wdXNoKCJwdHJfc2hpZnQrPWUiK28pOl8ucHVzaCgicHRyMCs9ZSIrbyksXy5wdXNoKCJ9Iil9ZnVuY3Rpb24gaCgpe3QubGVuZ3RoPjEmJmsmJl8ucHVzaCgiZnJlZShwaXZvdDEpIiwiZnJlZShwaXZvdDIpIil9ZnVuY3Rpb24gZihlLHIpe3ZhciBuPSJlbCIrZSxpPSJlbCIrcjtpZih0Lmxlbmd0aD4xKXt2YXIgcz0iX19sIisgKytBO2MocyxbbixpXSwhMSxbImNvbXA9IixvKCJwdHIwIiksIi0iLG8oInB0cjEiKSwiXG4iLCJpZihjb21wPjApe3RtcDA9IixuLCI7IixuLCI9IixpLCI7IixpLCI9dG1wMDticmVhayAiLHMsIn1cbiIsImlmKGNvbXA8MCl7YnJlYWsgIixzLCJ9Il0uam9pbigiIikpfWVsc2UgXy5wdXNoKFsiaWYoIixvKGEobikpLCI+IixvKGEoaSkpLCIpe3RtcDA9IixuLCI7IixuLCI9IixpLCI7IixpLCI9dG1wMH0iXS5qb2luKCIiKSl9ZnVuY3Rpb24gZChlLHIpe3QubGVuZ3RoPjE/bChbZSxyXSwhMSxzKCJwdHIwIixvKCJwdHIxIikpKTpfLnB1c2gocyhhKGUpLG8oYShyKSkpKX1mdW5jdGlvbiBwKGUscixuKXtpZih0Lmxlbmd0aD4xKXt2YXIgaT0iX19sIisgKytBO2MoaSxbcl0sITAsW2UsIj0iLG8oInB0cjAiKSwiLXBpdm90IixuLCJbcGl2b3RfcHRyXVxuIiwiaWYoIixlLCIhPT0wKXticmVhayAiLGksIn0iXS5qb2luKCIiKSl9ZWxzZSBfLnB1c2goW2UsIj0iLG8oYShyKSksIi1waXZvdCIsbl0uam9pbigiIikpfWZ1bmN0aW9uIG0oZSxyKXt0Lmxlbmd0aD4xP2woW2Uscl0sITEsWyJ0bXA9IixvKCJwdHIwIiksIlxuIixzKCJwdHIwIixvKCJwdHIxIikpLCJcbiIscygicHRyMSIsInRtcCIpXS5qb2luKCIiKSk6Xy5wdXNoKFsicHRyMD0iLGEoZSksIlxuIiwicHRyMT0iLGEociksIlxuIiwidG1wPSIsbygicHRyMCIpLCJcbiIscygicHRyMCIsbygicHRyMSIpKSwiXG4iLHMoInB0cjEiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIHYoZSxyLG4pe3QubGVuZ3RoPjE/KGwoW2UscixuXSwhMSxbInRtcD0iLG8oInB0cjAiKSwiXG4iLHMoInB0cjAiLG8oInB0cjEiKSksIlxuIixzKCJwdHIxIixvKCJwdHIyIikpLCJcbiIscygicHRyMiIsInRtcCIpXS5qb2luKCIiKSksXy5wdXNoKCIrKyIrciwiLS0iK24pKTpfLnB1c2goWyJwdHIwPSIsYShlKSwiXG4iLCJwdHIxPSIsYShyKSwiXG4iLCJwdHIyPSIsYShuKSwiXG4iLCIrKyIsciwiXG4iLCItLSIsbiwiXG4iLCJ0bXA9IixvKCJwdHIwIiksIlxuIixzKCJwdHIwIixvKCJwdHIxIikpLCJcbiIscygicHRyMSIsbygicHRyMiIpKSwiXG4iLHMoInB0cjIiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIGcodCxlKXttKHQsZSksXy5wdXNoKCItLSIrZSl9ZnVuY3Rpb24geShlLHIsbil7dC5sZW5ndGg+MT9sKFtlLHJdLCEwLFtzKCJwdHIwIixvKCJwdHIxIikpLCJcbiIscygicHRyMSIsWyJwaXZvdCIsbiwiW3Bpdm90X3B0cl0iXS5qb2luKCIiKSldLmpvaW4oIiIpKTpfLnB1c2gocyhhKGUpLG8oYShyKSkpLHMoYShyKSwicGl2b3QiK24pKX1mdW5jdGlvbiBiKGUscil7Xy5wdXNoKFsiaWYoKCIsciwiLSIsZSwiKTw9Iix1LCIpe1xuIiwiaW5zZXJ0aW9uU29ydCgiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLGkodC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifWVsc2V7XG4iLHcsIigiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLGkodC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifSJdLmpvaW4oIiIpKX1mdW5jdGlvbiB4KGUscixuKXt0Lmxlbmd0aD4xPyhfLnB1c2goWyJfX2wiLCsrQSwiOndoaWxlKHRydWUpeyJdLmpvaW4oIiIpKSxsKFtlXSwhMCxbImlmKCIsbygicHRyMCIpLCIhPT1waXZvdCIsciwiW3Bpdm90X3B0cl0pe2JyZWFrIF9fbCIsQSwifSJdLmpvaW4oIiIpKSxfLnB1c2gobiwifSIpKTpfLnB1c2goWyJ3aGlsZSgiLG8oYShlKSksIj09PXBpdm90IixyLCIpeyIsbiwifSJdLmpvaW4oIiIpKX12YXIgXz1bIid1c2Ugc3RyaWN0JyJdLHc9WyJuZGFycmF5UXVpY2tTb3J0Iix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxNPVsibGVmdCIsInJpZ2h0IiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChpKHQubGVuZ3RoKSksaz1uKGUpLEE9MDtfLnB1c2goWyJmdW5jdGlvbiAiLHcsIigiLE0uam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTt2YXIgVD1bInNpeHRoPSgocmlnaHQtbGVmdCsxKS82KXwwIiwiaW5kZXgxPWxlZnQrc2l4dGgiLCJpbmRleDU9cmlnaHQtc2l4dGgiLCJpbmRleDM9KGxlZnQrcmlnaHQpPj4xIiwiaW5kZXgyPWluZGV4My1zaXh0aCIsImluZGV4ND1pbmRleDMrc2l4dGgiLCJlbDE9aW5kZXgxIiwiZWwyPWluZGV4MiIsImVsMz1pbmRleDMiLCJlbDQ9aW5kZXg0IiwiZWw1PWluZGV4NSIsImxlc3M9bGVmdCsxIiwiZ3JlYXQ9cmlnaHQtMSIsInBpdm90c19hcmVfZXF1YWw9dHJ1ZSIsInRtcCIsInRtcDAiLCJ4IiwieSIsInoiLCJrIiwicHRyMCIsInB0cjEiLCJwdHIyIiwiY29tcF9waXZvdDE9MCIsImNvbXBfcGl2b3QyPTAiLCJjb21wPTAiXTtpZih0Lmxlbmd0aD4xKXtmb3IodmFyIFM9W10sRT0xO0U8dC5sZW5ndGg7KytFKVMucHVzaCgibiIrRSksVC5wdXNoKCJpIitFKTtmb3IodmFyIEU9MDtFPDg7KytFKVQucHVzaCgiYl9wdHIiK0UpO1QucHVzaCgicHRyMyIsInB0cjQiLCJwdHI1IiwicHRyNiIsInB0cjciLCJwaXZvdF9wdHIiLCJwdHJfc2hpZnQiLCJlbGVtZW50U2l6ZT0iK1Muam9pbigiKiIpKSxrP1QucHVzaCgicGl2b3QxPW1hbGxvYyhlbGVtZW50U2l6ZSkiLCJwaXZvdDI9bWFsbG9jKGVsZW1lbnRTaXplKSIpOlQucHVzaCgicGl2b3QxPW5ldyBBcnJheShlbGVtZW50U2l6ZSkscGl2b3QyPW5ldyBBcnJheShlbGVtZW50U2l6ZSkiKX1lbHNlIFQucHVzaCgicGl2b3QxIiwicGl2b3QyIik7aWYoXy5wdXNoKCJ2YXIgIitULmpvaW4oIiwiKSksZigxLDIpLGYoNCw1KSxmKDEsMyksZigyLDMpLGYoMSw0KSxmKDMsNCksZigyLDUpLGYoMiwzKSxmKDQsNSksdC5sZW5ndGg+MT9sKFsiZWwxIiwiZWwyIiwiZWwzIiwiZWw0IiwiZWw1IiwiaW5kZXgxIiwiaW5kZXgzIiwiaW5kZXg1Il0sITAsWyJwaXZvdDFbcGl2b3RfcHRyXT0iLG8oInB0cjEiKSwiXG4iLCJwaXZvdDJbcGl2b3RfcHRyXT0iLG8oInB0cjMiKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90c19hcmVfZXF1YWwmJihwaXZvdDFbcGl2b3RfcHRyXT09PXBpdm90MltwaXZvdF9wdHJdKVxuIiwieD0iLG8oInB0cjAiKSwiXG4iLCJ5PSIsbygicHRyMiIpLCJcbiIsIno9IixvKCJwdHI0IiksIlxuIixzKCJwdHI1IiwieCIpLCJcbiIscygicHRyNiIsInkiKSwiXG4iLHMoInB0cjciLCJ6IildLmpvaW4oIiIpKTpfLnB1c2goWyJwaXZvdDE9IixvKGEoImVsMiIpKSwiXG4iLCJwaXZvdDI9IixvKGEoImVsNCIpKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90MT09PXBpdm90MlxuIiwieD0iLG8oYSgiZWwxIikpLCJcbiIsInk9IixvKGEoImVsMyIpKSwiXG4iLCJ6PSIsbyhhKCJlbDUiKSksIlxuIixzKGEoImluZGV4MSIpLCJ4IiksIlxuIixzKGEoImluZGV4MyIpLCJ5IiksIlxuIixzKGEoImluZGV4NSIpLCJ6IildLmpvaW4oIiIpKSxkKCJpbmRleDIiLCJsZWZ0IiksZCgiaW5kZXg0IiwicmlnaHQiKSxfLnB1c2goImlmKHBpdm90c19hcmVfZXF1YWwpeyIpLF8ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHAoImNvbXAiLCJrIiwxKSxfLnB1c2goImlmKGNvbXA9PT0wKXtjb250aW51ZX0iKSxfLnB1c2goImlmKGNvbXA8MCl7IiksXy5wdXNoKCJpZihrIT09bGVzcyl7IiksbSgiayIsImxlc3MiKSxfLnB1c2goIn0iKSxfLnB1c2goIisrbGVzcyIpLF8ucHVzaCgifWVsc2V7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxwKCJjb21wIiwiZ3JlYXQiLDEpLF8ucHVzaCgiaWYoY29tcD4wKXsiKSxfLnB1c2goImdyZWF0LS0iKSxfLnB1c2goIn1lbHNlIGlmKGNvbXA8MCl7IiksdigiayIsImxlc3MiLCJncmVhdCIpLF8ucHVzaCgiYnJlYWsiKSxfLnB1c2goIn1lbHNleyIpLGcoImsiLCJncmVhdCIpLF8ucHVzaCgiYnJlYWsiKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn1lbHNleyIpLF8ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHAoImNvbXBfcGl2b3QxIiwiayIsMSksXy5wdXNoKCJpZihjb21wX3Bpdm90MTwwKXsiKSxfLnB1c2goImlmKGshPT1sZXNzKXsiKSxtKCJrIiwibGVzcyIpLF8ucHVzaCgifSIpLF8ucHVzaCgiKytsZXNzIiksXy5wdXNoKCJ9ZWxzZXsiKSxwKCJjb21wX3Bpdm90MiIsImsiLDIpLF8ucHVzaCgiaWYoY29tcF9waXZvdDI+MCl7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxwKCJjb21wIiwiZ3JlYXQiLDIpLF8ucHVzaCgiaWYoY29tcD4wKXsiKSxfLnB1c2goImlmKC0tZ3JlYXQ8ayl7YnJlYWt9IiksXy5wdXNoKCJjb250aW51ZSIpLF8ucHVzaCgifWVsc2V7IikscCgiY29tcCIsImdyZWF0IiwxKSxfLnB1c2goImlmKGNvbXA8MCl7IiksdigiayIsImxlc3MiLCJncmVhdCIpLF8ucHVzaCgifWVsc2V7IiksZygiayIsImdyZWF0IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJicmVhayIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLHkoImxlZnQiLCIobGVzcy0xKSIsMSkseSgicmlnaHQiLCIoZ3JlYXQrMSkiLDIpLGIoImxlZnQiLCIobGVzcy0yKSIpLGIoIihncmVhdCsyKSIsInJpZ2h0IiksXy5wdXNoKCJpZihwaXZvdHNfYXJlX2VxdWFsKXsiKSxoKCksXy5wdXNoKCJyZXR1cm4iKSxfLnB1c2goIn0iKSxfLnB1c2goImlmKGxlc3M8aW5kZXgxJiZncmVhdD5pbmRleDUpeyIpLHgoImxlc3MiLDEsIisrbGVzcyIpLHgoImdyZWF0IiwyLCItLWdyZWF0IiksXy5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IikscCgiY29tcF9waXZvdDEiLCJrIiwxKSxfLnB1c2goImlmKGNvbXBfcGl2b3QxPT09MCl7IiksXy5wdXNoKCJpZihrIT09bGVzcyl7IiksbSgiayIsImxlc3MiKSxfLnB1c2goIn0iKSxfLnB1c2goIisrbGVzcyIpLF8ucHVzaCgifWVsc2V7IikscCgiY29tcF9waXZvdDIiLCJrIiwyKSxfLnB1c2goImlmKGNvbXBfcGl2b3QyPT09MCl7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxwKCJjb21wIiwiZ3JlYXQiLDIpLF8ucHVzaCgiaWYoY29tcD09PTApeyIpLF8ucHVzaCgiaWYoLS1ncmVhdDxrKXticmVha30iKSxfLnB1c2goImNvbnRpbnVlIiksXy5wdXNoKCJ9ZWxzZXsiKSxwKCJjb21wIiwiZ3JlYXQiLDEpLF8ucHVzaCgiaWYoY29tcDwwKXsiKSx2KCJrIiwibGVzcyIsImdyZWF0IiksXy5wdXNoKCJ9ZWxzZXsiKSxnKCJrIiwiZ3JlYXQiKSxfLnB1c2goIn0iKSxfLnB1c2goImJyZWFrIiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksaCgpLGIoImxlc3MiLCJncmVhdCIpLF8ucHVzaCgifXJldHVybiAiK3cpLHQubGVuZ3RoPjEmJmspe3ZhciBMPW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsIm1hbGxvYyIsImZyZWUiLF8uam9pbigiXG4iKSk7cmV0dXJuIEwocixrWzBdLGtbMV0pfXZhciBMPW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsXy5qb2luKCJcbiIpKTtyZXR1cm4gTChyKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9WyIndXNlIHN0cmljdCciXSxuPVsibmRhcnJheVNvcnRXcmFwcGVyIix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxzPVsiYXJyYXkiXTtyLnB1c2goWyJmdW5jdGlvbiAiLG4sIigiLHMuam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGw9WyJkYXRhPWFycmF5LmRhdGEsb2Zmc2V0PWFycmF5Lm9mZnNldHwwLHNoYXBlPWFycmF5LnNoYXBlLHN0cmlkZT1hcnJheS5zdHJpZGUiXSxjPTA7Yzx0Lmxlbmd0aDsrK2MpbC5wdXNoKFsicyIsYywiPXN0cmlkZVsiLGMsIl18MCxuIixjLCI9c2hhcGVbIixjLCJdfDAiXS5qb2luKCIiKSk7Zm9yKHZhciBoPW5ldyBBcnJheSh0Lmxlbmd0aCksZj1bXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mpe3ZhciBkPXRbY107MCE9PWQmJigwPT09Zi5sZW5ndGg/aFtkXT0iMSI6aFtkXT1mLmpvaW4oIioiKSxmLnB1c2goIm4iK2QpKX1mb3IodmFyIHA9LTEsbT0tMSxjPTA7Yzx0Lmxlbmd0aDsrK2Mpe3ZhciB2PXRbY107MCE9PXYmJihwPjA/bC5wdXNoKFsiZCIsdiwiPXMiLHYsIi1kIixwLCIqbiIscF0uam9pbigiIikpOmwucHVzaChbImQiLHYsIj1zIix2XS5qb2luKCIiKSkscD12KTt2YXIgZD10Lmxlbmd0aC0xLWM7MCE9PWQmJihtPjA/bC5wdXNoKFsiZSIsZCwiPXMiLGQsIi1lIixtLCIqbiIsbSwiLGYiLGQsIj0iLGhbZF0sIi1mIixtLCIqbiIsbV0uam9pbigiIikpOmwucHVzaChbImUiLGQsIj1zIixkLCIsZiIsZCwiPSIsaFtkXV0uam9pbigiIikpLG09ZCl9ci5wdXNoKCJ2YXIgIitsLmpvaW4oIiwiKSk7dmFyIGc9WyIwIiwibjAtMSIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQoaSh0Lmxlbmd0aCkpO3IucHVzaChbImlmKG4wPD0iLHUsIil7IiwiaW5zZXJ0aW9uU29ydCgiLGcuam9pbigiLCIpLCIpfWVsc2V7IiwicXVpY2tTb3J0KCIsZy5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHIucHVzaCgifXJldHVybiAiK24pO3ZhciB5PW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsInF1aWNrU29ydCIsci5qb2luKCJcbiIpKSxiPWEodCxlKTtyZXR1cm4geShiLG8odCxlLGIpKX12YXIgbD10KCJ0eXBlZGFycmF5LXBvb2wiKSx1PTMyO2UuZXhwb3J0cz1zfSx7InR5cGVkYXJyYXktcG9vbCI6NTM5fV0sNDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5vcmRlcixyPXQuZHR5cGUsbj1bZSxyXSxvPW4uam9pbigiOiIpLHM9YVtvXTtyZXR1cm4gc3x8KGFbb109cz1pKGUscikpLHModCksdH12YXIgaT10KCIuL2xpYi9jb21waWxlX3NvcnQuanMiKSxhPXt9O2UuZXhwb3J0cz1ufSx7Ii4vbGliL2NvbXBpbGVfc29ydC5qcyI6NDYyfV0sNDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIiksaT10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPW5ldyBBcnJheShfaW5saW5lXzlfYXJnNF8pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfOV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV85X2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzlfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfOV9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV85X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV8xMF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzEwX2FyZzBfKSxfaW5saW5lXzEwX2FyZzFfPV9pbmxpbmVfMTBfYXJnM18uYXBwbHkodm9pZCAwLHRoaXNfd2FycGVkKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzEwX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEwX2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEwX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEwX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEwX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwTkQiLGJsb2NrU2l6ZTo2NH0pLGE9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzEzX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTNfYXJnMF8pLF9pbmxpbmVfMTNfYXJnMV89X2lubGluZV8xM19hcmczXyhfaW5saW5lXzEzX2FyZzRfLHRoaXNfd2FycGVkWzBdKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzEzX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwMUQiLGJsb2NrU2l6ZTo2NH0pLG89dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMCwwXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfMTZfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV8xNl9hcmcwXyksX2lubGluZV8xNl9hcmcxXz1faW5saW5lXzE2X2FyZzNfKF9pbmxpbmVfMTZfYXJnNF8sdGhpc193YXJwZWRbMF0sdGhpc193YXJwZWRbMV0pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMTZfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6IndhcnAyRCIsYmxvY2tTaXplOjY0fSkscz10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPVswLDAsMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzE5X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTlfYXJnMF8pLF9pbmxpbmVfMTlfYXJnMV89X2lubGluZV8xOV9hcmczXyhfaW5saW5lXzE5X2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdLHRoaXNfd2FycGVkWzJdKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzE5X2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzE5X2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzE5X2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzE5X2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzE5X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwM0QiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGUuc2hhcGUubGVuZ3RoKXtjYXNlIDE6YSh0LHIsbi5kMSxlKTticmVhaztjYXNlIDI6byh0LHIsbi5kMixlKTticmVhaztjYXNlIDM6cyh0LHIsbi5kMyxlKTticmVhaztkZWZhdWx0OmkodCxyLG4uYmluZCh2b2lkIDAsZSksZS5zaGFwZS5sZW5ndGgpfXJldHVybiB0fX0seyJjd2lzZS9saWIvd3JhcHBlciI6MTExLCJuZGFycmF5LWxpbmVhci1pbnRlcnBvbGF0ZSI6NDU4fV0sNDY1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gaSgpe3ZhciB0LGU9dGhpcy5zdHJpZGUscj1uZXcgQXJyYXkoZS5sZW5ndGgpO2Zvcih0PTA7dDxyLmxlbmd0aDsrK3Qpclt0XT1bTWF0aC5hYnMoZVt0XSksdF07ci5zb3J0KG4pO3ZhciBpPW5ldyBBcnJheShyLmxlbmd0aCk7Zm9yKHQ9MDt0PGkubGVuZ3RoOysrdClpW3RdPXJbdF1bMV07cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPVsiVmlldyIsZSwiZCIsdF0uam9pbigiIik7ZTwwJiYocj0iVmlld19OaWwiK3QpO3ZhciBuPSJnZW5lcmljIj09PXQ7aWYoLTE9PT1lKXt2YXIgYT0iZnVuY3Rpb24gIityKyIoYSl7dGhpcy5kYXRhPWE7fTt2YXIgcHJvdG89IityKyIucHJvdG90eXBlO3Byb3RvLmR0eXBlPSciK3QrIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gLTF9O3Byb3RvLnNpemU9MDtwcm90by5kaW1lbnNpb249LTE7cHJvdG8uc2hhcGU9cHJvdG8uc3RyaWRlPXByb3RvLm9yZGVyPVtdO3Byb3RvLmxvPXByb3RvLmhpPXByb3RvLnRyYW5zcG9zZT1wcm90by5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEpO307cHJvdG8uZ2V0PXByb3RvLnNldD1mdW5jdGlvbigpe307cHJvdG8ucGljaz1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGEpe3JldHVybiBuZXcgIityKyIoYSk7fSIsbz1uZXcgRnVuY3Rpb24oYSk7cmV0dXJuIG8oKX1pZigwPT09ZSl7dmFyIGE9ImZ1bmN0aW9uICIrcisiKGEsZCkge3RoaXMuZGF0YSA9IGE7dGhpcy5vZmZzZXQgPSBkfTt2YXIgcHJvdG89IityKyIucHJvdG90eXBlO3Byb3RvLmR0eXBlPSciK3QrIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9O3Byb3RvLmRpbWVuc2lvbj0wO3Byb3RvLnNpemU9MTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfY29weSgpIHtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSx0aGlzLm9mZnNldCl9O3Byb3RvLnBpY2s9ZnVuY3Rpb24gIityKyJfcGljaygpe3JldHVybiBUcml2aWFsQXJyYXkodGhpcy5kYXRhKTt9O3Byb3RvLnZhbHVlT2Y9cHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgpe3JldHVybiAiKyhuPyJ0aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0KSI6InRoaXMuZGF0YVt0aGlzLm9mZnNldF0iKSsifTtwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KHYpe3JldHVybiAiKyhuPyJ0aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LHYpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XT12IikrIn07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhLGIsYyxkKXtyZXR1cm4gbmV3ICIrcisiKGEsZCl9IixvPW5ldyBGdW5jdGlvbigiVHJpdmlhbEFycmF5IixhKTtyZXR1cm4gbyhoW3RdWzBdKX12YXIgYT1bIid1c2Ugc3RyaWN0JyJdLHM9bChlKSx1PXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJpIit0fSksYz0idGhpcy5vZmZzZXQrIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zdHJpZGVbIit0KyJdKmkiK3R9KS5qb2luKCIrIiksZj1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdH0pLmpvaW4oIiwiKSxkPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJjIit0fSkuam9pbigiLCIpO2EucHVzaCgiZnVuY3Rpb24gIityKyIoYSwiK2YrIiwiK2QrIixkKXt0aGlzLmRhdGE9YSIsInRoaXMuc2hhcGU9WyIrZisiXSIsInRoaXMuc3RyaWRlPVsiK2QrIl0iLCJ0aGlzLm9mZnNldD1kfDB9IiwidmFyIHByb3RvPSIrcisiLnByb3RvdHlwZSIsInByb3RvLmR0eXBlPSciK3QrIiciLCJwcm90by5kaW1lbnNpb249IitlKSxhLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnc2l6ZScse2dldDpmdW5jdGlvbiAiK3IrIl9zaXplKCl7cmV0dXJuICIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInRoaXMuc2hhcGVbIit0KyJdIn0pLmpvaW4oIioiKSwifX0pIiksMT09PWU/YS5wdXNoKCJwcm90by5vcmRlcj1bMF0iKTooYS5wdXNoKCJPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sJ29yZGVyJyx7Z2V0OiIpLGU8ND8oYS5wdXNoKCJmdW5jdGlvbiAiK3IrIl9vcmRlcigpeyIpLAoyPT09ZT9hLnB1c2goInJldHVybiAoTWF0aC5hYnModGhpcy5zdHJpZGVbMF0pPk1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSk/WzEsMF06WzAsMV19fSkiKTozPT09ZSYmYS5wdXNoKCJ2YXIgczA9TWF0aC5hYnModGhpcy5zdHJpZGVbMF0pLHMxPU1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSxzMj1NYXRoLmFicyh0aGlzLnN0cmlkZVsyXSk7aWYoczA+czEpe2lmKHMxPnMyKXtyZXR1cm4gWzIsMSwwXTt9ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsxLDIsMF07fWVsc2V7cmV0dXJuIFsxLDAsMl07fX1lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzIsMCwxXTt9ZWxzZSBpZihzMj5zMSl7cmV0dXJuIFswLDEsMl07fWVsc2V7cmV0dXJuIFswLDIsMV07fX19KSIpKTphLnB1c2goIk9SREVSfSkiKSksYS5wdXNoKCJwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KCIrdS5qb2luKCIsIikrIix2KXsiKSxuP2EucHVzaCgicmV0dXJuIHRoaXMuZGF0YS5zZXQoIitjKyIsdil9Iik6YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhWyIrYysiXT12fSIpLGEucHVzaCgicHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgiK3Uuam9pbigiLCIpKyIpeyIpLG4/YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhLmdldCgiK2MrIil9Iik6YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhWyIrYysiXX0iKSxhLnB1c2goInByb3RvLmluZGV4PWZ1bmN0aW9uICIrcisiX2luZGV4KCIsdS5qb2luKCksIil7cmV0dXJuICIrYysifSIpLGEucHVzaCgicHJvdG8uaGk9ZnVuY3Rpb24gIityKyJfaGkoIit1LmpvaW4oIiwiKSsiKXtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVyblsiKHR5cGVvZiBpIix0LCIhPT0nbnVtYmVyJ3x8aSIsdCwiPDApP3RoaXMuc2hhcGVbIix0LCJdOmkiLHQsInwwIl0uam9pbigiIil9KS5qb2luKCIsIikrIiwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnN0cmlkZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsdGhpcy5vZmZzZXQpfSIpO3ZhciBwPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSksbT1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYyIrdCsiPXRoaXMuc3RyaWRlWyIrdCsiXSJ9KTthLnB1c2goInByb3RvLmxvPWZ1bmN0aW9uICIrcisiX2xvKCIrdS5qb2luKCIsIikrIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLCIrcC5qb2luKCIsIikrIiwiK20uam9pbigiLCIpKTtmb3IodmFyIHY9MDt2PGU7Kyt2KWEucHVzaCgiaWYodHlwZW9mIGkiK3YrIj09PSdudW1iZXInJiZpIit2KyI+PTApe2Q9aSIrdisifDA7Yis9YyIrdisiKmQ7YSIrdisiLT1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pLmpvaW4oIiwiKSsiLCIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KS5qb2luKCIsIikrIixiKX0iKSxhLnB1c2goInByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfc3RlcCgiK3Uuam9pbigiLCIpKyIpe3ZhciAiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdCsiPXRoaXMuc3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIixjPXRoaXMub2Zmc2V0LGQ9MCxjZWlsPU1hdGguY2VpbCIpO2Zvcih2YXIgdj0wO3Y8ZTsrK3YpYS5wdXNoKCJpZih0eXBlb2YgaSIrdisiPT09J251bWJlcicpe2Q9aSIrdisifDA7aWYoZDwwKXtjKz1iIit2KyIqKGEiK3YrIi0xKTthIit2KyI9Y2VpbCgtYSIrdisiL2QpfWVsc2V7YSIrdisiPWNlaWwoYSIrdisiL2QpfWIiK3YrIio9ZH0iKTthLnB1c2goInJldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImEiK3R9KS5qb2luKCIsIikrIiwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJiIit0fSkuam9pbigiLCIpKyIsYyl9Iik7Zm9yKHZhciBnPW5ldyBBcnJheShlKSx5PW5ldyBBcnJheShlKSx2PTA7djxlOysrdilnW3ZdPSJhW2kiK3YrIl0iLHlbdl09ImJbaSIrdisiXSI7YS5wdXNoKCJwcm90by50cmFuc3Bvc2U9ZnVuY3Rpb24gIityKyJfdHJhbnNwb3NlKCIrdSsiKXsiK3UubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIj0oIit0KyI9PT11bmRlZmluZWQ/IitlKyI6Iit0KyJ8MCkifSkuam9pbigiOyIpLCJ2YXIgYT10aGlzLnNoYXBlLGI9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitnLmpvaW4oIiwiKSsiLCIreS5qb2luKCIsIikrIix0aGlzLm9mZnNldCl9IiksYS5wdXNoKCJwcm90by5waWNrPWZ1bmN0aW9uICIrcisiX3BpY2soIit1KyIpe3ZhciBhPVtdLGI9W10sYz10aGlzLm9mZnNldCIpO2Zvcih2YXIgdj0wO3Y8ZTsrK3YpYS5wdXNoKCJpZih0eXBlb2YgaSIrdisiPT09J251bWJlcicmJmkiK3YrIj49MCl7Yz0oYyt0aGlzLnN0cmlkZVsiK3YrIl0qaSIrdisiKXwwfWVsc2V7YS5wdXNoKHRoaXMuc2hhcGVbIit2KyJdKTtiLnB1c2godGhpcy5zdHJpZGVbIit2KyJdKX0iKTthLnB1c2goInZhciBjdG9yPUNUT1JfTElTVFthLmxlbmd0aCsxXTtyZXR1cm4gY3Rvcih0aGlzLmRhdGEsYSxiLGMpfSIpLGEucHVzaCgicmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihkYXRhLHNoYXBlLHN0cmlkZSxvZmZzZXQpe3JldHVybiBuZXcgIityKyIoZGF0YSwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJzaGFwZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4ic3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIixvZmZzZXQpfSIpO3ZhciBvPW5ldyBGdW5jdGlvbigiQ1RPUl9MSVNUIiwiT1JERVIiLGEuam9pbigiXG4iKSk7cmV0dXJuIG8oaFt0XSxpKX1mdW5jdGlvbiBvKHQpe2lmKHUodCkpcmV0dXJuImJ1ZmZlciI7aWYoYylzd2l0Y2goT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXtjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6cmV0dXJuImZsb2F0NjQiO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpyZXR1cm4iZmxvYXQzMiI7Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOnJldHVybiJpbnQ4IjtjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOnJldHVybiJpbnQxNiI7Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpyZXR1cm4iaW50MzIiO2Nhc2UiW29iamVjdCBVaW50OEFycmF5XSI6cmV0dXJuInVpbnQ4IjtjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpyZXR1cm4idWludDE2IjtjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4idWludDMyIjtjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpyZXR1cm4idWludDhfY2xhbXBlZCJ9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ImFycmF5IjoiZ2VuZXJpYyJ9ZnVuY3Rpb24gcyh0LGUscixuKXtpZih2b2lkIDA9PT10KXt2YXIgaT1oLmFycmF5WzBdO3JldHVybiBpKFtdKX0ibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSksdm9pZCAwPT09ZSYmKGU9W3QubGVuZ3RoXSk7dmFyIHM9ZS5sZW5ndGg7aWYodm9pZCAwPT09cil7cj1uZXcgQXJyYXkocyk7Zm9yKHZhciBsPXMtMSx1PTE7bD49MDstLWwpcltsXT11LHUqPWVbbF19aWYodm9pZCAwPT09bil7bj0wO2Zvcih2YXIgbD0wO2w8czsrK2wpcltsXTwwJiYobi09KGVbbF0tMSkqcltsXSl9Zm9yKHZhciBjPW8odCksZj1oW2NdO2YubGVuZ3RoPD1zKzE7KWYucHVzaChhKGMsZi5sZW5ndGgtMSkpO3ZhciBpPWZbcysxXTtyZXR1cm4gaSh0LGUscixuKX12YXIgbD10KCJpb3RhLWFycmF5IiksdT10KCJpcy1idWZmZXIiKSxjPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5LGg9e2Zsb2F0MzI6W10sZmxvYXQ2NDpbXSxpbnQ4OltdLGludDE2OltdLGludDMyOltdLHVpbnQ4OltdLHVpbnQxNjpbXSx1aW50MzI6W10sYXJyYXk6W10sdWludDhfY2xhbXBlZDpbXSxidWZmZXI6W10sZ2VuZXJpYzpbXX07ZS5leHBvcnRzPXN9LHsiaW90YS1hcnJheSI6MjkxLCJpcy1idWZmZXIiOjI5M31dLDQ2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8tYTphO3ZhciByPWkuaGkodCksbj1pLmxvKHQpO3JldHVybiBlPnQ9PXQ+MD9uPT09bz8ocis9MSxuPTApOm4rPTE6MD09PW4/KG49byxyLT0xKTpuLT0xLGkucGFjayhuLHIpfXZhciBpPXQoImRvdWJsZS1iaXRzIiksYT1NYXRoLnBvdygyLC0xMDc0KSxvPS0xPj4+MDtlLmV4cG9ydHM9bn0seyJkb3VibGUtYml0cyI6MTIyfV0sNDY3OltmdW5jdGlvbih0LGUscil7ci52ZXJ0ZXhOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbylpW29dPVswLDAsMF07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDsrK28pZm9yKHZhciBzPXRbb10sbD0wLHU9c1tzLmxlbmd0aC0xXSxjPXNbMF0saD0wO2g8cy5sZW5ndGg7KytoKXtsPXUsdT1jLGM9c1soaCsxKSVzLmxlbmd0aF07Zm9yKHZhciBmPWVbbF0sZD1lW3VdLHA9ZVtjXSxtPW5ldyBBcnJheSgzKSx2PTAsZz1uZXcgQXJyYXkoMykseT0wLGI9MDtiPDM7KytiKW1bYl09ZltiXS1kW2JdLHYrPW1bYl0qbVtiXSxnW2JdPXBbYl0tZFtiXSx5Kz1nW2JdKmdbYl07aWYodip5PmEpZm9yKHZhciB4PWlbdV0sXz0xL01hdGguc3FydCh2KnkpLGI9MDtiPDM7KytiKXt2YXIgdz0oYisxKSUzLE09KGIrMiklMzt4W2JdKz1fKihnW3ddKm1bTV0tZ1tNXSptW3ddKX19Zm9yKHZhciBvPTA7bzxuOysrbyl7Zm9yKHZhciB4PWlbb10saz0wLGI9MDtiPDM7KytiKWsrPXhbYl0qeFtiXTtpZihrPmEpZm9yKHZhciBfPTEvTWF0aC5zcXJ0KGspLGI9MDtiPDM7KytiKXhbYl0qPV87ZWxzZSBmb3IodmFyIGI9MDtiPDM7KytiKXhbYl09MH1yZXR1cm4gaX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLHU9MDt1PDM7Kyt1KWxbdV09ZVtzW3VdXTtmb3IodmFyIGM9bmV3IEFycmF5KDMpLGg9bmV3IEFycmF5KDMpLHU9MDt1PDM7Kyt1KWNbdV09bFsxXVt1XS1sWzBdW3VdLGhbdV09bFsyXVt1XS1sWzBdW3VdO2Zvcih2YXIgZj1uZXcgQXJyYXkoMyksZD0wLHU9MDt1PDM7Kyt1KXt2YXIgcD0odSsxKSUzLG09KHUrMiklMztmW3VdPWNbcF0qaFttXS1jW21dKmhbcF0sZCs9Zlt1XSpmW3VdfWQ9ZD5hPzEvTWF0aC5zcXJ0KGQpOjA7Zm9yKHZhciB1PTA7dTwzOysrdSlmW3VdKj1kO2lbb109Zn1yZXR1cm4gaX19LHt9XSw0Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZihudWxsPT09dHx8dm9pZCAwPT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgdD1uZXcgU3RyaW5nKCJhYmMiKTtpZih0WzVdPSJkZSIsIjUiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModClbMF0pcmV0dXJuITE7Zm9yKHZhciBlPXt9LHI9MDtyPDEwO3IrKyllWyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlKHIpXT1yO2lmKCIwMTIzNDU2Nzg5IiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLmpvaW4oIiIpKXJldHVybiExO3ZhciBuPXt9O3JldHVybiJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKHQpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLHMsbD1uKHQpLHU9MTt1PGFyZ3VtZW50cy5sZW5ndGg7dSsrKXtyPU9iamVjdChhcmd1bWVudHNbdV0pO2Zvcih2YXIgYyBpbiByKWEuY2FsbChyLGMpJiYobFtjXT1yW2NdKTtpZihpKXtzPWkocik7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspby5jYWxsKHIsc1toXSkmJihsW3NbaF1dPXJbc1toXV0pfX1yZXR1cm4gbH19LHt9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG4sbztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KHI9aSh0LGUpLG49ci53aWR0aCxvPXIuaGVpZ2h0KTp0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQ/KG49dC53aWR0aCxvPXQuaGVpZ2h0LHQ9dC5nZXRDb250ZXh0KCIyZCIpLHI9dC5nZXRJbWFnZURhdGEoMCwwLG4sbykpOnQgaW5zdGFuY2VvZiBJbWFnZURhdGEmJihuPXQud2lkdGgsbz10LmhlaWdodCxyPXQpLGEocil9ZnVuY3Rpb24gaSh0LGUpe2V8fChlPXt9KTt2YXIgcj1lLmZhbWlseXx8InNhbnMtc2VyaWYiLG49bC53aWR0aCxpPWwuaGVpZ2h0LGE9ZS53aWR0aHx8ZS5oZWlnaHR8fGUuc2l6ZTthJiZhIT1uJiYobj1pPWwud2lkdGg9bC5oZWlnaHQ9YSk7dmFyIG89ZS5mb250U2l6ZXx8bi8yO3JldHVybiB1LmZpbGxTdHlsZT0iIzAwMCIsdS5maWxsUmVjdCgwLDAsbixpKSx1LmZvbnQ9bysicHggIityLHUudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHUudGV4dEFsaWduPSJjZW50ZXIiLHUuZmlsbFN0eWxlPSJ3aGl0ZSIsdS5maWxsVGV4dCh0LG4vMixpLzIpLHUuZ2V0SW1hZ2VEYXRhKDAsMCxuLGkpfWZ1bmN0aW9uIGEodCl7dmFyIGUscixuLGksYSxsLHUsYyxoLGYsZCxwLG0sdj10LmRhdGEsZz10LndpZHRoLHk9dC5oZWlnaHQsYj1BcnJheSh5KSx4PUFycmF5KHkpLF89MCx3PTAsTT1nLGs9MCxBPTAsVD1BcnJheSh5KTtmb3Iocj0wO3I8eTtyKyspaWYobD0wLHU9MCxhPTQqcipnLGQ9byh2LnN1YmFycmF5KGEsYSs0KmcpLDQpLGRbMF0hPT1kWzFdKXtmb3IoX3x8KF89ciksdz1yLGU9ZFswXTtlPGRbMV07ZSsrKWk9NCplLG49dlthK2ldLGwrPW4sdSs9ZSpuO2Jbcl09MD09PWw/MDpsL2cseFtyXT0wPT09bD8wOnUvbCxkWzBdPE0mJihNPWRbMF0pLGRbMV0+ayYmKGs9ZFsxXSksVFtyXT1kfWZvcihsPTAsYz0wLHU9MCxyPTA7cjx5O3IrKykocD1iW3JdKSYmKGMrPXAqcixsKz1wLHUrPXhbcl0qcCk7Zm9yKGY9Yy9sLGg9dS9sLEE9MCxtPTAscj0wO3I8eTtyKyspKGQ9VFtyXSkmJihtPU1hdGgubWF4KHMoaC1kWzBdLGYtcikscyhoLWRbMV0sZi1yKSkpPkEmJihBPW0pO3JldHVybntjZW50ZXI6W2gsZl0sYm91bmRzOltNLF8sayx3KzFdLHJhZGl1czpNYXRoLnNxcnQoQSl9fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj0wLG49dC5sZW5ndGgsaT0wO2ZvcihlfHwoZT00KTshdFtpXSYmaTxuOylpKz1lO2ZvcihyPWksaT10Lmxlbmd0aDshdFtpXSYmaT5yOylpLT1lO3JldHVybiBuPWksW3IvZSxuL2VdfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCp0K2UqZX1lLmV4cG9ydHM9bjt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx1PWwuZ2V0Q29udGV4dCgiMmQiKTtsLndpZHRoPTIwMCxsLmhlaWdodD0yMDAsbi5jYW52YXM9bH0se31dLDQ3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyxsLHUpe3ZhciBjPWUrYSt1O2lmKGg+MCl7dmFyIGg9TWF0aC5zcXJ0KGMrMSk7dFswXT0uNSooby1sKS9oLHRbMV09LjUqKHMtbikvaCx0WzJdPS41KihyLWEpL2gsdFszXT0uNSpofWVsc2V7dmFyIGY9TWF0aC5tYXgoZSxhLHUpLGg9TWF0aC5zcXJ0KDIqZi1jKzEpO2U+PWY/KHRbMF09LjUqaCx0WzFdPS41KihpK3IpL2gsdFsyXT0uNSoocytuKS9oLHRbM109LjUqKG8tbCkvaCk6YT49Zj8odFswXT0uNSoocitpKS9oLHRbMV09LjUqaCx0WzJdPS41KihsK28pL2gsdFszXT0uNSoocy1uKS9oKToodFswXT0uNSoobitzKS9oLHRbMV09LjUqKG8rbCkvaCx0WzJdPS41KmgsdFszXT0uNSooci1pKS9oKX1yZXR1cm4gdH1lLmV4cG9ydHM9bn0se31dLDQ3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGE9ZVsyXSxvPWVbM10scz1pKHIsbixhLG8pO3M+MWUtNj8odFswXT1yL3MsdFsxXT1uL3MsdFsyXT1hL3MsdFszXT1vL3MpOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5yYWRpdXM9bChbcl0pLHRoaXMuY2VudGVyPWwoZSksdGhpcy5yb3RhdGlvbj1sKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9ZnVuY3Rpb24gcyh0KXt0PXR8fHt9O3ZhciBlPXQuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSxyPVtdLnNsaWNlLmNhbGwociwwLDQpLGEocixyKTt2YXIgaT1uZXcgbyhyLGUsTWF0aC5sb2cobikpO3JldHVybiBpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKSxpfWUuZXhwb3J0cz1zO3ZhciBsPXQoImZpbHRlcmVkLXZlY3RvciIpLHU9dCgiZ2wtbWF0NC9sb29rQXQiKSxjPXQoImdsLW1hdDQvZnJvbVF1YXQiKSxoPXQoImdsLW1hdDQvaW52ZXJ0IiksZj10KCIuL2xpYi9xdWF0RnJvbUZyYW1lIiksZD1vLnByb3RvdHlwZTtkLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnJvdGF0aW9uLmxhc3RUKCkpfSxkLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLnJhZGl1cy5jdXJ2ZSh0KSx0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnJvdGF0aW9uLmN1cnZlKHQpO3ZhciBlPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjthKGUsZSk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtjKHIsZSk7dmFyIG49dGhpcy5jb21wdXRlZENlbnRlcixpPXRoaXMuY29tcHV0ZWRFeWUsbz10aGlzLmNvbXB1dGVkVXAscz1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtpWzBdPW5bMF0rcypyWzJdLGlbMV09blsxXStzKnJbNl0saVsyXT1uWzJdK3MqclsxMF0sb1swXT1yWzFdLG9bMV09cls1XSxvWzJdPXJbOV07Zm9yKHZhciBsPTA7bDwzOysrbCl7Zm9yKHZhciB1PTAsaD0wO2g8MzsrK2gpdSs9cltsKzQqaF0qaVtoXTtyWzEyK2xdPS11fX0sZC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn0sZC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnJvdGF0aW9uLmlkbGUodCl9LGQuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5yb3RhdGlvbi5mbHVzaCh0KX0sZC5wYW49ZnVuY3Rpb24odCxlLHIsaSl7ZT1lfHwwLHI9cnx8MCxpPWl8fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeCxvPWFbMV0scz1hWzVdLGw9YVs5XSx1PW4obyxzLGwpO28vPXUscy89dSxsLz11O3ZhciBjPWFbMF0saD1hWzRdLGY9YVs4XSxkPWMqbytoKnMrZipsO2MtPW8qZCxoLT1zKmQsZi09bCpkO3ZhciBwPW4oYyxoLGYpO2MvPXAsaC89cCxmLz1wO3ZhciBtPWFbMl0sdj1hWzZdLGc9YVsxMF0seT1tKm8rdipzK2cqbCxiPW0qYyt2KmgrZypmO20tPXkqbytiKmMsdi09eSpzK2IqaCxnLT15KmwrYipmO3ZhciB4PW4obSx2LGcpO20vPXgsdi89eCxnLz14O3ZhciBfPWMqZStvKnIsdz1oKmUrcypyLE09ZiplK2wqcjt0aGlzLmNlbnRlci5tb3ZlKHQsXyx3LE0pO3ZhciBrPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2s9TWF0aC5tYXgoMWUtNCxrK2kpLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGspKX0sZC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsYSl7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHwwLHI9cnx8MDt2YXIgbz10aGlzLmNvbXB1dGVkTWF0cml4LHM9b1swXSxsPW9bNF0sdT1vWzhdLGM9b1sxXSxoPW9bNV0sZj1vWzldLGQ9b1syXSxwPW9bNl0sbT1vWzEwXSx2PWUqcytyKmMsZz1lKmwrcipoLHk9ZSp1K3IqZixiPS0ocCp5LW0qZykseD0tKG0qdi1kKnkpLF89LShkKmctcCp2KSx3PU1hdGguc3FydChNYXRoLm1heCgwLDEtTWF0aC5wb3coYiwyKS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KF8sMikpKSxNPWkoYix4LF8sdyk7TT4xZS02PyhiLz1NLHgvPU0sXy89TSx3Lz1NKTooYj14PV89MCx3PTEpO3ZhciBrPXRoaXMuY29tcHV0ZWRSb3RhdGlvbixBPWtbMF0sVD1rWzFdLFM9a1syXSxFPWtbM10sTD1BKncrRSpiK1QqXy1TKngsQz1UKncrRSp4K1MqYi1BKl8sej1TKncrRSpfK0EqeC1UKmIsST1FKnctQSpiLVQqeC1TKl87aWYoYSl7Yj1kLHg9cCxfPW07dmFyIEQ9TWF0aC5zaW4oYSkvbihiLHgsXyk7Yio9RCx4Kj1ELF8qPUQsdz1NYXRoLmNvcyhlKSxMPUwqdytJKmIrQypfLXoqeCxDPUMqdytJKngreipiLUwqXyx6PXoqdytJKl8rTCp4LUMqYixJPUkqdy1MKmItQyp4LXoqX312YXIgUD1pKEwsQyx6LEkpO1A+MWUtNj8oTC89UCxDLz1QLHovPVAsSS89UCk6KEw9Qz16PTAsST0xKSx0aGlzLnJvdGF0aW9uLnNldCh0LEwsQyx6LEkpfSxkLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXIsZT1lfHx0aGlzLmNvbXB1dGVkRXllLG49bnx8dGhpcy5jb21wdXRlZFVwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7dShpLGUscixuKTt2YXIgbz10aGlzLmNvbXB1dGVkUm90YXRpb247ZihvLGlbMF0saVsxXSxpWzJdLGlbNF0saVs1XSxpWzZdLGlbOF0saVs5XSxpWzEwXSksYShvLG8pLHRoaXMucm90YXRpb24uc2V0KHQsb1swXSxvWzFdLG9bMl0sb1szXSk7Zm9yKHZhciBzPTAsbD0wO2w8MzsrK2wpcys9TWF0aC5wb3cocltsXS1lW2xdLDIpO3RoaXMucmFkaXVzLnNldCh0LC41Kk1hdGgubG9nKE1hdGgubWF4KHMsMWUtNikpKSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSl9LGQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LGQuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21wdXRlZFJvdGF0aW9uO2YocixlWzBdLGVbMV0sZVsyXSxlWzRdLGVbNV0sZVs2XSxlWzhdLGVbOV0sZVsxMF0pLGEocixyKSx0aGlzLnJvdGF0aW9uLnNldCh0LHJbMF0sclsxXSxyWzJdLHJbM10pO3ZhciBuPXRoaXMuY29tcHV0ZWRNYXRyaXg7aChuLGUpO3ZhciBpPW5bMTVdO2lmKE1hdGguYWJzKGkpPjFlLTYpe3ZhciBvPW5bMTJdL2kscz1uWzEzXS9pLGw9blsxNF0vaTt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgdT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5zZXQodCxvLW5bMl0qdSxzLW5bNl0qdSxsLW5bMTBdKnUpLHRoaXMucmFkaXVzLmlkbGUodCl9ZWxzZSB0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCl9LGQuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0sZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0sZC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHM7cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxkLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY2FsY01hdHJpeCh0aGlzLmxhc3RUKCkpLHtjZW50ZXI6dGhpcy5jb21wdXRlZENlbnRlci5zbGljZSgpLHJvdGF0aW9uOnRoaXMuY29tcHV0ZWRSb3RhdGlvbi5zbGljZSgpLGRpc3RhbmNlOk1hdGgubG9nKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHpvb21NaW46dGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdLHpvb21NYXg6dGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdfX0sZC5mcm9tSlNPTj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10LmNlbnRlcjtyJiZ0aGlzLmNlbnRlci5zZXQoZSxyWzBdLHJbMV0sclsyXSk7dmFyIG49dC5yb3RhdGlvbjtuJiZ0aGlzLnJvdGF0aW9uLnNldChlLG5bMF0sblsxXSxuWzJdLG5bM10pO3ZhciBpPXQuZGlzdGFuY2U7aSYmaT4wJiZ0aGlzLnJhZGl1cy5zZXQoZSxNYXRoLmxvZyhpKSksdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KX19LHsiLi9saWIvcXVhdEZyb21GcmFtZSI6NDcwLCJmaWx0ZXJlZC12ZWN0b3IiOjEzMSwiZ2wtbWF0NC9mcm9tUXVhdCI6MTc2LCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L2xvb2tBdCI6MTgwfV0sNDcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlcGVhdC1zdHJpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByPXZvaWQgMCE9PXI/cisiIjoiICIsbihyLGUpK3R9fSx7InJlcGVhdC1zdHJpbmciOjQ5OH1dLDQ3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPVswLCIiXSksdD1TdHJpbmcodCk7dmFyIHI9cGFyc2VGbG9hdCh0LDEwKTtyZXR1cm4gZVswXT1yLGVbMV09dC5tYXRjaCgvW1xkLlwtXCtdKlxzKiguKikvKVsxXXx8IiIsZX19LHt9XSw0NzQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9dFtuXTsiLiI9PT1pP3Quc3BsaWNlKG4sMSk6Ii4uIj09PWk/KHQuc3BsaWNlKG4sMSkscisrKTpyJiYodC5zcGxpY2UobiwxKSxyLS0pfWlmKGUpZm9yKDtyLS07cil0LnVuc2hpZnQoIi4uIik7cmV0dXJuIHR9ZnVuY3Rpb24gbih0LGUpe2lmKHQuZmlsdGVyKXJldHVybiB0LmZpbHRlcihlKTtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSxuLHQpJiZyLnB1c2godFtuXSk7cmV0dXJuIHJ9dmFyIGk9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZXhlYyh0KS5zbGljZSgxKX07ci5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciByPSIiLGk9ITEsYT1hcmd1bWVudHMubGVuZ3RoLTE7YT49LTEmJiFpO2EtLSl7dmFyIG89YT49MD9hcmd1bWVudHNbYV06dC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtvJiYocj1vKyIvIityLGk9Ii8iPT09by5jaGFyQXQoMCkpfXJldHVybiByPWUobihyLnNwbGl0KCIvIiksZnVuY3Rpb24odCl7cmV0dXJuISF0fSksIWkpLmpvaW4oIi8iKSwoaT8iLyI6IiIpK3J8fCIuIn0sci5ub3JtYWxpemU9ZnVuY3Rpb24odCl7dmFyIGk9ci5pc0Fic29sdXRlKHQpLGE9Ii8iPT09byh0LC0xKTtyZXR1cm4gdD1lKG4odC5zcGxpdCgiLyIpLGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLCFpKS5qb2luKCIvIiksdHx8aXx8KHQ9Ii4iKSx0JiZhJiYodCs9Ii8iKSwoaT8iLyI6IiIpK3R9LHIuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKX0sci5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiByLm5vcm1hbGl6ZShuKHQsZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtyZXR1cm4gdH0pLmpvaW4oIi8iKSl9LHIucmVsYXRpdmU9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgmJiIiPT09dFtlXTtlKyspO2Zvcih2YXIgcj10Lmxlbmd0aC0xO3I+PTAmJiIiPT09dFtyXTtyLS0pO3JldHVybiBlPnI/W106dC5zbGljZShlLHItZSsxKX10PXIucmVzb2x2ZSh0KS5zdWJzdHIoMSksZT1yLnJlc29sdmUoZSkuc3Vic3RyKDEpO2Zvcih2YXIgaT1uKHQuc3BsaXQoIi8iKSksYT1uKGUuc3BsaXQoIi8iKSksbz1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCkscz1vLGw9MDtsPG87bCsrKWlmKGlbbF0hPT1hW2xdKXtzPWw7YnJlYWt9Zm9yKHZhciB1PVtdLGw9cztsPGkubGVuZ3RoO2wrKyl1LnB1c2goIi4uIik7cmV0dXJuIHU9dS5jb25jYXQoYS5zbGljZShzKSksdS5qb2luKCIvIil9LHIuc2VwPSIvIixyLmRlbGltaXRlcj0iOiIsci5kaXJuYW1lPWZ1bmN0aW9uKHQpe3ZhciBlPWEodCkscj1lWzBdLG49ZVsxXTtyZXR1cm4gcnx8bj8obiYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSkscituKToiLiJ9LHIuYmFzZW5hbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1hKHQpWzJdO3JldHVybiBlJiZyLnN1YnN0cigtMSplLmxlbmd0aCk9PT1lJiYocj1yLnN1YnN0cigwLHIubGVuZ3RoLWUubGVuZ3RoKSkscn0sci5leHRuYW1lPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpWzNdfTt2YXIgbz0iYiI9PT0iYWIiLnN1YnN0cigtMSk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LnN1YnN0cihlLHIpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8MCYmKGU9dC5sZW5ndGgrZSksdC5zdWJzdHIoZSxyKX19KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0ODV9XSw0NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZTt0JiZ0Lmxlbmd0aCYmKGU9dCx0PWUubGVuZ3RoKTt2YXIgcj1uZXcgVWludDhBcnJheSh0fHwwKTtyZXR1cm4gZSYmci5zZXQoZSksci5yZWFkVUludDMyTEU9YS5yZWFkVUludDMyTEUsci53cml0ZVVJbnQzMkxFPWEud3JpdGVVSW50MzJMRSxyLnJlYWRJbnQzMkxFPWEucmVhZEludDMyTEUsci53cml0ZUludDMyTEU9YS53cml0ZUludDMyTEUsci5yZWFkRmxvYXRMRT1hLnJlYWRGbG9hdExFLHIud3JpdGVGbG9hdExFPWEud3JpdGVGbG9hdExFLHIucmVhZERvdWJsZUxFPWEucmVhZERvdWJsZUxFLHIud3JpdGVEb3VibGVMRT1hLndyaXRlRG91YmxlTEUsci50b1N0cmluZz1hLnRvU3RyaW5nLHIud3JpdGU9YS53cml0ZSxyLnNsaWNlPWEuc2xpY2Usci5jb3B5PWEuY29weSxyLl9pc0J1ZmZlcj0hMCxyfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aCxpPVtdLGE9MDthPG47YSsrKXtpZigoZT10LmNoYXJDb2RlQXQoYSkpPjU1Mjk1JiZlPDU3MzQ0KXtpZighcil7ZT41NjMxOXx8YSsxPT09bj9pLnB1c2goMjM5LDE5MSwxODkpOnI9ZTtjb250aW51ZX1pZihlPDU2MzIwKXtpLnB1c2goMjM5LDE5MSwxODkpLHI9ZTtjb250aW51ZX1lPXItNTUyOTY8PDEwfGUtNTYzMjB8NjU1MzYscj1udWxsfWVsc2UgciYmKGkucHVzaCgyMzksMTkxLDE4OSkscj1udWxsKTtlPDEyOD9pLnB1c2goZSk6ZTwyMDQ4P2kucHVzaChlPj42fDE5Miw2MyZlfDEyOCk6ZTw2NTUzNj9pLnB1c2goZT4+MTJ8MjI0LGU+PjYmNjN8MTI4LDYzJmV8MTI4KTppLnB1c2goZT4+MTh8MjQwLGU+PjEyJjYzfDEyOCxlPj42JjYzfDEyOCw2MyZlfDEyOCl9cmV0dXJuIGl9ZS5leHBvcnRzPW47dmFyIGEsbyxzLGw9dCgiaWVlZTc1NCIpO2E9e3JlYWRVSW50MzJMRTpmdW5jdGlvbih0KXtyZXR1cm4odGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSx3cml0ZVVJbnQzMkxFOmZ1bmN0aW9uKHQsZSl7dGhpc1tlXT10LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjR9LHJlYWRJbnQzMkxFOmZ1bmN0aW9uKHQpe3JldHVybih0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsodGhpc1t0KzNdPDwyNCl9LHJlYWRGbG9hdExFOmZ1bmN0aW9uKHQpe3JldHVybiBsLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxyZWFkRG91YmxlTEU6ZnVuY3Rpb24odCl7cmV0dXJuIGwucmVhZCh0aGlzLHQsITAsNTIsOCl9LHdyaXRlRmxvYXRMRTpmdW5jdGlvbih0LGUpe3JldHVybiBsLndyaXRlKHRoaXMsdCxlLCEwLDIzLDQpfSx3cml0ZURvdWJsZUxFOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwud3JpdGUodGhpcyx0LGUsITAsNTIsOCl9LHRvU3RyaW5nOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0iIixpPSIiO2U9ZXx8MCxyPU1hdGgubWluKHRoaXMubGVuZ3RoLHJ8fHRoaXMubGVuZ3RoKTtmb3IodmFyIGE9ZTthPHI7YSsrKXt2YXIgbz10aGlzW2FdO288PTEyNz8obis9ZGVjb2RlVVJJQ29tcG9uZW50KGkpK1N0cmluZy5mcm9tQ2hhckNvZGUobyksaT0iIik6aSs9IiUiK28udG9TdHJpbmcoMTYpfXJldHVybiBuKz1kZWNvZGVVUklDb21wb25lbnQoaSl9LHdyaXRlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQ9PT1vP3M6aSh0KSxuPTA7bjxyLmxlbmd0aDtuKyspdGhpc1tlK25dPXJbbl19LHNsaWNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3ViYXJyYXkodCxlKX0sY29weTpmdW5jdGlvbih0LGUpe2U9ZXx8MDtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0W2Urcl09dGhpc1tyXX19LGEud3JpdGVJbnQzMkxFPWEud3JpdGVVSW50MzJMRSxuLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIG89dCxzPWkodCkscy5sZW5ndGh9LG4uaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuISghdHx8IXQuX2lzQnVmZmVyKX19LHtpZWVlNzU0OjI4N31dLDQ3NjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmJ1Zj12LmlzQnVmZmVyKHQpP3Q6bmV3IHYodHx8MCksdGhpcy5wb3M9MCx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGh9ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG49ZS5idWY7aWYocj1uW2UucG9zKytdLHQrPTI2ODQzNTQ1NiooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz0zNDM1OTczODM2OCooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz00Mzk4MDQ2NTExMTA0KigxMjcmcikscjwxMjgpcmV0dXJuIHQ7aWYocj1uW2UucG9zKytdLHQrPTU2Mjk0OTk1MzQyMTMxMiooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz03MjA1NzU5NDAzNzkyNzk0MCooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz0weDgwMDAwMDAwMDAwMDAwMDAqKDEyNyZyKSxyPDEyOClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzIil9ZnVuY3Rpb24gYSh0LGUpe2UucmVhbGxvYygxMCk7Zm9yKHZhciByPWUucG9zKzEwO3Q+PTE7KXtpZihlLnBvcz49cil0aHJvdyBuZXcgRXJyb3IoIkdpdmVuIHZhcmludCBkb2Vzbid0IGZpdCBpbnRvIDEwIGJ5dGVzIik7dmFyIG49MjU1JnQ7ZS5idWZbZS5wb3MrK109bnwodD49MTI4PzEyODowKSx0Lz0xMjh9fWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPWU8PTE2MzgzPzE6ZTw9MjA5NzE1MT8yOmU8PTI2ODQzNTQ1NT8zOk1hdGguY2VpbChNYXRoLmxvZyhlKS8oNypNYXRoLkxOMikpO3IucmVhbGxvYyhuKTtmb3IodmFyIGk9ci5wb3MtMTtpPj10O2ktLSlyLmJ1ZltpK25dPXIuYnVmW2ldfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlVmFyaW50KHRbcl0pfWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU1ZhcmludCh0W3JdKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZsb2F0KHRbcl0pfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRG91YmxlKHRbcl0pfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlQm9vbGVhbih0W3JdKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQzMih0W3JdKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkNjQodFtyXSl9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQ2NCh0W3JdKX1lLmV4cG9ydHM9bjt2YXIgdj1yLkJ1ZmZlcnx8dCgiLi9idWZmZXIiKTtuLlZhcmludD0wLG4uRml4ZWQ2ND0xLG4uQnl0ZXM9MixuLkZpeGVkMzI9NTt2YXIgZz1NYXRoLnBvdygyLDYzKTtuLnByb3RvdHlwZT17ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYnVmPW51bGx9LHJlYWRGaWVsZHM6ZnVuY3Rpb24odCxlLHIpe2ZvcihyPXJ8fHRoaXMubGVuZ3RoO3RoaXMucG9zPHI7KXt2YXIgbj10aGlzLnJlYWRWYXJpbnQoKSxpPW4+PjMsYT10aGlzLnBvczt0KGksZSx0aGlzKSx0aGlzLnBvcz09PWEmJnRoaXMuc2tpcChuKX1yZXR1cm4gZX0scmVhZE1lc3NhZ2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWFkRmllbGRzKHQsZSx0aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyl9LHJlYWRGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWYucmVhZFVJbnQzMkxFKHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZFNGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWYucmVhZEludDMyTEUodGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYnVmLnJlYWRVSW50MzJMRSh0aGlzLnBvcykrNDI5NDk2NzI5Nip0aGlzLmJ1Zi5yZWFkVUludDMyTEUodGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRTRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYnVmLnJlYWRVSW50MzJMRSh0aGlzLnBvcykrNDI5NDk2NzI5Nip0aGlzLmJ1Zi5yZWFkSW50MzJMRSh0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZEZsb2F0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWYucmVhZEZsb2F0TEUodGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRG91YmxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWYucmVhZERvdWJsZUxFKHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFZhcmludDpmdW5jdGlvbigpe3ZhciB0LGUscj10aGlzLmJ1ZjtyZXR1cm4gZT1yW3RoaXMucG9zKytdLHQ9MTI3JmUsZTwxMjg/dDooZT1yW3RoaXMucG9zKytdLHR8PSgxMjcmZSk8PDcsZTwxMjg/dDooZT1yW3RoaXMucG9zKytdLHR8PSgxMjcmZSk8PDE0LGU8MTI4P3Q6KGU9clt0aGlzLnBvcysrXSx0fD0oMTI3JmUpPDwyMSxlPDEyOD90OmkodCx0aGlzKSkpKX0scmVhZFZhcmludDY0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3MsZT10aGlzLnJlYWRWYXJpbnQoKTtpZihlPGcpcmV0dXJuIGU7Zm9yKHZhciByPXRoaXMucG9zLTI7MjU1PT09dGhpcy5idWZbcl07KXItLTtyPHQmJihyPXQpLGU9MDtmb3IodmFyIG49MDtuPHItdCsxO24rKyl7dmFyIGk9MTI3Jn50aGlzLmJ1Zlt0K25dO2UrPW48ND9pPDw3Km46aSpNYXRoLnBvdygyLDcqbil9cmV0dXJuLWUtMX0scmVhZFNWYXJpbnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT0xPyh0KzEpLy0yOnQvMn0scmVhZEJvb2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSl9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPXRoaXMuYnVmLnRvU3RyaW5nKCJ1dGY4Iix0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkQnl0ZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPXRoaXMuYnVmLnNsaWNlKHRoaXMucG9zLHQpO3JldHVybiB0aGlzLnBvcz10LGV9LHJlYWRQYWNrZWRWYXJpbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkVmFyaW50KCkpO3JldHVybiBlfSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3JldHVybiBlfSxyZWFkUGFja2VkQm9vbGVhbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO3JldHVybiBlfSxyZWFkUGFja2VkRmxvYXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIGV9LHJlYWRQYWNrZWREb3VibGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3JldHVybiBlfSxyZWFkUGFja2VkRml4ZWQzMjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO3JldHVybiBlfSxyZWFkUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIGV9LHJlYWRQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9W107dGhpcy5wb3M8dDspZS5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIGV9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtyZXR1cm4gZX0sc2tpcDpmdW5jdGlvbih0KXt2YXIgZT03JnQ7aWYoZT09PW4uVmFyaW50KWZvcig7dGhpcy5idWZbdGhpcy5wb3MrK10+MTI3Oyk7ZWxzZSBpZihlPT09bi5CeXRlcyl0aGlzLnBvcz10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcztlbHNlIGlmKGU9PT1uLkZpeGVkMzIpdGhpcy5wb3MrPTQ7ZWxzZXtpZihlIT09bi5GaXhlZDY0KXRocm93IG5ldyBFcnJvcigiVW5pbXBsZW1lbnRlZCB0eXBlOiAiK2UpO3RoaXMucG9zKz04fX0sd3JpdGVUYWc6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9LHJlYWxsb2M6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMubGVuZ3RofHwxNjtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXt2YXIgcj1uZXcgdihlKTt0aGlzLmJ1Zi5jb3B5KHIpLHRoaXMuYnVmPXIsdGhpcy5sZW5ndGg9ZX19LGZpbmlzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD10aGlzLnBvcyx0aGlzLnBvcz0wLHRoaXMuYnVmLnNsaWNlKDAsdGhpcy5sZW5ndGgpfSx3cml0ZUZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmLndyaXRlVUludDMyTEUodCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlU0ZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmLndyaXRlSW50MzJMRSh0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSx0aGlzLmJ1Zi53cml0ZUludDMyTEUoLTEmdCx0aGlzLnBvcyksdGhpcy5idWYud3JpdGVVSW50MzJMRShNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVNGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSx0aGlzLmJ1Zi53cml0ZUludDMyTEUoLTEmdCx0aGlzLnBvcyksdGhpcy5idWYud3JpdGVJbnQzMkxFKE1hdGguZmxvb3IodCooMS80Mjk0OTY3Mjk2KSksdGhpcy5wb3MrNCksdGhpcy5wb3MrPTh9LHdyaXRlVmFyaW50OmZ1bmN0aW9uKHQpe2lmKCh0PSt0KT4yNjg0MzU0NTUpcmV0dXJuIHZvaWQgYSh0LHRoaXMpO3RoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmdHwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPXQ+Pj43JjEyNykpKX0sd3JpdGVTVmFyaW50OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQodDwwPzIqLXQtMToyKnQpfSx3cml0ZUJvb2xlYW46ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludChCb29sZWFuKHQpKX0sd3JpdGVTdHJpbmc6ZnVuY3Rpb24odCl7dD1TdHJpbmcodCk7dmFyIGU9di5ieXRlTGVuZ3RoKHQpO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpLHRoaXMuYnVmLndyaXRlKHQsdGhpcy5wb3MpLHRoaXMucG9zKz1lfSx3cml0ZUZsb2F0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zi53cml0ZUZsb2F0TEUodCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlRG91YmxlOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSx0aGlzLmJ1Zi53cml0ZURvdWJsZUxFKHQsdGhpcy5wb3MpLHRoaXMucG9zKz04fSx3cml0ZUJ5dGVzOmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpO2Zvcih2YXIgcj0wO3I8ZTtyKyspdGhpcy5idWZbdGhpcy5wb3MrK109dFtyXX0sd3JpdGVSYXdNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5wb3MrKzt2YXIgcj10aGlzLnBvczt0KGUsdGhpcyk7dmFyIG49dGhpcy5wb3MtcjtuPj0xMjgmJm8ocixuLHRoaXMpLHRoaXMucG9zPXItMSx0aGlzLndyaXRlVmFyaW50KG4pLHRoaXMucG9zKz1ufSx3cml0ZU1lc3NhZ2U6ZnVuY3Rpb24odCxlLHIpe3RoaXMud3JpdGVUYWcodCxuLkJ5dGVzKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfSx3cml0ZVBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQscyxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxsLGUpfSx3cml0ZVBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGgsZSl9LHdyaXRlUGFja2VkRmxvYXQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHUsZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxjLGUpfSx3cml0ZVBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGYsZSl9LHdyaXRlUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGQsZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQscCxlKX0sd3JpdGVQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsbSxlKX0sd3JpdGVCeXRlc0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uQnl0ZXMpLHRoaXMud3JpdGVCeXRlcyhlKX0sd3JpdGVGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDMyKSx0aGlzLndyaXRlRml4ZWQzMihlKX0sd3JpdGVTRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uRml4ZWQzMiksdGhpcy53cml0ZVNGaXhlZDMyKGUpfSx3cml0ZUZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxuLkZpeGVkNjQpLHRoaXMud3JpdGVGaXhlZDY0KGUpfSx3cml0ZVNGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDY0KSx0aGlzLndyaXRlU0ZpeGVkNjQoZSl9LHdyaXRlVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5WYXJpbnQpLHRoaXMud3JpdGVWYXJpbnQoZSl9LHdyaXRlU1ZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uVmFyaW50KSx0aGlzLndyaXRlU1ZhcmludChlKX0sd3JpdGVTdHJpbmdGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxuLkJ5dGVzKSx0aGlzLndyaXRlU3RyaW5nKGUpfSx3cml0ZUZsb2F0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDMyKSx0aGlzLndyaXRlRmxvYXQoZSl9LHdyaXRlRG91YmxlRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDY0KSx0aGlzLndyaXRlRG91YmxlKGUpfSx3cml0ZUJvb2xlYW5GaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnRGaWVsZCh0LEJvb2xlYW4oZSkpfX19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9idWZmZXIiOjQ3NX1dLDQ3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8aSl7Zm9yKHZhciByPTEsbj0wO248ZTsrK24pZm9yKHZhciBvPTA7bzxuOysrbylpZih0W25dPHRbb10pcj0tcjtlbHNlIGlmKHRbbl09PT10W29dKXJldHVybiAwO3JldHVybiByfWZvcih2YXIgcz1hLm1hbGxvY1VpbnQ4KGUpLG49MDtuPGU7KytuKXNbbl09MDtmb3IodmFyIHI9MSxuPTA7bjxlOysrbilpZighc1tuXSl7dmFyIGw9MTtzW25dPTE7Zm9yKHZhciBvPXRbbl07byE9PW47bz10W29dKXtpZihzW29dKXJldHVybiBhLmZyZWVVaW50OChzKSwwO2wrPTEsc1tvXT0xfTEmbHx8KHI9LXIpfXJldHVybiBhLmZyZWVVaW50OChzKSxyfWUuZXhwb3J0cz1uO3ZhciBpPTMyLGE9dCgidHlwZWRhcnJheS1wb29sIil9LHsidHlwZWRhcnJheS1wb29sIjo1Mzl9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aDtzd2l0Y2goZSl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtjYXNlIDI6cmV0dXJuIHRbMV19dmFyIHIsbixpLHM9YS5tYWxsb2NVaW50MzIoZSksbD1hLm1hbGxvY1VpbnQzMihlKSx1PTA7Zm9yKG8odCxsKSxpPTA7aTxlOysraSlzW2ldPXRbaV07Zm9yKGk9ZS0xO2k+MDstLWkpbj1sW2ldLHI9c1tpXSxzW2ldPXNbbl0sc1tuXT1yLGxbaV09bFtyXSxsW3JdPW4sdT0odStyKSppO3JldHVybiBhLmZyZWVVaW50MzIobCksYS5mcmVlVWludDMyKHMpLHV9ZnVuY3Rpb24gaSh0LGUscil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gcnx8W107Y2FzZSAxOnJldHVybiByPyhyWzBdPTAscik6WzBdO2Nhc2UgMjpyZXR1cm4gcj8oZT8oclswXT0wLHJbMV09MSk6KHJbMF09MSxyWzFdPTApLHIpOmU/WzAsMV06WzEsMF19cj1yfHxuZXcgQXJyYXkodCk7dmFyIG4saSxhLG89MTtmb3IoclswXT0wLGE9MTthPHQ7KythKXJbYV09YSxvPW8qYXwwO2ZvcihhPXQtMTthPjA7LS1hKW49ZS9vfDAsZT1lLW4qb3wwLG89by9hfDAsaT0wfHJbYV0sclthXT0wfHJbbl0scltuXT0wfGk7cmV0dXJuIHJ9dmFyIGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJpbnZlcnQtcGVybXV0YXRpb24iKTtyLnJhbms9bixyLnVucmFuaz1pfSx7ImludmVydC1wZXJtdXRhdGlvbiI6MjkwLCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDQ3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPXNbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIG4odCxuLGEpe2Zvcih2YXIgbyxsLHUsYz0wO2M8MjsrK2MpaWYoc1tjXVtuXS5sZW5ndGg+MCl7bz1zW2NdW25dWzBdLHU9YzticmVha31sPW9bMV51XTtmb3IodmFyIGg9MDtoPDI7KytoKWZvcih2YXIgZj1zW2hdW25dLGQ9MDtkPGYubGVuZ3RoOysrZCl7dmFyIHA9ZltkXSxtPXBbMV5oXSx2PWkoZVt0XSxlW25dLGVbbF0sZVttXSk7dj4wJiYobz1wLGw9bSx1PWgpfXJldHVybiBhP2w6KG8mJnIobyx1KSxsKX1mb3IodmFyIGE9MHxlLmxlbmd0aCxvPXQubGVuZ3RoLHM9W25ldyBBcnJheShhKSxuZXcgQXJyYXkoYSldLGw9MDtsPGE7KytsKXNbMF1bbF09W10sc1sxXVtsXT1bXTtmb3IodmFyIGw9MDtsPG87KytsKXt2YXIgdT10W2xdO3NbMF1bdVswXV0ucHVzaCh1KSxzWzFdW3VbMV1dLnB1c2godSl9Zm9yKHZhciBjPVtdLGw9MDtsPGE7KytsKXNbMF1bbF0ubGVuZ3RoK3NbMV1bbF0ubGVuZ3RoPT09MCYmYy5wdXNoKFtsXSk7Zm9yKHZhciBsPTA7bDxhOysrbClmb3IodmFyIGg9MDtoPDI7KytoKXtmb3IodmFyIGY9W107c1toXVtsXS5sZW5ndGg+MDspe3ZhciBkPShzWzBdW2xdLmxlbmd0aCxmdW5jdGlvbih0LGEpe3ZhciBvPXNbYV1bdF1bMF0sbD1bdF07cihvLGEpO2Zvcih2YXIgdT1vWzFeYV07Oyl7Zm9yKDt1IT09dDspbC5wdXNoKHUpLHU9bihsW2wubGVuZ3RoLTJdLHUsITEpO2lmKHNbMF1bdF0ubGVuZ3RoK3NbMV1bdF0ubGVuZ3RoPT09MClicmVhazt2YXIgYz1sW2wubGVuZ3RoLTFdLGg9dCxmPWxbMV0sZD1uKGMsaCwhMCk7aWYoaShlW2NdLGVbaF0sZVtmXSxlW2RdKTwwKWJyZWFrO2wucHVzaCh0KSx1PW4oYyxoKX1yZXR1cm4gbH0obCxoKSk7IWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMV09PT1lW2UubGVuZ3RoLTFdfShmLGQpPyhmLmxlbmd0aD4wJiZjLnB1c2goZiksZj1kKTpmLnB1c2guYXBwbHkoZixkKX1mLmxlbmd0aD4wJiZjLnB1c2goZil9cmV0dXJuIGN9ZS5leHBvcnRzPW47dmFyIGk9dCgiY29tcGFyZS1hbmdsZSIpfSx7ImNvbXBhcmUtYW5nbGUiOjk4fV0sNDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9aSh0LGUubGVuZ3RoKSxuPW5ldyBBcnJheShlLmxlbmd0aCksYT1uZXcgQXJyYXkoZS5sZW5ndGgpLG89W10scz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLmxlbmd0aDthW3NdPWwsbltzXT0hMCxsPD0xJiZvLnB1c2gocyl9Zm9yKDtvLmxlbmd0aD4wOyl7dmFyIHU9by5wb3AoKTtuW3VdPSExO2Zvcih2YXIgYz1yW3VdLHM9MDtzPGMubGVuZ3RoOysrcyl7dmFyIGg9Y1tzXTswPT0tLWFbaF0mJm8ucHVzaChoKX19Zm9yKHZhciBmPW5ldyBBcnJheShlLmxlbmd0aCksZD1bXSxzPTA7czxlLmxlbmd0aDsrK3MpaWYobltzXSl7dmFyIHU9ZC5sZW5ndGg7ZltzXT11LGQucHVzaChlW3NdKX1lbHNlIGZbc109LTE7Zm9yKHZhciBwPVtdLHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIG09dFtzXTtuW21bMF1dJiZuW21bMV1dJiZwLnB1c2goW2ZbbVswXV0sZlttWzFdXV0pfXJldHVybltwLGRdfWUuZXhwb3J0cz1uO3ZhciBpPXQoImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0Iil9LHsiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiOjEyNX1dLDQ4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09W107cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe2Z1bmN0aW9uIHIodCl7Zm9yKHZhciByPXQubGVuZ3RoLG49WzBdLGk9MDtpPHI7KytpKXt2YXIgYT1lW3RbaV1dLG89ZVt0WyhpKzEpJXJdXSxzPXUoLWFbMF0sYVsxXSksbD11KC1hWzBdLG9bMV0pLGg9dShvWzBdLGFbMV0pLGY9dShvWzBdLG9bMV0pO249YyhuLGMoYyhzLGwpLGMoaCxmKSkpfXJldHVybiBuW24ubGVuZ3RoLTFdPjB9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wO3I8ZTsrK3IpaWYoIVBbdFtyXV0pcmV0dXJuITE7cmV0dXJuITB9dmFyIGQ9Zih0LGUpO3Q9ZFswXSxlPWRbMV07Zm9yKHZhciBwPWUubGVuZ3RoLG09KHQubGVuZ3RoLG8odCxlLmxlbmd0aCkpLHY9MDt2PHA7Kyt2KWlmKG1bdl0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGQiKTt2YXIgZz1zKHQsZSk7Zz1nLmZpbHRlcihyKTtmb3IodmFyIHk9Zy5sZW5ndGgsYj1uZXcgQXJyYXkoeSkseD1uZXcgQXJyYXkoeSksdj0wO3Y8eTsrK3Ype2Jbdl09djt2YXIgXz1uZXcgQXJyYXkoeSksdz1nW3ZdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLE09bChbd10pLGs9MDt0OmZvcih2YXIgQT0wO0E8eTsrK0EpaWYoX1tBXT0wLHYhPT1BKXtmb3IodmFyIFQ9Z1tBXSxTPVQubGVuZ3RoLEU9MDtFPFM7KytFKXt2YXIgTD1NKGVbVFtFXV0pO2lmKDAhPT1MKXtMPDAmJihfW0FdPTEsays9MSk7Y29udGludWUgdH19X1tBXT0xLGsrPTF9eFt2XT1bayx2LF9dfXguc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19KTtmb3IodmFyIHY9MDt2PHk7Kyt2KWZvcih2YXIgXz14W3ZdLEM9X1sxXSx6PV9bMl0sQT0wO0E8eTsrK0EpeltBXSYmKGJbQV09Qyk7Zm9yKHZhciBJPWkoeSksdj0wO3Y8eTsrK3YpSVt2XS5wdXNoKGJbdl0pLElbYlt2XV0ucHVzaCh2KTtmb3IodmFyIEQ9e30sUD1uKHAsITEpLHY9MDt2PHk7Kyt2KWZvcih2YXIgVD1nW3ZdLFM9VC5sZW5ndGgsQT0wO0E8UzsrK0Epe3ZhciBPPVRbQV0sUj1UWyhBKzEpJVNdLEY9TWF0aC5taW4oTyxSKSsiOiIrTWF0aC5tYXgoTyxSKTtpZihGIGluIEQpe3ZhciBqPURbRl07SVtqXS5wdXNoKHYpLElbdl0ucHVzaChqKSxQW09dPVBbUl09ITB9ZWxzZSBEW0ZdPXZ9Zm9yKHZhciBOPVtdLEI9bih5LC0xKSx2PTA7djx5OysrdiliW3ZdIT09dnx8YShnW3ZdKT9CW3ZdPS0xOihOLnB1c2godiksQlt2XT0wKTtmb3IodmFyIGQ9W107Ti5sZW5ndGg+MDspe3ZhciBVPU4ucG9wKCksVj1JW1VdO2goVixmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTt2YXIgSCxxPVYubGVuZ3RoLEc9QltVXTtpZigwPT09Ryl7dmFyIFQ9Z1tVXTtIPVtUXX1mb3IodmFyIHY9MDt2PHE7Kyt2KXt2YXIgWT1WW3ZdO2lmKCEoQltZXT49MCkmJihCW1ldPTFeRyxOLnB1c2goWSksMD09PUcpKXt2YXIgVD1nW1ldO2EoVCl8fChULnJldmVyc2UoKSxILnB1c2goVCkpfX0wPT09RyYmZC5wdXNoKEgpfXJldHVybiBkfWUuZXhwb3J0cz1hO3ZhciBvPXQoImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0Iikscz10KCJwbGFuYXItZHVhbCIpLGw9dCgicG9pbnQtaW4tYmlnLXBvbHlnb24iKSx1PXQoInR3by1wcm9kdWN0IiksYz10KCJyb2J1c3Qtc3VtIiksaD10KCJ1bmlxIiksZj10KCIuL2xpYi90cmltLWxlYXZlcyIpfSx7Ii4vbGliL3RyaW0tbGVhdmVzIjo0ODAsImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxMjUsInBsYW5hci1kdWFsIjo0NzksInBvaW50LWluLWJpZy1wb2x5Z29uIjo0ODMsInJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzNyx1bmlxOjU0MX1dLDQ4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnkpfSxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxtdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQodCl9LGRpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYodCl9LHJvdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUodCl9LG1hdE11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdCh0KX0sdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKX0scGVycDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxtYWc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGRpc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIodCkpfSxkaXN0U3FyOmZ1bmN0aW9uKHQpe3ZhciBlPXQueC10aGlzLngscj10LnktdGhpcy55O3JldHVybiBlKmUrcipyfSxhbmdsZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS10LnksdGhpcy54LXQueCl9LGFuZ2xlV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAodC54LHQueSl9LGFuZ2xlV2l0aFNlcDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCplLXRoaXMueSp0LHRoaXMueCp0K3RoaXMueSplKX0sX21hdE11bHQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0aGlzLngrdFsxXSp0aGlzLnkscj10WzJdKnRoaXMueCt0WzNdKnRoaXMueTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PXIsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPWUqdGhpcy54LXIqdGhpcy55LGk9cip0aGlzLngrZSp0aGlzLnk7cmV0dXJuIHRoaXMueD1uLHRoaXMueT1pLHRoaXN9LApfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9fSxuLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgbih0WzBdLHRbMV0pOnR9fSx7fV0sNDgzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiEwfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGk9dFtlXTtyZXR1cm4hIWkmJiEhaS5xdWVyeVBvaW50KHIsbil9fWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXSxhPW5bMF1bMF0sbz1uWzBdWzFdLHM9blsxXVsxXSxsPVtNYXRoLm1pbihvLHMpLE1hdGgubWF4KG8scyldO2EgaW4gZT9lW2FdLnB1c2gobCk6ZVthXT1bbF19Zm9yKHZhciB1PXt9LGM9T2JqZWN0LmtleXMoZSkscj0wO3I8Yy5sZW5ndGg7KytyKXt2YXIgaD1lW2Nbcl1dO3VbY1tyXV09ZChoKX1yZXR1cm4gaSh1KX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXAubGUoZSxyWzBdKTtpZihuPDApcmV0dXJuIDE7dmFyIGk9dFtuXTtpZighaSl7aWYoIShuPjAmJmVbbl09PT1yWzBdKSlyZXR1cm4gMTtpPXRbbi0xXX1mb3IodmFyIGE9MTtpOyl7dmFyIG89aS5rZXkscz1oKHIsb1swXSxvWzFdKTtpZihvWzBdWzBdPG9bMV1bMF0paWYoczwwKWk9aS5sZWZ0O2Vsc2V7aWYoIShzPjApKXJldHVybiAwO2E9LTEsaT1pLnJpZ2h0fWVsc2UgaWYocz4wKWk9aS5sZWZ0O2Vsc2V7aWYoIShzPDApKXJldHVybiAwO2E9MSxpPWkucmlnaHR9fXJldHVybiBhfX1mdW5jdGlvbiBzKHQpe3JldHVybiAxfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGVbMF0sZVsxXSk/MDoxfX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHJbMF0sclsxXSk/MDplKHIpfX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLG49W10saT0wO2k8ZTsrK2kpZm9yKHZhciBjPXRbaV0saD1jLmxlbmd0aCxkPWgtMSxwPTA7cDxoO2Q9cCsrKXt2YXIgbT1jW2RdLHY9Y1twXTttWzBdPT09dlswXT9uLnB1c2goW20sdl0pOnIucHVzaChbbSx2XSl9aWYoMD09PXIubGVuZ3RoKXJldHVybiAwPT09bi5sZW5ndGg/czpsKGEobikpO3ZhciBnPWYocikseT1vKGcuc2xhYnMsZy5jb29yZGluYXRlcyk7cmV0dXJuIDA9PT1uLmxlbmd0aD95OnUoYShuKSx5KX1lLmV4cG9ydHM9Yzt2YXIgaD10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxmPXQoInNsYWItZGVjb21wb3NpdGlvbiIpLGQ9dCgiaW50ZXJ2YWwtdHJlZS0xZCIpLHA9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NjQsImludGVydmFsLXRyZWUtMWQiOjI4OSwicm9idXN0LW9yaWVudGF0aW9uIjo1MDYsInNsYWItZGVjb21wb3NpdGlvbiI6NTIzfV0sNDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixzKXtpLmxlbmd0aDxuLmxlbmd0aCYmKGk9bmV3IEZsb2F0NjRBcnJheShuLmxlbmd0aCksYT1uZXcgRmxvYXQ2NEFycmF5KG4ubGVuZ3RoKSxvPW5ldyBGbG9hdDY0QXJyYXkobi5sZW5ndGgpKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoOysrbClpW2xdPXRbbF0tbltsXSxhW2xdPWVbbF0tdFtsXSxvW2xdPXJbbF0tdFtsXTtmb3IodmFyIHU9MCxjPTAsaD0wLGY9MCxkPTAscD0wLGw9MDtsPG4ubGVuZ3RoOysrbCl7dmFyIG09YVtsXSx2PW9bbF0sZz1pW2xdO3UrPW0qbSxjKz1tKnYsaCs9dip2LGYrPWcqbSxkKz1nKnYscCs9ZypnfXZhciB5LGI9TWF0aC5hYnModSpoLWMqYykseD1jKmQtaCpmLF89YypmLXUqZDtpZih4K188PWIpaWYoeDwwKV88MCYmZjwwPyhfPTAsLWY+PXU/KHg9MSx5PXUrMipmK3ApOih4PS1mL3UseT1mKngrcCkpOih4PTAsZD49MD8oXz0wLHk9cCk6LWQ+PWg/KF89MSx5PWgrMipkK3ApOihfPS1kL2gseT1kKl8rcCkpO2Vsc2UgaWYoXzwwKV89MCxmPj0wPyh4PTAseT1wKTotZj49dT8oeD0xLHk9dSsyKmYrcCk6KHg9LWYvdSx5PWYqeCtwKTtlbHNle3ZhciB3PTEvYjt4Kj13LF8qPXcseT14Kih1KngrYypfKzIqZikrXyooYyp4K2gqXysyKmQpK3B9ZWxzZXt2YXIgTSxrLEEsVDt4PDA/KE09YytmLGs9aCtkLGs+TT8oQT1rLU0sVD11LTIqYytoLEE+PVQ/KHg9MSxfPTAseT11KzIqZitwKTooeD1BL1QsXz0xLXgseT14Kih1KngrYypfKzIqZikrXyooYyp4K2gqXysyKmQpK3ApKTooeD0wLGs8PTA/KF89MSx5PWgrMipkK3ApOmQ+PTA/KF89MCx5PXApOihfPS1kL2gseT1kKl8rcCkpKTpfPDA/KE09YytkLGs9dStmLGs+TT8oQT1rLU0sVD11LTIqYytoLEE+PVQ/KF89MSx4PTAseT1oKzIqZCtwKTooXz1BL1QseD0xLV8seT14Kih1KngrYypfKzIqZikrXyooYyp4K2gqXysyKmQpK3ApKTooXz0wLGs8PTA/KHg9MSx5PXUrMipmK3ApOmY+PTA/KHg9MCx5PXApOih4PS1mL3UseT1mKngrcCkpKTooQT1oK2QtYy1mLEE8PTA/KHg9MCxfPTEseT1oKzIqZCtwKTooVD11LTIqYytoLEE+PVQ/KHg9MSxfPTAseT11KzIqZitwKTooeD1BL1QsXz0xLXgseT14Kih1KngrYypfKzIqZikrXyooYyp4K2gqXysyKmQpK3ApKSl9Zm9yKHZhciBTPTEteC1fLGw9MDtsPG4ubGVuZ3RoOysrbClzW2xdPVMqdFtsXSt4KmVbbF0rXypyW2xdO3JldHVybiB5PDA/MDp5fXZhciBpPW5ldyBGbG9hdDY0QXJyYXkoNCksYT1uZXcgRmxvYXQ2NEFycmF5KDQpLG89bmV3IEZsb2F0NjRBcnJheSg0KTtlLmV4cG9ydHM9bn0se31dLDQ4NTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBpKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBhKHQpe2lmKGg9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKGg9PT1ufHwhaCkmJnNldFRpbWVvdXQpcmV0dXJuIGg9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBoKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBoLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBoLmNhbGwodGhpcyx0LDApfX19ZnVuY3Rpb24gbyh0KXtpZihmPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGY9PT1pfHwhZikmJmNsZWFyVGltZW91dClyZXR1cm4gZj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtyZXR1cm4gZih0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGYuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBmLmNhbGwodGhpcyx0KX19fWZ1bmN0aW9uIHMoKXt2JiZwJiYodj0hMSxwLmxlbmd0aD9tPXAuY29uY2F0KG0pOmc9LTEsbS5sZW5ndGgmJmwoKSl9ZnVuY3Rpb24gbCgpe2lmKCF2KXt2YXIgdD1hKHMpO3Y9ITA7Zm9yKHZhciBlPW0ubGVuZ3RoO2U7KXtmb3IocD1tLG09W107KytnPGU7KXAmJnBbZ10ucnVuKCk7Zz0tMSxlPW0ubGVuZ3RofXA9bnVsbCx2PSExLG8odCl9fWZ1bmN0aW9uIHUodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiBjKCl7fXZhciBoLGYsZD1lLmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e2g9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpufWNhdGNoKHQpe2g9bn10cnl7Zj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDppfWNhdGNoKHQpe2Y9aX19KCk7dmFyIHAsbT1bXSx2PSExLGc9LTE7ZC5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO20ucHVzaChuZXcgdSh0LGUpKSwxIT09bS5sZW5ndGh8fHZ8fGEobCl9LHUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGQudGl0bGU9ImJyb3dzZXIiLGQuYnJvd3Nlcj0hMCxkLmVudj17fSxkLmFyZ3Y9W10sZC52ZXJzaW9uPSIiLGQudmVyc2lvbnM9e30sZC5vbj1jLGQuYWRkTGlzdGVuZXI9YyxkLm9uY2U9YyxkLm9mZj1jLGQucmVtb3ZlTGlzdGVuZXI9YyxkLnJlbW92ZUFsbExpc3RlbmVycz1jLGQuZW1pdD1jLGQucHJlcGVuZExpc3RlbmVyPWMsZC5wcmVwZW5kT25jZUxpc3RlbmVyPWMsZC5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGQuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGQuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxkLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGQudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSw0ODY6W2Z1bmN0aW9uKGUscixuKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGkpe2Z1bmN0aW9uIGEodCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoUFt0XSl9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPVtdO3ItLTspbltyXT1lKHRbcl0pO3JldHVybiBufWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LnNwbGl0KCJAIiksbj0iIjtyZXR1cm4gci5sZW5ndGg+MSYmKG49clswXSsiQCIsdD1yWzFdKSx0PXQucmVwbGFjZShELCIuIiksbitvKHQuc3BsaXQoIi4iKSxlKS5qb2luKCIuIil9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGUscixuPVtdLGk9MCxhPXQubGVuZ3RoO2k8YTspZT10LmNoYXJDb2RlQXQoaSsrKSxlPj01NTI5NiYmZTw9NTYzMTkmJmk8YT8ocj10LmNoYXJDb2RlQXQoaSsrKSw1NjMyMD09KDY0NTEyJnIpP24ucHVzaCgoKDEwMjMmZSk8PDEwKSsoMTAyMyZyKSs2NTUzNik6KG4ucHVzaChlKSxpLS0pKTpuLnB1c2goZSk7cmV0dXJuIG59ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbyh0LGZ1bmN0aW9uKHQpe3ZhciBlPSIiO3JldHVybiB0PjY1NTM1JiYodC09NjU1MzYsZSs9Rih0Pj4+MTAmMTAyM3w1NTI5NiksdD01NjMyMHwxMDIzJnQpLGUrPUYodCl9KS5qb2luKCIiKX1mdW5jdGlvbiBjKHQpe3JldHVybiB0LTQ4PDEwP3QtMjI6dC02NTwyNj90LTY1OnQtOTc8MjY/dC05NzpNfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdCsyMis3NSoodDwyNiktKCgwIT1lKTw8NSl9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49MDtmb3IodD1yP1IodC9TKTp0Pj4xLHQrPVIodC9lKTt0Pk8qQT4+MTtuKz1NKXQ9Uih0L08pO3JldHVybiBSKG4rKE8rMSkqdC8odCtUKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZSxyLG4saSxvLHMsbCxoLGQscCxtPVtdLHY9dC5sZW5ndGgsZz0wLHk9TCxiPUU7Zm9yKHI9dC5sYXN0SW5kZXhPZihDKSxyPDAmJihyPTApLG49MDtuPHI7KytuKXQuY2hhckNvZGVBdChuKT49MTI4JiZhKCJub3QtYmFzaWMiKSxtLnB1c2godC5jaGFyQ29kZUF0KG4pKTtmb3IoaT1yPjA/cisxOjA7aTx2Oyl7Zm9yKG89ZyxzPTEsbD1NO2k+PXYmJmEoImludmFsaWQtaW5wdXQiKSxoPWModC5jaGFyQ29kZUF0KGkrKykpLChoPj1NfHxoPlIoKHctZykvcykpJiZhKCJvdmVyZmxvdyIpLGcrPWgqcyxkPWw8PWI/azpsPj1iK0E/QTpsLWIsIShoPGQpO2wrPU0pcD1NLWQscz5SKHcvcCkmJmEoIm92ZXJmbG93Iikscyo9cDtlPW0ubGVuZ3RoKzEsYj1mKGctbyxlLDA9PW8pLFIoZy9lKT53LXkmJmEoIm92ZXJmbG93IikseSs9UihnL2UpLGclPWUsbS5zcGxpY2UoZysrLDAseSl9cmV0dXJuIHUobSl9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLG4saSxvLHMsdSxjLGQscCxtLHYsZyx5LGIseD1bXTtmb3IodD1sKHQpLHY9dC5sZW5ndGgsZT1MLHI9MCxvPUUscz0wO3M8djsrK3MpKG09dFtzXSk8MTI4JiZ4LnB1c2goRihtKSk7Zm9yKG49aT14Lmxlbmd0aCxpJiZ4LnB1c2goQyk7bjx2Oyl7Zm9yKHU9dyxzPTA7czx2OysrcykobT10W3NdKT49ZSYmbTx1JiYodT1tKTtmb3IoZz1uKzEsdS1lPlIoKHctcikvZykmJmEoIm92ZXJmbG93Iikscis9KHUtZSkqZyxlPXUscz0wO3M8djsrK3MpaWYobT10W3NdLG08ZSYmKytyPncmJmEoIm92ZXJmbG93IiksbT09ZSl7Zm9yKGM9cixkPU07cD1kPD1vP2s6ZD49bytBP0E6ZC1vLCEoYzxwKTtkKz1NKWI9Yy1wLHk9TS1wLHgucHVzaChGKGgocCtiJXksMCkpKSxjPVIoYi95KTt4LnB1c2goRihoKGMsMCkpKSxvPWYocixnLG49PWkpLHI9MCwrK259KytyLCsrZX1yZXR1cm4geC5qb2luKCIiKX1mdW5jdGlvbiBtKHQpe3JldHVybiBzKHQsZnVuY3Rpb24odCl7cmV0dXJuIHoudGVzdCh0KT9kKHQuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6dH0pfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHModCxmdW5jdGlvbih0KXtyZXR1cm4gSS50ZXN0KHQpPyJ4bi0tIitwKHQpOnR9KX12YXIgZz0ib2JqZWN0Ij09dHlwZW9mIG4mJm4mJiFuLm5vZGVUeXBlJiZuLHk9Im9iamVjdCI9PXR5cGVvZiByJiZyJiYhci5ub2RlVHlwZSYmcixiPSJvYmplY3QiPT10eXBlb2YgZSYmZTtiLmdsb2JhbCE9PWImJmIud2luZG93IT09YiYmYi5zZWxmIT09Ynx8KGk9Yik7dmFyIHgsXyx3PTIxNDc0ODM2NDcsTT0zNixrPTEsQT0yNixUPTM4LFM9NzAwLEU9NzIsTD0xMjgsQz0iLSIsej0vXnhuLS0vLEk9L1teXHgyMC1ceDdFXS8sRD0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csUD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sTz1NLWssUj1NYXRoLmZsb29yLEY9U3RyaW5nLmZyb21DaGFyQ29kZTtpZih4PXt2ZXJzaW9uOiIxLjQuMSIsdWNzMjp7ZGVjb2RlOmwsZW5jb2RlOnV9LGRlY29kZTpkLGVuY29kZTpwLHRvQVNDSUk6dix0b1VuaWNvZGU6bX0sImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJvYmplY3QiPT10eXBlb2YgdC5hbWQmJnQuYW1kKXQoInB1bnljb2RlIixmdW5jdGlvbigpe3JldHVybiB4fSk7ZWxzZSBpZihnJiZ5KWlmKHIuZXhwb3J0cz09Zyl5LmV4cG9ydHM9eDtlbHNlIGZvcihfIGluIHgpeC5oYXNPd25Qcm9wZXJ0eShfKSYmKGdbX109eFtfXSk7ZWxzZSBpLnB1bnljb2RlPXh9KHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDg3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImdsLXF1YXQvc2xlcnAiKX0seyJnbC1xdWF0L3NsZXJwIjoyMjl9XSw0ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHwiJiIscj1yfHwiPSI7dmFyIG89e307aWYoInN0cmluZyIhPXR5cGVvZiB0fHwwPT09dC5sZW5ndGgpcmV0dXJuIG87dmFyIHM9L1wrL2c7dD10LnNwbGl0KGUpO3ZhciBsPTFlMzthJiYibnVtYmVyIj09dHlwZW9mIGEubWF4S2V5cyYmKGw9YS5tYXhLZXlzKTt2YXIgdT10Lmxlbmd0aDtsPjAmJnU+bCYmKHU9bCk7Zm9yKHZhciBjPTA7Yzx1OysrYyl7dmFyIGgsZixkLHAsbT10W2NdLnJlcGxhY2UocywiJTIwIiksdj1tLmluZGV4T2Yocik7dj49MD8oaD1tLnN1YnN0cigwLHYpLGY9bS5zdWJzdHIodisxKSk6KGg9bSxmPSIiKSxkPWRlY29kZVVSSUNvbXBvbmVudChoKSxwPWRlY29kZVVSSUNvbXBvbmVudChmKSxuKG8sZCk/aShvW2RdKT9vW2RdLnB1c2gocCk6b1tkXT1bb1tkXSxwXTpvW2RdPXB9cmV0dXJuIG99O3ZhciBpPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9fSx7fV0sNDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZih0Lm1hcClyZXR1cm4gdC5tYXAoZSk7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKylyLnB1c2goZSh0W25dLG4pKTtyZXR1cm4gcn12YXIgaT1mdW5jdGlvbih0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gdDtjYXNlImJvb2xlYW4iOnJldHVybiB0PyJ0cnVlIjoiZmFsc2UiO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodCk/dDoiIjtkZWZhdWx0OnJldHVybiIifX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3JldHVybiBlPWV8fCImIixyPXJ8fCI9IixudWxsPT09dCYmKHQ9dm9pZCAwKSwib2JqZWN0Ij09dHlwZW9mIHQ/bihvKHQpLGZ1bmN0aW9uKG8pe3ZhciBzPWVuY29kZVVSSUNvbXBvbmVudChpKG8pKStyO3JldHVybiBhKHRbb10pP24odFtvXSxmdW5jdGlvbih0KXtyZXR1cm4gcytlbmNvZGVVUklDb21wb25lbnQoaSh0KSl9KS5qb2luKGUpOnMrZW5jb2RlVVJJQ29tcG9uZW50KGkodFtvXSkpfSkuam9pbihlKTpzP2VuY29kZVVSSUNvbXBvbmVudChpKHMpKStyK2VuY29kZVVSSUNvbXBvbmVudChpKHQpKToiIn07dmFyIGE9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0sbz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gZX19LHt9XSw0OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWNvZGU9ci5wYXJzZT10KCIuL2RlY29kZSIpLHIuZW5jb2RlPXIuc3RyaW5naWZ5PXQoIi4vZW5jb2RlIil9LHsiLi9kZWNvZGUiOjQ4OCwiLi9lbmNvZGUiOjQ4OX1dLDQ5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG8scyl7Zm9yKHI9cnx8MCxvPW98fHQubGVuZ3RoLTEscz1zfHxhO28+cjspe2lmKG8tcj42MDApe3ZhciBsPW8tcisxLHU9ZS1yKzEsYz1NYXRoLmxvZyhsKSxoPS41Kk1hdGguZXhwKDIqYy8zKSxmPS41Kk1hdGguc3FydChjKmgqKGwtaCkvbCkqKHUtbC8yPDA/LTE6MSk7bih0LGUsTWF0aC5tYXgocixNYXRoLmZsb29yKGUtdSpoL2wrZikpLE1hdGgubWluKG8sTWF0aC5mbG9vcihlKyhsLXUpKmgvbCtmKSkscyl9dmFyIGQ9dFtlXSxwPXIsbT1vO2ZvcihpKHQscixlKSxzKHRbb10sZCk+MCYmaSh0LHIsbyk7cDxtOyl7Zm9yKGkodCxwLG0pLHArKyxtLS07cyh0W3BdLGQpPDA7KXArKztmb3IoO3ModFttXSxkKT4wOyltLS19MD09PXModFtyXSxkKT9pKHQscixtKToobSsrLGkodCxtLG8pKSxtPD1lJiYocj1tKzEpLGU8PW0mJihvPW0tMSl9fWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWUuZXhwb3J0cz1ufSx7fV0sNDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpblthXT1pKHRbYV0sZVthXSk7cmV0dXJuIG59dmFyIGk9dCgiYmlnLXJhdC9hZGQiKTtlLmV4cG9ydHM9bn0seyJiaWctcmF0L2FkZCI6NDh9XSw0OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1pKHRbcl0pO3JldHVybiBlfWUuZXhwb3J0cz1uO3ZhciBpPXQoImJpZy1yYXQiKX0seyJiaWctcmF0Ijo1MX1dLDQ5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPWkoZSksbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylvW3NdPWEodFtzXSxyKTtyZXR1cm4gb312YXIgaT10KCJiaWctcmF0IiksYT10KCJiaWctcmF0L211bCIpO2UuZXhwb3J0cz1ufSx7ImJpZy1yYXQiOjUxLCJiaWctcmF0L211bCI6NjB9XSw0OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSluW2FdPWkodFthXSxlW2FdKTtyZXR1cm4gbn12YXIgaT10KCJiaWctcmF0L3N1YiIpO2UuZXhwb3J0cz1ufSx7ImJpZy1yYXQvc3ViIjo2Mn1dLDQ5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3Quc29ydChhKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXt2YXIgcz10W25dLGw9byhzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgdT10W3ItMV07aWYoMD09PWkocyx1KSYmbyh1KSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fXZhciBpPXQoImNvbXBhcmUtY2VsbCIpLGE9dCgiY29tcGFyZS1vcmllbnRlZC1jZWxsIiksbz10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPW59LHsiY2VsbC1vcmllbnRhdGlvbiI6ODMsImNvbXBhcmUtY2VsbCI6OTksImNvbXBhcmUtb3JpZW50ZWQtY2VsbCI6MTAwfV0sNDk3OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP3IuZXhwb3J0cz1pKCk6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoaSk6ZS5jcmVhdGVSRUdMPWkoKX0odGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYnRvYT9idG9hKHQpOiJiYXNlNjQ6Iit0fWZ1bmN0aW9uIGUodCl7dmFyIGU9bmV3IEVycm9yKCIocmVnbCkgIit0KTt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9ZnVuY3Rpb24gcih0LHIpe3R8fGUocil9ZnVuY3Rpb24gbih0KXtyZXR1cm4gdD8iOiAiK3Q6IiJ9ZnVuY3Rpb24gaSh0LHIsaSl7dCBpbiByfHxlKCJ1bmtub3duIHBhcmFtZXRlciAoIit0KyIpIituKGkpKyIuIHBvc3NpYmxlIHZhbHVlczogIitPYmplY3Qua2V5cyhyKS5qb2luKCkpfWZ1bmN0aW9uIGEodCxyKXtRdCh0KXx8ZSgiaW52YWxpZCBwYXJhbWV0ZXIgdHlwZSIrbihyKSsiLiBtdXN0IGJlIGEgdHlwZWQgYXJyYXkiKX1mdW5jdGlvbiBvKHQscixpKXt0eXBlb2YgdCE9PXImJmUoImludmFsaWQgcGFyYW1ldGVyIHR5cGUiK24oaSkrIi4gZXhwZWN0ZWQgIityKyIsIGdvdCAiK3R5cGVvZiB0KX1mdW5jdGlvbiBzKHQscil7dD49MCYmKDB8dCk9PT10fHxlKCJpbnZhbGlkIHBhcmFtZXRlciB0eXBlLCAoIit0KyIpIituKHIpKyIuIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIil9ZnVuY3Rpb24gbCh0LHIsaSl7ci5pbmRleE9mKHQpPDAmJmUoImludmFsaWQgdmFsdWUiK24oaSkrIi4gbXVzdCBiZSBvbmUgb2Y6ICIrcil9ZnVuY3Rpb24gdSh0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RlLmluZGV4T2YodCk8MCYmZSgnaW52YWxpZCByZWdsIGNvbnN0cnVjdG9yIGFyZ3VtZW50ICInK3QrJyIuIG11c3QgYmUgb25lIG9mICcrdGUpfSl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih0Kz0iIjt0Lmxlbmd0aDxlOyl0PSIgIit0O3JldHVybiB0fWZ1bmN0aW9uIGgoKXt0aGlzLm5hbWU9InVua25vd24iLHRoaXMubGluZXM9W10sdGhpcy5pbmRleD17fSx0aGlzLmhhc0Vycm9ycz0hMX1mdW5jdGlvbiBmKHQsZSl7dGhpcy5udW1iZXI9dCx0aGlzLmxpbmU9ZSx0aGlzLmVycm9ycz1bXX1mdW5jdGlvbiBkKHQsZSxyKXt0aGlzLmZpbGU9dCx0aGlzLmxpbmU9ZSx0aGlzLm1lc3NhZ2U9cn1mdW5jdGlvbiBwKCl7dmFyIHQ9bmV3IEVycm9yLGU9KHQuc3RhY2t8fHQpLnRvU3RyaW5nKCkscj0vY29tcGlsZVByb2NlZHVyZS4qXG5ccyphdC4qXCgoLiopXCkvLmV4ZWMoZSk7aWYocilyZXR1cm4gclsxXTt2YXIgbj0vY29tcGlsZVByb2NlZHVyZS4qXG5ccyphdFxzKyguKikoXG58JCkvLmV4ZWMoZSk7cmV0dXJuIG4/blsxXToidW5rbm93biJ9ZnVuY3Rpb24gbSgpe3ZhciB0PW5ldyBFcnJvcixlPSh0LnN0YWNrfHx0KS50b1N0cmluZygpLHI9L2F0IFJFR0xDb21tYW5kLipcblxzK2F0LipcKCguKilcKS8uZXhlYyhlKTtpZihyKXJldHVybiByWzFdO3ZhciBuPS9hdCBSRUdMQ29tbWFuZC4qXG5ccythdFxzKyguKilcbi8uZXhlYyhlKTtyZXR1cm4gbj9uWzFdOiJ1bmtub3duIn1mdW5jdGlvbiB2KGUscil7dmFyIG49ZS5zcGxpdCgiXG4iKSxpPTEsYT0wLG89e3Vua25vd246bmV3IGgsMDpuZXcgaH07by51bmtub3duLm5hbWU9b1swXS5uYW1lPXJ8fHAoKSxvLnVua25vd24ubGluZXMucHVzaChuZXcgZigwLCIiKSk7Zm9yKHZhciBzPTA7czxuLmxlbmd0aDsrK3Mpe3ZhciBsPW5bc10sdT0vXlxzKlwjXHMqKFx3KylccysoLispXHMqJC8uZXhlYyhsKTtpZih1KXN3aXRjaCh1WzFdKXtjYXNlImxpbmUiOnZhciBjPS8oXGQrKShccytcZCspPy8uZXhlYyh1WzJdKTtjJiYoaT0wfGNbMV0sY1syXSYmKChhPTB8Y1syXSlpbiBvfHwob1thXT1uZXcgaCkpKTticmVhaztjYXNlImRlZmluZSI6dmFyIGQ9L1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKikkLy5leGVjKHVbMl0pO2QmJihvW2FdLm5hbWU9ZFsxXT90KGRbMl0pOmRbMl0pfW9bYV0ubGluZXMucHVzaChuZXcgZihpKyssbCkpfXJldHVybiBPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW9bdF07ZS5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuaW5kZXhbdC5udW1iZXJdPXR9KX0pLG99ZnVuY3Rpb24gZyh0KXt2YXIgZT1bXTtyZXR1cm4gdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8NSkpe3ZhciByPS9eRVJST1JcOlxzKyhcZCspXDooXGQrKVw6XHMqKC4qKSQvLmV4ZWModCk7cj9lLnB1c2gobmV3IGQoMHxyWzFdLDB8clsyXSxyWzNdLnRyaW0oKSkpOnQubGVuZ3RoPjAmJmUucHVzaChuZXcgZCgidW5rbm93biIsMCx0KSl9fSksZX1mdW5jdGlvbiB5KHQsZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXRbZS5maWxlXTtpZihyKXt2YXIgbj1yLmluZGV4W2UubGluZV07aWYobilyZXR1cm4gbi5lcnJvcnMucHVzaChlKSx2b2lkKHIuaGFzRXJyb3JzPSEwKX10LnVua25vd24uaGFzRXJyb3JzPSEwLHQudW5rbm93bi5saW5lc1swXS5lcnJvcnMucHVzaChlKX0pfWZ1bmN0aW9uIGIodCxlLG4saSxhKXtpZighdC5nZXRTaGFkZXJQYXJhbWV0ZXIoZSx0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIG89dC5nZXRTaGFkZXJJbmZvTG9nKGUpLHM9aT09PXQuRlJBR01FTlRfU0hBREVSPyJmcmFnbWVudCI6InZlcnRleCI7VChuLCJzdHJpbmciLHMrIiBzaGFkZXIgc291cmNlIG11c3QgYmUgYSBzdHJpbmciLGEpO3ZhciBsPXYobixhKSx1PWcobyk7eShsLHUpLE9iamVjdC5rZXlzKGwpLmZvckVhY2goZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe24ucHVzaCh0KSxpLnB1c2goZXx8IiIpfXZhciByPWxbdF07aWYoci5oYXNFcnJvcnMpe3ZhciBuPVsiIl0saT1bIiJdO2UoImZpbGUgbnVtYmVyICIrdCsiOiAiK3IubmFtZSsiXG4iLCJjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDpib2xkIiksci5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQuZXJyb3JzLmxlbmd0aD4wKXtlKGModC5udW1iZXIsNCkrInwgICIsImJhY2tncm91bmQtY29sb3I6eWVsbG93OyBmb250LXdlaWdodDpib2xkIiksZSh0LmxpbmUrIlxuIiwiY29sb3I6cmVkOyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgZm9udC13ZWlnaHQ6Ym9sZCIpO3ZhciByPTA7dC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLm1lc3NhZ2UsYT0vXlxzKlwnKC4qKVwnXHMqXDpccyooLiopJC8uZXhlYyhpKTtpZihhKXt2YXIgbz1hWzFdO3N3aXRjaChpPWFbMl0sbyl7Y2FzZSJhc3NpZ24iOm89Ij0ifXI9TWF0aC5tYXgodC5saW5lLmluZGV4T2YobyxyKSwwKX1lbHNlIHI9MDtlKGMoInwgIiw2KSksZShjKCJeXl4iLHIrMykrIlxuIiwiZm9udC13ZWlnaHQ6Ym9sZCIpLGUoYygifCAiLDYpKSxlKGkrIlxuIiwiZm9udC13ZWlnaHQ6Ym9sZCIpfSksZShjKCJ8ICIsNikrIlxuIil9ZWxzZSBlKGModC5udW1iZXIsNCkrInwgICIpLGUodC5saW5lKyJcbiIsImNvbG9yOnJlZCIpfSksInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD8oaVswXT1uLmpvaW4oIiVjIiksY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxpKSk6Y29uc29sZS5sb2cobi5qb2luKCIiKSl9fSksci5yYWlzZSgiRXJyb3IgY29tcGlsaW5nICIrcysiIHNoYWRlciwgIitsWzBdLm5hbWUpfX1mdW5jdGlvbiB4KHQsZSxuLGksYSl7aWYoIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHQuTElOS19TVEFUVVMpKXt2YXIgbz10LmdldFByb2dyYW1JbmZvTG9nKGUpLHM9dihuLGEpLGw9dihpLGEpLHU9J0Vycm9yIGxpbmtpbmcgcHJvZ3JhbSB3aXRoIHZlcnRleCBzaGFkZXIsICInK2xbMF0ubmFtZSsnIiwgYW5kIGZyYWdtZW50IHNoYWRlciAiJytzWzBdLm5hbWUrJyInOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/Y29uc29sZS5sb2coIiVjIit1KyJcbiVjIitvLCJjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDpib2xkIiwiY29sb3I6cmVkIik6Y29uc29sZS5sb2codSsiXG4iK28pLHIucmFpc2UodSl9fWZ1bmN0aW9uIF8odCl7dC5fY29tbWFuZFJlZj1wKCl9ZnVuY3Rpb24gdyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0P24uaWQodCk6MH1mdW5jdGlvbiBhKHQsZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihlKXt0W24uaWQoZSldPSEwfSl9Xyh0KSx0Ll9mcmFnSWQ9aSh0LnN0YXRpYy5mcmFnKSx0Ll92ZXJ0SWQ9aSh0LnN0YXRpYy52ZXJ0KTt2YXIgbz10Ll91bmlmb3JtU2V0PXt9O2EobyxlLnN0YXRpYyksYShvLGUuZHluYW1pYyk7dmFyIHM9dC5fYXR0cmlidXRlU2V0PXt9O2EocyxyLnN0YXRpYyksYShzLHIuZHluYW1pYyksdC5faGFzQ291bnQ9ImNvdW50ImluIHQuc3RhdGljfHwiY291bnQiaW4gdC5keW5hbWljfHwiZWxlbWVudHMiaW4gdC5zdGF0aWN8fCJlbGVtZW50cyJpbiB0LmR5bmFtaWN9ZnVuY3Rpb24gTSh0LHIpe3ZhciBuPW0oKTtlKHQrIiBpbiBjb21tYW5kICIrKHJ8fHAoKSkrKCJ1bmtub3duIj09PW4/IiI6IiBjYWxsZWQgZnJvbSAiK24pKX1mdW5jdGlvbiBrKHQsZSxyKXt0fHxNKGUscnx8cCgpKX1mdW5jdGlvbiBBKHQsZSxyLGkpe3QgaW4gZXx8TSgidW5rbm93biBwYXJhbWV0ZXIgKCIrdCsiKSIrbihyKSsiLiBwb3NzaWJsZSB2YWx1ZXM6ICIrT2JqZWN0LmtleXMoZSkuam9pbigpLGl8fHAoKSl9ZnVuY3Rpb24gVCh0LGUscixpKXt0eXBlb2YgdCE9PWUmJk0oImludmFsaWQgcGFyYW1ldGVyIHR5cGUiK24ocikrIi4gZXhwZWN0ZWQgIitlKyIsIGdvdCAiK3R5cGVvZiB0LGl8fHAoKSl9ZnVuY3Rpb24gUyh0KXt0KCl9ZnVuY3Rpb24gRSh0LGUscil7dC50ZXh0dXJlP2wodC50ZXh0dXJlLl90ZXh0dXJlLmludGVybmFsZm9ybWF0LGUsInVuc3VwcG9ydGVkIHRleHR1cmUgZm9ybWF0IGZvciBhdHRhY2htZW50Iik6bCh0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCxyLCJ1bnN1cHBvcnRlZCByZW5kZXJidWZmZXIgZm9ybWF0IGZvciBhdHRhY2htZW50Iil9ZnVuY3Rpb24gTCh0LGUpe3JldHVybiB0PT09dWV8fHQ9PT1sZXx8dD09PWNlPzI6dD09PWhlPzQ6ZmVbdF0qZX1mdW5jdGlvbiBDKHQpe3JldHVybiEodCZ0LTF8fCF0KX1mdW5jdGlvbiB6KHQsZSxuKXt2YXIgaSxhPWUud2lkdGgsbz1lLmhlaWdodCxzPWUuY2hhbm5lbHM7cihhPjAmJmE8PW4ubWF4VGV4dHVyZVNpemUmJm8+MCYmbzw9bi5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB0ZXh0dXJlIHNoYXBlIiksdC53cmFwUz09PWVlJiZ0LndyYXBUPT09ZWV8fHIoQyhhKSYmQyhvKSwiaW5jb21wYXRpYmxlIHdyYXAgbW9kZSBmb3IgdGV4dHVyZSwgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgcG93ZXIgb2YgMiIpLDE9PT1lLm1pcG1hc2s/MSE9PWEmJjEhPT1vJiZyKHQubWluRmlsdGVyIT09bmUmJnQubWluRmlsdGVyIT09YWUmJnQubWluRmlsdGVyIT09aWUmJnQubWluRmlsdGVyIT09b2UsIm1pbiBmaWx0ZXIgcmVxdWlyZXMgbWlwbWFwIik6KHIoQyhhKSYmQyhvKSwidGV4dHVyZSBtdXN0IGJlIGEgc3F1YXJlIHBvd2VyIG9mIDIgdG8gc3VwcG9ydCBtaXBtYXBwaW5nIikscihlLm1pcG1hc2s9PT0oYTw8MSktMSwibWlzc2luZyBvciBpbmNvbXBsZXRlIG1pcG1hcCBkYXRhIikpLGUudHlwZT09PXNlJiYobi5leHRlbnNpb25zLmluZGV4T2YoIm9lc190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPDAmJnIodC5taW5GaWx0ZXI9PT1yZSYmdC5tYWdGaWx0ZXI9PT1yZSwiZmlsdGVyIG5vdCBzdXBwb3J0ZWQsIG11c3QgZW5hYmxlIG9lc190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLHIoIXQuZ2VuTWlwbWFwcywibWlwbWFwIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCB3aXRoIGZsb2F0IHRleHR1cmVzIikpO3ZhciBsPWUuaW1hZ2VzO2ZvcihpPTA7aTwxNjsrK2kpaWYobFtpXSl7dmFyIHU9YT4+aSxjPW8+Pmk7cihlLm1pcG1hc2smMTw8aSwibWlzc2luZyBtaXBtYXAgZGF0YSIpO3ZhciBoPWxbaV07aWYocihoLndpZHRoPT09dSYmaC5oZWlnaHQ9PT1jLCJpbnZhbGlkIHNoYXBlIGZvciBtaXAgaW1hZ2VzIikscihoLmZvcm1hdD09PWUuZm9ybWF0JiZoLmludGVybmFsZm9ybWF0PT09ZS5pbnRlcm5hbGZvcm1hdCYmaC50eXBlPT09ZS50eXBlLCJpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlIiksaC5jb21wcmVzc2VkKTtlbHNlIGlmKGguZGF0YSl7dmFyIGY9TWF0aC5jZWlsKEwoaC50eXBlLHMpKnUvaC51bnBhY2tBbGlnbm1lbnQpKmgudW5wYWNrQWxpZ25tZW50O3IoaC5kYXRhLmJ5dGVMZW5ndGg9PT1mKmMsImludmFsaWQgZGF0YSBmb3IgaW1hZ2UsIGJ1ZmZlciBzaXplIGlzIGluY29uc2lzdGVudCB3aXRoIGltYWdlIGZvcm1hdCIpfWVsc2UgaC5lbGVtZW50fHxoLmNvcHl9ZWxzZSB0Lmdlbk1pcG1hcHN8fHIoMD09KGUubWlwbWFzayYxPDxpKSwiZXh0cmEgbWlwbWFwIGRhdGEiKTtlLmNvbXByZXNzZWQmJnIoIXQuZ2VuTWlwbWFwcywibWlwbWFwIGdlbmVyYXRpb24gZm9yIGNvbXByZXNzZWQgaW1hZ2VzIG5vdCBzdXBwb3J0ZWQiKX1mdW5jdGlvbiBJKHQsZSxuLGkpe3ZhciBhPXQud2lkdGgsbz10LmhlaWdodCxzPXQuY2hhbm5lbHM7cihhPjAmJmE8PWkubWF4VGV4dHVyZVNpemUmJm8+MCYmbzw9aS5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB0ZXh0dXJlIHNoYXBlIikscihhPT09bywiY3ViZSBtYXAgbXVzdCBiZSBzcXVhcmUiKSxyKGUud3JhcFM9PT1lZSYmZS53cmFwVD09PWVlLCJ3cmFwIG1vZGUgbm90IHN1cHBvcnRlZCBieSBjdWJlIG1hcCIpO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7KytsKXt2YXIgdT1uW2xdO3IodS53aWR0aD09PWEmJnUuaGVpZ2h0PT09bywiaW5jb25zaXN0ZW50IGN1YmUgbWFwIGZhY2Ugc2hhcGUiKSxlLmdlbk1pcG1hcHMmJihyKCF1LmNvbXByZXNzZWQsImNhbiBub3QgZ2VuZXJhdGUgbWlwbWFwIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIikscigxPT09dS5taXBtYXNrLCJjYW4gbm90IHNwZWNpZnkgbWlwbWFwcyBhbmQgZ2VuZXJhdGUgbWlwbWFwcyIpKTtmb3IodmFyIGM9dS5pbWFnZXMsaD0wO2g8MTY7KytoKXt2YXIgZj1jW2hdO2lmKGYpe3ZhciBkPWE+PmgscD1vPj5oO3IodS5taXBtYXNrJjE8PGgsIm1pc3NpbmcgbWlwbWFwIGRhdGEiKSxyKGYud2lkdGg9PT1kJiZmLmhlaWdodD09PXAsImludmFsaWQgc2hhcGUgZm9yIG1pcCBpbWFnZXMiKSxyKGYuZm9ybWF0PT09dC5mb3JtYXQmJmYuaW50ZXJuYWxmb3JtYXQ9PT10LmludGVybmFsZm9ybWF0JiZmLnR5cGU9PT10LnR5cGUsImluY29tcGF0aWJsZSB0eXBlIGZvciBtaXAgaW1hZ2UiKSxmLmNvbXByZXNzZWR8fChmLmRhdGE/cihmLmRhdGEuYnl0ZUxlbmd0aD09PWQqcCpNYXRoLm1heChMKGYudHlwZSxzKSxmLnVucGFja0FsaWdubWVudCksImludmFsaWQgZGF0YSBmb3IgaW1hZ2UsIGJ1ZmZlciBzaXplIGlzIGluY29uc2lzdGVudCB3aXRoIGltYWdlIGZvcm1hdCIpOmYuZWxlbWVudHx8Zi5jb3B5KX19fX1mdW5jdGlvbiBEKHQsZSl7dGhpcy5pZD1wZSsrLHRoaXMudHlwZT10LHRoaXMuZGF0YT1lfWZ1bmN0aW9uIFAodCl7cmV0dXJuIHQucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJyl9ZnVuY3Rpb24gTyh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107dmFyIGU9dC5jaGFyQXQoMCkscj10LmNoYXJBdCh0Lmxlbmd0aC0xKTtpZih0Lmxlbmd0aD4xJiZlPT09ciYmKCciJz09PWV8fCInIj09PWUpKXJldHVyblsnIicrUCh0LnN1YnN0cigxLHQubGVuZ3RoLTIpKSsnIiddO3ZhciBuPS9cWyhmYWxzZXx0cnVlfG51bGx8XGQrfCdbXiddKid8IlteIl0qIilcXS8uZXhlYyh0KTtpZihuKXJldHVybiBPKHQuc3Vic3RyKDAsbi5pbmRleCkpLmNvbmNhdChPKG5bMV0pKS5jb25jYXQoTyh0LnN1YnN0cihuLmluZGV4K25bMF0ubGVuZ3RoKSkpO3ZhciBpPXQuc3BsaXQoIi4iKTtpZigxPT09aS5sZW5ndGgpcmV0dXJuWyciJytQKHQpKyciJ107Zm9yKHZhciBhPVtdLG89MDtvPGkubGVuZ3RoOysrbylhPWEuY29uY2F0KE8oaVtvXSkpO3JldHVybiBhfWZ1bmN0aW9uIFIodCl7cmV0dXJuIlsiK08odCkuam9pbigiXVsiKSsiXSJ9ZnVuY3Rpb24gRih0LGUpe3JldHVybiBuZXcgRCh0LFIoZSsiIikpfWZ1bmN0aW9uIGoodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJiF0Ll9yZWdsVHlwZXx8dCBpbnN0YW5jZW9mIER9ZnVuY3Rpb24gTih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P25ldyBEKG1lLHQpOnR9ZnVuY3Rpb24gQigpe3ZhciB0PXsiIjowfSxlPVsiIl07cmV0dXJue2lkOmZ1bmN0aW9uKHIpe3ZhciBuPXRbcl07cmV0dXJuIG58fChuPXRbcl09ZS5sZW5ndGgsZS5wdXNoKHIpLG4pfSxzdHI6ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19fX1mdW5jdGlvbiBVKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQ7aWYodCE9PWRvY3VtZW50LmJvZHkpe3ZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZT1pLnJpZ2h0LWkubGVmdCxuPWkuYm90dG9tLWkudG9wfWEud2lkdGg9ciplLGEuaGVpZ2h0PXIqbiwkdChhLnN0eWxlLHt3aWR0aDplKyJweCIsaGVpZ2h0Om4rInB4In0pfWZ1bmN0aW9uIGkoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKSx0LnJlbW92ZUNoaWxkKGEpfXZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiAkdChhLnN0eWxlLHtib3JkZXI6MCxtYXJnaW46MCxwYWRkaW5nOjAsdG9wOjAsbGVmdDowfSksdC5hcHBlbmRDaGlsZChhKSx0PT09ZG9jdW1lbnQuYm9keSYmKGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIiwkdCh0LnN0eWxlLHttYXJnaW46MCxwYWRkaW5nOjB9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiwhMSksbigpLHtjYW52YXM6YSxvbkRlc3Ryb3k6aX19ZnVuY3Rpb24gVih0LGUpe2Z1bmN0aW9uIHIocil7dHJ5e3JldHVybiB0LmdldENvbnRleHQocixlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19cmV0dXJuIHIoIndlYmdsIil8fHIoImV4cGVyaW1lbnRhbC13ZWJnbCIpfHxyKCJ3ZWJnbC1leHBlcmltZW50YWwiKX1mdW5jdGlvbiBIKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdC5ub2RlTmFtZSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYXBwZW5kQ2hpbGQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdH1mdW5jdGlvbiBxKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdBcnJheXN8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdFbGVtZW50c31mdW5jdGlvbiBHKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KCk6KGRlKEFycmF5LmlzQXJyYXkodCksImludmFsaWQgZXh0ZW5zaW9uIGFycmF5IiksdCl9ZnVuY3Rpb24gWSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGRlKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsIm5vdCBzdXBwb3J0ZWQgb3V0c2lkZSBvZiBET00iKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpKTp0fWZ1bmN0aW9uIFgodCl7dmFyIGUscixuLGksYT10fHx7fSxvPXt9LHM9W10sbD1bXSx1PSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PzE6d2luZG93LmRldmljZVBpeGVsUmF0aW8sYz0hMSxoPWZ1bmN0aW9uKHQpe3QmJmRlLnJhaXNlKHQpfSxmPWZ1bmN0aW9uKCl7fTtpZigic3RyaW5nIj09dHlwZW9mIGE/KGRlKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsInNlbGVjdG9yIHF1ZXJpZXMgb25seSBzdXBwb3J0ZWQgaW4gRE9NIGVudmlyb21lbnRzIiksZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGEpLGRlKGUsImludmFsaWQgcXVlcnkgc3RyaW5nIGZvciBlbGVtZW50IikpOiJvYmplY3QiPT10eXBlb2YgYT9IKGEpP2U9YTpxKGEpPyhpPWEsbj1pLmNhbnZhcyk6KGRlLmNvbnN0cnVjdG9yKGEpLCJnbCJpbiBhP2k9YS5nbDoiY2FudmFzImluIGE/bj1ZKGEuY2FudmFzKToiY29udGFpbmVyImluIGEmJihyPVkoYS5jb250YWluZXIpKSwiYXR0cmlidXRlcyJpbiBhJiYobz1hLmF0dHJpYnV0ZXMsZGUudHlwZShvLCJvYmplY3QiLCJpbnZhbGlkIGNvbnRleHQgYXR0cmlidXRlcyIpKSwiZXh0ZW5zaW9ucyJpbiBhJiYocz1HKGEuZXh0ZW5zaW9ucykpLCJvcHRpb25hbEV4dGVuc2lvbnMiaW4gYSYmKGw9RyhhLm9wdGlvbmFsRXh0ZW5zaW9ucykpLCJvbkRvbmUiaW4gYSYmKGRlLnR5cGUoYS5vbkRvbmUsImZ1bmN0aW9uIiwiaW52YWxpZCBvciBtaXNzaW5nIG9uRG9uZSBjYWxsYmFjayIpLGg9YS5vbkRvbmUpLCJwcm9maWxlImluIGEmJihjPSEhYS5wcm9maWxlKSwicGl4ZWxSYXRpbyJpbiBhJiYodT0rYS5waXhlbFJhdGlvLGRlKHU+MCwiaW52YWxpZCBwaXhlbCByYXRpbyIpKSk6ZGUucmFpc2UoImludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wiKSxlJiYoImNhbnZhcyI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bj1lOnI9ZSksIWkpe2lmKCFuKXtkZSgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50LCJtdXN0IG1hbnVhbGx5IHNwZWNpZnkgd2ViZ2wgY29udGV4dCBvdXRzaWRlIG9mIERPTSBlbnZpcm9ubWVudHMiKTt2YXIgZD1VKHJ8fGRvY3VtZW50LmJvZHksaCx1KTtpZighZClyZXR1cm4gbnVsbDtuPWQuY2FudmFzLGY9ZC5vbkRlc3Ryb3l9aT1WKG4sbyl9cmV0dXJuIGk/e2dsOmksY2FudmFzOm4sY29udGFpbmVyOnIsZXh0ZW5zaW9uczpzLG9wdGlvbmFsRXh0ZW5zaW9uczpsLHBpeGVsUmF0aW86dSxwcm9maWxlOmMsb25Eb25lOmgsb25EZXN0cm95OmZ9OihmKCksaCgid2ViZ2wgbm90IHN1cHBvcnRlZCwgdHJ5IHVwZ3JhZGluZyB5b3VyIGJyb3dzZXIgb3IgZ3JhcGhpY3MgZHJpdmVycyBodHRwOi8vZ2V0LndlYmdsLm9yZyIpLG51bGwpfWZ1bmN0aW9uIFcodCxlKXtmdW5jdGlvbiByKGUpe2RlLnR5cGUoZSwic3RyaW5nIiwiZXh0ZW5zaW9uIG5hbWUgbXVzdCBiZSBzdHJpbmciKTt2YXIgcixpPWUudG9Mb3dlckNhc2UoKTt0cnl7cj1uW2ldPXQuZ2V0RXh0ZW5zaW9uKGkpfWNhdGNoKHQpe31yZXR1cm4hIXJ9Zm9yKHZhciBuPXt9LGk9MDtpPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KytpKXt2YXIgYT1lLmV4dGVuc2lvbnNbaV07aWYoIXIoYSkpcmV0dXJuIGUub25EZXN0cm95KCksZS5vbkRvbmUoJyInK2ErJyIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCFyKHQpKXRocm93IG5ldyBFcnJvcigiKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uICIrdCl9KX19fWZ1bmN0aW9uIFoodCl7cmV0dXJuISF0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodC5zaGFwZSkmJkFycmF5LmlzQXJyYXkodC5zdHJpZGUpJiYibnVtYmVyIj09dHlwZW9mIHQub2Zmc2V0JiZ0LnNoYXBlLmxlbmd0aD09PXQuc3RyaWRlLmxlbmd0aCYmKEFycmF5LmlzQXJyYXkodC5kYXRhKXx8UXQodC5kYXRhKSl9ZnVuY3Rpb24gSih0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gSyh0KXtmb3IodmFyIGU9MTY7ZTw9MTw8Mjg7ZSo9MTYpaWYodDw9ZSlyZXR1cm4gZTtyZXR1cm4gMH1mdW5jdGlvbiBRKHQpe3ZhciBlLHI7cmV0dXJuIGU9KHQ+NjU1MzUpPDw0LHQ+Pj49ZSxyPSh0PjI1NSk8PDMsdD4+Pj1yLGV8PXIscj0odD4xNSk8PDIsdD4+Pj1yLGV8PXIscj0odD4zKTw8MSx0Pj4+PXIsKGV8PXIpfHQ+PjF9ZnVuY3Rpb24gJCh0KXt2YXIgZT1LKHQpLHI9RWVbUShlKT4+Ml07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgQXJyYXlCdWZmZXIoZSl9ZnVuY3Rpb24gdHQodCl7RWVbUSh0LmJ5dGVMZW5ndGgpPj4yXS5wdXNoKHQpfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIHI9bnVsbDtzd2l0Y2godCl7Y2FzZSBfZTpyPW5ldyBJbnQ4QXJyYXkoJChlKSwwLGUpO2JyZWFrO2Nhc2Ugd2U6cj1uZXcgVWludDhBcnJheSgkKGUpLDAsZSk7YnJlYWs7Y2FzZSBNZTpyPW5ldyBJbnQxNkFycmF5KCQoMiplKSwwLGUpO2JyZWFrO2Nhc2Uga2U6cj1uZXcgVWludDE2QXJyYXkoJCgyKmUpLDAsZSk7YnJlYWs7Y2FzZSBBZTpyPW5ldyBJbnQzMkFycmF5KCQoNCplKSwwLGUpO2JyZWFrO2Nhc2UgVGU6cj1uZXcgVWludDMyQXJyYXkoJCg0KmUpLDAsZSk7YnJlYWs7Y2FzZSBTZTpyPW5ldyBGbG9hdDMyQXJyYXkoJCg0KmUpLDAsZSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gci5sZW5ndGghPT1lP3Iuc3ViYXJyYXkoMCxlKTpyfWZ1bmN0aW9uIHJ0KHQpe3R0KHQuYnVmZmVyKX1mdW5jdGlvbiBudCh0LGUscil7Zm9yKHZhciBuPTA7bjxlOysrbilyW25dPXRbbl19ZnVuY3Rpb24gaXQodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8ZTsrK2EpZm9yKHZhciBvPXRbYV0scz0wO3M8cjsrK3MpbltpKytdPW9bc119ZnVuY3Rpb24gYXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1hLHM9MDtzPGU7KytzKWZvcih2YXIgbD10W3NdLHU9MDt1PHI7Kyt1KWZvcih2YXIgYz1sW3VdLGg9MDtoPG47KytoKWlbbysrXT1jW2hdfWZ1bmN0aW9uIG90KHQsZSxyLG4saSl7Zm9yKHZhciBhPTEsbz1yKzE7bzxlLmxlbmd0aDsrK28pYSo9ZVtvXTt2YXIgcz1lW3JdO2lmKGUubGVuZ3RoLXI9PTQpe3ZhciBsPWVbcisxXSx1PWVbcisyXSxjPWVbciszXTtmb3Iobz0wO288czsrK28pYXQodFtvXSxsLHUsYyxuLGkpLGkrPWF9ZWxzZSBmb3Iobz0wO288czsrK28pb3QodFtvXSxlLHIrMSxuLGkpLGkrPWF9ZnVuY3Rpb24gc3QodCxlLHIsbil7dmFyIGk9MTtpZihlLmxlbmd0aClmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSlpKj1lW2FdO2Vsc2UgaT0wO3ZhciBvPW58fExlLmFsbG9jVHlwZShyLGkpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpudCh0LGVbMF0sbyk7YnJlYWs7Y2FzZSAyOml0KHQsZVswXSxlWzFdLG8pO2JyZWFrO2Nhc2UgMzphdCh0LGVbMF0sZVsxXSxlWzJdLG8sMCk7YnJlYWs7ZGVmYXVsdDpvdCh0LGUsMCxvLDApfXJldHVybiBvfWZ1bmN0aW9uIGx0KHQpe2Zvcih2YXIgZT1bXSxyPXQ7ci5sZW5ndGg7cj1yWzBdKWUucHVzaChyLmxlbmd0aCk7cmV0dXJuIGV9ZnVuY3Rpb24gdXQodCl7cmV0dXJuIDB8S3RbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBjdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXX1mdW5jdGlvbiBodCh0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MCxsPTA7bDxyOysrbClmb3IodmFyIHU9MDt1PG47Kyt1KXRbcysrXT1lW2kqbCthKnUrb119ZnVuY3Rpb24gZnQodCxlLHIpe2Z1bmN0aW9uIG4oZSl7dGhpcy5pZD1oKyssdGhpcy5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0aGlzLnR5cGU9ZSx0aGlzLnVzYWdlPU9lLHRoaXMuYnl0ZUxlbmd0aD0wLHRoaXMuZGltZW5zaW9uPTEsdGhpcy5kdHlwZT1GZSx0aGlzLnBlcnNpc3RlbnREYXRhPW51bGwsci5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBuKHQpKSxyLmJpbmQoKSxzKHIsZSxSZSwwLDEsITEpLHJ9ZnVuY3Rpb24gYSh0KXtkLnB1c2godCl9ZnVuY3Rpb24gbyhlLHIsbil7ZS5ieXRlTGVuZ3RoPXIuYnl0ZUxlbmd0aCx0LmJ1ZmZlckRhdGEoZS50eXBlLHIsbil9ZnVuY3Rpb24gcyh0LGUscixuLGksYSl7dmFyIHM7aWYodC51c2FnZT1yLEFycmF5LmlzQXJyYXkoZSkpe2lmKHQuZHR5cGU9bnx8amUsZS5sZW5ndGg+MCl7dmFyIGw7aWYoQXJyYXkuaXNBcnJheShlWzBdKSl7cz1QZShlKTtmb3IodmFyIHU9MSxjPTE7YzxzLmxlbmd0aDsrK2MpdSo9c1tjXTt0LmRpbWVuc2lvbj11LGw9RGUoZSxzLHQuZHR5cGUpLG8odCxsLHIpLGE/dC5wZXJzaXN0ZW50RGF0YT1sOkxlLmZyZWVUeXBlKGwpfWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBlWzBdKXt0LmRpbWVuc2lvbj1pO3ZhciBoPUxlLmFsbG9jVHlwZSh0LmR0eXBlLGUubGVuZ3RoKTtjdChoLGUpLG8odCxoLHIpLGE/dC5wZXJzaXN0ZW50RGF0YT1oOkxlLmZyZWVUeXBlKGgpfWVsc2UgUXQoZVswXSk/KHQuZGltZW5zaW9uPWVbMF0ubGVuZ3RoLHQuZHR5cGU9bnx8dXQoZVswXSl8fGplLGw9RGUoZSxbZS5sZW5ndGgsZVswXS5sZW5ndGhdLHQuZHR5cGUpLG8odCxsLHIpLGE/dC5wZXJzaXN0ZW50RGF0YT1sOkxlLmZyZWVUeXBlKGwpKTpkZS5yYWlzZSgiaW52YWxpZCBidWZmZXIgZGF0YSIpfX1lbHNlIGlmKFF0KGUpKXQuZHR5cGU9bnx8dXQoZSksdC5kaW1lbnNpb249aSxvKHQsZSxyKSxhJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpKTtlbHNlIGlmKFooZSkpe3M9ZS5zaGFwZTt2YXIgZj1lLnN0cmlkZSxkPWUub2Zmc2V0LHA9MCxtPTAsdj0wLGc9MDsxPT09cy5sZW5ndGg/KHA9c1swXSxtPTEsdj1mWzBdLGc9MCk6Mj09PXMubGVuZ3RoPyhwPXNbMF0sbT1zWzFdLHY9ZlswXSxnPWZbMV0pOmRlLnJhaXNlKCJpbnZhbGlkIHNoYXBlIiksdC5kdHlwZT1ufHx1dChlLmRhdGEpfHxqZSx0LmRpbWVuc2lvbj1tO3ZhciB5PUxlLmFsbG9jVHlwZSh0LmR0eXBlLHAqbSk7aHQoeSxlLmRhdGEscCxtLHYsZyxkKSxvKHQseSxyKSxhP3QucGVyc2lzdGVudERhdGE9eTpMZS5mcmVlVHlwZSh5KX1lbHNlIGRlLnJhaXNlKCJpbnZhbGlkIGJ1ZmZlciBkYXRhIil9ZnVuY3Rpb24gbChyKXtlLmJ1ZmZlckNvdW50LS07dmFyIG49ci5idWZmZXI7ZGUobiwiYnVmZmVyIG11c3Qgbm90IGJlIGRlbGV0ZWQgYWxyZWFkeSIpLHQuZGVsZXRlQnVmZmVyKG4pLHIuYnVmZmVyPW51bGwsZGVsZXRlIGZbci5pZF19ZnVuY3Rpb24gdShpLGEsbyx1KXtmdW5jdGlvbiBjKGUpe3ZhciBuPU9lLGk9bnVsbCxhPTAsbz0wLGw9MTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8UXQoZSl8fFooZSk/aT1lOiJudW1iZXIiPT10eXBlb2YgZT9hPTB8ZTplJiYoZGUudHlwZShlLCJvYmplY3QiLCJidWZmZXIgYXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBhIG51bWJlciBvciBhbiBhcnJheSIpLCJkYXRhImluIGUmJihkZShudWxsPT09aXx8QXJyYXkuaXNBcnJheShpKXx8UXQoaSl8fFooaSksImludmFsaWQgZGF0YSBmb3IgYnVmZmVyIiksaT1lLmRhdGEpLCJ1c2FnZSJpbiBlJiYoZGUucGFyYW1ldGVyKGUudXNhZ2UsSWUsImludmFsaWQgYnVmZmVyIHVzYWdlIiksbj1JZVtlLnVzYWdlXSksInR5cGUiaW4gZSYmKGRlLnBhcmFtZXRlcihlLnR5cGUsemUsImludmFsaWQgYnVmZmVyIHR5cGUiKSxvPXplW2UudHlwZV0pLCJkaW1lbnNpb24iaW4gZSYmKGRlLnR5cGUoZS5kaW1lbnNpb24sIm51bWJlciIsImludmFsaWQgZGltZW5zaW9uIiksbD0wfGUuZGltZW5zaW9uKSwibGVuZ3RoImluIGUmJihkZS5ubmkoYSwiYnVmZmVyIGxlbmd0aCBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIpLGE9MHxlLmxlbmd0aCkpLHAuYmluZCgpLGk/cyhwLGksbixvLGwsdSk6KHQuYnVmZmVyRGF0YShwLnR5cGUsYSxuKSxwLmR0eXBlPW98fEZlLHAudXNhZ2U9bixwLmRpbWVuc2lvbj1sLHAuYnl0ZUxlbmd0aD1hKSxyLnByb2ZpbGUmJihwLnN0YXRzLnNpemU9cC5ieXRlTGVuZ3RoKk5lW3AuZHR5cGVdKSxjfWZ1bmN0aW9uIGgoZSxyKXtkZShyK2UuYnl0ZUxlbmd0aDw9cC5ieXRlTGVuZ3RoLCJpbnZhbGlkIGJ1ZmZlciBzdWJkYXRhIGNhbGwsIGJ1ZmZlciBpcyB0b28gc21hbGwuICBDYW4ndCB3cml0ZSBkYXRhIG9mIHNpemUgIitlLmJ5dGVMZW5ndGgrIiBzdGFydGluZyBmcm9tIG9mZnNldCAiK3IrIiB0byBhIGJ1ZmZlciBvZiBzaXplICIrcC5ieXRlTGVuZ3RoKSx0LmJ1ZmZlclN1YkRhdGEocC50eXBlLHIsZSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByLG49MHwoZXx8MCk7aWYocC5iaW5kKCksQXJyYXkuaXNBcnJheSh0KSl7aWYodC5sZW5ndGg+MClpZigibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBpPUxlLmFsbG9jVHlwZShwLmR0eXBlLHQubGVuZ3RoKTtjdChpLHQpLGgoaSxuKSxMZS5mcmVlVHlwZShpKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodFswXSl8fFF0KHRbMF0pKXtyPVBlKHQpO3ZhciBhPURlKHQscixwLmR0eXBlKTtoKGEsbiksTGUuZnJlZVR5cGUoYSl9ZWxzZSBkZS5yYWlzZSgiaW52YWxpZCBidWZmZXIgZGF0YSIpfWVsc2UgaWYoUXQodCkpaCh0LG4pO2Vsc2UgaWYoWih0KSl7cj10LnNoYXBlO3ZhciBvPXQuc3RyaWRlLHM9MCxsPTAsdT0wLGY9MDsxPT09ci5sZW5ndGg/KHM9clswXSxsPTEsdT1vWzBdLGY9MCk6Mj09PXIubGVuZ3RoPyhzPXJbMF0sbD1yWzFdLHU9b1swXSxmPW9bMV0pOmRlLnJhaXNlKCJpbnZhbGlkIHNoYXBlIik7dmFyIGQ9QXJyYXkuaXNBcnJheSh0LmRhdGEpP3AuZHR5cGU6dXQodC5kYXRhKSxtPUxlLmFsbG9jVHlwZShkLHMqbCk7aHQobSx0LmRhdGEscyxsLHUsZix0Lm9mZnNldCksaChtLG4pLExlLmZyZWVUeXBlKG0pfWVsc2UgZGUucmFpc2UoImludmFsaWQgZGF0YSBmb3IgYnVmZmVyIHN1YmRhdGEiKTtyZXR1cm4gY31lLmJ1ZmZlckNvdW50Kys7dmFyIHA9bmV3IG4oYSk7cmV0dXJuIGZbcC5pZF09cCxvfHxjKGkpLGMuX3JlZ2xUeXBlPSJidWZmZXIiLGMuX2J1ZmZlcj1wLGMuc3ViZGF0YT1kLHIucHJvZmlsZSYmKGMuc3RhdHM9cC5zdGF0cyksYy5kZXN0cm95PWZ1bmN0aW9uKCl7bChwKX0sY31mdW5jdGlvbiBjKCl7eGUoZikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHQuYmluZEJ1ZmZlcihlLnR5cGUsZS5idWZmZXIpLHQuYnVmZmVyRGF0YShlLnR5cGUsZS5wZXJzaXN0ZW50RGF0YXx8ZS5ieXRlTGVuZ3RoLGUudXNhZ2UpfSl9dmFyIGg9MCxmPXt9O24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0LmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuYnVmZmVyKX0sbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2wodGhpcyl9O3ZhciBkPVtdO3JldHVybiByLnByb2ZpbGUmJihlLmdldFRvdGFsQnVmZmVyU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9ZltlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGU6dSxjcmVhdGVTdHJlYW06aSxkZXN0cm95U3RyZWFtOmEsY2xlYXI6ZnVuY3Rpb24oKXt4ZShmKS5mb3JFYWNoKGwpLGQuZm9yRWFjaChsKX0sZ2V0QnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9idWZmZXIgaW5zdGFuY2VvZiBuP3QuX2J1ZmZlcjpudWxsfSxyZXN0b3JlOmMsX2luaXRCdWZmZXI6c319ZnVuY3Rpb24gZHQodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPWgrKyxjW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXI9dCx0aGlzLnByaW1UeXBlPUhlLHRoaXMudmVydENvdW50PTAsdGhpcy50eXBlPTB9ZnVuY3Rpb24gYSh0KXt2YXIgZT1kLnBvcCgpO3JldHVybiBlfHwoZT1uZXcgaShyLmNyZWF0ZShudWxsLEplLCEwLCExKS5fYnVmZmVyKSkscyhlLHQsS2UsLTEsLTEsMCwwKSxlfWZ1bmN0aW9uIG8odCl7ZC5wdXNoKHQpfWZ1bmN0aW9uIHMobixpLGEsbyxzLGwsdSl7aWYobi5idWZmZXIuYmluZCgpLGkpe3ZhciBjPXU7dXx8UXQoaSkmJighWihpKXx8UXQoaS5kYXRhKSl8fChjPWUub2VzX2VsZW1lbnRfaW5kZXhfdWludD9aZTpYZSksci5faW5pdEJ1ZmZlcihuLmJ1ZmZlcixpLGEsYywzKX1lbHNlIHQuYnVmZmVyRGF0YShKZSxsLGEpLG4uYnVmZmVyLmR0eXBlPWh8fEdlLG4uYnVmZmVyLnVzYWdlPWEsbi5idWZmZXIuZGltZW5zaW9uPTMsbi5idWZmZXIuYnl0ZUxlbmd0aD1sO3ZhciBoPXU7aWYoIXUpe3N3aXRjaChuLmJ1ZmZlci5kdHlwZSl7Y2FzZSBHZTpjYXNlIHFlOmg9R2U7YnJlYWs7Y2FzZSBYZTpjYXNlIFllOmg9WGU7YnJlYWs7Y2FzZSBaZTpjYXNlIFdlOmg9WmU7YnJlYWs7ZGVmYXVsdDpkZS5yYWlzZSgidW5zdXBwb3J0ZWQgdHlwZSBmb3IgZWxlbWVudCBhcnJheSIpfW4uYnVmZmVyLmR0eXBlPWh9bi50eXBlPWgsZGUoaCE9PVplfHwhIWUub2VzX2VsZW1lbnRfaW5kZXhfdWludCwiMzIgYml0IGVsZW1lbnQgYnVmZmVycyBub3Qgc3VwcG9ydGVkLCBlbmFibGUgb2VzX2VsZW1lbnRfaW5kZXhfdWludCBmaXJzdCIpO3ZhciBmPXM7ZjwwJiYoZj1uLmJ1ZmZlci5ieXRlTGVuZ3RoLGg9PT1YZT9mPj49MTpoPT09WmUmJihmPj49MikpLG4udmVydENvdW50PWY7dmFyIGQ9bztpZihvPDApe2Q9SGU7dmFyIHA9bi5idWZmZXIuZGltZW5zaW9uOzE9PT1wJiYoZD1VZSksMj09PXAmJihkPVZlKSwzPT09cCYmKGQ9SGUpfW4ucHJpbVR5cGU9ZH1mdW5jdGlvbiBsKHQpe24uZWxlbWVudHNDb3VudC0tLGRlKG51bGwhPT10LmJ1ZmZlciwibXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgZWxlbWVudHMiKSxkZWxldGUgY1t0LmlkXSx0LmJ1ZmZlci5kZXN0cm95KCksdC5idWZmZXI9bnVsbH1mdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gYSh0KXtpZih0KWlmKCJudW1iZXIiPT10eXBlb2YgdClvKHQpLHUucHJpbVR5cGU9SGUsdS52ZXJ0Q291bnQ9MHx0LHUudHlwZT1HZTtlbHNle3ZhciBlPW51bGwscj1RZSxuPS0xLGk9LTEsbD0wLGM9MDtBcnJheS5pc0FycmF5KHQpfHxRdCh0KXx8Wih0KT9lPXQ6KGRlLnR5cGUodCwib2JqZWN0IiwiaW52YWxpZCBhcmd1bWVudHMgZm9yIGVsZW1lbnRzIiksImRhdGEiaW4gdCYmKGU9dC5kYXRhLGRlKEFycmF5LmlzQXJyYXkoZSl8fFF0KGUpfHxaKGUpLCJpbnZhbGlkIGRhdGEgZm9yIGVsZW1lbnQgYnVmZmVyIikpLCJ1c2FnZSJpbiB0JiYoZGUucGFyYW1ldGVyKHQudXNhZ2UsSWUsImludmFsaWQgZWxlbWVudCBidWZmZXIgdXNhZ2UiKSxyPUllW3QudXNhZ2VdKSwicHJpbWl0aXZlImluIHQmJihkZS5wYXJhbWV0ZXIodC5wcmltaXRpdmUsQmUsImludmFsaWQgZWxlbWVudCBidWZmZXIgcHJpbWl0aXZlIiksbj1CZVt0LnByaW1pdGl2ZV0pLCJjb3VudCJpbiB0JiYoZGUoIm51bWJlciI9PXR5cGVvZiB0LmNvdW50JiZ0LmNvdW50Pj0wLCJpbnZhbGlkIHZlcnRleCBjb3VudCBmb3IgZWxlbWVudHMiKSxpPTB8dC5jb3VudCksInR5cGUiaW4gdCYmKGRlLnBhcmFtZXRlcih0LnR5cGUsZiwiaW52YWxpZCBidWZmZXIgdHlwZSIpLGM9Zlt0LnR5cGVdKSwibGVuZ3RoImluIHQ/bD0wfHQubGVuZ3RoOihsPWksYz09PVhlfHxjPT09WWU/bCo9MjpjIT09WmUmJmMhPT1XZXx8KGwqPTQpKSkscyh1LGUscixuLGksbCxjKX1lbHNlIG8oKSx1LnByaW1UeXBlPUhlLHUudmVydENvdW50PTAsdS50eXBlPUdlO3JldHVybiBhfXZhciBvPXIuY3JlYXRlKG51bGwsSmUsITApLHU9bmV3IGkoby5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50KyssYSh0KSxhLl9yZWdsVHlwZT0iZWxlbWVudHMiLGEuX2VsZW1lbnRzPXUsYS5zdWJkYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uc3ViZGF0YSh0LGUpLGF9LGEuZGVzdHJveT1mdW5jdGlvbigpe2wodSl9LGF9dmFyIGM9e30saD0wLGY9e3VpbnQ4OkdlLHVpbnQxNjpYZX07ZS5vZXNfZWxlbWVudF9pbmRleF91aW50JiYoZi51aW50MzI9WmUpLGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlci5iaW5kKCl9O3ZhciBkPVtdO3JldHVybntjcmVhdGU6dSxjcmVhdGVTdHJlYW06YSxkZXN0cm95U3RyZWFtOm8sZ2V0RWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe3hlKGMpLmZvckVhY2gobCl9fX1mdW5jdGlvbiBwdCh0KXtmb3IodmFyIGU9TGUuYWxsb2NUeXBlKGVyLHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpaWYoaXNOYU4odFtyXSkpZVtyXT02NTUzNTtlbHNlIGlmKHRbcl09PT0xLzApZVtyXT0zMTc0NDtlbHNlIGlmKHRbcl09PT0tMS8wKWVbcl09NjQ1MTI7ZWxzZXskZVswXT10W3JdO3ZhciBuPXRyWzBdLGk9bj4+PjMxPDwxNSxhPShuPDwxPj4+MjQpLTEyNyxvPW4+PjEzJjEwMjM7aWYoYTwtMjQpZVtyXT1pO2Vsc2UgaWYoYTwtMTQpe3ZhciBzPS0xNC1hO2Vbcl09aSsobysxMDI0Pj5zKX1lbHNlIGVbcl09YT4xNT9pKzMxNzQ0OmkrKGErMTU8PDEwKStvfXJldHVybiBlfWZ1bmN0aW9uIG10KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxRdCh0KX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4iW29iamVjdCAiK3QrIl0ifWZ1bmN0aW9uIGd0KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYoMD09PXQubGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHRbMF0pfWZ1bmN0aW9uIHl0KHQpe3JldHVybiEhQXJyYXkuaXNBcnJheSh0KSYmISgwPT09dC5sZW5ndGh8fCFtdCh0WzBdKSl9ZnVuY3Rpb24gYnQodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB4dCh0KXtyZXR1cm4gYnQodCk9PT1kbn1mdW5jdGlvbiBfdCh0KXtyZXR1cm4gYnQodCk9PT1wbn1mdW5jdGlvbiB3dCh0KXtyZXR1cm4gYnQodCk9PT1tbn1mdW5jdGlvbiBNdCh0KXtyZXR1cm4gYnQodCk9PT12bn1mdW5jdGlvbiBrdCh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1idCh0KTtyZXR1cm4gZ24uaW5kZXhPZihlKT49MHx8KGd0KHQpfHx5dCh0KXx8Wih0KSl9ZnVuY3Rpb24gQXQodCl7cmV0dXJuIDB8S3RbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBUdCh0LGUpe3ZhciByPWUubGVuZ3RoO3N3aXRjaCh0LnR5cGUpe2Nhc2UgT3I6Y2FzZSBScjpjYXNlIEZyOmNhc2UganI6dmFyIG49TGUuYWxsb2NUeXBlKHQudHlwZSxyKTtuLnNldChlKSx0LmRhdGE9bjticmVhaztjYXNlIHdyOnQuZGF0YT1wdChlKTticmVhaztkZWZhdWx0OmRlLnJhaXNlKCJ1bnN1cHBvcnRlZCB0ZXh0dXJlIHR5cGUsIG11c3Qgc3BlY2lmeSBhIHR5cGVkIGFycmF5Iil9fWZ1bmN0aW9uIFN0KHQsZSl7cmV0dXJuIExlLmFsbG9jVHlwZSh0LnR5cGU9PT13cj9qcjp0LnR5cGUsZSl9ZnVuY3Rpb24gRXQodCxlKXt0LnR5cGU9PT13cj8odC5kYXRhPXB0KGUpLExlLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBMdCh0LGUscixuLGksYSl7CmZvcih2YXIgbz10LndpZHRoLHM9dC5oZWlnaHQsbD10LmNoYW5uZWxzLHU9bypzKmwsYz1TdCh0LHUpLGg9MCxmPTA7ZjxzOysrZilmb3IodmFyIGQ9MDtkPG87KytkKWZvcih2YXIgcD0wO3A8bDsrK3ApY1toKytdPWVbcipkK24qZitpKnArYV07RXQodCxjKX1mdW5jdGlvbiBDdCh0LGUscixuLGksYSl7dmFyIG87aWYobz12b2lkIDAhPT1iblt0XT9iblt0XTpmblt0XSp5bltlXSxhJiYobyo9NiksaSl7Zm9yKHZhciBzPTAsbD1yO2w+PTE7KXMrPW8qbCpsLGwvPTI7cmV0dXJuIHN9cmV0dXJuIG8qcipufWZ1bmN0aW9uIHp0KHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmludGVybmFsZm9ybWF0PW9yLHRoaXMuZm9ybWF0PW9yLHRoaXMudHlwZT1Pcix0aGlzLmNvbXByZXNzZWQ9ITEsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MSx0aGlzLmNvbG9yU3BhY2U9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLmNoYW5uZWxzPTB9ZnVuY3Rpb24gbCh0LGUpe3QuaW50ZXJuYWxmb3JtYXQ9ZS5pbnRlcm5hbGZvcm1hdCx0LmZvcm1hdD1lLmZvcm1hdCx0LnR5cGU9ZS50eXBlLHQuY29tcHJlc3NlZD1lLmNvbXByZXNzZWQsdC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSx0LmZsaXBZPWUuZmxpcFksdC51bnBhY2tBbGlnbm1lbnQ9ZS51bnBhY2tBbGlnbm1lbnQsdC5jb2xvclNwYWNlPWUuY29sb3JTcGFjZSx0LndpZHRoPWUud2lkdGgsdC5oZWlnaHQ9ZS5oZWlnaHQsdC5jaGFubmVscz1lLmNoYW5uZWxzfWZ1bmN0aW9uIHUodCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIG4mJm4pe2lmKCJwcmVtdWx0aXBseUFscGhhImluIG4mJihkZS50eXBlKG4ucHJlbXVsdGlwbHlBbHBoYSwiYm9vbGVhbiIsImludmFsaWQgcHJlbXVsdGlwbHlBbHBoYSIpLHQucHJlbXVsdGlwbHlBbHBoYT1uLnByZW11bHRpcGx5QWxwaGEpLCJmbGlwWSJpbiBuJiYoZGUudHlwZShuLmZsaXBZLCJib29sZWFuIiwiaW52YWxpZCB0ZXh0dXJlIGZsaXAiKSx0LmZsaXBZPW4uZmxpcFkpLCJhbGlnbm1lbnQiaW4gbiYmKGRlLm9uZU9mKG4uYWxpZ25tZW50LFsxLDIsNCw4XSwiaW52YWxpZCB0ZXh0dXJlIHVucGFjayBhbGlnbm1lbnQiKSx0LnVucGFja0FsaWdubWVudD1uLmFsaWdubWVudCksImNvbG9yU3BhY2UiaW4gbiYmKGRlLnBhcmFtZXRlcihuLmNvbG9yU3BhY2UsaiwiaW52YWxpZCBjb2xvclNwYWNlIiksdC5jb2xvclNwYWNlPWpbbi5jb2xvclNwYWNlXSksInR5cGUiaW4gbil7dmFyIGk9bi50eXBlO2RlKGUub2VzX3RleHR1cmVfZmxvYXR8fCEoImZsb2F0Ij09PWl8fCJmbG9hdDMyIj09PWkpLCJ5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuIiksZGUoZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0fHwhKCJoYWxmIGZsb2F0Ij09PWl8fCJmbG9hdDE2Ij09PWkpLCJ5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIGluIG9yZGVyIHRvIHVzZSAxNi1iaXQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuIiksZGUoZS53ZWJnbF9kZXB0aF90ZXh0dXJlfHwhKCJ1aW50MTYiPT09aXx8InVpbnQzMiI9PT1pfHwiZGVwdGggc3RlbmNpbCI9PT1pKSwieW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4iKSxkZS5wYXJhbWV0ZXIoaSxOLCJpbnZhbGlkIHRleHR1cmUgdHlwZSIpLHQudHlwZT1OW2ldfXZhciBhPXQud2lkdGgsbz10LmhlaWdodCxzPXQuY2hhbm5lbHMsbD0hMTsic2hhcGUiaW4gbj8oZGUoQXJyYXkuaXNBcnJheShuLnNoYXBlKSYmbi5zaGFwZS5sZW5ndGg+PTIsInNoYXBlIG11c3QgYmUgYW4gYXJyYXkiKSxhPW4uc2hhcGVbMF0sbz1uLnNoYXBlWzFdLDM9PT1uLnNoYXBlLmxlbmd0aCYmKHM9bi5zaGFwZVsyXSxkZShzPjAmJnM8PTQsImludmFsaWQgbnVtYmVyIG9mIGNoYW5uZWxzIiksbD0hMCksZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB3aWR0aCIpLGRlKG8+PTAmJm88PXIubWF4VGV4dHVyZVNpemUsImludmFsaWQgaGVpZ2h0IikpOigicmFkaXVzImluIG4mJihhPW89bi5yYWRpdXMsZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCByYWRpdXMiKSksIndpZHRoImluIG4mJihhPW4ud2lkdGgsZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB3aWR0aCIpKSwiaGVpZ2h0ImluIG4mJihvPW4uaGVpZ2h0LGRlKG8+PTAmJm88PXIubWF4VGV4dHVyZVNpemUsImludmFsaWQgaGVpZ2h0IikpLCJjaGFubmVscyJpbiBuJiYocz1uLmNoYW5uZWxzLGRlKHM+MCYmczw9NCwiaW52YWxpZCBudW1iZXIgb2YgY2hhbm5lbHMiKSxsPSEwKSksdC53aWR0aD0wfGEsdC5oZWlnaHQ9MHxvLHQuY2hhbm5lbHM9MHxzO3ZhciB1PSExO2lmKCJmb3JtYXQiaW4gbil7dmFyIGM9bi5mb3JtYXQ7ZGUoZS53ZWJnbF9kZXB0aF90ZXh0dXJlfHwhKCJkZXB0aCI9PT1jfHwiZGVwdGggc3RlbmNpbCI9PT1jKSwieW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4iKSxkZS5wYXJhbWV0ZXIoYyxCLCJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7dmFyIGg9dC5pbnRlcm5hbGZvcm1hdD1CW2NdO3QuZm9ybWF0PUpbaF0sYyBpbiBOJiYoInR5cGUiaW4gbnx8KHQudHlwZT1OW2NdKSksYyBpbiBVJiYodC5jb21wcmVzc2VkPSEwKSx1PSEwfSFsJiZ1P3QuY2hhbm5lbHM9Zm5bdC5mb3JtYXRdOmwmJiF1P3QuY2hhbm5lbHMhPT1oblt0LmZvcm1hdF0mJih0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PWhuW3QuY2hhbm5lbHNdKTp1JiZsJiZkZSh0LmNoYW5uZWxzPT09Zm5bdC5mb3JtYXRdLCJudW1iZXIgb2YgY2hhbm5lbHMgaW5jb25zaXN0ZW50IHdpdGggc3BlY2lmaWVkIGZvcm1hdCIpfX1mdW5jdGlvbiBjKGUpe3QucGl4ZWxTdG9yZWkoYW4sZS5mbGlwWSksdC5waXhlbFN0b3JlaShvbixlLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoc24sZS5jb2xvclNwYWNlKSx0LnBpeGVsU3RvcmVpKG5uLGUudW5wYWNrQWxpZ25tZW50KX1mdW5jdGlvbiBoKCl7cy5jYWxsKHRoaXMpLHRoaXMueE9mZnNldD0wLHRoaXMueU9mZnNldD0wLHRoaXMuZGF0YT1udWxsLHRoaXMubmVlZHNGcmVlPSExLHRoaXMuZWxlbWVudD1udWxsLHRoaXMubmVlZHNDb3B5PSExfWZ1bmN0aW9uIGYodCxlKXt2YXIgbj1udWxsO2lmKGt0KGUpP249ZTplJiYoZGUudHlwZShlLCJvYmplY3QiLCJpbnZhbGlkIHBpeGVsIGRhdGEgdHlwZSIpLHUodCxlKSwieCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSwieSJpbiBlJiYodC55T2Zmc2V0PTB8ZS55KSxrdChlLmRhdGEpJiYobj1lLmRhdGEpKSxkZSghdC5jb21wcmVzc2VkfHxuIGluc3RhbmNlb2YgVWludDhBcnJheSwiY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgbXVzdCBiZSBzdG9yZWQgaW4gYSB1aW50OGFycmF5IiksZS5jb3B5KXtkZSghbiwiY2FuIG5vdCBzcGVjaWZ5IGNvcHkgYW5kIGRhdGEgZmllbGQgZm9yIHRoZSBzYW1lIHRleHR1cmUiKTt2YXIgYT1pLnZpZXdwb3J0V2lkdGgsbz1pLnZpZXdwb3J0SGVpZ2h0O3Qud2lkdGg9dC53aWR0aHx8YS10LnhPZmZzZXQsdC5oZWlnaHQ9dC5oZWlnaHR8fG8tdC55T2Zmc2V0LHQubmVlZHNDb3B5PSEwLGRlKHQueE9mZnNldD49MCYmdC54T2Zmc2V0PGEmJnQueU9mZnNldD49MCYmdC55T2Zmc2V0PG8mJnQud2lkdGg+MCYmdC53aWR0aDw9YSYmdC5oZWlnaHQ+MCYmdC5oZWlnaHQ8PW8sImNvcHkgdGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiKX1lbHNlIGlmKG4pe2lmKFF0KG4pKXQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCx0LmRhdGE9biwidHlwZSJpbiBlfHx0LnR5cGUhPT1Pcnx8KHQudHlwZT1BdChuKSk7ZWxzZSBpZihndChuKSl0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsVHQodCxuKSx0LmFsaWdubWVudD0xLHQubmVlZHNGcmVlPSEwO2Vsc2UgaWYoWihuKSl7dmFyIHM9bi5kYXRhO0FycmF5LmlzQXJyYXkocyl8fHQudHlwZSE9PU9yfHwodC50eXBlPUF0KHMpKTt2YXIgbCxjLGgsZixkLHAsbT1uLnNoYXBlLHY9bi5zdHJpZGU7Mz09PW0ubGVuZ3RoPyhoPW1bMl0scD12WzJdKTooZGUoMj09PW0ubGVuZ3RoLCJpbnZhbGlkIG5kYXJyYXkgcGl4ZWwgZGF0YSwgbXVzdCBiZSAyIG9yIDNEIiksaD0xLHA9MSksbD1tWzBdLGM9bVsxXSxmPXZbMF0sZD12WzFdLHQuYWxpZ25tZW50PTEsdC53aWR0aD1sLHQuaGVpZ2h0PWMsdC5jaGFubmVscz1oLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9aG5baF0sdC5uZWVkc0ZyZWU9ITAsTHQodCxzLGYsZCxwLG4ub2Zmc2V0KX1lbHNlIGlmKHh0KG4pfHxfdChuKSl4dChuKT90LmVsZW1lbnQ9bjp0LmVsZW1lbnQ9bi5jYW52YXMsdC53aWR0aD10LmVsZW1lbnQud2lkdGgsdC5oZWlnaHQ9dC5lbGVtZW50LmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZih3dChuKSl0LmVsZW1lbnQ9bix0LndpZHRoPW4ubmF0dXJhbFdpZHRoLHQuaGVpZ2h0PW4ubmF0dXJhbEhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihNdChuKSl0LmVsZW1lbnQ9bix0LndpZHRoPW4udmlkZW9XaWR0aCx0LmhlaWdodD1uLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHl0KG4pKXt2YXIgZz10LndpZHRofHxuWzBdLmxlbmd0aCx5PXQuaGVpZ2h0fHxuLmxlbmd0aCxiPXQuY2hhbm5lbHM7Yj1tdChuWzBdWzBdKT9ifHxuWzBdWzBdLmxlbmd0aDpifHwxO2Zvcih2YXIgeD1DZS5zaGFwZShuKSxfPTEsdz0wO3c8eC5sZW5ndGg7Kyt3KV8qPXhbd107dmFyIE09U3QodCxfKTtDZS5mbGF0dGVuKG4seCwiIixNKSxFdCh0LE0pLHQuYWxpZ25tZW50PTEsdC53aWR0aD1nLHQuaGVpZ2h0PXksdC5jaGFubmVscz1iLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9aG5bYl0sdC5uZWVkc0ZyZWU9ITB9fWVsc2UgdC53aWR0aD10LndpZHRofHwxLHQuaGVpZ2h0PXQuaGVpZ2h0fHwxLHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NDt0LnR5cGU9PT1qcj9kZShyLmV4dGVuc2lvbnMuaW5kZXhPZigib2VzX3RleHR1cmVfZmxvYXQiKT49MCwib2VzX3RleHR1cmVfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkIik6dC50eXBlPT09d3ImJmRlKHIuZXh0ZW5zaW9ucy5pbmRleE9mKCJvZXNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik+PTAsIm9lc190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkIil9ZnVuY3Rpb24gZChlLHIsaSl7dmFyIGE9ZS5lbGVtZW50LG89ZS5kYXRhLHM9ZS5pbnRlcm5hbGZvcm1hdCxsPWUuZm9ybWF0LHU9ZS50eXBlLGg9ZS53aWR0aCxmPWUuaGVpZ2h0O2MoZSksYT90LnRleEltYWdlMkQocixpLGwsbCx1LGEpOmUuY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhJbWFnZTJEKHIsaSxzLGgsZiwwLG8pOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4SW1hZ2UyRChyLGksbCxlLnhPZmZzZXQsZS55T2Zmc2V0LGgsZiwwKSk6dC50ZXhJbWFnZTJEKHIsaSxsLGgsZiwwLGwsdSxvKX1mdW5jdGlvbiBwKGUscixpLGEsbyl7dmFyIHM9ZS5lbGVtZW50LGw9ZS5kYXRhLHU9ZS5pbnRlcm5hbGZvcm1hdCxoPWUuZm9ybWF0LGY9ZS50eXBlLGQ9ZS53aWR0aCxwPWUuaGVpZ2h0O2MoZSkscz90LnRleFN1YkltYWdlMkQocixvLGksYSxoLGYscyk6ZS5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleFN1YkltYWdlMkQocixvLGksYSx1LGQscCxsKTplLm5lZWRzQ29weT8obigpLHQuY29weVRleFN1YkltYWdlMkQocixvLGksYSxlLnhPZmZzZXQsZS55T2Zmc2V0LGQscCkpOnQudGV4U3ViSW1hZ2UyRChyLG8saSxhLGQscCxoLGYsbCl9ZnVuY3Rpb24gbSgpe3JldHVybiBLLnBvcCgpfHxuZXcgaH1mdW5jdGlvbiB2KHQpe3QubmVlZHNGcmVlJiZMZS5mcmVlVHlwZSh0LmRhdGEpLGguY2FsbCh0KSxLLnB1c2godCl9ZnVuY3Rpb24gZygpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PSRyLHRoaXMubWlwbWFzaz0wLHRoaXMuaW1hZ2VzPUFycmF5KDE2KX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LmltYWdlc1swXT1tKCk7dC5taXBtYXNrPTEsbi53aWR0aD10LndpZHRoPWUsbi5oZWlnaHQ9dC5oZWlnaHQ9cixuLmNoYW5uZWxzPXQuY2hhbm5lbHM9NH1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9bnVsbDtpZihrdChlKSlyPXQuaW1hZ2VzWzBdPW0oKSxsKHIsdCksZihyLGUpLHQubWlwbWFzaz0xO2Vsc2UgaWYodSh0LGUpLEFycmF5LmlzQXJyYXkoZS5taXBtYXApKWZvcih2YXIgbj1lLm1pcG1hcCxpPTA7aTxuLmxlbmd0aDsrK2kpcj10LmltYWdlc1tpXT1tKCksbChyLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxmKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2Ugcj10LmltYWdlc1swXT1tKCksbChyLHQpLGYocixlKSx0Lm1pcG1hc2s9MTtsKHQsdC5pbWFnZXNbMF0pLCh0LmNvbXByZXNzZWQmJnQuaW50ZXJuYWxmb3JtYXQ9PT1Ncnx8dC5pbnRlcm5hbGZvcm1hdD09PWtyfHx0LmludGVybmFsZm9ybWF0PT09QXJ8fHQuaW50ZXJuYWxmb3JtYXQ9PT1UcikmJmRlKHQud2lkdGglND09MCYmdC5oZWlnaHQlND09MCwiZm9yIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzLCBtaXBtYXAgbGV2ZWwgMCBtdXN0IGhhdmUgd2lkdGggYW5kIGhlaWdodCB0aGF0IGFyZSBhIG11bHRpcGxlIG9mIDQiKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPXQuaW1hZ2VzLG49MDtuPHIubGVuZ3RoOysrbil7aWYoIXJbbl0pcmV0dXJuO2QocltuXSxlLG4pfX1mdW5jdGlvbiBfKCl7dmFyIHQ9US5wb3AoKXx8bmV3IGc7cy5jYWxsKHQpLHQubWlwbWFzaz0wO2Zvcih2YXIgZT0wO2U8MTY7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gdyh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJnYoZVtyXSksZVtyXT1udWxsO1EucHVzaCh0KX1mdW5jdGlvbiBNKCl7dGhpcy5taW5GaWx0ZXI9WXIsdGhpcy5tYWdGaWx0ZXI9WXIsdGhpcy53cmFwUz1Wcix0aGlzLndyYXBUPVZyLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PSRyfWZ1bmN0aW9uIGsodCxlKXtpZigibWluImluIGUpe3ZhciBuPWUubWluO2RlLnBhcmFtZXRlcihuLEYpLHQubWluRmlsdGVyPUZbbl0sY24uaW5kZXhPZih0Lm1pbkZpbHRlcik+PTAmJih0Lmdlbk1pcG1hcHM9ITApfWlmKCJtYWciaW4gZSl7dmFyIGk9ZS5tYWc7ZGUucGFyYW1ldGVyKGksUiksdC5tYWdGaWx0ZXI9UltpXX12YXIgYT10LndyYXBTLG89dC53cmFwVDtpZigid3JhcCJpbiBlKXt2YXIgcz1lLndyYXA7InN0cmluZyI9PXR5cGVvZiBzPyhkZS5wYXJhbWV0ZXIocyxPKSxhPW89T1tzXSk6QXJyYXkuaXNBcnJheShzKSYmKGRlLnBhcmFtZXRlcihzWzBdLE8pLGRlLnBhcmFtZXRlcihzWzFdLE8pLGE9T1tzWzBdXSxvPU9bc1sxXV0pfWVsc2V7aWYoIndyYXBTImluIGUpe3ZhciBsPWUud3JhcFM7ZGUucGFyYW1ldGVyKGwsTyksYT1PW2xdfWlmKCJ3cmFwVCJpbiBlKXt2YXIgdT1lLndyYXBUO2RlLnBhcmFtZXRlcih1LE8pLG89T1t1XX19aWYodC53cmFwUz1hLHQud3JhcFQ9bywiYW5pc290cm9waWMiaW4gZSl7dmFyIGM9ZS5hbmlzb3Ryb3BpYztkZSgibnVtYmVyIj09dHlwZW9mIGMmJmM+PTEmJmM8PXIubWF4QW5pc290cm9waWMsImFuaXNvIHNhbXBsZXMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kICIpLHQuYW5pc290cm9waWM9ZS5hbmlzb3Ryb3BpY31pZigibWlwbWFwImluIGUpe3ZhciBoPSExO3N3aXRjaCh0eXBlb2YgZS5taXBtYXApe2Nhc2Uic3RyaW5nIjpkZS5wYXJhbWV0ZXIoZS5taXBtYXAsUCwiaW52YWxpZCBtaXBtYXAgaGludCIpLHQubWlwbWFwSGludD1QW2UubWlwbWFwXSx0Lmdlbk1pcG1hcHM9ITAsaD0hMDticmVhaztjYXNlImJvb2xlYW4iOmg9dC5nZW5NaXBtYXBzPWUubWlwbWFwO2JyZWFrO2Nhc2Uib2JqZWN0IjpkZShBcnJheS5pc0FycmF5KGUubWlwbWFwKSwiaW52YWxpZCBtaXBtYXAgdHlwZSIpLHQuZ2VuTWlwbWFwcz0hMSxoPSEwO2JyZWFrO2RlZmF1bHQ6ZGUucmFpc2UoImludmFsaWQgbWlwbWFwIHR5cGUiKX0haHx8Im1pbiJpbiBlfHwodC5taW5GaWx0ZXI9V3IpfX1mdW5jdGlvbiBBKHIsbil7dC50ZXhQYXJhbWV0ZXJpKG4sR3Isci5taW5GaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLHFyLHIubWFnRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobixOcixyLndyYXBTKSx0LnRleFBhcmFtZXRlcmkobixCcixyLndyYXBUKSxlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmdC50ZXhQYXJhbWV0ZXJpKG4scm4sci5hbmlzb3Ryb3BpYyksci5nZW5NaXBtYXBzJiYodC5oaW50KFFyLHIubWlwbWFwSGludCksdC5nZW5lcmF0ZU1pcG1hcChuKSl9ZnVuY3Rpb24gVChlKXtzLmNhbGwodGhpcyksdGhpcy5taXBtYXNrPTAsdGhpcy5pbnRlcm5hbGZvcm1hdD1vcix0aGlzLmlkPSQrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy50YXJnZXQ9ZSx0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdGhpcy51bml0PS0xLHRoaXMuYmluZENvdW50PTAsdGhpcy50ZXhJbmZvPW5ldyBNLG8ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIFMoZSl7dC5hY3RpdmVUZXh0dXJlKHVuKSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSl9ZnVuY3Rpb24gRSgpe3ZhciBlPXJ0WzBdO2U/dC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpOnQuYmluZFRleHR1cmUobnIsbnVsbCl9ZnVuY3Rpb24gTChlKXt2YXIgcj1lLnRleHR1cmU7ZGUociwibXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgdGV4dHVyZSIpO3ZhciBuPWUudW5pdCxpPWUudGFyZ2V0O24+PTAmJih0LmFjdGl2ZVRleHR1cmUodW4rbiksdC5iaW5kVGV4dHVyZShpLG51bGwpLHJ0W25dPW51bGwpLHQuZGVsZXRlVGV4dHVyZShyKSxlLnRleHR1cmU9bnVsbCxlLnBhcmFtcz1udWxsLGUucGl4ZWxzPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSB0dFtlLmlkXSxhLnRleHR1cmVDb3VudC0tfWZ1bmN0aW9uIEMoZSxuKXtmdW5jdGlvbiBpKHQsZSl7dmFyIG49Yy50ZXhJbmZvO00uY2FsbChuKTt2YXIgYT1fKCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0PyJudW1iZXIiPT10eXBlb2YgZT95KGEsMHx0LDB8ZSk6eShhLDB8dCwwfHQpOnQ/KGRlLnR5cGUodCwib2JqZWN0IiwiaW52YWxpZCBhcmd1bWVudHMgdG8gcmVnbC50ZXh0dXJlIiksayhuLHQpLGIoYSx0KSk6eShhLDEsMSksbi5nZW5NaXBtYXBzJiYoYS5taXBtYXNrPShhLndpZHRoPDwxKS0xKSxjLm1pcG1hc2s9YS5taXBtYXNrLGwoYyxhKSxkZS50ZXh0dXJlMkQobixhLHIpLGMuaW50ZXJuYWxmb3JtYXQ9YS5pbnRlcm5hbGZvcm1hdCxpLndpZHRoPWEud2lkdGgsaS5oZWlnaHQ9YS5oZWlnaHQsUyhjKSx4KGEsbnIpLEEobixuciksRSgpLHcoYSksby5wcm9maWxlJiYoYy5zdGF0cy5zaXplPUN0KGMuaW50ZXJuYWxmb3JtYXQsYy50eXBlLGEud2lkdGgsYS5oZWlnaHQsbi5nZW5NaXBtYXBzLCExKSksaS5mb3JtYXQ9cVtjLmludGVybmFsZm9ybWF0XSxpLnR5cGU9R1tjLnR5cGVdLGkubWFnPVlbbi5tYWdGaWx0ZXJdLGkubWluPVhbbi5taW5GaWx0ZXJdLGkud3JhcFM9V1tuLndyYXBTXSxpLndyYXBUPVdbbi53cmFwVF0saX1mdW5jdGlvbiBzKHQsZSxyLG4pe2RlKCEhdCwibXVzdCBzcGVjaWZ5IGltYWdlIGRhdGEiKTt2YXIgYT0wfGUsbz0wfHIscz0wfG4sdT1tKCk7cmV0dXJuIGwodSxjKSx1LndpZHRoPTAsdS5oZWlnaHQ9MCxmKHUsdCksdS53aWR0aD11LndpZHRofHwoYy53aWR0aD4+cyktYSx1LmhlaWdodD11LmhlaWdodHx8KGMuaGVpZ2h0Pj5zKS1vLGRlKGMudHlwZT09PXUudHlwZSYmYy5mb3JtYXQ9PT11LmZvcm1hdCYmYy5pbnRlcm5hbGZvcm1hdD09PXUuaW50ZXJuYWxmb3JtYXQsImluY29tcGF0aWJsZSBmb3JtYXQgZm9yIHRleHR1cmUuc3ViaW1hZ2UiKSxkZShhPj0wJiZvPj0wJiZhK3Uud2lkdGg8PWMud2lkdGgmJm8rdS5oZWlnaHQ8PWMuaGVpZ2h0LCJ0ZXh0dXJlLnN1YmltYWdlIHdyaXRlIG91dCBvZiBib3VuZHMiKSxkZShjLm1pcG1hc2smMTw8cywibWlzc2luZyBtaXBtYXAgZGF0YSIpLGRlKHUuZGF0YXx8dS5lbGVtZW50fHx1Lm5lZWRzQ29weSwibWlzc2luZyBpbWFnZSBkYXRhIiksUyhjKSxwKHUsbnIsYSxvLHMpLEUoKSx2KHUpLGl9ZnVuY3Rpb24gdShlLHIpe3ZhciBuPTB8ZSxhPTB8cnx8bjtpZihuPT09Yy53aWR0aCYmYT09PWMuaGVpZ2h0KXJldHVybiBpO2kud2lkdGg9Yy53aWR0aD1uLGkuaGVpZ2h0PWMuaGVpZ2h0PWEsUyhjKTtmb3IodmFyIHM9MDtjLm1pcG1hc2s+PnM7KytzKXQudGV4SW1hZ2UyRChucixzLGMuZm9ybWF0LG4+PnMsYT4+cywwLGMuZm9ybWF0LGMudHlwZSxudWxsKTtyZXR1cm4gRSgpLG8ucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT1DdChjLmludGVybmFsZm9ybWF0LGMudHlwZSxuLGEsITEsITEpKSxpfXZhciBjPW5ldyBUKG5yKTtyZXR1cm4gdHRbYy5pZF09YyxhLnRleHR1cmVDb3VudCsrLGkoZSxuKSxpLnN1YmltYWdlPXMsaS5yZXNpemU9dSxpLl9yZWdsVHlwZT0idGV4dHVyZTJkIixpLl90ZXh0dXJlPWMsby5wcm9maWxlJiYoaS5zdGF0cz1jLnN0YXRzKSxpLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjLmRlY1JlZigpfSxpfWZ1bmN0aW9uIHooZSxuLGkscyxjLGgpe2Z1bmN0aW9uIGQodCxlLG4saSxhLHMpe3ZhciBjLGg9Qy50ZXhJbmZvO2ZvcihNLmNhbGwoaCksYz0wO2M8NjsrK2MpeltjXT1fKCk7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ0KWlmKCJvYmplY3QiPT10eXBlb2YgdClpZihlKWIoelswXSx0KSxiKHpbMV0sZSksYih6WzJdLG4pLGIoelszXSxpKSxiKHpbNF0sYSksYih6WzVdLHMpO2Vsc2UgaWYoayhoLHQpLHUoQyx0KSwiZmFjZXMiaW4gdCl7dmFyIGY9dC5mYWNlcztmb3IoZGUoQXJyYXkuaXNBcnJheShmKSYmNj09PWYubGVuZ3RoLCJjdWJlIGZhY2VzIG11c3QgYmUgYSBsZW5ndGggNiBhcnJheSIpLGM9MDtjPDY7KytjKWRlKCJvYmplY3QiPT10eXBlb2YgZltjXSYmISFmW2NdLCJpbnZhbGlkIGlucHV0IGZvciBjdWJlIG1hcCBmYWNlIiksbCh6W2NdLEMpLGIoeltjXSxmW2NdKX1lbHNlIGZvcihjPTA7Yzw2OysrYyliKHpbY10sdCk7ZWxzZSBkZS5yYWlzZSgiaW52YWxpZCBhcmd1bWVudHMgdG8gY3ViZSBtYXAiKTtlbHNle3ZhciBwPTB8dHx8MTtmb3IoYz0wO2M8NjsrK2MpeSh6W2NdLHAscCl9Zm9yKGwoQyx6WzBdKSxoLmdlbk1pcG1hcHM/Qy5taXBtYXNrPSh6WzBdLndpZHRoPDwxKS0xOkMubWlwbWFzaz16WzBdLm1pcG1hc2ssZGUudGV4dHVyZUN1YmUoQyxoLHosciksQy5pbnRlcm5hbGZvcm1hdD16WzBdLmludGVybmFsZm9ybWF0LGQud2lkdGg9elswXS53aWR0aCxkLmhlaWdodD16WzBdLmhlaWdodCxTKEMpLGM9MDtjPDY7KytjKXgoeltjXSxhcitjKTtmb3IoQShoLGlyKSxFKCksby5wcm9maWxlJiYoQy5zdGF0cy5zaXplPUN0KEMuaW50ZXJuYWxmb3JtYXQsQy50eXBlLGQud2lkdGgsZC5oZWlnaHQsaC5nZW5NaXBtYXBzLCEwKSksZC5mb3JtYXQ9cVtDLmludGVybmFsZm9ybWF0XSxkLnR5cGU9R1tDLnR5cGVdLGQubWFnPVlbaC5tYWdGaWx0ZXJdLGQubWluPVhbaC5taW5GaWx0ZXJdLGQud3JhcFM9V1toLndyYXBTXSxkLndyYXBUPVdbaC53cmFwVF0sYz0wO2M8NjsrK2Mpdyh6W2NdKTtyZXR1cm4gZH1mdW5jdGlvbiBnKHQsZSxyLG4saSl7ZGUoISFlLCJtdXN0IHNwZWNpZnkgaW1hZ2UgZGF0YSIpLGRlKCJudW1iZXIiPT10eXBlb2YgdCYmdD09PSgwfHQpJiZ0Pj0wJiZ0PDYsImludmFsaWQgZmFjZSIpO3ZhciBhPTB8cixvPTB8bixzPTB8aSx1PW0oKTtyZXR1cm4gbCh1LEMpLHUud2lkdGg9MCx1LmhlaWdodD0wLGYodSxlKSx1LndpZHRoPXUud2lkdGh8fChDLndpZHRoPj5zKS1hLHUuaGVpZ2h0PXUuaGVpZ2h0fHwoQy5oZWlnaHQ+PnMpLW8sZGUoQy50eXBlPT09dS50eXBlJiZDLmZvcm1hdD09PXUuZm9ybWF0JiZDLmludGVybmFsZm9ybWF0PT09dS5pbnRlcm5hbGZvcm1hdCwiaW5jb21wYXRpYmxlIGZvcm1hdCBmb3IgdGV4dHVyZS5zdWJpbWFnZSIpLGRlKGE+PTAmJm8+PTAmJmErdS53aWR0aDw9Qy53aWR0aCYmbyt1LmhlaWdodDw9Qy5oZWlnaHQsInRleHR1cmUuc3ViaW1hZ2Ugd3JpdGUgb3V0IG9mIGJvdW5kcyIpLGRlKEMubWlwbWFzayYxPDxzLCJtaXNzaW5nIG1pcG1hcCBkYXRhIiksZGUodS5kYXRhfHx1LmVsZW1lbnR8fHUubmVlZHNDb3B5LCJtaXNzaW5nIGltYWdlIGRhdGEiKSxTKEMpLHAodSxhcit0LGEsbyxzKSxFKCksdih1KSxkfWZ1bmN0aW9uIEwoZSl7dmFyIHI9MHxlO2lmKHIhPT1DLndpZHRoKXtkLndpZHRoPUMud2lkdGg9cixkLmhlaWdodD1DLmhlaWdodD1yLFMoQyk7Zm9yKHZhciBuPTA7bjw2Oysrbilmb3IodmFyIGk9MDtDLm1pcG1hc2s+Pmk7KytpKXQudGV4SW1hZ2UyRChhcituLGksQy5mb3JtYXQscj4+aSxyPj5pLDAsQy5mb3JtYXQsQy50eXBlLG51bGwpO3JldHVybiBFKCksby5wcm9maWxlJiYoQy5zdGF0cy5zaXplPUN0KEMuaW50ZXJuYWxmb3JtYXQsQy50eXBlLGQud2lkdGgsZC5oZWlnaHQsITEsITApKSxkfX12YXIgQz1uZXcgVChpcik7dHRbQy5pZF09QyxhLmN1YmVDb3VudCsrO3ZhciB6PW5ldyBBcnJheSg2KTtyZXR1cm4gZChlLG4saSxzLGMsaCksZC5zdWJpbWFnZT1nLGQucmVzaXplPUwsZC5fcmVnbFR5cGU9InRleHR1cmVDdWJlIixkLl90ZXh0dXJlPUMsby5wcm9maWxlJiYoZC5zdGF0cz1DLnN0YXRzKSxkLmRlc3Ryb3k9ZnVuY3Rpb24oKXtDLmRlY1JlZigpfSxkfWZ1bmN0aW9uIEkoKXtmb3IodmFyIGU9MDtlPGV0OysrZSl0LmFjdGl2ZVRleHR1cmUodW4rZSksdC5iaW5kVGV4dHVyZShucixudWxsKSxydFtlXT1udWxsO3hlKHR0KS5mb3JFYWNoKEwpLGEuY3ViZUNvdW50PTAsYS50ZXh0dXJlQ291bnQ9MH1mdW5jdGlvbiBEKCl7eGUodHQpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTtmb3IodmFyIHI9MDtyPDMyOysrcilpZigwIT0oZS5taXBtYXNrJjE8PHIpKWlmKGUudGFyZ2V0PT09bnIpdC50ZXhJbWFnZTJEKG5yLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDtuPDY7KytuKXQudGV4SW1hZ2UyRChhcituLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7QShlLnRleEluZm8sZS50YXJnZXQpfSl9dmFyIFA9eyJkb24ndCBjYXJlIjokciwiZG9udCBjYXJlIjokcixuaWNlOmVuLGZhc3Q6dG59LE89e3JlcGVhdDpVcixjbGFtcDpWcixtaXJyb3I6SHJ9LFI9e25lYXJlc3Q6WXIsbGluZWFyOlhyfSxGPSR0KHttaXBtYXA6S3IsIm5lYXJlc3QgbWlwbWFwIG5lYXJlc3QiOldyLCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiOlpyLCJuZWFyZXN0IG1pcG1hcCBsaW5lYXIiOkpyLCJsaW5lYXIgbWlwbWFwIGxpbmVhciI6S3J9LFIpLGo9e25vbmU6MCxicm93c2VyOmxufSxOPXt1aW50ODpPcixyZ2JhNDpwcixyZ2I1NjU6dnIsInJnYjUgYTEiOm1yfSxCPXthbHBoYTpzcixsdW1pbmFuY2U6dXIsImx1bWluYW5jZSBhbHBoYSI6Y3IscmdiOmxyLHJnYmE6b3IscmdiYTQ6aHIsInJnYjUgYTEiOmZyLHJnYjU2NTpkcn0sVT17fTtlLmV4dF9zcmdiJiYoQi5zcmdiPXhyLEIuc3JnYmE9X3IpLGUub2VzX3RleHR1cmVfZmxvYXQmJihOLmZsb2F0MzI9Ti5mbG9hdD1qciksZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiYoTi5mbG9hdDE2PU5bImhhbGYgZmxvYXQiXT13ciksZS53ZWJnbF9kZXB0aF90ZXh0dXJlJiYoJHQoQix7ZGVwdGg6eXIsImRlcHRoIHN0ZW5jaWwiOmJyfSksJHQoTix7dWludDE2OlJyLHVpbnQzMjpGciwiZGVwdGggc3RlbmNpbCI6Z3J9KSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyYmJHQoVSx7InJnYiBzM3RjIGR4dDEiOk1yLCJyZ2JhIHMzdGMgZHh0MSI6a3IsInJnYmEgczN0YyBkeHQzIjpBciwicmdiYSBzM3RjIGR4dDUiOlRyfSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjJiYkdChVLHsicmdiIGF0YyI6U3IsInJnYmEgYXRjIGV4cGxpY2l0IGFscGhhIjpFciwicmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhIjpMcn0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJiYkdChVLHsicmdiIHB2cnRjIDRicHB2MSI6Q3IsInJnYiBwdnJ0YyAyYnBwdjEiOnpyLCJyZ2JhIHB2cnRjIDRicHB2MSI6SXIsInJnYmEgcHZydGMgMmJwcHYxIjpEcn0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEmJihVWyJyZ2IgZXRjMSJdPVByKTt2YXIgVj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmdldFBhcmFtZXRlcihycikpO09iamVjdC5rZXlzKFUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9VVt0XTtWLmluZGV4T2YoZSk+PTAmJihCW3RdPWUpfSk7dmFyIEg9T2JqZWN0LmtleXMoQik7ci50ZXh0dXJlRm9ybWF0cz1IO3ZhciBxPVtdO09iamVjdC5rZXlzKEIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Qlt0XTtxW2VdPXR9KTt2YXIgRz1bXTtPYmplY3Qua2V5cyhOKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU5bdF07R1tlXT10fSk7dmFyIFk9W107T2JqZWN0LmtleXMoUikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1SW3RdO1lbZV09dH0pO3ZhciBYPVtdO09iamVjdC5rZXlzKEYpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Rlt0XTtYW2VdPXR9KTt2YXIgVz1bXTtPYmplY3Qua2V5cyhPKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU9bdF07V1tlXT10fSk7dmFyIEo9SC5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj1CW2VdO3JldHVybiByPT09dXJ8fHI9PT1zcnx8cj09PXVyfHxyPT09Y3J8fHI9PT15cnx8cj09PWJyP3Rbcl09cjpyPT09ZnJ8fGUuaW5kZXhPZigicmdiYSIpPj0wP3Rbcl09b3I6dFtyXT1scix0fSx7fSksSz1bXSxRPVtdLCQ9MCx0dD17fSxldD1yLm1heFRleHR1cmVVbml0cyxydD1BcnJheShldCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KTtyZXR1cm4gJHQoVC5wcm90b3R5cGUse2JpbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuYmluZENvdW50Kz0xO3ZhciByPWUudW5pdDtpZihyPDApe2Zvcih2YXIgbj0wO248ZXQ7KytuKXt2YXIgaT1ydFtuXTtpZihpKXtpZihpLmJpbmRDb3VudD4wKWNvbnRpbnVlO2kudW5pdD0tMX1ydFtuXT1lLHI9bjticmVha31yPj1ldCYmZGUucmFpc2UoImluc3VmZmljaWVudCBudW1iZXIgb2YgdGV4dHVyZSB1bml0cyIpLG8ucHJvZmlsZSYmYS5tYXhUZXh0dXJlVW5pdHM8cisxJiYoYS5tYXhUZXh0dXJlVW5pdHM9cisxKSxlLnVuaXQ9cix0LmFjdGl2ZVRleHR1cmUodW4rciksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpfXJldHVybiByfSx1bmJpbmQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRDb3VudC09MX0sZGVjUmVmOmZ1bmN0aW9uKCl7LS10aGlzLnJlZkNvdW50PD0wJiZMKHRoaXMpfX0pLG8ucHJvZmlsZSYmKGEuZ2V0VG90YWxUZXh0dXJlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHR0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPXR0W2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTJEOkMsY3JlYXRlQ3ViZTp6LGNsZWFyOkksZ2V0VGV4dHVyZTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scmVzdG9yZTpEfX1mdW5jdGlvbiBJdCh0LGUscil7cmV0dXJuIHduW3RdKmUqcn1mdW5jdGlvbiBEdCh0LGUscixuLGksYSl7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy50YXJnZXQ9dCx0aGlzLnRleHR1cmU9ZSx0aGlzLnJlbmRlcmJ1ZmZlcj1yO3ZhciBuPTAsaT0wO2U/KG49ZS53aWR0aCxpPWUuaGVpZ2h0KTpyJiYobj1yLndpZHRoLGk9ci5oZWlnaHQpLHRoaXMud2lkdGg9bix0aGlzLmhlaWdodD1pfWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXtpZih0KWlmKHQudGV4dHVyZSl7dmFyIG49dC50ZXh0dXJlLl90ZXh0dXJlLGk9TWF0aC5tYXgoMSxuLndpZHRoKSxhPU1hdGgubWF4KDEsbi5oZWlnaHQpO2RlKGk9PT1lJiZhPT09ciwiaW5jb25zaXN0ZW50IHdpZHRoL2hlaWdodCBmb3Igc3VwcGxpZWQgdGV4dHVyZSIpLG4ucmVmQ291bnQrPTF9ZWxzZXt2YXIgbz10LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyO2RlKG8ud2lkdGg9PT1lJiZvLmhlaWdodD09PXIsImluY29uc2lzdGVudCB3aWR0aC9oZWlnaHQgZm9yIHJlbmRlcmJ1ZmZlciIpLG8ucmVmQ291bnQrPTF9fWZ1bmN0aW9uIHUoZSxyKXtyJiYoci50ZXh0dXJlP3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoa24sZSxyLnRhcmdldCxyLnRleHR1cmUuX3RleHR1cmUudGV4dHVyZSwwKTp0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGtuLGUsQW4sci5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpKX1mdW5jdGlvbiBjKHQpe3ZhciBlPVRuLHI9bnVsbCxuPW51bGwsaT10OyJvYmplY3QiPT10eXBlb2YgdCYmKGk9dC5kYXRhLCJ0YXJnZXQiaW4gdCYmKGU9MHx0LnRhcmdldCkpLGRlLnR5cGUoaSwiZnVuY3Rpb24iLCJpbnZhbGlkIGF0dGFjaG1lbnQgZGF0YSIpO3ZhciBhPWkuX3JlZ2xUeXBlO3JldHVybiJ0ZXh0dXJlMmQiPT09YT8ocj1pLGRlKGU9PT1UbikpOiJ0ZXh0dXJlQ3ViZSI9PT1hPyhyPWksZGUoZT49U24mJmU8U24rNiwiaW52YWxpZCBjdWJlIG1hcCB0YXJnZXQiKSk6InJlbmRlcmJ1ZmZlciI9PT1hPyhuPWksZT1Bbik6ZGUucmFpc2UoImludmFsaWQgcmVnbCBvYmplY3QgZm9yIGF0dGFjaG1lbnQiKSxuZXcgbyhlLHIsbil9ZnVuY3Rpb24gaCh0LGUscixhLHMpe2lmKHIpe3ZhciBsPW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSk7cmV0dXJuIGwuX3RleHR1cmUucmVmQ291bnQ9MCxuZXcgbyhUbixsLG51bGwpfXZhciB1PWkuY3JlYXRlKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphfSk7cmV0dXJuIHUuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKEFuLG51bGwsdSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdCYmKHQudGV4dHVyZXx8dC5yZW5kZXJidWZmZXIpfWZ1bmN0aW9uIGQodCxlLHIpe3QmJih0LnRleHR1cmU/dC50ZXh0dXJlLnJlc2l6ZShlLHIpOnQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5yZXNpemUoZSxyKSl9ZnVuY3Rpb24gcCgpe3RoaXMuaWQ9QSsrLFRbdGhpcy5pZF09dGhpcyx0aGlzLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLmNvbG9yQXR0YWNobWVudHM9W10sdGhpcy5kZXB0aEF0dGFjaG1lbnQ9bnVsbCx0aGlzLnN0ZW5jaWxBdHRhY2htZW50PW51bGwsdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PW51bGx9ZnVuY3Rpb24gbSh0KXt0LmNvbG9yQXR0YWNobWVudHMuZm9yRWFjaChzKSxzKHQuZGVwdGhBdHRhY2htZW50KSxzKHQuc3RlbmNpbEF0dGFjaG1lbnQpLHModC5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KX1mdW5jdGlvbiB2KGUpe3ZhciByPWUuZnJhbWVidWZmZXI7ZGUociwibXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgZnJhbWVidWZmZXIiKSx0LmRlbGV0ZUZyYW1lYnVmZmVyKHIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUgVFtlLmlkXX1mdW5jdGlvbiBnKGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKGtuLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKXUoRW4rbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRChrbixFbituLFRuLG51bGwsMCk7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRChrbix6bixUbixudWxsLDApLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoa24sTG4sVG4sbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKGtuLENuLFRuLG51bGwsMCksdShMbixlLmRlcHRoQXR0YWNobWVudCksdShDbixlLnN0ZW5jaWxBdHRhY2htZW50KSx1KHpuLGUuZGVwdGhTdGVuY2lsQXR0YWNobWVudCk7dmFyIGE9dC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGtuKTthIT09SW4mJmRlLnJhaXNlKCJmcmFtZWJ1ZmZlciBjb25maWd1cmF0aW9uIG5vdCBzdXBwb3J0ZWQsIHN0YXR1cyA9ICIrVW5bYV0pLHQuYmluZEZyYW1lYnVmZmVyKGtuLF8ubmV4dCksXy5jdXI9Xy5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsbil7ZnVuY3Rpb24gaSh0LG4pe3ZhciBhO2RlKF8ubmV4dCE9PXMsImNhbiBub3QgdXBkYXRlIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UiKTt2YXIgbz1lLndlYmdsX2RyYXdfYnVmZmVycyx1PTAsZD0wLHA9ITAsdj0hMCx5PW51bGwsYj0hMCx4PSJyZ2JhIixBPSJ1aW50OCIsVD0xLFM9bnVsbCxFPW51bGwsTD1udWxsLEM9ITE7aWYoIm51bWJlciI9PXR5cGVvZiB0KXU9MHx0LGQ9MHxufHx1O2Vsc2UgaWYodCl7ZGUudHlwZSh0LCJvYmplY3QiLCJpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnJhbWVidWZmZXIiKTt2YXIgej10O2lmKCJzaGFwZSJpbiB6KXt2YXIgST16LnNoYXBlO2RlKEFycmF5LmlzQXJyYXkoSSkmJkkubGVuZ3RoPj0yLCJpbnZhbGlkIHNoYXBlIGZvciBmcmFtZWJ1ZmZlciIpLHU9SVswXSxkPUlbMV19ZWxzZSJyYWRpdXMiaW4geiYmKHU9ZD16LnJhZGl1cyksIndpZHRoImluIHomJih1PXoud2lkdGgpLCJoZWlnaHQiaW4geiYmKGQ9ei5oZWlnaHQpOygiY29sb3IiaW4genx8ImNvbG9ycyJpbiB6KSYmKHk9ei5jb2xvcnx8ei5jb2xvcnMsQXJyYXkuaXNBcnJheSh5KSYmZGUoMT09PXkubGVuZ3RofHxvLCJtdWx0aXBsZSByZW5kZXIgdGFyZ2V0cyBub3Qgc3VwcG9ydGVkIikpLHl8fCgiY29sb3JDb3VudCJpbiB6JiYoVD0wfHouY29sb3JDb3VudCxkZShUPjAsImludmFsaWQgY29sb3IgYnVmZmVyIGNvdW50IikpLCJjb2xvclRleHR1cmUiaW4geiYmKGI9ISF6LmNvbG9yVGV4dHVyZSx4PSJyZ2JhNCIpLCJjb2xvclR5cGUiaW4geiYmKEE9ei5jb2xvclR5cGUsYj8oZGUoZS5vZXNfdGV4dHVyZV9mbG9hdHx8ISgiZmxvYXQiPT09QXx8ImZsb2F0MzIiPT09QSksInlvdSBtdXN0IGVuYWJsZSBPRVNfdGV4dHVyZV9mbG9hdCBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgZnJhbWVidWZmZXIgb2JqZWN0cyIpLGRlKGUub2VzX3RleHR1cmVfaGFsZl9mbG9hdHx8ISgiaGFsZiBmbG9hdCI9PT1BfHwiZmxvYXQxNiI9PT1BKSwieW91IG11c3QgZW5hYmxlIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaW4gb3JkZXIgdG8gdXNlIDE2LWJpdCBmbG9hdGluZyBwb2ludCBmcmFtZWJ1ZmZlciBvYmplY3RzIikpOiJoYWxmIGZsb2F0Ij09PUF8fCJmbG9hdDE2Ij09PUE/KGRlKGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0LCJ5b3UgbXVzdCBlbmFibGUgRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IHRvIHVzZSAxNi1iaXQgcmVuZGVyIGJ1ZmZlcnMiKSx4PSJyZ2JhMTZmIik6ImZsb2F0IiE9PUEmJiJmbG9hdDMyIiE9PUF8fChkZShlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCwieW91IG11c3QgZW5hYmxlIFdFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCBpbiBvcmRlciB0byB1c2UgMzItYml0IGZsb2F0aW5nIHBvaW50IHJlbmRlcmJ1ZmZlcnMiKSx4PSJyZ2JhMzJmIiksZGUub25lT2YoQSxrLCJpbnZhbGlkIGNvbG9yIHR5cGUiKSksImNvbG9yRm9ybWF0ImluIHomJih4PXouY29sb3JGb3JtYXQsdy5pbmRleE9mKHgpPj0wP2I9ITA6TS5pbmRleE9mKHgpPj0wP2I9ITE6Yj9kZS5vbmVPZih6LmNvbG9yRm9ybWF0LHcsImludmFsaWQgY29sb3IgZm9ybWF0IGZvciB0ZXh0dXJlIik6ZGUub25lT2Yoei5jb2xvckZvcm1hdCxNLCJpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgcmVuZGVyYnVmZmVyIikpKSwoImRlcHRoVGV4dHVyZSJpbiB6fHwiZGVwdGhTdGVuY2lsVGV4dHVyZSJpbiB6KSYmKEM9ISghei5kZXB0aFRleHR1cmUmJiF6LmRlcHRoU3RlbmNpbFRleHR1cmUpLGRlKCFDfHxlLndlYmdsX2RlcHRoX3RleHR1cmUsIndlYmdsX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQiKSksImRlcHRoImluIHomJigiYm9vbGVhbiI9PXR5cGVvZiB6LmRlcHRoP3A9ei5kZXB0aDooUz16LmRlcHRoLHY9ITEpKSwic3RlbmNpbCJpbiB6JiYoImJvb2xlYW4iPT10eXBlb2Ygei5zdGVuY2lsP3Y9ei5zdGVuY2lsOihFPXouc3RlbmNpbCxwPSExKSksImRlcHRoU3RlbmNpbCJpbiB6JiYoImJvb2xlYW4iPT10eXBlb2Ygei5kZXB0aFN0ZW5jaWw/cD12PXouZGVwdGhTdGVuY2lsOihMPXouZGVwdGhTdGVuY2lsLHA9ITEsdj0hMSkpfWVsc2UgdT1kPTE7dmFyIEQ9bnVsbCxQPW51bGwsTz1udWxsLFI9bnVsbDtpZihBcnJheS5pc0FycmF5KHkpKUQ9eS5tYXAoYyk7ZWxzZSBpZih5KUQ9W2MoeSldO2Vsc2UgZm9yKEQ9bmV3IEFycmF5KFQpLGE9MDthPFQ7KythKURbYV09aCh1LGQsYix4LEEpO2RlKGUud2ViZ2xfZHJhd19idWZmZXJzfHxELmxlbmd0aDw9MSwieW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGluIG9yZGVyIHRvIHVzZSBtdWx0aXBsZSBjb2xvciBidWZmZXJzLiIpLGRlKEQubGVuZ3RoPD1yLm1heENvbG9yQXR0YWNobWVudHMsInRvbyBtYW55IGNvbG9yIGF0dGFjaG1lbnRzLCBub3Qgc3VwcG9ydGVkIiksdT11fHxEWzBdLndpZHRoLGQ9ZHx8RFswXS5oZWlnaHQsUz9QPWMoUyk6cCYmIXYmJihQPWgodSxkLEMsImRlcHRoIiwidWludDMyIikpLEU/Tz1jKEUpOnYmJiFwJiYoTz1oKHUsZCwhMSwic3RlbmNpbCIsInVpbnQ4IikpLEw/Uj1jKEwpOiFTJiYhRSYmdiYmcCYmKFI9aCh1LGQsQywiZGVwdGggc3RlbmNpbCIsImRlcHRoIHN0ZW5jaWwiKSksZGUoISFTKyEhRSshIUw8PTEsImludmFsaWQgZnJhbWVidWZmZXIgY29uZmlndXJhdGlvbiwgY2FuIHNwZWNpZnkgZXhhY3RseSBvbmUgZGVwdGgvc3RlbmNpbCBhdHRhY2htZW50Iik7dmFyIEY9bnVsbDtmb3IoYT0wO2E8RC5sZW5ndGg7KythKWlmKGwoRFthXSx1LGQpLGRlKCFEW2FdfHxEW2FdLnRleHR1cmUmJlBuLmluZGV4T2YoRFthXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdCk+PTB8fERbYV0ucmVuZGVyYnVmZmVyJiZCbi5pbmRleE9mKERbYV0ucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0KT49MCwiZnJhbWVidWZmZXIgY29sb3IgYXR0YWNobWVudCAiK2ErIiBpcyBpbnZhbGlkIiksRFthXSYmRFthXS50ZXh0dXJlKXt2YXIgaj1PbltEW2FdLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0XSpSbltEW2FdLnRleHR1cmUuX3RleHR1cmUudHlwZV07bnVsbD09PUY/Rj1qOmRlKEY9PT1qLCJhbGwgY29sb3IgYXR0YWNobWVudHMgbXVjaCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbC4iKX1yZXR1cm4gbChQLHUsZCksZGUoIVB8fFAudGV4dHVyZSYmUC50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdD09PURufHxQLnJlbmRlcmJ1ZmZlciYmUC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQ9PT1GbiwiaW52YWxpZCBkZXB0aCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QiKSxsKE8sdSxkKSxkZSghT3x8Ty5yZW5kZXJidWZmZXImJk8ucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0PT09am4sImludmFsaWQgc3RlbmNpbCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QiKSxsKFIsdSxkKSxkZSghUnx8Ui50ZXh0dXJlJiZSLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0PT09Tm58fFIucmVuZGVyYnVmZmVyJiZSLnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdD09PU5uLCJpbnZhbGlkIGRlcHRoLXN0ZW5jaWwgYXR0YWNobWVudCBmb3IgZnJhbWVidWZmZXIgb2JqZWN0IiksbShzKSxzLndpZHRoPXUscy5oZWlnaHQ9ZCxzLmNvbG9yQXR0YWNobWVudHM9RCxzLmRlcHRoQXR0YWNobWVudD1QLHMuc3RlbmNpbEF0dGFjaG1lbnQ9TyxzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9UixpLmNvbG9yPUQubWFwKGYpLGkuZGVwdGg9ZihQKSxpLnN0ZW5jaWw9ZihPKSxpLmRlcHRoU3RlbmNpbD1mKFIpLGkud2lkdGg9cy53aWR0aCxpLmhlaWdodD1zLmhlaWdodCxnKHMpLGl9ZnVuY3Rpb24gbyh0LGUpe2RlKF8ubmV4dCE9PXMsImNhbiBub3QgcmVzaXplIGEgZnJhbWVidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIHVzZSIpO3ZhciByPTB8dCxuPTB8ZXx8cjtpZihyPT09cy53aWR0aCYmbj09PXMuaGVpZ2h0KXJldHVybiBpO2Zvcih2YXIgYT1zLmNvbG9yQXR0YWNobWVudHMsbz0wO288YS5sZW5ndGg7KytvKWQoYVtvXSxyLG4pO3JldHVybiBkKHMuZGVwdGhBdHRhY2htZW50LHIsbiksZChzLnN0ZW5jaWxBdHRhY2htZW50LHIsbiksZChzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQscixuKSxzLndpZHRoPWkud2lkdGg9cixzLmhlaWdodD1pLmhlaWdodD1uLGcocyksaX12YXIgcz1uZXcgcDtyZXR1cm4gYS5mcmFtZWJ1ZmZlckNvdW50KyssaSh0LG4pLCR0KGkse3Jlc2l6ZTpvLF9yZWdsVHlwZToiZnJhbWVidWZmZXIiLF9mcmFtZWJ1ZmZlcjpzLGRlc3Ryb3k6ZnVuY3Rpb24oKXt2KHMpLG0ocyl9LHVzZTpmdW5jdGlvbih0KXtfLnNldEZCTyh7ZnJhbWVidWZmZXI6aX0sdCl9fSl9ZnVuY3Rpb24gYih0KXtmdW5jdGlvbiBpKHQpe3ZhciByO2RlKG8uaW5kZXhPZihfLm5leHQpPDAsImNhbiBub3QgdXBkYXRlIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UiKTt2YXIgYT1lLndlYmdsX2RyYXdfYnVmZmVycyxzPXtjb2xvcjpudWxsfSxsPTAsdT1udWxsLGM9InJnYmEiLGg9InVpbnQ4IixmPTE7aWYoIm51bWJlciI9PXR5cGVvZiB0KWw9MHx0O2Vsc2UgaWYodCl7ZGUudHlwZSh0LCJvYmplY3QiLCJpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnJhbWVidWZmZXIiKTt2YXIgZD10O2lmKCJzaGFwZSJpbiBkKXt2YXIgcD1kLnNoYXBlO2RlKEFycmF5LmlzQXJyYXkocCkmJnAubGVuZ3RoPj0yLCJpbnZhbGlkIHNoYXBlIGZvciBmcmFtZWJ1ZmZlciIpLGRlKHBbMF09PT1wWzFdLCJjdWJlIGZyYW1lYnVmZmVyIG11c3QgYmUgc3F1YXJlIiksbD1wWzBdfWVsc2UicmFkaXVzImluIGQmJihsPTB8ZC5yYWRpdXMpLCJ3aWR0aCJpbiBkPyhsPTB8ZC53aWR0aCwiaGVpZ2h0ImluIGQmJmRlKGQuaGVpZ2h0PT09bCwibXVzdCBiZSBzcXVhcmUiKSk6ImhlaWdodCJpbiBkJiYobD0wfGQuaGVpZ2h0KTsoImNvbG9yImluIGR8fCJjb2xvcnMiaW4gZCkmJih1PWQuY29sb3J8fGQuY29sb3JzLEFycmF5LmlzQXJyYXkodSkmJmRlKDE9PT11Lmxlbmd0aHx8YSwibXVsdGlwbGUgcmVuZGVyIHRhcmdldHMgbm90IHN1cHBvcnRlZCIpKSx1fHwoImNvbG9yQ291bnQiaW4gZCYmKGY9MHxkLmNvbG9yQ291bnQsZGUoZj4wLCJpbnZhbGlkIGNvbG9yIGJ1ZmZlciBjb3VudCIpKSwiY29sb3JUeXBlImluIGQmJihkZS5vbmVPZihkLmNvbG9yVHlwZSxrLCJpbnZhbGlkIGNvbG9yIHR5cGUiKSxoPWQuY29sb3JUeXBlKSwiY29sb3JGb3JtYXQiaW4gZCYmKGM9ZC5jb2xvckZvcm1hdCxkZS5vbmVPZihkLmNvbG9yRm9ybWF0LHcsImludmFsaWQgY29sb3IgZm9ybWF0IGZvciB0ZXh0dXJlIikpKSwiZGVwdGgiaW4gZCYmKHMuZGVwdGg9ZC5kZXB0aCksInN0ZW5jaWwiaW4gZCYmKHMuc3RlbmNpbD1kLnN0ZW5jaWwpLCJkZXB0aFN0ZW5jaWwiaW4gZCYmKHMuZGVwdGhTdGVuY2lsPWQuZGVwdGhTdGVuY2lsKX1lbHNlIGw9MTt2YXIgbTtpZih1KWlmKEFycmF5LmlzQXJyYXkodSkpZm9yKG09W10scj0wO3I8dS5sZW5ndGg7KytyKW1bcl09dVtyXTtlbHNlIG09W3VdO2Vsc2V7bT1BcnJheShmKTt2YXIgdj17cmFkaXVzOmwsZm9ybWF0OmMsdHlwZTpofTtmb3Iocj0wO3I8ZjsrK3IpbVtyXT1uLmNyZWF0ZUN1YmUodil9Zm9yKHMuY29sb3I9QXJyYXkobS5sZW5ndGgpLHI9MDtyPG0ubGVuZ3RoOysrcil7dmFyIGc9bVtyXTtkZSgiZnVuY3Rpb24iPT10eXBlb2YgZyYmInRleHR1cmVDdWJlIj09PWcuX3JlZ2xUeXBlLCJpbnZhbGlkIGN1YmUgbWFwIiksbD1sfHxnLndpZHRoLGRlKGcud2lkdGg9PT1sJiZnLmhlaWdodD09PWwsImludmFsaWQgY3ViZSBtYXAgc2hhcGUiKSxzLmNvbG9yW3JdPXt0YXJnZXQ6U24sZGF0YTptW3JdfX1mb3Iocj0wO3I8NjsrK3Ipe2Zvcih2YXIgYj0wO2I8bS5sZW5ndGg7KytiKXMuY29sb3JbYl0udGFyZ2V0PVNuK3I7cj4wJiYocy5kZXB0aD1vWzBdLmRlcHRoLHMuc3RlbmNpbD1vWzBdLnN0ZW5jaWwscy5kZXB0aFN0ZW5jaWw9b1swXS5kZXB0aFN0ZW5jaWwpLG9bcl0/b1tyXShzKTpvW3JdPXkocyl9cmV0dXJuICR0KGkse3dpZHRoOmwsaGVpZ2h0OmwsY29sb3I6bX0pfWZ1bmN0aW9uIGEodCl7dmFyIGUsbj0wfHQ7aWYoZGUobj4wJiZuPD1yLm1heEN1YmVNYXBTaXplLCJpbnZhbGlkIHJhZGl1cyBmb3IgY3ViZSBmYm8iKSxuPT09aS53aWR0aClyZXR1cm4gaTt2YXIgYT1pLmNvbG9yO2ZvcihlPTA7ZTxhLmxlbmd0aDsrK2UpYVtlXS5yZXNpemUobik7Zm9yKGU9MDtlPDY7KytlKW9bZV0ucmVzaXplKG4pO3JldHVybiBpLndpZHRoPWkuaGVpZ2h0PW4saX12YXIgbz1BcnJheSg2KTtyZXR1cm4gaSh0KSwkdChpLHtmYWNlczpvLHJlc2l6ZTphLF9yZWdsVHlwZToiZnJhbWVidWZmZXJDdWJlIixkZXN0cm95OmZ1bmN0aW9uKCl7by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9fSl9ZnVuY3Rpb24geCgpe3hlKFQpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksZyhlKX0pfXZhciBfPXtjdXI6bnVsbCxuZXh0Om51bGwsZGlydHk6ITEsc2V0RkJPOm51bGx9LHc9WyJyZ2JhIl0sTT1bInJnYmE0IiwicmdiNTY1IiwicmdiNSBhMSJdO2UuZXh0X3NyZ2ImJk0ucHVzaCgic3JnYmEiKSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmTS5wdXNoKCJyZ2JhMTZmIiwicmdiMTZmIiksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJk0ucHVzaCgicmdiYTMyZiIpO3ZhciBrPVsidWludDgiXTtlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJmsucHVzaCgiaGFsZiBmbG9hdCIsImZsb2F0MTYiKSxlLm9lc190ZXh0dXJlX2Zsb2F0JiZrLnB1c2goImZsb2F0IiwiZmxvYXQzMiIpO3ZhciBBPTAsVD17fTtyZXR1cm4gJHQoXyx7Z2V0RnJhbWVidWZmZXI6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJmcmFtZWJ1ZmZlciI9PT10Ll9yZWdsVHlwZSl7dmFyIGU9dC5fZnJhbWVidWZmZXI7aWYoZSBpbnN0YW5jZW9mIHApcmV0dXJuIGV9cmV0dXJuIG51bGx9LGNyZWF0ZTp5LGNyZWF0ZUN1YmU6YixjbGVhcjpmdW5jdGlvbigpe3hlKFQpLmZvckVhY2godil9LHJlc3RvcmU6eH0pfWZ1bmN0aW9uIFB0KCl7dGhpcy5zdGF0ZT0wLHRoaXMueD0wLHRoaXMueT0wLHRoaXMuej0wLHRoaXMudz0wLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5zaXplPTAsdGhpcy5ub3JtYWxpemVkPSExLHRoaXMudHlwZT1Wbix0aGlzLm9mZnNldD0wLHRoaXMuc3RyaWRlPTAsdGhpcy5kaXZpc29yPTB9ZnVuY3Rpb24gT3QodCxlLHIsbixpKXtmb3IodmFyIGE9ci5tYXhBdHRyaWJ1dGVzLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKW9bc109bmV3IFB0O3JldHVybntSZWNvcmQ6UHQsc2NvcGU6e30sc3RhdGU6b319ZnVuY3Rpb24gUnQodCxlLHIsbil7ZnVuY3Rpb24gaSh0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLmlkPWUsdGhpcy5sb2NhdGlvbj1yLHRoaXMuaW5mbz1ufWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdLmlkPT09ZS5pZClyZXR1cm4gdm9pZCh0W3JdLmxvY2F0aW9uPWUubG9jYXRpb24pO3QucHVzaChlKX1mdW5jdGlvbiBvKHIsbixpKXt2YXIgYT1yPT09SG4/YzpoLG89YVtuXTtpZighbyl7dmFyIHM9ZS5zdHIobik7bz10LmNyZWF0ZVNoYWRlcihyKSx0LnNoYWRlclNvdXJjZShvLHMpLHQuY29tcGlsZVNoYWRlcihvKSxkZS5zaGFkZXJFcnJvcih0LG8scyxyLGkpLGFbbl09b31yZXR1cm4gb31mdW5jdGlvbiBzKHQsZSl7dGhpcy5pZD1wKyssdGhpcy5mcmFnSWQ9dCx0aGlzLnZlcnRJZD1lLHRoaXMucHJvZ3JhbT1udWxsLHRoaXMudW5pZm9ybXM9W10sdGhpcy5hdHRyaWJ1dGVzPVtdLG4ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3VuaWZvcm1zQ291bnQ6MCxhdHRyaWJ1dGVzQ291bnQ6MH0pfWZ1bmN0aW9uIGwocixzKXt2YXIgbCx1LGM9byhIbixyLmZyYWdJZCksaD1vKHFuLHIudmVydElkKSxmPXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcihmLGMpLHQuYXR0YWNoU2hhZGVyKGYsaCksdC5saW5rUHJvZ3JhbShmKSxkZS5saW5rRXJyb3IodCxmLGUuc3RyKHIuZnJhZ0lkKSxlLnN0cihyLnZlcnRJZCkscyk7dmFyIGQ9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGYsR24pO24ucHJvZmlsZSYmKHIuc3RhdHMudW5pZm9ybXNDb3VudD1kKTt2YXIgcD1yLnVuaWZvcm1zO2ZvcihsPTA7bDxkOysrbClpZih1PXQuZ2V0QWN0aXZlVW5pZm9ybShmLGwpKWlmKHUuc2l6ZT4xKWZvcih2YXIgbT0wO208dS5zaXplOysrbSl7dmFyIHY9dS5uYW1lLnJlcGxhY2UoIlswXSIsIlsiK20rIl0iKTthKHAsbmV3IGkodixlLmlkKHYpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKGYsdiksdSkpfWVsc2UgYShwLG5ldyBpKHUubmFtZSxlLmlkKHUubmFtZSksdC5nZXRVbmlmb3JtTG9jYXRpb24oZix1Lm5hbWUpLHUpKTt2YXIgZz10LmdldFByb2dyYW1QYXJhbWV0ZXIoZixZbik7bi5wcm9maWxlJiYoci5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ9Zyk7dmFyIHk9ci5hdHRyaWJ1dGVzO2ZvcihsPTA7bDxnOysrbCkodT10LmdldEFjdGl2ZUF0dHJpYihmLGwpKSYmYSh5LG5ldyBpKHUubmFtZSxlLmlkKHUubmFtZSksdC5nZXRBdHRyaWJMb2NhdGlvbihmLHUubmFtZSksdSkpfWZ1bmN0aW9uIHUoKXtjPXt9LGg9e307Zm9yKHZhciB0PTA7dDxkLmxlbmd0aDsrK3QpbChkW3RdKX12YXIgYz17fSxoPXt9LGY9e30sZD1bXSxwPTA7cmV0dXJuIG4ucHJvZmlsZSYmKHIuZ2V0TWF4VW5pZm9ybXNDb3VudD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0YXRzLnVuaWZvcm1zQ291bnQ+dCYmKHQ9ZS5zdGF0cy51bmlmb3Jtc0NvdW50KX0pLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMuYXR0cmlidXRlc0NvdW50PnQmJih0PWUuc3RhdHMuYXR0cmlidXRlc0NvdW50KX0pLHR9KSx7Y2xlYXI6ZnVuY3Rpb24oKXt2YXIgZT10LmRlbGV0ZVNoYWRlci5iaW5kKHQpO3hlKGMpLmZvckVhY2goZSksYz17fSx4ZShoKS5mb3JFYWNoKGUpLGg9e30sZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuZGVsZXRlUHJvZ3JhbShlLnByb2dyYW0pfSksZC5sZW5ndGg9MCxmPXt9LHIuc2hhZGVyQ291bnQ9MH0scHJvZ3JhbTpmdW5jdGlvbih0LGUsbil7ZGUuY29tbWFuZCh0Pj0wLCJtaXNzaW5nIHZlcnRleCBzaGFkZXIiLG4pLGRlLmNvbW1hbmQoZT49MCwibWlzc2luZyBmcmFnbWVudCBzaGFkZXIiLG4pO3ZhciBpPWZbZV07aXx8KGk9ZltlXT17fSk7dmFyIGE9aVt0XTtyZXR1cm4gYXx8KGE9bmV3IHMoZSx0KSxyLnNoYWRlckNvdW50KyssbChhLG4pLGlbdF09YSxkLnB1c2goYSkpLGF9LHJlc3RvcmU6dSxzaGFkZXI6byxmcmFnOi0xLHZlcnQ6LTF9fWZ1bmN0aW9uIEZ0KHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKG8pe3ZhciBzO251bGw9PT1lLm5leHQ/KGRlKGkucHJlc2VydmVEcmF3aW5nQnVmZmVyLCd5b3UgbXVzdCBjcmVhdGUgYSB3ZWJnbCBjb250ZXh0IHdpdGggInByZXNlcnZlRHJhd2luZ0J1ZmZlciI6dHJ1ZSBpbiBvcmRlciB0byByZWFkIHBpeGVscyBmcm9tIHRoZSBkcmF3aW5nIGJ1ZmZlcicpLHM9V24pOihkZShudWxsIT09ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZSwiWW91IGNhbm5vdCByZWFkIGZyb20gYSByZW5kZXJidWZmZXIiKSxzPWUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZSxhLm9lc190ZXh0dXJlX2Zsb2F0P2RlKHM9PT1Xbnx8cz09PUpuLCJSZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSB0eXBlcyAndWludDgnIGFuZCAnZmxvYXQnIik6ZGUocz09PVduLCJSZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSB0eXBlICd1aW50OCciKSk7dmFyIGw9MCx1PTAsYz1uLmZyYW1lYnVmZmVyV2lkdGgsaD1uLmZyYW1lYnVmZmVySGVpZ2h0LGY9bnVsbDtRdChvKT9mPW86byYmKGRlLnR5cGUobywib2JqZWN0IiwiaW52YWxpZCBhcmd1bWVudHMgdG8gcmVnbC5yZWFkKCkiKSxsPTB8by54LHU9MHxvLnksZGUobD49MCYmbDxuLmZyYW1lYnVmZmVyV2lkdGgsImludmFsaWQgeCBvZmZzZXQgZm9yIHJlZ2wucmVhZCIpLGRlKHU+PTAmJnU8bi5mcmFtZWJ1ZmZlckhlaWdodCwiaW52YWxpZCB5IG9mZnNldCBmb3IgcmVnbC5yZWFkIiksYz0wfChvLndpZHRofHxuLmZyYW1lYnVmZmVyV2lkdGgtbCksaD0wfChvLmhlaWdodHx8bi5mcmFtZWJ1ZmZlckhlaWdodC11KSxmPW8uZGF0YXx8bnVsbCksZiYmKHM9PT1Xbj9kZShmIGluc3RhbmNlb2YgVWludDhBcnJheSwiYnVmZmVyIG11c3QgYmUgJ1VpbnQ4QXJyYXknIHdoZW4gcmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgb2YgdHlwZSAndWludDgnIik6cz09PUpuJiZkZShmIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LCJidWZmZXIgbXVzdCBiZSAnRmxvYXQzMkFycmF5JyB3aGVuIHJlYWRpbmcgZnJvbSBhIGZyYW1lYnVmZmVyIG9mIHR5cGUgJ2Zsb2F0JyIpKSxkZShjPjAmJmMrbDw9bi5mcmFtZWJ1ZmZlcldpZHRoLCJpbnZhbGlkIHdpZHRoIGZvciByZWFkIHBpeGVscyIpLGRlKGg+MCYmaCt1PD1uLmZyYW1lYnVmZmVySGVpZ2h0LCJpbnZhbGlkIGhlaWdodCBmb3IgcmVhZCBwaXhlbHMiKSxyKCk7dmFyIGQ9YypoKjQ7cmV0dXJuIGZ8fChzPT09V24/Zj1uZXcgVWludDhBcnJheShkKTpzPT09Sm4mJihmPWZ8fG5ldyBGbG9hdDMyQXJyYXkoZCkpKSxkZS5pc1R5cGVkQXJyYXkoZiwiZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIG11c3QgYmUgYSB0eXBlZGFycmF5IiksZGUoZi5ieXRlTGVuZ3RoPj1kLCJkYXRhIGJ1ZmZlciBmb3IgcmVnbC5yZWFkKCkgdG9vIHNtYWxsIiksdC5waXhlbFN0b3JlaShabiw0KSx0LnJlYWRQaXhlbHMobCx1LGMsaCxYbixzLGYpLGZ9ZnVuY3Rpb24gcyh0KXt2YXIgcjtyZXR1cm4gZS5zZXRGQk8oe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXJ9LGZ1bmN0aW9uKCl7cj1vKHQpfSkscn1mdW5jdGlvbiBsKHQpe3JldHVybiB0JiYiZnJhbWVidWZmZXIiaW4gdD9zKHQpOm8odCl9cmV0dXJuIGx9ZnVuY3Rpb24ganQodCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfWZ1bmN0aW9uIE50KHQpe3JldHVybiBqdCh0KS5qb2luKCIiKX1mdW5jdGlvbiBCdCgpe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBlPTA7ZTxsLmxlbmd0aDsrK2UpaWYobFtlXT09PXQpcmV0dXJuIHNbZV07dmFyIHI9ImciK28rKztyZXR1cm4gcy5wdXNoKHIpLGwucHVzaCh0KSxyfWZ1bmN0aW9uIGUoKXtmdW5jdGlvbiB0KCl7ci5wdXNoLmFwcGx5KHIsanQoYXJndW1lbnRzKSl9ZnVuY3Rpb24gZSgpe3ZhciB0PSJ2IitvKys7cmV0dXJuIG4ucHVzaCh0KSxhcmd1bWVudHMubGVuZ3RoPjAmJihyLnB1c2godCwiPSIpLHIucHVzaC5hcHBseShyLGp0KGFyZ3VtZW50cykpLHIucHVzaCgiOyIpKSx0fXZhciByPVtdLG49W107cmV0dXJuICR0KHQse2RlZjplLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIE50KFtuLmxlbmd0aD4wPyJ2YXIgIituKyI7IjoiIixOdChyKV0pfX0pfWZ1bmN0aW9uIHIoKXtmdW5jdGlvbiB0KHQsZSl7bih0LGUsIj0iLHIuZGVmKHQsZSksIjsiKX12YXIgcj1lKCksbj1lKCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gJHQoZnVuY3Rpb24oKXtyLmFwcGx5KHIsanQoYXJndW1lbnRzKSl9LHtkZWY6ci5kZWYsZW50cnk6cixleGl0Om4sc2F2ZTp0LHNldDpmdW5jdGlvbihlLG4saSl7dChlLG4pLHIoZSxuLCI9IixpLCI7Iil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGkoKSthKCl9fSl9ZnVuY3Rpb24gbigpe3ZhciB0PU50KGFyZ3VtZW50cyksZT1yKCksbj1yKCksaT1lLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gJHQoZSx7dGhlbjpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KGUsanQoYXJndW1lbnRzKSksdGhpc30sZWxzZTpmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KG4sanQoYXJndW1lbnRzKSksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1hKCk7cmV0dXJuIGUmJihlPSJlbHNleyIrZSsifSIpLE50KFsiaWYoIix0LCIpeyIsaSgpLCJ9IixlXSl9fSl9ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD0iYSIraS5sZW5ndGg7cmV0dXJuIGkucHVzaCh0KSx0fXZhciBpPVtdO2U9ZXx8MDtmb3IodmFyIGE9MDthPGU7KythKW4oKTt2YXIgbz1yKCkscz1vLnRvU3RyaW5nO3JldHVybiBjW3RdPSR0KG8se2FyZzpuLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIE50KFsiZnVuY3Rpb24oIixpLmpvaW4oKSwiKXsiLHMoKSwifSJdKX19KX1mdW5jdGlvbiBhKCl7dmFyIHQ9WycidXNlIHN0cmljdCI7Jyx1LCJyZXR1cm4geyJdO09iamVjdC5rZXlzKGMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKCciJyxlLCciOicsY1tlXS50b1N0cmluZygpLCIsIil9KSx0LnB1c2goIn0iKTt2YXIgZT1OdCh0KS5yZXBsYWNlKC87L2csIjtcbiIpLnJlcGxhY2UoL30vZywifVxuIikucmVwbGFjZSgvey9nLCJ7XG4iKTtyZXR1cm4gRnVuY3Rpb24uYXBwbHkobnVsbCxzLmNvbmNhdChlKSkuYXBwbHkobnVsbCxsKX12YXIgbz0wLHM9W10sbD1bXSx1PWUoKSxjPXt9O3JldHVybntnbG9iYWw6dSxsaW5rOnQsYmxvY2s6ZSxwcm9jOmksc2NvcGU6cixjb25kOm4sY29tcGlsZTphfX1mdW5jdGlvbiBVdCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8UXQodCl8fFoodCl9ZnVuY3Rpb24gVnQodCl7cmV0dXJuIHQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0PT09SWk/LTE6ZT09PUlpPzE6dDxlPy0xOjF9KX1mdW5jdGlvbiBIdCh0LGUscixuKXt0aGlzLnRoaXNEZXA9dCx0aGlzLmNvbnRleHREZXA9ZSx0aGlzLnByb3BEZXA9cix0aGlzLmFwcGVuZD1ufWZ1bmN0aW9uIHF0KHQpe3JldHVybiB0JiYhKHQudGhpc0RlcHx8dC5jb250ZXh0RGVwfHx0LnByb3BEZXApfWZ1bmN0aW9uIEd0KHQpe3JldHVybiBuZXcgSHQoITEsITEsITEsdCl9ZnVuY3Rpb24gWXQodCxlKXt2YXIgcj10LnR5cGU7aWYocj09PWVpKXt2YXIgbj10LmRhdGEubGVuZ3RoO3JldHVybiBuZXcgSHQoITAsbj49MSxuPj0yLGUpfWlmKHI9PT1haSl7dmFyIGk9dC5kYXRhO3JldHVybiBuZXcgSHQoaS50aGlzRGVwLGkuY29udGV4dERlcCxpLnByb3BEZXAsZSl9cmV0dXJuIG5ldyBIdChyPT09aWkscj09PW5pLHI9PT1yaSxlKX1mdW5jdGlvbiBYdCh0LGUscixuLGksYSxvLHMsbCx1LGMsaCxmLGQscCl7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5yZXBsYWNlKCIuIiwiXyIpfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPW0odCk7ZXQucHVzaCh0KSx0dFtuXT0kW25dPSEhcixydFtuXT1lfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPW0odCk7ZXQucHVzaCh0KSwKQXJyYXkuaXNBcnJheShyKT8oJFtuXT1yLnNsaWNlKCksdHRbbl09ci5zbGljZSgpKTokW25dPXR0W25dPXIsbnRbbl09ZX1mdW5jdGlvbiB5KCl7dmFyIHQ9QnQoKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9b3QrKyx0LmJhdGNoSWQ9IjAiO3ZhciBpPXIoaXQpLGE9dC5zaGFyZWQ9e3Byb3BzOiJhMCJ9O09iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09bi5kZWYoaSwiLiIsdCl9KSxkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuQ0hFQ0s9cihkZSksdC5jb21tYW5kU3RyPWRlLmd1ZXNzQ29tbWFuZCgpLHQuY29tbWFuZD1yKHQuY29tbWFuZFN0ciksdC5hc3NlcnQ9ZnVuY3Rpb24odCxlLG4pe3QoImlmKCEoIixlLCIpKSIsdGhpcy5DSEVDSywiLmNvbW1hbmRSYWlzZSgiLHIobiksIiwiLHRoaXMuY29tbWFuZCwiKTsiKX0sYXQuaW52YWxpZEJsZW5kQ29tYmluYXRpb25zPVVhfSk7dmFyIG89dC5uZXh0PXt9LHM9dC5jdXJyZW50PXt9O09iamVjdC5rZXlzKG50KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkoJFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCwiLiIsdCksc1t0XT1uLmRlZihhLmN1cnJlbnQsIi4iLHQpKX0pO3ZhciBsPXQuY29uc3RhbnRzPXt9O09iamVjdC5rZXlzKGF0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkoYXRbdF0pKX0pLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSBlaTp2YXIgaT1bInRoaXMiLGEuY29udGV4dCxhLnByb3BzLHQuYmF0Y2hJZF07cmV0dXJuIGUuZGVmKHIobi5kYXRhKSwiLmNhbGwoIixpLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSwiKSIpO2Nhc2Ugcmk6cmV0dXJuIGUuZGVmKGEucHJvcHMsbi5kYXRhKTtjYXNlIG5pOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIGlpOnJldHVybiBlLmRlZigidGhpcyIsbi5kYXRhKTtjYXNlIGFpOnJldHVybiBuLmRhdGEuYXBwZW5kKHQsZSksbi5kYXRhLnJlZn19LHQuYXR0cmliQ2FjaGU9e307dmFyIGM9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7dmFyIG49ZS5pZCh0KTtpZihuIGluIGMpcmV0dXJuIGNbbl07dmFyIGk9dS5zY29wZVtuXTtyZXR1cm4gaXx8KGk9dS5zY29wZVtuXT1uZXcgVyksY1tuXT1yKGkpfSx0fWZ1bmN0aW9uIGIodCl7dmFyIGUscj10LnN0YXRpYyxuPXQuZHluYW1pYztpZihEaSBpbiByKXt2YXIgaT0hIXJbRGldO2U9R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gaX0pLGUuZW5hYmxlPWl9ZWxzZSBpZihEaSBpbiBuKXt2YXIgYT1uW0RpXTtlPVl0KGEsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxhKX0pfXJldHVybiBlfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYztpZihQaSBpbiByKXt2YXIgaT1yW1BpXTtyZXR1cm4gaT8oaT1zLmdldEZyYW1lYnVmZmVyKGkpLGRlLmNvbW1hbmQoaSwiaW52YWxpZCBmcmFtZWJ1ZmZlciBvYmplY3QiKSxHdChmdW5jdGlvbih0LGUpe3ZhciByPXQubGluayhpKSxuPXQuc2hhcmVkO2Uuc2V0KG4uZnJhbWVidWZmZXIsIi5uZXh0IixyKTt2YXIgYT1uLmNvbnRleHQ7cmV0dXJuIGUuc2V0KGEsIi4iK1ZpLHIrIi53aWR0aCIpLGUuc2V0KGEsIi4iK0hpLHIrIi5oZWlnaHQiKSxyfSkpOkd0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7ZS5zZXQoci5mcmFtZWJ1ZmZlciwiLm5leHQiLCJudWxsIik7dmFyIG49ci5jb250ZXh0O3JldHVybiBlLnNldChuLCIuIitWaSxuKyIuIitZaSksZS5zZXQobiwiLiIrSGksbisiLiIrWGkpLCJudWxsIn0pfWlmKFBpIGluIG4pe3ZhciBhPW5bUGldO3JldHVybiBZdChhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKSxuPXQuc2hhcmVkLGk9bi5mcmFtZWJ1ZmZlcixvPWUuZGVmKGksIi5nZXRGcmFtZWJ1ZmZlcigiLHIsIikiKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsIiEiK3IrInx8IitvLCJpbnZhbGlkIGZyYW1lYnVmZmVyIG9iamVjdCIpfSksZS5zZXQoaSwiLm5leHQiLG8pO3ZhciBzPW4uY29udGV4dDtyZXR1cm4gZS5zZXQocywiLiIrVmksbysiPyIrbysiLndpZHRoOiIrcysiLiIrWWkpLGUuc2V0KHMsIi4iK0hpLG8rIj8iK28rIi5oZWlnaHQ6IitzKyIuIitYaSksb30pfXJldHVybiBudWxsfWZ1bmN0aW9uIF8odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCBpbiBpKXt2YXIgbj1pW3RdO2RlLmNvbW1hbmRUeXBlKG4sIm9iamVjdCIsImludmFsaWQgIit0LHIuY29tbWFuZFN0cik7dmFyIG8scyxsPSEwLHU9MHxuLngsYz0wfG4ueTtyZXR1cm4id2lkdGgiaW4gbj8obz0wfG4ud2lkdGgsZGUuY29tbWFuZChvPj0wLCJpbnZhbGlkICIrdCxyLmNvbW1hbmRTdHIpKTpsPSExLCJoZWlnaHQiaW4gbj8ocz0wfG4uaGVpZ2h0LGRlLmNvbW1hbmQocz49MCwiaW52YWxpZCAiK3Qsci5jb21tYW5kU3RyKSk6bD0hMSxuZXcgSHQoIWwmJmUmJmUudGhpc0RlcCwhbCYmZSYmZS5jb250ZXh0RGVwLCFsJiZlJiZlLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZC5jb250ZXh0LGk9bzsid2lkdGgiaW4gbnx8KGk9ZS5kZWYociwiLiIsVmksIi0iLHUpKTt2YXIgYT1zO3JldHVybiJoZWlnaHQiaW4gbnx8KGE9ZS5kZWYociwiLiIsSGksIi0iLGMpKSxbdSxjLGksYV19KX1pZih0IGluIGEpe3ZhciBoPWFbdF0sZj1ZdChoLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5pbnZva2UocixoKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiJiZ0eXBlb2YgIituKyc9PT0ib2JqZWN0IicsImludmFsaWQgIit0KX0pO3ZhciBpPWUuc2hhcmVkLmNvbnRleHQsYT1yLmRlZihuLCIueHwwIiksbz1yLmRlZihuLCIueXwwIikscz1yLmRlZignIndpZHRoIiBpbiAnLG4sIj8iLG4sIi53aWR0aHwwOiIsIigiLGksIi4iLFZpLCItIixhLCIpIiksbD1yLmRlZignImhlaWdodCIgaW4gJyxuLCI/IixuLCIuaGVpZ2h0fDA6IiwiKCIsaSwiLiIsSGksIi0iLG8sIikiKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLHMrIj49MCYmIitsKyI+PTAiLCJpbnZhbGlkICIrdCl9KSxbYSxvLHMsbF19KTtyZXR1cm4gZSYmKGYudGhpc0RlcD1mLnRoaXNEZXB8fGUudGhpc0RlcCxmLmNvbnRleHREZXA9Zi5jb250ZXh0RGVwfHxlLmNvbnRleHREZXAsZi5wcm9wRGVwPWYucHJvcERlcHx8ZS5wcm9wRGVwKSxmfXJldHVybiBlP25ldyBIdChlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuWzAsMCxlLmRlZihyLCIuIixWaSksZS5kZWYociwiLiIsSGkpXX0pOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWMsbz1uKElpKTtpZihvKXt2YXIgcz1vO289bmV3IEh0KG8udGhpc0RlcCxvLmNvbnRleHREZXAsby5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9cy5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sIi4iK3FpLHJbMl0pLGUuc2V0KG4sIi4iK0dpLHJbM10pLHJ9KX1yZXR1cm57dmlld3BvcnQ6byxzY2lzc29yX2JveDpuKHppKX19ZnVuY3Rpb24gdyh0KXtmdW5jdGlvbiByKHQpe2lmKHQgaW4gaSl7dmFyIHI9ZS5pZChpW3RdKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe2Muc2hhZGVyKHFhW3RdLHIsZGUuZ3Vlc3NDb21tYW5kKCkpfSk7dmFyIG49R3QoZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3JldHVybiBuLmlkPXIsbn1pZih0IGluIGEpe3ZhciBvPWFbdF07cmV0dXJuIFl0KG8sZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmludm9rZShyLG8pLGk9ci5kZWYoZS5zaGFyZWQuc3RyaW5ncywiLmlkKCIsbiwiKSIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3IoZS5zaGFyZWQuc2hhZGVyLCIuc2hhZGVyKCIscWFbdF0sIiwiLGksIiwiLGUuY29tbWFuZCwiKTsiKX0pLGl9KX1yZXR1cm4gbnVsbH12YXIgbixpPXQuc3RhdGljLGE9dC5keW5hbWljLG89cihSaSkscz1yKE9pKSxsPW51bGw7cmV0dXJuIHF0KG8pJiZxdChzKT8obD1jLnByb2dyYW0ocy5pZCxvLmlkKSxuPUd0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluayhsKX0pKTpuPW5ldyBIdChvJiZvLnRoaXNEZXB8fHMmJnMudGhpc0RlcCxvJiZvLmNvbnRleHREZXB8fHMmJnMuY29udGV4dERlcCxvJiZvLnByb3BEZXB8fHMmJnMucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByLG49dC5zaGFyZWQuc2hhZGVyO3I9bz9vLmFwcGVuZCh0LGUpOmUuZGVmKG4sIi4iLFJpKTt2YXIgaTtpPXM/cy5hcHBlbmQodCxlKTplLmRlZihuLCIuIixPaSk7dmFyIGE9bisiLnByb2dyYW0oIitpKyIsIityO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2ErPSIsIit0LmNvbW1hbmR9KSxlLmRlZihhKyIpIil9KSx7ZnJhZzpvLHZlcnQ6cyxwcm9nVmFyOm4scHJvZ3JhbTpsfX1mdW5jdGlvbiBNKHQsZSl7ZnVuY3Rpb24gcih0LHIpe2lmKHQgaW4gbil7dmFyIGE9MHxuW3RdO3JldHVybiBkZS5jb21tYW5kKCFyfHxhPj0wLCJpbnZhbGlkICIrdCxlLmNvbW1hbmRTdHIpLEd0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHImJih0Lk9GRlNFVD1hKSxhfSl9aWYodCBpbiBpKXt2YXIgcz1pW3RdO3JldHVybiBZdChzLGZ1bmN0aW9uKGUsbil7dmFyIGk9ZS5pbnZva2UobixzKTtyZXR1cm4gciYmKGUuT0ZGU0VUPWksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChuLGkrIj49MCIsImludmFsaWQgIit0KX0pKSxpfSl9cmV0dXJuIHImJm8/R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5PRkZTRVQ9IjAiLDB9KTpudWxsfXZhciBuPXQuc3RhdGljLGk9dC5keW5hbWljLG89ZnVuY3Rpb24oKXtpZihGaSBpbiBuKXt2YXIgdD1uW0ZpXTtVdCh0KT90PWEuZ2V0RWxlbWVudHMoYS5jcmVhdGUodCwhMCkpOnQmJih0PWEuZ2V0RWxlbWVudHModCksZGUuY29tbWFuZCh0LCJpbnZhbGlkIGVsZW1lbnRzIixlLmNvbW1hbmRTdHIpKTt2YXIgcj1HdChmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1uLG59cmV0dXJuIGUuRUxFTUVOVFM9bnVsbCxudWxsfSk7cmV0dXJuIHIudmFsdWU9dCxyfWlmKEZpIGluIGkpe3ZhciBvPWlbRmldO3JldHVybiBZdChvLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQsbj1yLmlzQnVmZmVyQXJncyxpPXIuZWxlbWVudHMsYT10Lmludm9rZShlLG8pLHM9ZS5kZWYoIm51bGwiKSxsPWUuZGVmKG4sIigiLGEsIikiKSx1PXQuY29uZChsKS50aGVuKHMsIj0iLGksIi5jcmVhdGVTdHJlYW0oIixhLCIpOyIpLmVsc2UocywiPSIsaSwiLmdldEVsZW1lbnRzKCIsYSwiKTsiKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydCh1LmVsc2UsIiEiK2ErInx8IitzLCJpbnZhbGlkIGVsZW1lbnRzIil9KSxlLmVudHJ5KHUpLGUuZXhpdCh0LmNvbmQobCkudGhlbihpLCIuZGVzdHJveVN0cmVhbSgiLHMsIik7IikpLHQuRUxFTUVOVFM9cyxzfSl9cmV0dXJuIG51bGx9KCkscz1yKEJpLCEwKTtyZXR1cm57ZWxlbWVudHM6byxwcmltaXRpdmU6ZnVuY3Rpb24oKXtpZihqaSBpbiBuKXt2YXIgdD1uW2ppXTtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcih0LEJlLCJpbnZhbGlkIHByaW1pdHZlIixlLmNvbW1hbmRTdHIpLEd0KGZ1bmN0aW9uKGUscil7cmV0dXJuIEJlW3RdfSl9aWYoamkgaW4gaSl7dmFyIHI9aVtqaV07cmV0dXJuIFl0KHIsZnVuY3Rpb24odCxlKXt2YXIgbj10LmNvbnN0YW50cy5wcmltVHlwZXMsaT10Lmludm9rZShlLHIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsaSsiIGluICIrbiwiaW52YWxpZCBwcmltaXRpdmUsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoQmUpKX0pLGUuZGVmKG4sIlsiLGksIl0iKX0pfXJldHVybiBvP3F0KG8pP0d0KG8udmFsdWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnByaW1UeXBlIil9OmZ1bmN0aW9uKCl7cmV0dXJuIEFhfSk6bmV3IEh0KG8udGhpc0RlcCxvLmNvbnRleHREZXAsby5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gZS5kZWYociwiPyIsciwiLnByaW1UeXBlOiIsQWEpfSk6bnVsbH0oKSxjb3VudDpmdW5jdGlvbigpe2lmKE5pIGluIG4pe3ZhciB0PTB8bltOaV07cmV0dXJuIGRlLmNvbW1hbmQoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wLCJpbnZhbGlkIHZlcnRleCBjb3VudCIsZS5jb21tYW5kU3RyKSxHdChmdW5jdGlvbigpe3JldHVybiB0fSl9aWYoTmkgaW4gaSl7dmFyIHI9aVtOaV07cmV0dXJuIFl0KHIsZnVuY3Rpb24odCxlKXt2YXIgbj10Lmludm9rZShlLHIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsInR5cGVvZiAiK24rJz09PSJudW1iZXIiJiYnK24rIj49MCYmIituKyI9PT0oIituKyJ8MCkiLCJpbnZhbGlkIHZlcnRleCBjb3VudCIpfSksbn0pfWlmKG8pe2lmKHF0KG8pKXtpZihvKXJldHVybiBzP25ldyBIdChzLnRoaXNEZXAscy5jb250ZXh0RGVwLHMucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPWUuZGVmKHQuRUxFTUVOVFMsIi52ZXJ0Q291bnQtIix0Lk9GRlNFVCk7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQoZSxyKyI+PTAiLCJpbnZhbGlkIHZlcnRleCBvZmZzZXQvZWxlbWVudCBidWZmZXIgdG9vIHNtYWxsIil9KSxyfSk6R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudCIpfSk7dmFyIGE9R3QoZnVuY3Rpb24oKXtyZXR1cm4tMX0pO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2EuTUlTU0lORz0hMH0pLGF9dmFyIGw9bmV3IEh0KG8udGhpc0RlcHx8cy50aGlzRGVwLG8uY29udGV4dERlcHx8cy5jb250ZXh0RGVwLG8ucHJvcERlcHx8cy5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gdC5PRkZTRVQ/ZS5kZWYociwiPyIsciwiLnZlcnRDb3VudC0iLHQuT0ZGU0VULCI6LTEiKTplLmRlZihyLCI/IixyLCIudmVydENvdW50Oi0xIil9KTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtsLkRZTkFNSUM9ITB9KSxsfXJldHVybiBudWxsfSgpLGluc3RhbmNlczpyKFVpLCExKSxvZmZzZXQ6c319ZnVuY3Rpb24gayh0LGUpe3ZhciByPXQuc3RhdGljLGk9dC5keW5hbWljLGE9e307cmV0dXJuIGV0LmZvckVhY2goZnVuY3Rpb24odCl7ZnVuY3Rpb24gbyhlLG4pe2lmKHQgaW4gcil7dmFyIG89ZShyW3RdKTthW3NdPUd0KGZ1bmN0aW9uKCl7cmV0dXJuIG99KX1lbHNlIGlmKHQgaW4gaSl7dmFyIGw9aVt0XTthW3NdPVl0KGwsZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUsdC5pbnZva2UoZSxsKSl9KX19dmFyIHM9bSh0KTtzd2l0Y2godCl7Y2FzZSB2aTpjYXNlIHNpOmNhc2Ugb2k6Y2FzZSBBaTpjYXNlIGhpOmNhc2UgQ2k6Y2FzZSB4aTpjYXNlIHdpOmNhc2UgTWk6Y2FzZSBwaTpyZXR1cm4gbyhmdW5jdGlvbihyKXtyZXR1cm4gZGUuY29tbWFuZFR5cGUociwiYm9vbGVhbiIsdCxlLmNvbW1hbmRTdHIpLHJ9LGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLCJ0eXBlb2YgIituKyc9PT0iYm9vbGVhbiInLCJpbnZhbGlkIGZsYWcgIit0LGUuY29tbWFuZFN0cil9KSxufSk7Y2FzZSBmaTpyZXR1cm4gbyhmdW5jdGlvbihyKXtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcihyLFZhLCJpbnZhbGlkICIrdCxlLmNvbW1hbmRTdHIpLFZhW3JdfSxmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5jb25zdGFudHMuY29tcGFyZUZ1bmNzO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiIGluICIraSwiaW52YWxpZCAiK3QrIiwgbXVzdCBiZSBvbmUgb2YgIitPYmplY3Qua2V5cyhWYSkpfSksci5kZWYoaSwiWyIsbiwiXSIpfSk7Y2FzZSBkaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZChtdCh0KSYmMj09PXQubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHRbMF0mJiJudW1iZXIiPT10eXBlb2YgdFsxXSYmdFswXTw9dFsxXSwiZGVwdGggcmFuZ2UgaXMgMmQgYXJyYXkiLGUuY29tbWFuZFN0ciksdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsdC5zaGFyZWQuaXNBcnJheUxpa2UrIigiK3IrIikmJiIrcisiLmxlbmd0aD09PTImJnR5cGVvZiAiK3IrJ1swXT09PSJudW1iZXIiJiZ0eXBlb2YgJytyKydbMV09PT0ibnVtYmVyIiYmJytyKyJbMF08PSIrcisiWzFdIiwiZGVwdGggcmFuZ2UgbXVzdCBiZSBhIDJkIGFycmF5Iil9KSxbZS5kZWYoIisiLHIsIlswXSIpLGUuZGVmKCIrIixyLCJbMV0iKV19KTtjYXNlIGNpOnJldHVybiBvKGZ1bmN0aW9uKHQpe2RlLmNvbW1hbmRUeXBlKHQsIm9iamVjdCIsImJsZW5kLmZ1bmMiLGUuY29tbWFuZFN0cik7dmFyIHI9InNyY1JHQiJpbiB0P3Quc3JjUkdCOnQuc3JjLG49InNyY0FscGhhImluIHQ/dC5zcmNBbHBoYTp0LnNyYyxpPSJkc3RSR0IiaW4gdD90LmRzdFJHQjp0LmRzdCxhPSJkc3RBbHBoYSJpbiB0P3QuZHN0QWxwaGE6dC5kc3Q7cmV0dXJuIGRlLmNvbW1hbmRQYXJhbWV0ZXIocixCYSxzKyIuc3JjUkdCIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIobixCYSxzKyIuc3JjQWxwaGEiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZFBhcmFtZXRlcihpLEJhLHMrIi5kc3RSR0IiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZFBhcmFtZXRlcihhLEJhLHMrIi5kc3RBbHBoYSIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kKC0xPT09VWEuaW5kZXhPZihyKyIsICIraSksInVuYWxsb3dlZCBibGVuZGluZyBjb21iaW5hdGlvbiAoc3JjUkdCLCBkc3RSR0IpID0gKCIrcisiLCAiK2krIikiLGUuY29tbWFuZFN0ciksW0JhW3JdLEJhW2ldLEJhW25dLEJhW2FdXX0sZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkoaSxvKXt2YXIgcz1yLmRlZignIicsaSxvLCciIGluICcsbiwiPyIsbiwiLiIsaSxvLCI6IixuLCIuIixpKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLHMrIiBpbiAiK2EsImludmFsaWQgIit0KyIuIitpK28rIiwgbXVzdCBiZSBvbmUgb2YgIitPYmplY3Qua2V5cyhCYSkpfSksc312YXIgYT1lLmNvbnN0YW50cy5ibGVuZEZ1bmNzO2RlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZS5hc3NlcnQocixuKyImJnR5cGVvZiAiK24rJz09PSJvYmplY3QiJywiaW52YWxpZCBibGVuZCBmdW5jLCBtdXN0IGJlIGFuIG9iamVjdCIpfSk7dmFyIG89aSgic3JjIiwiUkdCIikscz1pKCJkc3QiLCJSR0IiKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe3ZhciB0PWUuY29uc3RhbnRzLmludmFsaWRCbGVuZENvbWJpbmF0aW9ucztlLmFzc2VydChyLHQrIi5pbmRleE9mKCIrbysnKyIsICIrJytzKyIpID09PSAtMSAiLCJ1bmFsbG93ZWQgYmxlbmRpbmcgY29tYmluYXRpb24gZm9yIChzcmNSR0IsIGRzdFJHQikiKX0pO3ZhciBsPXIuZGVmKGEsIlsiLG8sIl0iKSx1PXIuZGVmKGEsIlsiLGkoInNyYyIsIkFscGhhIiksIl0iKTtyZXR1cm5bbCxyLmRlZihhLCJbIixzLCJdIiksdSxyLmRlZihhLCJbIixpKCJkc3QiLCJBbHBoYSIpLCJdIildfSk7Y2FzZSB1aTpyZXR1cm4gbyhmdW5jdGlvbihyKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/KGRlLmNvbW1hbmRQYXJhbWV0ZXIocixaLCJpbnZhbGlkICIrdCxlLmNvbW1hbmRTdHIpLFtaW3JdLFpbcl1dKToib2JqZWN0Ij09dHlwZW9mIHI/KGRlLmNvbW1hbmRQYXJhbWV0ZXIoci5yZ2IsWix0KyIucmdiIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIoci5hbHBoYSxaLHQrIi5hbHBoYSIsZS5jb21tYW5kU3RyKSxbWltyLnJnYl0sWltyLmFscGhhXV0pOnZvaWQgZGUuY29tbWFuZFJhaXNlKCJpbnZhbGlkIGJsZW5kLmVxdWF0aW9uIixlLmNvbW1hbmRTdHIpfSxmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnMsYT1yLmRlZigpLG89ci5kZWYoKSxzPWUuY29uZCgidHlwZW9mICIsbiwnPT09InN0cmluZyInKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQscixuKXtlLmFzc2VydCh0LG4rIiBpbiAiK2ksImludmFsaWQgIityKyIsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoWikpfXIocy50aGVuLHQsbiksZS5hc3NlcnQocy5lbHNlLG4rIiYmdHlwZW9mICIrbisnPT09Im9iamVjdCInLCJpbnZhbGlkICIrdCkscihzLmVsc2UsdCsiLnJnYiIsbisiLnJnYiIpLHIocy5lbHNlLHQrIi5hbHBoYSIsbisiLmFscGhhIil9KSxzLnRoZW4oYSwiPSIsbywiPSIsaSwiWyIsbiwiXTsiKSxzLmVsc2UoYSwiPSIsaSwiWyIsbiwiLnJnYl07IixvLCI9IixpLCJbIixuLCIuYWxwaGFdOyIpLHIocyksW2Esb119KTtjYXNlIGxpOnJldHVybiBvKGZ1bmN0aW9uKHQpe3JldHVybiBkZS5jb21tYW5kKG10KHQpJiY0PT09dC5sZW5ndGgsImJsZW5kLmNvbG9yIG11c3QgYmUgYSA0ZCBhcnJheSIsZS5jb21tYW5kU3RyKSxKKDQsZnVuY3Rpb24oZSl7cmV0dXJuK3RbZV19KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsdC5zaGFyZWQuaXNBcnJheUxpa2UrIigiK3IrIikmJiIrcisiLmxlbmd0aD09PTQiLCJibGVuZC5jb2xvciBtdXN0IGJlIGEgNGQgYXJyYXkiKX0pLEooNCxmdW5jdGlvbih0KXtyZXR1cm4gZS5kZWYoIisiLHIsIlsiLHQsIl0iKX0pfSk7Y2FzZSBUaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZFR5cGUodCwibnVtYmVyIixzLGUuY29tbWFuZFN0ciksMHx0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQoZSwidHlwZW9mICIrcisnPT09Im51bWJlciInLCJpbnZhbGlkIHN0ZW5jaWwubWFzayIpfSksZS5kZWYociwifDAiKX0pO2Nhc2UgU2k6cmV0dXJuIG8oZnVuY3Rpb24ocil7ZGUuY29tbWFuZFR5cGUociwib2JqZWN0IixzLGUuY29tbWFuZFN0cik7dmFyIG49ci5jbXB8fCJrZWVwIixpPXIucmVmfHwwLGE9Im1hc2siaW4gcj9yLm1hc2s6LTE7cmV0dXJuIGRlLmNvbW1hbmRQYXJhbWV0ZXIobixWYSx0KyIuY21wIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRUeXBlKGksIm51bWJlciIsdCsiLnJlZiIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kVHlwZShhLCJudW1iZXIiLHQrIi5tYXNrIixlLmNvbW1hbmRTdHIpLFtWYVtuXSxpLGFdfSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25zdGFudHMuY29tcGFyZUZ1bmNzO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt0LmFzc2VydChlLEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKSwiaW52YWxpZCBzdGVuY2lsLmZ1bmMiKX1pKHIrIiYmdHlwZW9mICIsciwnPT09Im9iamVjdCInKSxpKCchKCJjbXAiIGluICcsciwiKXx8KCIsciwiLmNtcCBpbiAiLG4sIikiKX0pLFtlLmRlZignImNtcCIgaW4gJyxyLCI/IixuLCJbIixyLCIuY21wXSIsIjoiLERhKSxlLmRlZihyLCIucmVmfDAiKSxlLmRlZignIm1hc2siIGluICcsciwiPyIsciwiLm1hc2t8MDotMSIpXX0pO2Nhc2UgRWk6Y2FzZSBMaTpyZXR1cm4gbyhmdW5jdGlvbihyKXtkZS5jb21tYW5kVHlwZShyLCJvYmplY3QiLHMsZS5jb21tYW5kU3RyKTt2YXIgbj1yLmZhaWx8fCJrZWVwIixpPXIuemZhaWx8fCJrZWVwIixhPXIuenBhc3N8fCJrZWVwIjtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcihuLEhhLHQrIi5mYWlsIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIoaSxIYSx0KyIuemZhaWwiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZFBhcmFtZXRlcihhLEhhLHQrIi56cGFzcyIsZS5jb21tYW5kU3RyKSxbdD09PUxpP1NhOlRhLEhhW25dLEhhW2ldLEhhW2FdXX0sZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZS5hc3NlcnQociwnISgiJytpKyciIGluICcrbisiKXx8KCIrbisiLiIraSsiIGluICIrYSsiKSIsImludmFsaWQgIit0KyIuIitpKyIsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoSGEpKX0pLHIuZGVmKCciJyxpLCciIGluICcsbiwiPyIsYSwiWyIsbiwiLiIsaSwiXToiLERhKX12YXIgYT1lLmNvbnN0YW50cy5zdGVuY2lsT3BzO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiJiZ0eXBlb2YgIituKyc9PT0ib2JqZWN0IicsImludmFsaWQgIit0KX0pLFt0PT09TGk/U2E6VGEsaSgiZmFpbCIpLGkoInpmYWlsIiksaSgienBhc3MiKV19KTtjYXNlIF9pOnJldHVybiBvKGZ1bmN0aW9uKHQpe2RlLmNvbW1hbmRUeXBlKHQsIm9iamVjdCIscyxlLmNvbW1hbmRTdHIpO3ZhciByPTB8dC5mYWN0b3Isbj0wfHQudW5pdHM7cmV0dXJuIGRlLmNvbW1hbmRUeXBlKHIsIm51bWJlciIscysiLmZhY3RvciIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kVHlwZShuLCJudW1iZXIiLHMrIi51bml0cyIsZS5jb21tYW5kU3RyKSxbcixuXX0sZnVuY3Rpb24oZSxyLG4pe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiJiZ0eXBlb2YgIituKyc9PT0ib2JqZWN0IicsImludmFsaWQgIit0KX0pLFtyLmRlZihuLCIuZmFjdG9yfDAiKSxyLmRlZihuLCIudW5pdHN8MCIpXX0pO2Nhc2UgZ2k6cmV0dXJuIG8oZnVuY3Rpb24odCl7dmFyIHI9MDtyZXR1cm4iZnJvbnQiPT09dD9yPVRhOiJiYWNrIj09PXQmJihyPVNhKSxkZS5jb21tYW5kKCEhcixzLGUuY29tbWFuZFN0cikscn0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUscisnPT09ImZyb250Inx8JytyKyc9PT0iYmFjayInLCJpbnZhbGlkIGN1bGwuZmFjZSIpfSksZS5kZWYociwnPT09ImZyb250Ij8nLFRhLCI6IixTYSl9KTtjYXNlIGJpOnJldHVybiBvKGZ1bmN0aW9uKHQpe3JldHVybiBkZS5jb21tYW5kKCJudW1iZXIiPT10eXBlb2YgdCYmdD49bi5saW5lV2lkdGhEaW1zWzBdJiZ0PD1uLmxpbmVXaWR0aERpbXNbMV0sImludmFsaWQgbGluZSB3aWR0aCwgbXVzdCBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiAiK24ubGluZVdpZHRoRGltc1swXSsiIGFuZCAiK24ubGluZVdpZHRoRGltc1sxXSxlLmNvbW1hbmRTdHIpLHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLCJ0eXBlb2YgIityKyc9PT0ibnVtYmVyIiYmJytyKyI+PSIrbi5saW5lV2lkdGhEaW1zWzBdKyImJiIrcisiPD0iK24ubGluZVdpZHRoRGltc1sxXSwiaW52YWxpZCBsaW5lIHdpZHRoIil9KSxyfSk7Y2FzZSB5aTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcih0LEdhLHMsZS5jb21tYW5kU3RyKSxHYVt0XX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUscisnPT09ImN3Inx8JytyKyc9PT0iY2N3IicsImludmFsaWQgZnJvbnRGYWNlLCBtdXN0IGJlIG9uZSBvZiBjdyxjY3ciKX0pLGUuZGVmKHIrJz09PSJjdyI/JytFYSsiOiIrTGEpfSk7Y2FzZSBtaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZChtdCh0KSYmND09PXQubGVuZ3RoLCJjb2xvci5tYXNrIG11c3QgYmUgbGVuZ3RoIDQgYXJyYXkiLGUuY29tbWFuZFN0ciksdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuISF0fSl9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLHQuc2hhcmVkLmlzQXJyYXlMaWtlKyIoIityKyIpJiYiK3IrIi5sZW5ndGg9PT00IiwiaW52YWxpZCBjb2xvci5tYXNrIil9KSxKKDQsZnVuY3Rpb24odCl7cmV0dXJuIiEhIityKyJbIit0KyJdIn0pfSk7Y2FzZSBraTpyZXR1cm4gbyhmdW5jdGlvbih0KXtkZS5jb21tYW5kKCJvYmplY3QiPT10eXBlb2YgdCYmdCxzLGUuY29tbWFuZFN0cik7dmFyIHI9InZhbHVlImluIHQ/dC52YWx1ZToxLG49ISF0LmludmVydDtyZXR1cm4gZGUuY29tbWFuZCgibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJnI8PTEsInNhbXBsZS5jb3ZlcmFnZS52YWx1ZSBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSIsZS5jb21tYW5kU3RyKSxbcixuXX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUscisiJiZ0eXBlb2YgIityKyc9PT0ib2JqZWN0IicsImludmFsaWQgc2FtcGxlLmNvdmVyYWdlIil9KSxbZS5kZWYoJyJ2YWx1ZSIgaW4gJyxyLCI/KyIsciwiLnZhbHVlOjEiKSxlLmRlZigiISEiLHIsIi5pbnZlcnQiKV19KX19KSxhfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuLGE9clt0XTtpZigibnVtYmVyIj09dHlwZW9mIGF8fCJib29sZWFuIj09dHlwZW9mIGEpbj1HdChmdW5jdGlvbigpe3JldHVybiBhfSk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7dmFyIG89YS5fcmVnbFR5cGU7InRleHR1cmUyZCI9PT1vfHwidGV4dHVyZUN1YmUiPT09bz9uPUd0KGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsoYSl9KToiZnJhbWVidWZmZXIiPT09b3x8ImZyYW1lYnVmZmVyQ3ViZSI9PT1vPyhkZS5jb21tYW5kKGEuY29sb3IubGVuZ3RoPjAsJ21pc3NpbmcgY29sb3IgYXR0YWNobWVudCBmb3IgZnJhbWVidWZmZXIgc2VudCB0byB1bmlmb3JtICInK3QrJyInLGUuY29tbWFuZFN0ciksbj1HdChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKGEuY29sb3JbMF0pfSkpOmRlLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBkYXRhIGZvciB1bmlmb3JtICInK3QrJyInLGUuY29tbWFuZFN0cil9ZWxzZSBtdChhKT9uPUd0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmdsb2JhbC5kZWYoIlsiLEooYS5sZW5ndGgsZnVuY3Rpb24ocil7cmV0dXJuIGRlLmNvbW1hbmQoIm51bWJlciI9PXR5cGVvZiBhW3JdfHwiYm9vbGVhbiI9PXR5cGVvZiBhW3JdLCJpbnZhbGlkIHVuaWZvcm0gIit0LGUuY29tbWFuZFN0ciksYVtyXX0pLCJdIil9KTpkZS5jb21tYW5kUmFpc2UoJ2ludmFsaWQgb3IgbWlzc2luZyBkYXRhIGZvciB1bmlmb3JtICInK3QrJyInLGUuY29tbWFuZFN0cik7bi52YWx1ZT1hLGlbdF09bn0pLE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9blt0XTtpW3RdPVl0KGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfSksaX1mdW5jdGlvbiBUKHQscil7dmFyIG49dC5zdGF0aWMsYT10LmR5bmFtaWMsbz17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgYT1uW3RdLHM9ZS5pZCh0KSxsPW5ldyBXO2lmKFV0KGEpKWwuc3RhdGU9JG4sbC5idWZmZXI9aS5nZXRCdWZmZXIoaS5jcmVhdGUoYSxaaSwhMSwhMCkpLGwudHlwZT0wO2Vsc2V7dmFyIHU9aS5nZXRCdWZmZXIoYSk7aWYodSlsLnN0YXRlPSRuLGwuYnVmZmVyPXUsbC50eXBlPTA7ZWxzZSBpZihkZS5jb21tYW5kKCJvYmplY3QiPT10eXBlb2YgYSYmYSwiaW52YWxpZCBkYXRhIGZvciBhdHRyaWJ1dGUgIit0LHIuY29tbWFuZFN0ciksYS5jb25zdGFudCl7dmFyIGM9YS5jb25zdGFudDtsLmJ1ZmZlcj0ibnVsbCIsbC5zdGF0ZT10aSwibnVtYmVyIj09dHlwZW9mIGM/bC54PWM6KGRlLmNvbW1hbmQobXQoYykmJmMubGVuZ3RoPjAmJmMubGVuZ3RoPD00LCJpbnZhbGlkIGNvbnN0YW50IGZvciBhdHRyaWJ1dGUgIit0LHIuY29tbWFuZFN0ciksS24uZm9yRWFjaChmdW5jdGlvbih0LGUpe2U8Yy5sZW5ndGgmJihsW3RdPWNbZV0pfSkpfWVsc2V7dT1VdChhLmJ1ZmZlcik/aS5nZXRCdWZmZXIoaS5jcmVhdGUoYS5idWZmZXIsWmksITEsITApKTppLmdldEJ1ZmZlcihhLmJ1ZmZlciksZGUuY29tbWFuZCghIXUsJ21pc3NpbmcgYnVmZmVyIGZvciBhdHRyaWJ1dGUgIicrdCsnIicsci5jb21tYW5kU3RyKTt2YXIgaD0wfGEub2Zmc2V0O2RlLmNvbW1hbmQoaD49MCwnaW52YWxpZCBvZmZzZXQgZm9yIGF0dHJpYnV0ZSAiJyt0KyciJyxyLmNvbW1hbmRTdHIpO3ZhciBmPTB8YS5zdHJpZGU7ZGUuY29tbWFuZChmPj0wJiZmPDI1NiwnaW52YWxpZCBzdHJpZGUgZm9yIGF0dHJpYnV0ZSAiJyt0KyciLCBtdXN0IGJlIGludGVnZXIgYmV0d2VlZW4gWzAsIDI1NV0nLHIuY29tbWFuZFN0cik7dmFyIGQ9MHxhLnNpemU7ZGUuY29tbWFuZCghKCJzaXplImluIGEpfHxkPjAmJmQ8PTQsJ2ludmFsaWQgc2l6ZSBmb3IgYXR0cmlidXRlICInK3QrJyIsIG11c3QgYmUgMSwyLDMsNCcsci5jb21tYW5kU3RyKTt2YXIgcD0hIWEubm9ybWFsaXplZCxtPTA7InR5cGUiaW4gYSYmKGRlLmNvbW1hbmRQYXJhbWV0ZXIoYS50eXBlLHplLCJpbnZhbGlkIHR5cGUgZm9yIGF0dHJpYnV0ZSAiK3Qsci5jb21tYW5kU3RyKSxtPXplW2EudHlwZV0pO3ZhciB2PTB8YS5kaXZpc29yOyJkaXZpc29yImluIGEmJihkZS5jb21tYW5kKDA9PT12fHxLLCdjYW5ub3Qgc3BlY2lmeSBkaXZpc29yIGZvciBhdHRyaWJ1dGUgIicrdCsnIiwgaW5zdGFuY2luZyBub3Qgc3VwcG9ydGVkJyxyLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmQodj49MCwnaW52YWxpZCBkaXZpc29yIGZvciBhdHRyaWJ1dGUgIicrdCsnIicsci5jb21tYW5kU3RyKSksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt2YXIgZT1yLmNvbW1hbmRTdHIsbj1bImJ1ZmZlciIsIm9mZnNldCIsImRpdmlzb3IiLCJub3JtYWxpemVkIiwidHlwZSIsInNpemUiLCJzdHJpZGUiXTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2RlLmNvbW1hbmQobi5pbmRleE9mKHIpPj0wLCd1bmtub3duIHBhcmFtZXRlciAiJytyKyciIGZvciBhdHRyaWJ1dGUgcG9pbnRlciAiJyt0KyciICh2YWxpZCBwYXJhbWV0ZXJzIGFyZSAnK24rIikiLGUpfSl9KSxsLmJ1ZmZlcj11LGwuc3RhdGU9JG4sbC5zaXplPWQsbC5ub3JtYWxpemVkPXAsbC50eXBlPW18fHUuZHR5cGUsbC5vZmZzZXQ9aCxsLnN0cmlkZT1mLGwuZGl2aXNvcj12fX1vW3RdPUd0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyaWJDYWNoZTtpZihzIGluIHIpcmV0dXJuIHJbc107dmFyIG49e2lzU3RyZWFtOiExfTtyZXR1cm4gT2JqZWN0LmtleXMobCkuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPWxbdF19KSxsLmJ1ZmZlciYmKG4uYnVmZmVyPXQubGluayhsLmJ1ZmZlciksbi50eXBlPW4udHlwZXx8bi5idWZmZXIrIi5kdHlwZSIpLHJbc109bixufSl9KSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtmdW5jdGlvbiBpKHQpe24odVt0XSwiPSIsYSwiLiIsdCwifDA7Iil9dmFyIGE9ZS5pbnZva2UobixyKSxvPWUuc2hhcmVkLHM9by5pc0J1ZmZlckFyZ3MsbD1vLmJ1ZmZlcjtkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KG4sYSsiJiYodHlwZW9mICIrYSsnPT09Im9iamVjdCJ8fHR5cGVvZiAnK2ErJz09PSJmdW5jdGlvbiIpJiYoJytzKyIoIithKyIpfHwiK2wrIi5nZXRCdWZmZXIoIithKyIpfHwiK2wrIi5nZXRCdWZmZXIoIithKyIuYnVmZmVyKXx8IitzKyIoIithKycuYnVmZmVyKXx8KCJjb25zdGFudCIgaW4gJythKyImJih0eXBlb2YgIithKycuY29uc3RhbnQ9PT0ibnVtYmVyInx8JytvLmlzQXJyYXlMaWtlKyIoIithKyIuY29uc3RhbnQpKSkpIiwnaW52YWxpZCBkeW5hbWljIGF0dHJpYnV0ZSAiJyt0KyciJyl9KTt2YXIgdT17aXNTdHJlYW06bi5kZWYoITEpfSxjPW5ldyBXO2Muc3RhdGU9JG4sT2JqZWN0LmtleXMoYykuZm9yRWFjaChmdW5jdGlvbih0KXt1W3RdPW4uZGVmKCIiK2NbdF0pfSk7dmFyIGg9dS5idWZmZXIsZj11LnR5cGU7cmV0dXJuIG4oImlmKCIscywiKCIsYSwiKSl7Iix1LmlzU3RyZWFtLCI9dHJ1ZTsiLGgsIj0iLGwsIi5jcmVhdGVTdHJlYW0oIixaaSwiLCIsYSwiKTsiLGYsIj0iLGgsIi5kdHlwZTsiLCJ9ZWxzZXsiLGgsIj0iLGwsIi5nZXRCdWZmZXIoIixhLCIpOyIsImlmKCIsaCwiKXsiLGYsIj0iLGgsIi5kdHlwZTsiLCd9ZWxzZSBpZigiY29uc3RhbnQiIGluICcsYSwiKXsiLHUuc3RhdGUsIj0iLHRpLCI7IiwiaWYodHlwZW9mICIrYSsnLmNvbnN0YW50ID09PSAibnVtYmVyIil7Jyx1W0tuWzBdXSwiPSIsYSwiLmNvbnN0YW50OyIsS24uc2xpY2UoMSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1W3RdfSkuam9pbigiPSIpLCI9MDsiLCJ9ZWxzZXsiLEtuLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB1W3RdKyI9IithKyIuY29uc3RhbnQubGVuZ3RoPj0iK2UrIj8iK2ErIi5jb25zdGFudFsiK2UrIl06MDsifSkuam9pbigiIiksIn19ZWxzZXsiLCJpZigiLHMsIigiLGEsIi5idWZmZXIpKXsiLGgsIj0iLGwsIi5jcmVhdGVTdHJlYW0oIixaaSwiLCIsYSwiLmJ1ZmZlcik7IiwifWVsc2V7IixoLCI9IixsLCIuZ2V0QnVmZmVyKCIsYSwiLmJ1ZmZlcik7IiwifSIsZiwnPSJ0eXBlIiBpbiAnLGEsIj8iLG8uZ2xUeXBlcywiWyIsYSwiLnR5cGVdOiIsaCwiLmR0eXBlOyIsdS5ub3JtYWxpemVkLCI9ISEiLGEsIi5ub3JtYWxpemVkOyIpLGkoInNpemUiKSxpKCJvZmZzZXQiKSxpKCJzdHJpZGUiKSxpKCJkaXZpc29yIiksbigifX0iKSxuLmV4aXQoImlmKCIsdS5pc1N0cmVhbSwiKXsiLGwsIi5kZXN0cm95U3RyZWFtKCIsaCwiKTsiLCJ9IiksdX12YXIgcj1hW3RdO29bdF09WXQocixlKX0pLG99ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnN0YXRpYyxyPXQuZHluYW1pYyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWVbdF07blt0XT1HdChmdW5jdGlvbih0LGUpe3JldHVybiJudW1iZXIiPT10eXBlb2Ygcnx8ImJvb2xlYW4iPT10eXBlb2Ygcj8iIityOnQubGluayhyKX0pfSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO25bdF09WXQoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9KSxufWZ1bmN0aW9uIEUodCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3ZhciBlPXVbdF07ZSYmKGhbdF09ZSl9dmFyIG89dC5zdGF0aWMscz10LmR5bmFtaWM7ZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24odCl7ZGUuY29tbWFuZChlLmluZGV4T2YodCk+PTAsJ3Vua25vd24gcGFyYW1ldGVyICInK3QrJyInLGkuY29tbWFuZFN0cil9KX12YXIgZT1bUGksT2ksUmksRmksamksQmksTmksVWksRGldLmNvbmNhdChldCk7dChvKSx0KHMpfSk7dmFyIGw9eCh0LGkpLHU9Xyh0LGwsaSksYz1NKHQsaSksaD1rKHQsaSksZj13KHQsaSk7YShJaSksYShtKHppKSk7dmFyIGQ9T2JqZWN0LmtleXMoaCkubGVuZ3RoPjAscD17ZnJhbWVidWZmZXI6bCxkcmF3OmMsc2hhZGVyOmYsc3RhdGU6aCxkaXJ0eTpkfTtyZXR1cm4gcC5wcm9maWxlPWIodCxpKSxwLnVuaWZvcm1zPUEocixpKSxwLmF0dHJpYnV0ZXM9VChlLGkpLHAuY29udGV4dD1TKG4saSkscH1mdW5jdGlvbiBMKHQsZSxyKXt2YXIgbj10LnNoYXJlZCxpPW4uY29udGV4dCxhPXQuc2NvcGUoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Uuc2F2ZShpLCIuIituKTt2YXIgbz1yW25dO2EoaSwiLiIsbiwiPSIsby5hcHBlbmQodCxlKSwiOyIpfSksZShhKX1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBpLGE9dC5zaGFyZWQsbz1hLmdsLHM9YS5mcmFtZWJ1ZmZlcjtRJiYoaT1lLmRlZihhLmV4dGVuc2lvbnMsIi53ZWJnbF9kcmF3X2J1ZmZlcnMiKSk7dmFyIGwsdT10LmNvbnN0YW50cyxjPXUuZHJhd0J1ZmZlcixoPXUuYmFja0J1ZmZlcjtsPXI/ci5hcHBlbmQodCxlKTplLmRlZihzLCIubmV4dCIpLG58fGUoImlmKCIsbCwiIT09IixzLCIuY3VyKXsiKSxlKCJpZigiLGwsIil7IixvLCIuYmluZEZyYW1lYnVmZmVyKCIsamEsIiwiLGwsIi5mcmFtZWJ1ZmZlcik7IiksUSYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGMsIlsiLGwsIi5jb2xvckF0dGFjaG1lbnRzLmxlbmd0aF0pOyIpLGUoIn1lbHNleyIsbywiLmJpbmRGcmFtZWJ1ZmZlcigiLGphLCIsbnVsbCk7IiksUSYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGgsIik7IiksZSgifSIscywiLmN1cj0iLGwsIjsiKSxufHxlKCJ9Iil9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLGE9dC5jdXJyZW50LG89dC5uZXh0LHM9bi5jdXJyZW50LGw9bi5uZXh0LHU9dC5jb25kKHMsIi5kaXJ0eSIpO2V0LmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49bShlKTtpZighKG4gaW4gci5zdGF0ZSkpe3ZhciBjLGg7aWYobiBpbiBvKXtjPW9bbl0saD1hW25dO3ZhciBmPUooJFtuXS5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHUuZGVmKGMsIlsiLHQsIl0iKX0pO3UodC5jb25kKGYubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiE9PSIraCsiWyIrZSsiXSJ9KS5qb2luKCJ8fCIpKS50aGVuKGksIi4iLG50W25dLCIoIixmLCIpOyIsZi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCsiWyIrZSsiXT0iK3R9KS5qb2luKCI7IiksIjsiKSl9ZWxzZXtjPXUuZGVmKGwsIi4iLG4pO3ZhciBkPXQuY29uZChjLCIhPT0iLHMsIi4iLG4pO3UoZCksbiBpbiBydD9kKHQuY29uZChjKS50aGVuKGksIi5lbmFibGUoIixydFtuXSwiKTsiKS5lbHNlKGksIi5kaXNhYmxlKCIscnRbbl0sIik7IikscywiLiIsbiwiPSIsYywiOyIpOmQoaSwiLiIsbnRbbl0sIigiLGMsIik7IixzLCIuIixuLCI9IixjLCI7Iil9fX0pLDA9PT1PYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJnUocywiLmRpcnR5PWZhbHNlOyIpLGUodSl9ZnVuY3Rpb24gSSh0LGUscixuKXt2YXIgaT10LnNoYXJlZCxhPXQuY3VycmVudCxvPWkuY3VycmVudCxzPWkuZ2w7VnQoT2JqZWN0LmtleXMocikpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGw9cltpXTtpZighbnx8bihsKSl7dmFyIHU9bC5hcHBlbmQodCxlKTtpZihydFtpXSl7dmFyIGM9cnRbaV07cXQobCk/dT9lKHMsIi5lbmFibGUoIixjLCIpOyIpOmUocywiLmRpc2FibGUoIixjLCIpOyIpOmUodC5jb25kKHUpLnRoZW4ocywiLmVuYWJsZSgiLGMsIik7IikuZWxzZShzLCIuZGlzYWJsZSgiLGMsIik7IikpLGUobywiLiIsaSwiPSIsdSwiOyIpfWVsc2UgaWYobXQodSkpe3ZhciBoPWFbaV07ZShzLCIuIixudFtpXSwiKCIsdSwiKTsiLHUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgrIlsiK2UrIl09Iit0fSkuam9pbigiOyIpLCI7Iil9ZWxzZSBlKHMsIi4iLG50W2ldLCIoIix1LCIpOyIsbywiLiIsaSwiPSIsdSwiOyIpfX0pfWZ1bmN0aW9uIEQodCxlKXtLJiYodC5pbnN0YW5jaW5nPWUuZGVmKHQuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpfWZ1bmN0aW9uIFAodCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBwZXJmb3JtYW5jZT8iRGF0ZS5ub3coKSI6InBlcmZvcm1hbmNlLm5vdygpIn1mdW5jdGlvbiBvKHQpe3U9ZS5kZWYoKSx0KHUsIj0iLGEoKSwiOyIpLCJzdHJpbmciPT10eXBlb2YgaT90KHAsIi5jb3VudCs9IixpLCI7Iik6dChwLCIuY291bnQrKzsiKSxkJiYobj8oYz1lLmRlZigpLHQoYywiPSIsdiwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCk7IikpOnQodiwiLmJlZ2luUXVlcnkoIixwLCIpOyIpKX1mdW5jdGlvbiBzKHQpe3QocCwiLmNwdVRpbWUrPSIsYSgpLCItIix1LCI7IiksZCYmKG4/dCh2LCIucHVzaFNjb3BlU3RhdHMoIixjLCIsIix2LCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKSwiLHAsIik7Iik6dCh2LCIuZW5kUXVlcnkoKTsiKSl9ZnVuY3Rpb24gbCh0KXt2YXIgcj1lLmRlZihtLCIucHJvZmlsZSIpO2UobSwiLnByb2ZpbGU9Iix0LCI7IiksZS5leGl0KG0sIi5wcm9maWxlPSIsciwiOyIpfXZhciB1LGMsaCxmPXQuc2hhcmVkLHA9dC5zdGF0cyxtPWYuY3VycmVudCx2PWYudGltZXIsZz1yLnByb2ZpbGU7aWYoZyl7aWYocXQoZykpcmV0dXJuIHZvaWQoZy5lbmFibGU/KG8oZSkscyhlLmV4aXQpLGwoInRydWUiKSk6bCgiZmFsc2UiKSk7aD1nLmFwcGVuZCh0LGUpLGwoaCl9ZWxzZSBoPWUuZGVmKG0sIi5wcm9maWxlIik7dmFyIHk9dC5ibG9jaygpO28oeSksZSgiaWYoIixoLCIpeyIseSwifSIpO3ZhciBiPXQuYmxvY2soKTtzKGIpLGUuZXhpdCgiaWYoIixoLCIpeyIsYiwifSIpfWZ1bmN0aW9uIE8odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3N3aXRjaCh0KXtjYXNlIHVhOmNhc2UgZGE6Y2FzZSBnYTpyZXR1cm4gMjtjYXNlIGNhOmNhc2UgcGE6Y2FzZSB5YTpyZXR1cm4gMztjYXNlIGhhOmNhc2UgbWE6Y2FzZSBiYTpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX1mdW5jdGlvbiBvKHIsbixpKXtmdW5jdGlvbiBhKCl7ZSgiaWYoISIsYywiLmJ1ZmZlcil7IixsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIix1LCIpO30iKTt2YXIgcixhPWkudHlwZTtpZihyPWkuc2l6ZT9lLmRlZihpLnNpemUsInx8IixuKTpuLGUoImlmKCIsYywiLnR5cGUhPT0iLGEsInx8IixjLCIuc2l6ZSE9PSIsciwifHwiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBjKyIuIit0KyIhPT0iK2lbdF19KS5qb2luKCJ8fCIpLCIpeyIsbCwiLmJpbmRCdWZmZXIoIixaaSwiLCIsZiwiLmJ1ZmZlcik7IixsLCIudmVydGV4QXR0cmliUG9pbnRlcigiLFt1LHIsYSxpLm5vcm1hbGl6ZWQsaS5zdHJpZGUsaS5vZmZzZXRdLCIpOyIsYywiLnR5cGU9IixhLCI7IixjLCIuc2l6ZT0iLHIsIjsiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBjKyIuIit0KyI9IitpW3RdKyI7In0pLmpvaW4oIiIpLCJ9IiksSyl7dmFyIG89aS5kaXZpc29yO2UoImlmKCIsYywiLmRpdmlzb3IhPT0iLG8sIil7Iix0Lmluc3RhbmNpbmcsIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIixbdSxvXSwiKTsiLGMsIi5kaXZpc29yPSIsbywiO30iKX19ZnVuY3Rpb24gbygpe2UoImlmKCIsYywiLmJ1ZmZlcil7IixsLCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsdSwiKTsiLCJ9aWYoIixLbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gYysiLiIrdCsiIT09IitkW2VdfSkuam9pbigifHwiKSwiKXsiLGwsIi52ZXJ0ZXhBdHRyaWI0ZigiLHUsIiwiLGQsIik7IixLbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gYysiLiIrdCsiPSIrZFtlXSsiOyJ9KS5qb2luKCIiKSwifSIpfXZhciBsPXMuZ2wsdT1lLmRlZihyLCIubG9jYXRpb24iKSxjPWUuZGVmKHMuYXR0cmlidXRlcywiWyIsdSwiXSIpLGg9aS5zdGF0ZSxmPWkuYnVmZmVyLGQ9W2kueCxpLnksaS56LGkud10scD1bImJ1ZmZlciIsIm5vcm1hbGl6ZWQiLCJvZmZzZXQiLCJzdHJpZGUiXTtoPT09JG4/YSgpOmg9PT10aT9vKCk6KGUoImlmKCIsaCwiPT09IiwkbiwiKXsiKSxhKCksZSgifWVsc2V7IiksbygpLGUoIn0iKSl9dmFyIHM9dC5zaGFyZWQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBzLGw9bi5uYW1lLHU9ci5hdHRyaWJ1dGVzW2xdO2lmKHUpe2lmKCFpKHUpKXJldHVybjtzPXUuYXBwZW5kKHQsZSl9ZWxzZXtpZighaShZYSkpcmV0dXJuO3ZhciBjPXQuc2NvcGVBdHRyaWIobCk7ZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLGMrIi5zdGF0ZSIsIm1pc3NpbmcgYXR0cmlidXRlICIrbCl9KSxzPXt9LE9iamVjdC5rZXlzKG5ldyBXKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3NbdF09ZS5kZWYoYywiLiIsdCl9KX1vKHQubGluayhuKSxhKG4uaW5mby50eXBlKSxzKX0pfWZ1bmN0aW9uIFIodCxyLG4saSxhKXtmb3IodmFyIG8scz10LnNoYXJlZCxsPXMuZ2wsdT0wO3U8aS5sZW5ndGg7Kyt1KXt2YXIgYyxoPWlbdV0sZj1oLm5hbWUsZD1oLmluZm8udHlwZSxwPW4udW5pZm9ybXNbZl0sbT10LmxpbmsoaCksdj1tKyIubG9jYXRpb24iO2lmKHApe2lmKCFhKHApKWNvbnRpbnVlO2lmKHF0KHApKXt2YXIgZz1wLnZhbHVlO2lmKGRlLmNvbW1hbmQobnVsbCE9PWcmJnZvaWQgMCE9PWcsJ21pc3NpbmcgdW5pZm9ybSAiJytmKyciJyx0LmNvbW1hbmRTdHIpLGQ9PT1NYXx8ZD09PWthKXtkZS5jb21tYW5kKCJmdW5jdGlvbiI9PXR5cGVvZiBnJiYoZD09PU1hJiYoInRleHR1cmUyZCI9PT1nLl9yZWdsVHlwZXx8ImZyYW1lYnVmZmVyIj09PWcuX3JlZ2xUeXBlKXx8ZD09PWthJiYoInRleHR1cmVDdWJlIj09PWcuX3JlZ2xUeXBlfHwiZnJhbWVidWZmZXJDdWJlIj09PWcuX3JlZ2xUeXBlKSksImludmFsaWQgdGV4dHVyZSBmb3IgdW5pZm9ybSAiK2YsdC5jb21tYW5kU3RyKTt2YXIgeT10LmxpbmsoZy5fdGV4dHVyZXx8Zy5jb2xvclswXS5fdGV4dHVyZSk7cihsLCIudW5pZm9ybTFpKCIsdiwiLCIseSsiLmJpbmQoKSk7Iiksci5leGl0KHksIi51bmJpbmQoKTsiKX1lbHNlIGlmKGQ9PT14YXx8ZD09PV9hfHxkPT09d2Epe2RlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZGUuY29tbWFuZChtdChnKSwiaW52YWxpZCBtYXRyaXggZm9yIHVuaWZvcm0gIitmLHQuY29tbWFuZFN0ciksZGUuY29tbWFuZChkPT09eGEmJjQ9PT1nLmxlbmd0aHx8ZD09PV9hJiY5PT09Zy5sZW5ndGh8fGQ9PT13YSYmMTY9PT1nLmxlbmd0aCwiaW52YWxpZCBsZW5ndGggZm9yIG1hdHJpeCB1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpfSk7dmFyIGI9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KFsiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGcpKyJdKSIpLHg9MjtkPT09X2E/eD0zOmQ9PT13YSYmKHg9NCkscihsLCIudW5pZm9ybU1hdHJpeCIseCwiZnYoIix2LCIsZmFsc2UsIixiLCIpOyIpfWVsc2V7c3dpdGNoKGQpe2Nhc2UgbGE6ZGUuY29tbWFuZFR5cGUoZywibnVtYmVyIiwidW5pZm9ybSAiK2YsdC5jb21tYW5kU3RyKSxvPSIxZiI7YnJlYWs7Y2FzZSB1YTpkZS5jb21tYW5kKG10KGcpJiYyPT09Zy5sZW5ndGgsInVuaWZvcm0gIitmLHQuY29tbWFuZFN0ciksbz0iMmYiO2JyZWFrO2Nhc2UgY2E6ZGUuY29tbWFuZChtdChnKSYmMz09PWcubGVuZ3RoLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjNmIjticmVhaztjYXNlIGhhOmRlLmNvbW1hbmQobXQoZykmJjQ9PT1nLmxlbmd0aCwidW5pZm9ybSAiK2YsdC5jb21tYW5kU3RyKSxvPSI0ZiI7YnJlYWs7Y2FzZSB2YTpkZS5jb21tYW5kVHlwZShnLCJib29sZWFuIiwidW5pZm9ybSAiK2YsdC5jb21tYW5kU3RyKSxvPSIxaSI7YnJlYWs7Y2FzZSBmYTpkZS5jb21tYW5kVHlwZShnLCJudW1iZXIiLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjFpIjticmVhaztjYXNlIGdhOmNhc2UgZGE6ZGUuY29tbWFuZChtdChnKSYmMj09PWcubGVuZ3RoLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjJpIjticmVhaztjYXNlIHlhOmNhc2UgcGE6ZGUuY29tbWFuZChtdChnKSYmMz09PWcubGVuZ3RoLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjNpIjticmVhaztjYXNlIGJhOmNhc2UgbWE6ZGUuY29tbWFuZChtdChnKSYmND09PWcubGVuZ3RoLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjRpIn1yKGwsIi51bmlmb3JtIixvLCIoIix2LCIsIixtdChnKT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChnKTpnLCIpOyIpfWNvbnRpbnVlfWM9cC5hcHBlbmQodCxyKX1lbHNle2lmKCFhKFlhKSljb250aW51ZTtjPXIuZGVmKHMudW5pZm9ybXMsIlsiLGUuaWQoZiksIl0iKX1kPT09TWE/cigiaWYoIixjLCImJiIsYywnLl9yZWdsVHlwZT09PSJmcmFtZWJ1ZmZlciIpeycsYywiPSIsYywiLmNvbG9yWzBdOyIsIn0iKTpkPT09a2EmJnIoImlmKCIsYywiJiYiLGMsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXJDdWJlIil7JyxjLCI9IixjLCIuY29sb3JbMF07IiwifSIpLGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG4pe3QuYXNzZXJ0KHIsZSwnYmFkIGRhdGEgb3IgbWlzc2luZyBmb3IgdW5pZm9ybSAiJytmKyciLiAgJytuKX1mdW5jdGlvbiBuKHQpe2UoInR5cGVvZiAiK2MrJz09PSInK3QrJyInLCJpbnZhbGlkIHR5cGUsIGV4cGVjdGVkICIrdCl9ZnVuY3Rpb24gaShyLG4pe2Uocy5pc0FycmF5TGlrZSsiKCIrYysiKSYmIitjKyIubGVuZ3RoPT09IityLCJpbnZhbGlkIHZlY3Rvciwgc2hvdWxkIGhhdmUgbGVuZ3RoICIrcix0LmNvbW1hbmRTdHIpfWZ1bmN0aW9uIGEocil7ZSgidHlwZW9mICIrYysnPT09ImZ1bmN0aW9uIiYmJytjKycuX3JlZ2xUeXBlPT09InRleHR1cmUnKyhyPT09S2k/IjJkIjoiQ3ViZSIpKyciJywiaW52YWxpZCB0ZXh0dXJlIHR5cGUiLHQuY29tbWFuZFN0cil9c3dpdGNoKGQpe2Nhc2UgZmE6bigibnVtYmVyIik7YnJlYWs7Y2FzZSBkYTppKDIsIm51bWJlciIpO2JyZWFrO2Nhc2UgcGE6aSgzLCJudW1iZXIiKTticmVhaztjYXNlIG1hOmkoNCwibnVtYmVyIik7YnJlYWs7Y2FzZSBsYTpuKCJudW1iZXIiKTticmVhaztjYXNlIHVhOmkoMiwibnVtYmVyIik7YnJlYWs7Y2FzZSBjYTppKDMsIm51bWJlciIpO2JyZWFrO2Nhc2UgaGE6aSg0LCJudW1iZXIiKTticmVhaztjYXNlIHZhOm4oImJvb2xlYW4iKTticmVhaztjYXNlIGdhOmkoMiwiYm9vbGVhbiIpO2JyZWFrO2Nhc2UgeWE6aSgzLCJib29sZWFuIik7YnJlYWs7Y2FzZSBiYTppKDQsImJvb2xlYW4iKTticmVhaztjYXNlIHhhOmkoNCwibnVtYmVyIik7YnJlYWs7Y2FzZSBfYTppKDksIm51bWJlciIpO2JyZWFrO2Nhc2Ugd2E6aSgxNiwibnVtYmVyIik7YnJlYWs7Y2FzZSBNYTphKEtpKTticmVhaztjYXNlIGthOmEoUWkpfX0pO3ZhciBfPTE7c3dpdGNoKGQpe2Nhc2UgTWE6Y2FzZSBrYTp2YXIgdz1yLmRlZihjLCIuX3RleHR1cmUiKTtyKGwsIi51bmlmb3JtMWkoIix2LCIsIix3LCIuYmluZCgpKTsiKSxyLmV4aXQodywiLnVuYmluZCgpOyIpO2NvbnRpbnVlO2Nhc2UgZmE6Y2FzZSB2YTpvPSIxaSI7YnJlYWs7Y2FzZSBkYTpjYXNlIGdhOm89IjJpIixfPTI7YnJlYWs7Y2FzZSBwYTpjYXNlIHlhOm89IjNpIixfPTM7YnJlYWs7Y2FzZSBtYTpjYXNlIGJhOm89IjRpIixfPTQ7YnJlYWs7Y2FzZSBsYTpvPSIxZiI7YnJlYWs7Y2FzZSB1YTpvPSIyZiIsXz0yO2JyZWFrO2Nhc2UgY2E6bz0iM2YiLF89MzticmVhaztjYXNlIGhhOm89IjRmIixfPTQ7YnJlYWs7Y2FzZSB4YTpvPSJNYXRyaXgyZnYiO2JyZWFrO2Nhc2UgX2E6bz0iTWF0cml4M2Z2IjticmVhaztjYXNlIHdhOm89Ik1hdHJpeDRmdiJ9aWYocihsLCIudW5pZm9ybSIsbywiKCIsdiwiLCIpLCJNIj09PW8uY2hhckF0KDApKXt2YXIgTT1NYXRoLnBvdyhkLXhhKzIsMiksaz10Lmdsb2JhbC5kZWYoIm5ldyBGbG9hdDMyQXJyYXkoIixNLCIpIik7cigiZmFsc2UsKEFycmF5LmlzQXJyYXkoIixjLCIpfHwiLGMsIiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/IixjLCI6KCIsSihNLGZ1bmN0aW9uKHQpe3JldHVybiBrKyJbIit0KyJdPSIrYysiWyIrdCsiXSJ9KSwiLCIsaywiKSIpfWVsc2UgcihfPjE/SihfLGZ1bmN0aW9uKHQpe3JldHVybiBjKyJbIit0KyJdIn0pOmMpO3IoIik7Iil9fWZ1bmN0aW9uIEYodCxlLHIsbil7ZnVuY3Rpb24gaShpKXt2YXIgYT1jW2ldO3JldHVybiBhP2EuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwP2EuYXBwZW5kKHQscik6YS5hcHBlbmQodCxlKTplLmRlZih1LCIuIixpKX1mdW5jdGlvbiBhKCl7ZnVuY3Rpb24gdCgpe3IodiwiLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKCIsW2YscCxnLGQrIjw8KCgiK2crIi0iK1FuKyIpPj4xKSIsbV0sIik7Iil9ZnVuY3Rpb24gZSgpe3IodiwiLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSgiLFtmLGQscCxtXSwiKTsiKX1oP3k/dCgpOihyKCJpZigiLGgsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3IobCsiLmRyYXdFbGVtZW50cygiK1tmLHAsZyxkKyI8PCgoIitnKyItIitRbisiKT4+MSkiXSsiKTsiKX1mdW5jdGlvbiBlKCl7cihsKyIuZHJhd0FycmF5cygiK1tmLGQscF0rIik7Iil9aD95P3QoKToocigiaWYoIixoLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9dmFyIHM9dC5zaGFyZWQsbD1zLmdsLHU9cy5kcmF3LGM9bi5kcmF3LGg9ZnVuY3Rpb24oKXt2YXIgaSxhPWMuZWxlbWVudHMsbz1lO3JldHVybiBhPygoYS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxhLnByb3BEZXApJiYobz1yKSxpPWEuYXBwZW5kKHQsbykpOmk9by5kZWYodSwiLiIsRmkpLGkmJm8oImlmKCIraSsiKSIrbCsiLmJpbmRCdWZmZXIoIitKaSsiLCIraSsiLmJ1ZmZlci5idWZmZXIpOyIpLGl9KCksZj1pKGppKSxkPWkoQmkpLHA9ZnVuY3Rpb24oKXt2YXIgaSxhPWMuY291bnQsbz1lO3JldHVybiBhPygoYS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxhLnByb3BEZXApJiYobz1yKSxpPWEuYXBwZW5kKHQsbyksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXthLk1JU1NJTkcmJnQuYXNzZXJ0KGUsImZhbHNlIiwibWlzc2luZyB2ZXJ0ZXggY291bnQiKSxhLkRZTkFNSUMmJnQuYXNzZXJ0KG8saSsiPj0wIiwibWlzc2luZyB2ZXJ0ZXggY291bnQiKX0pKTooaT1vLmRlZih1LCIuIixOaSksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChvLGkrIj49MCIsIm1pc3NpbmcgdmVydGV4IGNvdW50Iil9KSksaX0oKTtpZigibnVtYmVyIj09dHlwZW9mIHApe2lmKDA9PT1wKXJldHVybn1lbHNlIHIoImlmKCIscCwiKXsiKSxyLmV4aXQoIn0iKTt2YXIgbSx2O0smJihtPWkoVWkpLHY9dC5pbnN0YW5jaW5nKTt2YXIgZz1oKyIudHlwZSIseT1jLmVsZW1lbnRzJiZxdChjLmVsZW1lbnRzKTtLJiYoIm51bWJlciIhPXR5cGVvZiBtfHxtPj0wKT8ic3RyaW5nIj09dHlwZW9mIG0/KHIoImlmKCIsbSwiPjApeyIpLGEoKSxyKCJ9ZWxzZSBpZigiLG0sIjwwKXsiKSxvKCkscigifSIpKTphKCk6bygpfWZ1bmN0aW9uIGoodCxlLHIsbixpKXt2YXIgYT15KCksbz1hLnByb2MoImJvZHkiLGkpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2EuY29tbWFuZFN0cj1lLmNvbW1hbmRTdHIsYS5jb21tYW5kPWEubGluayhlLmNvbW1hbmRTdHIpfSksSyYmKGEuaW5zdGFuY2luZz1vLmRlZihhLnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKSx0KGEsbyxyLG4pLGEuY29tcGlsZSgpLmJvZHl9ZnVuY3Rpb24gTih0LGUscixuKXtEKHQsZSksTyh0LGUscixuLmF0dHJpYnV0ZXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLFIodCxlLHIsbi51bmlmb3JtcyxmdW5jdGlvbigpe3JldHVybiEwfSksRih0LGUsZSxyKX1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dC5wcm9jKCJkcmF3IiwxKTtEKHQsciksTCh0LHIsZS5jb250ZXh0KSxDKHQscixlLmZyYW1lYnVmZmVyKSx6KHQscixlKSxJKHQscixlLnN0YXRlKSxQKHQscixlLCExLCEwKTt2YXIgbj1lLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHIpO2lmKHIodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pTih0LHIsZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3ZhciBpPXQuZ2xvYmFsLmRlZigie30iKSxhPXIuZGVmKG4sIi5pZCIpLG89ci5kZWYoaSwiWyIsYSwiXSIpO3IodC5jb25kKG8pLnRoZW4obywiLmNhbGwodGhpcyxhMCk7IikuZWxzZShvLCI9IixpLCJbIixhLCJdPSIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBqKE4sdCxlLHIsMSl9KSwiKCIsbiwiKTsiLG8sIi5jYWxsKHRoaXMsYTApOyIpKX1PYmplY3Qua2V5cyhlLnN0YXRlKS5sZW5ndGg+MCYmcih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKX1mdW5jdGlvbiBVKHQsZSxyLG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4hMH10LmJhdGNoSWQ9ImExIixEKHQsZSksTyh0LGUscixuLmF0dHJpYnV0ZXMsaSksUih0LGUscixuLnVuaWZvcm1zLGkpLEYodCxlLGUscil9ZnVuY3Rpb24gVih0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0LmNvbnRleHREZXAmJm98fHQucHJvcERlcH1mdW5jdGlvbiBhKHQpe3JldHVybiFpKHQpfUQodCxlKTt2YXIgbz1yLmNvbnRleHREZXAscz1lLmRlZigpLGw9ZS5kZWYoKTt0LnNoYXJlZC5wcm9wcz1sLHQuYmF0Y2hJZD1zO3ZhciB1PXQuc2NvcGUoKSxjPXQuc2NvcGUoKTtpZihlKHUuZW50cnksImZvcigiLHMsIj0wOyIscywiPCIsImExIiwiOysrIixzLCIpeyIsbCwiPSIsImEwIiwiWyIscywiXTsiLGMsIn0iLHUuZXhpdCksci5uZWVkc0NvbnRleHQmJkwodCxjLHIuY29udGV4dCksci5uZWVkc0ZyYW1lYnVmZmVyJiZDKHQsYyxyLmZyYW1lYnVmZmVyKSxJKHQsYyxyLnN0YXRlLGkpLHIucHJvZmlsZSYmaShyLnByb2ZpbGUpJiZQKHQsYyxyLCExLCEwKSxuKU8odCx1LHIsbi5hdHRyaWJ1dGVzLGEpLE8odCxjLHIsbi5hdHRyaWJ1dGVzLGkpLFIodCx1LHIsbi51bmlmb3JtcyxhKSxSKHQsYyxyLG4udW5pZm9ybXMsaSksRih0LHUsYyxyKTtlbHNle3ZhciBoPXQuZ2xvYmFsLmRlZigie30iKSxmPXIuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQsYyksZD1jLmRlZihmLCIuaWQiKSxwPWMuZGVmKGgsIlsiLGQsIl0iKTtjKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLGYsIi5wcm9ncmFtKTsiLCJpZighIixwLCIpeyIscCwiPSIsaCwiWyIsZCwiXT0iLHQubGluayhmdW5jdGlvbihlKXtyZXR1cm4gaihVLHQscixlLDIpfSksIigiLGYsIik7fSIscCwiLmNhbGwodGhpcyxhMFsiLHMsIl0sIixzLCIpOyIpfX1mdW5jdGlvbiBIKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixEKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24odCl7aT1pfHxlLmNvbnRleHRbdF0ucHJvcERlcH0pLGl8fChMKHQsbixlLmNvbnRleHQpLGE9ITEpO3ZhciBvPWUuZnJhbWVidWZmZXIscz0hMTtvPyhvLnByb3BEZXA/aT1zPSEwOm8uY29udGV4dERlcCYmaSYmKHM9ITApLHN8fEModCxuLG8pKTpDKHQsbixudWxsKSxlLnN0YXRlLnZpZXdwb3J0JiZlLnN0YXRlLnZpZXdwb3J0LnByb3BEZXAmJihpPSEwKSx6KHQsbixlKSxJKHQsbixlLnN0YXRlLGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSksZS5wcm9maWxlJiZyKGUucHJvZmlsZSl8fFAodCxuLGUsITEsImExIiksZS5jb250ZXh0RGVwPWksZS5uZWVkc0NvbnRleHQ9YSxlLm5lZWRzRnJhbWVidWZmZXI9czt2YXIgbD1lLnNoYWRlci5wcm9nVmFyO2lmKGwuY29udGV4dERlcCYmaXx8bC5wcm9wRGVwKVYodCxuLGUsbnVsbCk7ZWxzZXt2YXIgdT1sLmFwcGVuZCh0LG4pO2lmKG4odC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsdSwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pVih0LG4sZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3ZhciBjPXQuZ2xvYmFsLmRlZigie30iKSxoPW4uZGVmKHUsIi5pZCIpLGY9bi5kZWYoYywiWyIsaCwiXSIpO24odC5jb25kKGYpLnRoZW4oZiwiLmNhbGwodGhpcyxhMCxhMSk7IikuZWxzZShmLCI9IixjLCJbIixoLCJdPSIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBqKFYsdCxlLHIsMil9KSwiKCIsdSwiKTsiLGYsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX19T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoPjAmJm4odC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7Iil9ZnVuY3Rpb24gcSh0LHIpe2Z1bmN0aW9uIG4oZSl7dmFyIG49ci5zaGFkZXJbZV07biYmaS5zZXQoYS5zaGFkZXIsIi4iK2Usbi5hcHBlbmQodCxpKSl9dmFyIGk9dC5wcm9jKCJzY29wZSIsMyk7dC5iYXRjaElkPSJhMiI7dmFyIGE9dC5zaGFyZWQsbz1hLmN1cnJlbnQ7TCh0LGksci5jb250ZXh0KSxyLmZyYW1lYnVmZmVyJiZyLmZyYW1lYnVmZmVyLmFwcGVuZCh0LGkpLFZ0KE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuc3RhdGVbZV0sbz1uLmFwcGVuZCh0LGkpO210KG8pP28uZm9yRWFjaChmdW5jdGlvbihyLG4pe2kuc2V0KHQubmV4dFtlXSwiWyIrbisiXSIscil9KTppLnNldChhLm5leHQsIi4iK2Usbyl9KSxQKHQsaSxyLCEwLCEwKSxbRmksQmksTmksVWksamldLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5kcmF3W2VdCjtuJiZpLnNldChhLmRyYXcsIi4iK2UsIiIrbi5hcHBlbmQodCxpKSl9KSxPYmplY3Qua2V5cyhyLnVuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2kuc2V0KGEudW5pZm9ybXMsIlsiK2UuaWQobikrIl0iLHIudW5pZm9ybXNbbl0uYXBwZW5kKHQsaSkpfSksT2JqZWN0LmtleXMoci5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuYXR0cmlidXRlc1tlXS5hcHBlbmQodCxpKSxhPXQuc2NvcGVBdHRyaWIoZSk7T2JqZWN0LmtleXMobmV3IFcpLmZvckVhY2goZnVuY3Rpb24odCl7aS5zZXQoYSwiLiIrdCxuW3RdKX0pfSksbihPaSksbihSaSksT2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoPjAmJihpKG8sIi5kaXJ0eT10cnVlOyIpLGkuZXhpdChvLCIuZGlydHk9dHJ1ZTsiKSksaSgiYTEoIix0LnNoYXJlZC5jb250ZXh0LCIsYTAsIix0LmJhdGNoSWQsIik7Iil9ZnVuY3Rpb24gRyh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFtdCh0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZih2ZS5pc0R5bmFtaWModFtlW3JdXSkpcmV0dXJuITA7cmV0dXJuITF9fWZ1bmN0aW9uIFkodCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtvLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49aVtyXTtpZih2ZS5pc0R5bmFtaWMobikpe3ZhciBhPXQuaW52b2tlKGUsbik7ZShjLCIuIixyLCI9IixhLCI7Iil9fSl9dmFyIGk9ZS5zdGF0aWNbcl07aWYoaSYmRyhpKSl7dmFyIGE9dC5nbG9iYWwsbz1PYmplY3Qua2V5cyhpKSxzPSExLGw9ITEsdT0hMSxjPXQuZ2xvYmFsLmRlZigie30iKTtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9aVtlXTtpZih2ZS5pc0R5bmFtaWMocikpeyJmdW5jdGlvbiI9PXR5cGVvZiByJiYocj1pW2VdPXZlLnVuYm94KHIpKTt2YXIgbj1ZdChyLG51bGwpO3M9c3x8bi50aGlzRGVwLHU9dXx8bi5wcm9wRGVwLGw9bHx8bi5jb250ZXh0RGVwfWVsc2V7c3dpdGNoKGEoYywiLiIsZSwiPSIpLHR5cGVvZiByKXtjYXNlIm51bWJlciI6YShyKTticmVhaztjYXNlInN0cmluZyI6YSgnIicsciwnIicpO2JyZWFrO2Nhc2Uib2JqZWN0IjpBcnJheS5pc0FycmF5KHIpJiZhKCJbIixyLmpvaW4oKSwiXSIpO2JyZWFrO2RlZmF1bHQ6YSh0LmxpbmsocikpfWEoIjsiKX19KSxlLmR5bmFtaWNbcl09bmV3IHZlLkR5bmFtaWNWYXJpYWJsZShhaSx7dGhpc0RlcDpzLGNvbnRleHREZXA6bCxwcm9wRGVwOnUscmVmOmMsYXBwZW5kOm59KSxkZWxldGUgZS5zdGF0aWNbcl19fWZ1bmN0aW9uIFgodCxlLHIsbixpKXt2YXIgYT15KCk7YS5zdGF0cz1hLmxpbmsoaSksT2JqZWN0LmtleXMoZS5zdGF0aWMpLmZvckVhY2goZnVuY3Rpb24odCl7WShhLGUsdCl9KSxXaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1koYSx0LGUpfSk7dmFyIG89RSh0LGUscixuLGEpO3JldHVybiBCKGEsbykscShhLG8pLEgoYSxvKSxhLmNvbXBpbGUoKX12YXIgVz11LlJlY29yZCxaPXthZGQ6MzI3NzQsc3VidHJhY3Q6MzI3NzgsInJldmVyc2Ugc3VidHJhY3QiOjMyNzc5fTtyLmV4dF9ibGVuZF9taW5tYXgmJihaLm1pbj1DYSxaLm1heD16YSk7dmFyIEs9ci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLFE9ci53ZWJnbF9kcmF3X2J1ZmZlcnMsJD17ZGlydHk6ITAscHJvZmlsZTpwLnByb2ZpbGV9LHR0PXt9LGV0PVtdLHJ0PXt9LG50PXt9O3Yob2ksZWEpLHYoc2ksdGEpLGcobGksImJsZW5kQ29sb3IiLFswLDAsMCwwXSksZyh1aSwiYmxlbmRFcXVhdGlvblNlcGFyYXRlIixbUmEsUmFdKSxnKGNpLCJibGVuZEZ1bmNTZXBhcmF0ZSIsW09hLFBhLE9hLFBhXSksdihoaSxuYSwhMCksZyhmaSwiZGVwdGhGdW5jIixGYSksZyhkaSwiZGVwdGhSYW5nZSIsWzAsMV0pLGcocGksImRlcHRoTWFzayIsITApLGcobWksbWksWyEwLCEwLCEwLCEwXSksdih2aSwkaSksZyhnaSwiY3VsbEZhY2UiLFNhKSxnKHlpLHlpLExhKSxnKGJpLGJpLDEpLHYoeGksYWEpLGcoX2ksInBvbHlnb25PZmZzZXQiLFswLDBdKSx2KHdpLG9hKSx2KE1pLHNhKSxnKGtpLCJzYW1wbGVDb3ZlcmFnZSIsWzEsITFdKSx2KEFpLHJhKSxnKFRpLCJzdGVuY2lsTWFzayIsLTEpLGcoU2ksInN0ZW5jaWxGdW5jIixbSWEsMCwtMV0pLGcoRWksInN0ZW5jaWxPcFNlcGFyYXRlIixbVGEsRGEsRGEsRGFdKSxnKExpLCJzdGVuY2lsT3BTZXBhcmF0ZSIsW1NhLERhLERhLERhXSksdihDaSxpYSksZyh6aSwic2Npc3NvciIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxnKElpLElpLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIGl0PXtnbDp0LGNvbnRleHQ6ZixzdHJpbmdzOmUsbmV4dDp0dCxjdXJyZW50OiQsZHJhdzpoLGVsZW1lbnRzOmEsYnVmZmVyOmksc2hhZGVyOmMsYXR0cmlidXRlczp1LnN0YXRlLHVuaWZvcm1zOmwsZnJhbWVidWZmZXI6cyxleHRlbnNpb25zOnIsdGltZXI6ZCxpc0J1ZmZlckFyZ3M6VXR9LGF0PXtwcmltVHlwZXM6QmUsY29tcGFyZUZ1bmNzOlZhLGJsZW5kRnVuY3M6QmEsYmxlbmRFcXVhdGlvbnM6WixzdGVuY2lsT3BzOkhhLGdsVHlwZXM6emUsb3JpZW50YXRpb25UeXBlOkdhfTtkZS5vcHRpb25hbChmdW5jdGlvbigpe2l0LmlzQXJyYXlMaWtlPW10fSksUSYmKGF0LmJhY2tCdWZmZXI9W1NhXSxhdC5kcmF3QnVmZmVyPUoobi5tYXhEcmF3YnVmZmVycyxmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/WzBdOkoodCxmdW5jdGlvbih0KXtyZXR1cm4gTmErdH0pfSkpO3ZhciBvdD0wO3JldHVybntuZXh0OnR0LGN1cnJlbnQ6JCxwcm9jczpmdW5jdGlvbigpe3ZhciBlPXkoKSxyPWUucHJvYygicG9sbCIpLGk9ZS5wcm9jKCJyZWZyZXNoIiksYT1lLmJsb2NrKCk7cihhKSxpKGEpO3ZhciBvPWUuc2hhcmVkLHM9by5nbCxsPW8ubmV4dCx1PW8uY3VycmVudDthKHUsIi5kaXJ0eT1mYWxzZTsiKSxDKGUsciksQyhlLGksbnVsbCwhMCk7dmFyIGMsaD10LmdldEV4dGVuc2lvbigiYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpO2gmJihjPWUubGluayhoKSk7Zm9yKHZhciBmPTA7ZjxuLm1heEF0dHJpYnV0ZXM7KytmKXt2YXIgZD1pLmRlZihvLmF0dHJpYnV0ZXMsIlsiLGYsIl0iKSxwPWUuY29uZChkLCIuYnVmZmVyIik7cC50aGVuKHMsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGYsIik7IixzLCIuYmluZEJ1ZmZlcigiLFppLCIsIixkLCIuYnVmZmVyLmJ1ZmZlcik7IixzLCIudmVydGV4QXR0cmliUG9pbnRlcigiLGYsIiwiLGQsIi5zaXplLCIsZCwiLnR5cGUsIixkLCIubm9ybWFsaXplZCwiLGQsIi5zdHJpZGUsIixkLCIub2Zmc2V0KTsiKS5lbHNlKHMsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixmLCIpOyIscywiLnZlcnRleEF0dHJpYjRmKCIsZiwiLCIsZCwiLngsIixkLCIueSwiLGQsIi56LCIsZCwiLncpOyIsZCwiLmJ1ZmZlcj1udWxsOyIpLGkocCksaCYmaShjLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsZiwiLCIsZCwiLmRpdmlzb3IpOyIpfXJldHVybiBPYmplY3Qua2V5cyhydCkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1ydFt0XSxvPWEuZGVmKGwsIi4iLHQpLGM9ZS5ibG9jaygpO2MoImlmKCIsbywiKXsiLHMsIi5lbmFibGUoIixuLCIpfWVsc2V7IixzLCIuZGlzYWJsZSgiLG4sIil9Iix1LCIuIix0LCI9IixvLCI7IiksaShjKSxyKCJpZigiLG8sIiE9PSIsdSwiLiIsdCwiKXsiLGMsIn0iKX0pLE9iamVjdC5rZXlzKG50KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuLG8sYz1udFt0XSxoPSRbdF0sZj1lLmJsb2NrKCk7aWYoZihzLCIuIixjLCIoIiksbXQoaCkpe3ZhciBkPWgubGVuZ3RoO249ZS5nbG9iYWwuZGVmKGwsIi4iLHQpLG89ZS5nbG9iYWwuZGVmKHUsIi4iLHQpLGYoSihkLGZ1bmN0aW9uKHQpe3JldHVybiBuKyJbIit0KyJdIn0pLCIpOyIsSihkLGZ1bmN0aW9uKHQpe3JldHVybiBvKyJbIit0KyJdPSIrbisiWyIrdCsiXTsifSkuam9pbigiIikpLHIoImlmKCIsSihkLGZ1bmN0aW9uKHQpe3JldHVybiBuKyJbIit0KyJdIT09IitvKyJbIit0KyJdIn0pLmpvaW4oInx8IiksIil7IixmLCJ9Iil9ZWxzZSBuPWEuZGVmKGwsIi4iLHQpLG89YS5kZWYodSwiLiIsdCksZihuLCIpOyIsdSwiLiIsdCwiPSIsbiwiOyIpLHIoImlmKCIsbiwiIT09IixvLCIpeyIsZiwifSIpO2koZil9KSxlLmNvbXBpbGUoKX0oKSxjb21waWxlOlh9fWZ1bmN0aW9uIFd0KCl7cmV0dXJue2J1ZmZlckNvdW50OjAsZWxlbWVudHNDb3VudDowLGZyYW1lYnVmZmVyQ291bnQ6MCxzaGFkZXJDb3VudDowLHRleHR1cmVDb3VudDowLGN1YmVDb3VudDowLHJlbmRlcmJ1ZmZlckNvdW50OjAsbWF4VGV4dHVyZVVuaXRzOjB9fWZ1bmN0aW9uIFp0KHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSnQodCl7ZnVuY3Rpb24gZSgpe2lmKDA9PT1xLmxlbmd0aClyZXR1cm4gayYmay51cGRhdGUoKSx2b2lkKEo9bnVsbCk7Sj1nZS5uZXh0KGUpLGYoKTtmb3IodmFyIHQ9cS5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9cVt0XTtyJiZyKEUsbnVsbCwwKX1nLmZsdXNoKCksayYmay51cGRhdGUoKX1mdW5jdGlvbiByKCl7IUomJnEubGVuZ3RoPjAmJihKPWdlLm5leHQoZSkpfWZ1bmN0aW9uIG4oKXtKJiYoZ2UuY2FuY2VsKGUpLEo9bnVsbCl9ZnVuY3Rpb24gaSh0KXt0LnByZXZlbnREZWZhdWx0KCksYj0hMCxuKCksRy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfWZ1bmN0aW9uIGEodCl7Zy5nZXRFcnJvcigpLGI9ITEseC5yZXN0b3JlKCksTy5yZXN0b3JlKCksSS5yZXN0b3JlKCksUi5yZXN0b3JlKCksRi5yZXN0b3JlKCksai5yZXN0b3JlKCksayYmay5yZXN0b3JlKCksTi5wcm9jcy5yZWZyZXNoKCkscigpLFkuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBvKCl7cS5sZW5ndGg9MCxuKCksSCYmKEgucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbyxpKSxILnJlbW92ZUV2ZW50TGlzdGVuZXIocm8sYSkpLE8uY2xlYXIoKSxqLmNsZWFyKCksRi5jbGVhcigpLFIuY2xlYXIoKSxELmNsZWFyKCksSS5jbGVhcigpLGsmJmsuY2xlYXIoKSxaLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9dFtuXTt2ZS5pc0R5bmFtaWMoaSk/cltuXT12ZS51bmJveChpLG4pOmVbbl09aX0pLHtkeW5hbWljOnIsc3RhdGljOmV9fWZ1bmN0aW9uIHIodCl7Zm9yKDtkLmxlbmd0aDx0OylkLnB1c2gobnVsbCk7cmV0dXJuIGR9ZnVuY3Rpb24gbih0LGUpe3ZhciBuO2lmKGImJmRlLnJhaXNlKCJjb250ZXh0IGxvc3QiKSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gZi5jYWxsKHRoaXMsbnVsbCx0LDApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2ZvcihuPTA7bjx0OysrbilmLmNhbGwodGhpcyxudWxsLGUsbik7cmV0dXJufWlmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pZi5jYWxsKHRoaXMsdFtuXSxlLG4pO3JldHVybn1yZXR1cm4gZi5jYWxsKHRoaXMsdCxlLDApfWlmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYodD4wKXJldHVybiBoLmNhbGwodGhpcyxyKDB8dCksMHx0KX1lbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBjLmNhbGwodGhpcyx0KTtpZih0Lmxlbmd0aClyZXR1cm4gaC5jYWxsKHRoaXMsdCx0Lmxlbmd0aCl9fWRlKCEhdCwiaW52YWxpZCBhcmdzIHRvIHJlZ2woey4uLn0pIiksZGUudHlwZSh0LCJvYmplY3QiLCJpbnZhbGlkIGFyZ3MgdG8gcmVnbCh7Li4ufSkiKTt2YXIgaT1lKHQuY29udGV4dHx8e30pLGE9ZSh0LnVuaWZvcm1zfHx7fSksbz1lKHQuYXR0cmlidXRlc3x8e30pLHM9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQgaW4gcil7dmFyIGU9clt0XTtkZWxldGUgclt0XSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JbdCsiLiIrbl09ZVtuXX0pfX12YXIgcj0kdCh7fSx0KTtyZXR1cm4gZGVsZXRlIHIudW5pZm9ybXMsZGVsZXRlIHIuYXR0cmlidXRlcyxkZWxldGUgci5jb250ZXh0LCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIikscn0odCkpLGw9e2dwdVRpbWU6MCxjcHVUaW1lOjAsY291bnQ6MH0sdT1OLmNvbXBpbGUocyxvLGEsaSxsKSxjPXUuZHJhdyxoPXUuYmF0Y2gsZj11LnNjb3BlLGQ9W107cmV0dXJuICR0KG4se3N0YXRzOmx9KX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9MDtOLnByb2NzLnBvbGwoKTt2YXIgbj1lLmNvbG9yO24mJihnLmNsZWFyQ29sb3IoK25bMF18fDAsK25bMV18fDAsK25bMl18fDAsK25bM118fDApLHJ8PUthKSwiZGVwdGgiaW4gZSYmKGcuY2xlYXJEZXB0aCgrZS5kZXB0aCkscnw9UWEpLCJzdGVuY2lsImluIGUmJihnLmNsZWFyU3RlbmNpbCgwfGUuc3RlbmNpbCkscnw9JGEpLGRlKCEhciwiY2FsbGVkIHJlZ2wuY2xlYXIgd2l0aCBubyBidWZmZXIgc3BlY2lmaWVkIiksZy5jbGVhcihyKX1mdW5jdGlvbiB1KHQpe2lmKGRlKCJvYmplY3QiPT10eXBlb2YgdCYmdCwicmVnbC5jbGVhcigpIHRha2VzIGFuIG9iamVjdCBhcyBpbnB1dCIpLCJmcmFtZWJ1ZmZlciJpbiB0KWlmKHQuZnJhbWVidWZmZXImJiJmcmFtZWJ1ZmZlckN1YmUiPT09dC5mcmFtZWJ1ZmZlcl9yZWdsVHlwZSlmb3IodmFyIGU9MDtlPDY7KytlKUsoJHQoe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXIuZmFjZXNbZV19LHQpLGwpO2Vsc2UgSyh0LGwpO2Vsc2UgbChudWxsLHQpfWZ1bmN0aW9uIGModCl7ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGUoKXt2YXIgdD1adChxLGUpO3FbdF09cVtxLmxlbmd0aC0xXSxxLmxlbmd0aC09MSxxLmxlbmd0aDw9MCYmbigpfXZhciByPVp0KHEsdCk7ZGUocj49MCwiY2Fubm90IGNhbmNlbCBhIGZyYW1lIHR3aWNlIikscVtyXT1lfXJldHVybiBkZS50eXBlKHQsImZ1bmN0aW9uIiwicmVnbC5mcmFtZSgpIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpLHEucHVzaCh0KSxyKCkse2NhbmNlbDplfX1mdW5jdGlvbiBoKCl7dmFyIHQ9Vi52aWV3cG9ydCxlPVYuc2Npc3Nvcl9ib3g7dFswXT10WzFdPWVbMF09ZVsxXT0wLEUudmlld3BvcnRXaWR0aD1FLmZyYW1lYnVmZmVyV2lkdGg9RS5kcmF3aW5nQnVmZmVyV2lkdGg9dFsyXT1lWzJdPWcuZHJhd2luZ0J1ZmZlcldpZHRoLEUudmlld3BvcnRIZWlnaHQ9RS5mcmFtZWJ1ZmZlckhlaWdodD1FLmRyYXdpbmdCdWZmZXJIZWlnaHQ9dFszXT1lWzNdPWcuZHJhd2luZ0J1ZmZlckhlaWdodH1mdW5jdGlvbiBmKCl7RS50aWNrKz0xLEUudGltZT1wKCksaCgpLE4ucHJvY3MucG9sbCgpfWZ1bmN0aW9uIGQoKXtoKCksTi5wcm9jcy5yZWZyZXNoKCksayYmay51cGRhdGUoKX1mdW5jdGlvbiBwKCl7cmV0dXJuKHllKCktQSkvMWUzfWZ1bmN0aW9uIG0odCxlKXtkZS50eXBlKGUsImZ1bmN0aW9uIiwibGlzdGVuZXIgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIHI7c3dpdGNoKHQpe2Nhc2UiZnJhbWUiOnJldHVybiBjKGUpO2Nhc2UibG9zdCI6cj1HO2JyZWFrO2Nhc2UicmVzdG9yZSI6cj1ZO2JyZWFrO2Nhc2UiZGVzdHJveSI6cj1aO2JyZWFrO2RlZmF1bHQ6ZGUucmFpc2UoImludmFsaWQgZXZlbnQsIG11c3QgYmUgb25lIG9mIGZyYW1lLGxvc3QscmVzdG9yZSxkZXN0cm95Iil9cmV0dXJuIHIucHVzaChlKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpaWYoclt0XT09PWUpcmV0dXJuIHJbdF09cltyLmxlbmd0aC0xXSx2b2lkIHIucG9wKCl9fX12YXIgdj1YKHQpO2lmKCF2KXJldHVybiBudWxsO3ZhciBnPXYuZ2wseT1nLmdldENvbnRleHRBdHRyaWJ1dGVzKCksYj1nLmlzQ29udGV4dExvc3QoKSx4PVcoZyx2KTtpZigheClyZXR1cm4gbnVsbDt2YXIgXz1CKCksdz1XdCgpLE09eC5leHRlbnNpb25zLGs9SmEoZyxNKSxBPXllKCksVD1nLmRyYXdpbmdCdWZmZXJXaWR0aCxTPWcuZHJhd2luZ0J1ZmZlckhlaWdodCxFPXt0aWNrOjAsdGltZTowLHZpZXdwb3J0V2lkdGg6VCx2aWV3cG9ydEhlaWdodDpTLGZyYW1lYnVmZmVyV2lkdGg6VCxmcmFtZWJ1ZmZlckhlaWdodDpTLGRyYXdpbmdCdWZmZXJXaWR0aDpULGRyYXdpbmdCdWZmZXJIZWlnaHQ6UyxwaXhlbFJhdGlvOnYucGl4ZWxSYXRpb30sTD17fSxDPXtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0sej1iZShnLE0pLEk9ZnQoZyx3LHYpLEQ9ZHQoZyxNLEksdyksUD1PdChnLE0seixJLF8pLE89UnQoZyxfLHcsdiksUj16dChnLE0seixmdW5jdGlvbigpe04ucHJvY3MucG9sbCgpfSxFLHcsdiksRj1NbihnLE0seix3LHYpLGo9RHQoZyxNLHosUixGLHcpLE49WHQoZyxfLE0seixJLEQsUixqLEwsUCxPLEMsRSxrLHYpLFU9RnQoZyxqLE4ucHJvY3MucG9sbCxFLHksTSksVj1OLm5leHQsSD1nLmNhbnZhcyxxPVtdLEc9W10sWT1bXSxaPVt2Lm9uRGVzdHJveV0sSj1udWxsO0gmJihILmFkZEV2ZW50TGlzdGVuZXIoZW8saSwhMSksSC5hZGRFdmVudExpc3RlbmVyKHJvLGEsITEpKTt2YXIgSz1qLnNldEZCTz1zKHtmcmFtZWJ1ZmZlcjp2ZS5kZWZpbmUuY2FsbChudWxsLG5vLCJmcmFtZWJ1ZmZlciIpfSk7ZCgpO3ZhciBRPSR0KHMse2NsZWFyOnUscHJvcDp2ZS5kZWZpbmUuYmluZChudWxsLG5vKSxjb250ZXh0OnZlLmRlZmluZS5iaW5kKG51bGwsaW8pLHRoaXM6dmUuZGVmaW5lLmJpbmQobnVsbCxhbyksZHJhdzpzKHt9KSxidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIEkuY3JlYXRlKHQsdG8sITEsITEpfSxlbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm4gRC5jcmVhdGUodCwhMSl9LHRleHR1cmU6Ui5jcmVhdGUyRCxjdWJlOlIuY3JlYXRlQ3ViZSxyZW5kZXJidWZmZXI6Ri5jcmVhdGUsZnJhbWVidWZmZXI6ai5jcmVhdGUsZnJhbWVidWZmZXJDdWJlOmouY3JlYXRlQ3ViZSxhdHRyaWJ1dGVzOnksZnJhbWU6YyxvbjptLGxpbWl0czp6LGhhc0V4dGVuc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gei5leHRlbnNpb25zLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKT49MH0scmVhZDpVLGRlc3Ryb3k6byxfZ2w6ZyxfcmVmcmVzaDpkLHBvbGw6ZnVuY3Rpb24oKXtmKCksayYmay51cGRhdGUoKX0sbm93OnAsc3RhdHM6d30pO3JldHVybiB2Lm9uRG9uZShudWxsLFEpLFF9dmFyIEt0PXsiW29iamVjdCBJbnQ4QXJyYXldIjo1MTIwLCJbb2JqZWN0IEludDE2QXJyYXldIjo1MTIyLCJbb2JqZWN0IEludDMyQXJyYXldIjo1MTI0LCJbb2JqZWN0IFVpbnQ4QXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6NTEyMSwiW29iamVjdCBVaW50MTZBcnJheV0iOjUxMjMsIltvYmplY3QgVWludDMyQXJyYXldIjo1MTI1LCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOjUxMjYsIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6NTEyMSwiW29iamVjdCBBcnJheUJ1ZmZlcl0iOjUxMjF9LFF0PWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodClpbiBLdH0sJHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj0wO248ci5sZW5ndGg7KytuKXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH0sdGU9WyJnbCIsImNhbnZhcyIsImNvbnRhaW5lciIsImF0dHJpYnV0ZXMiLCJwaXhlbFJhdGlvIiwiZXh0ZW5zaW9ucyIsIm9wdGlvbmFsRXh0ZW5zaW9ucyIsInByb2ZpbGUiLCJvbkRvbmUiXSxlZT0zMzA3MSxyZT05NzI4LG5lPTk5ODQsaWU9OTk4NSxhZT05OTg2LG9lPTk5ODcsc2U9NTEyNixsZT0zMjgxOSx1ZT0zMjgyMCxjZT0zMzYzNSxoZT0zNDA0MixmZT17fTtmZVs1MTIwXT1mZVs1MTIxXT0xLGZlWzUxMjJdPWZlWzUxMjNdPWZlWzM2MTkzXT1mZVtjZV09ZmVbbGVdPWZlW3VlXT0yLGZlWzUxMjRdPWZlWzUxMjVdPWZlW3NlXT1mZVtoZV09NDt2YXIgZGU9JHQocix7b3B0aW9uYWw6UyxyYWlzZTplLGNvbW1hbmRSYWlzZTpNLGNvbW1hbmQ6ayxwYXJhbWV0ZXI6aSxjb21tYW5kUGFyYW1ldGVyOkEsY29uc3RydWN0b3I6dSx0eXBlOm8sY29tbWFuZFR5cGU6VCxpc1R5cGVkQXJyYXk6YSxubmk6cyxvbmVPZjpsLHNoYWRlckVycm9yOmIsbGlua0Vycm9yOngsY2FsbFNpdGU6bSxzYXZlQ29tbWFuZFJlZjpfLHNhdmVEcmF3SW5mbzp3LGZyYW1lYnVmZmVyRm9ybWF0OkUsZ3Vlc3NDb21tYW5kOnAsdGV4dHVyZTJEOnosdGV4dHVyZUN1YmU6SX0pLHBlPTAsbWU9MCx2ZT17RHluYW1pY1ZhcmlhYmxlOkQsZGVmaW5lOkYsaXNEeW5hbWljOmosdW5ib3g6TixhY2Nlc3NvcjpSfSxnZT17bmV4dDoiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9OmZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsMTYpfSxjYW5jZWw6ImZ1bmN0aW9uIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZSh0KX06Y2xlYXJUaW1lb3V0fSx5ZT0idW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxiZT1mdW5jdGlvbih0LGUpe3ZhciByPTE7ZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJihyPXQuZ2V0UGFyYW1ldGVyKDM0MDQ3KSk7dmFyIG49MSxpPTE7cmV0dXJuIGUud2ViZ2xfZHJhd19idWZmZXJzJiYobj10LmdldFBhcmFtZXRlcigzNDg1MiksaT10LmdldFBhcmFtZXRlcigzNjA2MykpLHtjb2xvckJpdHM6W3QuZ2V0UGFyYW1ldGVyKDM0MTApLHQuZ2V0UGFyYW1ldGVyKDM0MTEpLHQuZ2V0UGFyYW1ldGVyKDM0MTIpLHQuZ2V0UGFyYW1ldGVyKDM0MTMpXSxkZXB0aEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNCksc3RlbmNpbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNSksc3VicGl4ZWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MDgpLGV4dGVuc2lvbnM6T2JqZWN0LmtleXMoZSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhZVt0XX0pLG1heEFuaXNvdHJvcGljOnIsbWF4RHJhd2J1ZmZlcnM6bixtYXhDb2xvckF0dGFjaG1lbnRzOmkscG9pbnRTaXplRGltczp0LmdldFBhcmFtZXRlcigzMzkwMSksbGluZVdpZHRoRGltczp0LmdldFBhcmFtZXRlcigzMzkwMiksbWF4Vmlld3BvcnREaW1zOnQuZ2V0UGFyYW1ldGVyKDMzODYpLG1heENvbWJpbmVkVGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYxKSxtYXhDdWJlTWFwU2l6ZTp0LmdldFBhcmFtZXRlcigzNDA3NiksbWF4UmVuZGVyYnVmZmVyU2l6ZTp0LmdldFBhcmFtZXRlcigzNDAyNCksbWF4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM0OTMwKSxtYXhUZXh0dXJlU2l6ZTp0LmdldFBhcmFtZXRlcigzMzc5KSxtYXhBdHRyaWJ1dGVzOnQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxtYXhWZXJ0ZXhVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0NyksbWF4VmVydGV4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxtYXhWYXJ5aW5nVmVjdG9yczp0LmdldFBhcmFtZXRlcigzNjM0OCksbWF4RnJhZ21lbnRVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0OSksZ2xzbDp0LmdldFBhcmFtZXRlcigzNTcyNCkscmVuZGVyZXI6dC5nZXRQYXJhbWV0ZXIoNzkzNyksdmVuZG9yOnQuZ2V0UGFyYW1ldGVyKDc5MzYpLHZlcnNpb246dC5nZXRQYXJhbWV0ZXIoNzkzOCl9fSx4ZT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LF9lPTUxMjAsd2U9NTEyMSxNZT01MTIyLGtlPTUxMjMsQWU9NTEyNCxUZT01MTI1LFNlPTUxMjYsRWU9Sig4LGZ1bmN0aW9uKCl7cmV0dXJuW119KSxMZT17YWxsb2M6JCxmcmVlOnR0LGFsbG9jVHlwZTpldCxmcmVlVHlwZTpydH0sQ2U9e3NoYXBlOmx0LGZsYXR0ZW46c3R9LHplPXtpbnQ4OjUxMjAsaW50MTY6NTEyMixpbnQzMjo1MTI0LHVpbnQ4OjUxMjEsdWludDE2OjUxMjMsdWludDMyOjUxMjUsZmxvYXQ6NTEyNixmbG9hdDMyOjUxMjZ9LEllPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LERlPUNlLmZsYXR0ZW4sUGU9Q2Uuc2hhcGUsT2U9MzUwNDQsUmU9MzUwNDAsRmU9NTEyMSxqZT01MTI2LE5lPVtdO05lWzUxMjBdPTEsTmVbNTEyMl09MixOZVs1MTI0XT00LE5lWzUxMjFdPTEsTmVbNTEyM109MixOZVs1MTI1XT00LE5lWzUxMjZdPTQ7dmFyIEJlPXtwb2ludHM6MCxwb2ludDowLGxpbmVzOjEsbGluZToxLHRyaWFuZ2xlczo0LHRyaWFuZ2xlOjQsImxpbmUgbG9vcCI6MiwibGluZSBzdHJpcCI6MywidHJpYW5nbGUgc3RyaXAiOjUsInRyaWFuZ2xlIGZhbiI6Nn0sVWU9MCxWZT0xLEhlPTQscWU9NTEyMCxHZT01MTIxLFllPTUxMjIsWGU9NTEyMyxXZT01MTI0LFplPTUxMjUsSmU9MzQ5NjMsS2U9MzUwNDAsUWU9MzUwNDQsJGU9bmV3IEZsb2F0MzJBcnJheSgxKSx0cj1uZXcgVWludDMyQXJyYXkoJGUuYnVmZmVyKSxlcj01MTIzLHJyPTM0NDY3LG5yPTM1NTMsaXI9MzQwNjcsYXI9MzQwNjksb3I9NjQwOCxzcj02NDA2LGxyPTY0MDcsdXI9NjQwOSxjcj02NDEwLGhyPTMyODU0LGZyPTMyODU1LGRyPTM2MTk0LHByPTMyODE5LG1yPTMyODIwLHZyPTMzNjM1LGdyPTM0MDQyLHlyPTY0MDIsYnI9MzQwNDEseHI9MzU5MDQsX3I9MzU5MDYsd3I9MzYxOTMsTXI9MzM3NzYsa3I9MzM3NzcsQXI9MzM3NzgsVHI9MzM3NzksU3I9MzU5ODYsRXI9MzU5ODcsTHI9MzQ3OTgsQ3I9MzU4NDAsenI9MzU4NDEsSXI9MzU4NDIsRHI9MzU4NDMsUHI9MzYxOTYsT3I9NTEyMSxScj01MTIzLEZyPTUxMjUsanI9NTEyNixOcj0xMDI0MixCcj0xMDI0MyxVcj0xMDQ5NyxWcj0zMzA3MSxIcj0zMzY0OCxxcj0xMDI0MCxHcj0xMDI0MSxZcj05NzI4LFhyPTk3MjksV3I9OTk4NCxacj05OTg1LEpyPTk5ODYsS3I9OTk4NyxRcj0zMzE3MCwkcj00MzUyLHRuPTQzNTMsZW49NDM1NCxybj0zNDA0Nixubj0zMzE3LGFuPTM3NDQwLG9uPTM3NDQxLHNuPTM3NDQzLGxuPTM3NDQ0LHVuPTMzOTg0LGNuPVtXcixKcixacixLcl0saG49WzAsdXIsY3IsbHIsb3JdLGZuPXt9O2ZuW3VyXT1mbltzcl09Zm5beXJdPTEsZm5bYnJdPWZuW2NyXT0yLGZuW2xyXT1mblt4cl09Myxmbltvcl09Zm5bX3JdPTQ7dmFyIGRuPXZ0KCJIVE1MQ2FudmFzRWxlbWVudCIpLHBuPXZ0KCJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiKSxtbj12dCgiSFRNTEltYWdlRWxlbWVudCIpLHZuPXZ0KCJIVE1MVmlkZW9FbGVtZW50IiksZ249T2JqZWN0LmtleXMoS3QpLmNvbmNhdChbZG4scG4sbW4sdm5dKSx5bj1bXTt5bltPcl09MSx5bltqcl09NCx5blt3cl09Mix5bltScl09Mix5bltGcl09NDt2YXIgYm49W107Ym5baHJdPTIsYm5bZnJdPTIsYm5bZHJdPTIsYm5bYnJdPTQsYm5bTXJdPS41LGJuW2tyXT0uNSxibltBcl09MSxibltUcl09MSxibltTcl09LjUsYm5bRXJdPTEsYm5bTHJdPTEsYm5bQ3JdPS41LGJuW3pyXT0uMjUsYm5bSXJdPS41LGJuW0RyXT0uMjUsYm5bUHJdPS41O3ZhciB4bj0zNjE2MSxfbj0zMjg1NCx3bj1bXTt3bltfbl09Mix3blszMjg1NV09Mix3blszNjE5NF09Mix3blszMzE4OV09Mix3blszNjE2OF09MSx3blszNDA0MV09NCx3blszNTkwN109NCx3blszNDgzNl09MTYsd25bMzQ4NDJdPTgsd25bMzQ4NDNdPTY7dmFyIE1uPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWgrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD1fbix0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBvKGUpe3ZhciByPWUucmVuZGVyYnVmZmVyO2RlKHIsIm11c3Qgbm90IGRvdWJsZSBkZXN0cm95IHJlbmRlcmJ1ZmZlciIpLHQuYmluZFJlbmRlcmJ1ZmZlcih4bixudWxsKSx0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSxlLnJlbmRlcmJ1ZmZlcj1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgZltlLmlkXSxuLnJlbmRlcmJ1ZmZlckNvdW50LS19ZnVuY3Rpb24gcyhlLG8pe2Z1bmN0aW9uIHMoZSxuKXt2YXIgYT0wLG89MCxsPV9uO2lmKCJvYmplY3QiPT10eXBlb2YgZSYmZSl7dmFyIGY9ZTtpZigic2hhcGUiaW4gZil7dmFyIGQ9Zi5zaGFwZTtkZShBcnJheS5pc0FycmF5KGQpJiZkLmxlbmd0aD49MiwiaW52YWxpZCByZW5kZXJidWZmZXIgc2hhcGUiKSxhPTB8ZFswXSxvPTB8ZFsxXX1lbHNlInJhZGl1cyJpbiBmJiYoYT1vPTB8Zi5yYWRpdXMpLCJ3aWR0aCJpbiBmJiYoYT0wfGYud2lkdGgpLCJoZWlnaHQiaW4gZiYmKG89MHxmLmhlaWdodCk7ImZvcm1hdCJpbiBmJiYoZGUucGFyYW1ldGVyKGYuZm9ybWF0LHUsImludmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdCIpLGw9dVtmLmZvcm1hdF0pfWVsc2UibnVtYmVyIj09dHlwZW9mIGU/KGE9MHxlLG89Im51bWJlciI9PXR5cGVvZiBuPzB8bjphKTplP2RlLnJhaXNlKCJpbnZhbGlkIGFyZ3VtZW50cyB0byByZW5kZXJidWZmZXIgY29uc3RydWN0b3IiKTphPW89MTtpZihkZShhPjAmJm8+MCYmYTw9ci5tYXhSZW5kZXJidWZmZXJTaXplJiZvPD1yLm1heFJlbmRlcmJ1ZmZlclNpemUsImludmFsaWQgcmVuZGVyYnVmZmVyIHNpemUiKSxhIT09aC53aWR0aHx8byE9PWguaGVpZ2h0fHxsIT09aC5mb3JtYXQpcmV0dXJuIHMud2lkdGg9aC53aWR0aD1hLHMuaGVpZ2h0PWguaGVpZ2h0PW8saC5mb3JtYXQ9bCx0LmJpbmRSZW5kZXJidWZmZXIoeG4saC5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh4bixsLGEsbyksaS5wcm9maWxlJiYoaC5zdGF0cy5zaXplPUl0KGguZm9ybWF0LGgud2lkdGgsaC5oZWlnaHQpKSxzLmZvcm1hdD1jW2guZm9ybWF0XSxzfWZ1bmN0aW9uIGwoZSxuKXt2YXIgYT0wfGUsbz0wfG58fGE7cmV0dXJuIGE9PT1oLndpZHRoJiZvPT09aC5oZWlnaHQ/czooZGUoYT4wJiZvPjAmJmE8PXIubWF4UmVuZGVyYnVmZmVyU2l6ZSYmbzw9ci5tYXhSZW5kZXJidWZmZXJTaXplLCJpbnZhbGlkIHJlbmRlcmJ1ZmZlciBzaXplIikscy53aWR0aD1oLndpZHRoPWEscy5oZWlnaHQ9aC5oZWlnaHQ9byx0LmJpbmRSZW5kZXJidWZmZXIoeG4saC5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh4bixoLmZvcm1hdCxhLG8pLGkucHJvZmlsZSYmKGguc3RhdHMuc2l6ZT1JdChoLmZvcm1hdCxoLndpZHRoLGguaGVpZ2h0KSkscyl9dmFyIGg9bmV3IGEodC5jcmVhdGVSZW5kZXJidWZmZXIoKSk7cmV0dXJuIGZbaC5pZF09aCxuLnJlbmRlcmJ1ZmZlckNvdW50KysscyhlLG8pLHMucmVzaXplPWwscy5fcmVnbFR5cGU9InJlbmRlcmJ1ZmZlciIscy5fcmVuZGVyYnVmZmVyPWgsaS5wcm9maWxlJiYocy5zdGF0cz1oLnN0YXRzKSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtoLmRlY1JlZigpfSxzfWZ1bmN0aW9uIGwoKXt4ZShmKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKHhuLGUucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoeG4sZS5mb3JtYXQsZS53aWR0aCxlLmhlaWdodCl9KSx0LmJpbmRSZW5kZXJidWZmZXIoeG4sbnVsbCl9dmFyIHU9e3JnYmE0Ol9uLHJnYjU2NTozNjE5NCwicmdiNSBhMSI6MzI4NTUsZGVwdGg6MzMxODksc3RlbmNpbDozNjE2OCwiZGVwdGggc3RlbmNpbCI6MzQwNDF9O2UuZXh0X3NyZ2ImJih1LnNyZ2JhPTM1OTA3KSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmKHUucmdiYTE2Zj0zNDg0Mix1LnJnYjE2Zj0zNDg0MyksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJih1LnJnYmEzMmY9MzQ4MzYpO3ZhciBjPVtdO09iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtjW2VdPXR9KTt2YXIgaD0wLGY9e307cmV0dXJuIGEucHJvdG90eXBlLmRlY1JlZj1mdW5jdGlvbigpey0tdGhpcy5yZWZDb3VudDw9MCYmbyh0aGlzKX0saS5wcm9maWxlJiYobi5nZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPWZbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlOnMsY2xlYXI6ZnVuY3Rpb24oKXt4ZShmKS5mb3JFYWNoKG8pfSxyZXN0b3JlOmx9fSxrbj0zNjE2MCxBbj0zNjE2MSxUbj0zNTUzLFNuPTM0MDY5LEVuPTM2MDY0LExuPTM2MDk2LENuPTM2MTI4LHpuPTMzMzA2LEluPTM2MDUzLERuPTY0MDIsUG49WzY0MDhdLE9uPVtdO09uWzY0MDhdPTQ7dmFyIFJuPVtdO1JuWzUxMjFdPTEsUm5bNTEyNl09NCxSblszNjE5M109Mjt2YXIgRm49MzMxODksam49MzYxNjgsTm49MzQwNDEsQm49WzMyODU0LDMyODU1LDM2MTk0LDM1OTA3LDM0ODQyLDM0ODQzLDM0ODM2XSxVbj17fTtVbltJbl09ImNvbXBsZXRlIixVblszNjA1NF09ImluY29tcGxldGUgYXR0YWNobWVudCIsVW5bMzYwNTddPSJpbmNvbXBsZXRlIGRpbWVuc2lvbnMiLFVuWzM2MDU1XT0iaW5jb21wbGV0ZSwgbWlzc2luZyBhdHRhY2htZW50IixVblszNjA2MV09InVuc3VwcG9ydGVkIjt2YXIgVm49NTEyNixIbj0zNTYzMixxbj0zNTYzMyxHbj0zNTcxOCxZbj0zNTcyMSxYbj02NDA4LFduPTUxMjEsWm49MzMzMyxKbj01MTI2LEtuPSJ4eXp3Ii5zcGxpdCgiIiksUW49NTEyMSwkbj0xLHRpPTIsZWk9MCxyaT0xLG5pPTIsaWk9MyxhaT00LG9pPSJkaXRoZXIiLHNpPSJibGVuZC5lbmFibGUiLGxpPSJibGVuZC5jb2xvciIsdWk9ImJsZW5kLmVxdWF0aW9uIixjaT0iYmxlbmQuZnVuYyIsaGk9ImRlcHRoLmVuYWJsZSIsZmk9ImRlcHRoLmZ1bmMiLGRpPSJkZXB0aC5yYW5nZSIscGk9ImRlcHRoLm1hc2siLG1pPSJjb2xvck1hc2siLHZpPSJjdWxsLmVuYWJsZSIsZ2k9ImN1bGwuZmFjZSIseWk9ImZyb250RmFjZSIsYmk9ImxpbmVXaWR0aCIseGk9InBvbHlnb25PZmZzZXQuZW5hYmxlIixfaT0icG9seWdvbk9mZnNldC5vZmZzZXQiLHdpPSJzYW1wbGUuYWxwaGEiLE1pPSJzYW1wbGUuZW5hYmxlIixraT0ic2FtcGxlLmNvdmVyYWdlIixBaT0ic3RlbmNpbC5lbmFibGUiLFRpPSJzdGVuY2lsLm1hc2siLFNpPSJzdGVuY2lsLmZ1bmMiLEVpPSJzdGVuY2lsLm9wRnJvbnQiLExpPSJzdGVuY2lsLm9wQmFjayIsQ2k9InNjaXNzb3IuZW5hYmxlIix6aT0ic2Npc3Nvci5ib3giLElpPSJ2aWV3cG9ydCIsRGk9InByb2ZpbGUiLFBpPSJmcmFtZWJ1ZmZlciIsT2k9InZlcnQiLFJpPSJmcmFnIixGaT0iZWxlbWVudHMiLGppPSJwcmltaXRpdmUiLE5pPSJjb3VudCIsQmk9Im9mZnNldCIsVWk9Imluc3RhbmNlcyIsVmk9UGkrIldpZHRoIixIaT1QaSsiSGVpZ2h0IixxaT1JaSsiV2lkdGgiLEdpPUlpKyJIZWlnaHQiLFlpPSJkcmF3aW5nQnVmZmVyV2lkdGgiLFhpPSJkcmF3aW5nQnVmZmVySGVpZ2h0IixXaT1bY2ksdWksU2ksRWksTGksa2ksSWksemksX2ldLFppPTM0OTYyLEppPTM0OTYzLEtpPTM1NTMsUWk9MzQwNjcsJGk9Mjg4NCx0YT0zMDQyLGVhPTMwMjQscmE9Mjk2MCxuYT0yOTI5LGlhPTMwODksYWE9MzI4MjMsb2E9MzI5MjYsc2E9MzI5MjgsbGE9NTEyNix1YT0zNTY2NCxjYT0zNTY2NSxoYT0zNTY2NixmYT01MTI0LGRhPTM1NjY3LHBhPTM1NjY4LG1hPTM1NjY5LHZhPTM1NjcwLGdhPTM1NjcxLHlhPTM1NjcyLGJhPTM1NjczLHhhPTM1Njc0LF9hPTM1Njc1LHdhPTM1Njc2LE1hPTM1Njc4LGthPTM1NjgwLEFhPTQsVGE9MTAyOCxTYT0xMDI5LEVhPTIzMDQsTGE9MjMwNSxDYT0zMjc3NSx6YT0zMjc3NixJYT01MTksRGE9NzY4MCxQYT0wLE9hPTEsUmE9MzI3NzQsRmE9NTEzLGphPTM2MTYwLE5hPTM2MDY0LEJhPXswOjAsMToxLHplcm86MCxvbmU6MSwic3JjIGNvbG9yIjo3NjgsIm9uZSBtaW51cyBzcmMgY29sb3IiOjc2OSwic3JjIGFscGhhIjo3NzAsIm9uZSBtaW51cyBzcmMgYWxwaGEiOjc3MSwiZHN0IGNvbG9yIjo3NzQsIm9uZSBtaW51cyBkc3QgY29sb3IiOjc3NSwiZHN0IGFscGhhIjo3NzIsIm9uZSBtaW51cyBkc3QgYWxwaGEiOjc3MywiY29uc3RhbnQgY29sb3IiOjMyNzY5LCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiOjMyNzcwLCJjb25zdGFudCBhbHBoYSI6MzI3NzEsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSI6MzI3NzIsInNyYyBhbHBoYSBzYXR1cmF0ZSI6Nzc2fSxVYT1bImNvbnN0YW50IGNvbG9yLCBjb25zdGFudCBhbHBoYSIsIm9uZSBtaW51cyBjb25zdGFudCBjb2xvciwgY29uc3RhbnQgYWxwaGEiLCJjb25zdGFudCBjb2xvciwgb25lIG1pbnVzIGNvbnN0YW50IGFscGhhIiwib25lIG1pbnVzIGNvbnN0YW50IGNvbG9yLCBvbmUgbWludXMgY29uc3RhbnQgYWxwaGEiLCJjb25zdGFudCBhbHBoYSwgY29uc3RhbnQgY29sb3IiLCJjb25zdGFudCBhbHBoYSwgb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yIiwib25lIG1pbnVzIGNvbnN0YW50IGFscGhhLCBjb25zdGFudCBjb2xvciIsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSwgb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yIl0sVmE9e25ldmVyOjUxMixsZXNzOjUxMywiPCI6NTEzLGVxdWFsOjUxNCwiPSI6NTE0LCI9PSI6NTE0LCI9PT0iOjUxNCxsZXF1YWw6NTE1LCI8PSI6NTE1LGdyZWF0ZXI6NTE2LCI+Ijo1MTYsbm90ZXF1YWw6NTE3LCIhPSI6NTE3LCIhPT0iOjUxNyxnZXF1YWw6NTE4LCI+PSI6NTE4LGFsd2F5czo1MTl9LEhhPXswOjAsemVybzowLGtlZXA6NzY4MCxyZXBsYWNlOjc2ODEsaW5jcmVtZW50Ojc2ODIsZGVjcmVtZW50Ojc2ODMsImluY3JlbWVudCB3cmFwIjozNDA1NSwiZGVjcmVtZW50IHdyYXAiOjM0MDU2LGludmVydDo1Mzg2fSxxYT17ZnJhZzozNTYzMix2ZXJ0OjM1NjMzfSxHYT17Y3c6RWEsY2N3OkxhfSxZYT1uZXcgSHQoITEsITEsITEsZnVuY3Rpb24oKXt9KSxYYT0zNDkxOCxXYT0zNDkxOSxaYT0zNTAwNyxKYT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gZi5wb3AoKXx8aC5jcmVhdGVRdWVyeUVYVCgpfWZ1bmN0aW9uIG4odCl7Zi5wdXNoKHQpfWZ1bmN0aW9uIGkodCl7dmFyIGU9cigpO2guYmVnaW5RdWVyeUVYVChaYSxlKSxkLnB1c2goZSksdShkLmxlbmd0aC0xLGQubGVuZ3RoLHQpfWZ1bmN0aW9uIGEoKXtoLmVuZFF1ZXJ5RVhUKFphKX1mdW5jdGlvbiBvKCl7dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5lbmRRdWVyeUluZGV4PS0xLHRoaXMuc3VtPTAsdGhpcy5zdGF0cz1udWxsfWZ1bmN0aW9uIHMoKXtyZXR1cm4gcC5wb3AoKXx8bmV3IG99ZnVuY3Rpb24gbCh0KXtwLnB1c2godCl9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG49cygpO24uc3RhcnRRdWVyeUluZGV4PXQsbi5lbmRRdWVyeUluZGV4PWUsbi5zdW09MCxuLnN0YXRzPXIsbS5wdXNoKG4pfWZ1bmN0aW9uIGMoKXt2YXIgdCxlLHI9ZC5sZW5ndGg7aWYoMCE9PXIpe2cubGVuZ3RoPU1hdGgubWF4KGcubGVuZ3RoLHIrMSksdi5sZW5ndGg9TWF0aC5tYXgodi5sZW5ndGgscisxKSx2WzBdPTAsZ1swXT0wO3ZhciBpPTA7Zm9yKHQ9MCxlPTA7ZTxkLmxlbmd0aDsrK2Upe3ZhciBhPWRbZV07aC5nZXRRdWVyeU9iamVjdEVYVChhLFdhKT8oaSs9aC5nZXRRdWVyeU9iamVjdEVYVChhLFhhKSxuKGEpKTpkW3QrK109YSx2W2UrMV09aSxnW2UrMV09dH1mb3IoZC5sZW5ndGg9dCx0PTAsZT0wO2U8bS5sZW5ndGg7KytlKXt2YXIgbz1tW2VdLHM9by5zdGFydFF1ZXJ5SW5kZXgsdT1vLmVuZFF1ZXJ5SW5kZXg7by5zdW0rPXZbdV0tdltzXTt2YXIgYz1nW3NdLGY9Z1t1XTtmPT09Yz8oby5zdGF0cy5ncHVUaW1lKz1vLnN1bS8xZTYsbChvKSk6KG8uc3RhcnRRdWVyeUluZGV4PWMsby5lbmRRdWVyeUluZGV4PWYsbVt0KytdPW8pfW0ubGVuZ3RoPXR9fXZhciBoPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5O2lmKCFoKXJldHVybiBudWxsO3ZhciBmPVtdLGQ9W10scD1bXSxtPVtdLHY9W10sZz1bXTtyZXR1cm57YmVnaW5RdWVyeTppLGVuZFF1ZXJ5OmEscHVzaFNjb3BlU3RhdHM6dSx1cGRhdGU6YyxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBkLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtmLnB1c2guYXBwbHkoZixkKTtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoO3QrKyloLmRlbGV0ZVF1ZXJ5RVhUKGZbdF0pO2QubGVuZ3RoPTAsZi5sZW5ndGg9MH0scmVzdG9yZTpmdW5jdGlvbigpe2QubGVuZ3RoPTAsZi5sZW5ndGg9MH19fSxLYT0xNjM4NCxRYT0yNTYsJGE9MTAyNCx0bz0zNDk2Mixlbz0id2ViZ2xjb250ZXh0bG9zdCIscm89IndlYmdsY29udGV4dHJlc3RvcmVkIixubz0xLGlvPTIsYW89MztyZXR1cm4gSnR9KX0se31dLDQ5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nIik7aWYoMT09PWUpcmV0dXJuIHQ7aWYoMj09PWUpcmV0dXJuIHQrdDt2YXIgcj10Lmxlbmd0aCplO2lmKGkhPT10fHx2b2lkIDA9PT1pKWk9dCxhPSIiO2Vsc2UgaWYoYS5sZW5ndGg+PXIpcmV0dXJuIGEuc3Vic3RyKDAscik7Zm9yKDtyPmEubGVuZ3RoJiZlPjE7KTEmZSYmKGErPXQpLGU+Pj0xLHQrPXQ7cmV0dXJuIGErPXQsYT1hLnN1YnN0cigwLHIpfXZhciBpLGE9IiI7ZS5leHBvcnRzPW59LHt9XSw0OTk6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChpKToib2JqZWN0Ij09dHlwZW9mIG4/ci5leHBvcnRzPWkoKTplLnJlc29sdmVVcmw9aSgpfSh0aGlzLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJyZXNvbHZlVXJsIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudDsgZ290IG5vbmUuIik7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYmFzZSIpO2lmKGUuaHJlZj1hcmd1bWVudHNbMF0sMT09PXQpcmV0dXJuIGUuaHJlZjt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO3IuaW5zZXJ0QmVmb3JlKGUsci5maXJzdENoaWxkKTtmb3IodmFyIG4saT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksYT0xO2E8dDthKyspaS5ocmVmPWFyZ3VtZW50c1thXSxuPWkuaHJlZixlLmhyZWY9bjtyZXR1cm4gci5yZW1vdmVDaGlsZChlKSxufXJldHVybiB0fSl9LHt9XSw1MDA6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZS5leHBvcnRzPXQucGVyZm9ybWFuY2UmJnQucGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9dFt0Lmxlbmd0aC0xXSxuPWUsaT1lLTI7aT49MDstLWkpe3ZhciBhPXIsbz10W2ldO3I9YStvO3ZhciBzPXItYSxsPW8tcztsJiYodFstLW5dPXIscj1sKX1mb3IodmFyIHU9MCxpPW47aTxlOysraSl7dmFyIGE9dFtpXSxvPXI7cj1hK287dmFyIHM9ci1hLGw9by1zO2wmJih0W3UrK109bCl9cmV0dXJuIHRbdSsrXT1yLHQubGVuZ3RoPXUsdH1lLmV4cG9ydHM9bn0se31dLDUwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm1bIixyLCJdWyIsbiwiXSJdLmpvaW4oIiIpfXJldHVybiBlfWZ1bmN0aW9uIGEodCl7cmV0dXJuIDEmdD8iLSI6IiJ9ZnVuY3Rpb24gbyh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKCIsdFswXSwiLCIsdFsxXSwiKSJdLmpvaW4oIiIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsbyh0LnNsaWNlKDAsZSkpLCIsIixvKHQuc2xpY2UoZSkpLCIpIl0uam9pbigiIil9ZnVuY3Rpb24gcyh0KXtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0ocHJvZCgiLHRbMF1bMF0sIiwiLHRbMV1bMV0sIikscHJvZCgtIix0WzBdWzFdLCIsIix0WzFdWzBdLCIpKSJdLmpvaW4oIiIpO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixzKG4odCxyKSksIiwiLGEociksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gbyhlKX1mdW5jdGlvbiBsKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oInN1bSIsInNjYWxlIiwicHJvZCIsImNvbXByZXNzIixbImZ1bmN0aW9uIHJvYnVzdERldGVybWluYW50Iix0LCIobSl7cmV0dXJuIGNvbXByZXNzKCIscyhpKHQpKSwiKX07cmV0dXJuIHJvYnVzdERldGVybWluYW50Iix0XS5qb2luKCIiKSkoYyxoLHUsZil9dmFyIHU9dCgidHdvLXByb2R1Y3QiKSxjPXQoInJvYnVzdC1zdW0iKSxoPXQoInJvYnVzdC1zY2FsZSIpLGY9dCgicm9idXN0LWNvbXByZXNzIiksZD02LHA9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0KXtyZXR1cm5bdFswXVswXV19XTshZnVuY3Rpb24oKXtmb3IoO3AubGVuZ3RoPGQ7KXAucHVzaChsKHAubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudChtKXtzd2l0Y2gobS5sZW5ndGgpeyJdLG49MDtuPGQ7KytuKXQucHVzaCgiZGV0IituKSxyLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIGRldCIsbiwiKG0pOyIpO3IucHVzaCgifXZhciBkZXQ9Q0FDSEVbbS5sZW5ndGhdO2lmKCFkZXQpZGV0PUNBQ0hFW20ubGVuZ3RoXT1nZW4obS5sZW5ndGgpO3JldHVybiBkZXQobSk7fXJldHVybiByb2J1c3REZXRlcm1pbmFudCIpLHQucHVzaCgiQ0FDSEUiLCJnZW4iLHIuam9pbigiIikpO3ZhciBpPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtlLmV4cG9ydHM9aS5hcHBseSh2b2lkIDAscC5jb25jYXQoW3AsbF0pKTtmb3IodmFyIG49MDtuPHAubGVuZ3RoOysrbillLmV4cG9ydHNbbl09cFtuXX0oKX0seyJyb2J1c3QtY29tcHJlc3MiOjUwMSwicm9idXN0LXNjYWxlIjo1MDgsInJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzN31dLDUwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPWkodFswXSxlWzBdKSxuPTE7bjx0Lmxlbmd0aDsrK24pcj1hKHIsaSh0W25dLGVbbl0pKTtyZXR1cm4gcn12YXIgaT10KCJ0d28tcHJvZHVjdCIpLGE9dCgicm9idXN0LXN1bSIpO2UuZXhwb3J0cz1ufSx7InJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzN31dLDUwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm0iLG4sIlsiLHQtci0yLCJdIl0uam9pbigiIil9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKCIsdFswXSwiLCIsdFsxXSwiKSJdLmpvaW4oIiIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsYSh0LnNsaWNlKDAsZSkpLCIsIixhKHQuc2xpY2UoZSkpLCIpIl0uam9pbigiIil9ZnVuY3Rpb24gbyh0LGUpe2lmKCJtIj09PXQuY2hhckF0KDApKXtpZigidyI9PT1lLmNoYXJBdCgwKSl7dmFyIHI9dC5zcGxpdCgiWyIpO3JldHVyblsidyIsZS5zdWJzdHIoMSksIm0iLHJbMF0uc3Vic3RyKDEpXS5qb2luKCIiKX1yZXR1cm5bInByb2QoIix0LCIsIixlLCIpIl0uam9pbigiIil9cmV0dXJuIG8oZSx0KX1mdW5jdGlvbiBzKHQpe3JldHVybiEwJnQ/Ii0iOiIifWZ1bmN0aW9uIGwodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbImRpZmYoIixvKHRbMF1bMF0sdFsxXVsxXSksIiwiLG8odFsxXVswXSx0WzBdWzFdKSwiKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsYShsKG4odCxyKSkpLCIsIixzKHIpLHRbMF1bcl0sIikiXS5qb2luKCIiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLTI7KytuKXIucHVzaChbInByb2QobSIsdCwiWyIsbiwiXSxtIix0LCJbIixuLCJdKSJdLmpvaW4oIiIpKTtyZXR1cm4gYShyKX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1bXSxyPVtdLG89aSh0KSxzPTA7czx0OysrcylvWzBdW3NdPSIxIixvW3QtMV1bc109InciK3M7Zm9yKHZhciBzPTA7czx0OysrcykwPT0oMSZzKT9lLnB1c2guYXBwbHkoZSxsKG4obyxzKSkpOnIucHVzaC5hcHBseShyLGwobihvLHMpKSk7Zm9yKHZhciBjPWEoZSksaD1hKHIpLGY9ImV4YWN0SW5TcGhlcmUiK3QsZD1bXSxzPTA7czx0OysrcylkLnB1c2goIm0iK3MpO2Zvcih2YXIgcD1bImZ1bmN0aW9uICIsZiwiKCIsZC5qb2luKCksIil7Il0scz0wO3M8dDsrK3Mpe3AucHVzaCgidmFyIHciLHMsIj0iLHUocyx0KSwiOyIpO2Zvcih2YXIgYj0wO2I8dDsrK2IpYiE9PXMmJnAucHVzaCgidmFyIHciLHMsIm0iLGIsIj1zY2FsZSh3IixzLCIsbSIsYiwiWzBdKTsiKX1yZXR1cm4gcC5wdXNoKCJ2YXIgcD0iLGMsIixuPSIsaCwiLGQ9ZGlmZihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO31yZXR1cm4gIixmKSxuZXcgRnVuY3Rpb24oInN1bSIsImRpZmYiLCJwcm9kIiwic2NhbGUiLHAuam9pbigiIikpKHYsZyxtLHkpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gMH1mdW5jdGlvbiBmKCl7cmV0dXJuIDB9ZnVuY3Rpb24gZCgpe3JldHVybiAwfWZ1bmN0aW9uIHAodCl7dmFyIGU9eFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPXhbdC5sZW5ndGhdPWModC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX12YXIgbT10KCJ0d28tcHJvZHVjdCIpLHY9dCgicm9idXN0LXN1bSIpLGc9dCgicm9idXN0LXN1YnRyYWN0IikseT10KCJyb2J1c3Qtc2NhbGUiKSxiPTYseD1baCxmLGRdOyFmdW5jdGlvbigpe2Zvcig7eC5sZW5ndGg8PWI7KXgucHVzaChjKHgubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJzbG93Il0sbj0wO248PWI7KytuKXQucHVzaCgiYSIrbiksci5wdXNoKCJvIituKTtmb3IodmFyIGk9WyJmdW5jdGlvbiB0ZXN0SW5TcGhlcmUoIix0LmpvaW4oKSwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDsiXSxuPTI7bjw9YjsrK24paS5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBvIixuLCIoIix0LnNsaWNlKDAsbikuam9pbigpLCIpOyIpO2kucHVzaCgifXZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXtzW2ldPWFyZ3VtZW50c1tpXX07cmV0dXJuIHNsb3cocyk7fXJldHVybiB0ZXN0SW5TcGhlcmUiKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2UuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbcF0uY29uY2F0KHgpKTtmb3IodmFyIG49MDtuPD1iOysrbillLmV4cG9ydHNbbl09eFtuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUwOCwicm9idXN0LXN1YnRyYWN0Ijo1MTAsInJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzN31dLDUwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0icm9idXN0TGluZWFyU29sdmUiK3QrImQiLHI9WyJmdW5jdGlvbiAiLGUsIihBLGIpe3JldHVybiBbIl0sbj0wO248dDsrK24pe3IucHVzaCgiZGV0KFsiKTtmb3IodmFyIGk9MDtpPHQ7KytpKXtpPjAmJnIucHVzaCgiLCIpLHIucHVzaCgiWyIpO2Zvcih2YXIgYT0wO2E8dDsrK2EpYT4wJiZyLnB1c2goIiwiKSxhPT09bj9yLnB1c2goIitiWyIsaSwiXSIpOnIucHVzaCgiK0FbIixpLCJdWyIsYSwiXSIpO3IucHVzaCgiXSIpfXIucHVzaCgiXSksIil9ci5wdXNoKCJkZXQoQSldfXJldHVybiAiLGUpO3ZhciBzPW5ldyBGdW5jdGlvbigiZGV0IixyLmpvaW4oIiIpKTtyZXR1cm4gcyh0PDY/b1t0XTpvKX1mdW5jdGlvbiBpKCl7cmV0dXJuWzBdfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm5bW2VbMF1dLFt0WzBdWzBdXV19dmFyIG89dCgicm9idXN0LWRldGVybWluYW50Iikscz02LGw9W2ksYV07IWZ1bmN0aW9uKCl7Zm9yKDtsLmxlbmd0aDxzOylsLnB1c2gobihsLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsiZnVuY3Rpb24gZGlzcGF0Y2hMaW5lYXJTb2x2ZShBLGIpe3N3aXRjaChBLmxlbmd0aCl7Il0saT0wO2k8czsrK2kpdC5wdXNoKCJzIitpKSxyLnB1c2goImNhc2UgIixpLCI6cmV0dXJuIHMiLGksIihBLGIpOyIpO3IucHVzaCgifXZhciBzPUNBQ0hFW0EubGVuZ3RoXTtpZighcylzPUNBQ0hFW0EubGVuZ3RoXT1nKEEubGVuZ3RoKTtyZXR1cm4gcyhBLGIpfXJldHVybiBkaXNwYXRjaExpbmVhclNvbHZlIiksdC5wdXNoKCJDQUNIRSIsImciLHIuam9pbigiIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtlLmV4cG9ydHM9YS5hcHBseSh2b2lkIDAsbC5jb25jYXQoW2wsbl0pKTtmb3IodmFyIGk9MDtpPHM7KytpKWUuZXhwb3J0c1tpXT1sW2ldfSgpfSx7InJvYnVzdC1kZXRlcm1pbmFudCI6NTAyfV0sNTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibSIsbiwiWyIsdC1yLTEsIl0iXS5qb2luKCIiKX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQpe3JldHVybiAxJnQ/Ii0iOiIifWZ1bmN0aW9uIG8odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bSgiLHRbMF0sIiwiLHRbMV0sIikiXS5qb2luKCIiKTt2YXIgZT10Lmxlbmd0aD4+MTtyZXR1cm5bInN1bSgiLG8odC5zbGljZSgwLGUpKSwiLCIsbyh0LnNsaWNlKGUpKSwiKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIHModCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIildO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixvKHMobih0LHIpKSksIiwiLGEociksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gZX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1bXSxyPVtdLGE9aSh0KSxsPVtdLHU9MDt1PHQ7Kyt1KTA9PSgxJnUpP2UucHVzaC5hcHBseShlLHMobihhLHUpKSk6ci5wdXNoLmFwcGx5KHIscyhuKGEsdSkpKSxsLnB1c2goIm0iK3UpO3ZhciBwPW8oZSksbT1vKHIpLHY9Im9yaWVudGF0aW9uIit0KyJFeGFjdCIsZz1bImZ1bmN0aW9uICIsdiwiKCIsbC5qb2luKCksIil7dmFyIHA9IixwLCIsbj0iLG0sIixkPXN1YihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO307cmV0dXJuICIsdl0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbigic3VtIiwicHJvZCIsInNjYWxlIiwic3ViIixnKShoLGMsZixkKX1mdW5jdGlvbiB1KHQpe3ZhciBlPWdbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1nW3QubGVuZ3RoXT1sKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9dmFyIGM9dCgidHdvLXByb2R1Y3QiKSxoPXQoInJvYnVzdC1zdW0iKSxmPXQoInJvYnVzdC1zY2FsZSIpLGQ9dCgicm9idXN0LXN1YnRyYWN0IikscD01LG09bCgzKSx2PWwoNCksZz1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSxmdW5jdGlvbih0LGUscil7dmFyIG4saT0odFsxXS1yWzFdKSooZVswXS1yWzBdKSxhPSh0WzBdLXJbMF0pKihlWzFdLXJbMV0pLG89aS1hO2lmKGk+MCl7aWYoYTw9MClyZXR1cm4gbztuPWkrYX1lbHNle2lmKCEoaTwwKSlyZXR1cm4gbztpZihhPj0wKXJldHVybiBvO249LShpK2EpfXZhciBzPTMuMzMwNjY5MDczODc1NDcxNmUtMTYqbjtyZXR1cm4gbz49c3x8bzw9LXM/bzptKHQsZSxyKX0sZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1uWzBdLGE9ZVswXS1uWzBdLG89clswXS1uWzBdLHM9dFsxXS1uWzFdLGw9ZVsxXS1uWzFdLHU9clsxXS1uWzFdLGM9dFsyXS1uWzJdLGg9ZVsyXS1uWzJdLGY9clsyXS1uWzJdLGQ9YSp1LHA9bypsLG09bypzLGc9aSp1LHk9aSpsLGI9YSpzLHg9YyooZC1wKStoKihtLWcpK2YqKHktYiksXz0oTWF0aC5hYnMoZCkrTWF0aC5hYnMocCkpKk1hdGguYWJzKGMpKyhNYXRoLmFicyhtKStNYXRoLmFicyhnKSkqTWF0aC5hYnMoaCkrKE1hdGguYWJzKHkpK01hdGguYWJzKGIpKSpNYXRoLmFicyhmKSx3PTcuNzcxNTYxMTcyMzc2MTAzZS0xNipfO3JldHVybiB4Pnd8fC14Pnc/eDp2KHQsZSxyLG4pfV07IWZ1bmN0aW9uKCl7Zm9yKDtnLmxlbmd0aDw9cDspZy5wdXNoKGwoZy5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bInNsb3ciXSxuPTA7bjw9cDsrK24pdC5wdXNoKCJhIituKSxyLnB1c2goIm8iK24pO2Zvcih2YXIgaT1bImZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKCIsdC5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il0sbj0yO248PXA7KytuKWkucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gbyIsbiwiKCIsdC5zbGljZSgwLG4pLmpvaW4oKSwiKTsiKTtpLnB1c2goIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gZ2V0T3JpZW50YXRpb24iKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2UuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbdV0uY29uY2F0KGcpKTtmb3IodmFyIG49MDtuPD1wOysrbillLmV4cG9ydHNbbl09Z1tuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUwOCwicm9idXN0LXN1YnRyYWN0Ijo1MTAsInJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzN31dLDUwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoMT09PXQubGVuZ3RoKXJldHVybiBhKGUsdFswXSk7aWYoMT09PWUubGVuZ3RoKXJldHVybiBhKHQsZVswXSk7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuWzBdO3ZhciByPVswXTtpZih0Lmxlbmd0aDxlLmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbilyPWkocixhKGUsdFtuXSkpO2Vsc2UgZm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pcj1pKHIsYSh0LGVbbl0pKTtyZXR1cm4gcn12YXIgaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKTtlLmV4cG9ydHM9bn0seyJyb2J1c3Qtc2NhbGUiOjUwOCwicm9idXN0LXN1bSI6NTExfV0sNTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigxPT09cil7dmFyIG49aSh0WzBdLGUpO3JldHVybiBuWzBdP246W25bMV1dfXZhciBvPW5ldyBBcnJheSgyKnIpLHM9Wy4xLC4xXSxsPVsuMSwuMV0sdT0wO2kodFswXSxlLHMpLHNbMF0mJihvW3UrK109c1swXSk7Zm9yKHZhciBjPTE7YzxyOysrYyl7aSh0W2NdLGUsbCk7dmFyIGg9c1sxXTthKGgsbFswXSxzKSxzWzBdJiYob1t1KytdPXNbMF0pO3ZhciBmPWxbMV0sZD1zWzFdLHA9ZitkLG09cC1mLHY9ZC1tO3NbMV09cCx2JiYob1t1KytdPXYpfXJldHVybiBzWzFdJiYob1t1KytdPXNbMV0pLDA9PT11JiYob1t1KytdPTApLG8ubGVuZ3RoPXUsb312YXIgaT10KCJ0d28tcHJvZHVjdCIpLGE9dCgidHdvLXN1bSIpO2UuZXhwb3J0cz1ufSx7InR3by1wcm9kdWN0Ijo1MzcsInR3by1zdW0iOjUzOH1dLDUwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8MjsrK2kpe3ZhciBhPXRbaV0sbz1lW2ldLHM9TWF0aC5taW4oYSxvKSxsPU1hdGgubWF4KGEsbyksdT1yW2ldLGM9bltpXSxoPU1hdGgubWluKHUsYyk7aWYoTWF0aC5tYXgodSxjKTxzfHxsPGgpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gaSh0LGUscixpKXt2YXIgbz1hKHQscixpKSxzPWEoZSxyLGkpO2lmKG8+MCYmcz4wfHxvPDAmJnM8MClyZXR1cm4hMTt2YXIgbD1hKHIsdCxlKSx1PWEoaSx0LGUpO3JldHVybiEobD4wJiZ1PjB8fGw8MCYmdTwwKSYmKDAhPT1vfHwwIT09c3x8MCE9PWx8fDAhPT11fHxuKHQsZSxyLGkpKX1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUwNn1dLDUxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9ci1uLGE9ZS1uLG89dC1pLHM9bythO3JldHVybiBzP1tzLHJdOltyXX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxpPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1pKXJldHVybiBuKHRbMF0sLWVbMF0pO3ZhciBhLG8scz1yK2ksbD1uZXcgQXJyYXkocyksdT0wLGM9MCxoPTAsZj1NYXRoLmFicyxkPXRbY10scD1mKGQpLG09LWVbaF0sdj1mKG0pO3A8dj8obz1kLChjKz0xKTxyJiYoZD10W2NdLHA9ZihkKSkpOihvPW0sKGgrPTEpPGkmJihtPS1lW2hdLHY9ZihtKSkpLGM8ciYmcDx2fHxoPj1pPyhhPWQsKGMrPTEpPHImJihkPXRbY10scD1mKGQpKSk6KGE9bSwoaCs9MSk8aSYmKG09LWVbaF0sdj1mKG0pKSk7Zm9yKHZhciBnLHksYix4LF8sdz1hK28sTT13LWEsaz1vLU0sQT1rLFQ9dztjPHImJmg8aTspcDx2PyhhPWQsKGMrPTEpPHImJihkPXRbY10scD1mKGQpKSk6KGE9bSwoaCs9MSk8aSYmKG09LWVbaF0sdj1mKG0pKSksbz1BLHc9YStvLE09dy1hLGs9by1NLGsmJihsW3UrK109ayksZz1UK3cseT1nLVQsYj1nLXkseD13LXksXz1ULWIsQT1fK3gsVD1nO2Zvcig7YzxyOylhPWQsbz1BLHc9YStvLE09dy1hLGs9by1NLGsmJihsW3UrK109ayksZz1UK3cseT1nLVQsYj1nLXkseD13LXksXz1ULWIsQT1fK3gsVD1nLChjKz0xKTxyJiYoZD10W2NdKTtmb3IoO2g8aTspYT1tLG89QSx3PWErbyxNPXctYSxrPW8tTSxrJiYobFt1KytdPWspLGc9VCt3LHk9Zy1ULGI9Zy15LHg9dy15LF89VC1iLEE9Xyt4LFQ9ZywoaCs9MSk8aSYmKG09LWVbaF0pO3JldHVybiBBJiYobFt1KytdPUEpLFQmJihsW3UrK109VCksdXx8KGxbdSsrXT0wKSxsLmxlbmd0aD11LGx9ZS5leHBvcnRzPWl9LHt9XSwKNTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10K2Usbj1yLXQsaT1yLW4sYT1lLW4sbz10LWkscz1vK2E7cmV0dXJuIHM/W3Mscl06W3JdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj0wfHQubGVuZ3RoLGk9MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PWkpcmV0dXJuIG4odFswXSxlWzBdKTt2YXIgYSxvLHM9citpLGw9bmV3IEFycmF5KHMpLHU9MCxjPTAsaD0wLGY9TWF0aC5hYnMsZD10W2NdLHA9ZihkKSxtPWVbaF0sdj1mKG0pO3A8dj8obz1kLChjKz0xKTxyJiYoZD10W2NdLHA9ZihkKSkpOihvPW0sKGgrPTEpPGkmJihtPWVbaF0sdj1mKG0pKSksYzxyJiZwPHZ8fGg+PWk/KGE9ZCwoYys9MSk8ciYmKGQ9dFtjXSxwPWYoZCkpKTooYT1tLChoKz0xKTxpJiYobT1lW2hdLHY9ZihtKSkpO2Zvcih2YXIgZyx5LGIseCxfLHc9YStvLE09dy1hLGs9by1NLEE9ayxUPXc7YzxyJiZoPGk7KXA8dj8oYT1kLChjKz0xKTxyJiYoZD10W2NdLHA9ZihkKSkpOihhPW0sKGgrPTEpPGkmJihtPWVbaF0sdj1mKG0pKSksbz1BLHc9YStvLE09dy1hLGs9by1NLGsmJihsW3UrK109ayksZz1UK3cseT1nLVQsYj1nLXkseD13LXksXz1ULWIsQT1fK3gsVD1nO2Zvcig7YzxyOylhPWQsbz1BLHc9YStvLE09dy1hLGs9by1NLGsmJihsW3UrK109ayksZz1UK3cseT1nLVQsYj1nLXkseD13LXksXz1ULWIsQT1fK3gsVD1nLChjKz0xKTxyJiYoZD10W2NdKTtmb3IoO2g8aTspYT1tLG89QSx3PWErbyxNPXctYSxrPW8tTSxrJiYobFt1KytdPWspLGc9VCt3LHk9Zy1ULGI9Zy15LHg9dy15LF89VC1iLEE9Xyt4LFQ9ZywoaCs9MSk8aSYmKG09ZVtoXSk7cmV0dXJuIEEmJihsW3UrK109QSksVCYmKGxbdSsrXT1UKSx1fHwobFt1KytdPTApLGwubGVuZ3RoPXUsbH1lLmV4cG9ydHM9aX0se31dLDUxMjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9yLmV4cG9ydHM9aSgpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KGkpOmUuU2hlbGZQYWNrPWkoKX0odGhpcyxmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLHIpe3I9cnx8e30sdGhpcy53PXR8fDY0LHRoaXMuaD1lfHw2NCx0aGlzLmF1dG9SZXNpemU9ISFyLmF1dG9SZXNpemUsdGhpcy5zaGVsdmVzPVtdLHRoaXMuc3RhdHM9e30sdGhpcy5jb3VudD1mdW5jdGlvbih0KXt0aGlzLnN0YXRzW3RdPTErKDB8dGhpcy5zdGF0c1t0XSl9fWZ1bmN0aW9uIGUodCxlLHIpe3RoaXMueD0wLHRoaXMueT10LHRoaXMudz10aGlzLmZyZWU9ZSx0aGlzLmg9cn1yZXR1cm4gdC5wcm90b3R5cGUucGFjaz1mdW5jdGlvbih0LGUpe3Q9W10uY29uY2F0KHQpLGU9ZXx8e307Zm9yKHZhciByLG4saSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10ud3x8dFtvXS53aWR0aCxuPXRbb10uaHx8dFtvXS5oZWlnaHQsciYmbil7aWYoIShpPXRoaXMucGFja09uZShyLG4pKSljb250aW51ZTtlLmluUGxhY2UmJih0W29dLng9aS54LHRbb10ueT1pLnkpLGEucHVzaChpKX1pZih0aGlzLnNoZWx2ZXMubGVuZ3RoPjApe2Zvcih2YXIgcz0wLGw9MCx1PTA7dTx0aGlzLnNoZWx2ZXMubGVuZ3RoO3UrKyl7dmFyIGM9dGhpcy5zaGVsdmVzW3VdO2wrPWMuaCxzPU1hdGgubWF4KGMudy1jLmZyZWUscyl9dGhpcy5yZXNpemUocyxsKX1yZXR1cm4gYX0sdC5wcm90b3R5cGUucGFja09uZT1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbixpLGE9MCxvPXtzaGVsZjotMSx3YXN0ZToxLzB9LHM9MDtzPHRoaXMuc2hlbHZlcy5sZW5ndGg7cysrKXtpZihuPXRoaXMuc2hlbHZlc1tzXSxhKz1uLmgscj09PW4uaCYmdDw9bi5mcmVlKXJldHVybiB0aGlzLmNvdW50KHIpLG4uYWxsb2ModCxyKTtyPm4uaHx8dD5uLmZyZWV8fHI8bi5oJiZ0PD1uLmZyZWUmJihpPW4uaC1yKTxvLndhc3RlJiYoby53YXN0ZT1pLG8uc2hlbGY9cyl9aWYoLTEhPT1vLnNoZWxmKXJldHVybiBuPXRoaXMuc2hlbHZlc1tvLnNoZWxmXSx0aGlzLmNvdW50KHIpLG4uYWxsb2ModCxyKTtpZihyPD10aGlzLmgtYSYmdDw9dGhpcy53KXJldHVybiBuPW5ldyBlKGEsdGhpcy53LHIpLHRoaXMuc2hlbHZlcy5wdXNoKG4pLHRoaXMuY291bnQociksbi5hbGxvYyh0LHIpO2lmKHRoaXMuYXV0b1Jlc2l6ZSl7dmFyIGwsdSxjLGg7cmV0dXJuIGw9dT10aGlzLmgsYz1oPXRoaXMudywoYzw9bHx8dD5jKSYmKGg9MipNYXRoLm1heCh0LGMpKSwobDxjfHxyPmwpJiYodT0yKk1hdGgubWF4KHIsbCkpLHRoaXMucmVzaXplKGgsdSksdGhpcy5wYWNrT25lKHQscil9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaGVsdmVzPVtdLHRoaXMuc3RhdHM9e319LHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3RoaXMudz10LHRoaXMuaD1lO2Zvcih2YXIgcj0wO3I8dGhpcy5zaGVsdmVzLmxlbmd0aDtyKyspdGhpcy5zaGVsdmVzW3JdLnJlc2l6ZSh0KTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih0PnRoaXMuZnJlZXx8ZT50aGlzLmgpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy54O3JldHVybiB0aGlzLngrPXQsdGhpcy5mcmVlLT10LHt4OnIseTp0aGlzLnksdzp0LGg6ZSx3aWR0aDp0LGhlaWdodDplfX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyZWUrPXQtdGhpcy53LHRoaXMudz10LCEwfSx0fSl9LHt9XSw1MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSw1MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gYShpKHQpKX1lLmV4cG9ydHM9bjt2YXIgaT10KCJib3VuZGFyeS1jZWxscyIpLGE9dCgicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCIpfSx7ImJvdW5kYXJ5LWNlbGxzIjo2NywicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCI6NDk2fV0sNTE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxuPTA7bjxlOysrbilyPTB8TWF0aC5tYXgocix0W25dLmxlbmd0aCk7cmV0dXJuIHItMX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49aC5tYWxsb2NVaW50OChyKSxpPTA7aTxyOysraSluW2ldPXRbaV08ZXwwO3JldHVybiBufWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lKihlKzEpLzIqcnwwLGk9aC5tYWxsb2NVaW50MzIoMipuKSxhPTAsbz0wO288cjsrK28pZm9yKHZhciBzPXRbb10sZT1zLmxlbmd0aCxsPTA7bDxlOysrbClmb3IodmFyIHU9MDt1PGw7Kyt1KXt2YXIgZD1zW3VdLHA9c1tsXTtpW2ErK109MHxNYXRoLm1pbihkLHApLGlbYSsrXT0wfE1hdGgubWF4KGQscCl9ZihjKGksW2EvMnwwLDJdKSk7Zm9yKHZhciBtPTIsbz0yO288YTtvKz0yKWlbby0yXT09PWlbb10mJmlbby0xXT09PWlbbysxXXx8KGlbbSsrXT1pW29dLGlbbSsrXT1pW28rMV0pO3JldHVybiBjKGksW20vMnwwLDJdKX1mdW5jdGlvbiBvKHQsZSxyLG4pe2Zvcih2YXIgaT10LmRhdGEsYT10LnNoYXBlWzBdLG89aC5tYWxsb2NEb3VibGUoYSkscz0wLGw9MDtsPGE7KytsKXt2YXIgdT1pWzIqbF0sZj1pWzIqbCsxXTtpZihyW3VdIT09cltmXSl7dmFyIGQ9ZVt1XSxwPWVbZl07aVsyKnNdPXUsaVsyKnMrMV09ZixvW3MrK109KHAtbikvKHAtZCl9fXJldHVybiB0LnNoYXBlWzBdPXMsYyhvLFtzXSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWgubWFsbG9jSW50MzIoMiplKSxuPXQuc2hhcGVbMF0saT10LmRhdGE7clswXT0wO2Zvcih2YXIgYT0wLG89MDtvPG47KytvKXt2YXIgcz1pWzIqb107aWYocyE9PWEpe2ZvcihyWzIqYSsxXT1vOysrYTxzOylyWzIqYV09byxyWzIqYSsxXT1vO3JbMiphXT1vfX1mb3IoclsyKmErMV09bjsrK2E8ZTspclsyKmFdPXJbMiphKzFdPW47cmV0dXJuIHJ9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9MHx0LnNoYXBlWzBdLHI9dC5kYXRhLG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09W3JbMippXSxyWzIqaSsxXV07cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUscix1KXtpZihyPXJ8fDAsdm9pZCAwPT09dSYmKHU9bih0KSksMD09PXQubGVuZ3RofHx1PDEpcmV0dXJue2NlbGxzOltdLHZlcnRleElkczpbXSx2ZXJ0ZXhXZWlnaHRzOltdfTt2YXIgYz1pKGUsK3IpLGY9YSh0LHUpLHA9byhmLGUsYywrciksbT1zKGYsMHxlLmxlbmd0aCksdj1kKHUpKHQsZi5kYXRhLG0sYyksZz1sKGYpLHk9W10uc2xpY2UuY2FsbChwLmRhdGEsMCxwLnNoYXBlWzBdKTtyZXR1cm4gaC5mcmVlKGMpLGguZnJlZShmLmRhdGEpLGguZnJlZShwLmRhdGEpLGguZnJlZShtKSx7Y2VsbHM6dix2ZXJ0ZXhJZHM6Zyx2ZXJ0ZXhXZWlnaHRzOnl9fWUuZXhwb3J0cz11O3ZhciBjPXQoIm5kYXJyYXkiKSxoPXQoInR5cGVkYXJyYXktcG9vbCIpLGY9dCgibmRhcnJheS1zb3J0IiksZD10KCIuL2xpYi9jb2RlZ2VuIil9LHsiLi9saWIvY29kZWdlbiI6NTE2LG5kYXJyYXk6NDY1LCJuZGFycmF5LXNvcnQiOjQ2MywidHlwZWRhcnJheS1wb29sIjo1Mzl9XSw1MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT0wLHI9bmV3IEFycmF5KHQrMSk7clswXT1bW11dO2Zvcih2YXIgbj0xO248PXQ7KytuKWZvcih2YXIgaT1yW25dPW8obikscz0wO3M8aS5sZW5ndGg7KytzKWU9TWF0aC5tYXgoZSxpW25dLmxlbmd0aCk7Zm9yKHZhciBsPVsiZnVuY3Rpb24gQihDLEUsaSxqKXsiLCJ2YXIgYT1NYXRoLm1pbihpLGopfDAsYj1NYXRoLm1heChpLGopfDAsbD1DWzIqYV0saD1DWzIqYSsxXTsiLCJ3aGlsZShsPGgpeyIsInZhciBtPShsK2gpPj4xLHY9RVsyKm0rMV07IiwiaWYodj09PWIpe3JldHVybiBtfSIsImlmKGI8dil7aD1tfWVsc2V7bD1tKzF9IiwifSIsInJldHVybiBsOyIsIn07IiwiZnVuY3Rpb24gZ2V0Q29udG91ciIsdCwiZChGLEUsQyxTKXsiLCJ2YXIgbj1GLmxlbmd0aCxSPVtdOyIsImZvcih2YXIgaT0wO2k8bjsrK2kpe3ZhciBjPUZbaV0sbD1jLmxlbmd0aDsiXSxuPXQrMTtuPjE7LS1uKXtuPHQrMSYmbC5wdXNoKCJlbHNlICIpLGwucHVzaCgiaWYobD09PSIsbiwiKXsiKTtmb3IodmFyIHU9W10scz0wO3M8bjsrK3MpdS5wdXNoKCIoU1tjWyIrcysiXV08PCIrcysiKSIpO2wucHVzaCgidmFyIE09Iix1LmpvaW4oIisiKSwiO2lmKE09PT0wfHxNPT09IiwoMTw8biktMSwiKXtjb250aW51ZX1zd2l0Y2goTSl7Iik7Zm9yKHZhciBpPXJbbi0xXSxzPTA7czxpLmxlbmd0aDsrK3MpbC5wdXNoKCJjYXNlICIscywiOiIpLGZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8PTApKXtsLnB1c2goIlIucHVzaCgiKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl7dmFyIHI9dFtlXTtlPjAmJmwucHVzaCgiLCIpLGwucHVzaCgiWyIpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO24+MCYmbC5wdXNoKCIsIiksbC5wdXNoKCJCKEMsRSxjWyIsaVswXSwiXSxjWyIsaVsxXSwiXSkiKX1sLnB1c2goIl0iKX1sLnB1c2goIik7Iil9fShpW3NdKSxsLnB1c2goImJyZWFrOyIpO2wucHVzaCgifX0iKX1yZXR1cm4gbC5wdXNoKCJ9cmV0dXJuIFI7fTtyZXR1cm4gZ2V0Q29udG91ciIsdCwiZCIpLG5ldyBGdW5jdGlvbigicG9vbCIsbC5qb2luKCIiKSkoYSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1zW3RdO3JldHVybiBlfHwoZT1zW3RdPW4odCkpLGV9ZS5leHBvcnRzPWk7dmFyIGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJtYXJjaGluZy1zaW1wbGV4LXRhYmxlIikscz17fX0seyJtYXJjaGluZy1zaW1wbGV4LXRhYmxlIjo0NDMsInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sNTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyJ1c2UgcmVzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6dmFyIGE9dFswXSt0WzFdLWVbMF0tZVsxXTtyZXR1cm4gYXx8aSh0WzBdLHRbMV0pLWkoZVswXSxlWzFdKTtjYXNlIDM6dmFyIG89dFswXSt0WzFdLHM9ZVswXStlWzFdO2lmKGE9byt0WzJdLShzK2VbMl0pKXJldHVybiBhO3ZhciBsPWkodFswXSx0WzFdKSx1PWkoZVswXSxlWzFdKSxhPWkobCx0WzJdKS1pKHUsZVsyXSk7cmV0dXJuIGF8fGkobCt0WzJdLG8pLWkodStlWzJdLHMpO2RlZmF1bHQ6dmFyIGM9dC5zbGljZSgwKTtjLnNvcnQoKTt2YXIgaD1lLnNsaWNlKDApO2guc29ydCgpO2Zvcih2YXIgZj0wO2Y8cjsrK2YpaWYobj1jW2ZdLWhbZl0pcmV0dXJuIG47cmV0dXJuIDB9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0WzBdLGVbMF0pfWZ1bmN0aW9uIGwodCxlKXtpZihlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpbltpXT1bdFtpXSxlW2ldXTtuLnNvcnQocyk7Zm9yKHZhciBpPTA7aTxyOysraSl0W2ldPW5baV1bMF0sZVtpXT1uW2ldWzFdO3JldHVybiB0fXJldHVybiB0LnNvcnQobyksdH1mdW5jdGlvbiB1KHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9MSxyPXQubGVuZ3RoLG49MTtuPHI7KytuKXt2YXIgaT10W25dO2lmKG8oaSx0W24tMV0pKXtpZihuPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1pfX1yZXR1cm4gdC5sZW5ndGg9ZSx0fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT0tMTtyPD1uOyl7dmFyIGE9cituPj4xLHM9byh0W2FdLGUpO3M8PTA/KDA9PT1zJiYoaT1hKSxyPWErMSk6cz4wJiYobj1hLTEpfXJldHVybiBpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXJbbl09W107Zm9yKHZhciBhPVtdLG49MCxzPWUubGVuZ3RoO248czsrK24pZm9yKHZhciBsPWVbbl0sdT1sLmxlbmd0aCxoPTEsZj0xPDx1O2g8ZjsrK2gpe2EubGVuZ3RoPWIucG9wQ291bnQoaCk7Zm9yKHZhciBkPTAscD0wO3A8dTsrK3ApaCYxPDxwJiYoYVtkKytdPWxbcF0pO3ZhciBtPWModCxhKTtpZighKG08MCkpZm9yKDs7KWlmKHJbbSsrXS5wdXNoKG4pLG0+PXQubGVuZ3RofHwwIT09byh0W21dLGEpKWJyZWFrfXJldHVybiByfWZ1bmN0aW9uIGYodCxlKXtpZighZSlyZXR1cm4gaCh1KHAodCwwKSksdCwwKTtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09W107Zm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pclthW29dXS5wdXNoKG4pO3JldHVybiByfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wfGkubGVuZ3RoLG89MSxzPTE8PGE7bzxzOysrbyl7Zm9yKHZhciB1PVtdLGM9MDtjPGE7KytjKW8+Pj5jJjEmJnUucHVzaChpW2NdKTtlLnB1c2godSl9cmV0dXJuIGwoZSl9ZnVuY3Rpb24gcCh0LGUpe2lmKGU8MClyZXR1cm5bXTtmb3IodmFyIHI9W10sbj0oMTw8ZSsxKS0xLGk9MDtpPHQubGVuZ3RoOysraSlmb3IodmFyIGE9dFtpXSxvPW47bzwxPDxhLmxlbmd0aDtvPWIubmV4dENvbWJpbmF0aW9uKG8pKXtmb3IodmFyIHM9bmV3IEFycmF5KGUrMSksdT0wLGM9MDtjPGEubGVuZ3RoOysrYylvJjE8PGMmJihzW3UrK109YVtjXSk7ci5wdXNoKHMpfXJldHVybiBsKHIpfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBzPW5ldyBBcnJheShpLmxlbmd0aC0xKSx1PTAsYz0wO3U8bzsrK3UpdSE9PWEmJihzW2MrK109aVt1XSk7ZS5wdXNoKHMpfXJldHVybiBsKGUpfWZ1bmN0aW9uIHYodCxlKXtmb3IodmFyIHI9bmV3IHgoZSksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLGE9MDthPGkubGVuZ3RoOysrYSlmb3IodmFyIG89YSsxO288aS5sZW5ndGg7KytvKXIubGluayhpW2FdLGlbb10pO2Zvcih2YXIgcz1bXSxsPXIucmFua3Msbj0wO248bC5sZW5ndGg7KytuKWxbbl09LTE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciB1PXIuZmluZCh0W25dWzBdKTtsW3VdPDA/KGxbdV09cy5sZW5ndGgscy5wdXNoKFt0W25dLnNsaWNlKDApXSkpOnNbbFt1XV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gc31mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT11KGwocCh0LDApKSkscj1uZXcgeChlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLGE9MDthPGkubGVuZ3RoOysrYSlmb3IodmFyIG89YyhlLFtpW2FdXSkscz1hKzE7czxpLmxlbmd0aDsrK3Mpci5saW5rKG8sYyhlLFtpW3NdXSkpO2Zvcih2YXIgaD1bXSxmPXIucmFua3Msbj0wO248Zi5sZW5ndGg7KytuKWZbbl09LTE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBkPXIuZmluZChjKGUsW3Rbbl1bMF1dKSk7ZltkXTwwPyhmW2RdPWgubGVuZ3RoLGgucHVzaChbdFtuXS5zbGljZSgwKV0pKTpoW2ZbZF1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGh9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlP3YodCxlKTpnKHQpfXZhciBiPXQoImJpdC10d2lkZGxlIikseD10KCJ1bmlvbi1maW5kIik7ci5kaW1lbnNpb249bixyLmNvdW50VmVydGljZXM9aSxyLmNsb25lQ2VsbHM9YSxyLmNvbXBhcmVDZWxscz1vLHIubm9ybWFsaXplPWwsci51bmlxdWU9dSxyLmZpbmRDZWxsPWMsci5pbmNpZGVuY2U9aCxyLmR1YWw9ZixyLmV4cGxvZGU9ZCxyLnNrZWxldG9uPXAsci5ib3VuZGFyeT1tLHIuY29ubmVjdGVkQ29tcG9uZW50cz15fSx7ImJpdC10d2lkZGxlIjo2NSwidW5pb24tZmluZCI6NTQwfV0sNTE4OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzY1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6NjV9XSw1MTk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNTE3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiYml0LXR3aWRkbGUiOjUxOCxkdXA6NTE3LCJ1bmlvbi1maW5kIjo1MjB9XSw1MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7InVzZSByZXN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofSxuLnByb3RvdHlwZS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0sbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5yb290cztlW3RdIT09dDspe3ZhciByPWVbdF07ZVt0XT1lW3JdLHQ9cn1yZXR1cm4gdH0sbi5wcm90b3R5cGUubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSw1MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIE1hdGguYWJzKGEodCxlLHIpKS9NYXRoLnNxcnQoTWF0aC5wb3coZVswXS1yWzBdLDIpK01hdGgucG93KGVbMV0tclsxXSwyKSl9ZnVuY3Rpb24gaSh0LGUscil7ZnVuY3Rpb24gaSh0KXtpZihiW3RdKXJldHVybiAxLzA7dmFyIHI9dlt0XSxpPWdbdF07cmV0dXJuIHI8MHx8aTwwPzEvMDpuKGVbdF0sZVtyXSxlW2ldKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9a1t0XSxuPWtbZV07a1t0XT1uLGtbZV09cixBW3JdPWUsQVtuXT10fWZ1bmN0aW9uIHModCl7cmV0dXJuIHlba1t0XV19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gMSZ0P3QtMT4+MToodD4+MSktMX1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1zKHQpOzspe3ZhciByPWUsbj0yKnQrMSxpPTIqKHQrMSksbz10O2lmKG48VCl7dmFyIGw9cyhuKTtsPHImJihvPW4scj1sKX1pZihpPFQpe3MoaSk8ciYmKG89aSl9aWYobz09PXQpcmV0dXJuIHQ7YSh0LG8pLHQ9b319ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9cyh0KTt0PjA7KXt2YXIgcj1sKHQpO2lmKHI+PTApe2lmKGU8cyhyKSl7YSh0LHIpLHQ9cjtjb250aW51ZX19cmV0dXJuIHR9fWZ1bmN0aW9uIGgoKXtpZihUPjApe3ZhciB0PWtbMF07cmV0dXJuIGEoMCxULTEpLFQtPTEsdSgwKSx0fXJldHVybi0xfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1rW3RdO3JldHVybiB5W3JdPT09ZT90Oih5W3JdPS0xLzAsYyh0KSxoKCkseVtyXT1lLFQrPTEsYyhULTEpKX1mdW5jdGlvbiBkKHQsZSl7aWYodFtlXTwwKXJldHVybiBlO3ZhciByPWUsbj1lO2Rve3ZhciBpPXRbbl07aWYoIWJbbl18fGk8MHx8aT09PW4pYnJlYWs7aWYobj1pLGk9dFtuXSwhYltuXXx8aTwwfHxpPT09bilicmVhaztuPWkscj10W3JdfXdoaWxlKHIhPT1uKTtmb3IodmFyIGE9ZTthIT09bjthPXRbYV0pdFthXT1uO3JldHVybiBufWZvcih2YXIgcD1lLmxlbmd0aCxtPXQubGVuZ3RoLHY9bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApLGI9bmV3IEFycmF5KHApLHg9MDt4PHA7Kyt4KXZbeF09Z1t4XT0tMSx5W3hdPTEvMCxiW3hdPSExO2Zvcih2YXIgeD0wO3g8bTsrK3gpe3ZhciBfPXRbeF07aWYoMiE9PV8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbXVzdCBiZSBhIGdyYXBoIik7dmFyIHc9X1sxXSxNPV9bMF07LTEhPT1nW01dP2dbTV09LTI6Z1tNXT13LC0xIT09dlt3XT92W3ddPS0yOnZbd109TX1mb3IodmFyIGs9W10sQT1uZXcgQXJyYXkocCkseD0wO3g8cDsrK3gpeyh5W3hdPWkoeCkpPDEvMD8oQVt4XT1rLmxlbmd0aCxrLnB1c2goeCkpOkFbeF09LTF9Zm9yKHZhciBUPWsubGVuZ3RoLHg9VD4+MTt4Pj0wOy0teCl1KHgpO2Zvcig7Oyl7dmFyIFM9aCgpO2lmKFM8MHx8eVtTXT5yKWJyZWFrOyFmdW5jdGlvbih0KXtpZighYlt0XSl7Ylt0XT0hMDt2YXIgZT12W3RdLHI9Z1t0XTt2W3JdPj0wJiYodltyXT1lKSxnW2VdPj0wJiYoZ1tlXT1yKSxBW2VdPj0wJiZmKEFbZV0saShlKSksQVtyXT49MCYmZihBW3JdLGkocikpfX0oUyl9Zm9yKHZhciBFPVtdLHg9MDt4PHA7Kyt4KWJbeF18fChBW3hdPUUubGVuZ3RoLEUucHVzaChlW3hdLnNsaWNlKCkpKTt2YXIgTD0oRS5sZW5ndGgsW10pO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZCh2LHRbMF0pLHI9ZChnLHRbMV0pO2lmKGU+PTAmJnI+PTAmJmUhPT1yKXt2YXIgbj1BW2VdLGk9QVtyXTtuIT09aSYmTC5wdXNoKFtuLGldKX19KSxvLnVuaXF1ZShvLm5vcm1hbGl6ZShMKSkse3Bvc2l0aW9uczpFLGVkZ2VzOkx9fWUuZXhwb3J0cz1pO3ZhciBhPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLG89dCgic2ltcGxpY2lhbC1jb21wbGV4Iil9LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDYsInNpbXBsaWNpYWwtY29tcGxleCI6NTE5fV0sNTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0sbj1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgaT1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLG89TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxzPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksbD1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBvPHM/by1zOmk+bD9pLWw6by1sfXI9ZVsxXSxuPWVbMF19dmFyIHUsYzt0WzBdWzFdPHRbMV1bMV0/KHU9dFswXSxjPXRbMV0pOih1PXRbMV0sYz10WzBdKTt2YXIgaD1hKG4scix1KTtyZXR1cm4gaHx8KChoPWEobixyLGMpKXx8Yy1uKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsaTtpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLGk9ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSlyZXR1cm4gbihlLHQpO3I9ZVsxXSxpPWVbMF19dmFyIG8scztpZih0WzBdWzBdPHRbMV1bMF0pbz10WzBdLHM9dFsxXTtlbHNle2lmKCEodFswXVswXT50WzFdWzBdKSlyZXR1cm4tbih0LGUpO289dFsxXSxzPXRbMF19dmFyIGw9YShyLGkscyksdT1hKHIsaSxvKTtpZihsPDApe2lmKHU8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKHU+PTApcmV0dXJuIGx9ZWxzZSBpZih1KXJldHVybiB1O2lmKGw9YShzLG8saSksdT1hKHMsbyxyKSxsPDApe2lmKHU8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKHU+PTApcmV0dXJuIGx9ZWxzZSBpZih1KXJldHVybiB1O3JldHVybiBpWzBdLXNbMF19ZS5leHBvcnRzPWk7dmFyIGE9dCgicm9idXN0LW9yaWVudGF0aW9uIil9LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDZ9XSw1MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWgobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7dmFyIGw9YSh0LnJpZ2h0LGUpO2lmKGwpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbD1hKHQucmlnaHQsZSk7aWYobClyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTIqZSxpPW5ldyBBcnJheShyKSxhPTA7YTxlOysrYSl7dmFyIGw9dFthXSx1PWxbMF1bMF08bFsxXVswXTtpWzIqYV09bmV3IHMobFswXVswXSxsLHUsYSksaVsyKmErMV09bmV3IHMobFsxXVswXSxsLCF1LGEpfWkuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1lLng7cmV0dXJuIHJ8fCgocj10LmNyZWF0ZS1lLmNyZWF0ZSl8fE1hdGgubWluKHQuc2VnbWVudFswXVsxXSx0LnNlZ21lbnRbMV1bMV0pLU1hdGgubWluKGUuc2VnbWVudFswXVsxXSxlLnNlZ21lbnRbMV1bMV0pKX0pO2Zvcih2YXIgaD1jKGYpLGQ9W10scD1bXSxtPVtdLGE9MDthPHI7KXtmb3IodmFyIHY9aVthXS54LGc9W107YTxyOyl7dmFyIHk9aVthXTtpZih5LnghPT12KWJyZWFrO2ErPTEseS5zZWdtZW50WzBdWzBdPT09eS54JiZ5LnNlZ21lbnRbMV1bMF09PT15Lng/eS5jcmVhdGUmJih5LnNlZ21lbnRbMF1bMV08eS5zZWdtZW50WzFdWzFdPyhnLnB1c2gobmV3IG8oeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITAsITApKSxnLnB1c2gobmV3IG8oeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITEsITEpKSk6KGcucHVzaChuZXcgbyh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMCwhMSkpLGcucHVzaChuZXcgbyh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMSwhMCkpKSk6aD15LmNyZWF0ZT9oLmluc2VydCh5LnNlZ21lbnQseS5pbmRleCk6aC5yZW1vdmUoeS5zZWdtZW50KX1kLnB1c2goaC5yb290KSxwLnB1c2godiksbS5wdXNoKGcpfXJldHVybiBuZXcgbihkLHAsbSl9ZS5leHBvcnRzPWw7dmFyIHU9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPXQoImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWUiKSxoPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGY9dCgiLi9saWIvb3JkZXItc2VnbWVudHMiKTtuLnByb3RvdHlwZS5jYXN0VXA9ZnVuY3Rpb24odCl7dmFyIGU9dS5sZSh0aGlzLmNvb3JkaW5hdGVzLHRbMF0pO2lmKGU8MClyZXR1cm4tMTt2YXIgcj0odGhpcy5zbGFic1tlXSxhKHRoaXMuc2xhYnNbZV0sdCkpLG49LTE7aWYociYmKG49ci52YWx1ZSksdGhpcy5jb29yZGluYXRlc1tlXT09PXRbMF0pe3ZhciBvPW51bGw7aWYociYmKG89ci5rZXkpLGU+MCl7dmFyIHM9YSh0aGlzLnNsYWJzW2UtMV0sdCk7cyYmKG8/ZihzLmtleSxvKT4wJiYobz1zLmtleSxuPXMudmFsdWUpOihuPXMudmFsdWUsbz1zLmtleSkpfXZhciBsPXRoaXMuaG9yaXpvbnRhbFtlXTtpZihsLmxlbmd0aD4wKXt2YXIgYz11LmdlKGwsdFsxXSxpKTtpZihjPGwubGVuZ3RoKXt2YXIgZD1sW2NdO2lmKHRbMV09PT1kLnkpe2lmKGQuY2xvc2VkKXJldHVybiBkLmluZGV4O2Zvcig7YzxsLmxlbmd0aC0xJiZsW2MrMV0ueT09PXRbMV07KWlmKGMrPTEsZD1sW2NdLGQuY2xvc2VkKXJldHVybiBkLmluZGV4O2lmKGQueT09PXRbMV0mJiFkLnN0YXJ0KXtpZigoYys9MSk+PWwubGVuZ3RoKXJldHVybiBuO2Q9bFtjXX19aWYoZC5zdGFydClpZihvKXt2YXIgcD1oKG9bMF0sb1sxXSxbdFswXSxkLnldKTtvWzBdWzBdPm9bMV1bMF0mJihwPS1wKSxwPjAmJihuPWQuaW5kZXgpfWVsc2Ugbj1kLmluZGV4O2Vsc2UgZC55IT09dFsxXSYmKG49ZC5pbmRleCl9fX1yZXR1cm4gbn19LHsiLi9saWIvb3JkZXItc2VnbWVudHMiOjUyMiwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjY0LCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIjoxMzMsInJvYnVzdC1vcmllbnRhdGlvbiI6NTA2fV0sNTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj11KGwodCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9bi1lLGE9LWUvaTthPDA/YT0wOmE+MSYmKGE9MSk7Zm9yKHZhciBvPTEtYSxzPXQubGVuZ3RoLGw9bmV3IEFycmF5KHMpLHU9MDt1PHM7Kyt1KWxbdV09YSp0W3VdK28qclt1XTtyZXR1cm4gbH1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVtdLGE9W10sbz1uKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSx1PTA7dTx0Lmxlbmd0aDsrK3Uscz1sKXtsPXRbdV07dmFyIGM9bihsLGUpO2lmKG88MCYmYz4wfHxvPjAmJmM8MCl7dmFyIGg9aShzLGMsbCxvKTtyLnB1c2goaCksYS5wdXNoKGguc2xpY2UoKSl9YzwwP2EucHVzaChsLnNsaWNlKCkpOmM+MD9yLnB1c2gobC5zbGljZSgpKTooci5wdXNoKGwuc2xpY2UoKSksYS5wdXNoKGwuc2xpY2UoKSkpLG89Y31yZXR1cm57cG9zaXRpdmU6cixuZWdhdGl2ZTphfX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPVtdLGE9bih0W3QubGVuZ3RoLTFdLGUpLG89dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLG89cyl7cz10W2xdO3ZhciB1PW4ocyxlKTsoYTwwJiZ1PjB8fGE+MCYmdTwwKSYmci5wdXNoKGkobyx1LHMsYSkpLHU+PTAmJnIucHVzaChzLnNsaWNlKCkpLGE9dX1yZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPVtdLGE9bih0W3QubGVuZ3RoLTFdLGUpLG89dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLG89cyl7cz10W2xdO3ZhciB1PW4ocyxlKTsoYTwwJiZ1PjB8fGE+MCYmdTwwKSYmci5wdXNoKGkobyx1LHMsYSkpLHU8PTAmJnIucHVzaChzLnNsaWNlKCkpLGE9dX1yZXR1cm4gcn12YXIgbD10KCJyb2J1c3QtZG90LXByb2R1Y3QiKSx1PXQoInJvYnVzdC1zdW0iKTtlLmV4cG9ydHM9YSxlLmV4cG9ydHMucG9zaXRpdmU9byxlLmV4cG9ydHMubmVnYXRpdmU9c30seyJyb2J1c3QtZG90LXByb2R1Y3QiOjUwMywicm9idXN0LXN1bSI6NTExfV0sNTI1OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIGkoYSh0KSxhcmd1bWVudHMpfWZ1bmN0aW9uIHIodCxyKXtyZXR1cm4gZS5hcHBseShudWxsLFt0XS5jb25jYXQocnx8W10pKX1mdW5jdGlvbiBpKHQscil7dmFyIG4saSxhLHMsbCx1LGMsaCxmLGQ9MSxwPXQubGVuZ3RoLG09IiI7Zm9yKGk9MDtpPHA7aSsrKWlmKCJzdHJpbmciPT10eXBlb2YgdFtpXSltKz10W2ldO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0W2ldKSl7aWYocz10W2ldLHNbMl0pZm9yKG49cltkXSxhPTA7YTxzWzJdLmxlbmd0aDthKyspe2lmKCFuLmhhc093blByb3BlcnR5KHNbMl1bYV0pKXRocm93IG5ldyBFcnJvcihlKCdbc3ByaW50Zl0gcHJvcGVydHkgIiVzIiBkb2VzIG5vdCBleGlzdCcsc1syXVthXSkpO249bltzWzJdW2FdXX1lbHNlIG49c1sxXT9yW3NbMV1dOnJbZCsrXTtpZihvLm5vdF90eXBlLnRlc3Qoc1s4XSkmJm8ubm90X3ByaW1pdGl2ZS50ZXN0KHNbOF0pJiZuIGluc3RhbmNlb2YgRnVuY3Rpb24mJihuPW4oKSksby5udW1lcmljX2FyZy50ZXN0KHNbOF0pJiYibnVtYmVyIiE9dHlwZW9mIG4mJmlzTmFOKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoZSgiW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVUIixuKSk7c3dpdGNoKG8ubnVtYmVyLnRlc3Qoc1s4XSkmJihoPW4+PTApLHNbOF0pe2Nhc2UiYiI6bj1wYXJzZUludChuLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlImMiOm49U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChuLDEwKSk7YnJlYWs7Y2FzZSJkIjpjYXNlImkiOm49cGFyc2VJbnQobiwxMCk7YnJlYWs7Y2FzZSJqIjpuPUpTT04uc3RyaW5naWZ5KG4sbnVsbCxzWzZdP3BhcnNlSW50KHNbNl0pOjApO2JyZWFrO2Nhc2UiZSI6bj1zWzddP3BhcnNlRmxvYXQobikudG9FeHBvbmVudGlhbChzWzddKTpwYXJzZUZsb2F0KG4pLnRvRXhwb25lbnRpYWwoKTticmVhaztjYXNlImYiOm49c1s3XT9wYXJzZUZsb2F0KG4pLnRvRml4ZWQoc1s3XSk6cGFyc2VGbG9hdChuKTticmVhaztjYXNlImciOm49c1s3XT9TdHJpbmcoTnVtYmVyKG4udG9QcmVjaXNpb24oc1s3XSkpKTpwYXJzZUZsb2F0KG4pO2JyZWFrO2Nhc2UibyI6bj0ocGFyc2VJbnQobiwxMCk+Pj4wKS50b1N0cmluZyg4KTticmVhaztjYXNlInMiOm49U3RyaW5nKG4pLG49c1s3XT9uLnN1YnN0cmluZygwLHNbN10pOm47YnJlYWs7Y2FzZSJ0IjpuPVN0cmluZyghIW4pLG49c1s3XT9uLnN1YnN0cmluZygwLHNbN10pOm47YnJlYWs7Y2FzZSJUIjpuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLG49c1s3XT9uLnN1YnN0cmluZygwLHNbN10pOm47YnJlYWs7Y2FzZSJ1IjpuPXBhcnNlSW50KG4sMTApPj4+MDticmVhaztjYXNlInYiOm49bi52YWx1ZU9mKCksbj1zWzddP24uc3Vic3RyaW5nKDAsc1s3XSk6bjticmVhaztjYXNlIngiOm49KHBhcnNlSW50KG4sMTApPj4+MCkudG9TdHJpbmcoMTYpO2JyZWFrO2Nhc2UiWCI6bj0ocGFyc2VJbnQobiwxMCk+Pj4wKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1vLmpzb24udGVzdChzWzhdKT9tKz1uOighby5udW1iZXIudGVzdChzWzhdKXx8aCYmIXNbM10/Zj0iIjooZj1oPyIrIjoiLSIsbj1uLnRvU3RyaW5nKCkucmVwbGFjZShvLnNpZ24sIiIpKSx1PXNbNF0/IjAiPT09c1s0XT8iMCI6c1s0XS5jaGFyQXQoMSk6IiAiLGM9c1s2XS0oZituKS5sZW5ndGgsbD1zWzZdJiZjPjA/dS5yZXBlYXQoYyk6IiIsbSs9c1s1XT9mK24rbDoiMCI9PT11P2YrbCtuOmwrZituKX1yZXR1cm4gbX1mdW5jdGlvbiBhKHQpe2lmKHNbdF0pcmV0dXJuIHNbdF07Zm9yKHZhciBlLHI9dCxuPVtdLGk9MDtyOyl7aWYobnVsbCE9PShlPW8udGV4dC5leGVjKHIpKSluLnB1c2goZVswXSk7ZWxzZSBpZihudWxsIT09KGU9by5tb2R1bG8uZXhlYyhyKSkpbi5wdXNoKCIlIik7ZWxzZXtpZihudWxsPT09KGU9by5wbGFjZWhvbGRlci5leGVjKHIpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyIik7aWYoZVsyXSl7aXw9MTt2YXIgYT1bXSxsPWVbMl0sdT1bXTtpZihudWxsPT09KHU9by5rZXkuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO2ZvcihhLnB1c2godVsxXSk7IiIhPT0obD1sLnN1YnN0cmluZyh1WzBdLmxlbmd0aCkpOylpZihudWxsIT09KHU9by5rZXlfYWNjZXNzLmV4ZWMobCkpKWEucHVzaCh1WzFdKTtlbHNle2lmKG51bGw9PT0odT1vLmluZGV4X2FjY2Vzcy5leGVjKGwpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7YS5wdXNoKHVbMV0pfWVbMl09YX1lbHNlIGl8PTI7aWYoMz09PWkpdGhyb3cgbmV3IEVycm9yKCJbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkIik7bi5wdXNoKGUpfXI9ci5zdWJzdHJpbmcoZVswXS5sZW5ndGgpfXJldHVybiBzW3RdPW59dmFyIG89e25vdF9zdHJpbmc6L1tec10vLG5vdF9ib29sOi9bXnRdLyxub3RfdHlwZTovW15UXS8sbm90X3ByaW1pdGl2ZTovW152XS8sbnVtYmVyOi9bZGllZmddLyxudW1lcmljX2FyZzovW2JjZGllZmd1eFhdLyxqc29uOi9bal0vLG5vdF9qc29uOi9bXmpdLyx0ZXh0Oi9eW15ceDI1XSsvLG1vZHVsbzovXlx4MjV7Mn0vLHBsYWNlaG9sZGVyOi9eXHgyNSg/OihbMS05XVxkKilcJHxcKChbXlwpXSspXCkpPyhcKyk/KDB8J1teJF0pPygtKT8oXGQrKT8oPzpcLihcZCspKT8oW2ItZ2lqb3N0VHV2eFhdKS8sa2V5Oi9eKFthLXpfXVthLXpfXGRdKikvaSxrZXlfYWNjZXNzOi9eXC4oW2Etel9dW2Etel9cZF0qKS9pLGluZGV4X2FjY2VzczovXlxbKFxkKylcXS8sc2lnbjovXltcK1wtXS99LHM9T2JqZWN0LmNyZWF0ZShudWxsKTt2b2lkIDAhPT1uJiYobi5zcHJpbnRmPWUsbi52c3ByaW50Zj1yKSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5zcHJpbnRmPWUsd2luZG93LnZzcHJpbnRmPXIsImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kJiZ0KGZ1bmN0aW9uKCl7cmV0dXJue3NwcmludGY6ZSx2c3ByaW50ZjpyfX0pKX0oKX0se31dLDUyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheShlKSxhPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxzPW5ldyBBcnJheShlKSxsPTA7bDxlOysrbClyW2xdPS0xLG5bbF09MCxpW2xdPSExLGFbbF09MCxvW2xdPS0xLHNbbF09W107Zm9yKHZhciB1PTAsYz1bXSxoPVtdLGw9MDtsPGU7KytsKXJbbF08MCYmZnVuY3Rpb24oZSl7dmFyIGw9W2VdLGY9W2VdO2ZvcihyW2VdPW5bZV09dSxpW2VdPSEwLHUrPTE7Zi5sZW5ndGg+MDspe2U9ZltmLmxlbmd0aC0xXTt2YXIgZD10W2VdO2lmKGFbZV08ZC5sZW5ndGgpe2Zvcih2YXIgcD1hW2VdO3A8ZC5sZW5ndGg7KytwKXt2YXIgbT1kW3BdO2lmKHJbbV08MCl7clttXT1uW21dPXUsaVttXT0hMCx1Kz0xLGwucHVzaChtKSxmLnB1c2gobSk7YnJlYWt9aVttXSYmKG5bZV09MHxNYXRoLm1pbihuW2VdLG5bbV0pKSxvW21dPj0wJiZzW2VdLnB1c2gob1ttXSl9YVtlXT1wfWVsc2V7aWYobltlXT09PXJbZV0pe2Zvcih2YXIgdj1bXSxnPVtdLHk9MCxwPWwubGVuZ3RoLTE7cD49MDstLXApe3ZhciBiPWxbcF07aWYoaVtiXT0hMSx2LnB1c2goYiksZy5wdXNoKHNbYl0pLHkrPXNbYl0ubGVuZ3RoLG9bYl09Yy5sZW5ndGgsYj09PWUpe2wubGVuZ3RoPXA7YnJlYWt9fWMucHVzaCh2KTtmb3IodmFyIHg9bmV3IEFycmF5KHkpLHA9MDtwPGcubGVuZ3RoO3ArKylmb3IodmFyIF89MDtfPGdbcF0ubGVuZ3RoO18rKyl4Wy0teV09Z1twXVtfXTtoLnB1c2goeCl9Zi5wb3AoKX19fShsKTtmb3IodmFyIGYsbD0wO2w8aC5sZW5ndGg7bCsrKXt2YXIgZD1oW2xdO2lmKDAhPT1kLmxlbmd0aCl7ZC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGY9W2RbMF1dO2Zvcih2YXIgcD0xO3A8ZC5sZW5ndGg7cCsrKWRbcF0hPT1kW3AtMV0mJmYucHVzaChkW3BdKTtoW2xdPWZ9fXJldHVybntjb21wb25lbnRzOmMsYWRqYWNlbmN5TGlzdDpofX1lLmV4cG9ydHM9bn0se31dLDUyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgaSh0KX1mdW5jdGlvbiBpKHQpe3RoaXMub3B0aW9ucz1kKE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSx0KSx0aGlzLnRyZWVzPW5ldyBBcnJheSh0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7cmV0dXJue3g6dCx5OmUsem9vbToxLzAsaWQ6bixwcm9wZXJ0aWVzOmkscGFyZW50SWQ6LTEsbnVtUG9pbnRzOnJ9fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3JldHVybnt4OnUoclswXSkseTpjKHJbMV0pLHpvb206MS8wLGlkOmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIHModCl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6bCh0KSxnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOltoKHQueCksZih0LnkpXX19fWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5udW1Qb2ludHMscj1lPj0xZTQ/TWF0aC5yb3VuZChlLzFlMykrImsiOmU+PTFlMz9NYXRoLnJvdW5kKGUvMTAwKS8xMCsiayI6ZTtyZXR1cm4gZChkKHt9LHQucHJvcGVydGllcykse2NsdXN0ZXI6ITAsY2x1c3Rlcl9pZDp0LmlkLHBvaW50X2NvdW50OmUscG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6cn0pfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIGModCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gMzYwKih0LS41KX1mdW5jdGlvbiBmKHQpe3ZhciBlPSgxODAtMzYwKnQpKk1hdGguUEkvMTgwO3JldHVybiAzNjAqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS9NYXRoLlBJLTkwfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQueX12YXIgdj10KCJrZGJ1c2giKTtlLmV4cG9ydHM9bixpLnByb3RvdHlwZT17b3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTYscmFkaXVzOjQwLGV4dGVudDo1MTIsbm9kZVNpemU6NjQsbG9nOiExLHJlZHVjZTpudWxsLGluaXRpYWw6ZnVuY3Rpb24oKXtyZXR1cm57fX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sbG9hZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMubG9nO2UmJmNvbnNvbGUudGltZSgidG90YWwgdGltZSIpO3ZhciByPSJwcmVwYXJlICIrdC5sZW5ndGgrIiBwb2ludHMiO2UmJmNvbnNvbGUudGltZShyKSx0aGlzLnBvaW50cz10O3ZhciBuPXQubWFwKG8pO2UmJmNvbnNvbGUudGltZUVuZChyKTtmb3IodmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207aT49dGhpcy5vcHRpb25zLm1pblpvb207aS0tKXt2YXIgYT0rRGF0ZS5ub3coKTt0aGlzLnRyZWVzW2krMV09dihuLHAsbSx0aGlzLm9wdGlvbnMubm9kZVNpemUsRmxvYXQzMkFycmF5KSxuPXRoaXMuX2NsdXN0ZXIobixpKSxlJiZjb25zb2xlLmxvZygieiVkOiAlZCBjbHVzdGVycyBpbiAlZG1zIixpLG4ubGVuZ3RoLCtEYXRlLm5vdygpLWEpfXJldHVybiB0aGlzLnRyZWVzW3RoaXMub3B0aW9ucy5taW5ab29tXT12KG4scCxtLHRoaXMub3B0aW9ucy5ub2RlU2l6ZSxGbG9hdDMyQXJyYXkpLGUmJmNvbnNvbGUudGltZUVuZCgidG90YWwgdGltZSIpLHRoaXN9LGdldENsdXN0ZXJzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKGUpXSxuPXIucmFuZ2UodSh0WzBdKSxjKHRbM10pLHUodFsyXSksYyh0WzFdKSksaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPXIucG9pbnRzW25bYV1dO2kucHVzaChvLm51bVBvaW50cz9zKG8pOnRoaXMucG9pbnRzW28uaWRdKX1yZXR1cm4gaX0sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cmVlc1tlKzFdLnBvaW50c1t0XSxuPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixlKSksaT10aGlzLnRyZWVzW2UrMV0ud2l0aGluKHIueCxyLnksbiksYT1bXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBsPXRoaXMudHJlZXNbZSsxXS5wb2ludHNbaVtvXV07bC5wYXJlbnRJZD09PXQmJmEucHVzaChsLm51bVBvaW50cz9zKGwpOnRoaXMucG9pbnRzW2wuaWRdKX1yZXR1cm4gYX0sZ2V0TGVhdmVzOmZ1bmN0aW9uKHQsZSxyLG4pe3I9cnx8MTAsbj1ufHwwO3ZhciBpPVtdO3JldHVybiB0aGlzLl9hcHBlbmRMZWF2ZXMoaSx0LGUscixuLDApLGl9LGdldFRpbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHQpXSxpPU1hdGgucG93KDIsdCksYT10aGlzLm9wdGlvbnMuZXh0ZW50LG89dGhpcy5vcHRpb25zLnJhZGl1cyxzPW8vYSxsPShyLXMpL2ksdT0ocisxK3MpL2ksYz17ZmVhdHVyZXM6W119O3JldHVybiB0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgoZS1zKS9pLGwsKGUrMStzKS9pLHUpLG4ucG9pbnRzLGUscixpLGMpLDA9PT1lJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgxLXMvaSxsLDEsdSksbi5wb2ludHMsaSxyLGksYyksZT09PWktMSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMCxsLHMvaSx1KSxuLnBvaW50cywtMSxyLGksYyksYy5mZWF0dXJlcy5sZW5ndGg/YzpudWxsfSxnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbTpmdW5jdGlvbih0LGUpe2Zvcig7ZTx0aGlzLm9wdGlvbnMubWF4Wm9vbTspe3ZhciByPXRoaXMuZ2V0Q2hpbGRyZW4odCxlKTtpZihlKyssMSE9PXIubGVuZ3RoKWJyZWFrO3Q9clswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWR9cmV0dXJuIGV9LF9hcHBlbmRMZWF2ZXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz10aGlzLmdldENoaWxkcmVuKGUscikscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdLnByb3BlcnRpZXM7aWYobC5jbHVzdGVyP2ErbC5wb2ludF9jb3VudDw9aT9hKz1sLnBvaW50X2NvdW50OmE9dGhpcy5fYXBwZW5kTGVhdmVzKHQsbC5jbHVzdGVyX2lkLHIrMSxuLGksYSk6YTxpP2ErKzp0LnB1c2gob1tzXSksdC5sZW5ndGg9PT1uKWJyZWFrfXJldHVybiBhfSxfYWRkVGlsZUZlYXR1cmVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9ZVt0W29dXTthLmZlYXR1cmVzLnB1c2goe3R5cGU6MSxnZW9tZXRyeTpbW01hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoocy54KmktcikpLE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoocy55KmktbikpXV0sdGFnczpzLm51bVBvaW50cz9sKHMpOnRoaXMucG9pbnRzW3MuaWRdLnByb3BlcnRpZXN9KX19LF9saW1pdFpvb206ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy5taW5ab29tLE1hdGgubWluKHQsdGhpcy5vcHRpb25zLm1heFpvb20rMSkpfSxfY2x1c3RlcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixlKSksaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO2lmKCEoby56b29tPD1lKSl7by56b29tPWU7dmFyIHM9dGhpcy50cmVlc1tlKzFdLGw9cy53aXRoaW4oby54LG8ueSxuKSx1PW8ubnVtUG9pbnRzfHwxLGM9by54KnUsaD1vLnkqdSxmPW51bGw7dGhpcy5vcHRpb25zLnJlZHVjZSYmKGY9dGhpcy5vcHRpb25zLmluaXRpYWwoKSx0aGlzLl9hY2N1bXVsYXRlKGYsbykpO2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7ZCsrKXt2YXIgcD1zLnBvaW50c1tsW2RdXTtpZihlPHAuem9vbSl7dmFyIG09cC5udW1Qb2ludHN8fDE7cC56b29tPWUsYys9cC54Km0saCs9cC55Km0sdSs9bSxwLnBhcmVudElkPWksdGhpcy5vcHRpb25zLnJlZHVjZSYmdGhpcy5fYWNjdW11bGF0ZShmLHApfX0xPT09dT9yLnB1c2gobyk6KG8ucGFyZW50SWQ9aSxyLnB1c2goYShjL3UsaC91LHUsaSxmKSkpfX1yZXR1cm4gcn0sX2FjY3VtdWxhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLm51bVBvaW50cz9lLnByb3BlcnRpZXM6dGhpcy5vcHRpb25zLm1hcCh0aGlzLnBvaW50c1tlLmlkXS5wcm9wZXJ0aWVzKTt0aGlzLm9wdGlvbnMucmVkdWNlKHQscil9fX0se2tkYnVzaDoyOTZ9XSw1Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluIGk/aVt0XToiIn0pLmpvaW4oIiIpfWUuZXhwb3J0cz1uO3ZhciBpPXsiICI6IiAiLDA6Ilx1MjA3MCIsMToiXHhiOSIsMjoiXHhiMiIsMzoiXHhiMyIsNDoiXHUyMDc0Iiw1OiJcdTIwNzUiLDY6Ilx1MjA3NiIsNzoiXHUyMDc3Iiw4OiJcdTIwNzgiLDk6Ilx1MjA3OSIsIisiOiJcdTIwN2EiLCItIjoiXHUyMDdiIixhOiJcdTFkNDMiLGI6Ilx1MWQ0NyIsYzoiXHUxZDljIixkOiJcdTFkNDgiLGU6Ilx1MWQ0OSIsZjoiXHUxZGEwIixnOiJcdTFkNGQiLGg6Ilx1MDJiMCIsaToiXHUyMDcxIixqOiJcdTAyYjIiLGs6Ilx1MWQ0ZiIsbDoiXHUwMmUxIixtOiJcdTFkNTAiLG46Ilx1MjA3ZiIsbzoiXHUxZDUyIixwOiJcdTFkNTYiLHI6Ilx1MDJiMyIsczoiXHUwMmUyIix0OiJcdTFkNTciLHU6Ilx1MWQ1OCIsdjoiXHUxZDViIix3OiJcdTAyYjciLHg6Ilx1MDJlMyIseToiXHUwMmI4Iix6OiJcdTFkYmIifX0se31dLDUyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj1bIid1c2Ugc3RyaWN0JzsiXSxpPSJzdXJmYWNlTmV0cyIrdC5qb2luKCJfIikrImQiK2U7bi5wdXNoKCJ2YXIgY29udG91cj1nZW5Db250b3VyKHsiLCJvcmRlcjpbIix0LmpvaW4oKSwiXSwiLCJzY2FsYXJBcmd1bWVudHM6IDMsIiwicGhhc2U6ZnVuY3Rpb24gcGhhc2VGdW5jKHAsYSxiLGMpIHsgcmV0dXJuIChwID4gYyl8MCB9LCIpLCJnZW5lcmljIj09PWUmJm4ucHVzaCgiZ2V0dGVyczpbMF0sIik7Zm9yKHZhciBhPVtdLGw9W10sdT0wO3U8cjsrK3UpYS5wdXNoKCJkIit1KSxsLnB1c2goImQiK3UpO2Zvcih2YXIgdT0wO3U8MTw8cjsrK3UpYS5wdXNoKCJ2Iit1KSxsLnB1c2goInYiK3UpO2Zvcih2YXIgdT0wO3U8MTw8cjsrK3UpYS5wdXNoKCJwIit1KSxsLnB1c2goInAiK3UpO2EucHVzaCgiYSIsImIiLCJjIiksbC5wdXNoKCJhIiwiYyIpLG4ucHVzaCgidmVydGV4OmZ1bmN0aW9uIHZlcnRleEZ1bmMoIixhLmpvaW4oKSwiKXsiKTtmb3IodmFyIGM9W10sdT0wO3U8MTw8cjsrK3UpYy5wdXNoKCIocCIrdSsiPDwiK3UrIikiKTtuLnB1c2goInZhciBtPSgiLGMuam9pbigiKyIpLCIpfDA7aWYobT09PTB8fG09PT0iLCgxPDwoMTw8cikpLTEsIil7cmV0dXJufSIpO3ZhciBoPVtdLGY9W107MTw8KDE8PHIpPD0xMjg/KG4ucHVzaCgic3dpdGNoKG0peyIpLGY9bik6bi5wdXNoKCJzd2l0Y2gobT4+PjcpeyIpO2Zvcih2YXIgdT0wO3U8MTw8KDE8PHIpOysrdSl7aWYoMTw8KDE8PHIpPjEyOCYmdSUxMjg9PTApe2gubGVuZ3RoPjAmJmYucHVzaCgifX0iKTt2YXIgZD0idkV4dHJhIitoLmxlbmd0aDtuLnB1c2goImNhc2UgIix1Pj4+NywiOiIsZCwiKG0mMHg3ZiwiLGwuam9pbigpLCIpO2JyZWFrOyIpLGY9WyJmdW5jdGlvbiAiLGQsIihtLCIsbC5qb2luKCksIil7c3dpdGNoKG0peyJdLGgucHVzaChmKX1mLnB1c2goImNhc2UgIiwxMjcmdSwiOiIpO2Zvcih2YXIgcD1uZXcgQXJyYXkociksbT1uZXcgQXJyYXkociksdj1uZXcgQXJyYXkociksZz1uZXcgQXJyYXkocikseT0wLGI9MDtiPHI7KytiKXBbYl09W10sbVtiXT1bXSx2W2JdPTAsZ1tiXT0wO2Zvcih2YXIgYj0wO2I8MTw8cjsrK2IpZm9yKHZhciB4PTA7eDxyOysreCl7dmFyIF89Yl4xPDx4O2lmKCEoXz5iKSYmISh1JjE8PF8pIT0hKHUmMTw8Yikpe3ZhciB3PTE7dSYxPDxfP21beF0ucHVzaCgidiIrXysiLXYiK2IpOihtW3hdLnB1c2goInYiK2IrIi12IitfKSx3PS13KSx3PDA/KHBbeF0ucHVzaCgiLXYiK2IrIi12IitfKSx2W3hdKz0yKToocFt4XS5wdXNoKCJ2IitiKyIrdiIrXyksdlt4XS09MikseSs9MTtmb3IodmFyIE09MDtNPHI7KytNKU0hPT14JiYoXyYxPDxNP2dbTV0rPTE6Z1tNXS09MSl9fWZvcih2YXIgaz1bXSx4PTA7eDxyOysreClpZigwPT09cFt4XS5sZW5ndGgpay5wdXNoKCJkIit4KyItMC41Iik7ZWxzZXt2YXIgQT0iIjt2W3hdPDA/QT12W3hdKyIqYyI6dlt4XT4wJiYoQT0iKyIrdlt4XSsiKmMiKTt2YXIgVD1wW3hdLmxlbmd0aC95Ki41LFM9LjUrZ1t4XS95Ki41O2sucHVzaCgiZCIreCsiLSIrUysiLSIrVCsiKigiK3BbeF0uam9pbigiKyIpK0ErIikvKCIrbVt4XS5qb2luKCIrIikrIikiKX1mLnB1c2goImEucHVzaChbIixrLmpvaW4oKSwiXSk7IiwiYnJlYWs7Iil9bi5wdXNoKCJ9fSwiKSxoLmxlbmd0aD4wJiZmLnB1c2goIn19Iik7Zm9yKHZhciBFPVtdLHU9MDt1PDE8PHItMTsrK3UpRS5wdXNoKCJ2Iit1KTtFLnB1c2goImMwIiwiYzEiLCJwMCIsInAxIiwiYSIsImIiLCJjIiksbi5wdXNoKCJjZWxsOmZ1bmN0aW9uIGNlbGxGdW5jKCIsRS5qb2luKCksIil7Iik7dmFyIEw9cyhyLTEpO24ucHVzaCgiaWYocDApe2IucHVzaCgiLEwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJbIit0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4idiIrdH0pKyJdIn0pLmpvaW4oKSwiKX1lbHNle2IucHVzaCgiLEwubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoKTtyZXR1cm4gZS5yZXZlcnNlKCksIlsiK2UubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ2Iit0fSkrIl0ifSkuam9pbigpLCIpfX19KTtmdW5jdGlvbiAiLGksIihhcnJheSxsZXZlbCl7dmFyIHZlcnRzPVtdLGNlbGxzPVtdO2NvbnRvdXIoYXJyYXksdmVydHMsY2VsbHMsbGV2ZWwpO3JldHVybiB7cG9zaXRpb25zOnZlcnRzLGNlbGxzOmNlbGxzfTt9IHJldHVybiAiLGksIjsiKTtmb3IodmFyIHU9MDt1PGgubGVuZ3RoOysrdSluLnB1c2goaFt1XS5qb2luKCIiKSk7cmV0dXJuIG5ldyBGdW5jdGlvbigiZ2VuQ29udG91ciIsbi5qb2luKCIiKSkobyl9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1sKHQsZSksbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylpW29dPVtyW29dXSxhW29dPVtvXTtyZXR1cm57cG9zaXRpb25zOmksY2VsbHM6YX19ZnVuY3Rpb24gYSh0LGUpe2lmKHQuZGltZW5zaW9uPD0wKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O2lmKDE9PT10LmRpbWVuc2lvbilyZXR1cm4gaSh0LGUpO3ZhciByPXQub3JkZXIuam9pbigpKyItIit0LmR0eXBlLGE9dVtyXSxlPStlfHwwO3JldHVybiBhfHwoYT11W3JdPW4odC5vcmRlcix0LmR0eXBlKSksYSh0LGUpfWUuZXhwb3J0cz1hO3ZhciBvPXQoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyIikscz10KCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmUiKSxsPXQoInplcm8tY3Jvc3NpbmdzIiksdT17fX0seyJuZGFycmF5LWV4dHJhY3QtY29udG91ciI6NDU0LCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmUiOjUzNSwiemVyby1jcm9zc2luZ3MiOjU4Mn1dLDUzMDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIHU9cltzW2xdXTtuW2krK109dVswXSxuW2krK109dVsxXSsxLjQsYT1NYXRoLm1heCh1WzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19ZnVuY3Rpb24gaSh0LGUscil7dmFyIHI9cnx8e30sbz1zW3RdO298fChvPXNbdF09eyIgIjp7ZGF0YTpuZXcgRmxvYXQzMkFycmF5KDApLHNoYXBlOi4yfX0pO3ZhciBsPW9bZV07aWYoIWwpaWYoZS5sZW5ndGg8PTF8fCEvXGQvLnRlc3QoZSkpbD1vW2VdPW4oYShlLHt0cmlhbmdsZXM6ITAsZm9udDp0LHRleHRBbGlnbjpyLnRleHRBbGlnbnx8ImxlZnQiLHRleHRCYXNlbGluZToiYWxwaGFiZXRpYyJ9KSk7ZWxzZXtmb3IodmFyIHU9ZS5zcGxpdCgvKFxkfFxzKS8pLGM9bmV3IEFycmF5KHUubGVuZ3RoKSxoPTAsZj0wLGQ9MDtkPHUubGVuZ3RoOysrZCljW2RdPWkodCx1W2RdKSxoKz1jW2RdLmRhdGEubGVuZ3RoLGYrPWNbZF0uc2hhcGUsZD4wJiYoZis9LjAyKTtmb3IodmFyIHA9bmV3IEZsb2F0MzJBcnJheShoKSxtPTAsdj0tLjUqZixkPTA7ZDxjLmxlbmd0aDsrK2Qpe2Zvcih2YXIgZz1jW2RdLmRhdGEseT0wO3k8Zy5sZW5ndGg7eSs9MilwW20rK109Z1t5XSt2LHBbbSsrXT1nW3krMV07dis9Y1tkXS5zaGFwZSsuMDJ9bD1vW2VdPXtkYXRhOnAsc2hhcGU6Zn19cmV0dXJuIGx9ZS5leHBvcnRzPWk7dmFyIGE9dCgidmVjdG9yaXplLXRleHQiKSxvPXdpbmRvd3x8ci5nbG9iYWx8fHt9LHM9by5fX1RFWFRfQ0FDSEV8fHt9O28uX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NDg1LCJ2ZWN0b3JpemUtdGV4dCI6NTUyfV0sNTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLmZvbnRTaXplPXR8fDI0LHRoaXMuYnVmZmVyPXZvaWQgMD09PWU/MzplLHRoaXMuY3V0b2ZmPW58fC4yNSx0aGlzLmZvbnRGYW1pbHk9aXx8InNhbnMtc2VyaWYiLHRoaXMucmFkaXVzPXJ8fDg7dmFyIGE9dGhpcy5zaXplPXRoaXMuZm9udFNpemUrMip0aGlzLmJ1ZmZlcjt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLmNhbnZhcy5oZWlnaHQ9YSx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHRoaXMuY3R4LmZvbnQ9dCsicHggIit0aGlzLmZvbnRGYW1pbHksdGhpcy5jdHgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHRoaXMuY3R4LmZpbGxTdHlsZT0iYmxhY2siLHRoaXMuZ3JpZE91dGVyPW5ldyBGbG9hdDY0QXJyYXkoYSphKSx0aGlzLmdyaWRJbm5lcj1uZXcgRmxvYXQ2NEFycmF5KGEqYSksdGhpcy5mPW5ldyBGbG9hdDY0QXJyYXkoYSksdGhpcy5kPW5ldyBGbG9hdDY0QXJyYXkoYSksdGhpcy56PW5ldyBGbG9hdDY0QXJyYXkoYSsxKSx0aGlzLnY9bmV3IEludDE2QXJyYXkoYSksdGhpcy5taWRkbGU9TWF0aC5yb3VuZChhLzIqKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiR2Vja28vIik+PTA/MS4yOjEpKX1mdW5jdGlvbiBpKHQsZSxyLG4saSxvLHMpe2Zvcih2YXIgbD0wO2w8ZTtsKyspe2Zvcih2YXIgdT0wO3U8cjt1Kyspblt1XT10W3UqZStsXTtmb3IoYShuLGksbyxzLHIpLHU9MDt1PHI7dSsrKXRbdSplK2xdPWlbdV19Zm9yKHU9MDt1PHI7dSsrKXtmb3IobD0wO2w8ZTtsKyspbltsXT10W3UqZStsXTtmb3IoYShuLGksbyxzLGUpLGw9MDtsPGU7bCsrKXRbdSplK2xdPU1hdGguc3FydChpW2xdKX19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3JbMF09MCxuWzBdPS1vLG5bMV09K287Zm9yKHZhciBhPTEscz0wO2E8aTthKyspe2Zvcih2YXIgbD0odFthXSthKmEtKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqYS0yKnJbc10pO2w8PW5bc107KXMtLSxsPSh0W2FdK2EqYS0odFtyW3NdXStyW3NdKnJbc10pKS8oMiphLTIqcltzXSk7cysrLHJbc109YSxuW3NdPWwsbltzKzFdPStvfWZvcihhPTAscz0wO2E8aTthKyspe2Zvcig7bltzKzFdPGE7KXMrKztlW2FdPShhLXJbc10pKihhLXJbc10pK3RbcltzXV19fWUuZXhwb3J0cz1uO3ZhciBvPTFlMjA7bi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9ZS5kYXRhLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgYT1yWzQqbiszXS8yNTU7dGhpcy5ncmlkT3V0ZXJbbl09MT09PWE/MDowPT09YT9vOk1hdGgucG93KE1hdGgubWF4KDAsLjUtYSksMiksdGhpcy5ncmlkSW5uZXJbbl09MT09PWE/bzowPT09YT8wOk1hdGgucG93KE1hdGgubWF4KDAsYS0uNSksMil9Zm9yKGkodGhpcy5ncmlkT3V0ZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLGkodGhpcy5ncmlkSW5uZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgcz10aGlzLmdyaWRPdXRlcltuXS10aGlzLmdyaWRJbm5lcltuXSxsPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjU1LTI1NSoocy90aGlzLnJhZGl1cyt0aGlzLmN1dG9mZikpKSk7cls0Km4rMF09bCxyWzQqbisxXT1sLHJbNCpuKzJdPWwscls0Km4rM109MjU1fXJldHVybiBlfX0se31dLDUzMjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYodD10fHwiIixlPWV8fHt9LHQgaW5zdGFuY2VvZiBuKXJldHVybiB0O2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0LGUpO3ZhciByPWkodCk7dGhpcy5fb3JpZ2luYWxJbnB1dD10LHRoaXMuX3I9ci5yLHRoaXMuX2c9ci5nLHRoaXMuX2I9ci5iLHRoaXMuX2E9ci5hLHRoaXMuX3JvdW5kQT1WKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWUuZm9ybWF0fHxyLmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9ZS5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1WKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPVYodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9Vih0aGlzLl9iKSksdGhpcy5fb2s9ci5vayx0aGlzLl90Y19pZD1VKyt9ZnVuY3Rpb24gaSh0KXt2YXIgZT17cjowLGc6MCxiOjB9LHI9MSxuPW51bGwsaT1udWxsLG89bnVsbCxsPSExLGM9ITE7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD1GKHQpKSwib2JqZWN0Ij09dHlwZW9mIHQmJihSKHQucikmJlIodC5nKSYmUih0LmIpPyhlPWEodC5yLHQuZyx0LmIpLGw9ITAsYz0iJSI9PT1TdHJpbmcodC5yKS5zdWJzdHIoLTEpPyJwcmdiIjoicmdiIik6Uih0LmgpJiZSKHQucykmJlIodC52KT8obj1EKHQucyksaT1EKHQudiksZT11KHQuaCxuLGkpLGw9ITAsYz0iaHN2Iik6Uih0LmgpJiZSKHQucykmJlIodC5sKSYmKG49RCh0LnMpLG89RCh0LmwpLGU9cyh0LmgsbixvKSxsPSEwLGM9ImhzbCIpLHQuaGFzT3duUHJvcGVydHkoImEiKSYmKHI9dC5hKSkscj1UKHIpLHtvazpsLGZvcm1hdDp0LmZvcm1hdHx8YyxyOkgoMjU1LHEoZS5yLDApKSxnOkgoMjU1LHEoZS5nLDApKSxiOkgoMjU1LHEoZS5iLDApKSxhOnJ9fWZ1bmN0aW9uIGEodCxlLHIpe3JldHVybntyOjI1NSpTKHQsMjU1KSxnOjI1NSpTKGUsMjU1KSxiOjI1NSpTKHIsMjU1KX19ZnVuY3Rpb24gbyh0LGUscil7dD1TKHQsMjU1KSxlPVMoZSwyNTUpLHI9UyhyLDI1NSkKO3ZhciBuLGksYT1xKHQsZSxyKSxvPUgodCxlLHIpLHM9KGErbykvMjtpZihhPT1vKW49aT0wO2Vsc2V7dmFyIGw9YS1vO3N3aXRjaChpPXM+LjU/bC8oMi1hLW8pOmwvKGErbyksYSl7Y2FzZSB0Om49KGUtcikvbCsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvbCsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL2wrNH1uLz02fXJldHVybntoOm4sczppLGw6c319ZnVuY3Rpb24gcyh0LGUscil7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrNiooZS10KSpyOnI8LjU/ZTpyPDIvMz90KyhlLXQpKigyLzMtcikqNjp0fXZhciBpLGEsbztpZih0PVModCwzNjApLGU9UyhlLDEwMCkscj1TKHIsMTAwKSwwPT09ZSlpPWE9bz1yO2Vsc2V7dmFyIHM9cjwuNT9yKigxK2UpOnIrZS1yKmUsbD0yKnItcztpPW4obCxzLHQrMS8zKSxhPW4obCxzLHQpLG89bihsLHMsdC0xLzMpfXJldHVybntyOjI1NSppLGc6MjU1KmEsYjoyNTUqb319ZnVuY3Rpb24gbCh0LGUscil7dD1TKHQsMjU1KSxlPVMoZSwyNTUpLHI9UyhyLDI1NSk7dmFyIG4saSxhPXEodCxlLHIpLG89SCh0LGUscikscz1hLGw9YS1vO2lmKGk9MD09PWE/MDpsL2EsYT09byluPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSB0Om49KGUtcikvbCsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvbCsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL2wrNH1uLz02fXJldHVybntoOm4sczppLHY6c319ZnVuY3Rpb24gdSh0LHIsbil7dD02KlModCwzNjApLHI9UyhyLDEwMCksbj1TKG4sMTAwKTt2YXIgaT1lLmZsb29yKHQpLGE9dC1pLG89biooMS1yKSxzPW4qKDEtYSpyKSxsPW4qKDEtKDEtYSkqciksdT1pJTY7cmV0dXJue3I6MjU1KltuLHMsbyxvLGwsbl1bdV0sZzoyNTUqW2wsbixuLHMsbyxvXVt1XSxiOjI1NSpbbyxvLGwsbixuLHNdW3VdfX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPVtJKFYodCkudG9TdHJpbmcoMTYpKSxJKFYoZSkudG9TdHJpbmcoMTYpKSxJKFYocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmlbMF0uY2hhckF0KDApPT1pWzBdLmNoYXJBdCgxKSYmaVsxXS5jaGFyQXQoMCk9PWlbMV0uY2hhckF0KDEpJiZpWzJdLmNoYXJBdCgwKT09aVsyXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCk6aS5qb2luKCIiKX1mdW5jdGlvbiBoKHQsZSxyLG4saSl7dmFyIGE9W0koVih0KS50b1N0cmluZygxNikpLEkoVihlKS50b1N0cmluZygxNikpLEkoVihyKS50b1N0cmluZygxNikpLEkoUChuKSldO3JldHVybiBpJiZhWzBdLmNoYXJBdCgwKT09YVswXS5jaGFyQXQoMSkmJmFbMV0uY2hhckF0KDApPT1hWzFdLmNoYXJBdCgxKSYmYVsyXS5jaGFyQXQoMCk9PWFbMl0uY2hhckF0KDEpJiZhWzNdLmNoYXJBdCgwKT09YVszXS5jaGFyQXQoMSk/YVswXS5jaGFyQXQoMCkrYVsxXS5jaGFyQXQoMCkrYVsyXS5jaGFyQXQoMCkrYVszXS5jaGFyQXQoMCk6YS5qb2luKCIiKX1mdW5jdGlvbiBmKHQsZSxyLG4pe3JldHVybltJKFAobikpLEkoVih0KS50b1N0cmluZygxNikpLEkoVihlKS50b1N0cmluZygxNikpLEkoVihyKS50b1N0cmluZygxNikpXS5qb2luKCIiKX1mdW5jdGlvbiBkKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPW4odCkudG9Ic2woKTtyZXR1cm4gci5zLT1lLzEwMCxyLnM9RShyLnMpLG4ocil9ZnVuY3Rpb24gcCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1uKHQpLnRvSHNsKCk7cmV0dXJuIHIucys9ZS8xMDAsci5zPUUoci5zKSxuKHIpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG4odCkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIHYodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9bih0KS50b0hzbCgpO3JldHVybiByLmwrPWUvMTAwLHIubD1FKHIubCksbihyKX1mdW5jdGlvbiBnKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPW4odCkudG9SZ2IoKTtyZXR1cm4gci5yPXEoMCxIKDI1NSxyLnItVigtZS8xMDAqMjU1KSkpLHIuZz1xKDAsSCgyNTUsci5nLVYoLWUvMTAwKjI1NSkpKSxyLmI9cSgwLEgoMjU1LHIuYi1WKC1lLzEwMCoyNTUpKSksbihyKX1mdW5jdGlvbiB5KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPW4odCkudG9Ic2woKTtyZXR1cm4gci5sLT1lLzEwMCxyLmw9RShyLmwpLG4ocil9ZnVuY3Rpb24gYih0LGUpe3ZhciByPW4odCkudG9Ic2woKSxpPShyLmgrZSklMzYwO3JldHVybiByLmg9aTwwPzM2MCtpOmksbihyKX1mdW5jdGlvbiB4KHQpe3ZhciBlPW4odCkudG9Ic2woKTtyZXR1cm4gZS5oPShlLmgrMTgwKSUzNjAsbihlKX1mdW5jdGlvbiBfKHQpe3ZhciBlPW4odCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bbih0KSxuKHtoOihyKzEyMCklMzYwLHM6ZS5zLGw6ZS5sfSksbih7aDoocisyNDApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiB3KHQpe3ZhciBlPW4odCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bbih0KSxuKHtoOihyKzkwKSUzNjAsczplLnMsbDplLmx9KSxuKHtoOihyKzE4MCklMzYwLHM6ZS5zLGw6ZS5sfSksbih7aDoocisyNzApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBNKHQpe3ZhciBlPW4odCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bbih0KSxuKHtoOihyKzcyKSUzNjAsczplLnMsbDplLmx9KSxuKHtoOihyKzIxNiklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIGsodCxlLHIpe2U9ZXx8NixyPXJ8fDMwO3ZhciBpPW4odCkudG9Ic2woKSxhPTM2MC9yLG89W24odCldO2ZvcihpLmg9KGkuaC0oYSplPj4xKSs3MjApJTM2MDstLWU7KWkuaD0oaS5oK2EpJTM2MCxvLnB1c2gobihpKSk7cmV0dXJuIG99ZnVuY3Rpb24gQSh0LGUpe2U9ZXx8Njtmb3IodmFyIHI9bih0KS50b0hzdigpLGk9ci5oLGE9ci5zLG89ci52LHM9W10sbD0xL2U7ZS0tOylzLnB1c2gobih7aDppLHM6YSx2Om99KSksbz0obytsKSUxO3JldHVybiBzfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHQ9cGFyc2VGbG9hdCh0KSwoaXNOYU4odCl8fHQ8MHx8dD4xKSYmKHQ9MSksdH1mdW5jdGlvbiBTKHQscil7Qyh0KSYmKHQ9IjEwMCUiKTt2YXIgbj16KHQpO3JldHVybiB0PUgocixxKDAscGFyc2VGbG9hdCh0KSkpLG4mJih0PXBhcnNlSW50KHQqciwxMCkvMTAwKSxlLmFicyh0LXIpPDFlLTY/MTp0JXIvcGFyc2VGbG9hdChyKX1mdW5jdGlvbiBFKHQpe3JldHVybiBIKDEscSgwLHQpKX1mdW5jdGlvbiBMKHQpe3JldHVybiBwYXJzZUludCh0LDE2KX1mdW5jdGlvbiBDKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmLTEhPXQuaW5kZXhPZigiLiIpJiYxPT09cGFyc2VGbG9hdCh0KX1mdW5jdGlvbiB6KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmLTEhPXQuaW5kZXhPZigiJSIpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIDE9PXQubGVuZ3RoPyIwIit0OiIiK3R9ZnVuY3Rpb24gRCh0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrIiUiKSx0fWZ1bmN0aW9uIFAodCl7cmV0dXJuIGUucm91bmQoMjU1KnBhcnNlRmxvYXQodCkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBPKHQpe3JldHVybiBMKHQpLzI1NX1mdW5jdGlvbiBSKHQpe3JldHVybiEhVy5DU1NfVU5JVC5leGVjKHQpfWZ1bmN0aW9uIEYodCl7dD10LnJlcGxhY2UoTiwiIikucmVwbGFjZShCLCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBlPSExO2lmKFlbdF0pdD1ZW3RdLGU9ITA7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OiJuYW1lIn07dmFyIHI7cmV0dXJuKHI9Vy5yZ2IuZXhlYyh0KSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdfToocj1XLnJnYmEuZXhlYyh0KSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdLGE6cls0XX06KHI9Vy5oc2wuZXhlYyh0KSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdfToocj1XLmhzbGEuZXhlYyh0KSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdLGE6cls0XX06KHI9Vy5oc3YuZXhlYyh0KSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdfToocj1XLmhzdmEuZXhlYyh0KSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdLGE6cls0XX06KHI9Vy5oZXg4LmV4ZWModCkpP3tyOkwoclsxXSksZzpMKHJbMl0pLGI6TChyWzNdKSxhOk8ocls0XSksZm9ybWF0OmU/Im5hbWUiOiJoZXg4In06KHI9Vy5oZXg2LmV4ZWModCkpP3tyOkwoclsxXSksZzpMKHJbMl0pLGI6TChyWzNdKSxmb3JtYXQ6ZT8ibmFtZSI6ImhleCJ9OihyPVcuaGV4NC5leGVjKHQpKT97cjpMKHJbMV0rIiIrclsxXSksZzpMKHJbMl0rIiIrclsyXSksYjpMKHJbM10rIiIrclszXSksYTpPKHJbNF0rIiIrcls0XSksZm9ybWF0OmU/Im5hbWUiOiJoZXg4In06ISEocj1XLmhleDMuZXhlYyh0KSkmJntyOkwoclsxXSsiIityWzFdKSxnOkwoclsyXSsiIityWzJdKSxiOkwoclszXSsiIityWzNdKSxmb3JtYXQ6ZT8ibmFtZSI6ImhleCJ9fWZ1bmN0aW9uIGoodCl7dmFyIGUscjtyZXR1cm4gdD10fHx7bGV2ZWw6IkFBIixzaXplOiJzbWFsbCJ9LGU9KHQubGV2ZWx8fCJBQSIpLnRvVXBwZXJDYXNlKCkscj0odC5zaXplfHwic21hbGwiKS50b0xvd2VyQ2FzZSgpLCJBQSIhPT1lJiYiQUFBIiE9PWUmJihlPSJBQSIpLCJzbWFsbCIhPT1yJiYibGFyZ2UiIT09ciYmKHI9InNtYWxsIikse2xldmVsOmUsc2l6ZTpyfX12YXIgTj0vXlxzKy8sQj0vXHMrJC8sVT0wLFY9ZS5yb3VuZCxIPWUubWluLHE9ZS5tYXgsRz1lLnJhbmRvbTtuLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciB0LHIsbixpLGEsbyxzPXRoaXMudG9SZ2IoKTtyZXR1cm4gdD1zLnIvMjU1LHI9cy5nLzI1NSxuPXMuYi8yNTUsaT10PD0uMDM5Mjg/dC8xMi45MjplLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpLGE9cjw9LjAzOTI4P3IvMTIuOTI6ZS5wb3coKHIrLjA1NSkvMS4wNTUsMi40KSxvPW48PS4wMzkyOD9uLzEyLjkyOmUucG93KChuKy4wNTUpLzEuMDU1LDIuNCksLjIxMjYqaSsuNzE1MiphKy4wNzIyKm99LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPVQodCksdGhpcy5fcm91bmRBPVYoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWwodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPVYoMzYwKnQuaCkscj1WKDEwMCp0LnMpLG49VigxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT8iaHN2KCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc3ZhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PW8odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1vKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPVYoMzYwKnQuaCkscj1WKDEwMCp0LnMpLG49VigxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT8iaHNsKCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc2xhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gYyh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXgodCl9LHRvSGV4ODpmdW5jdGlvbih0KXtyZXR1cm4gaCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLHQpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXg4KHQpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOlYodGhpcy5fciksZzpWKHRoaXMuX2cpLGI6Vih0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIitWKHRoaXMuX3IpKyIsICIrVih0aGlzLl9nKSsiLCAiK1YodGhpcy5fYikrIikiOiJyZ2JhKCIrVih0aGlzLl9yKSsiLCAiK1YodGhpcy5fZykrIiwgIitWKHRoaXMuX2IpKyIsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6VigxMDAqUyh0aGlzLl9yLDI1NSkpKyIlIixnOlYoMTAwKlModGhpcy5fZywyNTUpKSsiJSIsYjpWKDEwMCpTKHRoaXMuX2IsMjU1KSkrIiUiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIitWKDEwMCpTKHRoaXMuX3IsMjU1KSkrIiUsICIrVigxMDAqUyh0aGlzLl9nLDI1NSkpKyIlLCAiK1YoMTAwKlModGhpcy5fYiwyNTUpKSsiJSkiOiJyZ2JhKCIrVigxMDAqUyh0aGlzLl9yLDI1NSkpKyIlLCAiK1YoMTAwKlModGhpcy5fZywyNTUpKSsiJSwgIitWKDEwMCpTKHRoaXMuX2IsMjU1KSkrIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hPyJ0cmFuc3BhcmVudCI6ISh0aGlzLl9hPDEpJiYoWFtjKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9IiMiK2YodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSkscj1lLGk9dGhpcy5fZ3JhZGllbnRUeXBlPyJHcmFkaWVudFR5cGUgPSAxLCAiOiIiO2lmKHQpe3ZhciBhPW4odCk7cj0iIyIrZihhLl9yLGEuX2csYS5fYixhLl9hKX1yZXR1cm4icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCIraSsic3RhcnRDb2xvcnN0cj0iK2UrIixlbmRDb2xvcnN0cj0iK3IrIikifSx0b1N0cmluZzpmdW5jdGlvbih0KXt2YXIgZT0hIXQ7dD10fHx0aGlzLl9mb3JtYXQ7dmFyIHI9ITEsbj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIGV8fCFufHwiaGV4IiE9PXQmJiJoZXg2IiE9PXQmJiJoZXgzIiE9PXQmJiJoZXg0IiE9PXQmJiJoZXg4IiE9PXQmJiJuYW1lIiE9PXQ/KCJyZ2IiPT09dCYmKHI9dGhpcy50b1JnYlN0cmluZygpKSwicHJnYiI9PT10JiYocj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSwiaGV4IiE9PXQmJiJoZXg2IiE9PXR8fChyPXRoaXMudG9IZXhTdHJpbmcoKSksImhleDMiPT09dCYmKHI9dGhpcy50b0hleFN0cmluZyghMCkpLCJoZXg0Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksImhleDgiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoKSksIm5hbWUiPT09dCYmKHI9dGhpcy50b05hbWUoKSksImhzbCI9PT10JiYocj10aGlzLnRvSHNsU3RyaW5nKCkpLCJoc3YiPT09dCYmKHI9dGhpcy50b0hzdlN0cmluZygpKSxyfHx0aGlzLnRvSGV4U3RyaW5nKCkpOiJuYW1lIj09PXQmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPXQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKTtyZXR1cm4gdGhpcy5fcj1yLl9yLHRoaXMuX2c9ci5fZyx0aGlzLl9iPXIuX2IsdGhpcy5zZXRBbHBoYShyLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHYsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZyxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeSxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGQsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocCxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGIsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih4LGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihBLGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfLGFyZ3VtZW50cyl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX19LG4uZnJvbVJhdGlvPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgcj17fTtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYocltpXT0iYSI9PT1pP3RbaV06RCh0W2ldKSk7dD1yfXJldHVybiBuKHQsZSl9LG4uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISghdHx8IWUpJiZuKHQpLnRvUmdiU3RyaW5nKCk9PW4oZSkudG9SZ2JTdHJpbmcoKX0sbi5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gbi5mcm9tUmF0aW8oe3I6RygpLGc6RygpLGI6RygpfSl9LG4ubWl4PWZ1bmN0aW9uKHQsZSxyKXtyPTA9PT1yPzA6cnx8NTA7dmFyIGk9bih0KS50b1JnYigpLGE9bihlKS50b1JnYigpLG89ci8xMDA7cmV0dXJuIG4oe3I6KGEuci1pLnIpKm8raS5yLGc6KGEuZy1pLmcpKm8raS5nLGI6KGEuYi1pLmIpKm8raS5iLGE6KGEuYS1pLmEpKm8raS5hfSl9LG4ucmVhZGFiaWxpdHk9ZnVuY3Rpb24odCxyKXt2YXIgaT1uKHQpLGE9bihyKTtyZXR1cm4oZS5tYXgoaS5nZXRMdW1pbmFuY2UoKSxhLmdldEx1bWluYW5jZSgpKSsuMDUpLyhlLm1pbihpLmdldEx1bWluYW5jZSgpLGEuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LG4uaXNSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvPW4ucmVhZGFiaWxpdHkodCxlKTtzd2l0Y2goYT0hMSxpPWoociksaS5sZXZlbCtpLnNpemUpe2Nhc2UiQUFzbWFsbCI6Y2FzZSJBQUFsYXJnZSI6YT1vPj00LjU7YnJlYWs7Y2FzZSJBQWxhcmdlIjphPW8+PTM7YnJlYWs7Y2FzZSJBQUFzbWFsbCI6YT1vPj03fXJldHVybiBhfSxuLm1vc3RSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbD1udWxsLHU9MDtyPXJ8fHt9LGE9ci5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsbz1yLmxldmVsLHM9ci5zaXplO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKShpPW4ucmVhZGFiaWxpdHkodCxlW2NdKSk+dSYmKHU9aSxsPW4oZVtjXSkpO3JldHVybiBuLmlzUmVhZGFibGUodCxsLHtsZXZlbDpvLHNpemU6c30pfHwhYT9sOihyLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxuLm1vc3RSZWFkYWJsZSh0LFsiI2ZmZiIsIiMwMDAiXSxyKSl9O3ZhciBZPW4ubmFtZXM9e2FsaWNlYmx1ZToiZjBmOGZmIixhbnRpcXVld2hpdGU6ImZhZWJkNyIsYXF1YToiMGZmIixhcXVhbWFyaW5lOiI3ZmZmZDQiLGF6dXJlOiJmMGZmZmYiLGJlaWdlOiJmNWY1ZGMiLGJpc3F1ZToiZmZlNGM0IixibGFjazoiMDAwIixibGFuY2hlZGFsbW9uZDoiZmZlYmNkIixibHVlOiIwMGYiLGJsdWV2aW9sZXQ6IjhhMmJlMiIsYnJvd246ImE1MmEyYSIsYnVybHl3b29kOiJkZWI4ODciLGJ1cm50c2llbm5hOiJlYTdlNWQiLGNhZGV0Ymx1ZToiNWY5ZWEwIixjaGFydHJldXNlOiI3ZmZmMDAiLGNob2NvbGF0ZToiZDI2OTFlIixjb3JhbDoiZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiNjQ5NWVkIixjb3Juc2lsazoiZmZmOGRjIixjcmltc29uOiJkYzE0M2MiLGN5YW46IjBmZiIsZGFya2JsdWU6IjAwMDA4YiIsZGFya2N5YW46IjAwOGI4YiIsZGFya2dvbGRlbnJvZDoiYjg4NjBiIixkYXJrZ3JheToiYTlhOWE5IixkYXJrZ3JlZW46IjAwNjQwMCIsZGFya2dyZXk6ImE5YTlhOSIsZGFya2toYWtpOiJiZGI3NmIiLGRhcmttYWdlbnRhOiI4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiI1NTZiMmYiLGRhcmtvcmFuZ2U6ImZmOGMwMCIsZGFya29yY2hpZDoiOTkzMmNjIixkYXJrcmVkOiI4YjAwMDAiLGRhcmtzYWxtb246ImU5OTY3YSIsZGFya3NlYWdyZWVuOiI4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IjQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRpbWdyZXk6IjY5Njk2OSIsZG9kZ2VyYmx1ZToiMWU5MGZmIixmaXJlYnJpY2s6ImIyMjIyMiIsZmxvcmFsd2hpdGU6ImZmZmFmMCIsZm9yZXN0Z3JlZW46IjIyOGIyMiIsZnVjaHNpYToiZjBmIixnYWluc2Jvcm86ImRjZGNkYyIsZ2hvc3R3aGl0ZToiZjhmOGZmIixnb2xkOiJmZmQ3MDAiLGdvbGRlbnJvZDoiZGFhNTIwIixncmF5OiI4MDgwODAiLGdyZWVuOiIwMDgwMDAiLGdyZWVueWVsbG93OiJhZGZmMmYiLGdyZXk6IjgwODA4MCIsaG9uZXlkZXc6ImYwZmZmMCIsaG90cGluazoiZmY2OWI0IixpbmRpYW5yZWQ6ImNkNWM1YyIsaW5kaWdvOiI0YjAwODIiLGl2b3J5OiJmZmZmZjAiLGtoYWtpOiJmMGU2OGMiLGxhdmVuZGVyOiJlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6ImZmZjBmNSIsbGF3bmdyZWVuOiI3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiZmZmYWNkIixsaWdodGJsdWU6ImFkZDhlNiIsbGlnaHRjb3JhbDoiZjA4MDgwIixsaWdodGN5YW46ImUwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ImZhZmFkMiIsbGlnaHRncmF5OiJkM2QzZDMiLGxpZ2h0Z3JlZW46IjkwZWU5MCIsbGlnaHRncmV5OiJkM2QzZDMiLGxpZ2h0cGluazoiZmZiNmMxIixsaWdodHNhbG1vbjoiZmZhMDdhIixsaWdodHNlYWdyZWVuOiIyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiODdjZWZhIixsaWdodHNsYXRlZ3JheToiNzg5IixsaWdodHNsYXRlZ3JleToiNzg5IixsaWdodHN0ZWVsYmx1ZToiYjBjNGRlIixsaWdodHllbGxvdzoiZmZmZmUwIixsaW1lOiIwZjAiLGxpbWVncmVlbjoiMzJjZDMyIixsaW5lbjoiZmFmMGU2IixtYWdlbnRhOiJmMGYiLG1hcm9vbjoiODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiI2NmNkYWEiLG1lZGl1bWJsdWU6IjAwMDBjZCIsbWVkaXVtb3JjaGlkOiJiYTU1ZDMiLG1lZGl1bXB1cnBsZToiOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IjdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IjAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiI0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiYzcxNTg1IixtaWRuaWdodGJsdWU6IjE5MTk3MCIsbWludGNyZWFtOiJmNWZmZmEiLG1pc3R5cm9zZToiZmZlNGUxIixtb2NjYXNpbjoiZmZlNGI1IixuYXZham93aGl0ZToiZmZkZWFkIixuYXZ5OiIwMDAwODAiLG9sZGxhY2U6ImZkZjVlNiIsb2xpdmU6IjgwODAwMCIsb2xpdmVkcmFiOiI2YjhlMjMiLG9yYW5nZToiZmZhNTAwIixvcmFuZ2VyZWQ6ImZmNDUwMCIsb3JjaGlkOiJkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6ImVlZThhYSIscGFsZWdyZWVuOiI5OGZiOTgiLHBhbGV0dXJxdW9pc2U6ImFmZWVlZSIscGFsZXZpb2xldHJlZDoiZGI3MDkzIixwYXBheWF3aGlwOiJmZmVmZDUiLHBlYWNocHVmZjoiZmZkYWI5IixwZXJ1OiJjZDg1M2YiLHBpbms6ImZmYzBjYiIscGx1bToiZGRhMGRkIixwb3dkZXJibHVlOiJiMGUwZTYiLHB1cnBsZToiODAwMDgwIixyZWJlY2NhcHVycGxlOiI2NjMzOTkiLHJlZDoiZjAwIixyb3N5YnJvd246ImJjOGY4ZiIscm95YWxibHVlOiI0MTY5ZTEiLHNhZGRsZWJyb3duOiI4YjQ1MTMiLHNhbG1vbjoiZmE4MDcyIixzYW5keWJyb3duOiJmNGE0NjAiLHNlYWdyZWVuOiIyZThiNTciLHNlYXNoZWxsOiJmZmY1ZWUiLHNpZW5uYToiYTA1MjJkIixzaWx2ZXI6ImMwYzBjMCIsc2t5Ymx1ZToiODdjZWViIixzbGF0ZWJsdWU6IjZhNWFjZCIsc2xhdGVncmF5OiI3MDgwOTAiLHNsYXRlZ3JleToiNzA4MDkwIixzbm93OiJmZmZhZmEiLHNwcmluZ2dyZWVuOiIwMGZmN2YiLHN0ZWVsYmx1ZToiNDY4MmI0Iix0YW46ImQyYjQ4YyIsdGVhbDoiMDA4MDgwIix0aGlzdGxlOiJkOGJmZDgiLHRvbWF0bzoiZmY2MzQ3Iix0dXJxdW9pc2U6IjQwZTBkMCIsdmlvbGV0OiJlZTgyZWUiLHdoZWF0OiJmNWRlYjMiLHdoaXRlOiJmZmYiLHdoaXRlc21va2U6ImY1ZjVmNSIseWVsbG93OiJmZjAiLHllbGxvd2dyZWVuOiI5YWNkMzIifSxYPW4uaGV4TmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbdFtyXV09cik7cmV0dXJuIGV9KFkpLFc9ZnVuY3Rpb24oKXt2YXIgdD0iKD86Wy1cXCtdP1xcZCpcXC5cXGQrJT8pfCg/OlstXFwrXT9cXGQrJT8pIixlPSJbXFxzfFxcKF0rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVxccypcXCk/IixyPSJbXFxzfFxcKF0rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVxccypcXCk/IjtyZXR1cm57Q1NTX1VOSVQ6bmV3IFJlZ0V4cCh0KSxyZ2I6bmV3IFJlZ0V4cCgicmdiIitlKSxyZ2JhOm5ldyBSZWdFeHAoInJnYmEiK3IpLGhzbDpuZXcgUmVnRXhwKCJoc2wiK2UpLGhzbGE6bmV3IFJlZ0V4cCgiaHNsYSIrciksaHN2Om5ldyBSZWdFeHAoImhzdiIrZSksaHN2YTpuZXcgUmVnRXhwKCJoc3ZhIityKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfX0oKTt2b2lkIDAhPT1yJiZyLmV4cG9ydHM/ci5leHBvcnRzPW46ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoZnVuY3Rpb24oKXtyZXR1cm4gbn0pOndpbmRvdy50aW55Y29sb3I9bn0oTWF0aCl9LHt9XSw1MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPW8oZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTtyZXR1cm4gclswXSphKHJbMV0sdCl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGVbImZvbnQtc2l6ZSJdPSIxMjgiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgaT1uKHIsImZvbnQtc2l6ZSIpLzEyODtyZXR1cm4gZS5yZW1vdmVDaGlsZChyKSxpfWZ1bmN0aW9uIGEodCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fCJweCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZSIlIjpyZXR1cm4gZS5jbGllbnRIZWlnaHQvMTAwO2Nhc2UiY2giOmNhc2UiZXgiOnJldHVybiBpKHQsZSk7Y2FzZSJlbSI6cmV0dXJuIG4oZSwiZm9udC1zaXplIik7Y2FzZSJyZW0iOnJldHVybiBuKGRvY3VtZW50LmJvZHksImZvbnQtc2l6ZSIpO2Nhc2UidnciOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZSJ2aCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZSJ2bWluIjpyZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJ2bWF4IjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJpbiI6cmV0dXJuIHM7Y2FzZSJjbSI6cmV0dXJuIHMvMi41NDtjYXNlIm1tIjpyZXR1cm4gcy8yNS40O2Nhc2UicHQiOnJldHVybiBzLzcyO2Nhc2UicGMiOnJldHVybiBzLzZ9cmV0dXJuIDF9dmFyIG89dCgicGFyc2UtdW5pdCIpO2UuZXhwb3J0cz1hO3ZhciBzPTk2fSx7InBhcnNlLXVuaXQiOjQ3M31dLDUzNDpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS50b3BvanNvbj1lLnRvcG9qc29ufHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXt2YXIgbj1lLmlkLGk9ZS5iYm94LGE9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxvPXIodCxlKTtyZXR1cm4gbnVsbD09biYmbnVsbD09aT97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczphLGdlb21ldHJ5Om99Om51bGw9PWk/e3R5cGU6IkZlYXR1cmUiLGlkOm4scHJvcGVydGllczphLGdlb21ldHJ5Om99Ont0eXBlOiJGZWF0dXJlIixpZDpuLGJib3g6aSxwcm9wZXJ0aWVzOmEsZ2VvbWV0cnk6b319ZnVuY3Rpb24gcih0LGUpe2Z1bmN0aW9uIHIodCxlKXtlLmxlbmd0aCYmZS5wb3AoKTtmb3IodmFyIHI9aFt0PDA/fnQ6dF0sbj0wLGk9ci5sZW5ndGg7bjxpOysrbillLnB1c2godShyW25dLnNsaWNlKCksbikpO3Q8MCYmYyhlLGkpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHUodC5zbGljZSgpKX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1bXSxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXIodFtuXSxlKTtyZXR1cm4gZS5sZW5ndGg8MiYmZS5wdXNoKGVbMF0uc2xpY2UoKSksZX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1pKHQpO2UubGVuZ3RoPDQ7KWUucHVzaChlWzBdLnNsaWNlKCkpO3JldHVybiBlfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQubWFwKGEpfWZ1bmN0aW9uIHModCl7dmFyIGUscj10LnR5cGU7c3dpdGNoKHIpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpyLGdlb21ldHJpZXM6dC5nZW9tZXRyaWVzLm1hcChzKX07Y2FzZSJQb2ludCI6ZT1uKHQuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6ZT10LmNvb3JkaW5hdGVzLm1hcChuKTticmVhaztjYXNlIkxpbmVTdHJpbmciOmU9aSh0LmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjplPXQuYXJjcy5tYXAoaSk7YnJlYWs7Y2FzZSJQb2x5Z29uIjplPW8odC5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZT10LmFyY3MubWFwKG8pO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6cixjb29yZGluYXRlczplfX12YXIgdT1sKHQpLGg9dC5hcmNzO3JldHVybiBzKGUpfWZ1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGEsbztpZihhcmd1bWVudHMubGVuZ3RoPjEpbj1pKHQsZSxyKTtlbHNlIGZvcihhPTAsbj1uZXcgQXJyYXkobz10LmFyY3MubGVuZ3RoKTthPG87KythKW5bYV09YTtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixhcmNzOmYodCxuKX19ZnVuY3Rpb24gaSh0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT10PDA/fnQ6dDsoY1tlXXx8KGNbZV09W10pKS5wdXNoKHtpOnQsZzpsfSl9ZnVuY3Rpb24gaSh0KXt0LmZvckVhY2gobil9ZnVuY3Rpb24gYSh0KXt0LmZvckVhY2goaSl9ZnVuY3Rpb24gbyh0KXt0LmZvckVhY2goYSl9ZnVuY3Rpb24gcyh0KXtzd2l0Y2gobD10LHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKHMpO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6aSh0LmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmEodC5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6byh0LmFyY3MpfX12YXIgbCx1PVtdLGM9W107cmV0dXJuIHMoZSksYy5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7dS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJnUucHVzaCh0WzBdLmkpfSksdX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZSxyPS0xLG49dC5sZW5ndGgsaT10W24tMV0sYT0wOysrcjxuOyllPWksaT10W3JdLGErPWVbMF0qaVsxXS1lWzFdKmlbMF07cmV0dXJuIE1hdGguYWJzKGEpfWZ1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiBuKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjp0Lmdlb21ldHJpZXMuZm9yRWFjaChuKTticmVhaztjYXNlIlBvbHlnb24iOmkodC5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6dC5hcmNzLmZvckVhY2goaSl9fWZ1bmN0aW9uIGkodCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXsoc1tlPWU8MD9+ZTplXXx8KHNbZV09W10pKS5wdXNoKHQpfSl9KSxsLnB1c2godCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gYShyKHQse3R5cGU6IlBvbHlnb24iLGFyY3M6W2VdfSkuY29vcmRpbmF0ZXNbMF0pfXZhciBzPXt9LGw9W10sdT1bXTtyZXR1cm4gZS5mb3JFYWNoKG4pLGwuZm9yRWFjaChmdW5jdGlvbih0KXtpZighdC5fKXt2YXIgZT1bXSxyPVt0XTtmb3IodC5fPTEsdS5wdXNoKGUpO3Q9ci5wb3AoKTspZS5wdXNoKHQpLHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7c1t0PDA/fnQ6dF0uZm9yRWFjaChmdW5jdGlvbih0KXt0Ll98fCh0Ll89MSxyLnB1c2godCkpfSl9KX0pfX0pLGwuZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC5ffSkse3R5cGU6Ik11bHRpUG9seWdvbiIsYXJjczp1Lm1hcChmdW5jdGlvbihlKXt2YXIgcixuPVtdO2lmKGUuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3NbdDwwP350OnRdLmxlbmd0aDwyJiZuLnB1c2godCl9KX0pfSksbj1mKHQsbiksKHI9bi5sZW5ndGgpPjEpZm9yKHZhciBpLGEsbD0xLHU9byhuWzBdKTtsPHI7KytsKShpPW8obltsXSkpPnUmJihhPW5bMF0sblswXT1uW2xdLG5bbF09YSx1PWkpO3JldHVybiBufSl9fXZhciBzPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxsPWZ1bmN0aW9uKHQpe2lmKG51bGw9PShlPXQudHJhbnNmb3JtKSlyZXR1cm4gczt2YXIgZSxyLG4saT1lLnNjYWxlWzBdLGE9ZS5zY2FsZVsxXSxvPWUudHJhbnNsYXRlWzBdLGw9ZS50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fChyPW49MCksdFswXT0ocis9dFswXSkqaStvLHRbMV09KG4rPXRbMV0pKmErbCx0fX0sdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3NbMF09dFswXSxzWzFdPXRbMV0sbyhzKSxzWzBdPHUmJih1PXNbMF0pLHNbMF0+aCYmKGg9c1swXSksc1sxXTxjJiYoYz1zWzFdKSxzWzFdPmYmJihmPXNbMV0pfWZ1bmN0aW9uIHIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKHIpO2JyZWFrO2Nhc2UiUG9pbnQiOmUodC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2goZSl9fXZhciBuPXQuYmJveDtpZighbil7dmFyIGksYSxvPWwodCkscz1uZXcgQXJyYXkoMiksdT0xLzAsYz11LGg9LXUsZj0tdTt0LmFyY3MuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9LTEscj10Lmxlbmd0aDsrK2U8cjspaT10W2VdLHNbMF09aVswXSxzWzFdPWlbMV0sbyhzLGUpLHNbMF08dSYmKHU9c1swXSksc1swXT5oJiYoaD1zWzBdKSxzWzFdPGMmJihjPXNbMV0pLHNbMV0+ZiYmKGY9c1sxXSl9KTtmb3IoYSBpbiB0Lm9iamVjdHMpcih0Lm9iamVjdHNbYV0pO249dC5iYm94PVt1LGMsaCxmXX1yZXR1cm4gbn0sYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQubGVuZ3RoLGk9bi1lO2k8LS1uOylyPXRbaV0sdFtpKytdPXRbbl0sdFtuXT1yfSxoPWZ1bmN0aW9uKHQscil7cmV0dXJuIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1yLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpyLmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBlKHQscil9KX06ZSh0LHIpfSxmPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXt2YXIgcixuPXQuYXJjc1tlPDA/fmU6ZV0saT1uWzBdO3JldHVybiB0LnRyYW5zZm9ybT8ocj1bMCwwXSxuLmZvckVhY2goZnVuY3Rpb24odCl7clswXSs9dFswXSxyWzFdKz10WzFdfSkpOnI9bltuLmxlbmd0aC0xXSxlPDA/W3IsaV06W2kscl19ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgciBpbiB0KXt2YXIgbj10W3JdO2RlbGV0ZSBlW24uc3RhcnRdLGRlbGV0ZSBuLnN0YXJ0LGRlbGV0ZSBuLmVuZCxuLmZvckVhY2goZnVuY3Rpb24odCl7aVt0PDA/fnQ6dF09MX0pLHMucHVzaChuKX19dmFyIGk9e30sYT17fSxvPXt9LHM9W10sbD0tMTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7dmFyIGksYT10LmFyY3NbcjwwP35yOnJdO2EubGVuZ3RoPDMmJiFhWzFdWzBdJiYhYVsxXVsxXSYmKGk9ZVsrK2xdLGVbbF09cixlW25dPWkpfSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLG4saT1yKHQpLHM9aVswXSxsPWlbMV07aWYoZT1vW3NdKWlmKGRlbGV0ZSBvW2UuZW5kXSxlLnB1c2godCksZS5lbmQ9bCxuPWFbbF0pe2RlbGV0ZSBhW24uc3RhcnRdO3ZhciB1PW49PT1lP2U6ZS5jb25jYXQobik7YVt1LnN0YXJ0PWUuc3RhcnRdPW9bdS5lbmQ9bi5lbmRdPXV9ZWxzZSBhW2Uuc3RhcnRdPW9bZS5lbmRdPWU7ZWxzZSBpZihlPWFbbF0paWYoZGVsZXRlIGFbZS5zdGFydF0sZS51bnNoaWZ0KHQpLGUuc3RhcnQ9cyxuPW9bc10pe2RlbGV0ZSBvW24uZW5kXTt2YXIgYz1uPT09ZT9lOm4uY29uY2F0KGUpO2FbYy5zdGFydD1uLnN0YXJ0XT1vW2MuZW5kPWUuZW5kXT1jfWVsc2UgYVtlLnN0YXJ0XT1vW2UuZW5kXT1lO2Vsc2UgZT1bdF0sYVtlLnN0YXJ0PXNdPW9bZS5lbmQ9bF09ZX0pLG4obyxhKSxuKGEsbyksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdDwwP350OnRdfHxzLnB1c2goW3RdKX0pLHN9LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHA9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LG09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXIrbj4+PjE7dFtpXTxlP3I9aSsxOm49aX1yZXR1cm4gcn0sdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Q8MCYmKHQ9fnQpO3ZhciByPWlbdF07cj9yLnB1c2goZSk6aVt0XT1bZV19KX1mdW5jdGlvbiByKHQscil7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UodCxyKX0pfWZ1bmN0aW9uIG4odCxlKXsiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXQudHlwZT90Lmdlb21ldHJpZXMuZm9yRWFjaChmdW5jdGlvbih0KXtuKHQsZSl9KTp0LnR5cGUgaW4gbyYmb1t0LnR5cGVdKHQuYXJjcyxlKX12YXIgaT17fSxhPXQubWFwKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxvPXtMaW5lU3RyaW5nOmUsTXVsdGlMaW5lU3RyaW5nOnIsUG9seWdvbjpyLE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyKHQsZSl9KX19O3QuZm9yRWFjaChuKTtmb3IodmFyIHMgaW4gaSlmb3IodmFyIGw9aVtzXSx1PWwubGVuZ3RoLGM9MDtjPHU7KytjKWZvcih2YXIgaD1jKzE7aDx1OysraCl7dmFyIGYsZD1sW2NdLHA9bFtoXTsoZj1hW2RdKVtzPW0oZixwKV0hPT1wJiZmLnNwbGljZShzLDAscCksKGY9YVtwXSlbcz1tKGYsZCldIT09ZCYmZi5zcGxpY2UocywwLGQpfXJldHVybiBhfSxnPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt0WzBdPU1hdGgucm91bmQoKHRbMF0tbykvcyksdFsxXT1NYXRoLnJvdW5kKCh0WzFdLWwpL2MpfWZ1bmN0aW9uIG4odCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKG4pO2JyZWFrO2Nhc2UiUG9pbnQiOnIodC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gocil9fWlmKCEoKGU9TWF0aC5mbG9vcihlKSk+PTIpKXRocm93IG5ldyBFcnJvcigibiBtdXN0IGJlIFx1MjI2NTIiKTtpZih0LnRyYW5zZm9ybSl0aHJvdyBuZXcgRXJyb3IoImFscmVhZHkgcXVhbnRpemVkIik7dmFyIGksYT11KHQpLG89YVswXSxzPShhWzJdLW8pLyhlLTEpfHwxLGw9YVsxXSxjPShhWzNdLWwpLyhlLTEpfHwxO3QuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT0xLGE9MSx1PXQubGVuZ3RoLGg9dFswXSxmPWhbMF09TWF0aC5yb3VuZCgoaFswXS1vKS9zKSxkPWhbMV09TWF0aC5yb3VuZCgoaFsxXS1sKS9jKTtpPHU7KytpKWg9dFtpXSxyPU1hdGgucm91bmQoKGhbMF0tbykvcyksbj1NYXRoLnJvdW5kKChoWzFdLWwpL2MpLHI9PT1mJiZuPT09ZHx8KGU9dFthKytdLGVbMF09ci1mLGY9cixlWzFdPW4tZCxkPW4pO2E8MiYmKGU9dFthKytdLGVbMF09MCxlWzFdPTApLHQubGVuZ3RoPWF9KTtmb3IoaSBpbiB0Lm9iamVjdHMpbih0Lm9iamVjdHNbaV0pO3JldHVybiB0LnRyYW5zZm9ybT17c2NhbGU6W3MsY10sdHJhbnNsYXRlOltvLGxdfSx0fSx5PWZ1bmN0aW9uKHQpe2lmKG51bGw9PShlPXQudHJhbnNmb3JtKSlyZXR1cm4gczt2YXIgZSxyLG4saT1lLnNjYWxlWzBdLGE9ZS5zY2FsZVsxXSxvPWUudHJhbnNsYXRlWzBdLGw9ZS50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KHI9bj0wKTt2YXIgcz1NYXRoLnJvdW5kKCh0WzBdLW8pL2kpLHU9TWF0aC5yb3VuZCgodFsxXS1sKS9hKTtyZXR1cm4gdFswXT1zLXIscj1zLHRbMV09dS1uLG49dSx0fX07dC5iYm94PXUsdC5mZWF0dXJlPWgsdC5tZXNoPWQsdC5tZXNoQXJjcz1uLHQubWVyZ2U9cCx0Lm1lcmdlQXJjcz1vLHQubmVpZ2hib3JzPXYsdC5xdWFudGl6ZT1nLHQudHJhbnNmb3JtPWwsdC51bnRyYW5zZm9ybT15LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7fV0sNTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQobyh0KzEpKSxyPVtdLG49MDtuPGU7KytuKXtmb3IodmFyIHM9aS51bnJhbmsodCxuKSxsPVswXSx1PTAsYz0wO2M8cy5sZW5ndGg7KytjKXUrPTE8PHNbY10sbC5wdXNoKHUpO2Eocyk8MSYmKGxbMF09dSxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn1lLmV4cG9ydHM9bjt2YXIgaT10KCJwZXJtdXRhdGlvbi1yYW5rIiksYT10KCJwZXJtdXRhdGlvbi1wYXJpdHkiKSxvPXQoImdhbW1hIil9LHtnYW1tYToxMzQsInBlcm11dGF0aW9uLXBhcml0eSI6NDc3LCJwZXJtdXRhdGlvbi1yYW5rIjo0Nzh9XSw1MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgtMSx0KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT1NYXRoLmFicyh0WzBdKSxyPU1hdGguYWJzKHRbMV0pLG49TWF0aC5hYnModFsyXSksaT1bMCwwLDBdO2U+TWF0aC5tYXgocixuKT9pWzJdPTE6cj5NYXRoLm1heChlLG4pP2lbMF09MTppWzFdPTE7Zm9yKHZhciBhPTAsbz0wLHM9MDtzPDM7KytzKWErPXRbc10qdFtzXSxvKz1pW3NdKnRbc107Zm9yKHZhciBzPTA7czwzOysrcylpW3NdLT1vL2EqdFtzXTtyZXR1cm4gZihpLGkpLGl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSxvLHMpe3RoaXMuY2VudGVyPWwociksdGhpcy51cD1sKG4pLHRoaXMucmlnaHQ9bChpKSx0aGlzLnJhZGl1cz1sKFthXSksdGhpcy5hbmdsZT1sKFtvLHNdKSx0aGlzLmFuZ2xlLmJvdW5kcz1bWy0xLzAsLU1hdGguUEkvMl0sWzEvMCxNYXRoLlBJLzJdXSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQsZSksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9dGhpcy51cC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmlnaHQ9dGhpcy5yaWdodC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRBbmdsZT10aGlzLmFuZ2xlLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRUb3dhcmQ9WzAsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgdT0wO3U8MTY7Kyt1KXRoaXMuY29tcHV0ZWRNYXRyaXhbdV09LjU7dGhpcy5yZWNhbGNNYXRyaXgoMCl9ZnVuY3Rpb24gcyh0KXt0PXR8fHt9O3ZhciBlPXQuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxpPXQucmlnaHR8fGEocikscz10LnJhZGl1c3x8MSxsPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMyksZihyLHIpLGk9W10uc2xpY2UuY2FsbChpLDAsMyksZihpLGkpLCJleWUiaW4gdCl7dmFyIGM9dC5leWUscD1bY1swXS1lWzBdLGNbMV0tZVsxXSxjWzJdLWVbMl1dO2goaSxwLHIpLG4oaVswXSxpWzFdLGlbMl0pPDFlLTY/aT1hKHIpOmYoaSxpKSxzPW4ocFswXSxwWzFdLHBbMl0pO3ZhciBtPWQocixwKS9zLHY9ZChpLHApL3M7dT1NYXRoLmFjb3MobSksbD1NYXRoLmFjb3Modil9cmV0dXJuIHM9TWF0aC5sb2cocyksbmV3IG8odC56b29tTWluLHQuem9vbU1heCxlLHIsaSxzLGwsdSl9ZS5leHBvcnRzPXM7dmFyIGw9dCgiZmlsdGVyZWQtdmVjdG9yIiksdT10KCJnbC1tYXQ0L2ludmVydCIpLGM9dCgiZ2wtbWF0NC9yb3RhdGUiKSxoPXQoImdsLXZlYzMvY3Jvc3MiKSxmPXQoImdsLXZlYzMvbm9ybWFsaXplIiksZD10KCJnbC12ZWMzL2RvdCIpLHA9by5wcm90b3R5cGU7cC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHNbMF07cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnVwLmN1cnZlKHQpLHRoaXMucmlnaHQuY3VydmUodCksdGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5hbmdsZS5jdXJ2ZSh0KTtmb3IodmFyIGU9dGhpcy5jb21wdXRlZFVwLHI9dGhpcy5jb21wdXRlZFJpZ2h0LGk9MCxhPTAsbz0wO288MzsrK28pYSs9ZVtvXSpyW29dLGkrPWVbb10qZVtvXTtmb3IodmFyIHM9TWF0aC5zcXJ0KGkpLGw9MCxvPTA7bzwzOysrbylyW29dLT1lW29dKmEvaSxsKz1yW29dKnJbb10sZVtvXS89cztmb3IodmFyIHU9TWF0aC5zcXJ0KGwpLG89MDtvPDM7KytvKXJbb10vPXU7dmFyIGM9dGhpcy5jb21wdXRlZFRvd2FyZDtoKGMsZSxyKSxmKGMsYyk7Zm9yKHZhciBkPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHA9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLG09dGhpcy5jb21wdXRlZEFuZ2xlWzFdLHY9TWF0aC5jb3MocCksZz1NYXRoLnNpbihwKSx5PU1hdGguY29zKG0pLGI9TWF0aC5zaW4obSkseD10aGlzLmNvbXB1dGVkQ2VudGVyLF89dip5LHc9Zyp5LE09YixrPS12KmIsQT0tZypiLFQ9eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4LG89MDtvPDM7KytvKXt2YXIgTD1fKnJbb10rdypjW29dK00qZVtvXTtFWzQqbysxXT1rKnJbb10rQSpjW29dK1QqZVtvXSxFWzQqbysyXT1MLEVbNCpvKzNdPTB9dmFyIEM9RVsxXSx6PUVbNV0sST1FWzldLEQ9RVsyXSxQPUVbNl0sTz1FWzEwXSxSPXoqTy1JKlAsRj1JKkQtQypPLGo9QypQLXoqRCxOPW4oUixGLGopO1IvPU4sRi89TixqLz1OLEVbMF09UixFWzRdPUYsRVs4XT1qO2Zvcih2YXIgbz0wO288MzsrK28pU1tvXT14W29dK0VbMis0Km9dKmQ7Zm9yKHZhciBvPTA7bzwzOysrbyl7Zm9yKHZhciBsPTAsQj0wO0I8MzsrK0IpbCs9RVtvKzQqQl0qU1tCXTtFWzEyK29dPS1sfUVbMTVdPTF9LHAuZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9O3ZhciBtPVswLDAsMF07cC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodGhpcy5hbmdsZS5tb3ZlKHQsZSxyKSxuKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4O21bMF09aVsyXSxtWzFdPWlbNl0sbVsyXT1pWzEwXTtmb3IodmFyIGE9dGhpcy5jb21wdXRlZFVwLG89dGhpcy5jb21wdXRlZFJpZ2h0LHM9dGhpcy5jb21wdXRlZFRvd2FyZCxsPTA7bDwzOysrbClpWzQqbF09YVtsXSxpWzQqbCsxXT1vW2xdLGlbNCpsKzJdPXNbbF07YyhpLGksbixtKTtmb3IodmFyIGw9MDtsPDM7KytsKWFbbF09aVs0KmxdLG9bbF09aVs0KmwrMV07dGhpcy51cC5zZXQodCxhWzBdLGFbMV0sYVsyXSksdGhpcy5yaWdodC5zZXQodCxvWzBdLG9bMV0sb1syXSl9fSxwLnBhbj1mdW5jdGlvbih0LGUscixpKXtlPWV8fDAscj1yfHwwLGk9aXx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4LG89KE1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGFbMV0pLHM9YVs1XSxsPWFbOV0sdT1uKG8scyxsKTtvLz11LHMvPXUsbC89dTt2YXIgYz1hWzBdLGg9YVs0XSxmPWFbOF0sZD1jKm8raCpzK2YqbDtjLT1vKmQsaC09cypkLGYtPWwqZDt2YXIgcD1uKGMsaCxmKTtjLz1wLGgvPXAsZi89cDt2YXIgbT1jKmUrbypyLHY9aCplK3MqcixnPWYqZStsKnI7dGhpcy5jZW50ZXIubW92ZSh0LG0sdixnKTt2YXIgeT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt5PU1hdGgubWF4KDFlLTQseStpKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyh5KSl9LHAudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LHAuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPTE7Im51bWJlciI9PXR5cGVvZiByJiYobz0wfHIpLChvPDB8fG8+MykmJihvPTEpO3ZhciBzPShvKzIpJTM7ZXx8KHRoaXMucmVjYWxjTWF0cml4KHQpLGU9dGhpcy5jb21wdXRlZE1hdHJpeCk7dmFyIGw9ZVtvXSxjPWVbbys0XSxoPWVbbys4XTtpZihhKXt2YXIgZj1NYXRoLmFicyhsKSxkPU1hdGguYWJzKGMpLHA9TWF0aC5hYnMoaCksbT1NYXRoLm1heChmLGQscCk7Zj09PW0/KGw9bDwwPy0xOjEsYz1oPTApOnA9PT1tPyhoPWg8MD8tMToxLGw9Yz0wKTooYz1jPDA/LTE6MSxsPWg9MCl9ZWxzZXt2YXIgdj1uKGwsYyxoKTtsLz12LGMvPXYsaC89dn12YXIgZz1lW3NdLHk9ZVtzKzRdLGI9ZVtzKzhdLHg9ZypsK3kqYytiKmg7Zy09bCp4LHktPWMqeCxiLT1oKng7dmFyIF89bihnLHksYik7Zy89Xyx5Lz1fLGIvPV87dmFyIHc9YypiLWgqeSxNPWgqZy1sKmIsaz1sKnktYypnLEE9bih3LE0sayk7dy89QSxNLz1BLGsvPUEsdGhpcy5jZW50ZXIuanVtcCh0LHEsRyxZKSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMudXAuanVtcCh0LGwsYyxoKSx0aGlzLnJpZ2h0Lmp1bXAodCxnLHksYik7dmFyIFQsUztpZigyPT09byl7dmFyIEU9ZVsxXSxMPWVbNV0sQz1lWzldLHo9RSpnK0wqeStDKmIsST1FKncrTCpNK0MqaztUPVI8MD8tTWF0aC5QSS8yOk1hdGguUEkvMixTPU1hdGguYXRhbjIoSSx6KX1lbHNle3ZhciBEPWVbMl0sUD1lWzZdLE89ZVsxMF0sUj1EKmwrUCpjK08qaCxGPUQqZytQKnkrTypiLGo9RCp3K1AqTStPKms7VD1NYXRoLmFzaW4oaShSKSksUz1NYXRoLmF0YW4yKGosRil9dGhpcy5hbmdsZS5qdW1wKHQsUyxUKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgTj1lWzJdLEI9ZVs2XSxVPWVbMTBdLFY9dGhpcy5jb21wdXRlZE1hdHJpeDt1KFYsZSk7dmFyIEg9VlsxNV0scT1WWzEyXS9ILEc9VlsxM10vSCxZPVZbMTRdL0gsWD1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5qdW1wKHQscS1OKlgsRy1CKlgsWS1VKlgpfSxwLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy51cC5sYXN0VCgpLHRoaXMucmlnaHQubGFzdFQoKSx0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuYW5nbGUubGFzdFQoKSl9LHAuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMudXAuaWRsZSh0KSx0aGlzLnJpZ2h0LmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLmFuZ2xlLmlkbGUodCl9LHAuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy51cC5mbHVzaCh0KSx0aGlzLnJpZ2h0LmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMuYW5nbGUuZmx1c2godCl9LHAuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0scC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsYSl7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixhPWF8fHRoaXMuY29tcHV0ZWRVcDt2YXIgbz1hWzBdLHM9YVsxXSxsPWFbMl0sdT1uKG8scyxsKTtpZighKHU8MWUtNikpe28vPXUscy89dSxsLz11O3ZhciBjPWVbMF0tclswXSxoPWVbMV0tclsxXSxmPWVbMl0tclsyXSxkPW4oYyxoLGYpO2lmKCEoZDwxZS02KSl7Yy89ZCxoLz1kLGYvPWQ7dmFyIHA9dGhpcy5jb21wdXRlZFJpZ2h0LG09cFswXSx2PXBbMV0sZz1wWzJdLHk9byptK3MqditsKmc7bS09eSpvLHYtPXkqcyxnLT15Kmw7dmFyIGI9bihtLHYsZyk7aWYoIShiPC4wMSYmKG09cypmLWwqaCx2PWwqYy1vKmYsZz1vKmgtcypjLChiPW4obSx2LGcpKTwxZS02KSkpe20vPWIsdi89YixnLz1iLHRoaXMudXAuc2V0KHQsbyxzLGwpLHRoaXMucmlnaHQuc2V0KHQsbSx2LGcpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhkKSk7dmFyIHg9cypnLWwqdixfPWwqbS1vKmcsdz1vKnYtcyptLE09bih4LF8sdyk7eC89TSxfLz1NLHcvPU07dmFyIGs9bypjK3MqaCtsKmYsQT1tKmMrdipoK2cqZixUPXgqYytfKmgrdypmLFM9TWF0aC5hc2luKGkoaykpLEU9TWF0aC5hdGFuMihULEEpLEw9dGhpcy5hbmdsZS5fc3RhdGUsQz1MW0wubGVuZ3RoLTFdLHo9TFtMLmxlbmd0aC0yXTtDJT0yKk1hdGguUEk7dmFyIEk9TWF0aC5hYnMoQysyKk1hdGguUEktRSksRD1NYXRoLmFicyhDLUUpLFA9TWF0aC5hYnMoQy0yKk1hdGguUEktRSk7STxEJiYoQys9MipNYXRoLlBJKSxQPEQmJihDLT0yKk1hdGguUEkpLHRoaXMuYW5nbGUuanVtcCh0aGlzLmFuZ2xlLmxhc3RUKCksQyx6KSx0aGlzLmFuZ2xlLnNldCh0LEUsUyl9fX19fSx7ImZpbHRlcmVkLXZlY3RvciI6MTMxLCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L3JvdGF0ZSI6MTgzLCJnbC12ZWMzL2Nyb3NzIjoyNzAsImdsLXZlYzMvZG90IjoyNzEsImdsLXZlYzMvbm9ybWFsaXplIjoyNzR9XSw1Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49dCplLGE9aSp0LG89YS10LHM9YS1vLGw9dC1zLHU9aSplLGM9dS1lLGg9dS1jLGY9ZS1oLGQ9bi1zKmgscD1kLWwqaCxtPXAtcypmLHY9bCpmLW07cmV0dXJuIHI/KHJbMF09dixyWzFdPW4scik6W3Ysbl19ZS5leHBvcnRzPW47dmFyIGk9KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDUzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj10K2UsaT1uLXQsYT1uLWksbz1lLWkscz10LWE7cmV0dXJuIHI/KHJbMF09cytvLHJbMV09bixyKTpbcytvLG5dfWUuZXhwb3J0cz1ufSx7fV0sNTM5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPXkubG9nMihlKTt3W3JdLnB1c2godCl9fWZ1bmN0aW9uIGEodCl7aSh0LmJ1ZmZlcil9ZnVuY3Rpb24gbyh0KXt2YXIgdD15Lm5leHRQb3cyKHQpLGU9eS5sb2cyKHQpLHI9d1tlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBzKHQpe3JldHVybiBuZXcgVWludDhBcnJheShvKHQpLDAsdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbmV3IFVpbnQxNkFycmF5KG8oMip0KSwwLHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG5ldyBVaW50MzJBcnJheShvKDQqdCksMCx0KX1mdW5jdGlvbiBjKHQpe3JldHVybiBuZXcgSW50OEFycmF5KG8odCksMCx0KX1mdW5jdGlvbiBoKHQpe3JldHVybiBuZXcgSW50MTZBcnJheShvKDIqdCksMCx0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBuZXcgSW50MzJBcnJheShvKDQqdCksMCx0KX1mdW5jdGlvbiBkKHQpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KG8oNCp0KSwwLHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkobyg4KnQpLDAsdCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4geD9uZXcgVWludDhDbGFtcGVkQXJyYXkobyh0KSwwLHQpOnModCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IERhdGFWaWV3KG8odCksMCx0KX1mdW5jdGlvbiBnKHQpe3Q9eS5uZXh0UG93Mih0KTt2YXIgZT15LmxvZzIodCkscj1NW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IG4odCl9dmFyIHk9dCgiYml0LXR3aWRkbGUiKSxiPXQoImR1cCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODpiKFszMiwwXSksVUlOVDE2OmIoWzMyLDBdKSxVSU5UMzI6YihbMzIsMF0pLElOVDg6YihbMzIsMF0pLElOVDE2OmIoWzMyLDBdKSxJTlQzMjpiKFszMiwwXSksRkxPQVQ6YihbMzIsMF0pLERPVUJMRTpiKFszMiwwXSksREFUQTpiKFszMiwwXSksVUlOVDhDOmIoWzMyLDBdKSxCVUZGRVI6YihbMzIsMF0pfSk7dmFyIHg9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSxfPWUuX19UWVBFREFSUkFZX1BPT0w7Xy5VSU5UOEN8fChfLlVJTlQ4Qz1iKFszMiwwXSkpLF8uQlVGRkVSfHwoXy5CVUZGRVI9YihbMzIsMF0pKTt2YXIgdz1fLkRBVEEsTT1fLkJVRkZFUjtyLmZyZWU9ZnVuY3Rpb24odCl7aWYobi5pc0J1ZmZlcih0KSlNW3kubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfHkubG9nMihlKTt3W3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9YSxyLmZyZWVBcnJheUJ1ZmZlcj1pLHIuZnJlZUJ1ZmZlcj1mdW5jdGlvbih0KXtNW3kubG9nMih0Lmxlbmd0aCldLnB1c2godCl9LHIubWFsbG9jPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZXx8ImFycmF5YnVmZmVyIj09PWUpcmV0dXJuIG8odCk7c3dpdGNoKGUpe2Nhc2UidWludDgiOnJldHVybiBzKHQpO2Nhc2UidWludDE2IjpyZXR1cm4gbCh0KTtjYXNlInVpbnQzMiI6cmV0dXJuIHUodCk7Y2FzZSJpbnQ4IjpyZXR1cm4gYyh0KTtjYXNlImludDE2IjpyZXR1cm4gaCh0KTtjYXNlImludDMyIjpyZXR1cm4gZih0KTtjYXNlImZsb2F0IjpjYXNlImZsb2F0MzIiOnJldHVybiBkKHQpO2Nhc2UiZG91YmxlIjpjYXNlImZsb2F0NjQiOnJldHVybiBwKHQpO2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIG0odCk7Y2FzZSJidWZmZXIiOnJldHVybiBnKHQpO2Nhc2UiZGF0YSI6Y2FzZSJkYXRhdmlldyI6cmV0dXJuIHYodCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1vLHIubWFsbG9jVWludDg9cyxyLm1hbGxvY1VpbnQxNj1sLHIubWFsbG9jVWludDMyPXUsci5tYWxsb2NJbnQ4PWMsci5tYWxsb2NJbnQxNj1oLHIubWFsbG9jSW50MzI9ZixyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD1kLHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT1wLHIubWFsbG9jVWludDhDbGFtcGVkPW0sci5tYWxsb2NEYXRhVmlldz12LHIubWFsbG9jQnVmZmVyPWcsci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3QpXy5VSU5UOFt0XS5sZW5ndGg9MCxfLlVJTlQxNlt0XS5sZW5ndGg9MCxfLlVJTlQzMlt0XS5sZW5ndGg9MCxfLklOVDhbdF0ubGVuZ3RoPTAsXy5JTlQxNlt0XS5sZW5ndGg9MCxfLklOVDMyW3RdLmxlbmd0aD0wLF8uRkxPQVRbdF0ubGVuZ3RoPTAsXy5ET1VCTEVbdF0ubGVuZ3RoPTAsXy5VSU5UOENbdF0ubGVuZ3RoPTAsd1t0XS5sZW5ndGg9MCxNW3RdLmxlbmd0aD0wfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiYml0LXR3aWRkbGUiOjY1LGJ1ZmZlcjo3NSxkdXA6MTIzfV0sNTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyJ1c2UgcmVzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uO3ZhciBpPW4ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9fSksaS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0saS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LHI9dGhpcy5yb290cztyW3RdIT09dDspdD1yW3RdO2Zvcig7cltlXSE9PXQ7KXt2YXIgbj1yW2VdO3JbZV09dCxlPW59cmV0dXJuIHR9LGkubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSw1NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksaT10W29dLGUoaSxhKSl7CmlmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fWZ1bmN0aW9uIGEodCxlLHIpe3JldHVybiAwPT09dC5sZW5ndGg/dDplPyhyfHx0LnNvcnQoZSksbih0LGUpKToocnx8dC5zb3J0KCksaSh0KSl9ZS5leHBvcnRzPWF9LHt9XSw1NDI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuY3g9Myp0LHRoaXMuYng9Myooci10KS10aGlzLmN4LHRoaXMuYXg9MS10aGlzLmN4LXRoaXMuYngsdGhpcy5jeT0zKmUsdGhpcy5ieT0zKihuLWUpLXRoaXMuY3ksdGhpcy5heT0xLXRoaXMuY3ktdGhpcy5ieSx0aGlzLnAxeD10LHRoaXMucDF5PW4sdGhpcy5wMng9cix0aGlzLnAyeT1ufWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlWD1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXgqdCt0aGlzLmJ4KSp0K3RoaXMuY3gpKnR9LG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlWT1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXkqdCt0aGlzLmJ5KSp0K3RoaXMuY3kpKnR9LG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKDMqdGhpcy5heCp0KzIqdGhpcy5ieCkqdCt0aGlzLmN4fSxuLnByb3RvdHlwZS5zb2x2ZUN1cnZlWD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTFlLTYpO3ZhciByLG4saSxhLG87Zm9yKGk9dCxvPTA7bzw4O28rKyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKS10LE1hdGguYWJzKGEpPGUpcmV0dXJuIGk7dmFyIHM9dGhpcy5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYKGkpO2lmKE1hdGguYWJzKHMpPDFlLTYpYnJlYWs7aS09YS9zfWlmKHI9MCxuPTEsKGk9dCk8cilyZXR1cm4gcjtpZihpPm4pcmV0dXJuIG47Zm9yKDtyPG47KXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLE1hdGguYWJzKGEtdCk8ZSlyZXR1cm4gaTt0PmE/cj1pOm49aSxpPS41KihuLXIpK3J9cmV0dXJuIGl9LG4ucHJvdG90eXBlLnNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2FtcGxlQ3VydmVZKHRoaXMuc29sdmVDdXJ2ZVgodCxlKSl9fSx7fV0sNTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5ob3N0PW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5xdWVyeT1udWxsLHRoaXMucGF0aG5hbWU9bnVsbCx0aGlzLnBhdGg9bnVsbCx0aGlzLmhyZWY9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXtpZih0JiZ1LmlzT2JqZWN0KHQpJiZ0IGluc3RhbmNlb2YgbilyZXR1cm4gdDt2YXIgaT1uZXcgbjtyZXR1cm4gaS5wYXJzZSh0LGUsciksaX1mdW5jdGlvbiBhKHQpe3JldHVybiB1LmlzU3RyaW5nKHQpJiYodD1pKHQpKSx0IGluc3RhbmNlb2Ygbj90LmZvcm1hdCgpOm4ucHJvdG90eXBlLmZvcm1hdC5jYWxsKHQpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gaSh0LCExLCEwKS5yZXNvbHZlKGUpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdD9pKHQsITEsITApLnJlc29sdmVPYmplY3QoZSk6ZX12YXIgbD10KCJwdW55Y29kZSIpLHU9dCgiLi91dGlsIik7ci5wYXJzZT1pLHIucmVzb2x2ZT1vLHIucmVzb2x2ZU9iamVjdD1zLHIuZm9ybWF0PWEsci5Vcmw9bjt2YXIgYz0vXihbYS16MC05ListXSs6KS9pLGg9LzpbMC05XSokLyxmPS9eKFwvXC8/KD8hXC8pW15cP1xzXSopKFw/W15cc10qKT8kLyxkPVsiPCIsIj4iLCciJywiYCIsIiAiLCJcciIsIlxuIiwiXHQiXSxwPVsieyIsIn0iLCJ8IiwiXFwiLCJeIiwiYCJdLmNvbmNhdChkKSxtPVsiJyJdLmNvbmNhdChwKSx2PVsiJSIsIi8iLCI/IiwiOyIsIiMiXS5jb25jYXQobSksZz1bIi8iLCI/IiwiIyJdLHk9L15bK2EtejAtOUEtWl8tXXswLDYzfSQvLGI9L14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLHg9e2phdmFzY3JpcHQ6ITAsImphdmFzY3JpcHQ6IjohMH0sXz17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSx3PXtodHRwOiEwLGh0dHBzOiEwLGZ0cDohMCxnb3BoZXI6ITAsZmlsZTohMCwiaHR0cDoiOiEwLCJodHRwczoiOiEwLCJmdHA6IjohMCwiZ29waGVyOiI6ITAsImZpbGU6IjohMH0sTT10KCJxdWVyeXN0cmluZyIpO24ucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyKXtpZighdS5pc1N0cmluZyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIHQpO3ZhciBuPXQuaW5kZXhPZigiPyIpLGk9LTEhPT1uJiZuPHQuaW5kZXhPZigiIyIpPyI/IjoiIyIsYT10LnNwbGl0KGkpLG89L1xcL2c7YVswXT1hWzBdLnJlcGxhY2UobywiLyIpLHQ9YS5qb2luKGkpO3ZhciBzPXQ7aWYocz1zLnRyaW0oKSwhciYmMT09PXQuc3BsaXQoIiMiKS5sZW5ndGgpe3ZhciBoPWYuZXhlYyhzKTtpZihoKXJldHVybiB0aGlzLnBhdGg9cyx0aGlzLmhyZWY9cyx0aGlzLnBhdGhuYW1lPWhbMV0saFsyXT8odGhpcy5zZWFyY2g9aFsyXSx0aGlzLnF1ZXJ5PWU/TS5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpOnRoaXMuc2VhcmNoLnN1YnN0cigxKSk6ZSYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLHRoaXN9dmFyIGQ9Yy5leGVjKHMpO2lmKGQpe2Q9ZFswXTt2YXIgcD1kLnRvTG93ZXJDYXNlKCk7dGhpcy5wcm90b2NvbD1wLHM9cy5zdWJzdHIoZC5sZW5ndGgpfWlmKHJ8fGR8fHMubWF0Y2goL15cL1wvW15AXC9dK0BbXkBcL10rLykpe3ZhciBrPSIvLyI9PT1zLnN1YnN0cigwLDIpOyFrfHxkJiZfW2RdfHwocz1zLnN1YnN0cigyKSx0aGlzLnNsYXNoZXM9ITApfWlmKCFfW2RdJiYoa3x8ZCYmIXdbZF0pKXtmb3IodmFyIEE9LTEsVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgUz1zLmluZGV4T2YoZ1tUXSk7LTEhPT1TJiYoLTE9PT1BfHxTPEEpJiYoQT1TKX12YXIgRSxMO0w9LTE9PT1BP3MubGFzdEluZGV4T2YoIkAiKTpzLmxhc3RJbmRleE9mKCJAIixBKSwtMSE9PUwmJihFPXMuc2xpY2UoMCxMKSxzPXMuc2xpY2UoTCsxKSx0aGlzLmF1dGg9ZGVjb2RlVVJJQ29tcG9uZW50KEUpKSxBPS0xO2Zvcih2YXIgVD0wO1Q8di5sZW5ndGg7VCsrKXt2YXIgUz1zLmluZGV4T2YodltUXSk7LTEhPT1TJiYoLTE9PT1BfHxTPEEpJiYoQT1TKX0tMT09PUEmJihBPXMubGVuZ3RoKSx0aGlzLmhvc3Q9cy5zbGljZSgwLEEpLHM9cy5zbGljZShBKSx0aGlzLnBhcnNlSG9zdCgpLHRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZXx8IiI7dmFyIEM9IlsiPT09dGhpcy5ob3N0bmFtZVswXSYmIl0iPT09dGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aC0xXTtpZighQylmb3IodmFyIHo9dGhpcy5ob3N0bmFtZS5zcGxpdCgvXC4vKSxUPTAsST16Lmxlbmd0aDtUPEk7VCsrKXt2YXIgRD16W1RdO2lmKEQmJiFELm1hdGNoKHkpKXtmb3IodmFyIFA9IiIsTz0wLFI9RC5sZW5ndGg7TzxSO08rKylELmNoYXJDb2RlQXQoTyk+MTI3P1ArPSJ4IjpQKz1EW09dO2lmKCFQLm1hdGNoKHkpKXt2YXIgRj16LnNsaWNlKDAsVCksaj16LnNsaWNlKFQrMSksTj1ELm1hdGNoKGIpO04mJihGLnB1c2goTlsxXSksai51bnNoaWZ0KE5bMl0pKSxqLmxlbmd0aCYmKHM9Ii8iK2ouam9pbigiLiIpK3MpLHRoaXMuaG9zdG5hbWU9Ri5qb2luKCIuIik7YnJlYWt9fX10aGlzLmhvc3RuYW1lLmxlbmd0aD4yNTU/dGhpcy5ob3N0bmFtZT0iIjp0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSxDfHwodGhpcy5ob3N0bmFtZT1sLnRvQVNDSUkodGhpcy5ob3N0bmFtZSkpO3ZhciBCPXRoaXMucG9ydD8iOiIrdGhpcy5wb3J0OiIiLFU9dGhpcy5ob3N0bmFtZXx8IiI7dGhpcy5ob3N0PVUrQix0aGlzLmhyZWYrPXRoaXMuaG9zdCxDJiYodGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnN1YnN0cigxLHRoaXMuaG9zdG5hbWUubGVuZ3RoLTIpLCIvIiE9PXNbMF0mJihzPSIvIitzKSl9aWYoIXhbcF0pZm9yKHZhciBUPTAsST1tLmxlbmd0aDtUPEk7VCsrKXt2YXIgVj1tW1RdO2lmKC0xIT09cy5pbmRleE9mKFYpKXt2YXIgSD1lbmNvZGVVUklDb21wb25lbnQoVik7SD09PVYmJihIPWVzY2FwZShWKSkscz1zLnNwbGl0KFYpLmpvaW4oSCl9fXZhciBxPXMuaW5kZXhPZigiIyIpOy0xIT09cSYmKHRoaXMuaGFzaD1zLnN1YnN0cihxKSxzPXMuc2xpY2UoMCxxKSk7dmFyIEc9cy5pbmRleE9mKCI/Iik7aWYoLTEhPT1HPyh0aGlzLnNlYXJjaD1zLnN1YnN0cihHKSx0aGlzLnF1ZXJ5PXMuc3Vic3RyKEcrMSksZSYmKHRoaXMucXVlcnk9TS5wYXJzZSh0aGlzLnF1ZXJ5KSkscz1zLnNsaWNlKDAsRykpOmUmJih0aGlzLnNlYXJjaD0iIix0aGlzLnF1ZXJ5PXt9KSxzJiYodGhpcy5wYXRobmFtZT1zKSx3W3BdJiZ0aGlzLmhvc3RuYW1lJiYhdGhpcy5wYXRobmFtZSYmKHRoaXMucGF0aG5hbWU9Ii8iKSx0aGlzLnBhdGhuYW1lfHx0aGlzLnNlYXJjaCl7dmFyIEI9dGhpcy5wYXRobmFtZXx8IiIsWT10aGlzLnNlYXJjaHx8IiI7dGhpcy5wYXRoPUIrWX1yZXR1cm4gdGhpcy5ocmVmPXRoaXMuZm9ybWF0KCksdGhpc30sbi5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdXRofHwiIjt0JiYodD1lbmNvZGVVUklDb21wb25lbnQodCksdD10LnJlcGxhY2UoLyUzQS9pLCI6IiksdCs9IkAiKTt2YXIgZT10aGlzLnByb3RvY29sfHwiIixyPXRoaXMucGF0aG5hbWV8fCIiLG49dGhpcy5oYXNofHwiIixpPSExLGE9IiI7dGhpcy5ob3N0P2k9dCt0aGlzLmhvc3Q6dGhpcy5ob3N0bmFtZSYmKGk9dCsoLTE9PT10aGlzLmhvc3RuYW1lLmluZGV4T2YoIjoiKT90aGlzLmhvc3RuYW1lOiJbIit0aGlzLmhvc3RuYW1lKyJdIiksdGhpcy5wb3J0JiYoaSs9IjoiK3RoaXMucG9ydCkpLHRoaXMucXVlcnkmJnUuaXNPYmplY3QodGhpcy5xdWVyeSkmJk9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCYmKGE9TS5zdHJpbmdpZnkodGhpcy5xdWVyeSkpO3ZhciBvPXRoaXMuc2VhcmNofHxhJiYiPyIrYXx8IiI7cmV0dXJuIGUmJiI6IiE9PWUuc3Vic3RyKC0xKSYmKGUrPSI6IiksdGhpcy5zbGFzaGVzfHwoIWV8fHdbZV0pJiYhMSE9PWk/KGk9Ii8vIisoaXx8IiIpLHImJiIvIiE9PXIuY2hhckF0KDApJiYocj0iLyIrcikpOml8fChpPSIiKSxuJiYiIyIhPT1uLmNoYXJBdCgwKSYmKG49IiMiK24pLG8mJiI/IiE9PW8uY2hhckF0KDApJiYobz0iPyIrbykscj1yLnJlcGxhY2UoL1s/I10vZyxmdW5jdGlvbih0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpfSksbz1vLnJlcGxhY2UoIiMiLCIlMjMiKSxlK2krcitvK259LG4ucHJvdG90eXBlLnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdChpKHQsITEsITApKS5mb3JtYXQoKX0sbi5wcm90b3R5cGUucmVzb2x2ZU9iamVjdD1mdW5jdGlvbih0KXtpZih1LmlzU3RyaW5nKHQpKXt2YXIgZT1uZXcgbjtlLnBhcnNlKHQsITEsITApLHQ9ZX1mb3IodmFyIHI9bmV3IG4saT1PYmplY3Qua2V5cyh0aGlzKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07cltvXT10aGlzW29dfWlmKHIuaGFzaD10Lmhhc2gsIiI9PT10LmhyZWYpcmV0dXJuIHIuaHJlZj1yLmZvcm1hdCgpLHI7aWYodC5zbGFzaGVzJiYhdC5wcm90b2NvbCl7Zm9yKHZhciBzPU9iamVjdC5rZXlzKHQpLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXTsicHJvdG9jb2wiIT09YyYmKHJbY109dFtjXSl9cmV0dXJuIHdbci5wcm90b2NvbF0mJnIuaG9zdG5hbWUmJiFyLnBhdGhuYW1lJiYoci5wYXRoPXIucGF0aG5hbWU9Ii8iKSxyLmhyZWY9ci5mb3JtYXQoKSxyfWlmKHQucHJvdG9jb2wmJnQucHJvdG9jb2whPT1yLnByb3RvY29sKXtpZighd1t0LnByb3RvY29sXSl7Zm9yKHZhciBoPU9iamVjdC5rZXlzKHQpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtyW2RdPXRbZF19cmV0dXJuIHIuaHJlZj1yLmZvcm1hdCgpLHJ9aWYoci5wcm90b2NvbD10LnByb3RvY29sLHQuaG9zdHx8X1t0LnByb3RvY29sXSlyLnBhdGhuYW1lPXQucGF0aG5hbWU7ZWxzZXtmb3IodmFyIHA9KHQucGF0aG5hbWV8fCIiKS5zcGxpdCgiLyIpO3AubGVuZ3RoJiYhKHQuaG9zdD1wLnNoaWZ0KCkpOyk7dC5ob3N0fHwodC5ob3N0PSIiKSx0Lmhvc3RuYW1lfHwodC5ob3N0bmFtZT0iIiksIiIhPT1wWzBdJiZwLnVuc2hpZnQoIiIpLHAubGVuZ3RoPDImJnAudW5zaGlmdCgiIiksci5wYXRobmFtZT1wLmpvaW4oIi8iKX1pZihyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnksci5ob3N0PXQuaG9zdHx8IiIsci5hdXRoPXQuYXV0aCxyLmhvc3RuYW1lPXQuaG9zdG5hbWV8fHQuaG9zdCxyLnBvcnQ9dC5wb3J0LHIucGF0aG5hbWV8fHIuc2VhcmNoKXt2YXIgbT1yLnBhdGhuYW1lfHwiIix2PXIuc2VhcmNofHwiIjtyLnBhdGg9bSt2fXJldHVybiByLnNsYXNoZXM9ci5zbGFzaGVzfHx0LnNsYXNoZXMsci5ocmVmPXIuZm9ybWF0KCkscn12YXIgZz1yLnBhdGhuYW1lJiYiLyI9PT1yLnBhdGhuYW1lLmNoYXJBdCgwKSx5PXQuaG9zdHx8dC5wYXRobmFtZSYmIi8iPT09dC5wYXRobmFtZS5jaGFyQXQoMCksYj15fHxnfHxyLmhvc3QmJnQucGF0aG5hbWUseD1iLE09ci5wYXRobmFtZSYmci5wYXRobmFtZS5zcGxpdCgiLyIpfHxbXSxwPXQucGF0aG5hbWUmJnQucGF0aG5hbWUuc3BsaXQoIi8iKXx8W10saz1yLnByb3RvY29sJiYhd1tyLnByb3RvY29sXTtpZihrJiYoci5ob3N0bmFtZT0iIixyLnBvcnQ9bnVsbCxyLmhvc3QmJigiIj09PU1bMF0/TVswXT1yLmhvc3Q6TS51bnNoaWZ0KHIuaG9zdCkpLHIuaG9zdD0iIix0LnByb3RvY29sJiYodC5ob3N0bmFtZT1udWxsLHQucG9ydD1udWxsLHQuaG9zdCYmKCIiPT09cFswXT9wWzBdPXQuaG9zdDpwLnVuc2hpZnQodC5ob3N0KSksdC5ob3N0PW51bGwpLGI9YiYmKCIiPT09cFswXXx8IiI9PT1NWzBdKSkseSlyLmhvc3Q9dC5ob3N0fHwiIj09PXQuaG9zdD90Lmhvc3Q6ci5ob3N0LHIuaG9zdG5hbWU9dC5ob3N0bmFtZXx8IiI9PT10Lmhvc3RuYW1lP3QuaG9zdG5hbWU6ci5ob3N0bmFtZSxyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnksTT1wO2Vsc2UgaWYocC5sZW5ndGgpTXx8KE09W10pLE0ucG9wKCksTT1NLmNvbmNhdChwKSxyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnk7ZWxzZSBpZighdS5pc051bGxPclVuZGVmaW5lZCh0LnNlYXJjaCkpe2lmKGspe3IuaG9zdG5hbWU9ci5ob3N0PU0uc2hpZnQoKTt2YXIgQT0hIShyLmhvc3QmJnIuaG9zdC5pbmRleE9mKCJAIik+MCkmJnIuaG9zdC5zcGxpdCgiQCIpO0EmJihyLmF1dGg9QS5zaGlmdCgpLHIuaG9zdD1yLmhvc3RuYW1lPUEuc2hpZnQoKSl9cmV0dXJuIHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeSx1LmlzTnVsbChyLnBhdGhuYW1lKSYmdS5pc051bGwoci5zZWFyY2gpfHwoci5wYXRoPShyLnBhdGhuYW1lP3IucGF0aG5hbWU6IiIpKyhyLnNlYXJjaD9yLnNlYXJjaDoiIikpLHIuaHJlZj1yLmZvcm1hdCgpLHJ9aWYoIU0ubGVuZ3RoKXJldHVybiByLnBhdGhuYW1lPW51bGwsci5zZWFyY2g/ci5wYXRoPSIvIityLnNlYXJjaDpyLnBhdGg9bnVsbCxyLmhyZWY9ci5mb3JtYXQoKSxyO2Zvcih2YXIgVD1NLnNsaWNlKC0xKVswXSxTPShyLmhvc3R8fHQuaG9zdHx8TS5sZW5ndGg+MSkmJigiLiI9PT1UfHwiLi4iPT09VCl8fCIiPT09VCxFPTAsTD1NLmxlbmd0aDtMPj0wO0wtLSlUPU1bTF0sIi4iPT09VD9NLnNwbGljZShMLDEpOiIuLiI9PT1UPyhNLnNwbGljZShMLDEpLEUrKyk6RSYmKE0uc3BsaWNlKEwsMSksRS0tKTtpZighYiYmIXgpZm9yKDtFLS07RSlNLnVuc2hpZnQoIi4uIik7IWJ8fCIiPT09TVswXXx8TVswXSYmIi8iPT09TVswXS5jaGFyQXQoMCl8fE0udW5zaGlmdCgiIiksUyYmIi8iIT09TS5qb2luKCIvIikuc3Vic3RyKC0xKSYmTS5wdXNoKCIiKTt2YXIgQz0iIj09PU1bMF18fE1bMF0mJiIvIj09PU1bMF0uY2hhckF0KDApO2lmKGspe3IuaG9zdG5hbWU9ci5ob3N0PUM/IiI6TS5sZW5ndGg/TS5zaGlmdCgpOiIiO3ZhciBBPSEhKHIuaG9zdCYmci5ob3N0LmluZGV4T2YoIkAiKT4wKSYmci5ob3N0LnNwbGl0KCJAIik7QSYmKHIuYXV0aD1BLnNoaWZ0KCksci5ob3N0PXIuaG9zdG5hbWU9QS5zaGlmdCgpKX1yZXR1cm4gYj1ifHxyLmhvc3QmJk0ubGVuZ3RoLGImJiFDJiZNLnVuc2hpZnQoIiIpLE0ubGVuZ3RoP3IucGF0aG5hbWU9TS5qb2luKCIvIik6KHIucGF0aG5hbWU9bnVsbCxyLnBhdGg9bnVsbCksdS5pc051bGwoci5wYXRobmFtZSkmJnUuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOiIiKSsoci5zZWFyY2g/ci5zZWFyY2g6IiIpKSxyLmF1dGg9dC5hdXRofHxyLmF1dGgsci5zbGFzaGVzPXIuc2xhc2hlc3x8dC5zbGFzaGVzLHIuaHJlZj1yLmZvcm1hdCgpLHJ9LG4ucHJvdG90eXBlLnBhcnNlSG9zdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaG9zdCxlPWguZXhlYyh0KTtlJiYoZT1lWzBdLCI6IiE9PWUmJih0aGlzLnBvcnQ9ZS5zdWJzdHIoMSkpLHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC1lLmxlbmd0aCkpLHQmJih0aGlzLmhvc3RuYW1lPXQpfX0seyIuL3V0aWwiOjU0NCxwdW55Y29kZTo0ODYscXVlcnlzdHJpbmc6NDkwfV0sNTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aXNTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fSxpc09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fSxpc051bGw6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH19fSx7fV0sNTQ1OltmdW5jdGlvbih0LGUscil7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LHt9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0se31dLDU0NzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkodCxlKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOm99O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLG0oZSk/bi5zaG93SGlkZGVuPWU6ZSYmci5fZXh0ZW5kKG4sZSksXyhuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSxfKG4uZGVwdGgpJiYobi5kZXB0aD0yKSxfKG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSxfKG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWEpLGwobix0LG4uZGVwdGgpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1pLnN0eWxlc1tlXTtyZXR1cm4gcj8iXHgxYlsiK2kuY29sb3JzW3JdWzBdKyJtIit0KyJceDFiWyIraS5jb2xvcnNbcl1bMV0rIm0iOnR9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0fWZ1bmN0aW9uIHModCl7dmFyIGU9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0LHIpe2VbdF09ITB9KSxlfWZ1bmN0aW9uIGwodCxlLG4pe2lmKHQuY3VzdG9tSW5zcGVjdCYmZSYmVChlLmluc3BlY3QpJiZlLmluc3BlY3QhPT1yLmluc3BlY3QmJighZS5jb25zdHJ1Y3Rvcnx8ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1lKSl7dmFyIGk9ZS5pbnNwZWN0KG4sdCk7cmV0dXJuIGIoaSl8fChpPWwodCxpLG4pKSxpfXZhciBhPXUodCxlKTtpZihhKXJldHVybiBhO3ZhciBvPU9iamVjdC5rZXlzKGUpLG09cyhvKTtpZih0LnNob3dIaWRkZW4mJihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxBKGUpJiYoby5pbmRleE9mKCJtZXNzYWdlIik+PTB8fG8uaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIGMoZSk7aWYoMD09PW8ubGVuZ3RoKXtpZihUKGUpKXt2YXIgdj1lLm5hbWU/IjogIitlLm5hbWU6IiI7cmV0dXJuIHQuc3R5bGl6ZSgiW0Z1bmN0aW9uIit2KyJdIiwic3BlY2lhbCIpfWlmKHcoZSkpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksInJlZ2V4cCIpO2lmKGsoZSkpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJkYXRlIik7aWYoQShlKSlyZXR1cm4gYyhlKX12YXIgZz0iIix5PSExLHg9WyJ7IiwifSJdO2lmKHAoZSkmJih5PSEwLHg9WyJbIiwiXSJdKSxUKGUpKXtnPSIgW0Z1bmN0aW9uIisoZS5uYW1lPyI6ICIrZS5uYW1lOiIiKSsiXSJ9aWYodyhlKSYmKGc9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSksayhlKSYmKGc9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwoZSkpLEEoZSkmJihnPSIgIitjKGUpKSwwPT09by5sZW5ndGgmJigheXx8MD09ZS5sZW5ndGgpKXJldHVybiB4WzBdK2creFsxXTtpZihuPDApcmV0dXJuIHcoZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik6dC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTt0LnNlZW4ucHVzaChlKTt2YXIgXztyZXR1cm4gXz15P2godCxlLG4sbSxvKTpvLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gZih0LGUsbixtLHIseSl9KSx0LnNlZW4ucG9wKCksZChfLGcseCl9ZnVuY3Rpb24gdSh0LGUpe2lmKF8oZSkpcmV0dXJuIHQuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoYihlKSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHQuc3R5bGl6ZShyLCJzdHJpbmciKX1yZXR1cm4geShlKT90LnN0eWxpemUoIiIrZSwibnVtYmVyIik6bShlKT90LnN0eWxpemUoIiIrZSwiYm9vbGVhbiIpOnYoZSk/dC5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH1mdW5jdGlvbiBjKHQpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSsiXSJ9ZnVuY3Rpb24gaCh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKXooZSxTdHJpbmcobykpP2EucHVzaChmKHQsZSxyLG4sU3RyaW5nKG8pLCEwKSk6YS5wdXNoKCIiKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWF0Y2goL15cZCskLyl8fGEucHVzaChmKHQsZSxyLG4saSwhMCkpfSksYX1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbyxzLHU7aWYodT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsaSl8fHt2YWx1ZTplW2ldfSx1LmdldD9zPXUuc2V0P3Quc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOnQuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6dS5zZXQmJihzPXQuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLHoobixpKXx8KG89IlsiK2krIl0iKSxzfHwodC5zZWVuLmluZGV4T2YodS52YWx1ZSk8MD8ocz12KHIpP2wodCx1LnZhbHVlLG51bGwpOmwodCx1LnZhbHVlLHItMSkscy5pbmRleE9mKCJcbiIpPi0xJiYocz1hP3Muc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIgICIrdH0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrcy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiAgICIrdH0pLmpvaW4oIlxuIikpKTpzPXQuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksXyhvKSl7aWYoYSYmaS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gcztvPUpTT04uc3RyaW5naWZ5KCIiK2kpLG8ubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8obz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpLG89dC5zdHlsaXplKG8sIm5hbWUiKSk6KG89by5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksbz10LnN0eWxpemUobywic3RyaW5nIikpfXJldHVybiBvKyI6ICIrc31mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj0wO3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBuKyssZS5pbmRleE9mKCJcbiIpPj0wJiZuKyssdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MD9yWzBdKygiIj09PWU/IiI6ZSsiXG4gIikrIiAiK3Quam9pbigiLFxuICAiKSsiICIrclsxXTpyWzBdK2UrIiAiK3Quam9pbigiLCAiKSsiICIrclsxXX1mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdH1mdW5jdGlvbiB2KHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsPT10fWZ1bmN0aW9uIHkodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHgodCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gTSh0KSYmIltvYmplY3QgUmVnRXhwXSI9PT1FKHQpfWZ1bmN0aW9uIE0odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBrKHQpe3JldHVybiBNKHQpJiYiW29iamVjdCBEYXRlXSI9PT1FKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIE0odCkmJigiW29iamVjdCBFcnJvcl0iPT09RSh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBUKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIFModCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fWZ1bmN0aW9uIEUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiB0PDEwPyIwIit0LnRvU3RyaW5nKDEwKTp0LnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBDKCl7dmFyIHQ9bmV3IERhdGUsZT1bTCh0LmdldEhvdXJzKCkpLEwodC5nZXRNaW51dGVzKCkpLEwodC5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW3QuZ2V0RGF0ZSgpLE9bdC5nZXRNb250aCgpXSxlXS5qb2luKCIgIil9ZnVuY3Rpb24geih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX12YXIgST0vJVtzZGolXS9nO3IuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKCFiKHQpKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKGkoYXJndW1lbnRzW3JdKSk7cmV0dXJuIGUuam9pbigiICIpfWZvcih2YXIgcj0xLG49YXJndW1lbnRzLGE9bi5sZW5ndGgsbz1TdHJpbmcodCkucmVwbGFjZShJLGZ1bmN0aW9uKHQpe2lmKCIlJSI9PT10KXJldHVybiIlIjtpZihyPj1hKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKG5bcisrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobltyKytdKX1jYXRjaCh0KXtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gdH19KSxzPW5bcl07cjxhO3M9blsrK3JdKXYocyl8fCFNKHMpP28rPSIgIitzOm8rPSIgIitpKHMpO3JldHVybiBvfSxyLmRlcHJlY2F0ZT1mdW5jdGlvbih0LGkpe2Z1bmN0aW9uIGEoKXtpZighbyl7aWYoZS50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtlLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLG89ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKF8obi5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5kZXByZWNhdGUodCxpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09ZS5ub0RlcHJlY2F0aW9uKXJldHVybiB0O3ZhciBvPSExO3JldHVybiBhfTt2YXIgRCxQPXt9O3IuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoXyhEKSYmKEQ9ZS5lbnYuTk9ERV9ERUJVR3x8IiIpLHQ9dC50b1VwcGVyQ2FzZSgpLCFQW3RdKWlmKG5ldyBSZWdFeHAoIlxcYiIrdCsiXFxiIiwiaSIpLnRlc3QoRCkpe3ZhciBuPWUucGlkO1BbdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIix0LG4sZSl9fWVsc2UgUFt0XT1mdW5jdGlvbigpe307cmV0dXJuIFBbdF19LHIuaW5zcGVjdD1pLGkuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxpLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPW0sci5pc051bGw9dixyLmlzTnVsbE9yVW5kZWZpbmVkPWcsci5pc051bWJlcj15LHIuaXNTdHJpbmc9YixyLmlzU3ltYm9sPXgsci5pc1VuZGVmaW5lZD1fLHIuaXNSZWdFeHA9dyxyLmlzT2JqZWN0PU0sci5pc0RhdGU9ayxyLmlzRXJyb3I9QSxyLmlzRnVuY3Rpb249VCxyLmlzUHJpbWl0aXZlPVMsci5pc0J1ZmZlcj10KCIuL3N1cHBvcnQvaXNCdWZmZXIiKTt2YXIgTz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO3IubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLEMoKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPXQoImluaGVyaXRzIiksci5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFNKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6NTQ2LF9wcm9jZXNzOjQ4NSxpbmhlcml0czo1NDV9XSw1NDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHMuVmVjdG9yVGlsZT10KCIuL2xpYi92ZWN0b3J0aWxlLmpzIiksZS5leHBvcnRzLlZlY3RvclRpbGVGZWF0dXJlPXQoIi4vbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIiksZS5leHBvcnRzLlZlY3RvclRpbGVMYXllcj10KCIuL2xpYi92ZWN0b3J0aWxlbGF5ZXIuanMiKX0seyIuL2xpYi92ZWN0b3J0aWxlLmpzIjo1NDksIi4vbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIjo1NTAsIi4vbGliL3ZlY3RvcnRpbGVsYXllci5qcyI6NTUxfV0sNTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoaSx7fSxlKX1mdW5jdGlvbiBpKHQsZSxyKXtpZigzPT09dCl7dmFyIG49bmV3IGEocixyLnJlYWRWYXJpbnQoKStyLnBvcyk7bi5sZW5ndGgmJihlW24ubmFtZV09bil9fXZhciBhPXQoIi4vdmVjdG9ydGlsZWxheWVyIik7ZS5leHBvcnRzPW59LHsiLi92ZWN0b3J0aWxlbGF5ZXIiOjU1MX1dLDU1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSl7dGhpcy5wcm9wZXJ0aWVzPXt9LHRoaXMuZXh0ZW50PXIsdGhpcy50eXBlPTAsdGhpcy5fcGJmPXQsdGhpcy5fZ2VvbWV0cnk9LTEsdGhpcy5fa2V5cz1uLHRoaXMuX3ZhbHVlcz1hLHQucmVhZEZpZWxkcyhpLHRoaXMsZSl9ZnVuY3Rpb24gaSh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/YShyLGUpOjM9PXQ/ZS50eXBlPXIucmVhZFZhcmludCgpOjQ9PXQmJihlLl9nZW9tZXRyeT1yLnBvcyl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49ZS5fa2V5c1t0LnJlYWRWYXJpbnQoKV0saT1lLl92YWx1ZXNbdC5yZWFkVmFyaW50KCldO2UucHJvcGVydGllc1tuXT1pfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PTEpcmV0dXJuW3RdO2Zvcih2YXIgcixuLGk9W10sYT0wO2E8ZTthKyspe3ZhciBvPXModFthXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmkucHVzaChyKSxyPVt0W2FdXSk6ci5wdXNoKHRbYV0pKX1yZXR1cm4gciYmaS5wdXNoKHIpLGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxyPXRbb10sbis9KHIueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn12YXIgbD10KCJwb2ludC1nZW9tZXRyeSIpO2UuZXhwb3J0cz1uLG4udHlwZXM9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdLG4ucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsaT0wLGE9MCxvPTAscz1bXTt0LnBvczxyOyl7aWYoIWkpe3ZhciB1PXQucmVhZFZhcmludCgpO249NyZ1LGk9dT4+M31pZihpLS0sMT09PW58fDI9PT1uKWErPXQucmVhZFNWYXJpbnQoKSxvKz10LnJlYWRTVmFyaW50KCksMT09PW4mJihlJiZzLnB1c2goZSksZT1bXSksZS5wdXNoKG5ldyBsKGEsbykpO2Vsc2V7aWYoNyE9PW4pdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIituKTtlJiZlLnB1c2goZVswXS5jbG9uZSgpKX19cmV0dXJuIGUmJnMucHVzaChlKSxzfSxuLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLHU9LTEvMDt0LnBvczxlOyl7aWYoIW4pe3ZhciBjPXQucmVhZFZhcmludCgpO3I9NyZjLG49Yz4+M31pZihuLS0sMT09PXJ8fDI9PT1yKWkrPXQucmVhZFNWYXJpbnQoKSxhKz10LnJlYWRTVmFyaW50KCksaTxvJiYobz1pKSxpPnMmJihzPWkpLGE8bCYmKGw9YSksYT51JiYodT1hKTtlbHNlIGlmKDchPT1yKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjb21tYW5kICIrcil9cmV0dXJuW28sbCxzLHVdfSxuLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj0xODAtMzYwKihyLnkrYykvbDt0W2VdPVszNjAqKHIueCt1KS9sLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAobipNYXRoLlBJLzE4MCkpLTkwXX19dmFyIGEscyxsPXRoaXMuZXh0ZW50Kk1hdGgucG93KDIsciksdT10aGlzLmV4dGVudCp0LGM9dGhpcy5leHRlbnQqZSxoPXRoaXMubG9hZEdlb21ldHJ5KCksZj1uLnR5cGVzW3RoaXMudHlwZV07c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSAxOnZhciBkPVtdO2ZvcihhPTA7YTxoLmxlbmd0aDthKyspZFthXT1oW2FdWzBdO2g9ZCxpKGgpO2JyZWFrO2Nhc2UgMjpmb3IoYT0wO2E8aC5sZW5ndGg7YSsrKWkoaFthXSk7YnJlYWs7Y2FzZSAzOmZvcihoPW8oaCksYT0wO2E8aC5sZW5ndGg7YSsrKWZvcihzPTA7czxoW2FdLmxlbmd0aDtzKyspaShoW2FdW3NdKX0xPT09aC5sZW5ndGg/aD1oWzBdOmY9Ik11bHRpIitmO3ZhciBwPXt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZTpmLGNvb3JkaW5hdGVzOmh9LHByb3BlcnRpZXM6dGhpcy5wcm9wZXJ0aWVzfTtyZXR1cm4iaWQiaW4gdGhpcyYmKHAuaWQ9dGhpcy5pZCkscH19LHsicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDU1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy52ZXJzaW9uPTEsdGhpcy5uYW1lPW51bGwsdGhpcy5leHRlbnQ9NDA5Nix0aGlzLmxlbmd0aD0wLHRoaXMuX3BiZj10LHRoaXMuX2tleXM9W10sdGhpcy5fdmFsdWVzPVtdLHRoaXMuX2ZlYXR1cmVzPVtdLHQucmVhZEZpZWxkcyhpLHRoaXMsZSksdGhpcy5sZW5ndGg9dGhpcy5fZmVhdHVyZXMubGVuZ3RofWZ1bmN0aW9uIGkodCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGEocikpfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPW51bGwscj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49dC5yZWFkVmFyaW50KCk+PjM7ZT0xPT09bj90LnJlYWRTdHJpbmcoKToyPT09bj90LnJlYWRGbG9hdCgpOjM9PT1uP3QucmVhZERvdWJsZSgpOjQ9PT1uP3QucmVhZFZhcmludDY0KCk6NT09PW4/dC5yZWFkVmFyaW50KCk6Nj09PW4/dC5yZWFkU1ZhcmludCgpOjc9PT1uP3QucmVhZEJvb2xlYW4oKTpudWxsfXJldHVybiBlfXZhciBvPXQoIi4vdmVjdG9ydGlsZWZlYXR1cmUuanMiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe2lmKHQ8MHx8dD49dGhpcy5fZmVhdHVyZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZmVhdHVyZSBpbmRleCBvdXQgb2YgYm91bmRzIik7dGhpcy5fcGJmLnBvcz10aGlzLl9mZWF0dXJlc1t0XTt2YXIgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBvKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX19LHsiLi92ZWN0b3J0aWxlZmVhdHVyZS5qcyI6NTUwfV0sNTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHwoZT17fSksaSh0LGUuY2FudmFzfHxhLGUuY29udGV4dHx8byxlKX1lLmV4cG9ydHM9bjt2YXIgaT10KCIuL2xpYi92dGV4dCIpLGE9bnVsbCxvPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYS53aWR0aD04MTkyLGEuaGVpZ2h0PTEwMjQsbz1hLmdldENvbnRleHQoIjJkIikpfSx7Ii4vbGliL3Z0ZXh0Ijo1NTN9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPWUudGV4dEFsaWdufHwic3RhcnQiLGk9ZS50ZXh0QmFzZWxpbmV8fCJhbHBoYWJldGljIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgdT10W2xdLGM9MDtjPDI7KytjKWFbY109MHxNYXRoLm1pbihhW2NdLHVbY10pLG9bY109MHxNYXRoLm1heChvW2NdLHVbY10pO3ZhciBoPTA7c3dpdGNoKG4pe2Nhc2UiY2VudGVyIjpoPS0uNSooYVswXStvWzBdKTticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6aD0tb1swXTticmVhaztjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmg9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29nbml6ZWQgdGV4dEFsaWduOiAnIituKyInIil9dmFyIGY9MDtzd2l0Y2goaSl7Y2FzZSJoYW5naW5nIjpjYXNlInRvcCI6Zj0tYVsxXTticmVhaztjYXNlIm1pZGRsZSI6Zj0tLjUqKGFbMV0rb1sxXSk7YnJlYWs7Y2FzZSJhbHBoYWJldGljIjpjYXNlImlkZW9ncmFwaGljIjpmPS0zKnI7YnJlYWs7Y2FzZSJib3R0b20iOmY9LW9bMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJyIraSsiJyIpfXZhciBkPTEvcjtyZXR1cm4ibGluZUhlaWdodCJpbiBlP2QqPStlLmxpbmVIZWlnaHQ6IndpZHRoImluIGU/ZD1lLndpZHRoLyhvWzBdLWFbMF0pOiJoZWlnaHQiaW4gZSYmKGQ9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltkKih0WzBdK2gpLGQqKHRbMV0rZildfSl9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT0wfE1hdGguY2VpbChlLm1lYXN1cmVUZXh0KHIpLndpZHRoKzIqbik7aWYoaT44MTkyKXRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFN0cmluZyB0b28gbG9uZyAoc29ycnksIHRoaXMgd2lsbCBnZXQgZml4ZWQgbGF0ZXIpIik7dmFyIGE9MypuO3QuaGVpZ2h0PGEmJih0LmhlaWdodD1hKSxlLmZpbGxTdHlsZT0iIzAwMCIsZS5maWxsUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9IiNmZmYiLGUuZmlsbFRleHQocixuLDIqbik7dmFyIG89ZS5nZXRJbWFnZURhdGEoMCwwLGksYSk7cmV0dXJuIGMoby5kYXRhLFthLGksNF0pLnBpY2soLTEsLTEsMCkudHJhbnNwb3NlKDEsMCl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXUodCwxMjgpO3JldHVybiBlP2goci5jZWxscyxyLnBvc2l0aW9ucywuMjUpOntlZGdlczpyLmNlbGxzLHBvc2l0aW9uczpyLnBvc2l0aW9uc319ZnVuY3Rpb24gbyh0LGUscixpKXt2YXIgbz1hKHQsaSkscz1uKG8ucG9zaXRpb25zLGUsciksbD1vLmVkZ2VzLHU9ImNjdyI9PT1lLm9yaWVudGF0aW9uO2lmKGYocyxsKSxlLnBvbHlnb25zfHxlLnBvbHlnb258fGUucG9seWxpbmUpe2Zvcih2YXIgYz1wKGwscyksaD1uZXcgQXJyYXkoYy5sZW5ndGgpLG09MDttPGMubGVuZ3RoOysrbSl7Zm9yKHZhciB2PWNbbV0sZz1uZXcgQXJyYXkodi5sZW5ndGgpLHk9MDt5PHYubGVuZ3RoOysreSl7Zm9yKHZhciBiPXZbeV0seD1uZXcgQXJyYXkoYi5sZW5ndGgpLF89MDtfPGIubGVuZ3RoOysrXyl4W19dPXNbYltfXV0uc2xpY2UoKTt1JiZ4LnJldmVyc2UoKSxnW3ldPXh9aFttXT1nfXJldHVybiBofXJldHVybiBlLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6ZChzLGwse2RlbGF1bmF5OiExLGV4dGVyaW9yOiExLGludGVyaW9yOiEwfSkscG9zaXRpb25zOnN9OntlZGdlczpsLHBvc2l0aW9uczpzfX1mdW5jdGlvbiBzKHQsZSxyKXt0cnl7cmV0dXJuIG8odCxlLHIsITApfWNhdGNoKHQpe310cnl7cmV0dXJuIG8odCxlLHIsITEpfWNhdGNoKHQpe31yZXR1cm4gZS5wb2x5Z29uc3x8ZS5wb2x5bGluZXx8ZS5wb2x5Z29uP1tdOmUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpbXSxwb3NpdGlvbnM6W119OntlZGdlczpbXSxwb3NpdGlvbnM6W119fWZ1bmN0aW9uIGwodCxlLHIsbil7dmFyIGE9bi5zaXplfHw2NCxvPW4uZm9udHx8Im5vcm1hbCI7cmV0dXJuIHIuZm9udD1hKyJweCAiK28sci50ZXh0QWxpZ249InN0YXJ0IixyLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsci5kaXJlY3Rpb249Imx0ciIscyhpKGUscix0LGEpLG4sYSl9ZS5leHBvcnRzPWwsZS5leHBvcnRzLnByb2Nlc3NQaXhlbHM9czt2YXIgdT10KCJzdXJmYWNlLW5ldHMiKSxjPXQoIm5kYXJyYXkiKSxoPXQoInNpbXBsaWZ5LXBsYW5hci1ncmFwaCIpLGY9dCgiY2xlYW4tcHNsZyIpLGQ9dCgiY2R0MmQiKSxwPXQoInBsYW5hci1ncmFwaC10by1wb2x5bGluZSIpfSx7Y2R0MmQ6NzcsImNsZWFuLXBzbGciOjg3LG5kYXJyYXk6NDY1LCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmUiOjQ4MSwic2ltcGxpZnktcGxhbmFyLWdyYXBoIjo1MjEsInN1cmZhY2UtbmV0cyI6NTI5fV0sNTU0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS5wdXNoKGEodC5sYXllcnNbcl0pKTt2YXIgbj1uZXcgYztyZXR1cm4gaC50aWxlLndyaXRlKHtsYXllcnM6ZX0sbiksbi5maW5pc2goKX1mdW5jdGlvbiBpKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KWVbcl09bmV3IGYodFtyXS5mZWF0dXJlcyksZVtyXS5uYW1lPXI7cmV0dXJuIG4oe2xheWVyczplfSl9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9e25hbWU6dC5uYW1lfHwiIix2ZXJzaW9uOnQudmVyc2lvbnx8MSxleHRlbnQ6dC5leHRlbnR8fDQwOTYsa2V5czpbXSx2YWx1ZXM6W10sZmVhdHVyZXM6W119LHI9e30sbj17fSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXQuZmVhdHVyZShpKTthLmdlb21ldHJ5PWwoYS5sb2FkR2VvbWV0cnkoKSk7dmFyIG89W107Zm9yKHZhciBzIGluIGEucHJvcGVydGllcyl7dmFyIGM9cltzXTt2b2lkIDA9PT1jJiYoZS5rZXlzLnB1c2gocyksYz1lLmtleXMubGVuZ3RoLTEscltzXT1jKTt2YXIgaD11KGEucHJvcGVydGllc1tzXSksZj1uW2gua2V5XTt2b2lkIDA9PT1mJiYoZS52YWx1ZXMucHVzaChoKSxmPWUudmFsdWVzLmxlbmd0aC0xLG5baC5rZXldPWYpLG8ucHVzaChjKSxvLnB1c2goZil9YS50YWdzPW8sZS5mZWF0dXJlcy5wdXNoKGEpfXJldHVybiBlfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4oZTw8MykrKDcmdCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdDw8MV50Pj4zMX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj0wLGk9dC5sZW5ndGgsYT0wO2E8aTthKyspe3ZhciBsPXRbYV07ZS5wdXNoKG8oMSwxKSk7Zm9yKHZhciB1PTA7dTxsLmxlbmd0aDt1KyspezE9PT11JiZlLnB1c2gobygyLGwubGVuZ3RoLTEpKTt2YXIgYz1sW3VdLngtcixoPWxbdV0ueS1uO2UucHVzaChzKGMpLHMoaCkpLHIrPWMsbis9aH19cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXt2YXIgZSxyPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT09cj9lPXtzdHJpbmdfdmFsdWU6dH06ImJvb2xlYW4iPT09cj9lPXtib29sX3ZhbHVlOnR9OiJudW1iZXIiPT09cj9lPXQlMSE9MD97ZG91YmxlX3ZhbHVlOnR9OnQ8MD97c2ludF92YWx1ZTp0fTp7dWludF92YWx1ZTp0fToodD1KU09OLnN0cmluZ2lmeSh0KSxlPXtzdHJpbmdfdmFsdWU6dH0pLGUua2V5PXIrIjoiK3QsZX12YXIgYz10KCJwYmYiKSxoPXQoIi4vdmVjdG9yLXRpbGUtcGIiKSxmPXQoIi4vbGliL2dlb2pzb25fd3JhcHBlciIpO2UuZXhwb3J0cz1uLGUuZXhwb3J0cy5mcm9tVmVjdG9yVGlsZUpzPW4sZS5leHBvcnRzLmZyb21HZW9qc29uVnQ9aSxlLmV4cG9ydHMuR2VvSlNPTldyYXBwZXI9Zn0seyIuL2xpYi9nZW9qc29uX3dyYXBwZXIiOjU1NSwiLi92ZWN0b3ItdGlsZS1wYiI6NTU2LHBiZjo0NzZ9XSw1NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPSJudW1iZXIiPT10eXBlb2YgdC5pZD90LmlkOnZvaWQgMCx0aGlzLnR5cGU9dC50eXBlLHRoaXMucmF3R2VvbWV0cnk9MT09PXQudHlwZT9bdC5nZW9tZXRyeV06dC5nZW9tZXRyeSx0aGlzLnByb3BlcnRpZXM9dC50YWdzLHRoaXMuZXh0ZW50PTQwOTZ9dmFyIGE9dCgicG9pbnQtZ2VvbWV0cnkiKSxvPXQoInZlY3Rvci10aWxlIikuVmVjdG9yVGlsZUZlYXR1cmU7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodGhpcy5mZWF0dXJlc1t0XSl9LGkucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmF3R2VvbWV0cnk7dGhpcy5nZW9tZXRyeT1bXTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7Zm9yKHZhciByPXRbZV0sbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspbi5wdXNoKG5ldyBhKHJbaV1bMF0scltpXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChuKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0saS5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0saS5wcm90b3R5cGUudG9HZW9KU09OPW8ucHJvdG90eXBlLnRvR2VvSlNPTn0seyJwb2ludC1nZW9tZXRyeSI6NDgyLCJ2ZWN0b3ItdGlsZSI6NTQ4fV0sNTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdC5yZWFkRmllbGRzKGkse2xheWVyczpbXX0sZSl9ZnVuY3Rpb24gaSh0LGUscil7Mz09PXQmJmUubGF5ZXJzLnB1c2goZihyLHIucmVhZFZhcmludCgpK3IucG9zKSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByO2lmKHZvaWQgMCE9PXQubGF5ZXJzKWZvcihyPTA7cjx0LmxheWVycy5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDMscCx0LmxheWVyc1tyXSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LnJlYWRGaWVsZHMocyx7fSxlKX1mdW5jdGlvbiBzKHQsZSxyKXsxPT09dD9lLnN0cmluZ192YWx1ZT1yLnJlYWRTdHJpbmcoKToyPT09dD9lLmZsb2F0X3ZhbHVlPXIucmVhZEZsb2F0KCk6Mz09PXQ/ZS5kb3VibGVfdmFsdWU9ci5yZWFkRG91YmxlKCk6ND09PXQ/ZS5pbnRfdmFsdWU9ci5yZWFkVmFyaW50KCk6NT09PXQ/ZS51aW50X3ZhbHVlPXIucmVhZFZhcmludCgpOjY9PT10P2Uuc2ludF92YWx1ZT1yLnJlYWRTVmFyaW50KCk6Nz09PXQmJihlLmJvb2xfdmFsdWU9ci5yZWFkQm9vbGVhbigpKX1mdW5jdGlvbiBsKHQsZSl7dm9pZCAwIT09dC5zdHJpbmdfdmFsdWUmJmUud3JpdGVTdHJpbmdGaWVsZCgxLHQuc3RyaW5nX3ZhbHVlKSx2b2lkIDAhPT10LmZsb2F0X3ZhbHVlJiZlLndyaXRlRmxvYXRGaWVsZCgyLHQuZmxvYXRfdmFsdWUpLHZvaWQgMCE9PXQuZG91YmxlX3ZhbHVlJiZlLndyaXRlRG91YmxlRmllbGQoMyx0LmRvdWJsZV92YWx1ZSksdm9pZCAwIT09dC5pbnRfdmFsdWUmJmUud3JpdGVWYXJpbnRGaWVsZCg0LHQuaW50X3ZhbHVlKSx2b2lkIDAhPT10LnVpbnRfdmFsdWUmJmUud3JpdGVWYXJpbnRGaWVsZCg1LHQudWludF92YWx1ZSksdm9pZCAwIT09dC5zaW50X3ZhbHVlJiZlLndyaXRlU1ZhcmludEZpZWxkKDYsdC5zaW50X3ZhbHVlKSx2b2lkIDAhPT10LmJvb2xfdmFsdWUmJmUud3JpdGVCb29sZWFuRmllbGQoNyx0LmJvb2xfdmFsdWUpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj10LnJlYWRGaWVsZHMoYyx7fSxlKTtyZXR1cm4gdm9pZCAwPT09ci50eXBlJiYoci50eXBlPSJVbmtub3duIikscn1mdW5jdGlvbiBjKHQsZSxyKXsxPT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PT10P2UudGFncz1yLnJlYWRQYWNrZWRWYXJpbnQoKTozPT09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09PXQmJihlLmdlb21ldHJ5PXIucmVhZFBhY2tlZFZhcmludCgpKX1mdW5jdGlvbiBoKHQsZSl7dm9pZCAwIT09dC5pZCYmZS53cml0ZVZhcmludEZpZWxkKDEsdC5pZCksdm9pZCAwIT09dC50YWdzJiZlLndyaXRlUGFja2VkVmFyaW50KDIsdC50YWdzKSx2b2lkIDAhPT10LnR5cGUmJmUud3JpdGVWYXJpbnRGaWVsZCgzLHQudHlwZSksdm9pZCAwIT09dC5nZW9tZXRyeSYmZS53cml0ZVBhY2tlZFZhcmludCg0LHQuZ2VvbWV0cnkpfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC5yZWFkRmllbGRzKGQse2ZlYXR1cmVzOltdLGtleXM6W10sdmFsdWVzOltdfSxlKX1mdW5jdGlvbiBkKHQsZSxyKXsxNT09PXQ/ZS52ZXJzaW9uPXIucmVhZFZhcmludCgpOjE9PT10P2UubmFtZT1yLnJlYWRTdHJpbmcoKToyPT09dD9lLmZlYXR1cmVzLnB1c2godShyLHIucmVhZFZhcmludCgpK3IucG9zKSk6Mz09PXQ/ZS5rZXlzLnB1c2goci5yZWFkU3RyaW5nKCkpOjQ9PT10P2UudmFsdWVzLnB1c2gobyhyLHIucmVhZFZhcmludCgpK3IucG9zKSk6NT09PXQmJihlLmV4dGVudD1yLnJlYWRWYXJpbnQoKSl9ZnVuY3Rpb24gcCh0LGUpe3ZvaWQgMCE9PXQudmVyc2lvbiYmZS53cml0ZVZhcmludEZpZWxkKDE1LHQudmVyc2lvbiksdm9pZCAwIT09dC5uYW1lJiZlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWUpO3ZhciByO2lmKHZvaWQgMCE9PXQuZmVhdHVyZXMpZm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyllLndyaXRlTWVzc2FnZSgyLGgsdC5mZWF0dXJlc1tyXSk7aWYodm9pZCAwIT09dC5rZXlzKWZvcihyPTA7cjx0LmtleXMubGVuZ3RoO3IrKyllLndyaXRlU3RyaW5nRmllbGQoMyx0LmtleXNbcl0pO2lmKHZvaWQgMCE9PXQudmFsdWVzKWZvcihyPTA7cjx0LnZhbHVlcy5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDQsbCx0LnZhbHVlc1tyXSk7dm9pZCAwIT09dC5leHRlbnQmJmUud3JpdGVWYXJpbnRGaWVsZCg1LHQuZXh0ZW50KX12YXIgbT1yLnRpbGU9e3JlYWQ6bix3cml0ZTphfTttLkdlb21UeXBlPXtVbmtub3duOjAsUG9pbnQ6MSxMaW5lU3RyaW5nOjIsUG9seWdvbjozfSxtLnZhbHVlPXtyZWFkOm8sd3JpdGU6bH0sbS5mZWF0dXJlPXtyZWFkOnUsd3JpdGU6aH0sbS5sYXllcj17cmVhZDpmLHdyaXRlOnB9fSx7fV0sNTU3OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7ZS5wZXJtaXRIb3N0T2JqZWN0c19fXyYmZS5wZXJtaXRIb3N0T2JqZWN0c19fXyh0KX1mdW5jdGlvbiByKHQpe3JldHVybiEodC5zdWJzdHIoMCxkLmxlbmd0aCk9PWQmJiJfX18iPT09dC5zdWJzdHIodC5sZW5ndGgtMykpfWZ1bmN0aW9uIG4odCl7aWYodCE9PU9iamVjdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOb3QgYW4gb2JqZWN0OiAiK3QpO3ZhciBlPXRbcF07aWYoZSYmZS5rZXk9PT10KXJldHVybiBlO2lmKGYodCkpe2U9e2tleTp0fTt0cnl7cmV0dXJuIGgodCxwLHt2YWx1ZTplLHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExfSksZX1jYXRjaCh0KXtyZXR1cm59fX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnByb3RvdHlwZT1udWxsLE9iamVjdC5mcmVlemUodCl9ZnVuY3Rpb24gYSgpe3l8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZXx8KHk9ITAsY29uc29sZS53YXJuKCJXZWFrTWFwIHNob3VsZCBiZSBpbnZva2VkIGFzIG5ldyBXZWFrTWFwKCksIG5vdCBXZWFrTWFwKCkuIFRoaXMgd2lsbCBiZSBhbiBlcnJvciBpbiB0aGUgZnV0dXJlLiIpKX1pZigidW5kZWZpbmVkIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpeyJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzJiYoc2VzLndlYWtNYXBQZXJtaXRIb3N0T2JqZWN0cz10KTt2YXIgbz0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCl7dmFyIHM9V2Vha01hcDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIGw9bmV3IHMsdT1PYmplY3QuZnJlZXplKHt9KTtpZihsLnNldCh1LDEpLDE9PT1sLmdldCh1KSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7bz0hMH19dmFyIGM9KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpLGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGY9T2JqZWN0LmlzRXh0ZW5zaWJsZSxkPSJ3ZWFrbWFwOiIscD1kKyJpZGVudDoiK01hdGgucmFuZG9tKCkrIl9fXyI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5KXt2YXIgbT1uZXcgQXJyYXlCdWZmZXIoMjUpLHY9bmV3IFVpbnQ4QXJyYXkobSk7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh2KSxwPWQrInJhbmQ6IitBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodixmdW5jdGlvbih0KXtyZXR1cm4odCUzNikudG9TdHJpbmcoMzYpfSkuam9pbigiIikrIl9fXyJ9aWYoaChPYmplY3QsImdldE93blByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0KS5maWx0ZXIocil9fSksImdldFByb3BlcnR5TmFtZXMiaW4gT2JqZWN0KXt2YXIgZz1PYmplY3QuZ2V0UHJvcGVydHlOYW1lcztoKE9iamVjdCwiZ2V0UHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHQpLmZpbHRlcihyKX19KX0hZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QuZnJlZXplO2goT2JqZWN0LCJmcmVlemUiLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbihlKSx0KGUpfX0pO3ZhciBlPU9iamVjdC5zZWFsO2goT2JqZWN0LCJzZWFsIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCksZSh0KX19KTt2YXIgcj1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7aChPYmplY3QsInByZXZlbnRFeHRlbnNpb25zIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkscih0KX19KX0oKTt2YXIgeT0hMSxiPTAseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgcixpPW4odCk7cmV0dXJuIGk/dSBpbiBpP2lbdV06ZToocj1zLmluZGV4T2YodCkscj49MD9sW3JdOmUpfWZ1bmN0aW9uIGUodCl7dmFyIGU9bih0KTtyZXR1cm4gZT91IGluIGU6cy5pbmRleE9mKHQpPj0wfWZ1bmN0aW9uIHIodCxlKXt2YXIgcixpPW4odCk7cmV0dXJuIGk/aVt1XT1lOihyPXMuaW5kZXhPZih0KSxyPj0wP2xbcl09ZToocj1zLmxlbmd0aCxsW3JdPWUsc1tyXT10KSksdGhpc31mdW5jdGlvbiBvKHQpe3ZhciBlLHIsaT1uKHQpO3JldHVybiBpP3UgaW4gaSYmZGVsZXRlIGlbdV06ISgoZT1zLmluZGV4T2YodCkpPDApJiYocj1zLmxlbmd0aC0xLHNbZV09dm9pZCAwLGxbZV09bFtyXSxzW2VdPXNbcl0scy5sZW5ndGg9cixsLmxlbmd0aD1yLCEwKX10aGlzIGluc3RhbmNlb2YgeHx8YSgpO3ZhciBzPVtdLGw9W10sdT1iKys7cmV0dXJuIE9iamVjdC5jcmVhdGUoeC5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6aSh0KX0saGFzX19fOnt2YWx1ZTppKGUpfSxzZXRfX186e3ZhbHVlOmkocil9LGRlbGV0ZV9fXzp7dmFsdWU6aShvKX19KX07eC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksImZ1bmN0aW9uIj09dHlwZW9mIHM/ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBjP3UuaGFzKHQpP3UuZ2V0KHQpOmMuZ2V0X19fKHQsZSk6dS5nZXQodCxlKX1mdW5jdGlvbiByKHQpe3JldHVybiB1Lmhhcyh0KXx8ISFjJiZjLmhhc19fXyh0KX1mdW5jdGlvbiBuKHQpe3ZhciBlPSEhdS5kZWxldGUodCk7cmV0dXJuIGM/Yy5kZWxldGVfX18odCl8fGU6ZX10aGlzIGluc3RhbmNlb2YgeHx8YSgpO3ZhciBsLHU9bmV3IHMsYz12b2lkIDAsaD0hMTtyZXR1cm4gbD1vP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHUuc2V0KHQsZSksdS5oYXModCl8fChjfHwoYz1uZXcgeCksYy5zZXQodCxlKSksdGhpc306ZnVuY3Rpb24odCxlKXtpZihoKXRyeXt1LnNldCh0LGUpfWNhdGNoKHIpe2N8fChjPW5ldyB4KSxjLnNldF9fXyh0LGUpfWVsc2UgdS5zZXQodCxlKTtyZXR1cm4gdGhpc30sT2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTppKGUpfSxoYXNfX186e3ZhbHVlOmkocil9LHNldF9fXzp7dmFsdWU6aShsKX0sZGVsZXRlX19fOnt2YWx1ZTppKG4pfSxwZXJtaXRIb3N0T2JqZWN0c19fXzp7dmFsdWU6aShmdW5jdGlvbihlKXtpZihlIT09dCl0aHJvdyBuZXcgRXJyb3IoImJvZ3VzIGNhbGwgdG8gcGVybWl0SG9zdE9iamVjdHNfX18iKTtoPSEwfSl9fSl9byYmInVuZGVmaW5lZCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksci5wcm90b3R5cGU9eC5wcm90b3R5cGUsZS5leHBvcnRzPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYWtNYXAucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOldlYWtNYXAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX0oKTooInVuZGVmaW5lZCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksZS5leHBvcnRzPXgpfX0oKX0se31dLDU1ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOmkoZSx0KX19dmFyIGk9dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9bn0seyIuL2hpZGRlbi1zdG9yZS5qcyI6NTU5fV0sNTU5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXtpZGVudGl0eTplfSxuPXQudmFsdWVPZjtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZhbHVlT2YiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cn0sd3JpdGFibGU6ITB9KSxyfWUuZXhwb3J0cz1ufSx7fV0sNTYwOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3ZhciB0PWkoKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0KGUpLnZhbHVlfX19dmFyIGk9dCgiLi9jcmVhdGUtc3RvcmUuanMiKTtlLmV4cG9ydHM9bn0seyIuL2NyZWF0ZS1zdG9yZS5qcyI6NTU4fV0sNTYxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2V0LWNhbnZhcy1jb250ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJ3ZWJnbCIsdCl9fSx7ImdldC1jYW52YXMtY29udGV4dCI6MTQ1fV0sNTYyOltmdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzWzNdLGk9YXJndW1lbnRzWzRdLGE9YXJndW1lbnRzWzVdLG89SlNPTi5zdHJpbmdpZnk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt2W3RdPSEwO2Zvcih2YXIgZSBpbiBpW3RdWzFdKXt2YXIgbj1pW3RdWzFdW2VdO3Zbbl18fHIobil9fQpmb3IodmFyIHMsbD1PYmplY3Qua2V5cyhhKSx1PTAsYz1sLmxlbmd0aDt1PGM7dSsrKXt2YXIgaD1sW3VdLGY9YVtoXS5leHBvcnRzO2lmKGY9PT10fHxmJiZmLmRlZmF1bHQ9PT10KXtzPWg7YnJlYWt9fWlmKCFzKXtzPU1hdGguZmxvb3IoTWF0aC5wb3coMTYsOCkqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO2Zvcih2YXIgZD17fSx1PTAsYz1sLmxlbmd0aDt1PGM7dSsrKXt2YXIgaD1sW3VdO2RbaF09aH1pW3NdPVtGdW5jdGlvbihbInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIigiK3QrIikoc2VsZikiKSxkXX12YXIgcD1NYXRoLmZsb29yKE1hdGgucG93KDE2LDgpKk1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDE2KSxtPXt9O21bc109cyxpW3BdPVtGdW5jdGlvbihbInJlcXVpcmUiXSwidmFyIGYgPSByZXF1aXJlKCIrIG8ocykgKyIpOyhmLmRlZmF1bHQgPyBmLmRlZmF1bHQgOiBmKShzZWxmKTsiKSxtXTt2YXIgdj17fTtyKHApO3ZhciBnPSIoIituKyIpKHsiK09iamVjdC5rZXlzKHYpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSsiOlsiK2lbdF1bMF0rIiwiK28oaVt0XVsxXSkrIl0ifSkuam9pbigiLCIpKyJ9LHt9LFsiK28ocCkrIl0pIix5PXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkx8fHdpbmRvdy5tb3pVUkx8fHdpbmRvdy5tc1VSTCxiPW5ldyBCbG9iKFtnXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pO2lmKGUmJmUuYmFyZSlyZXR1cm4gYjt2YXIgeD15LmNyZWF0ZU9iamVjdFVSTChiKSxfPW5ldyBXb3JrZXIoeCk7cmV0dXJuIF8ub2JqZWN0VVJMPXgsX319LHt9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHMuUkFESVVTPTYzNzgxMzcsZS5leHBvcnRzLkZMQVRURU5JTkc9MS8yOTguMjU3MjIzNTYzLGUuZXhwb3J0cy5QT0xBUl9SQURJVVM9NjM1Njc1Mi4zMTQyfSx7fV0sNTY0OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2kobik6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoWyJleHBvcnRzIl0saSk6aShlLldob29UUz1lLldob29UU3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLG4saSxhLG8pe3JldHVybiBvPW98fHt9LHQrIj8iK1siYmJveD0iK3IobixpLGEpLCJmb3JtYXQ9Iisoby5mb3JtYXR8fCJpbWFnZS9wbmciKSwic2VydmljZT0iKyhvLnNlcnZpY2V8fCJXTVMiKSwidmVyc2lvbj0iKyhvLnZlcnNpb258fCIxLjEuMSIpLCJyZXF1ZXN0PSIrKG8ucmVxdWVzdHx8IkdldE1hcCIpLCJzcnM9Iisoby5zcnN8fCJFUFNHOjM4NTciKSwid2lkdGg9Iisoby53aWR0aHx8MjU2KSwiaGVpZ2h0PSIrKG8uaGVpZ2h0fHwyNTYpLCJsYXllcnM9IitlXS5qb2luKCImIil9ZnVuY3Rpb24gcih0LGUscil7ZT1NYXRoLnBvdygyLHIpLWUtMTt2YXIgaT1uKDI1Nip0LDI1NiplLHIpLGE9bigyNTYqKHQrMSksMjU2KihlKzEpLHIpO3JldHVybiBpWzBdKyIsIitpWzFdKyIsIithWzBdKyIsIithWzFdfWZ1bmN0aW9uIG4odCxlLHIpe3ZhciBuPTIqTWF0aC5QSSo2Mzc4MTM3LzI1Ni9NYXRoLnBvdygyLHIpO3JldHVyblt0Km4tMipNYXRoLlBJKjYzNzgxMzcvMixlKm4tMipNYXRoLlBJKjYzNzgxMzcvMl19dC5nZXRVUkw9ZSx0LmdldFRpbGVCQm94PXIsdC5nZXRNZXJjQ29vcmRzPW4sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSw1NjU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaSxhO2lmKCJvYmplY3QiPT10eXBlb2YgdClpPXQsYT1lfHx7fTtlbHNle2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiU29sYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzEpKXRocm93IG5ldyBFcnJvcigiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxIik7aT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGE9bnx8e319dmFyIG89cFtpLnllYXItcFswXV0scz1pLnllYXI8PDl8aS5tb250aDw8NXxpLmRheTthLnllYXI9cz49bz9pLnllYXI6aS55ZWFyLTEsbz1wW2EueWVhci1wWzBdXTt2YXIgbCx1PW8+PjkmNDA5NSxjPW8+PjUmMTUsaD0zMSZvLGY9bmV3IERhdGUodSxjLTEsaCksbT1uZXcgRGF0ZShpLnllYXIsaS5tb250aC0xLGkuZGF5KTtsPU1hdGgucm91bmQoKG0tZikvODY0ZTUpO3ZhciB2LGc9ZFthLnllYXItZFswXV07Zm9yKHY9MDt2PDEzO3YrKyl7dmFyIHk9ZyYxPDwxMi12PzMwOjI5O2lmKGw8eSlicmVhaztsLT15fXZhciBiPWc+PjEzO3JldHVybiFifHx2PGI/KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPTErdik6dj09PWI/KGEuaXNJbnRlcmNhbGFyeT0hMCxhLm1vbnRoPXYpOihhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD12KSxhLmRheT0xK2wsYX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7dmFyIGEsbztpZigib2JqZWN0Ij09dHlwZW9mIHQpbz10LGE9ZXx8e307ZWxzZXtpZighKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMSkpdGhyb3cgbmV3IEVycm9yKCJMdW5hciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7aWYoISgibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7aWYoISgibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMwKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMCIpO3ZhciBzOyJvYmplY3QiPT10eXBlb2Ygbj8ocz0hMSxhPW4pOihzPSEhbixhPWl8fHt9KSxvPXt5ZWFyOnQsbW9udGg6ZSxkYXk6cixpc0ludGVyY2FsYXJ5OnN9fXZhciBsO2w9by5kYXktMTt2YXIgdSxjPWRbby55ZWFyLWRbMF1dLGg9Yz4+MTM7dT1oP28ubW9udGg+aD9vLm1vbnRoOm8uaXNJbnRlcmNhbGFyeT9vLm1vbnRoOm8ubW9udGgtMTpvLm1vbnRoLTE7Zm9yKHZhciBmPTA7Zjx1O2YrKyl7bCs9YyYxPDwxMi1mPzMwOjI5fXZhciBtPXBbby55ZWFyLXBbMF1dLHY9bT4+OSY0MDk1LGc9bT4+NSYxNSx5PTMxJm0sYj1uZXcgRGF0ZSh2LGctMSx5K2wpO3JldHVybiBhLnllYXI9Yi5nZXRGdWxsWWVhcigpLGEubW9udGg9MStiLmdldE1vbnRoKCksYS5kYXk9Yi5nZXREYXRlKCksYX12YXIgbz10KCIuLi9tYWluIikscz10KCJvYmplY3QtYXNzaWduIiksbD1vLmluc3RhbmNlKCk7bi5wcm90b3R5cGU9bmV3IG8uYmFzZUNhbGVuZGFyLHMobi5wcm90b3R5cGUse25hbWU6IkNoaW5lc2UiLGpkRXBvY2g6MTcyMTQyNS41LGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNoaW5lc2UiLGVwb2NoczpbIkJFQyIsIkVDIl0sbW9udGhOdW1iZXJzOmZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10Lm1hdGNoKGMpO3JldHVybiByP3JbMF06IiJ9dmFyIG49dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGk9dC5tb250aCgpLGE9IiIrdGhpcy50b0NoaW5lc2VNb250aChuLGkpO3JldHVybiBlJiZhLmxlbmd0aDwyJiYoYT0iMCIrYSksdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSYmKGErPSJpIiksYX0sbW9udGhOYW1lczpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2goaCk7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT10aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiksYT1bIlx1NGUwMFx1NjcwOCIsIlx1NGU4Y1x1NjcwOCIsIlx1NGUwOVx1NjcwOCIsIlx1NTZkYlx1NjcwOCIsIlx1NGU5NFx1NjcwOCIsIlx1NTE2ZFx1NjcwOCIsIlx1NGUwM1x1NjcwOCIsIlx1NTE2Ylx1NjcwOCIsIlx1NGU1ZFx1NjcwOCIsIlx1NTM0MVx1NjcwOCIsIlx1NTM0MVx1NGUwMFx1NjcwOCIsIlx1NTM0MVx1NGU4Y1x1NjcwOCJdW2ktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihhPSJcdTk1ZjAiK2EpLGF9LG1vbnRoTmFtZXNTaG9ydDpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2goZik7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT10aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiksYT1bIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdW2ktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihhPSJcdTk1ZjAiK2EpLGF9LHBhcnNlTW9udGg6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcixuPXBhcnNlSW50KGUpO2lmKGlzTmFOKG4pKSJcdTk1ZjAiPT09ZVswXSYmKHI9ITAsZT1lLnN1YnN0cmluZygxKSksIlx1NjcwOCI9PT1lW2UubGVuZ3RoLTFdJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKSxuPTErWyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXS5pbmRleE9mKGUpO2Vsc2V7dmFyIGk9ZVtlLmxlbmd0aC0xXTtyPSJpIj09PWl8fCJJIj09PWl9cmV0dXJuIHRoaXMudG9Nb250aEluZGV4KHQsbixyKX0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6MSxpc1JUTDohMX19LF92YWxpZGF0ZVllYXI6ZnVuY3Rpb24odCxlKXtpZih0LnllYXImJih0PXQueWVhcigpKSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MTg4OHx8dD4yMTExKXRocm93IGUucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHR9LHRvTW9udGhJbmRleDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKHImJmUhPT1ufHxlPDF8fGU+MTIpdGhyb3cgby5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIG4/IXImJmU8PW4/ZS0xOmU6ZS0xfSx0b0NoaW5lc2VNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKHQ9dC55ZWFyKCksZT10Lm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KSxuPXI/MTI6MTE7aWYoZTwwfHxlPm4pdGhyb3cgby5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksZFt0LWRbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYodD10LnllYXIoKSxlPXQubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG8ubG9jYWwuaW52YWxpZHllYXIpLGE9cFtpLXBbMF1dLHM9YT4+OSY0MDk1LHU9YT4+NSYxNSxjPTMxJmE7bj1sLm5ld0RhdGUocyx1LGMpLG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIik7dmFyIGg9dGhpcy50b0pEKHQsZSxyKS1uLnRvSkQoKTtyZXR1cm4gMStNYXRoLmZsb29yKGgvNyl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8xMzoxMn0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcj1kW3QtZFswXV07aWYoZT4ocj4+MTM/MTI6MTEpKXRocm93IG8ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG8ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKG4ueWVhcigpKSxlPW4ubW9udGgoKSxyPW4uZGF5KCk7dmFyIGk9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSx1PWEodCxzLHIsaSk7cmV0dXJuIGwudG9KRCh1LnllYXIsdS5tb250aCx1LmRheSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1sLmZyb21KRCh0KSxyPWkoZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHUpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGk9ISFlWzNdLGE9dGhpcy50b01vbnRoSW5kZXgocixuLGkpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGEsbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIGk9dC55ZWFyKCksYT10Lm1vbnRoKCksbz10aGlzLmlzSW50ZXJjYWxhcnlNb250aChpLGEpLHM9dGhpcy50b0NoaW5lc2VNb250aChpLGEpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZigieSI9PT1yKXt2YXIgdT1sLnllYXIoKSxjPWwubW9udGgoKSxoPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHUscyksZj1vJiZoP3RoaXMudG9Nb250aEluZGV4KHUscywhMCk6dGhpcy50b01vbnRoSW5kZXgodSxzLCExKTtmIT09YyYmbC5tb250aChmKX1yZXR1cm4gbH19KTt2YXIgdT0vXlxzKigtP1xkXGRcZFxkfFxkXGQpWy1cL10oXGQ/XGQpKFtpSV0/KVstXC9dKFxkP1xkKS9tLGM9L15cZD9cZFtpSV0/L20saD0vXlx1OTVmMD9cdTUzNDE/W1x1NGUwMFx1NGU4Y1x1NGUwOVx1NTZkYlx1NGU5NFx1NTE2ZFx1NGUwM1x1NTE2Ylx1NGU1ZF0/XHU2NzA4L20sZj0vXlx1OTVmMD9cdTUzNDE/W1x1NGUwMFx1NGU4Y1x1NGUwOVx1NTZkYlx1NGU5NFx1NTE2ZFx1NGUwM1x1NTE2Ylx1NGU1ZF0/L207by5jYWxlbmRhcnMuY2hpbmVzZT1uO3ZhciBkPVsxODg3LDU3ODAsNTgwMiwxOTE1NywyNzQyLDUwMzU5LDExOTgsMjY0Niw0NjM3OCw3NDY2LDM0MTIsMzAxMjIsNTQ4Miw2Nzk0OSwyMzk2LDUyOTQsNDM1OTcsNjczMiw2OTU0LDM2MTgxLDI3NzIsNDk1NCwxODc4MSwyMzk2LDU0NDI3LDUyNzQsNjczMCw0Nzc4MSw1ODAwLDY4NjgsMjEyMTAsNDc5MCw1OTcwMywyMzUwLDUyNzAsNDY2NjcsMzQwMiwzNDk2LDM4MzI1LDEzODgsNDc4MiwxODczNSwyMzUwLDUyMzc0LDY4MDQsNzQ5OCw0NDQ1NywyOTA2LDEzODgsMjkyOTQsNDcwMCw2Mzc4OSw2NDQyLDY4MDQsNTYxMzgsNTgwMiwyNzcyLDM4MjM1LDEyMTAsNDY5OCwyMjgyNyw1NDE4LDYzMTI1LDM0NzYsNTgwMiw0MzcwMSwyNDg0LDUzMDIsMjcyMjMsMjY0Niw3MDk1NCw3NDY2LDM0MTIsNTQ2OTgsNTQ4MiwyNDEyLDM4MDYyLDUyOTQsMjYzNiwzMjAzOCw2OTU0LDYwMjQ1LDI3NzIsNDgyNiw0MzM1NywyMzk0LDUyNzQsMzk1MDEsNjczMCw3MjM1Nyw1ODAwLDU4NDQsNTM5NzgsNDc5MCwyMzU4LDM4MDM5LDUyNzAsODc2MjcsMzQwMiwzNDk2LDU0NzA4LDU0ODQsNDc4Miw0MzMxMSwyMzUwLDMyMjIsMjc5NzgsNzQ5OCw2ODk2NSwyOTA0LDU0ODQsNDU2NzcsNDcwMCw2NDQ0LDM5NTczLDY4MDQsNjk4NiwxOTI4NSwyNzcyLDYyODExLDEyMTAsNDY5OCw0NzQwMyw1NDE4LDU3ODAsMzg1NzAsNTU0Niw3NjQ2OSwyNDIwLDUzMDIsNTE3OTksMjY0Niw1NDE0LDM2NTAxLDM0MTIsNTU0NiwxODg2OSwyNDEyLDU0NDQ2LDUyNzYsNjczMiw0ODQyMiw2ODIyLDI5MDAsMjgwMTAsNDgyNiw5MjUwOSwyMzk0LDUyNzQsNTU4ODMsNjczMCw2ODIwLDQ3OTU2LDU4MTIsMjc3OCwxODc3OSwyMzU4LDYyNjE1LDUyNzAsNTQ1MCw0Njc1NywzNDkyLDU1NTYsMjczMTgsNDcxOCw2Nzg4NywyMzUwLDMyMjIsNTI1NTQsNzQ5OCwzNDI4LDM4MjUyLDU0NjgsNDcwMCwzMTAyMiw2NDQ0LDY0MTQ5LDY4MDQsNjk4Niw0Mzg2MSwyNzcyLDUzMzgsMzU0MjEsMjY1MCw3MDk1NSw1NDE4LDU3ODAsNTQ5NTQsNTU0NiwyNzQwLDM4MDc0LDUzMDIsMjY0NiwyOTk5MSwzMzY2LDYxMDExLDM0MTIsNTU0Niw0MzQ0NSwyNDEyLDUyOTQsMzU0MDYsNjczMiw3Mjk5OCw2ODIwLDY5OTYsNTI1ODYsMjc3OCwyMzk2LDM4MDQ1LDUyNzQsNjY5OCwyMzMzMyw2ODIwLDY0MzM4LDU4MTIsMjc0Niw0MzM1NSwyMzU4LDUyNzAsMzk0OTksNTQ1MCw3OTUyNSwzNDkyLDU1NDhdLHA9WzE4ODcsOTY2NzMyLDk2NzIzMSw5Njc3MzMsOTY4MjY1LDk2ODc2Niw5NjkyOTcsOTY5Nzk4LDk3MDI5OCw5NzA4MjksOTcxMzMwLDk3MTgzMCw5NzIzNjIsOTcyODYzLDk3MzM5NSw5NzM4OTYsOTc0Mzk3LDk3NDkyOCw5NzU0MjgsOTc1OTI5LDk3NjQ2MSw5NzY5NjIsOTc3NDYyLDk3Nzk5NCw5Nzg0OTQsOTc5MDI2LDk3OTUyNiw5ODAwMjYsOTgwNTU4LDk4MTA1OSw5ODE1NTksOTgyMDkxLDk4MjU5Myw5ODMxMjQsOTgzNjI0LDk4NDEyNCw5ODQ2NTYsOTg1MTU3LDk4NTY1Niw5ODYxODksOTg2NjkwLDk4NzE5MSw5ODc3MjIsOTg4MjIyLDk4ODc1Myw5ODkyNTQsOTg5NzU0LDk5MDI4Niw5OTA3ODgsOTkxMjg4LDk5MTgxOSw5OTIzMTksOTkyODUxLDk5MzM1Miw5OTM4NTEsOTk0MzgzLDk5NDg4NSw5OTUzODUsOTk1OTE3LDk5NjQxOCw5OTY5MTgsOTk3NDUwLDk5Nzk0OSw5OTg0ODEsOTk4OTgyLDk5OTQ4MywxMDAwMDE0LDEwMDA1MTUsMTAwMTAxNiwxMDAxNTQ4LDEwMDIwNDcsMTAwMjU3OCwxMDAzMDgwLDEwMDM1ODAsMTAwNDExMSwxMDA0NjEzLDEwMDUxMTMsMTAwNTY0NSwxMDA2MTQ2LDEwMDY2NDUsMTAwNzE3NywxMDA3Njc4LDEwMDgyMDksMTAwODcxMCwxMDA5MjExLDEwMDk3NDMsMTAxMDI0MywxMDEwNzQzLDEwMTEyNzUsMTAxMTc3NSwxMDEyMzA2LDEwMTI4MDcsMTAxMzMwOCwxMDEzODQwLDEwMTQzNDEsMTAxNDg0MSwxMDE1MzczLDEwMTU4NzQsMTAxNjQwNCwxMDE2OTA1LDEwMTc0MDUsMTAxNzkzNywxMDE4NDM4LDEwMTg5MzksMTAxOTQ3MSwxMDE5OTcyLDEwMjA0NzEsMTAyMTAwMiwxMDIxNTAzLDEwMjIwMzUsMTAyMjUzNSwxMDIzMDM2LDEwMjM1NjgsMTAyNDA2OSwxMDI0NTY4LDEwMjUxMDAsMTAyNTYwMSwxMDI2MTAyLDEwMjY2MzMsMTAyNzEzMywxMDI3NjY2LDEwMjgxNjcsMTAyODY2NiwxMDI5MTk4LDEwMjk2OTksMTAzMDE5OSwxMDMwNzMwLDEwMzEyMzEsMTAzMTc2MywxMDMyMjY0LDEwMzI3NjQsMTAzMzI5NiwxMDMzNzk3LDEwMzQyOTcsMTAzNDgyOCwxMDM1MzI5LDEwMzU4MzAsMTAzNjM2MiwxMDM2ODYxLDEwMzczOTMsMTAzNzg5NCwxMDM4Mzk0LDEwMzg5MjUsMTAzOTQyNywxMDM5OTI3LDEwNDA0NTksMTA0MDk1OSwxMDQxNDkxLDEwNDE5OTIsMTA0MjQ5MiwxMDQzMDIzLDEwNDM1MjQsMTA0NDAyNCwxMDQ0NTU2LDEwNDUwNTcsMTA0NTU1OCwxMDQ2MDkwLDEwNDY1OTAsMTA0NzEyMSwxMDQ3NjIyLDEwNDgxMjIsMTA0ODY1NCwxMDQ5MTU0LDEwNDk2NTUsMTA1MDE4NywxMDUwNjg5LDEwNTEyMTksMTA1MTcyMCwxMDUyMjIwLDEwNTI3NTEsMTA1MzI1MiwxMDUzNzUyLDEwNTQyODQsMTA1NDc4NiwxMDU1Mjg1LDEwNTU4MTcsMTA1NjMxNywxMDU2ODQ5LDEwNTczNDksMTA1Nzg1MCwxMDU4MzgyLDEwNTg4ODMsMTA1OTM4MywxMDU5OTE1LDEwNjA0MTUsMTA2MDk0NywxMDYxNDQ3LDEwNjE5NDcsMTA2MjQ3OSwxMDYyOTgxLDEwNjM0ODAsMTA2NDAxMiwxMDY0NTE0LDEwNjUwMTQsMTA2NTU0NSwxMDY2MDQ1LDEwNjY1NzcsMTA2NzA3OCwxMDY3NTc4LDEwNjgxMTAsMTA2ODYxMSwxMDY5MTEyLDEwNjk2NDIsMTA3MDE0MiwxMDcwNjc0LDEwNzExNzUsMTA3MTY3NSwxMDcyMjA3LDEwNzI3MDksMTA3MzIwOSwxMDczNzQwLDEwNzQyNDEsMTA3NDc0MSwxMDc1MjczLDEwNzU3NzMsMTA3NjMwNSwxMDc2ODA3LDEwNzczMDgsMTA3NzgzOSwxMDc4MzQwLDEwNzg4NDAsMTA3OTM3MiwxMDc5ODcxLDEwODA0MDMsMTA4MDkwNF19LHsiLi4vbWFpbiI6NTc5LCJvYmplY3QtYXNzaWduIjo0Njh9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJDb3B0aWMiLGpkRXBvY2g6MTgyNTAyOS41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ29wdGljIixlcG9jaHM6WyJCQU0iLCJBTSJdLG1vbnRoTmFtZXM6WyJUaG91dCIsIlBhb3BpIiwiSGF0aG9yIiwiS29pYWsiLCJUb2JpIiwiTWVzaGlyIiwiUGFyZW1oYXQiLCJQYXJlbW91ZGUiLCJQYXNob25zIiwiUGFvbmkiLCJFcGlwIiwiTWVzb3JpIiwiUGkgS29naSBFbmF2b3QiXSxtb250aE5hbWVzU2hvcnQ6WyJUaG8iLCJQYW8iLCJIYXRoIiwiS29pIiwiVG9iIiwiTWVzaCIsIlBhdCIsIlBhZCIsIlBhc2giLCJQYW8iLCJFcGkiLCJNZXNvIiwiUGlLIl0sZGF5TmFtZXM6WyJUa3lyaWFrYSIsIlBlc25hdSIsIlBzaG9tZW50IiwiUGVmdG9vdSIsIlB0aW91IiwiUHNvb3UiLCJQc2FiYmF0b24iXSxkYXlOYW1lc1Nob3J0OlsiVGt5IiwiUGVzIiwiUHNoIiwiUGVmIiwiUHRpIiwiUHNvIiwiUHNhIl0sZGF5TmFtZXNNaW46WyJUayIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0IiwiUHNvIiwiUHNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCk7cmV0dXJuIHQlND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkWWVhcnx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCksdDwwJiZ0Kyssbi5kYXkoKSszMCoobi5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksaS5jYWxlbmRhcnMuY29wdGljPW59LHsiLi4vbWFpbiI6NTc5LCJvYmplY3QtYXNzaWduIjo0Njh9XSw1Njc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJEaXNjd29ybGQiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMTYsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkRpc2N3b3JsZCIsZXBvY2hzOlsiQlVDIiwiVUMiXSxtb250aE5hbWVzOlsiSWNrIiwiT2ZmbGUiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiR3J1bmUiLCJBdWd1c3QiLCJTcHVuZSIsIlNla3RvYmVyIiwiRW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkljayIsIk9mZiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkdydSIsIkF1ZyIsIlNwdSIsIlNlayIsIkVtYiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiT2N0ZWRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk9jdCIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJPYyIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjIsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLCExfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSwxM30sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLDQwMH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzgpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDh9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpLmRheSgpKzEpJTh9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZGF5T2ZXZWVrKHQsZSxyKTtyZXR1cm4gbj49MiYmbjw9Nn0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57Y2VudHVyeTpvW01hdGguZmxvb3IoKG4ueWVhcigpLTEpLzEwMCkrMV18fCIifX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCkrKG4ueWVhcigpPDA/MTowKSxlPW4ubW9udGgoKSwocj1uLmRheSgpKSsoZT4xPzE2OjApKyhlPjI/MzIqKGUtMik6MCkrNDAwKih0LTEpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpLU1hdGguZmxvb3IodGhpcy5qZEVwb2NoKS0xO3ZhciBlPU1hdGguZmxvb3IodC80MDApKzE7dC09NDAwKihlLTEpLHQrPXQ+MTU/MTY6MDt2YXIgcj1NYXRoLmZsb29yKHQvMzIpKzEsbj10LTMyKihyLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlPD0wP2UtMTplLHIsbil9fSk7dmFyIG89ezIwOiJGcnVpdGJhdCIsMjE6IkFuY2hvdnkifTtpLmNhbGVuZGFycy5kaXNjd29ybGQ9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU2ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6IkV0aGlvcGlhbiIsamRFcG9jaDoxNzI0MjIwLjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJFdGhpb3BpYW4iLGVwb2NoczpbIkJFRSIsIkVFIl0sbW9udGhOYW1lczpbIk1lc2tlcmVtIiwiVGlrZW1ldCIsIkhpZGFyIiwiVGFoZXNhcyIsIlRpciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNlIiwiUGFndW1lIl0sbW9udGhOYW1lc1Nob3J0OlsiTWVzIiwiVGlrIiwiSGlkIiwiVGFoIiwiVGlyIiwiWWVrIiwiTWVnIiwiTWlhIiwiR2VuIiwiU2VuIiwiSGFtIiwiTmVoIiwiUGFnIl0sZGF5TmFtZXM6WyJFaHVkIiwiU2Vnbm8iLCJNYWtzZWdubyIsIklyb2IiLCJIYW11cyIsIkFyYiIsIktpZGFtZSJdLGRheU5hbWVzU2hvcnQ6WyJFaHUiLCJTZWciLCJNYWsiLCJJcm8iLCJIYW0iLCJBcmIiLCJLaWQiXSxkYXlOYW1lc01pbjpbIkVoIiwiU2UiLCJNYSIsIklyIiwiSGEiLCJBciIsIktpIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCk7cmV0dXJuIHQlND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkWWVhcnx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCksdDwwJiZ0Kyssbi5kYXkoKSszMCoobi5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksaS5jYWxlbmRhcnMuZXRoaW9waWFuPW59LHsiLi4vbWFpbiI6NTc5LCJvYmplY3QtYXNzaWduIjo0Njh9XSw1Njk6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfXZhciBhPXQoIi4uL21haW4iKSxvPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgYS5iYXNlQ2FsZW5kYXIsbyhuLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGEubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10PDA/dCsxOnQsaSg3KnQrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KT8zMDo4PT09ZSYmNT09PWkodGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8zMDo5PT09ZSYmMz09PWkodGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8yOTp0aGlzLmRheXNQZXJNb250aFtlLTFdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixhLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57eWVhclR5cGU6KHRoaXMubGVhcFllYXIobik/ImVtYm9saXNtaWMiOiJjb21tb24iKSsiICIrWyJkZWZpY2llbnQiLCJyZWd1bGFyIiwiY29tcGxldGUiXVt0aGlzLmRheXNJblllYXIobiklMTAtM119fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixhLmxvY2FsLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKTt2YXIgaT10PD0wP3QrMTp0LG89dGhpcy5qZEVwb2NoK3RoaXMuX2RlbGF5MShpKSt0aGlzLl9kZWxheTIoaSkrcisxO2lmKGU8Nyl7Zm9yKHZhciBzPTc7czw9dGhpcy5tb250aHNJblllYXIodCk7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtmb3IodmFyIHM9MTtzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKX1lbHNlIGZvcih2YXIgcz03O3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO3JldHVybiBvfSxfZGVsYXkxOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoKDIzNSp0LTIzNCkvMTkpLHI9MTIwODQrMTM3NTMqZSxuPTI5KmUrTWF0aC5mbG9vcihyLzI1OTIwKTtyZXR1cm4gaSgzKihuKzEpLDcpPDMmJm4rKyxufSxfZGVsYXkyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RlbGF5MSh0LTEpLHI9dGhpcy5fZGVsYXkxKHQpO3JldHVybiB0aGlzLl9kZWxheTEodCsxKS1yPT0zNTY/MjpyLWU9PTM4Mj8xOjB9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7Zm9yKHZhciBlPU1hdGguZmxvb3IoOTg0OTYqKHQtdGhpcy5qZEVwb2NoKS8zNTk3NTM1MSktMTt0Pj10aGlzLnRvSkQoLTE9PT1lPzE6ZSsxLDcsMSk7KWUrKztmb3IodmFyIHI9dDx0aGlzLnRvSkQoZSwxLDEpPzc6MTt0PnRoaXMudG9KRChlLHIsdGhpcy5kYXlzSW5Nb250aChlLHIpKTspcisrO3ZhciBuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLGEuY2FsZW5kYXJzLmhlYnJldz1ufSx7Ii4uL21haW4iOjU3OSwib2JqZWN0LWFzc2lnbiI6NDY4fV0sNTcwOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfXZhciBpPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgaS5iYXNlQ2FsZW5kYXIsYShuLnByb3RvdHlwZSx7bmFtZToiSXNsYW1pYyIsamRFcG9jaDoxOTQ4NDM5LjUsZGF5c1Blck1vbnRoOlszMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSXNsYW1pYyIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBhbC10aGFuaSIsIkp1bWFkYSBhbC1hd3dhbCIsIkp1bWFkYSBhbC10aGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtYWhhZCIsIllhd20gYWwtaXRobmF5biIsIllhd20gYXRoLXRodWxhYXRoYWEnIiwiWWF3bSBhbC1hcmJpJ2FhJyIsIllhd20gYWwta2hhbVx1MDEyYnMiLCJZYXdtIGFsLWp1bSdhIiwiWWF3bSBhcy1zYWJ0Il0sZGF5TmFtZXNTaG9ydDpbIkFoYSIsIkl0aCIsIlRodSIsIkFyYiIsIktoYSIsIkp1bSIsIlNhYiJdLGRheU5hbWVzTWluOlsiQWgiLCJJdCIsIlRoIiwiQXIiLCJLaCIsIkp1IiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuKDExKnRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCkrMTQpJTMwPDExfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8zNTU6MzU0fSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1uLnllYXIoKSxlPW4ubW9udGgoKSxyPW4uZGF5KCksdD10PD0wP3QrMTp0LHIrTWF0aC5jZWlsKDI5LjUqKGUtMSkpKzM1NCoodC0xKStNYXRoLmZsb29yKCgzKzExKnQpLzMwKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTt2YXIgZT1NYXRoLmZsb29yKCgzMCoodC10aGlzLmpkRXBvY2gpKzEwNjQ2KS8xMDYzMSk7ZT1lPD0wP2UtMTplO3ZhciByPU1hdGgubWluKDEyLE1hdGguY2VpbCgodC0yOS10aGlzLnRvSkQoZSwxLDEpKS8yOS41KSsxKSxuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLGkuY2FsZW5kYXJzLmlzbGFtaWM9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6Ikp1bGlhbiIsamRFcG9jaDoxNzIxNDIzLjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSnVsaWFuIixlcG9jaHM6WyJCQyIsIkFEIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpPDA/ZS55ZWFyKCkrMTplLnllYXIoKTtyZXR1cm4gdCU0PT0wfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkscj1lKzE1MjQsbj1NYXRoLmZsb29yKChyLTEyMi4xKS8zNjUuMjUpLGk9TWF0aC5mbG9vcigzNjUuMjUqbiksYT1NYXRoLmZsb29yKChyLWkpLzMwLjYwMDEpLG89YS1NYXRoLmZsb29yKGE8MTQ/MToxMykscz1uLU1hdGguZmxvb3Iobz4yPzQ3MTY6NDcxNSksbD1yLWktTWF0aC5mbG9vcigzMC42MDAxKmEpO3JldHVybiBzPD0wJiZzLS0sdGhpcy5uZXdEYXRlKHMsbyxsKX19KSxpLmNhbGVuZGFycy5qdWxpYW49bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3MjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBpKHQtMSxlKSsxfXZhciBvPXQoIi4uL21haW4iKSxzPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgby5iYXNlQ2FsZW5kYXIscyhuLnByb3RvdHlwZSx7bmFtZToiTWF5YW4iLGpkRXBvY2g6NTg0MjgyLjUsaGFzWWVhclplcm86ITAsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjAscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTWF5YW4iLGVwb2NoczpbIiIsIiJdLG1vbnRoTmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLG1vbnRoTmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sZGF5TmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNNaW46WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJZWVlZLm0uZCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOlsiUG9wIiwiVW8iLCJaaXAiLCJab3R6IiwiVHplYyIsIlh1bCIsIllheGtpbiIsIk1vbCIsIkNoZW4iLCJZYXgiLCJaYWMiLCJDZWgiLCJNYWMiLCJLYW5raW4iLCJNdWFuIiwiUGF4IiwiS2F5YWIiLCJDdW1rdSIsIlVheWViIl0sdHpvbGtpbk1vbnRoczpbIkltaXgiLCJJayIsIkFrYmFsIiwiS2FuIiwiQ2hpY2NoYW4iLCJDaW1pIiwiTWFuaWsiLCJMYW1hdCIsIk11bHVjIiwiT2MiLCJDaHVlbiIsIkViIiwiQmVuIiwiSXgiLCJNZW4iLCJDaWIiLCJDYWJhbiIsIkV0em5hYiIsIkNhdWFjIiwiQWhhdSJdfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxvLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxvLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCk7cmV0dXJuIHQlPTQwMCx0Kz10PDA/NDAwOjAsZSsiLiIrTWF0aC5mbG9vcih0LzIwKSsiLiIrdCUyMH0sZm9yWWVhcjpmdW5jdGlvbih0KXtpZih0PXQuc3BsaXQoIi4iKSx0Lmxlbmd0aDwzKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1wYXJzZUludCh0W3JdLDEwKTtpZihNYXRoLmFicyhuKT4xOXx8cj4wJiZuPDApdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtlPTIwKmUrbn1yZXR1cm4gZX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixvLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG8ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSksaT1uLnRvSkQoKSxhPXRoaXMuX3RvSGFhYihpKSxzPXRoaXMuX3RvVHpvbGtpbihpKTtyZXR1cm57aGFhYk1vbnRoTmFtZTp0aGlzLmxvY2FsLmhhYWJNb250aHNbYVswXS0xXSxoYWFiTW9udGg6YVswXSxoYWFiRGF5OmFbMV0sdHpvbGtpbkRheU5hbWU6dGhpcy5sb2NhbC50em9sa2luTW9udGhzW3NbMF0tMV0sdHpvbGtpbkRheTpzWzBdLHR6b2xraW5UcmVjZW5hOnNbMV19fSxfdG9IYWFiOmZ1bmN0aW9uKHQpe3QtPXRoaXMuamRFcG9jaDt2YXIgZT1pKHQrOCszNDAsMzY1KTtyZXR1cm5bTWF0aC5mbG9vcihlLzIwKSsxLGkoZSwyMCldfSxfdG9Uem9sa2luOmZ1bmN0aW9uKHQpe3JldHVybiB0LT10aGlzLmpkRXBvY2gsW2EodCsyMCwyMCksYSh0KzQsMTMpXX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4uZGF5KCkrMjAqbi5tb250aCgpKzM2MCpuLnllYXIoKSt0aGlzLmpkRXBvY2h9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoO3ZhciBlPU1hdGguZmxvb3IodC8zNjApO3QlPTM2MCx0Kz10PDA/MzYwOjA7dmFyIHI9TWF0aC5mbG9vcih0LzIwKSxuPXQlMjA7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksby5jYWxlbmRhcnMubWF5YW49bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3MzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyO3ZhciBvPWkuaW5zdGFuY2UoImdyZWdvcmlhbiIpO2Eobi5wcm90b3R5cGUse25hbWU6Ik5hbmFrc2hhaGkiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5hbmFrc2hhaGkiLGVwb2NoczpbIkJOIiwiQU4iXSxtb250aE5hbWVzOlsiQ2hldCIsIlZhaXNha2giLCJKZXRoIiwiSGFyaCIsIlNhd2FuIiwiQmhhZG9uIiwiQXNzdSIsIkthdGFrIiwiTWFnaGFyIiwiUG9oIiwiTWFnaCIsIlBoYWd1biJdLG1vbnRoTmFtZXNTaG9ydDpbIkNoZSIsIlZhaSIsIkpldCIsIkhhciIsIlNhdyIsIkJoYSIsIkFzcyIsIkthdCIsIk1nciIsIlBvaCIsIk1naCIsIlBoYSJdLGRheU5hbWVzOlsiU29tdmFhciIsIk1hbmdhbHZhciIsIkJ1ZGh2YWFyIiwiVmVlcnZhYXIiLCJTaHVrYXJ2YWFyIiwiU2FuaWNoYXJ2YWFyIiwiRXR2YWFyIl0sZGF5TmFtZXNTaG9ydDpbIlNvbSIsIk1hbmdhbCIsIkJ1ZGgiLCJWZWVyIiwiU2h1a2FyIiwiU2FuaWNoYXIiLCJFdCJdLGRheU5hbWVzTWluOlsiU28iLCJNYSIsIkJ1IiwiVmUiLCJTaCIsIlNhIiwiRXQiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC1tbS15eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXJ8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkTW9udGgpLHQ9bi55ZWFyKCk7dDwwJiZ0Kys7Zm9yKHZhciBhPW4uZGF5KCkscz0xO3M8bi5tb250aCgpO3MrKylhKz10aGlzLmRheXNQZXJNb250aFtzLTFdO3JldHVybiBhK28udG9KRCh0KzE0NjgsMywxMyl9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSk7Zm9yKHZhciBlPU1hdGguZmxvb3IoKHQtKHRoaXMuamRFcG9jaC0xKSkvMzY2KTt0Pj10aGlzLnRvSkQoZSsxLDEsMSk7KWUrKztmb3IodmFyIHI9dC1NYXRoLmZsb29yKHRoaXMudG9KRChlLDEsMSkrLjUpKzEsbj0xO3I+dGhpcy5kYXlzSW5Nb250aChlLG4pOylyLT10aGlzLmRheXNJbk1vbnRoKGUsbiksbisrO3JldHVybiB0aGlzLm5ld0RhdGUoZSxuLHIpfX0pLGkuY2FsZW5kYXJzLm5hbmFrc2hhaGk9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6Ik5lcGFsaSIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5lcGFsaSIsZXBvY2hzOlsiQkJTIiwiQUJTIl0sbW9udGhOYW1lczpbIkJhaXNha2giLCJKZXN0aGEiLCJBc2hhZGgiLCJTaHJhd2FuIiwiQmhhZHJhIiwiQXNod2luIiwiS2FydGlrIiwiTWFuZ3NpciIsIlBhdXNoIiwiTWFuZ2giLCJGYWxndW4iLCJDaGFpdHJhIl0sbW9udGhOYW1lc1Nob3J0OlsiQmFpIiwiSmUiLCJBcyIsIlNocmEiLCJCaGEiLCJBc2giLCJLYXIiLCJNYW5nIiwiUGF1IiwiTWEiLCJGYWwiLCJDaGFpIl0sZGF5TmFtZXM6WyJBYWl0YWJhYXIiLCJTb21iYWFyIiwiTWFuZ2xiYWFyIiwiQnVkaGFiYWFyIiwiQmloaWJhYXIiLCJTaHVrcmFiYWFyIiwiU2hhbmliYWFyIl0sZGF5TmFtZXNTaG9ydDpbIkFhaXRhIiwiU29tIiwiTWFuZ2wiLCJCdWRoYSIsIkJpaGkiLCJTaHVrcmEiLCJTaGFuaSJdLGRheU5hbWVzTWluOlsiQWFpIiwiU28iLCJNYW4iLCJCdSIsIkJpIiwiU2h1IiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRheXNJblllYXIodCkhPT10aGlzLmRheXNQZXJZZWFyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XSlyZXR1cm4gdGhpcy5kYXlzUGVyWWVhcjtmb3IodmFyIGU9MCxyPXRoaXMubWluTW9udGg7cjw9MTI7cisrKWUrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bcl07cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRNb250aCksdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XT90aGlzLmRheXNQZXJNb250aFtlLTFdOnRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bZV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKTt2YXIgYT1pLmluc3RhbmNlKCksbz0wLHM9ZSxsPXQ7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YSh0KTt2YXIgdT10LShzPjl8fDk9PT1zJiZyPj10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdPzU2OjU3KTtmb3IoOSE9PWUmJihvPXIscy0tKTs5IT09czspczw9MCYmKHM9MTIsbC0tKSxvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdW3NdLHMtLTtyZXR1cm4gOT09PWU/KG8rPXItdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSk8MCYmKG8rPWEuZGF5c0luWWVhcih1KSk6bys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVs5XS10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdLGEubmV3RGF0ZSh1LDEsMSkuYWRkKG8sImQiKS50b0pEKCl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1pLmluc3RhbmNlKCkscj1lLmZyb21KRCh0KSxuPXIueWVhcigpLGE9ci5kYXlPZlllYXIoKSxvPW4rNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShvKTtmb3IodmFyIHM9OSxsPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbb11bMF0sdT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW29dW3NdLWwrMTthPnU7KXMrKyxzPjEyJiYocz0xLG8rKyksdSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtvXVtzXTt2YXIgYz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW29dW3NdLSh1LWEpO3JldHVybiB0aGlzLm5ld0RhdGUobyxzLGMpfSxfY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRheXNQZXJNb250aC5zbGljZSgwKTtlLnVuc2hpZnQoMTcpO2Zvcih2YXIgcj10LTE7cjx0KzI7cisrKXZvaWQgMD09PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLAoxOTkyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5MzpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTQ6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk5NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDJlMzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxpLmNhbGVuZGFycy5uZXBhbGk9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3NTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9dmFyIGE9dCgiLi4vbWFpbiIpLG89dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBhLmJhc2VDYWxlbmRhcixvKG4ucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGEubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYS5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1uLnllYXIoKSxlPW4ubW9udGgoKSxyPW4uZGF5KCk7dmFyIG89dC0odD49MD80NzQ6NDczKSxzPTQ3NCtpKG8sMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKG8vMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7dmFyIGU9dC10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1pKGUsMTAyOTk4MyksYT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgbz1NYXRoLmZsb29yKG4vMzY2KSxzPWkobiwzNjYpO2E9TWF0aC5mbG9vcigoMjEzNCpvKzI4MTYqcysyODE1KS8xMDI4NTIyKStvKzF9dmFyIGw9YSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgdT10LXRoaXMudG9KRChsLDEsMSkrMSxjPXU8PTE4Nj9NYXRoLmNlaWwodS8zMSk6TWF0aC5jZWlsKCh1LTYpLzMwKSxoPXQtdGhpcy50b0pEKGwsYywxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCxjLGgpfX0pLGEuY2FsZW5kYXJzLnBlcnNpYW49bixhLmNhbGVuZGFycy5qYWxhbGk9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIiksbz1pLmluc3RhbmNlKCk7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLHQ9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIG8ubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PXRoaXMuX3QyZ1llYXIobi55ZWFyKCkpO3JldHVybiBvLndlZWtPZlllYXIodCxuLm1vbnRoKCksbi5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKSx0PXRoaXMuX3QyZ1llYXIobi55ZWFyKCkpO3JldHVybiBvLnRvSkQodCxuLm1vbnRoKCksbi5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1vLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksaS5jYWxlbmRhcnMudGFpd2FuPW59LHsiLi4vbWFpbiI6NTc5LCJvYmplY3QtYXNzaWduIjo0Njh9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpLG89aS5pbnN0YW5jZSgpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLHQ9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIG8ubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PXRoaXMuX3QyZ1llYXIobi55ZWFyKCkpO3JldHVybiBvLndlZWtPZlllYXIodCxuLm1vbnRoKCksbi5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKSx0PXRoaXMuX3QyZ1llYXIobi55ZWFyKCkpO3JldHVybiBvLnRvSkQodCxuLm1vbnRoKCksbi5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1vLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksaS5jYWxlbmRhcnMudGhhaT1ufSx7Ii4uL21haW4iOjU3OSwib2JqZWN0LWFzc2lnbiI6NDY4fV0sNTc4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfXZhciBpPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgaS5iYXNlQ2FsZW5kYXIsYShuLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRNb250aCksbj1yLnRvSkQoKS0yNGU1Ky41LGE9MCxzPTA7czxvLmxlbmd0aDtzKyspe2lmKG9bc10+bilyZXR1cm4gb1thXS1vW2EtMV07YSsrfXJldHVybiAzMH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpLGE9MTIqKG4ueWVhcigpLTEpK24ubW9udGgoKS0xNTI5MjtyZXR1cm4gbi5kYXkoKStvW2EtMV0tMSsyNGU1LS41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQtMjRlNSsuNSxyPTAsbj0wO248by5sZW5ndGgmJiEob1tuXT5lKTtuKyspcisrO3ZhciBpPXIrMTUyOTIsYT1NYXRoLmZsb29yKChpLTEpLzEyKSxzPWErMSxsPWktMTIqYSx1PWUtb1tyLTFdKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShzLGwsdSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5pc1ZhbGlkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbiYmKHQ9bnVsbCE9dC55ZWFyP3QueWVhcjp0LG49dD49MTI3NiYmdDw9MTUwMCksbn0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPWkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5fdmFsaWRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGEueWVhcjwxMjc2fHxhLnllYXI+MTUwMCl0aHJvdyBuLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiBhfX0pLGkuY2FsZW5kYXJzLnVtbWFscXVyYT1uO3ZhciBvPVsyMCw1MCw3OSwxMDksMTM4LDE2OCwxOTcsMjI3LDI1NiwyODYsMzE1LDM0NSwzNzQsNDA0LDQzMyw0NjMsNDkyLDUyMiw1NTEsNTgxLDYxMSw2NDEsNjcwLDcwMCw3MjksNzU5LDc4OCw4MTgsODQ3LDg3Nyw5MDYsOTM2LDk2NSw5OTUsMTAyNCwxMDU0LDEwODMsMTExMywxMTQyLDExNzIsMTIwMSwxMjMxLDEyNjAsMTI5MCwxMzIwLDEzNTAsMTM3OSwxNDA5LDE0MzgsMTQ2OCwxNDk3LDE1MjcsMTU1NiwxNTg2LDE2MTUsMTY0NSwxNjc0LDE3MDQsMTczMywxNzYzLDE3OTIsMTgyMiwxODUxLDE4ODEsMTkxMCwxOTQwLDE5NjksMTk5OSwyMDI4LDIwNTgsMjA4NywyMTE3LDIxNDYsMjE3NiwyMjA1LDIyMzUsMjI2NCwyMjk0LDIzMjMsMjM1MywyMzgzLDI0MTMsMjQ0MiwyNDcyLDI1MDEsMjUzMSwyNTYwLDI1OTAsMjYxOSwyNjQ5LDI2NzgsMjcwOCwyNzM3LDI3NjcsMjc5NiwyODI2LDI4NTUsMjg4NSwyOTE0LDI5NDQsMjk3MywzMDAzLDMwMzIsMzA2MiwzMDkxLDMxMjEsMzE1MCwzMTgwLDMyMDksMzIzOSwzMjY4LDMyOTgsMzMyNywzMzU3LDMzODYsMzQxNiwzNDQ2LDM0NzYsMzUwNSwzNTM1LDM1NjQsMzU5NCwzNjIzLDM2NTMsMzY4MiwzNzEyLDM3NDEsMzc3MSwzODAwLDM4MzAsMzg1OSwzODg5LDM5MTgsMzk0OCwzOTc3LDQwMDcsNDAzNiw0MDY2LDQwOTUsNDEyNSw0MTU1LDQxODUsNDIxNCw0MjQ0LDQyNzMsNDMwMyw0MzMyLDQzNjIsNDM5MSw0NDIxLDQ0NTAsNDQ4MCw0NTA5LDQ1MzksNDU2OCw0NTk4LDQ2MjcsNDY1Nyw0Njg2LDQ3MTYsNDc0NSw0Nzc1LDQ4MDQsNDgzNCw0ODYzLDQ4OTMsNDkyMiw0OTUyLDQ5ODEsNTAxMSw1MDQwLDUwNzAsNTA5OSw1MTI5LDUxNTgsNTE4OCw1MjE4LDUyNDgsNTI3Nyw1MzA3LDUzMzYsNTM2Niw1Mzk1LDU0MjUsNTQ1NCw1NDg0LDU1MTMsNTU0Myw1NTcyLDU2MDIsNTYzMSw1NjYxLDU2OTAsNTcyMCw1NzQ5LDU3NzksNTgwOCw1ODM4LDU4NjcsNTg5Nyw1OTI2LDU5NTYsNTk4NSw2MDE1LDYwNDQsNjA3NCw2MTAzLDYxMzMsNjE2Miw2MTkyLDYyMjEsNjI1MSw2MjgxLDYzMTEsNjM0MCw2MzcwLDYzOTksNjQyOSw2NDU4LDY0ODgsNjUxNyw2NTQ3LDY1NzYsNjYwNiw2NjM1LDY2NjUsNjY5NCw2NzI0LDY3NTMsNjc4Myw2ODEyLDY4NDIsNjg3MSw2OTAxLDY5MzAsNjk2MCw2OTg5LDcwMTksNzA0OCw3MDc4LDcxMDcsNzEzNyw3MTY2LDcxOTYsNzIyNSw3MjU1LDcyODQsNzMxNCw3MzQ0LDczNzQsNzQwMyw3NDMzLDc0NjIsNzQ5Miw3NTIxLDc1NTEsNzU4MCw3NjEwLDc2MzksNzY2OSw3Njk4LDc3MjgsNzc1Nyw3Nzg3LDc4MTYsNzg0Niw3ODc1LDc5MDUsNzkzNCw3OTY0LDc5OTMsODAyMyw4MDUzLDgwODMsODExMiw4MTQyLDgxNzEsODIwMSw4MjMwLDgyNjAsODI4OSw4MzE5LDgzNDgsODM3OCw4NDA3LDg0MzcsODQ2Niw4NDk2LDg1MjUsODU1NSw4NTg0LDg2MTQsODY0Myw4NjczLDg3MDIsODczMiw4NzYxLDg3OTEsODgyMSw4ODUwLDg4ODAsODkwOSw4OTM4LDg5NjgsODk5Nyw5MDI3LDkwNTYsOTA4Niw5MTE1LDkxNDUsOTE3NSw5MjA1LDkyMzQsOTI2NCw5MjkzLDkzMjIsOTM1Miw5MzgxLDk0MTAsOTQ0MCw5NDcwLDk0OTksOTUyOSw5NTU5LDk1ODksOTYxOCw5NjQ4LDk2NzcsOTcwNiw5NzM2LDk3NjUsOTc5NCw5ODI0LDk4NTMsOTg4Myw5OTEzLDk5NDMsOTk3MiwxMDAwMiwxMDAzMiwxMDA2MSwxMDA5MCwxMDEyMCwxMDE0OSwxMDE3OCwxMDIwOCwxMDIzNywxMDI2NywxMDI5NywxMDMyNiwxMDM1NiwxMDM4NiwxMDQxNSwxMDQ0NSwxMDQ3NCwxMDUwNCwxMDUzMywxMDU2MiwxMDU5MiwxMDYyMSwxMDY1MSwxMDY4MCwxMDcxMCwxMDc0MCwxMDc3MCwxMDc5OSwxMDgyOSwxMDg1OCwxMDg4OCwxMDkxNywxMDk0NywxMDk3NiwxMTAwNSwxMTAzNSwxMTA2NCwxMTA5NCwxMTEyNCwxMTE1MywxMTE4MywxMTIxMywxMTI0MiwxMTI3MiwxMTMwMSwxMTMzMSwxMTM2MCwxMTM4OSwxMTQxOSwxMTQ0OCwxMTQ3OCwxMTUwNywxMTUzNywxMTU2NywxMTU5NiwxMTYyNiwxMTY1NSwxMTY4NSwxMTcxNSwxMTc0NCwxMTc3NCwxMTgwMywxMTgzMiwxMTg2MiwxMTg5MSwxMTkyMSwxMTk1MCwxMTk4MCwxMjAxMCwxMjAzOSwxMjA2OSwxMjA5OSwxMjEyOCwxMjE1OCwxMjE4NywxMjIxNiwxMjI0NiwxMjI3NSwxMjMwNCwxMjMzNCwxMjM2NCwxMjM5MywxMjQyMywxMjQ1MywxMjQ4MywxMjUxMiwxMjU0MiwxMjU3MSwxMjYwMCwxMjYzMCwxMjY1OSwxMjY4OCwxMjcxOCwxMjc0NywxMjc3NywxMjgwNywxMjgzNywxMjg2NiwxMjg5NiwxMjkyNiwxMjk1NSwxMjk4NCwxMzAxNCwxMzA0MywxMzA3MiwxMzEwMiwxMzEzMSwxMzE2MSwxMzE5MSwxMzIyMCwxMzI1MCwxMzI4MCwxMzMxMCwxMzMzOSwxMzM2OCwxMzM5OCwxMzQyNywxMzQ1NiwxMzQ4NiwxMzUxNSwxMzU0NSwxMzU3NCwxMzYwNCwxMzYzNCwxMzY2NCwxMzY5MywxMzcyMywxMzc1MiwxMzc4MiwxMzgxMSwxMzg0MCwxMzg3MCwxMzg5OSwxMzkyOSwxMzk1OCwxMzk4OCwxNDAxOCwxNDA0NywxNDA3NywxNDEwNywxNDEzNiwxNDE2NiwxNDE5NSwxNDIyNCwxNDI1NCwxNDI4MywxNDMxMywxNDM0MiwxNDM3MiwxNDQwMSwxNDQzMSwxNDQ2MSwxNDQ5MCwxNDUyMCwxNDU1MCwxNDU3OSwxNDYwOSwxNDYzOCwxNDY2NywxNDY5NywxNDcyNiwxNDc1NiwxNDc4NSwxNDgxNSwxNDg0NCwxNDg3NCwxNDkwNCwxNDkzMywxNDk2MywxNDk5MywxNTAyMSwxNTA1MSwxNTA4MSwxNTExMCwxNTE0MCwxNTE2OSwxNTE5OSwxNTIyOCwxNTI1OCwxNTI4NywxNTMxNywxNTM0NywxNTM3NywxNTQwNiwxNTQzNiwxNTQ2NSwxNTQ5NCwxNTUyNCwxNTU1MywxNTU4MiwxNTYxMiwxNTY0MSwxNTY3MSwxNTcwMSwxNTczMSwxNTc2MCwxNTc5MCwxNTgyMCwxNTg0OSwxNTg3OCwxNTkwOCwxNTkzNywxNTk2NiwxNTk5NiwxNjAyNSwxNjA1NSwxNjA4NSwxNjExNCwxNjE0NCwxNjE3NCwxNjIwNCwxNjIzMywxNjI2MiwxNjI5MiwxNjMyMSwxNjM1MCwxNjM4MCwxNjQwOSwxNjQzOSwxNjQ2OCwxNjQ5OCwxNjUyOCwxNjU1OCwxNjU4NywxNjYxNywxNjY0NiwxNjY3NiwxNjcwNSwxNjczNCwxNjc2NCwxNjc5MywxNjgyMywxNjg1MiwxNjg4MiwxNjkxMiwxNjk0MSwxNjk3MSwxNzAwMSwxNzAzMCwxNzA2MCwxNzA4OSwxNzExOCwxNzE0OCwxNzE3NywxNzIwNywxNzIzNiwxNzI2NiwxNzI5NSwxNzMyNSwxNzM1NSwxNzM4NCwxNzQxNCwxNzQ0NCwxNzQ3MywxNzUwMiwxNzUzMiwxNzU2MSwxNzU5MSwxNzYyMCwxNzY1MCwxNzY3OSwxNzcwOSwxNzczOCwxNzc2OCwxNzc5OCwxNzgyNywxNzg1NywxNzg4NiwxNzkxNiwxNzk0NSwxNzk3NSwxODAwNCwxODAzNCwxODA2MywxODA5MywxODEyMiwxODE1MiwxODE4MSwxODIxMSwxODI0MSwxODI3MCwxODMwMCwxODMzMCwxODM1OSwxODM4OCwxODQxOCwxODQ0NywxODQ3NiwxODUwNiwxODUzNSwxODU2NSwxODU5NSwxODYyNSwxODY1NCwxODY4NCwxODcxNCwxODc0MywxODc3MiwxODgwMiwxODgzMSwxODg2MCwxODg5MCwxODkxOSwxODk0OSwxODk3OSwxOTAwOCwxOTAzOCwxOTA2OCwxOTA5OCwxOTEyNywxOTE1NiwxOTE4NiwxOTIxNSwxOTI0NCwxOTI3NCwxOTMwMywxOTMzMywxOTM2MiwxOTM5MiwxOTQyMiwxOTQ1MiwxOTQ4MSwxOTUxMSwxOTU0MCwxOTU3MCwxOTU5OSwxOTYyOCwxOTY1OCwxOTY4NywxOTcxNywxOTc0NiwxOTc3NiwxOTgwNiwxOTgzNiwxOTg2NSwxOTg5NSwxOTkyNCwxOTk1NCwxOTk4MywyMDAxMiwyMDA0MiwyMDA3MSwyMDEwMSwyMDEzMCwyMDE2MCwyMDE5MCwyMDIxOSwyMDI0OSwyMDI3OSwyMDMwOCwyMDMzOCwyMDM2NywyMDM5NiwyMDQyNiwyMDQ1NSwyMDQ4NSwyMDUxNCwyMDU0NCwyMDU3MywyMDYwMywyMDYzMywyMDY2MiwyMDY5MiwyMDcyMSwyMDc1MSwyMDc4MCwyMDgxMCwyMDgzOSwyMDg2OSwyMDg5OCwyMDkyOCwyMDk1NywyMDk4NywyMTAxNiwyMTA0NiwyMTA3NiwyMTEwNSwyMTEzNSwyMTE2NCwyMTE5NCwyMTIyMywyMTI1MywyMTI4MiwyMTMxMiwyMTM0MSwyMTM3MSwyMTQwMCwyMTQzMCwyMTQ1OSwyMTQ4OSwyMTUxOSwyMTU0OCwyMTU3OCwyMTYwNywyMTYzNywyMTY2NiwyMTY5NiwyMTcyNSwyMTc1NCwyMTc4NCwyMTgxMywyMTg0MywyMTg3MywyMTkwMiwyMTkzMiwyMTk2MiwyMTk5MSwyMjAyMSwyMjA1MCwyMjA4MCwyMjEwOSwyMjEzOCwyMjE2OCwyMjE5NywyMjIyNywyMjI1NiwyMjI4NiwyMjMxNiwyMjM0NiwyMjM3NSwyMjQwNSwyMjQzNCwyMjQ2NCwyMjQ5MywyMjUyMiwyMjU1MiwyMjU4MSwyMjYxMSwyMjY0MCwyMjY3MCwyMjcwMCwyMjczMCwyMjc1OSwyMjc4OSwyMjgxOCwyMjg0OCwyMjg3NywyMjkwNiwyMjkzNiwyMjk2NSwyMjk5NCwyMzAyNCwyMzA1NCwyMzA4MywyMzExMywyMzE0MywyMzE3MywyMzIwMiwyMzIzMiwyMzI2MSwyMzI5MCwyMzMyMCwyMzM0OSwyMzM3OSwyMzQwOCwyMzQzOCwyMzQ2NywyMzQ5NywyMzUyNywyMzU1NiwyMzU4NiwyMzYxNiwyMzY0NSwyMzY3NCwyMzcwNCwyMzczMywyMzc2MywyMzc5MiwyMzgyMiwyMzg1MSwyMzg4MSwyMzkxMCwyMzk0MCwyMzk3MCwyMzk5OSwyNDAyOSwyNDA1OCwyNDA4OCwyNDExNywyNDE0NywyNDE3NiwyNDIwNiwyNDIzNSwyNDI2NSwyNDI5NCwyNDMyNCwyNDM1MywyNDM4MywyNDQxMywyNDQ0MiwyNDQ3MiwyNDUwMSwyNDUzMSwyNDU2MCwyNDU5MCwyNDYxOSwyNDY0OCwyNDY3OCwyNDcwNywyNDczNywyNDc2NywyNDc5NiwyNDgyNiwyNDg1NiwyNDg4NSwyNDkxNSwyNDk0NCwyNDk3NCwyNTAwMywyNTAzMiwyNTA2MiwyNTA5MSwyNTEyMSwyNTE1MCwyNTE4MCwyNTIxMCwyNTI0MCwyNTI2OSwyNTI5OSwyNTMyOCwyNTM1OCwyNTM4NywyNTQxNiwyNTQ0NiwyNTQ3NSwyNTUwNSwyNTUzNCwyNTU2NCwyNTU5NCwyNTYyNCwyNTY1MywyNTY4MywyNTcxMiwyNTc0MiwyNTc3MSwyNTgwMCwyNTgzMCwyNTg1OSwyNTg4OCwyNTkxOCwyNTk0OCwyNTk3NywyNjAwNywyNjAzNywyNjA2NywyNjA5NiwyNjEyNiwyNjE1NSwyNjE4NCwyNjIxNCwyNjI0MywyNjI3MiwyNjMwMiwyNjMzMiwyNjM2MSwyNjM5MSwyNjQyMSwyNjQ1MSwyNjQ4MCwyNjUxMCwyNjUzOSwyNjU2OCwyNjU5OCwyNjYyNywyNjY1NiwyNjY4NiwyNjcxNSwyNjc0NSwyNjc3NSwyNjgwNSwyNjgzNCwyNjg2NCwyNjg5MywyNjkyMywyNjk1MiwyNjk4MiwyNzAxMSwyNzA0MSwyNzA3MCwyNzA5OSwyNzEyOSwyNzE1OSwyNzE4OCwyNzIxOCwyNzI0OCwyNzI3NywyNzMwNywyNzMzNiwyNzM2NiwyNzM5NSwyNzQyNSwyNzQ1NCwyNzQ4NCwyNzUxMywyNzU0MiwyNzU3MiwyNzYwMiwyNzYzMSwyNzY2MSwyNzY5MSwyNzcyMCwyNzc1MCwyNzc3OSwyNzgwOSwyNzgzOCwyNzg2OCwyNzg5NywyNzkyNiwyNzk1NiwyNzk4NSwyODAxNSwyODA0NSwyODA3NCwyODEwNCwyODEzNCwyODE2MywyODE5MywyODIyMiwyODI1MiwyODI4MSwyODMxMCwyODM0MCwyODM2OSwyODM5OSwyODQyOCwyODQ1OCwyODQ4OCwyODUxNywyODU0NywyODU3NywyODYwNywyODYzNiwyODY2NSwyODY5NSwyODcyNCwyODc1NCwyODc4MywyODgxMywyODg0MywyODg3MiwyODkwMSwyODkzMSwyODk2MCwyODk5MCwyOTAxOSwyOTA0OSwyOTA3OCwyOTEwOCwyOTEzNywyOTE2NywyOTE5NiwyOTIyNiwyOTI1NSwyOTI4NSwyOTMxNSwyOTM0NSwyOTM3NSwyOTQwNCwyOTQzNCwyOTQ2MywyOTQ5MiwyOTUyMiwyOTU1MSwyOTU4MCwyOTYxMCwyOTY0MCwyOTY2OSwyOTY5OSwyOTcyOSwyOTc1OSwyOTc4OCwyOTgxOCwyOTg0NywyOTg3NiwyOTkwNiwyOTkzNSwyOTk2NCwyOTk5NCwzMDAyMywzMDA1MywzMDA4MiwzMDExMiwzMDE0MSwzMDE3MSwzMDIwMCwzMDIzMCwzMDI1OSwzMDI4OSwzMDMxOCwzMDM0OCwzMDM3OCwzMDQwOCwzMDQzNywzMDQ2NywzMDQ5NiwzMDUyNiwzMDU1NSwzMDU4NSwzMDYxNCwzMDY0NCwzMDY3MywzMDcwMywzMDczMiwzMDc2MiwzMDc5MSwzMDgyMSwzMDg1MCwzMDg4MCwzMDkwOSwzMDkzOSwzMDk2OCwzMDk5OCwzMTAyNywzMTA1NywzMTA4NiwzMTExNiwzMTE0NSwzMTE3NSwzMTIwNCwzMTIzNCwzMTI2MywzMTI5MywzMTMyMiwzMTM1MiwzMTM4MSwzMTQxMSwzMTQ0MSwzMTQ3MSwzMTUwMCwzMTUzMCwzMTU1OSwzMTU4OSwzMTYxOCwzMTY0OCwzMTY3NiwzMTcwNiwzMTczNiwzMTc2NiwzMTc5NSwzMTgyNSwzMTg1NCwzMTg4NCwzMTkxMywzMTk0MywzMTk3MiwzMjAwMiwzMjAzMSwzMjA2MSwzMjA5MCwzMjEyMCwzMjE1MCwzMjE4MCwzMjIwOSwzMjIzOSwzMjI2OCwzMjI5OCwzMjMyNywzMjM1NywzMjM4NiwzMjQxNiwzMjQ0NSwzMjQ3NSwzMjUwNCwzMjUzNCwzMjU2MywzMjU5MywzMjYyMiwzMjY1MiwzMjY4MSwzMjcxMSwzMjc0MCwzMjc3MCwzMjc5OSwzMjgyOSwzMjg1OCwzMjg4OCwzMjkxNywzMjk0NywzMjk3NiwzMzAwNiwzMzAzNSwzMzA2NSwzMzA5NCwzMzEyNCwzMzE1MywzMzE4MywzMzIxMywzMzI0MywzMzI3MiwzMzMwMiwzMzMzMSwzMzM2MSwzMzM5MCwzMzQyMCwzMzQ1MCwzMzQ3OSwzMzUwOSwzMzUzOSwzMzU2OCwzMzU5OCwzMzYyNywzMzY1NywzMzY4NiwzMzcxNiwzMzc0NSwzMzc3NSwzMzgwNCwzMzgzNCwzMzg2MywzMzg5MywzMzkyMiwzMzk1MiwzMzk4MSwzNDAxMSwzNDA0MCwzNDA2OSwzNDA5OSwzNDEyOCwzNDE1OCwzNDE4NywzNDIxNywzNDI0NywzNDI3NywzNDMwNiwzNDMzNiwzNDM2NSwzNDM5NSwzNDQyNCwzNDQ1NCwzNDQ4MywzNDUxMiwzNDU0MiwzNDU3MSwzNDYwMSwzNDYzMSwzNDY2MCwzNDY5MCwzNDcxOSwzNDc0OSwzNDc3OCwzNDgwOCwzNDgzNywzNDg2NywzNDg5NiwzNDkyNiwzNDk1NSwzNDk4NSwzNTAxNSwzNTA0NCwzNTA3NCwzNTEwMywzNTEzMywzNTE2MiwzNTE5MiwzNTIyMiwzNTI1MSwzNTI4MCwzNTMxMCwzNTM0MCwzNTM3MCwzNTM5OSwzNTQyOSwzNTQ1OCwzNTQ4OCwzNTUxNywzNTU0NywzNTU3NiwzNTYwNSwzNTYzNSwzNTY2NSwzNTY5NCwzNTcyMywzNTc1MywzNTc4MiwzNTgxMSwzNTg0MSwzNTg3MSwzNTkwMSwzNTkzMCwzNTk2MCwzNTk4OSwzNjAxOSwzNjA0OCwzNjA3OCwzNjEwNywzNjEzNiwzNjE2NiwzNjE5NSwzNjIyNSwzNjI1NCwzNjI4NCwzNjMxNCwzNjM0MywzNjM3MywzNjQwMywzNjQzMywzNjQ2MiwzNjQ5MiwzNjUyMSwzNjU1MSwzNjU4MCwzNjYxMCwzNjYzOSwzNjY2OSwzNjY5OCwzNjcyOCwzNjc1NywzNjc4NiwzNjgxNiwzNjg0NSwzNjg3NSwzNjkwNCwzNjkzNCwzNjk2MywzNjk5MywzNzAyMiwzNzA1MiwzNzA4MSwzNzExMSwzNzE0MSwzNzE3MCwzNzIwMCwzNzIyOSwzNzI1OSwzNzI4OCwzNzMxOCwzNzM0NywzNzM3NywzNzQwNiwzNzQzNiwzNzQ2NSwzNzQ5NSwzNzUyNCwzNzU1NCwzNzU4NCwzNzYxMywzNzY0MywzNzY3MiwzNzcwMSwzNzczMSwzNzc2MCwzNzc5MCwzNzgxOSwzNzg0OSwzNzg3OCwzNzkwOCwzNzkzOCwzNzk2NywzNzk5NywzODAyNywzODA1NiwzODA4NSwzODExNSwzODE0NCwzODE3NCwzODIwMywzODIzMywzODI2MiwzODI5MiwzODMyMiwzODM1MSwzODM4MSwzODQxMCwzODQ0MCwzODQ2OSwzODQ5OSwzODUyOCwzODU1OCwzODU4NywzODYxNywzODY0NiwzODY3NiwzODcwNSwzODczNSwzODc2NCwzODc5NCwzODgyMywzODg1MywzODg4MiwzODkxMiwzODk0MSwzODk3MSwzOTAwMSwzOTAzMCwzOTA1OSwzOTA4OSwzOTExOCwzOTE0OCwzOTE3OCwzOTIwOCwzOTIzNywzOTI2NywzOTI5NywzOTMyNiwzOTM1NSwzOTM4NSwzOTQxNCwzOTQ0NCwzOTQ3MywzOTUwMywzOTUzMiwzOTU2MiwzOTU5MiwzOTYyMSwzOTY1MCwzOTY4MCwzOTcwOSwzOTczOSwzOTc2OCwzOTc5OCwzOTgyNywzOTg1NywzOTg4NiwzOTkxNiwzOTk0NiwzOTk3NSw0MDAwNSw0MDAzNSw0MDA2NCw0MDA5NCw0MDEyMyw0MDE1Myw0MDE4Miw0MDIxMiw0MDI0MSw0MDI3MSw0MDMwMCw0MDMzMCw0MDM1OSw0MDM4OSw0MDQxOCw0MDQ0OCw0MDQ3Nyw0MDUwNyw0MDUzNiw0MDU2Niw0MDU5NSw0MDYyNSw0MDY1NSw0MDY4NSw0MDcxNCw0MDc0NCw0MDc3Myw0MDgwMyw0MDgzMiw0MDg2Miw0MDg5Miw0MDkyMSw0MDk1MSw0MDk4MCw0MTAwOSw0MTAzOSw0MTA2OCw0MTA5OCw0MTEyNyw0MTE1Nyw0MTE4Niw0MTIxNiw0MTI0NSw0MTI3NSw0MTMwNCw0MTMzNCw0MTM2NCw0MTM5Myw0MTQyMiw0MTQ1Miw0MTQ4MSw0MTUxMSw0MTU0MCw0MTU3MCw0MTU5OSw0MTYyOSw0MTY1OCw0MTY4OCw0MTcxOCw0MTc0OCw0MTc3Nyw0MTgwNyw0MTgzNiw0MTg2NSw0MTg5NCw0MTkyNCw0MTk1Myw0MTk4Myw0MjAxMiw0MjA0Miw0MjA3Miw0MjEwMiw0MjEzMSw0MjE2MSw0MjE5MCw0MjIyMCw0MjI0OSw0MjI3OSw0MjMwOCw0MjMzNyw0MjM2Nyw0MjM5Nyw0MjQyNiw0MjQ1Niw0MjQ4NSw0MjUxNSw0MjU0NSw0MjU3NCw0MjYwNCw0MjYzMyw0MjY2Miw0MjY5Miw0MjcyMSw0Mjc1MSw0Mjc4MCw0MjgxMCw0MjgzOSw0Mjg2OSw0Mjg5OSw0MjkyOSw0Mjk1OCw0Mjk4OCw0MzAxNyw0MzA0Niw0MzA3Niw0MzEwNSw0MzEzNSw0MzE2NCw0MzE5NCw0MzIyMyw0MzI1Myw0MzI4Myw0MzMxMiw0MzM0Miw0MzM3MSw0MzQwMSw0MzQzMCw0MzQ2MCw0MzQ4OSw0MzUxOSw0MzU0OCw0MzU3OCw0MzYwNyw0MzYzNyw0MzY2Niw0MzY5Niw0MzcyNiw0Mzc1NSw0Mzc4NSw0MzgxNCw0Mzg0NCw0Mzg3Myw0MzkwMyw0MzkzMiw0Mzk2Miw0Mzk5MSw0NDAyMSw0NDA1MCw0NDA4MCw0NDEwOSw0NDEzOSw0NDE2OSw0NDE5OCw0NDIyOCw0NDI1OCw0NDI4Nyw0NDMxNyw0NDM0Niw0NDM3NSw0NDQwNSw0NDQzNCw0NDQ2NCw0NDQ5Myw0NDUyMyw0NDU1Myw0NDU4Miw0NDYxMiw0NDY0MSw0NDY3MSw0NDcwMCw0NDczMCw0NDc1OSw0NDc4OCw0NDgxOCw0NDg0Nyw0NDg3Nyw0NDkwNiw0NDkzNiw0NDk2Niw0NDk5Niw0NTAyNSw0NTA1NSw0NTA4NCw0NTExNCw0NTE0Myw0NTE3Miw0NTIwMiw0NTIzMSw0NTI2MSw0NTI5MCw0NTMyMCw0NTM1MCw0NTM4MCw0NTQwOSw0NTQzOSw0NTQ2OCw0NTQ5OCw0NTUyNyw0NTU1Niw0NTU4Niw0NTYxNSw0NTY0NCw0NTY3NCw0NTcwNCw0NTczMyw0NTc2Myw0NTc5Myw0NTgyMyw0NTg1Miw0NTg4Miw0NTkxMSw0NTk0MCw0NTk3MCw0NTk5OSw0NjAyOCw0NjA1OCw0NjA4OCw0NjExNyw0NjE0Nyw0NjE3Nyw0NjIwNiw0NjIzNiw0NjI2NSw0NjI5NSw0NjMyNCw0NjM1NCw0NjM4Myw0NjQxMyw0NjQ0Miw0NjQ3Miw0NjUwMSw0NjUzMSw0NjU2MCw0NjU5MCw0NjYyMCw0NjY0OSw0NjY3OSw0NjcwOCw0NjczOCw0Njc2Nyw0Njc5Nyw0NjgyNiw0Njg1Niw0Njg4NSw0NjkxNSw0Njk0NCw0Njk3NCw0NzAwMyw0NzAzMyw0NzA2Myw0NzA5Miw0NzEyMiw0NzE1MSw0NzE4MSw0NzIxMCw0NzI0MCw0NzI2OSw0NzI5OCw0NzMyOCw0NzM1Nyw0NzM4Nyw0NzQxNyw0NzQ0Niw0NzQ3Niw0NzUwNiw0NzUzNSw0NzU2NSw0NzU5NCw0NzYyNCw0NzY1Myw0NzY4Miw0NzcxMiw0Nzc0MSw0Nzc3MSw0NzgwMCw0NzgzMCw0Nzg2MCw0Nzg5MCw0NzkxOSw0Nzk0OSw0Nzk3OCw0ODAwOCw0ODAzNyw0ODA2Niw0ODA5Niw0ODEyNSw0ODE1NSw0ODE4NCw0ODIxNCw0ODI0NCw0ODI3Myw0ODMwMyw0ODMzMyw0ODM2Miw0ODM5Miw0ODQyMSw0ODQ1MCw0ODQ4MCw0ODUwOSw0ODUzOCw0ODU2OCw0ODU5OCw0ODYyNyw0ODY1Nyw0ODY4Nyw0ODcxNyw0ODc0Niw0ODc3Niw0ODgwNSw0ODgzNCw0ODg2NCw0ODg5Myw0ODkyMiw0ODk1Miw0ODk4Miw0OTAxMSw0OTA0MSw0OTA3MSw0OTEwMCw0OTEzMCw0OTE2MCw0OTE4OSw0OTIxOCw0OTI0OCw0OTI3Nyw0OTMwNiw0OTMzNiw0OTM2NSw0OTM5NSw0OTQyNSw0OTQ1NSw0OTQ4NCw0OTUxNCw0OTU0Myw0OTU3Myw0OTYwMiw0OTYzMiw0OTY2MSw0OTY5MCw0OTcyMCw0OTc0OSw0OTc3OSw0OTgwOSw0OTgzOCw0OTg2OCw0OTg5OCw0OTkyNyw0OTk1Nyw0OTk4Niw1MDAxNiw1MDA0NSw1MDA3NSw1MDEwNCw1MDEzMyw1MDE2Myw1MDE5Miw1MDIyMiw1MDI1Miw1MDI4MSw1MDMxMSw1MDM0MCw1MDM3MCw1MDQwMCw1MDQyOSw1MDQ1OSw1MDQ4OCw1MDUxOCw1MDU0Nyw1MDU3Niw1MDYwNiw1MDYzNSw1MDY2NSw1MDY5NCw1MDcyNCw1MDc1NCw1MDc4NCw1MDgxMyw1MDg0Myw1MDg3Miw1MDkwMiw1MDkzMSw1MDk2MCw1MDk5MCw1MTAxOSw1MTA0OSw1MTA3OCw1MTEwOCw1MTEzOCw1MTE2Nyw1MTE5Nyw1MTIyNyw1MTI1Niw1MTI4Niw1MTMxNSw1MTM0NSw1MTM3NCw1MTQwMyw1MTQzMyw1MTQ2Miw1MTQ5Miw1MTUyMiw1MTU1Miw1MTU4Miw1MTYxMSw1MTY0MSw1MTY3MCw1MTY5OSw1MTcyOSw1MTc1OCw1MTc4Nyw1MTgxNiw1MTg0Niw1MTg3Niw1MTkwNiw1MTkzNiw1MTk2NSw1MTk5NSw1MjAyNSw1MjA1NCw1MjA4Myw1MjExMyw1MjE0Miw1MjE3MSw1MjIwMCw1MjIzMCw1MjI2MCw1MjI5MCw1MjMxOSw1MjM0OSw1MjM3OSw1MjQwOCw1MjQzOCw1MjQ2Nyw1MjQ5Nyw1MjUyNiw1MjU1NSw1MjU4NSw1MjYxNCw1MjY0NCw1MjY3Myw1MjcwMyw1MjczMyw1Mjc2Miw1Mjc5Miw1MjgyMiw1Mjg1MSw1Mjg4MSw1MjkxMCw1MjkzOSw1Mjk2OSw1Mjk5OCw1MzAyOCw1MzA1Nyw1MzA4Nyw1MzExNiw1MzE0Niw1MzE3Niw1MzIwNSw1MzIzNSw1MzI2NCw1MzI5NCw1MzMyNCw1MzM1Myw1MzM4Myw1MzQxMiw1MzQ0MSw1MzQ3MSw1MzUwMCw1MzUzMCw1MzU1OSw1MzU4OSw1MzYxOSw1MzY0OCw1MzY3OCw1MzcwOCw1MzczNyw1Mzc2Nyw1Mzc5Niw1MzgyNSw1Mzg1NSw1Mzg4NCw1MzkxMyw1Mzk0Myw1Mzk3Myw1NDAwMyw1NDAzMiw1NDA2Miw1NDA5Miw1NDEyMSw1NDE1MSw1NDE4MCw1NDIwOSw1NDIzOSw1NDI2OCw1NDI5Nyw1NDMyNyw1NDM1Nyw1NDM4Nyw1NDQxNiw1NDQ0Niw1NDQ3Niw1NDUwNSw1NDUzNSw1NDU2NCw1NDU5Myw1NDYyMyw1NDY1Miw1NDY4MSw1NDcxMSw1NDc0MSw1NDc3MCw1NDgwMCw1NDgzMCw1NDg1OSw1NDg4OSw1NDkxOSw1NDk0OCw1NDk3Nyw1NTAwNyw1NTAzNiw1NTA2Niw1NTA5NSw1NTEyNSw1NTE1NCw1NTE4NCw1NTIxMyw1NTI0Myw1NTI3Myw1NTMwMiw1NTMzMiw1NTM2MSw1NTM5MSw1NTQyMCw1NTQ1MCw1NTQ3OSw1NTUwOCw1NTUzOCw1NTU2Nyw1NTU5Nyw1NTYyNyw1NTY1Nyw1NTY4Niw1NTcxNiw1NTc0NSw1NTc3NSw1NTgwNCw1NTgzNCw1NTg2Myw1NTg5Miw1NTkyMiw1NTk1MSw1NTk4MSw1NjAxMSw1NjA0MCw1NjA3MCw1NjEwMCw1NjEyOSw1NjE1OSw1NjE4OCw1NjIxOCw1NjI0Nyw1NjI3Niw1NjMwNiw1NjMzNSw1NjM2NSw1NjM5NCw1NjQyNCw1NjQ1NCw1NjQ4Myw1NjUxMyw1NjU0Myw1NjU3Miw1NjYwMSw1NjYzMSw1NjY2MCw1NjY5MCw1NjcxOSw1Njc0OSw1Njc3OCw1NjgwOCw1NjgzNyw1Njg2Nyw1Njg5Nyw1NjkyNiw1Njk1Niw1Njk4NSw1NzAxNSw1NzA0NCw1NzA3NCw1NzEwMyw1NzEzMyw1NzE2Miw1NzE5Miw1NzIyMSw1NzI1MSw1NzI4MCw1NzMxMCw1NzM0MCw1NzM2OSw1NzM5OSw1NzQyOSw1NzQ1OCw1NzQ4Nyw1NzUxNyw1NzU0Niw1NzU3Niw1NzYwNSw1NzYzNCw1NzY2NCw1NzY5NCw1NzcyMyw1Nzc1Myw1Nzc4Myw1NzgxMyw1Nzg0Miw1Nzg3MSw1NzkwMSw1NzkzMCw1Nzk1OSw1Nzk4OSw1ODAxOCw1ODA0OCw1ODA3Nyw1ODEwNyw1ODEzNyw1ODE2Nyw1ODE5Niw1ODIyNiw1ODI1NSw1ODI4NSw1ODMxNCw1ODM0Myw1ODM3Myw1ODQwMiw1ODQzMiw1ODQ2MSw1ODQ5MSw1ODUyMSw1ODU1MSw1ODU4MCw1ODYxMCw1ODYzOSw1ODY2OSw1ODY5OCw1ODcyNyw1ODc1Nyw1ODc4Niw1ODgxNiw1ODg0NSw1ODg3NSw1ODkwNSw1ODkzNCw1ODk2NCw1ODk5NCw1OTAyMyw1OTA1Myw1OTA4Miw1OTExMSw1OTE0MSw1OTE3MCw1OTIwMCw1OTIyOSw1OTI1OSw1OTI4OCw1OTMxOCw1OTM0OCw1OTM3Nyw1OTQwNyw1OTQzNiw1OTQ2Niw1OTQ5NSw1OTUyNSw1OTU1NCw1OTU4NCw1OTYxMyw1OTY0Myw1OTY3Miw1OTcwMiw1OTczMSw1OTc2MSw1OTc5MSw1OTgyMCw1OTg1MCw1OTg3OSw1OTkwOSw1OTkzOSw1OTk2OCw1OTk5Nyw2MDAyNyw2MDA1Niw2MDA4Niw2MDExNSw2MDE0NSw2MDE3NCw2MDIwNCw2MDIzNCw2MDI2NCw2MDI5Myw2MDMyMyw2MDM1Miw2MDM4MSw2MDQxMSw2MDQ0MCw2MDQ2OSw2MDQ5OSw2MDUyOCw2MDU1OCw2MDU4OCw2MDYxOCw2MDY0OCw2MDY3Nyw2MDcwNyw2MDczNiw2MDc2NSw2MDc5NSw2MDgyNCw2MDg1Myw2MDg4Myw2MDkxMiw2MDk0Miw2MDk3Miw2MTAwMiw2MTAzMSw2MTA2MSw2MTA5MCw2MTEyMCw2MTE0OSw2MTE3OSw2MTIwOCw2MTIzNyw2MTI2Nyw2MTI5Niw2MTMyNiw2MTM1Niw2MTM4NSw2MTQxNSw2MTQ0NSw2MTQ3NCw2MTUwNCw2MTUzMyw2MTU2Myw2MTU5Miw2MTYyMSw2MTY1MSw2MTY4MCw2MTcxMCw2MTczOSw2MTc2OSw2MTc5OSw2MTgyOCw2MTg1OCw2MTg4OCw2MTkxNyw2MTk0Nyw2MTk3Niw2MjAwNiw2MjAzNSw2MjA2NCw2MjA5NCw2MjEyMyw2MjE1Myw2MjE4Miw2MjIxMiw2MjI0Miw2MjI3MSw2MjMwMSw2MjMzMSw2MjM2MCw2MjM5MCw2MjQxOSw2MjQ0OCw2MjQ3OCw2MjUwNyw2MjUzNyw2MjU2Niw2MjU5Niw2MjYyNSw2MjY1NSw2MjY4NSw2MjcxNSw2Mjc0NCw2Mjc3NCw2MjgwMyw2MjgzMiw2Mjg2Miw2Mjg5MSw2MjkyMSw2Mjk1MCw2Mjk4MCw2MzAwOSw2MzAzOSw2MzA2OSw2MzA5OSw2MzEyOCw2MzE1Nyw2MzE4Nyw2MzIxNiw2MzI0Niw2MzI3NSw2MzMwNSw2MzMzNCw2MzM2Myw2MzM5Myw2MzQyMyw2MzQ1Myw2MzQ4Miw2MzUxMiw2MzU0MSw2MzU3MSw2MzYwMCw2MzYzMCw2MzY1OSw2MzY4OSw2MzcxOCw2Mzc0Nyw2Mzc3Nyw2MzgwNyw2MzgzNiw2Mzg2Niw2Mzg5NSw2MzkyNSw2Mzk1NSw2Mzk4NCw2NDAxNCw2NDA0Myw2NDA3Myw2NDEwMiw2NDEzMSw2NDE2MSw2NDE5MCw2NDIyMCw2NDI0OSw2NDI3OSw2NDMwOSw2NDMzOSw2NDM2OCw2NDM5OCw2NDQyNyw2NDQ1Nyw2NDQ4Niw2NDUxNSw2NDU0NSw2NDU3NCw2NDYwMyw2NDYzMyw2NDY2Myw2NDY5Miw2NDcyMiw2NDc1Miw2NDc4Miw2NDgxMSw2NDg0MSw2NDg3MCw2NDg5OSw2NDkyOSw2NDk1OCw2NDk4Nyw2NTAxNyw2NTA0Nyw2NTA3Niw2NTEwNiw2NTEzNiw2NTE2Niw2NTE5NSw2NTIyNSw2NTI1NCw2NTI4Myw2NTMxMyw2NTM0Miw2NTM3MSw2NTQwMSw2NTQzMSw2NTQ2MCw2NTQ5MCw2NTUyMCw2NTU0OSw2NTU3OSw2NTYwOCw2NTYzOCw2NTY2Nyw2NTY5Nyw2NTcyNiw2NTc1NSw2NTc4NSw2NTgxNSw2NTg0NCw2NTg3NCw2NTkwMyw2NTkzMyw2NTk2Myw2NTk5Miw2NjAyMiw2NjA1MSw2NjA4MSw2NjExMCw2NjE0MCw2NjE2OSw2NjE5OSw2NjIyOCw2NjI1OCw2NjI4Nyw2NjMxNyw2NjM0Niw2NjM3Niw2NjQwNSw2NjQzNSw2NjQ2NSw2NjQ5NCw2NjUyNCw2NjU1Myw2NjU4Myw2NjYxMiw2NjY0MSw2NjY3MSw2NjcwMCw2NjczMCw2Njc2MCw2Njc4OSw2NjgxOSw2Njg0OSw2Njg3OCw2NjkwOCw2NjkzNyw2Njk2Nyw2Njk5Niw2NzAyNSw2NzA1NSw2NzA4NCw2NzExNCw2NzE0Myw2NzE3Myw2NzIwMyw2NzIzMyw2NzI2Miw2NzI5Miw2NzMyMSw2NzM1MSw2NzM4MCw2NzQwOSw2NzQzOSw2NzQ2OCw2NzQ5Nyw2NzUyNyw2NzU1Nyw2NzU4Nyw2NzYxNyw2NzY0Niw2NzY3Niw2NzcwNSw2NzczNSw2Nzc2NCw2Nzc5Myw2NzgyMyw2Nzg1Miw2Nzg4Miw2NzkxMSw2Nzk0MSw2Nzk3MSw2OGUzLDY4MDMwLDY4MDYwLDY4MDg5LDY4MTE5LDY4MTQ4LDY4MTc3LDY4MjA3LDY4MjM2LDY4MjY2LDY4Mjk1LDY4MzI1LDY4MzU0LDY4Mzg0LDY4NDE0LDY4NDQzLDY4NDczLDY4NTAyLDY4NTMyLDY4NTYxLDY4NTkxLDY4NjIwLDY4NjUwLDY4Njc5LDY4NzA4LDY4NzM4LDY4NzY4LDY4Nzk3LDY4ODI3LDY4ODU3LDY4ODg2LDY4OTE2LDY4OTQ2LDY4OTc1LDY5MDA0LDY5MDM0LDY5MDYzLDY5MDkyLDY5MTIyLDY5MTUyLDY5MTgxLDY5MjExLDY5MjQwLDY5MjcwLDY5MzAwLDY5MzMwLDY5MzU5LDY5Mzg4LDY5NDE4LDY5NDQ3LDY5NDc2LDY5NTA2LDY5NTM1LDY5NTY1LDY5NTk1LDY5NjI0LDY5NjU0LDY5Njg0LDY5NzEzLDY5NzQzLDY5NzcyLDY5ODAyLDY5ODMxLDY5ODYxLDY5ODkwLDY5OTE5LDY5OTQ5LDY5OTc4LDcwMDA4LDcwMDM4LDcwMDY3LDcwMDk3LDcwMTI2LDcwMTU2LDcwMTg2LDcwMjE1LDcwMjQ1LDcwMjc0LDcwMzAzLDcwMzMzLDcwMzYyLDcwMzkyLDcwNDIxLDcwNDUxLDcwNDgxLDcwNTEwLDcwNTQwLDcwNTcwLDcwNTk5LDcwNjI5LDcwNjU4LDcwNjg3LDcwNzE3LDcwNzQ2LDcwNzc2LDcwODA1LDcwODM1LDcwODY0LDcwODk0LDcwOTI0LDcwOTU0LDcwOTgzLDcxMDEzLDcxMDQyLDcxMDcxLDcxMTAxLDcxMTMwLDcxMTU5LDcxMTg5LDcxMjE4LDcxMjQ4LDcxMjc4LDcxMzA4LDcxMzM3LDcxMzY3LDcxMzk3LDcxNDI2LDcxNDU1LDcxNDg1LDcxNTE0LDcxNTQzLDcxNTczLDcxNjAyLDcxNjMyLDcxNjYyLDcxNjkxLDcxNzIxLDcxNzUxLDcxNzgxLDcxODEwLDcxODM5LDcxODY5LDcxODk4LDcxOTI3LDcxOTU3LDcxOTg2LDcyMDE2LDcyMDQ2LDcyMDc1LDcyMTA1LDcyMTM1LDcyMTY0LDcyMTk0LDcyMjIzLDcyMjUzLDcyMjgyLDcyMzExLDcyMzQxLDcyMzcwLDcyNDAwLDcyNDI5LDcyNDU5LDcyNDg5LDcyNTE4LDcyNTQ4LDcyNTc3LDcyNjA3LDcyNjM3LDcyNjY2LDcyNjk1LDcyNzI1LDcyNzU0LDcyNzg0LDcyODEzLDcyODQzLDcyODcyLDcyOTAyLDcyOTMxLDcyOTYxLDcyOTkxLDczMDIwLDczMDUwLDczMDgwLDczMTA5LDczMTM5LDczMTY4LDczMTk3LDczMjI3LDczMjU2LDczMjg2LDczMzE1LDczMzQ1LDczMzc1LDczNDA0LDczNDM0LDczNDY0LDczNDkzLDczNTIzLDczNTUyLDczNTgxLDczNjExLDczNjQwLDczNjY5LDczNjk5LDczNzI5LDczNzU4LDczNzg4LDczODE4LDczODQ4LDczODc3LDczOTA3LDczOTM2LDczOTY1LDczOTk1LDc0MDI0LDc0MDUzLDc0MDgzLDc0MTEzLDc0MTQyLDc0MTcyLDc0MjAyLDc0MjMxLDc0MjYxLDc0MjkxLDc0MzIwLDc0MzQ5LDc0Mzc5LDc0NDA4LDc0NDM3LDc0NDY3LDc0NDk3LDc0NTI2LDc0NTU2LDc0NTg2LDc0NjE1LDc0NjQ1LDc0Njc1LDc0NzA0LDc0NzMzLDc0NzYzLDc0NzkyLDc0ODIyLDc0ODUxLDc0ODgxLDc0OTEwLDc0OTQwLDc0OTY5LDc0OTk5LDc1MDI5LDc1MDU4LDc1MDg4LDc1MTE3LDc1MTQ3LDc1MTc2LDc1MjA2LDc1MjM1LDc1MjY0LDc1Mjk0LDc1MzIzLDc1MzUzLDc1MzgzLDc1NDEyLDc1NDQyLDc1NDcyLDc1NTAxLDc1NTMxLDc1NTYwLDc1NTkwLDc1NjE5LDc1NjQ4LDc1Njc4LDc1NzA3LDc1NzM3LDc1NzY2LDc1Nzk2LDc1ODI2LDc1ODU2LDc1ODg1LDc1OTE1LDc1OTQ0LDc1OTc0LDc2MDAzLDc2MDMyLDc2MDYyLDc2MDkxLDc2MTIxLDc2MTUwLDc2MTgwLDc2MjEwLDc2MjM5LDc2MjY5LDc2Mjk5LDc2MzI4LDc2MzU4LDc2Mzg3LDc2NDE2LDc2NDQ2LDc2NDc1LDc2NTA1LDc2NTM0LDc2NTY0LDc2NTkzLDc2NjIzLDc2NjUzLDc2NjgyLDc2NzEyLDc2NzQxLDc2NzcxLDc2ODAxLDc2ODMwLDc2ODU5LDc2ODg5LDc2OTE4LDc2OTQ4LDc2OTc3LDc3MDA3LDc3MDM2LDc3MDY2LDc3MDk2LDc3MTI1LDc3MTU1LDc3MTg1LDc3MjE0LDc3MjQzLDc3MjczLDc3MzAyLDc3MzMyLDc3MzYxLDc3MzkwLDc3NDIwLDc3NDUwLDc3NDc5LDc3NTA5LDc3NTM5LDc3NTY5LDc3NTk4LDc3NjI3LDc3NjU3LDc3Njg2LDc3NzE1LDc3NzQ1LDc3Nzc0LDc3ODA0LDc3ODMzLDc3ODYzLDc3ODkzLDc3OTIzLDc3OTUyLDc3OTgyLDc4MDExLDc4MDQxLDc4MDcwLDc4MDk5LDc4MTI5LDc4MTU4LDc4MTg4LDc4MjE3LDc4MjQ3LDc4Mjc3LDc4MzA3LDc4MzM2LDc4MzY2LDc4Mzk1LDc4NDI1LDc4NDU0LDc4NDgzLDc4NTEzLDc4NTQyLDc4NTcyLDc4NjAxLDc4NjMxLDc4NjYxLDc4NjkwLDc4NzIwLDc4NzUwLDc4Nzc5LDc4ODA4LDc4ODM4LDc4ODY3LDc4ODk3LDc4OTI2LDc4OTU2LDc4OTg1LDc5MDE1LDc5MDQ0LDc5MDc0LDc5MTA0LDc5MTMzLDc5MTYzLDc5MTkyLDc5MjIyLDc5MjUxLDc5MjgxLDc5MzEwLDc5MzQwLDc5MzY5LDc5Mzk5LDc5NDI4LDc5NDU4LDc5NDg3LDc5NTE3LDc5NTQ2LDc5NTc2LDc5NjA2LDc5NjM1LDc5NjY1LDc5Njk1LDc5NzI0LDc5NzUzLDc5NzgzLDc5ODEyLDc5ODQxLDc5ODcxLDc5OTAwLDc5OTMwLDc5OTYwLDc5OTkwXX0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3OTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gaSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KHUubG9jYWwuaW52YWxpZERhdGV8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdD0iIit0LCIwMDAwMDAiLnN1YnN0cmluZygwLGUtdC5sZW5ndGgpK3R9ZnVuY3Rpb24gbygpe3RoaXMuc2hvcnRZZWFyQ3V0b2ZmPSIrMTAifWZ1bmN0aW9uIHModCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0XXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfXZhciBsPXQoIm9iamVjdC1hc3NpZ24iKTtsKG4ucHJvdG90eXBlLHtpbnN0YW5jZTpmdW5jdGlvbih0LGUpe3Q9KHR8fCJncmVnb3JpYW4iKS50b0xvd2VyQ2FzZSgpLGU9ZXx8IiI7dmFyIHI9dGhpcy5fbG9jYWxDYWxzW3QrIi0iK2VdO2lmKCFyJiZ0aGlzLmNhbGVuZGFyc1t0XSYmKHI9bmV3IHRoaXMuY2FsZW5kYXJzW3RdKGUpLHRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXT1yKSwhcil0aHJvdyh0aGlzLmxvY2FsLmludmFsaWRDYWxlbmRhcnx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRDYWxlbmRhcikucmVwbGFjZSgvXHswXH0vLHQpO3JldHVybiByfSxuZXdEYXRlOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIG49KG51bGwhPXQmJnQueWVhcj90LmNhbGVuZGFyKCk6InN0cmluZyI9PXR5cGVvZiBuP3RoaXMuaW5zdGFuY2UobixpKTpuKXx8dGhpcy5pbnN0YW5jZSgpLG4ubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9fSxzdWJzdGl0dXRlQ2hpbmVzZURpZ2l0czpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49IiIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/IiI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLGwoaS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCwieSIpfSxtb250aDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fbW9udGg6dGhpcy5zZXQodCwibSIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LCJkIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyh1LmxvY2FsLmludmFsaWREYXRlfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3codS5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSkKO3ZhciBlPXRoaXMuX3llYXIhPT10Ll95ZWFyP3RoaXMuX3llYXItdC5feWVhcjp0aGlzLl9tb250aCE9PXQuX21vbnRoP3RoaXMubW9udGhPZlllYXIoKS10Lm1vbnRoT2ZZZWFyKCk6dGhpcy5fZGF5LXQuX2RheTtyZXR1cm4gMD09PWU/MDplPDA/LTE6MX0sY2FsZW5kYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXJ9LHRvSkQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KRCh0aGlzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSkQodCl9LHRvSlNEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSlNEYXRlKHRoaXMpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSlNEYXRlKHQpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybih0aGlzLnllYXIoKTwwPyItIjoiIikrYShNYXRoLmFicyh0aGlzLnllYXIoKSksNCkrIi0iK2EodGhpcy5tb250aCgpLDIpKyItIithKHRoaXMuZGF5KCksMil9fSksbChvLnByb3RvdHlwZSx7X3ZhbGlkYXRlTGV2ZWw6MCxuZXdEYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbnVsbD09dD90aGlzLnRvZGF5KCk6KHQueWVhciYmKHRoaXMuX3ZhbGlkYXRlKHQsZSxyLHUubG9jYWwuaW52YWxpZERhdGV8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkscj10LmRheSgpLGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLG5ldyBpKHRoaXMsdCxlLHIpKX0sdG9kYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tSlNEYXRlKG5ldyBEYXRlKX0sZXBvY2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSx1LmxvY2FsLmludmFsaWRZZWFyfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLnllYXIoKTwwP3RoaXMubG9jYWwuZXBvY2hzWzBdOnRoaXMubG9jYWwuZXBvY2hzWzFdfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSx1LmxvY2FsLmludmFsaWRZZWFyfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybihlLnllYXIoKTwwPyItIjoiIikrYShNYXRoLmFicyhlLnllYXIoKSksNCl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZFllYXJ8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTJ9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZE1vbnRofHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4oci5tb250aCgpK3RoaXMubW9udGhzSW5ZZWFyKHIpLXRoaXMuZmlyc3RNb250aCkldGhpcy5tb250aHNJblllYXIocikrdGhpcy5taW5Nb250aH0sZnJvbU1vbnRoT2ZZZWFyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9KGUrdGhpcy5maXJzdE1vbnRoLTIqdGhpcy5taW5Nb250aCkldGhpcy5tb250aHNJblllYXIodCkrdGhpcy5taW5Nb250aDtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxyLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZE1vbnRofHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKSxyfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSx1LmxvY2FsLmludmFsaWRZZWFyfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybiB0aGlzLmxlYXBZZWFyKGUpPzM2NjozNjV9LGRheU9mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsdS5sb2NhbC5pbnZhbGlkRGF0ZXx8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4gbi50b0pEKCktdGhpcy5uZXdEYXRlKG4ueWVhcigpLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKG4ueWVhcigpLHRoaXMubWluTW9udGgpLHRoaXMubWluRGF5KS50b0pEKCkrMX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA3fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLHUubG9jYWwuaW52YWxpZERhdGV8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuKE1hdGguZmxvb3IodGhpcy50b0pEKG4pKSsyKSV0aGlzLmRheXNJbldlZWsoKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsdS5sb2NhbC5pbnZhbGlkRGF0ZXx8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx7fX0sYWRkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZERhdGV8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksdGhpcy5fY29ycmVjdEFkZCh0LHRoaXMuX2FkZCh0LGUsciksZSxyKX0sX2FkZDpmdW5jdGlvbih0LGUscil7aWYodGhpcy5fdmFsaWRhdGVMZXZlbCsrLCJkIj09PXJ8fCJ3Ij09PXIpe3ZhciBuPXQudG9KRCgpK2UqKCJ3Ij09PXI/dGhpcy5kYXlzSW5XZWVrKCk6MSksaT10LmNhbGVuZGFyKCkuZnJvbUpEKG4pO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sW2kueWVhcigpLGkubW9udGgoKSxpLmRheSgpXX10cnl7dmFyIGE9dC55ZWFyKCkrKCJ5Ij09PXI/ZTowKSxvPXQubW9udGhPZlllYXIoKSsoIm0iPT09cj9lOjApLGk9dC5kYXkoKTsieSI9PT1yPyh0Lm1vbnRoKCkhPT10aGlzLmZyb21Nb250aE9mWWVhcihhLG8pJiYobz10aGlzLm5ld0RhdGUoYSx0Lm1vbnRoKCksdGhpcy5taW5EYXkpLm1vbnRoT2ZZZWFyKCkpLG89TWF0aC5taW4obyx0aGlzLm1vbnRoc0luWWVhcihhKSksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpOiJtIj09PXImJighZnVuY3Rpb24odCl7Zm9yKDtvPHQubWluTW9udGg7KWEtLSxvKz10Lm1vbnRoc0luWWVhcihhKTtmb3IodmFyIGU9dC5tb250aHNJblllYXIoYSk7bz5lLTErdC5taW5Nb250aDspYSsrLG8tPWUsZT10Lm1vbnRoc0luWWVhcihhKX0odGhpcyksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpO3ZhciBzPVthLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbyksaV07cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxzfWNhdGNoKHQpe3Rocm93IHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSx0fX0sX2NvcnJlY3RBZGQ6ZnVuY3Rpb24odCxlLHIsbil7aWYoISh0aGlzLmhhc1llYXJaZXJvfHwieSIhPT1uJiYibSIhPT1ufHwwIT09ZVswXSYmdC55ZWFyKCk+MD09ZVswXT4wKSl7dmFyIGk9e3k6WzEsMSwieSJdLG06WzEsdGhpcy5tb250aHNJblllYXIoLTEpLCJtIl0sdzpbdGhpcy5kYXlzSW5XZWVrKCksdGhpcy5kYXlzSW5ZZWFyKC0xKSwiZCJdLGQ6WzEsdGhpcy5kYXlzSW5ZZWFyKC0xKSwiZCJdfVtuXSxhPXI8MD8tMToxO2U9dGhpcy5fYWRkKHQscippWzBdK2EqaVsxXSxpWzJdKX1yZXR1cm4gdC5kYXRlKGVbMF0sZVsxXSxlWzJdKX0sc2V0OmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksdS5sb2NhbC5pbnZhbGlkRGF0ZXx8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTt2YXIgbj0ieSI9PT1yP2U6dC55ZWFyKCksaT0ibSI9PT1yP2U6dC5tb250aCgpLGE9ImQiPT09cj9lOnQuZGF5KCk7cmV0dXJuInkiIT09ciYmIm0iIT09cnx8KGE9TWF0aC5taW4oYSx0aGlzLmRheXNJbk1vbnRoKG4saSkpKSx0LmRhdGUobixpLGEpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZUxldmVsKys7dmFyIG49dGhpcy5oYXNZZWFyWmVyb3x8MCE9PXQ7aWYobil7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSx0aGlzLm1pbkRheSk7bj1lPj10aGlzLm1pbk1vbnRoJiZlLXRoaXMubWluTW9udGg8dGhpcy5tb250aHNJblllYXIoaSkmJnI+PXRoaXMubWluRGF5JiZyLXRoaXMubWluRGF5PHRoaXMuZGF5c0luTW9udGgoaSl9cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxufSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsdS5sb2NhbC5pbnZhbGlkRGF0ZXx8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4gdS5pbnN0YW5jZSgpLmZyb21KRCh0aGlzLnRvSkQobikpLnRvSlNEYXRlKCl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbUpEKHUuaW5zdGFuY2UoKS5mcm9tSlNEYXRlKHQpLnRvSkQoKSl9LF92YWxpZGF0ZTpmdW5jdGlvbih0LGUscixuKXtpZih0LnllYXIpe2lmKDA9PT10aGlzLl92YWxpZGF0ZUxldmVsJiZ0aGlzLm5hbWUhPT10LmNhbGVuZGFyKCkubmFtZSl0aHJvdyh1LmxvY2FsLmRpZmZlcmVudENhbGVuZGFyc3x8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSkucmVwbGFjZSgvXHsxXH0vLHQuY2FsZW5kYXIoKS5sb2NhbC5uYW1lKTtyZXR1cm4gdH10cnl7aWYoMT09PSsrdGhpcy5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuaXNWYWxpZCh0LGUscikpdGhyb3cgbi5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0saX1jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19fSkscy5wcm90b3R5cGU9bmV3IG8sbChzLnByb3RvdHlwZSx7bmFtZToiR3JlZ29yaWFuIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJHcmVnb3JpYW4iLGVwb2NoczpbIkJDRSIsIkNFIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSx1LmxvY2FsLmludmFsaWRZZWFyfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKTtyZXR1cm4gdCU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZE1vbnRofHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscix1LmxvY2FsLmludmFsaWREYXRlfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpO3I9ZSsxK3ItTWF0aC5mbG9vcihyLzQpO3ZhciBuPXIrMTUyNCxpPU1hdGguZmxvb3IoKG4tMTIyLjEpLzM2NS4yNSksYT1NYXRoLmZsb29yKDM2NS4yNSppKSxvPU1hdGguZmxvb3IoKG4tYSkvMzAuNjAwMSkscz1uLWEtTWF0aC5mbG9vcigzMC42MDAxKm8pLGw9by0obz4xMy41PzEzOjEpLHU9aS0obD4yLjU/NDcxNjo0NzE1KTtyZXR1cm4gdTw9MCYmdS0tLHRoaXMubmV3RGF0ZSh1LGwscyl9LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscix1LmxvY2FsLmludmFsaWREYXRlfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLGk9bmV3IERhdGUobi55ZWFyKCksbi5tb250aCgpLTEsbi5kYXkoKSk7cmV0dXJuIGkuc2V0SG91cnMoMCksaS5zZXRNaW51dGVzKDApLGkuc2V0U2Vjb25kcygwKSxpLnNldE1pbGxpc2Vjb25kcygwKSxpLnNldEhvdXJzKGkuZ2V0SG91cnMoKT4xMj9pLmdldEhvdXJzKCkrMjowKSxpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5ld0RhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSsxLHQuZ2V0RGF0ZSgpKX19KTt2YXIgdT1lLmV4cG9ydHM9bmV3IG47dS5jZGF0ZT1pLHUuYmFzZUNhbGVuZGFyPW8sdS5jYWxlbmRhcnMuZ3JlZ29yaWFuPXN9LHsib2JqZWN0LWFzc2lnbiI6NDY4fV0sNTgwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpLGk9dCgiLi9tYWluIik7bihpLnJlZ2lvbmFsT3B0aW9uc1siIl0se2ludmFsaWRBcmd1bWVudHM6IkludmFsaWQgYXJndW1lbnRzIixpbnZhbGlkRm9ybWF0OiJDYW5ub3QgZm9ybWF0IGEgZGF0ZSBmcm9tIGFub3RoZXIgY2FsZW5kYXIiLG1pc3NpbmdOdW1iZXJBdDoiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gezB9Iix1bmtub3duTmFtZUF0OiJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gezB9Iix1bmV4cGVjdGVkTGl0ZXJhbEF0OiJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gezB9Iix1bmV4cGVjdGVkVGV4dDoiQWRkaXRpb25hbCB0ZXh0IGZvdW5kIGF0IGVuZCJ9KSxpLmxvY2FsPWkucmVnaW9uYWxPcHRpb25zWyIiXSxuKGkuY2RhdGUucHJvdG90eXBlLHtmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYoZT10LHQ9IiIpLHRoaXMuX2NhbGVuZGFyLmZvcm1hdERhdGUodHx8IiIsdGhpcyxlKX19KSxuKGkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZSx7VU5JWF9FUE9DSDppLmluc3RhbmNlKCkubmV3RGF0ZSgxOTcwLDEsMSkudG9KRCgpLFNFQ1NfUEVSX0RBWTo4NjQwMCxUSUNLU19FUE9DSDppLmluc3RhbmNlKCkuamRFcG9jaCxUSUNLU19QRVJfREFZOjg2NGU5LEFUT006Inl5eXktbW0tZGQiLENPT0tJRToiRCwgZGQgTSB5eXl5IixGVUxMOiJERCwgTU0gZCwgeXl5eSIsSVNPXzg2MDE6Inl5eXktbW0tZGQiLEpVTElBTjoiSiIsUkZDXzgyMjoiRCwgZCBNIHl5IixSRkNfODUwOiJERCwgZGQtTS15eSIsUkZDXzEwMzY6IkQsIGQgTSB5eSIsUkZDXzExMjM6IkQsIGQgTSB5eXl5IixSRkNfMjgyMjoiRCwgZCBNIHl5eXkiLFJTUzoiRCwgZCBNIHl5IixUSUNLUzoiISIsVElNRVNUQU1QOiJAIixXM0M6Inl5eXktbW0tZGQiLGZvcm1hdERhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCYmKHI9ZSxlPXQsdD0iIiksIWUpcmV0dXJuIiI7aWYoZS5jYWxlbmRhcigpIT09dGhpcyl0aHJvdyBpLmxvY2FsLmludmFsaWRGb3JtYXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRm9ybWF0O3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0LHI9cnx8e307Zm9yKHZhciBuPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LGE9ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxvPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxzPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCxsPXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLHU9KHIuY2FsY3VsYXRlV2Vla3x8dGhpcy5sb2NhbC5jYWxjdWxhdGVXZWVrLGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7dituPHQubGVuZ3RoJiZ0LmNoYXJBdCh2K24pPT09ZTspbisrO3JldHVybiB2Kz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0pLGM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9IiIrZTtpZih1KHQsbikpZm9yKDtpLmxlbmd0aDxyOylpPSIwIitpO3JldHVybiBpfSxoPXRoaXMsZj10aGlzLmxvY2FsLmRpZ2l0cyxkPWZ1bmN0aW9uKHQpe3JldHVybiByLmxvY2FsTnVtYmVycyYmZj9mKHQpOnR9LHA9IiIsbT0hMSx2PTA7djx0Lmxlbmd0aDt2KyspaWYobSkiJyIhPT10LmNoYXJBdCh2KXx8dSgiJyIpP3ArPXQuY2hhckF0KHYpOm09ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQodikpe2Nhc2UiZCI6cCs9ZChjKCJkIixlLmRheSgpLDIpKTticmVhaztjYXNlIkQiOnArPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB1KHQpP25bZV06cltlXX0oIkQiLGUuZGF5T2ZXZWVrKCksbixhKTticmVhaztjYXNlIm8iOnArPWMoIm8iLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpwKz1jKCJ3IixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOnArPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvP28uY2FsbChoLHQsdSgibSIpKTpkKGMoIm0iLHQubW9udGgoKSwyKSl9KGUpO2JyZWFrO2Nhc2UiTSI6cCs9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iZnVuY3Rpb24iPT10eXBlb2YgbD9sLmNhbGwoaCx0KTpsW3QubW9udGgoKS1oLm1pbk1vbnRoXToiZnVuY3Rpb24iPT10eXBlb2Ygcz9zLmNhbGwoaCx0KTpzW3QubW9udGgoKS1oLm1pbk1vbnRoXX0oZSx1KCJNIikpO2JyZWFrO2Nhc2UieSI6cCs9dSgieSIsMik/ZS55ZWFyKCk6KGUueWVhcigpJTEwMDwxMD8iMCI6IiIpK2UueWVhcigpJTEwMDticmVhaztjYXNlIlkiOnUoIlkiLDIpLHArPWUuZm9ybWF0WWVhcigpO2JyZWFrO2Nhc2UiSiI6cCs9ZS50b0pEKCk7YnJlYWs7Y2FzZSJAIjpwKz0oZS50b0pEKCktdGhpcy5VTklYX0VQT0NIKSp0aGlzLlNFQ1NfUEVSX0RBWTticmVhaztjYXNlIiEiOnArPShlLnRvSkQoKS10aGlzLlRJQ0tTX0VQT0NIKSp0aGlzLlRJQ0tTX1BFUl9EQVk7YnJlYWs7Y2FzZSInIjp1KCInIik/cCs9IiciOm09ITA7YnJlYWs7ZGVmYXVsdDpwKz10LmNoYXJBdCh2KX1yZXR1cm4gcH0scGFyc2VEYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT1lKXRocm93IGkubG9jYWwuaW52YWxpZEFyZ3VtZW50c3x8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRBcmd1bWVudHM7aWYoIiI9PT0oZT0ib2JqZWN0Ij09dHlwZW9mIGU/ZS50b1N0cmluZygpOmUrIiIpKXJldHVybiBudWxsO3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0LHI9cnx8e307dmFyIG49ci5zaG9ydFllYXJDdXRvZmZ8fHRoaXMuc2hvcnRZZWFyQ3V0b2ZmO249InN0cmluZyIhPXR5cGVvZiBuP246dGhpcy50b2RheSgpLnllYXIoKSUxMDArcGFyc2VJbnQobiwxMCk7Zm9yKHZhciBhPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LG89ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxzPXIucGFyc2VNb250aHx8dGhpcy5sb2NhbC5wYXJzZU1vbnRoLGw9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLHU9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LGM9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMsaD0tMSxmPS0xLGQ9LTEscD0tMSxtPS0xLHY9ITEsZz0hMSx5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7aytuPHQubGVuZ3RoJiZ0LmNoYXJBdChrK24pPT09ZTspbisrO3JldHVybiBrKz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0sYj1mdW5jdGlvbih0LHIpe3ZhciBuPXkodCxyKSxhPVsyLDMsbj80OjIsbj80OjIsMTAsMTEsMjBdWyJveVlKQCEiLmluZGV4T2YodCkrMV0sbz1uZXcgUmVnRXhwKCJeLT9cXGR7MSwiK2ErIn0iKSxzPWUuc3Vic3RyaW5nKE0pLm1hdGNoKG8pO2lmKCFzKXRocm93KGkubG9jYWwubWlzc2luZ051bWJlckF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0ubWlzc2luZ051bWJlckF0KS5yZXBsYWNlKC9cezBcfS8sTSk7cmV0dXJuIE0rPXNbMF0ubGVuZ3RoLHBhcnNlSW50KHNbMF0sMTApfSx4PXRoaXMsXz1mdW5jdGlvbih0LHIsbixhKXtmb3IodmFyIG89eSh0LGEpP246cixzPTA7czxvLmxlbmd0aDtzKyspaWYoZS5zdWJzdHIoTSxvW3NdLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PW9bc10udG9Mb3dlckNhc2UoKSlyZXR1cm4gTSs9b1tzXS5sZW5ndGgscyt4Lm1pbk1vbnRoO3Rocm93KGkubG9jYWwudW5rbm93bk5hbWVBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLnVua25vd25OYW1lQXQpLnJlcGxhY2UoL1x7MFx9LyxNKX0sdz1mdW5jdGlvbigpe2lmKGUuY2hhckF0KE0pIT09dC5jaGFyQXQoaykpdGhyb3coaS5sb2NhbC51bmV4cGVjdGVkTGl0ZXJhbEF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZExpdGVyYWxBdCkucmVwbGFjZSgvXHswXH0vLE0pO00rK30sTT0wLGs9MDtrPHQubGVuZ3RoO2srKylpZihnKSInIiE9PXQuY2hhckF0KGspfHx5KCInIik/dygpOmc9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoaykpe2Nhc2UiZCI6cD1iKCJkIik7YnJlYWs7Y2FzZSJEIjpfKCJEIixhLG8pO2JyZWFrO2Nhc2UibyI6bT1iKCJvIik7YnJlYWs7Y2FzZSJ3IjpiKCJ3Iik7YnJlYWs7Y2FzZSJtIjpkPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpe3koIm0iKTt2YXIgdD1sLmNhbGwoeCxlLnN1YnN0cmluZyhNKSk7cmV0dXJuIE0rPXQubGVuZ3RoLHR9cmV0dXJuIGIoIm0iKX0oKTticmVhaztjYXNlIk0iOmQ9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYyl7dmFyIHQ9eSgiTSIpP2MuY2FsbCh4LGUuc3Vic3RyaW5nKE0pKTp1LmNhbGwoeCxlLnN1YnN0cmluZyhNKSk7cmV0dXJuIE0rPXQubGVuZ3RoLHR9cmV0dXJuIF8oIk0iLHUsYyl9KCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgQT1rO3Y9IXkoInkiLDIpLGs9QSxmPWIoInkiLDIpO2JyZWFrO2Nhc2UiWSI6Zj1iKCJZIiwyKTticmVhaztjYXNlIkoiOmg9YigiSiIpKy41LCIuIj09PWUuY2hhckF0KE0pJiYoTSsrLGIoIkoiKSk7YnJlYWs7Y2FzZSJAIjpoPWIoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpoPWIoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOk09ZS5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/dygpOmc9ITA7YnJlYWs7ZGVmYXVsdDp3KCl9aWYoTTxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1mP2Y9dGhpcy50b2RheSgpLnllYXIoKTpmPDEwMCYmdiYmKGYrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGY8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIGQmJihkPXMuY2FsbCh0aGlzLGYsZCkpLG0+LTEpe2Q9MSxwPW07Zm9yKHZhciBUPXRoaXMuZGF5c0luTW9udGgoZixkKTtwPlQ7VD10aGlzLmRheXNJbk1vbnRoKGYsZCkpZCsrLHAtPVR9cmV0dXJuIGg+LTE/dGhpcy5mcm9tSkQoaCk6dGhpcy5uZXdEYXRlKGYsZCxwKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihpPW4sbj0iIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe310PXQudG9Mb3dlckNhc2UoKTtmb3IodmFyIGU9KHQubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fCJkIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOiJudW1iZXIiPT10eXBlb2YgdD9pc05hTih0KXx8dD09PTEvMHx8dD09PS0xLzA/ZTphLnRvZGF5KCkuYWRkKHQsImQiKTphLm5ld0RhdGUodCl9fSl9LHsiLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJjd2lzZS1jb21waWxlciIpKHthcmdzOlsiYXJyYXkiLHtvZmZzZXQ6WzFdLGFycmF5OjB9LCJzY2FsYXIiLCJzY2FsYXIiLCJpbmRleCJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYSA9IF9pbmxpbmVfMV9hcmcwXyAtIF9pbmxpbmVfMV9hcmczX1xuICAgICAgICB2YXIgX2lubGluZV8xX2RiID0gX2lubGluZV8xX2FyZzFfIC0gX2lubGluZV8xX2FyZzNfXG4gICAgICAgIGlmKChfaW5saW5lXzFfZGEgPj0gMCkgIT09IChfaW5saW5lXzFfZGIgPj0gMCkpIHtcbiAgICAgICAgICBfaW5saW5lXzFfYXJnMl8ucHVzaChfaW5saW5lXzFfYXJnNF9bMF0gKyAwLjUgKyAwLjUgKiAoX2lubGluZV8xX2RhICsgX2lubGluZV8xX2RiKSAvIChfaW5saW5lXzFfZGEgLSBfaW5saW5lXzFfZGIpKVxuICAgICAgICB9XG4gICAgICB9IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9kYSIsIl9pbmxpbmVfMV9kYiJdfSxmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTA4fV0sNTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1bXTtyZXR1cm4gZT0rZXx8MCxpKHQuaGkodC5zaGFwZVswXS0xKSxyLGUpLHJ9ZS5leHBvcnRzPW47dmFyIGk9dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjU4MX1dLDU4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2NvbW1vbl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfXM9c3x8e30sbD1sfHx7fTt2YXIgYz11KCJ2aXNpYmxlIiwhbC5pdGVtSXNOb3RQbGFpbk9iamVjdCksaD11KCJjbGlja3Rvc2hvdyIpO2lmKCFjJiYhaClyZXR1cm4gZTthKHQsZSxyLHUpO2Zvcih2YXIgZj1lLnNob3dhcnJvdyxkPVsieCIsInkiXSxwPVstMTAsLTMwXSxtPXtfZnVsbExheW91dDpyfSx2PTA7djwyO3YrKyl7dmFyIGc9ZFt2XSx5PWkuY29lcmNlUmVmKHQsZSxtLGcsIiIsInBhcGVyIik7aWYoaS5jb2VyY2VQb3NpdGlvbihlLG0sdSx5LGcsLjUpLGYpe3ZhciBiPSJhIitnLHg9aS5jb2VyY2VSZWYodCxlLG0sYiwicGl4ZWwiKTsicGl4ZWwiIT09eCYmeCE9PXkmJih4PWVbYl09InBpeGVsIik7dmFyIF89InBpeGVsIj09PXg/cFt2XTouNDtpLmNvZXJjZVBvc2l0aW9uKGUsbSx1LHgsYixfKX11KGcrImFuY2hvciIpLHUoZysic2hpZnQiKX1pZihuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxmJiZuLm5vbmVPckFsbCh0LGUsWyJheCIsImF5Il0pLGgpe3ZhciB3PXUoInhjbGljayIpLE09dSgieWNsaWNrIik7ZS5feGNsaWNrPXZvaWQgMD09PXc/ZS54OmkuY2xlYW5Qb3NpdGlvbih3LG0sZS54cmVmKSxlLl95Y2xpY2s9dm9pZCAwPT09TT9lLnk6aS5jbGVhblBvc2l0aW9uKE0sbSxlLnlyZWYpfXJldHVybiBlfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi9hdHRyaWJ1dGVzIjo1ODUsIi4vY29tbW9uX2RlZmF1bHRzIjo1ODh9XSw1ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPVt7cGF0aDoiIixiYWNrb2ZmOjB9LHtwYXRoOiJNLTIuNCwtM1YzTDAuNiwwWiIsYmFja29mZjouNn0se3BhdGg6Ik0tMy43LC0yLjVWMi41TDEuMywwWiIsYmFja29mZjoxLjN9LHtwYXRoOiJNLTQuNDUsLTNMLTEuNjUsLTAuMlYwLjJMLTQuNDUsM0wxLjU1LDBaIixiYWNrb2ZmOjEuNTV9LHtwYXRoOiJNLTIuMiwtMi4yTC0wLjIsLTAuMlYwLjJMLTIuMiwyLjJMLTEuNCwzTDEuNiwwTC0xLjQsLTNaIixiYWNrb2ZmOjEuNn0se3BhdGg6Ik0tNC40LC0yLjFMLTAuNiwtMC4yVjAuMkwtNC40LDIuMUwtNCwzTDIsMEwtNCwtM1oiLGJhY2tvZmY6Mn0se3BhdGg6Ik0yLDBBMiwyIDAgMSwxIDAsLTJBMiwyIDAgMCwxIDIsMFoiLGJhY2tvZmY6MH0se3BhdGg6Ik0yLDJWLTJILTJWMloiLGJhY2tvZmY6MH1dfSx7fV0sNTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXJyb3dfcGF0aHMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtfaXNMaW5rZWRUb0FycmF5OiJhbm5vdGF0aW9uIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmcifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OjB9LGZvbnQ6byh7fSxpLHt9KSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGx9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiY2VudGVyIn0sdmFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9LGJvcmRlcnBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2Fycm93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxhcnJvd2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MX0sYXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjF9LGFycm93d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xfSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LGF4Ont2YWxUeXBlOiJhbnkifSxheTp7dmFsVHlwZToiYW55In0sYXhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV19LGF5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldfSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV19LHg6e3ZhbFR5cGU6ImFueSJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJhdXRvIn0seHNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldfSx5Ont2YWxUeXBlOiJhbnkifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byJ9LHlzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGNsaWNrdG9zaG93Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJvbm9mZiIsIm9ub3V0Il0sZGZsdDohMX0seGNsaWNrOnt2YWxUeXBlOiJhbnkifSx5Y2xpY2s6e3ZhbFR5cGU6ImFueSJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IifSxmb250Om8oe30saSx7fSl9LGNhcHR1cmVldmVudHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSxfZGVwcmVjYXRlZDp7cmVmOnt2YWxUeXBlOiJzdHJpbmcifX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzY5LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi9hcnJvd19wYXRocyI6NTg0fV0sNTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5fZnVsbExheW91dDtpLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcixuLGk9YS5nZXRGcm9tSWQodCxlLnhyZWYpLG89YS5nZXRGcm9tSWQodCxlLnlyZWYpLHM9MyplLmFycm93c2l6ZSplLmFycm93d2lkdGh8fDA7aSYmaS5hdXRvcmFuZ2UmJihyPXMrZS54c2hpZnQsbj1zLWUueHNoaWZ0LGUuYXhyZWY9PT1lLnhyZWY/KGEuZXhwYW5kKGksW2kucjJjKGUueCldLHtwcGFkcGx1czpyLHBwYWRtaW51czpufSksYS5leHBhbmQoaSxbaS5yMmMoZS5heCldLHtwcGFkcGx1czplLl94cGFkcGx1cyxwcGFkbWludXM6ZS5feHBhZG1pbnVzfSkpOmEuZXhwYW5kKGksW2kucjJjKGUueCldLHtwcGFkcGx1czpNYXRoLm1heChlLl94cGFkcGx1cyxyKSxwcGFkbWludXM6TWF0aC5tYXgoZS5feHBhZG1pbnVzLG4pfSkpLG8mJm8uYXV0b3JhbmdlJiYocj1zLWUueXNoaWZ0LG49cytlLnlzaGlmdCxlLmF5cmVmPT09ZS55cmVmPyhhLmV4cGFuZChvLFtvLnIyYyhlLnkpXSx7cHBhZHBsdXM6cixwcGFkbWludXM6bn0pLGEuZXhwYW5kKG8sW28ucjJjKGUuYXkpXSx7cHBhZHBsdXM6ZS5feXBhZHBsdXMscHBhZG1pbnVzOmUuX3lwYWRtaW51c30pKTphLmV4cGFuZChvLFtvLnIyYyhlLnkpXSx7cHBhZHBsdXM6TWF0aC5tYXgoZS5feXBhZHBsdXMscikscHBhZG1pbnVzOk1hdGgubWF4KGUuX3lwYWRtaW51cyxuKX0pKX0pfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vZHJhdyIpLmRyYXc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1pLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucyk7aWYoci5sZW5ndGgmJnQuX2Z1bGxEYXRhLmxlbmd0aCl7dmFyIHM9e307ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3NbdC54cmVmXT0hMCxzW3QueXJlZl09ITB9KTtpZihhLmxpc3QodCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmF1dG9yYW5nZSYmc1t0Ll9pZF19KS5sZW5ndGgpcmV0dXJuIGkuc3luY09yQXN5bmMoW28sbl0sdCl9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi9kcmF3Ijo1OTF9XSw1ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWEodCxlKTtyZXR1cm4gci5vbi5sZW5ndGg+MHx8ci5leHBsaWNpdE9mZi5sZW5ndGg+MH1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbj1hKHQsZSksaT1uLm9uLG89bi5vZmYuY29uY2F0KG4uZXhwbGljaXRPZmYpLGw9e307aWYoaS5sZW5ndGh8fG8ubGVuZ3RoKXtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWxbImFubm90YXRpb25zWyIraVtyXSsiXS52aXNpYmxlIl09ITA7Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylsWyJhbm5vdGF0aW9uc1siK29bcl0rIl0udmlzaWJsZSJdPSExO3JldHVybiBzLnVwZGF0ZSh0LHt9LGwpfX1mdW5jdGlvbiBhKHQsZSl7dmFyIHIsbixpLGEscyxsLHUsYyxoPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1bXSxkPVtdLHA9W10sbT0oZXx8W10pLmxlbmd0aDtmb3Iocj0wO3I8aC5sZW5ndGg7cisrKWlmKGk9aFtyXSxhPWkuY2xpY2t0b3Nob3cpe2ZvcihuPTA7bjxtO24rKylpZihzPWVbbl0sbD1zLnhheGlzLHU9cy55YXhpcyxsLl9pZD09PWkueHJlZiYmdS5faWQ9PT1pLnlyZWYmJmwuZDJyKHMueCk9PT1vKGkuX3hjbGljayxsKSYmdS5kMnIocy55KT09PW8oaS5feWNsaWNrLHUpKXtjPWkudmlzaWJsZT8ib25vdXQiPT09YT9kOnA6ZixjLnB1c2gocik7YnJlYWt9bj09PW0mJmkudmlzaWJsZSYmIm9ub3V0Ij09PWEmJmQucHVzaChyKX1yZXR1cm57b246ZixvZmY6ZCxleHBsaWNpdE9mZjpwfX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuImxvZyI9PT1lLnR5cGU/ZS5sMnIodCk6ZS5kMnIodCl9dmFyIHM9dCgiLi4vLi4vcGxvdGx5Iik7ZS5leHBvcnRzPXtoYXNDbGlja1RvU2hvdzpuLG9uQ2xpY2s6aX19LHsiLi4vLi4vcGxvdGx5Ijo3NTl9XSw1ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKCJvcGFjaXR5Iik7dmFyIG89YSgiYmdjb2xvciIpLHM9YSgiYm9yZGVyY29sb3IiKSxsPWkub3BhY2l0eShzKTthKCJib3JkZXJwYWQiKTt2YXIgdT1hKCJib3JkZXJ3aWR0aCIpLGM9YSgic2hvd2Fycm93Iik7YSgidGV4dCIsYz8iICI6Im5ldyB0ZXh0IiksYSgidGV4dGFuZ2xlIiksbi5jb2VyY2VGb250KGEsImZvbnQiLHIuZm9udCksYSgid2lkdGgiKSxhKCJhbGlnbiIpLGEoImhlaWdodCIpJiZhKCJ2YWxpZ24iKSxjJiYoYSgiYXJyb3djb2xvciIsbD9lLmJvcmRlcmNvbG9yOmkuZGVmYXVsdExpbmUpLGEoImFycm93aGVhZCIpLGEoImFycm93c2l6ZSIpLGEoImFycm93d2lkdGgiLDIqKGwmJnV8fDEpKSxhKCJzdGFuZG9mZiIpKTt2YXIgaD1hKCJob3ZlcnRleHQiKSxmPXIuaG92ZXJsYWJlbHx8e307aWYoaCl7dmFyIGQ9YSgiaG92ZXJsYWJlbC5iZ2NvbG9yIixmLmJnY29sb3J8fChpLm9wYWNpdHkobyk/aS5yZ2Iobyk6aS5kZWZhdWx0TGluZSkpLHA9YSgiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsZi5ib3JkZXJjb2xvcnx8aS5jb250cmFzdChkKSk7bi5jb2VyY2VGb250KGEsImhvdmVybGFiZWwuZm9udCIse2ZhbWlseTpmLmZvbnQuZmFtaWx5LHNpemU6Zi5mb250LnNpemUsY29sb3I6Zi5mb250LmNvbG9yfHxwfSl9YSgiY2FwdHVyZWV2ZW50cyIsISFoKX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL2NvbG9yIjo2MDJ9XSw1ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyh0KXt2YXIgcj11W3RdLG89bnVsbDtvPXM/aShyLGUucmFuZ2UpOk1hdGgucG93KDEwLHIpLG4obyl8fChvPW51bGwpLGEoYyt0LG8pfWU9ZXx8e307dmFyIHM9ImxvZyI9PT1yJiYibGluZWFyIj09PWUudHlwZSxsPSJsaW5lYXIiPT09ciYmImxvZyI9PT1lLnR5cGU7aWYoc3x8bClmb3IodmFyIHUsYyxoPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1lLl9pZC5jaGFyQXQoMCksZD0wO2Q8aC5sZW5ndGg7ZCsrKXU9aFtkXSxjPSJhbm5vdGF0aW9uc1siK2QrIl0uIix1W2YrInJlZiJdPT09ZS5faWQmJm8oZiksdVsiYSIrZisicmVmIl09PT1lLl9pZCYmbygiYSIrZil9fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjc0NCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDU5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxpPXQoIi4vYW5ub3RhdGlvbl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe24odCxlLHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOml9KX19LHsiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NjEsIi4vYW5ub3RhdGlvbl9kZWZhdWx0cyI6NTgzfV0sNTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbiIpLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWUuYW5ub3RhdGlvbnNbcl0udmlzaWJsZSYmaSh0LHIpO3JldHVybiBsLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1yLmFubm90YXRpb25zW2VdfHx7fTthKHQsbixlLCExLGMuZ2V0RnJvbUlkKHQsbi54cmVmKSxjLmdldEZyb21JZCh0LG4ueXJlZikpfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe2Z1bmN0aW9uIGwocil7cmV0dXJuIHIuY2FsbChmLmZvbnQsRikuYXR0cih7InRleHQtYW5jaG9yIjp7bGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifVtlLmFsaWduXXx8Im1pZGRsZSJ9KSxwLmNvbnZlcnRUb1RzcGFucyhyLHQsYykscn1mdW5jdGlvbiBjKCl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiJhdXRvIj09PWUmJihlPXQ8MS8zPyJsZWZ0Ijp0PjIvMz8icmlnaHQiOiJjZW50ZXIiKSx7Y2VudGVyOjAsbWlkZGxlOjAsbGVmdDouNSxib3R0b206LS41LHJpZ2h0Oi0uNSx0b3A6LjV9W2VdfXZhciBvPWouc2VsZWN0QWxsKCJhIik7aWYoMT09PW8uc2l6ZSgpJiZvLnRleHQoKT09PWoudGV4dCgpKXtDLmluc2VydCgiYSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjpvLmF0dHIoInhsaW5rOmhyZWYiKSwieGxpbms6eGxpbms6c2hvdyI6by5hdHRyKCJ4bGluazpzaG93Iil9KS5zdHlsZSh7Y3Vyc29yOiJwb2ludGVyIn0pLm5vZGUoKS5hcHBlbmRDaGlsZChQLm5vZGUoKSl9dmFyIGw9Qy5zZWxlY3QoIi5hbm5vdGF0aW9uLXRleHQtbWF0aC1ncm91cCIpLGM9IWwuZW1wdHkoKSxkPWYuYkJveCgoYz9sOmopLm5vZGUoKSkseT1kLndpZHRoLEw9ZC5oZWlnaHQsST1lLndpZHRofHx5LEY9ZS5oZWlnaHR8fEwsTj1NYXRoLnJvdW5kKEkrMipEKSxCPU1hdGgucm91bmQoRisyKkQpO2UuX3c9SSxlLl9oPUY7Zm9yKHZhciBVPSExLFY9WyJ4IiwieSJdLEg9MDtIPFYubGVuZ3RoO0grKyl7dmFyIHEsRyxZLFgsVyxaPVZbSF0sSj1lW1orInJlZiJdfHxaLEs9ZVsiYSIrWisicmVmIl0sUT17eDppLHk6YX1bWl0sJD0oQSsoIngiPT09Wj8wOi05MCkpKk1hdGguUEkvMTgwLHR0PU4qTWF0aC5jb3MoJCksZXQ9QipNYXRoLnNpbigkKSxydD1NYXRoLmFicyh0dCkrTWF0aC5hYnMoZXQpLG50PWVbWisiYW5jaG9yIl0saXQ9ZVtaKyJzaGlmdCJdKigieCI9PT1aPzE6LTEpLGF0PWtbWl07aWYoUSl7dmFyIG90PVEucjJmcmFjdGlvbihlW1pdKTtpZigodC5fZHJhZ2dpbmd8fCFRLmF1dG9yYW5nZSkmJihvdDwwfHxvdD4xKSYmKEs9PT1KPygob3Q9US5yMmZyYWN0aW9uKGVbImEiK1pdKSk8MHx8b3Q+MSkmJihVPSEwKTpVPSEwLFUpKWNvbnRpbnVlO3E9US5fb2Zmc2V0K1EucjJwKGVbWl0pLFg9LjV9ZWxzZSJ4Ij09PVo/KFk9ZVtaXSxxPV8ubCtfLncqWSk6KFk9MS1lW1pdLHE9Xy50K18uaCpZKSxYPWUuc2hvd2Fycm93Py41Olk7aWYoZS5zaG93YXJyb3cpe2F0LmhlYWQ9cTt2YXIgc3Q9ZVsiYSIrWl07Vz10dCpyKC41LGUueGFuY2hvciktZXQqciguNSxlLnlhbmNob3IpLEs9PT1KPyhhdC50YWlsPVEuX29mZnNldCtRLnIycChzdCksRz1XKTooYXQudGFpbD1xK3N0LEc9VytzdCksYXQudGV4dD1hdC50YWlsK1c7dmFyIGx0PXhbIngiPT09Wj8id2lkdGgiOiJoZWlnaHQiXTtpZigicGFwZXIiPT09SiYmKGF0LmhlYWQ9dS5jb25zdHJhaW4oYXQuaGVhZCwxLGx0LTEpKSwicGl4ZWwiPT09Syl7dmFyIHV0PS1NYXRoLm1heChhdC50YWlsLTMsYXQudGV4dCksY3Q9TWF0aC5taW4oYXQudGFpbCszLGF0LnRleHQpLWx0O3V0PjA/KGF0LnRhaWwrPXV0LGF0LnRleHQrPXV0KTpjdD4wJiYoYXQudGFpbC09Y3QsYXQudGV4dC09Y3QpfWF0LnRhaWwrPWl0LGF0LmhlYWQrPWl0fWVsc2UgVz1ydCpyKFgsbnQpLEc9VyxhdC50ZXh0PXErVzthdC50ZXh0Kz1pdCxXKz1pdCxHKz1pdCxlWyJfIitaKyJwYWRwbHVzIl09cnQvMitHLGVbIl8iK1orInBhZG1pbnVzIl09cnQvMi1HLGVbIl8iK1orInNpemUiXT1ydCxlWyJfIitaKyJzaGlmdCJdPVd9aWYoVSlyZXR1cm4gdm9pZCBDLnJlbW92ZSgpO3ZhciBodD0wLGZ0PTA7aWYoImxlZnQiIT09ZS5hbGlnbiYmKGh0PShJLXkpKigiY2VudGVyIj09PWUuYWxpZ24/LjU6MSkpLCJ0b3AiIT09ZS52YWxpZ24mJihmdD0oRi1MKSooIm1pZGRsZSI9PT1lLnZhbGlnbj8uNToxKSksYylsLnNlbGVjdCgic3ZnIikuYXR0cih7eDpEK2h0LTEseTpEK2Z0fSkuY2FsbChmLnNldENsaXBVcmwsTz9NOm51bGwpO2Vsc2V7dmFyIGR0PUQrZnQtZC50b3AscHQ9RCtodC1kLmxlZnQ7ai5jYWxsKHAucG9zaXRpb25UZXh0LHB0LGR0KS5jYWxsKGYuc2V0Q2xpcFVybCxPP006bnVsbCl9Ui5zZWxlY3QoInJlY3QiKS5jYWxsKGYuc2V0UmVjdCxELEQsSSxGKSxQLmNhbGwoZi5zZXRSZWN0LHovMix6LzIsTi16LEIteiksQy5jYWxsKGYuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoay54LnRleHQtTi8yKSxNYXRoLnJvdW5kKGsueS50ZXh0LUIvMikpLFMuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitBKyIsIitrLngudGV4dCsiLCIray55LnRleHQrIikifSk7dmFyIG10PWZ1bmN0aW9uKHIsbyl7VC5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWFycm93LWciKS5yZW1vdmUoKTt2YXIgbD1rLnguaGVhZCxjPWsueS5oZWFkLGQ9ay54LnRhaWwrcixwPWsueS50YWlsK28sbT1rLngudGV4dCtyLHk9ay55LnRleHQrbyx4PXUucm90YXRpb25YWU1hdHJpeChBLG0seSksTT11LmFwcGx5MkRUcmFuc2Zvcm0oeCksRT11LmFwcGx5MkRUcmFuc2Zvcm0yKHgpLEw9K1AuYXR0cigid2lkdGgiKSx6PStQLmF0dHIoImhlaWdodCIpLEk9bS0uNSpMLEQ9SStMLE89eS0uNSp6LFI9Tyt6LEY9W1tJLE8sSSxSXSxbSSxSLEQsUl0sW0QsUixELE9dLFtELE8sSSxPXV0ubWFwKEUpO2lmKCFGLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0XiEhdS5zZWdtZW50c0ludGVyc2VjdChsLGMsbCsxZTYsYysxZTYsZVswXSxlWzFdLGVbMl0sZVszXSl9LCExKSl7Ri5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXUuc2VnbWVudHNJbnRlcnNlY3QoZCxwLGwsYyx0WzBdLHRbMV0sdFsyXSx0WzNdKTtlJiYoZD1lLngscD1lLnkpfSk7dmFyIGo9ZS5hcnJvd3dpZHRoLE49ZS5hcnJvd2NvbG9yLEI9VC5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpoLm9wYWNpdHkoTil9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxVPUIuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2QrIiwiK3ArIkwiK2wrIiwiK2MpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGorInB4IikuY2FsbChoLnN0cm9rZSxoLnJnYihOKSk7aWYoZyhVLGUuYXJyb3doZWFkLCJlbmQiLGUuYXJyb3dzaXplLGUuc3RhbmRvZmYpLHcuYW5ub3RhdGlvblBvc2l0aW9uJiZVLm5vZGUoKS5wYXJlbnROb2RlJiYhbil7dmFyIFY9bCxIPWM7aWYoZS5zdGFuZG9mZil7dmFyIHE9TWF0aC5zcXJ0KE1hdGgucG93KGwtZCwyKStNYXRoLnBvdyhjLXAsMikpO1YrPWUuc3RhbmRvZmYqKGQtbCkvcSxIKz1lLnN0YW5kb2ZmKihwLWMpL3F9dmFyIEcsWSxYLFc9Qi5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmF0dHIoe2Q6Ik0zLDNILTNWLTNIM1pNMCwwTCIrKGQtVikrIiwiKyhwLUgpLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrVisiLCIrSCsiKSJ9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixqKzYrInB4IikuY2FsbChoLnN0cm9rZSwicmdiYSgwLDAsMCwwKSIpLmNhbGwoaC5maWxsLCJyZ2JhKDAsMCwwLDApIik7di5pbml0KHtlbGVtZW50Olcubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Zi5nZXRUcmFuc2xhdGUoQyk7WT10LngsWD10LnksRz17fSxpJiZpLmF1dG9yYW5nZSYmKEdbaS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKSxhJiZhLmF1dG9yYW5nZSYmKEdbYS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49TShZLFgpLG89blswXSt0LHM9blsxXStyO0MuY2FsbChmLnNldFRyYW5zbGF0ZSxvLHMpLEdbYisiLngiXT1pP2kucDJyKGkucjJwKGUueCkrdCk6ZS54K3QvXy53LEdbYisiLnkiXT1hP2EucDJyKGEucjJwKGUueSkrcik6ZS55LXIvXy5oLGUuYXhyZWY9PT1lLnhyZWYmJihHW2IrIi5heCJdPWkucDJyKGkucjJwKGUuYXgpK3QpKSxlLmF5cmVmPT09ZS55cmVmJiYoR1tiKyIuYXkiXT1hLnAycihhLnIycChlLmF5KStyKSksQi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIiksUy5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK0ErIiwiK28rIiwiK3MrIikifSl9LGRvbmVGbjpmdW5jdGlvbihlKXtpZihlKXtzLnJlbGF5b3V0KHQsRyk7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmpzLW5vdGVzLWJveC1wYW5lbCIpO3ImJnIucmVkcmF3KHIuc2VsZWN0ZWRPYmopfX19KX19fTtpZihlLnNob3dhcnJvdyYmbXQoMCwwKSxFKXt2YXIgdnQsZ3Q7di5pbml0KHtlbGVtZW50OkMubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7Z3Q9Uy5hdHRyKCJ0cmFuc2Zvcm0iKSx2dD17fX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG89InBvaW50ZXIiO2lmKGUuc2hvd2Fycm93KWUuYXhyZWY9PT1lLnhyZWY/dnRbYisiLmF4Il09aS5wMnIoaS5yMnAoZS5heCkrdCk6dnRbYisiLmF4Il09ZS5heCt0LGUuYXlyZWY9PT1lLnlyZWY/dnRbYisiLmF5Il09YS5wMnIoYS5yMnAoZS5heSkrcik6dnRbYisiLmF5Il09ZS5heStyLG10KHQscik7ZWxzZXtpZihuKXJldHVybjtpZihpKXZ0W2IrIi54Il09ZS54K3QvaS5fbTtlbHNle3ZhciBzPWUuX3hzaXplL18udyxsPWUueCsoZS5feHNoaWZ0LWUueHNoaWZ0KS9fLnctcy8yO3Z0W2IrIi54Il09di5hbGlnbihsK3QvXy53LHMsMCwxLGUueGFuY2hvcil9aWYoYSl2dFtiKyIueSJdPWUueStyL2EuX207ZWxzZXt2YXIgdT1lLl95c2l6ZS9fLmgsYz1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvXy5oLXUvMjt2dFtiKyIueSJdPXYuYWxpZ24oYy1yL18uaCx1LDAsMSxlLnlhbmNob3IpfWkmJmF8fChvPXYuZ2V0Q3Vyc29yKGk/LjU6dnRbYisiLngiXSxhPy41OnZ0W2IrIi55Il0sZS54YW5jaG9yLGUueWFuY2hvcikpfVMuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIit0KyIsIityKyIpIitndH0pLG0oQyxvKX0sZG9uZUZuOmZ1bmN0aW9uKGUpe2lmKG0oQyksZSl7cy5yZWxheW91dCh0LHZ0KTt2YXIgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ciYmci5yZWRyYXcoci5zZWxlY3RlZE9iail9fX0pfX12YXIgeSxiLHg9dC5fZnVsbExheW91dCxfPXQuX2Z1bGxMYXlvdXQuX3NpemUsdz10Ll9jb250ZXh0LmVkaXRzO24/KHk9ImFubm90YXRpb24tIituLGI9bisiLmFubm90YXRpb25zWyIrcisiXSIpOih5PSJhbm5vdGF0aW9uIixiPSJhbm5vdGF0aW9uc1siK3IrIl0iKSx4Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIit5KydbZGF0YS1pbmRleD0iJytyKyciXScpLnJlbW92ZSgpO3ZhciBNPSJjbGlwIit4Ll91aWQrIl9hbm4iK3I7aWYoIWUuX2lucHV0fHwhMT09PWUudmlzaWJsZSlyZXR1cm4gdm9pZCBvLnNlbGVjdEFsbCgiIyIrTSkucmVtb3ZlKCk7dmFyIGs9e3g6e30seTp7fX0sQT0rZS50ZXh0YW5nbGV8fDAsVD14Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZCh5LCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5IixlLm9wYWNpdHkpLFM9VC5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLEU9d1tlLnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxMPWUuY2FwdHVyZWV2ZW50c3x8dy5hbm5vdGF0aW9uVGV4dHx8RSxDPVMuYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixMPyJhbGwiOm51bGwpLmNhbGwobSwiZGVmYXVsdCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0Ll9kcmFnZ2luZz0hMTt2YXIgaT17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6by5ldmVudH07biYmKGkuc3VicGxvdElkPW4pLHQuZW1pdCgicGxvdGx5X2NsaWNrYW5ub3RhdGlvbiIsaSl9KTtlLmhvdmVydGV4dCYmQy5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe3ZhciByPWUuaG92ZXJsYWJlbCxuPXIuZm9udCxpPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2QubG9uZUhvdmVyKHt4MDppLmxlZnQtYS5sZWZ0LHgxOmkucmlnaHQtYS5sZWZ0LHk6KGkudG9wK2kuYm90dG9tKS8yLWEudG9wLHRleHQ6ZS5ob3ZlcnRleHQsY29sb3I6ci5iZ2NvbG9yLGJvcmRlckNvbG9yOnIuYm9yZGVyY29sb3IsZm9udEZhbWlseTpuLmZhbWlseSxmb250U2l6ZTpuLnNpemUsZm9udENvbG9yOm4uY29sb3J9LHtjb250YWluZXI6eC5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6eC5fcGFwZXIubm9kZSgpLGdkOnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtkLmxvbmVVbmhvdmVyKHguX2hvdmVybGF5ZXIubm9kZSgpKX0pO3ZhciB6PWUuYm9yZGVyd2lkdGgsST1lLmJvcmRlcnBhZCxEPXorSSxQPUMuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiZyIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHorInB4IikuY2FsbChoLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGguZmlsbCxlLmJnY29sb3IpLE89ZS53aWR0aHx8ZS5oZWlnaHQsUj14Ll9kZWZzLnNlbGVjdCgiLmNsaXBzIikuc2VsZWN0QWxsKCIjIitNKS5kYXRhKE8/WzBdOltdKTtSLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsTSkuYXBwZW5kKCJyZWN0IiksUi5leGl0KCkucmVtb3ZlKCk7dmFyIEY9ZS5mb250LGo9Qy5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQiLCEwKS50ZXh0KGUudGV4dCk7dy5hbm5vdGF0aW9uVGV4dD9qLmNhbGwocC5tYWtlRWRpdGFibGUse2RlbGVnYXRlOkMsZ2Q6dH0pLmNhbGwobCkub24oImVkaXQiLGZ1bmN0aW9uKHIpe2UudGV4dD1yLHRoaXMuY2FsbChsKTt2YXIgbj17fTtuW2IrIi50ZXh0Il09ZS50ZXh0LGkmJmkuYXV0b3JhbmdlJiYobltpLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApLGEmJmEuYXV0b3JhbmdlJiYoblthLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApLHMucmVsYXlvdXQodCxuKX0pOmouY2FsbChsKX12YXIgbz10KCJkMyIpLHM9dCgiLi4vLi4vcGxvdGx5IiksbD10KCIuLi8uLi9wbG90cy9wbG90cyIpLHU9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGg9dCgiLi4vY29sb3IiKSxmPXQoIi4uL2RyYXdpbmciKSxkPXQoIi4uL2Z4IikscD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxtPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSx2PXQoIi4uL2RyYWdlbGVtZW50IiksZz10KCIuL2RyYXdfYXJyb3dfaGVhZCIpO2UuZXhwb3J0cz17ZHJhdzpuLGRyYXdPbmU6aSxkcmF3UmF3OmF9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzksIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuLi9meCI6NjQzLCIuL2RyYXdfYXJyb3dfaGVhZCI6NTkyLGQzOjEyMH1dLDU5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuL2Fycm93X3BhdGhzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsdSl7ZnVuY3Rpb24gYygpe3Quc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwcHgsMTAwcHgiKX1mdW5jdGlvbiBoKHIsaSl7ZC5wYXRoJiYoZT41JiYoaT0wKSxuLnNlbGVjdChmLnBhcmVudE5vZGUpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOnQuYXR0cigiY2xhc3MiKSxkOmQucGF0aCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK3IueCsiLCIrci55KyIpcm90YXRlKCIrMTgwKmkvTWF0aC5QSSsiKXNjYWxlKCIreSsiKSJ9KS5zdHlsZSh7ZmlsbDpiLG9wYWNpdHk6eCwic3Ryb2tlLXdpZHRoIjowfSkpfWkobCl8fChsPTEpO3ZhciBmPXQubm9kZSgpLGQ9c1tlfHwwXTsic3RyaW5nIj09dHlwZW9mIHImJnJ8fChyPSJlbmQiKTt2YXIgcCxtLHYsZyx5PShvLmdldFB4KHQsInN0cm9rZS13aWR0aCIpfHwxKSpsLGI9dC5zdHlsZSgic3Ryb2tlIil8fGEuZGVmYXVsdExpbmUseD10LnN0eWxlKCJzdHJva2Utb3BhY2l0eSIpfHwxLF89ci5pbmRleE9mKCJzdGFydCIpPj0wLHc9ci5pbmRleE9mKCJlbmQiKT49MCxNPWQuYmFja29mZip5K3U7aWYoImxpbmUiPT09Zi5ub2RlTmFtZSl7cD17eDordC5hdHRyKCJ4MSIpLHk6K3QuYXR0cigieTEiKX0sbT17eDordC5hdHRyKCJ4MiIpLHk6K3QuYXR0cigieTIiKX07dmFyIGs9cC54LW0ueCxBPXAueS1tLnk7aWYodj1NYXRoLmF0YW4yKEEsayksZz12K01hdGguUEksTSl7aWYoTSpNPmsqaytBKkEpcmV0dXJuIHZvaWQgYygpO3ZhciBUPU0qTWF0aC5jb3ModiksUz1NKk1hdGguc2luKHYpO18mJihwLngtPVQscC55LT1TLHQuYXR0cih7eDE6cC54LHkxOnAueX0pKSx3JiYobS54Kz1ULG0ueSs9Uyx0LmF0dHIoe3gyOm0ueCx5MjptLnl9KSl9fWVsc2UgaWYoInBhdGgiPT09Zi5ub2RlTmFtZSl7dmFyIEU9Zi5nZXRUb3RhbExlbmd0aCgpLEw9IiI7aWYoRTxNKXJldHVybiB2b2lkIGMoKTtpZihfKXt2YXIgQz1mLmdldFBvaW50QXRMZW5ndGgoMCksej1mLmdldFBvaW50QXRMZW5ndGgoLjEpO3Y9TWF0aC5hdGFuMihDLnktei55LEMueC16LngpLHA9Zi5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWluKE0sRSkpLE0mJihMPSIwcHgsIitNKyJweCwiKX1pZih3KXt2YXIgST1mLmdldFBvaW50QXRMZW5ndGgoRSksRD1mLmdldFBvaW50QXRMZW5ndGgoRS0uMSk7aWYoZz1NYXRoLmF0YW4yKEkueS1ELnksSS54LUQueCksbT1mLmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxFLU0pKSxNKXt2YXIgUD1MPzIqTTpNO0wrPUUtUCsicHgsIitFKyJweCJ9fWVsc2UgTCYmKEwrPUUrInB4Iik7TCYmdC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsTCl9XyYmaChwLHYpLHcmJmgobSxnKX19LHsiLi4vY29sb3IiOjYwMiwiLi4vZHJhd2luZyI6NjI2LCIuL2Fycm93X3BhdGhzIjo1ODQsZDM6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi9jbGljayIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9ucyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmUsZHJhd1JhdzpuLmRyYXdSYXcsaGFzQ2xpY2tUb1Nob3c6aS5oYXNDbGlja1RvU2hvdyxvbkNsaWNrOmkub25DbGljayxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi9hdHRyaWJ1dGVzIjo1ODUsIi4vY2FsY19hdXRvcmFuZ2UiOjU4NiwiLi9jbGljayI6NTg3LCIuL2NvbnZlcnRfY29vcmRzIjo1ODksIi4vZGVmYXVsdHMiOjU5MCwiLi9kcmF3Ijo1OTF9XSw1OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiYW5ub3RhdGlvbiIsdmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsYXJyb3dzaXplOm4uYXJyb3dzaXplLGFycm93d2lkdGg6bi5hcnJvd3dpZHRoLHN0YW5kb2ZmOm4uc3RhbmRvZmYsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLGNhcHR1cmVldmVudHM6bi5jYXB0dXJlZXZlbnRzfX0seyIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1ODV9XSw1OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWUuZnVsbFNjZW5lTGF5b3V0LG49ci5kb21haW4sbz1lLmZ1bGxMYXlvdXQuX3NpemUscz17cGRhdGE6bnVsbCx0eXBlOiJsaW5lYXIiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxpLmV4dGVuZEZsYXQodC5feGEscyksYS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PW8ubCtuLnhbMF0qby53LHQuX3hhLmwycD1mdW5jdGlvbigpewpyZXR1cm4uNSooMSt0LnBkYXRhWzBdL3QucGRhdGFbM10pKm8udyoobi54WzFdLW4ueFswXSl9LHQuX3lhPXt9LGkuZXh0ZW5kRmxhdCh0Ll95YSxzKSxhLnNldENvbnZlcnQodC5feWEpLHQuX3lhLl9vZmZzZXQ9by50KygxLW4ueVsxXSkqby5oLHQuX3lhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxLXQucGRhdGFbMV0vdC5wZGF0YVszXSkqby5oKihuLnlbMV0tbi55WzBdKX19dmFyIGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQscj1lLmFubm90YXRpb25zLGk9MDtpPHIubGVuZ3RoO2krKyluKHJbaV0sdCk7dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK3QuaWQpLnJlbW92ZSgpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NH1dLDU5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sbyl7ZnVuY3Rpb24gdShyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbCxyLG4pfWZ1bmN0aW9uIGModCl7dmFyIG49dCsiYXhpcyIsaT17X2Z1bGxMYXlvdXQ6e319O3JldHVybiBpLl9mdWxsTGF5b3V0W25dPXJbbl0sYS5jb2VyY2VQb3NpdGlvbihlLGksdSx0LHQsLjUpfXJldHVybiB1KCJ2aXNpYmxlIiwhby5pdGVtSXNOb3RQbGFpbk9iamVjdCk/KHModCxlLG4uZnVsbExheW91dCx1KSxjKCJ4IiksYygieSIpLGMoInoiKSxpLm5vbmVPckFsbCh0LGUsWyJ4IiwieSIsInoiXSksZS54cmVmPSJ4IixlLnlyZWY9InkiLGUuenJlZj0ieiIsdSgieGFuY2hvciIpLHUoInlhbmNob3IiKSx1KCJ4c2hpZnQiKSx1KCJ5c2hpZnQiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9InBpeGVsIixlLmF5cmVmPSJwaXhlbCIsdSgiYXgiLC0xMCksdSgiYXkiLC0zMCksaS5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSksZSk6ZX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpuLGZ1bGxMYXlvdXQ6ci5mdWxsTGF5b3V0fSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIjo1ODgsIi4vYXR0cmlidXRlcyI6NTk0fV0sNTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2RyYXciKS5kcmF3UmF3LGk9dCgiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0IiksYT1bIngiLCJ5IiwieiJdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQscj10LmRhdGFTY2FsZSxvPWUuYW5ub3RhdGlvbnMscz0wO3M8by5sZW5ndGg7cysrKXtmb3IodmFyIGw9b1tzXSx1PSExLGM9MDtjPDM7YysrKXt2YXIgaD1hW2NdLGY9bFtoXSxkPWVbaCsiYXhpcyJdLHA9ZC5yMmZyYWN0aW9uKGYpO2lmKHA8MHx8cD4xKXt1PSEwO2JyZWFrfX11P3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdCgiLmFubm90YXRpb24tIit0LmlkKydbZGF0YS1pbmRleD0iJytzKyciXScpLnJlbW92ZSgpOihsLnBkYXRhPWkodC5nbHBsb3QuY2FtZXJhUGFyYW1zLFtlLnhheGlzLnIybChsLngpKnJbMF0sZS55YXhpcy5yMmwobC55KSpyWzFdLGUuemF4aXMucjJsKGwueikqclsyXV0pLG4odC5ncmFwaERpdixsLHMsdC5pZCxsLl94YSxsLl95YSkpfX19LHsiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0Ijo4MTYsIi4uL2Fubm90YXRpb25zL2RyYXciOjU5MX1dLDU5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMzZCIsc2NoZW1hOntsYXlvdXQ6eyJzY2VuZS5hbm5vdGF0aW9ucyI6dCgiLi9hdHRyaWJ1dGVzIil9fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb252ZXJ0OnQoIi4vY29udmVydCIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NTk0LCIuL2NvbnZlcnQiOjU5NSwiLi9kZWZhdWx0cyI6NTk2LCIuL2RyYXciOjU5N31dLDU5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXciKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmEiKX0seyJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZSI6NTY1LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIjo1NjYsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGQiOjU2Nywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhbiI6NTY4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3Ijo1NjksIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljIjo1NzAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW4iOjU3MSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIjo1NzIsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpIjo1NzMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGkiOjU3NCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iOjU3NSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhbiI6NTc2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaSI6NTc3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIjo1NzgsIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iOjU3OSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1cyI6NTgwfV0sNjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbixhLG8scyxsLHU9TWF0aC5mbG9vcigoZSsuMDUpL2gpK2MsZj1pKHIpLmZyb21KRCh1KSxkPTA7LTEhPT0oZD10LmluZGV4T2YoIiUiLGQpKTspbj10LmNoYXJBdChkKzEpLCIwIj09PW58fCItIj09PW58fCJfIj09PW4/KG89MyxhPXQuY2hhckF0KGQrMiksIl8iPT09biYmKG49Ii0iKSk6KGE9bixuPSIwIixvPTIpLHM9YlthXSxzPyhsPXM9PT15P3k6Zi5mb3JtYXREYXRlKHNbbl0pLHQ9dC5zdWJzdHIoMCxkKStsK3Quc3Vic3RyKGQrbyksZCs9bC5sZW5ndGgpOmQrPW87cmV0dXJuIHR9ZnVuY3Rpb24gaSh0KXt2YXIgZT14W3RdO3JldHVybiBlfHwoZT14W3RdPXMuaW5zdGFuY2UodCkpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGwuZXh0ZW5kRmxhdCh7fSxmLHtkZXNjcmlwdGlvbjp0fSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4iU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSB3aXRoIGAiK3QrImAgZGF0ZSBkYXRhLiJ9dmFyIHM9dCgiLi9jYWxlbmRhcnMiKSxsPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGM9dS5FUE9DSEpELGg9dS5PTkVEQVksZj17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKHMuY2FsZW5kYXJzKSxkZmx0OiJncmVnb3JpYW4ifSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXt9O3JldHVybiBpW3JdPWYsbC5jb2VyY2UodCxlLGkscixuKX0scD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylkKHQsZSxyW2ldKyJjYWxlbmRhciIsbi5jYWxlbmRhcil9LG09e2NoaW5lc2U6IjIwMDAtMDEtMDEiLGNvcHRpYzoiMjAwMC0wMS0wMSIsZGlzY3dvcmxkOiIyMDAwLTAxLTAxIixldGhpb3BpYW46IjIwMDAtMDEtMDEiLGhlYnJldzoiNTAwMC0wMS0wMSIsaXNsYW1pYzoiMTAwMC0wMS0wMSIsanVsaWFuOiIyMDAwLTAxLTAxIixtYXlhbjoiNTAwMC0wMS0wMSIsbmFuYWtzaGFoaToiMTAwMC0wMS0wMSIsbmVwYWxpOiIyMDAwLTAxLTAxIixwZXJzaWFuOiIxMDAwLTAxLTAxIixqYWxhbGk6IjEwMDAtMDEtMDEiLHRhaXdhbjoiMTAwMC0wMS0wMSIsdGhhaToiMjAwMC0wMS0wMSIsdW1tYWxxdXJhOiIxNDAwLTAxLTAxIn0sdj17Y2hpbmVzZToiMjAwMC0wMS0wMiIsY29wdGljOiIyMDAwLTAxLTAzIixkaXNjd29ybGQ6IjIwMDAtMDEtMDMiLGV0aGlvcGlhbjoiMjAwMC0wMS0wNSIsaGVicmV3OiI1MDAwLTAxLTAxIixpc2xhbWljOiIxMDAwLTAxLTAyIixqdWxpYW46IjIwMDAtMDEtMDMiLG1heWFuOiI1MDAwLTAxLTAxIixuYW5ha3NoYWhpOiIxMDAwLTAxLTA1IixuZXBhbGk6IjIwMDAtMDEtMDUiLHBlcnNpYW46IjEwMDAtMDEtMDEiLGphbGFsaToiMTAwMC0wMS0wMSIsdGFpd2FuOiIxMDAwLTAxLTA0Iix0aGFpOiIyMDAwLTAxLTA0Iix1bW1hbHF1cmE6IjE0MDAtMDEtMDYifSxnPXtjaGluZXNlOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxjb3B0aWM6WyIxNzAwLTAxLTAxIiwiMTcwMS0wMS0wMSJdLGRpc2N3b3JsZDpbIjE4MDAtMDEtMDEiLCIxODAxLTAxLTAxIl0sZXRoaW9waWFuOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxoZWJyZXc6WyI1NzAwLTAxLTAxIiwiNTcwMS0wMS0wMSJdLGlzbGFtaWM6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGp1bGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sbWF5YW46WyI1MjAwLTAxLTAxIiwiNTIwMS0wMS0wMSJdLG5hbmFrc2hhaGk6WyIwNTAwLTAxLTAxIiwiMDUwMS0wMS0wMSJdLG5lcGFsaTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0scGVyc2lhbjpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0samFsYWxpOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSx0YWl3YW46WyIwMTAwLTAxLTAxIiwiMDEwMS0wMS0wMSJdLHRoYWk6WyIyNTAwLTAxLTAxIiwiMjUwMS0wMS0wMSJdLHVtbWFscXVyYTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl19LHk9IiMjIixiPXtkOnswOiJkZCIsIi0iOiJkIn0sZTp7MDoiZCIsIi0iOiJkIn0sYTp7MDoiRCIsIi0iOiJEIn0sQTp7MDoiREQiLCItIjoiREQifSxqOnswOiJvbyIsIi0iOiJvIn0sVzp7MDoid3ciLCItIjoidyJ9LG06ezA6Im1tIiwiLSI6Im0ifSxiOnswOiJNIiwiLSI6Ik0ifSxCOnswOiJNTSIsIi0iOiJNTSJ9LHk6ezA6Inl5IiwiLSI6Inl5In0sWTp7MDoieXl5eSIsIi0iOiJ5eXl5In0sVTp5LHc6eSxjOnswOiJEIE0gZCAlWCB5eXl5IiwiLSI6IkQgTSBkICVYIHl5eXkifSx4OnswOiJtbS9kZC95eXl5IiwiLSI6Im1tL2RkL3l5eXkifX0seD17fSxfPXt4Y2FsZW5kYXI6YShvKCJ4IikpfSx3PWwuZXh0ZW5kRmxhdCh7fSxfLHt5Y2FsZW5kYXI6YShvKCJ5IikpfSksTT1sLmV4dGVuZEZsYXQoe30sdyx7emNhbGVuZGFyOmEobygieiIpKX0pLGs9YShbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGByYW5nZWAgYW5kIGB0aWNrMGAiLCJpZiB0aGlzIGlzIGEgZGF0ZSBheGlzLiBUaGlzIGRvZXMgbm90IHNldCB0aGUgY2FsZW5kYXIgZm9yIiwiaW50ZXJwcmV0aW5nIGRhdGEgb24gdGhpcyBheGlzLCB0aGF0J3Mgc3BlY2lmaWVkIGluIHRoZSB0cmFjZSIsIm9yIHZpYSB0aGUgZ2xvYmFsIGBsYXlvdXQuY2FsZW5kYXJgIl0uam9pbigiICIpKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY2FsZW5kYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjp3LGJhcjp3LGhlYXRtYXA6dyxjb250b3VyOncsaGlzdG9ncmFtOncsaGlzdG9ncmFtMmQ6dyxoaXN0b2dyYW0yZGNvbnRvdXI6dyxzY2F0dGVyM2Q6TSxzdXJmYWNlOk0sbWVzaDNkOk0sc2NhdHRlcmdsOncsb2hsYzpfLGNhbmRsZXN0aWNrOl99LGxheW91dDp7Y2FsZW5kYXI6YShbIlNldHMgdGhlIGRlZmF1bHQgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgaW50ZXJwcmV0aW5nIGFuZCIsImRpc3BsYXlpbmcgZGF0ZXMgdGhyb3VnaG91dCB0aGUgcGxvdC4iXS5qb2luKCIgIikpLCJ4YXhpcy5jYWxlbmRhciI6aywieWF4aXMuY2FsZW5kYXIiOmssInNjZW5lLnhheGlzLmNhbGVuZGFyIjprLCJzY2VuZS55YXhpcy5jYWxlbmRhciI6aywic2NlbmUuemF4aXMuY2FsZW5kYXIiOmt9LHRyYW5zZm9ybXM6e2ZpbHRlcjp7dmFsdWVjYWxlbmRhcjphKFsiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHZhbHVlYCwgaWYgaXQgaXMgYSBkYXRlLiJdLmpvaW4oIiAiKSksdGFyZ2V0Y2FsZW5kYXI6YShbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB0YXJnZXRgLCBpZiBpdCBpcyBhbiIsImFycmF5IG9mIGRhdGVzLiBJZiBgdGFyZ2V0YCBpcyBhIHN0cmluZyAoZWcgKngqKSB3ZSB1c2UgdGhlIiwiY29ycmVzcG9uZGluZyB0cmFjZSBhdHRyaWJ1dGUgKGVnIGB4Y2FsZW5kYXJgKSBpZiBpdCBleGlzdHMsIiwiZXZlbiBpZiBgdGFyZ2V0Y2FsZW5kYXJgIGlzIHByb3ZpZGVkLiJdLmpvaW4oIiAiKSl9fX0sbGF5b3V0QXR0cmlidXRlczpmLGhhbmRsZURlZmF1bHRzOmQsaGFuZGxlVHJhY2VEZWZhdWx0czpwLENBTk9OSUNBTF9TVU5EQVk6dixDQU5PTklDQUxfVElDSzptLERGTFRSQU5HRTpnLGdldENhbDppLHdvcmxkQ2FsRm10Om59fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vLi4vbGliIjo3MjQsIi4vY2FsZW5kYXJzIjo1OTl9XSw2MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw2MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZihhKHQpfHwic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC50cmltKCk7aWYoInJnYiIhPT1lLnN1YnN0cigwLDMpKXJldHVybiB0O3ZhciByPWUubWF0Y2goL15yZ2JhP1xzKlwoKFteKCldKilcKSQvKTtpZighcilyZXR1cm4gdDt2YXIgbj1yWzFdLnRyaW0oKS5zcGxpdCgvXHMqW1xzLF1ccyovKSxpPSJhIj09PWUuY2hhckF0KDMpJiY0PT09bi5sZW5ndGg7aWYoIWkmJjMhPT1uLmxlbmd0aClyZXR1cm4gdDtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7aWYoIW5bb10ubGVuZ3RoKXJldHVybiB0O2lmKG5bb109TnVtYmVyKG5bb10pLCEobltvXT49MCkpcmV0dXJuIHQ7aWYoMz09PW8pbltvXT4xJiYobltvXT0xKTtlbHNlIGlmKG5bb10+PTEpcmV0dXJuIHR9dmFyIHM9TWF0aC5yb3VuZCgyNTUqblswXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzFdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMl0pO3JldHVybiBpPyJyZ2JhKCIrcysiLCAiK25bM10rIikiOiJyZ2IoIitzKyIpIn12YXIgaT10KCJ0aW55Y29sb3IyIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89ZS5leHBvcnRzPXt9LHM9dCgiLi9hdHRyaWJ1dGVzIik7by5kZWZhdWx0cz1zLmRlZmF1bHRzO3ZhciBsPW8uZGVmYXVsdExpbmU9cy5kZWZhdWx0TGluZTtvLmxpZ2h0TGluZT1zLmxpZ2h0TGluZTt2YXIgdT1vLmJhY2tncm91bmQ9cy5iYWNrZ3JvdW5kO28udGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LG8ucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBvLnRpbnlSR0IoaSh0KSl9LG8ub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9pKHQpLmdldEFscGhhKCk6MH0sby5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LG8uY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBpKHQpLnRvUmdiU3RyaW5nKCk7dmFyIG49aShlfHx1KS50b1JnYigpLGE9MT09PW4uYT9uOntyOjI1NSooMS1uLmEpK24ucipuLmEsZzoyNTUqKDEtbi5hKStuLmcqbi5hLGI6MjU1KigxLW4uYSkrbi5iKm4uYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBpKG8pLnRvUmdiU3RyaW5nKCl9LG8uY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkodCk7cmV0dXJuIDEhPT1uLmdldEFscGhhKCkmJihuPWkoby5jb21iaW5lKHQsdSkpKSwobi5pc0RhcmsoKT9lP24ubGlnaHRlbihlKTp1OnI/bi5kYXJrZW4ocik6bCkudG9TdHJpbmcoKX0sby5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKGUpO3Quc3R5bGUoe3N0cm9rZTpvLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sby5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aShlKTt0LnN0eWxlKHtmaWxsOm8udGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sby5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsaSxhLHM9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKylpZihpPXNbZV0sYT10W2ldLCJjb2xvciI9PT1pLnN1YnN0cihpLmxlbmd0aC01KSlpZihBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspYVtyXT1uKGFbcl0pO2Vsc2UgdFtpXT1uKGEpO2Vsc2UgaWYoImNvbG9yc2NhbGUiPT09aS5zdWJzdHIoaS5sZW5ndGgtMTApJiZBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspQXJyYXkuaXNBcnJheShhW3JdKSYmKGFbcl1bMV09bihhW3JdWzFdKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXt2YXIgbD1hWzBdO2lmKCFBcnJheS5pc0FycmF5KGwpJiZsJiYib2JqZWN0Ij09dHlwZW9mIGwpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylvLmNsZWFuKGFbcl0pfWVsc2UgYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZvLmNsZWFuKGEpfX19LHsiLi9hdHRyaWJ1dGVzIjo2MDEsImZhc3QtaXNudW1lcmljIjoxMjksdGlueWNvbG9yMjo1MzJ9XSw2MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDpuLnRpY2tmb250LHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrcHJlZml4Om4udGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDpuLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6bi50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Om4uc2hvd3RpY2tzdWZmaXgsc2VwYXJhdGV0aG91c2FuZHM6bi5zZXBhcmF0ZXRob3VzYW5kcyxleHBvbmVudGZvcm1hdDpuLmV4cG9uZW50Zm9ybWF0LHNob3dleHBvbmVudDpuLnNob3dleHBvbmVudCx0aXRsZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJDbGljayB0byBlbnRlciBjb2xvcnNjYWxlIHRpdGxlIn0sdGl0bGVmb250OmEoe30saSx7fSksdGl0bGVzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OH1dLDYwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIG4uY29lcmNlKGMsdSxzLHQsZSl9dmFyIHU9ZS5jb2xvcmJhcj17fSxjPXQuY29sb3JiYXJ8fHt9O2woInRoaWNrbmVzcyIsImZyYWN0aW9uIj09PWwoInRoaWNrbmVzc21vZGUiKT8zMC8oci53aWR0aC1yLm1hcmdpbi5sLXIubWFyZ2luLnIpOjMwKSxsKCJsZW4iLCJmcmFjdGlvbiI9PT1sKCJsZW5tb2RlIik/MTpyLmhlaWdodC1yLm1hcmdpbi50LXIubWFyZ2luLmIpLGwoIngiKSxsKCJ4YW5jaG9yIiksbCgieHBhZCIpLGwoInkiKSxsKCJ5YW5jaG9yIiksbCgieXBhZCIpLG4ubm9uZU9yQWxsKGMsdSxbIngiLCJ5Il0pLGwoIm91dGxpbmVjb2xvciIpLGwoIm91dGxpbmV3aWR0aCIpLGwoImJvcmRlcmNvbG9yIiksbCgiYm9yZGVyd2lkdGgiKSxsKCJiZ2NvbG9yIiksaShjLHUsbCwibGluZWFyIiksbyhjLHUsbCwibGluZWFyIix7b3V0ZXJUaWNrczohMSxmb250OnIuZm9udCxub0hvdmVyOiEwfSksYShjLHUsbCwibGluZWFyIix7b3V0ZXJUaWNrczohMSxmb250OnIuZm9udCxub0hvdmVyOiEwfSksbCgidGl0bGUiKSxuLmNvZXJjZUZvbnQobCwidGl0bGVmb250IixyLmZvbnQpLGwoInRpdGxlc2lkZSIpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc4MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NzgzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6Nzg0LCIuL2F0dHJpYnV0ZXMiOjYwM31dLDYwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcGxvdGx5Iiksbz10KCIuLi8uLi9wbG90cy9wbG90cyIpLHM9dCgiLi4vLi4vcmVnaXN0cnkiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksdT10KCIuLi9kcmFnZWxlbWVudCIpLGM9dCgiLi4vLi4vbGliIiksaD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxmPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4uL2RyYXdpbmciKSxwPXQoIi4uL2NvbG9yIiksbT10KCIuLi90aXRsZXMiKSx2PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGc9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyx5PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksYj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLF89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gYy5jb2VyY2UoZXQscnQseCx0LGUpfWZ1bmN0aW9uIGsoKXtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNLnRpdGxlc2lkZSkpe3ZhciBlPWx0LnNlbGVjdCgiLmNidGl0bGUiKSxyPWUuc2VsZWN0KCJ0ZXh0IiksYT1bLU0ub3V0bGluZXdpZHRoLzIsTS5vdXRsaW5ld2lkdGgvMl0sbz1lLnNlbGVjdCgiLmgiK3J0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxzPTE1LjY7aWYoci5ub2RlKCkmJihzPXBhcnNlSW50KHIuc3R5bGUoImZvbnQtc2l6ZSIpLDEwKSpnKSxvPyhjdD1kLmJCb3gobykuaGVpZ2h0KT5zJiYoYVsxXS09KGN0LXMpLzIpOnIubm9kZSgpJiYhci5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIpJiYoY3Q9ZC5iQm94KHIubm9kZSgpKS5oZWlnaHQpLGN0KXtpZihjdCs9NSwidG9wIj09PU0udGl0bGVzaWRlKXJ0LmRvbWFpblsxXS09Y3QvRS5oLGFbMV0qPS0xO2Vsc2V7cnQuZG9tYWluWzBdKz1jdC9FLmg7dmFyIHU9di5saW5lQ291bnQocik7YVsxXSs9KDEtdSkqc31lLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ErIikiKSxydC5zZXRTY2FsZSgpfX1sdC5zZWxlY3RBbGwoIi5jYmZpbGxzLC5jYmxpbmVzLC5jYmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK01hdGgucm91bmQoRS5oKigxLXJ0LmRvbWFpblsxXSkpKyIpIik7dmFyIGg9bHQuc2VsZWN0KCIuY2JmaWxscyIpLnNlbGVjdEFsbCgicmVjdC5jYmZpbGwiKS5kYXRhKEQpO2guZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJjYmZpbGwiLCEwKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaChmdW5jdGlvbih0LGUpe3ZhciByPVswPT09ZT96WzBdOihEW2VdK0RbZS0xXSkvMixlPT09RC5sZW5ndGgtMT96WzFdOihEW2VdK0RbZSsxXSkvMl0ubWFwKHJ0LmMycCkubWFwKE1hdGgucm91bmQpO2UhPT1ELmxlbmd0aC0xJiYoclsxXSs9clsxXT5yWzBdPzE6LTEpO3ZhciBhPU8odCkucmVwbGFjZSgiZS0iLCIiKSxvPWkoYSkudG9IZXhTdHJpbmcoKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHt4Okosd2lkdGg6TWF0aC5tYXgoSCwyKSx5Om4ubWluKHIpLGhlaWdodDpNYXRoLm1heChuLm1heChyKS1uLm1pbihyKSwyKSxmaWxsOm99KX0pO3ZhciBmPWx0LnNlbGVjdCgiLmNibGluZXMiKS5zZWxlY3RBbGwoInBhdGguY2JsaW5lIikuZGF0YShNLmxpbmUuY29sb3ImJk0ubGluZS53aWR0aD9JOltdKTtyZXR1cm4gZi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNibGluZSIsITApLGYuZXhpdCgpLnJlbW92ZSgpLGYuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrSisiLCIrKE1hdGgucm91bmQocnQuYzJwKHQpKStNLmxpbmUud2lkdGgvMiUxKSsiaCIrSCkuY2FsbChkLmxpbmVHcm91cFN0eWxlLE0ubGluZS53aWR0aCxQKHQpLE0ubGluZS5kYXNoKX0pLHJ0Ll9heGlzbGF5ZXIuc2VsZWN0QWxsKCJnLiIrcnQuX2lkKyJ0aWNrLHBhdGgiKS5yZW1vdmUoKSxydC5fcG9zPUorSCsoTS5vdXRsaW5ld2lkdGh8fDApLzItKCJvdXRzaWRlIj09PU0udGlja3M/MTowKSxydC5zaWRlPSJyaWdodCIsYy5zeW5jT3JBc3luYyhbZnVuY3Rpb24oKXtyZXR1cm4gbC5kb1RpY2tzKHQscnQsITApfSxmdW5jdGlvbigpe2lmKC0xPT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSl7dmFyIGU9cnQudGl0bGVmb250LnNpemUscj1ydC5fb2Zmc2V0K3J0Ll9sZW5ndGgvMixpPUUubCsocnQucG9zaXRpb258fDApKkUudysoInJpZ2h0Ij09PXJ0LnNpZGU/MTArZSoocnQuc2hvd3RpY2tsYWJlbHM/MTouNSk6LTEwLWUqKHJ0LnNob3d0aWNrbGFiZWxzPy41OjApKTtBKCJoIitydC5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuIitydC5faWQrInRpY2siKSxzaWRlOk0udGl0bGVzaWRlLG9mZnNldExlZnQ6RS5sLG9mZnNldFRvcDpFLnQsbWF4U2hpZnQ6Uy53aWR0aH0sYXR0cmlidXRlczp7eDppLHk6ciwidGV4dC1hbmNob3IiOiJtaWRkbGUifSx0cmFuc2Zvcm06e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH19KX19XSl9ZnVuY3Rpb24gQShlLHIpe3ZhciBuLGk9dygpO249cy50cmFjZUlzKGksIm1hcmtlckNvbG9yc2NhbGUiKT8ibWFya2VyLmNvbG9yYmFyLnRpdGxlIjoiY29sb3JiYXIudGl0bGUiO3ZhciBhPXtwcm9wQ29udGFpbmVyOnJ0LHByb3BOYW1lOm4sdHJhY2VJbmRleDppLmluZGV4LGRmbHROYW1lOiJjb2xvcnNjYWxlIixjb250YWluZXJHcm91cDpsdC5zZWxlY3QoIi5jYnRpdGxlIil9LG89ImgiPT09ZS5jaGFyQXQoMCk/ZS5zdWJzdHIoMSk6ImgiK2U7bHQuc2VsZWN0QWxsKCIuIitvKyIsLiIrbysiLW1hdGgtZ3JvdXAiKS5yZW1vdmUoKSxtLmRyYXcodCxlLGgoYSxyfHx7fSkpfWZ1bmN0aW9uIFQoKXt2YXIgcj1IK00ub3V0bGluZXdpZHRoLzIrZC5iQm94KHJ0Ll9heGlzbGF5ZXIubm9kZSgpKS53aWR0aDtpZihCPXV0LnNlbGVjdCgidGV4dCIpLEIubm9kZSgpJiYhQi5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIpKXt2YXIgbixpPXV0LnNlbGVjdCgiLmgiK3J0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKTtuPWkmJi0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKT9kLmJCb3goaSkud2lkdGg6ZC5iQm94KHV0Lm5vZGUoKSkucmlnaHQtSi1FLmwscj1NYXRoLm1heChyLG4pfXZhciBhPTIqTS54cGFkK3IrTS5ib3JkZXJ3aWR0aCtNLm91dGxpbmV3aWR0aC8yLHM9JC10dDtsdC5zZWxlY3QoIi5jYmJnIikuYXR0cih7eDpKLU0ueHBhZC0oTS5ib3JkZXJ3aWR0aCtNLm91dGxpbmV3aWR0aCkvMix5OnR0LVcsd2lkdGg6TWF0aC5tYXgoYSwyKSxoZWlnaHQ6TWF0aC5tYXgocysyKlcsMil9KS5jYWxsKHAuZmlsbCxNLmJnY29sb3IpLmNhbGwocC5zdHJva2UsTS5ib3JkZXJjb2xvcikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOk0uYm9yZGVyd2lkdGh9KSxsdC5zZWxlY3RBbGwoIi5jYm91dGxpbmUiKS5hdHRyKHt4OkoseTp0dCtNLnlwYWQrKCJ0b3AiPT09TS50aXRsZXNpZGU/Y3Q6MCksd2lkdGg6TWF0aC5tYXgoSCwyKSxoZWlnaHQ6TWF0aC5tYXgocy0yKk0ueXBhZC1jdCwyKX0pLmNhbGwocC5zdHJva2UsTS5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOiJOb25lIiwic3Ryb2tlLXdpZHRoIjpNLm91dGxpbmV3aWR0aH0pO3ZhciBsPSh7Y2VudGVyOi41LHJpZ2h0OjF9W00ueGFuY2hvcl18fDApKmE7bHQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEUubC1sKSsiLCIrRS50KyIpIiksby5hdXRvTWFyZ2luKHQsZSx7eDpNLngseTpNLnksbDphKih7cmlnaHQ6MSxjZW50ZXI6LjV9W00ueGFuY2hvcl18fDApLHI6YSooe2xlZnQ6MSxjZW50ZXI6LjV9W00ueGFuY2hvcl18fDApLHQ6cyooe2JvdHRvbToxLG1pZGRsZTouNX1bTS55YW5jaG9yXXx8MCksYjpzKih7dG9wOjEsbWlkZGxlOi41fVtNLnlhbmNob3JdfHwwKX0pfXZhciBTPXQuX2Z1bGxMYXlvdXQsRT1TLl9zaXplO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBNLmZpbGxjb2xvciYmImZ1bmN0aW9uIiE9dHlwZW9mIE0ubGluZS5jb2xvcilyZXR1cm4gdm9pZCBTLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrZSkucmVtb3ZlKCk7dmFyIEwsQyx6PW4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2YgTS5maWxsY29sb3I/TS5maWxsY29sb3I6TS5saW5lLmNvbG9yKS5kb21haW4oKSksST1bXSxEPVtdLFA9ImZ1bmN0aW9uIj09dHlwZW9mIE0ubGluZS5jb2xvcj9NLmxpbmUuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gTS5saW5lLmNvbG9yfSxPPSJmdW5jdGlvbiI9PXR5cGVvZiBNLmZpbGxjb2xvcj9NLmZpbGxjb2xvcjpmdW5jdGlvbigpe3JldHVybiBNLmZpbGxjb2xvcn0sUj1NLmxldmVscy5lbmQrTS5sZXZlbHMuc2l6ZS8xMDAsRj1NLmxldmVscy5zaXplLGo9MS4wMDEqelswXS0uMDAxKnpbMV0sTj0xLjAwMSp6WzFdLS4wMDEqelswXTtmb3IoQz0wO0M8MWU1JiYoTD1NLmxldmVscy5zdGFydCtDKkYsIShGPjA/TD49UjpMPD1SKSk7QysrKUw+aiYmTDxOJiZJLnB1c2goTCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE0uZmlsbGNvbG9yKWlmKE0uZmlsbGxldmVscylmb3IoUj1NLmZpbGxsZXZlbHMuZW5kK00uZmlsbGxldmVscy5zaXplLzEwMCxGPU0uZmlsbGxldmVscy5zaXplLEM9MDtDPDFlNSYmKEw9TS5maWxsbGV2ZWxzLnN0YXJ0K0MqRiwhKEY+MD9MPj1SOkw8PVIpKTtDKyspTD56WzBdJiZMPHpbMV0mJkQucHVzaChMKTtlbHNlIEQ9SS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQtTS5sZXZlbHMuc2l6ZS8yfSksRC5wdXNoKERbRC5sZW5ndGgtMV0rTS5sZXZlbHMuc2l6ZSk7ZWxzZSBNLmZpbGxjb2xvciYmInN0cmluZyI9PXR5cGVvZiBNLmZpbGxjb2xvciYmKEQ9WzBdKTtNLmxldmVscy5zaXplPDAmJihJLnJldmVyc2UoKSxELnJldmVyc2UoKSk7dmFyIEIsVT1TLmhlaWdodC1TLm1hcmdpbi50LVMubWFyZ2luLmIsVj1TLndpZHRoLVMubWFyZ2luLmwtUy5tYXJnaW4ucixIPU1hdGgucm91bmQoTS50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1NLnRoaWNrbmVzc21vZGU/VjoxKSkscT1IL0UudyxHPU1hdGgucm91bmQoTS5sZW4qKCJmcmFjdGlvbiI9PT1NLmxlbm1vZGU/VToxKSksWT1HL0UuaCxYPU0ueHBhZC9FLncsVz0oTS5ib3JkZXJ3aWR0aCtNLm91dGxpbmV3aWR0aCkvMixaPU0ueXBhZC9FLmgsSj1NYXRoLnJvdW5kKE0ueCpFLncrTS54cGFkKSxLPU0ueC1xKih7bWlkZGxlOi41LHJpZ2h0OjF9W00ueGFuY2hvcl18fDApLFE9TS55K1kqKCh7dG9wOi0uNSxib3R0b206LjV9W00ueWFuY2hvcl18fDApLS41KSwkPU1hdGgucm91bmQoRS5oKigxLVEpKSx0dD0kLUcsZXQ9e3R5cGU6ImxpbmVhciIscmFuZ2U6eix0aWNrbW9kZTpNLnRpY2ttb2RlLG50aWNrczpNLm50aWNrcyx0aWNrMDpNLnRpY2swLGR0aWNrOk0uZHRpY2ssdGlja3ZhbHM6TS50aWNrdmFscyx0aWNrdGV4dDpNLnRpY2t0ZXh0LHRpY2tzOk0udGlja3MsdGlja2xlbjpNLnRpY2tsZW4sdGlja3dpZHRoOk0udGlja3dpZHRoLHRpY2tjb2xvcjpNLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpNLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Ok0udGlja2ZvbnQsdGlja2FuZ2xlOk0udGlja2FuZ2xlLHRpY2tmb3JtYXQ6TS50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0Ok0uZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6TS5zZXBhcmF0ZXRob3VzYW5kcyxzaG93ZXhwb25lbnQ6TS5zaG93ZXhwb25lbnQsc2hvd3RpY2twcmVmaXg6TS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4Ok0udGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDpNLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6TS50aWNrc3VmZml4LHRpdGxlOk0udGl0bGUsdGl0bGVmb250Ok0udGl0bGVmb250LHNob3dsaW5lOiEwLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MX0scnQ9e3R5cGU6ImxpbmVhciIsX2lkOiJ5IitlfSxudD17bGV0dGVyOiJ5Iixmb250OlMuZm9udCxub0hvdmVyOiEwLGNhbGVuZGFyOlMuY2FsZW5kYXJ9O2lmKHkoZXQscnQsXyxudCxTKSxiKGV0LHJ0LF8sbnQpLHJ0LnBvc2l0aW9uPU0ueCtYK3Esci5heGlzPXJ0LC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSYmKHJ0LnRpdGxlc2lkZT1NLnRpdGxlc2lkZSxydC50aXRsZXg9TS54K1gscnQudGl0bGV5PVErKCJ0b3AiPT09TS50aXRsZXNpZGU/WS1aOlopKSxNLmxpbmUuY29sb3ImJiJhdXRvIj09PU0udGlja21vZGUpe3J0LnRpY2ttb2RlPSJsaW5lYXIiLHJ0LnRpY2swPU0ubGV2ZWxzLnN0YXJ0O3ZhciBpdD1NLmxldmVscy5zaXplLGF0PWMuY29uc3RyYWluKCgkLXR0KS81MCw0LDE1KSsxLG90PSh6WzFdLXpbMF0pLygoTS5udGlja3N8fGF0KSppdCk7aWYob3Q+MSl7dmFyIHN0PU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cob3QpL01hdGguTE4xMCkpO2l0Kj1zdCpjLnJvdW5kVXAob3Qvc3QsWzIsNSwxMF0pLChNYXRoLmFicyhNLmxldmVscy5zdGFydCkvTS5sZXZlbHMuc2l6ZSsxZS02KSUxPDJlLTYmJihydC50aWNrMD0wKX1ydC5kdGljaz1pdH1ydC5kb21haW49W1ErWixRK1ktWl0scnQuc2V0U2NhbGUoKTt2YXIgbHQ9Uy5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2UpLmRhdGEoWzBdKTtsdC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZSwhMCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiY2JiZyIsITApLHQuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2JmaWxscyIsITApLHQuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2JsaW5lcyIsITApLHQuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2JheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSx0LmFwcGVuZCgiZyIpLmNsYXNzZWQoImNidGl0bGV1bnNoaWZ0IiwhMCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2J0aXRsZSIsITApLHQuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiY2JvdXRsaW5lIiwhMCksdC5zZWxlY3QoIi5jYnRpdGxlIikuZGF0dW0oMCl9KSxsdC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitNYXRoLnJvdW5kKEUubCkrIiwiK01hdGgucm91bmQoRS50KSsiKSIpO3ZhciB1dD1sdC5zZWxlY3QoIi5jYnRpdGxldW5zaGlmdCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtIitNYXRoLnJvdW5kKEUubCkrIiwtIitNYXRoLnJvdW5kKEUudCkrIikiKTtydC5fYXhpc2xheWVyPWx0LnNlbGVjdCgiLmNiYXhpcyIpO3ZhciBjdD0wO2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSl7dmFyIGh0LGZ0PUUubCsoTS54K1gpKkUudyxkdD1ydC50aXRsZWZvbnQuc2l6ZTtodD0idG9wIj09PU0udGl0bGVzaWRlPygxLShRK1ktWikpKkUuaCtFLnQrMysuNzUqZHQ6KDEtKFErWikpKkUuaCtFLnQtMy0uMjUqZHQsQShydC5faWQrInRpdGxlIix7YXR0cmlidXRlczp7eDpmdCx5Omh0LCJ0ZXh0LWFuY2hvciI6InN0YXJ0In19KX12YXIgcHQ9Yy5zeW5jT3JBc3luYyhbby5wcmV2aW91c1Byb21pc2VzLGssby5wcmV2aW91c1Byb21pc2VzLFRdLHQpO2lmKHB0JiZwdC50aGVuJiYodC5fcHJvbWlzZXN8fFtdKS5wdXNoKHB0KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24pe3ZhciBtdCx2dCxndDt1LmluaXQoe2VsZW1lbnQ6bHQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7bXQ9bHQuYXR0cigidHJhbnNmb3JtIiksZihsdCl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe2x0LmF0dHIoInRyYW5zZm9ybSIsbXQrIiB0cmFuc2xhdGUoIit0KyIsIitlKyIpIiksdnQ9dS5hbGlnbihLK3QvRS53LHEsMCwxLE0ueGFuY2hvciksZ3Q9dS5hbGlnbihRLWUvRS5oLFksMCwxLE0ueWFuY2hvcik7dmFyIHI9dS5nZXRDdXJzb3IodnQsZ3QsTS54YW5jaG9yLE0ueWFuY2hvcik7ZihsdCxyKX0sZG9uZUZuOmZ1bmN0aW9uKGUpe2YobHQpLGUmJnZvaWQgMCE9PXZ0JiZ2b2lkIDAhPT1ndCYmYS5yZXN0eWxlKHQseyJjb2xvcmJhci54Ijp2dCwiY29sb3JiYXIueSI6Z3R9LHcoKS5pbmRleCl9fSl9cmV0dXJuIHB0fWZ1bmN0aW9uIHcoKXt2YXIgcixuLGk9ZS5zdWJzdHIoMik7Zm9yKHI9MDtyPHQuX2Z1bGxEYXRhLmxlbmd0aDtyKyspaWYobj10Ll9mdWxsRGF0YVtyXSxuLnVpZD09PWkpcmV0dXJuIG59dmFyIE09e307cmV0dXJuIE9iamVjdC5rZXlzKF8pLmZvckVhY2goZnVuY3Rpb24odCl7TVt0XT1udWxsfSksTS5maWxsY29sb3I9bnVsbCxNLmxpbmU9e2NvbG9yOm51bGwsd2lkdGg6bnVsbCxkYXNoOm51bGx9LE0ubGV2ZWxzPXtzdGFydDpudWxsLGVuZDpudWxsLHNpemU6bnVsbH0sTS5maWxsbGV2ZWxzPW51bGwsT2JqZWN0LmtleXMoTSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNW3RdPWMuaXNQbGFpbk9iamVjdChNW3RdKT9jLmV4dGVuZEZsYXQoTVt0XSxlKTplLHIpOk1bdF19fSksci5vcHRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiByW2VdJiZyW2VdKHRbZV0pfSkscn0sci5fb3B0cz1NLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY5OCwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vbGliL3NldGN1cnNvciI6NzM5LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcGxvdGx5Ijo3NTksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjc3OCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuLi90aXRsZXMiOjY5MSwiLi9hdHRyaWJ1dGVzIjo2MDMsZDM6MTIwLHRpbnljb2xvcjI6NTMyfV0sNjA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQuY29sb3JiYXIpfX0seyIuLi8uLi9saWIiOjcyNH1dLDYwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3phdXRvOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx6bWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbH0sem1heDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGx9LGNvbG9yc2NhbGU6e3ZhbFR5cGU6ImNvbG9yc2NhbGUifSxhdXRvY29sb3JzY2FsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0scmV2ZXJzZXNjYWxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaG93c2NhbGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fX0se31dLDYwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vc2NhbGVzIiksYT10KCIuL2ZsaXBfc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbDtyPyhzPW4ubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKSxsPW4ubmVzdGVkUHJvcGVydHkodC5faW5wdXQscikuZ2V0KCkpOihzPXQsbD10Ll9pbnB1dCk7dmFyIHU9bysiYXV0byIsYz1vKyJtaW4iLGg9bysibWF4IixmPXNbdV0sZD1zW2NdLHA9c1toXSxtPXMuY29sb3JzY2FsZTshMT09PWYmJnZvaWQgMCE9PWR8fChkPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpKSwhMT09PWYmJnZvaWQgMCE9PXB8fChwPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpKSxkPT09cCYmKGQtPS41LHArPS41KSxzW2NdPWQsc1toXT1wLGxbY109ZCxsW2hdPXAsbFt1XT0hMSE9PWZ8fHZvaWQgMD09PWQmJnZvaWQgMD09PXAscy5hdXRvY29sb3JzY2FsZSYmKG09ZCpwPDA/aS5SZEJ1OmQ+PTA/aS5SZWRzOmkuQmx1ZXMsbC5jb2xvcnNjYWxlPW0scy5yZXZlcnNlc2NhbGUmJihtPWEobSkpLHMuY29sb3JzY2FsZT1tKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vZmxpcF9zY2FsZSI6NjEzLCIuL3NjYWxlcyI6NjIwfV0sNjA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXA7dCgiLi9zY2FsZXMuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJue2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sY29sb3JzY2FsZTppKHt9LG4uY29sb3JzY2FsZSx7fSksY2F1dG86aSh7fSxuLnphdXRvLHt9KSxjbWF4Omkoe30sbi56bWF4LHt9KSxjbWluOmkoe30sbi56bWluLHt9KSxhdXRvY29sb3JzY2FsZTppKHt9LG4uYXV0b2NvbG9yc2NhbGUse30pLHJldmVyc2VzY2FsZTppKHt9LG4ucmV2ZXJzZXNjYWxlLHt9KX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi9hdHRyaWJ1dGVzIjo2MDcsIi4vc2NhbGVzLmpzIjo2MjB9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zY2FsZXMiKTtlLmV4cG9ydHM9bi5SZEJ1fSx7Ii4vc2NhbGVzIjo2MjB9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz10KCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLHM9dCgiLi9pc192YWxpZF9zY2FsZSIpLGw9dCgiLi9mbGlwX3NjYWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsYyl7dmFyIGg9Yy5wcmVmaXgsZj1jLmNMZXR0ZXIsZD1oLnNsaWNlKDAsaC5sZW5ndGgtMSkscD1oP2kubmVzdGVkUHJvcGVydHkodCxkKS5nZXQoKXx8e306dCxtPWg/aS5uZXN0ZWRQcm9wZXJ0eShlLGQpLmdldCgpfHx7fTplLHY9cFtmKyJtaW4iXSxnPXBbZisibWF4Il0seT1wLmNvbG9yc2NhbGU7dShoK2YrImF1dG8iLCEobih2KSYmbihnKSYmdjxnKSksdShoK2YrIm1pbiIpLHUoaCtmKyJtYXgiKTt2YXIgYjt2b2lkIDAhPT15JiYoYj0hcyh5KSksdShoKyJhdXRvY29sb3JzY2FsZSIsYik7dmFyIHg9dShoKyJjb2xvcnNjYWxlIik7aWYodShoKyJyZXZlcnNlc2NhbGUiKSYmKG0uY29sb3JzY2FsZT1sKHgpKSwibWFya2VyLmxpbmUuIiE9PWgpe3ZhciBfO2gmJihfPWEocCkpLHUoaCsic2hvd3NjYWxlIixfKSYmbyhwLG0scil9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vY29sb3JiYXIvZGVmYXVsdHMiOjYwNCwiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIjo2MDYsIi4vZmxpcF9zY2FsZSI6NjEzLCIuL2lzX3ZhbGlkX3NjYWxlIjo2MTcsImZhc3QtaXNudW1lcmljIjoxMjl9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspe3ZhciBzPXRbb107aVtvXT1lK3NbMF0qKHItZSksYVtvXT1zWzFdfXJldHVybntkb21haW46aSxyYW5nZTphfX19LHt9XSw2MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9ci0xLGE9MDtpPj0wO2ktLSxhKyspZT10W2ldLG5bYV09WzEtZVswXSxlWzFdXTtyZXR1cm4gbn19LHt9XSw2MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zY2FsZXMiKSxpPXQoIi4vZGVmYXVsdF9zY2FsZSIpLGE9dCgiLi9pc192YWxpZF9zY2FsZV9hcnJheSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0cnl7dD1uW3RdfHxKU09OLnBhcnNlKHQpfWNhdGNoKHIpe3Q9ZX19cmV0dXJuIGV8fChlPWkpLHQ/KCJzdHJpbmciPT10eXBlb2YgdCYmKHIoKSwic3RyaW5nIj09dHlwZW9mIHQmJnIoKSksYSh0KT90OmUpOmV9fSx7Ii4vZGVmYXVsdF9zY2FsZSI6NjEwLCIuL2lzX3ZhbGlkX3NjYWxlX2FycmF5Ijo2MTgsIi4vc2NhbGVzIjo2MjB9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9pc192YWxpZF9zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/aS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHx7fTp0LG89ci5jb2xvcixzPSExO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKHZhciBsPTA7bDxvLmxlbmd0aDtsKyspaWYobihvW2xdKSl7cz0hMDticmVha31yZXR1cm4gaS5pc1BsYWluT2JqZWN0KHIpJiYoc3x8ITA9PT1yLnNob3dzY2FsZXx8bihyLmNtaW4pJiZuKHIuY21heCl8fGEoci5jb2xvcnNjYWxlKXx8aS5pc1BsYWluT2JqZWN0KHIuY29sb3JiYXIpKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vaXNfdmFsaWRfc2NhbGUiOjYxNywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDYxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnNjYWxlcz10KCIuL3NjYWxlcyIpLHIuZGVmYXVsdFNjYWxlPXQoIi4vZGVmYXVsdF9zY2FsZSIpLHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmhhbmRsZURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxyLmNhbGM9dCgiLi9jYWxjIiksci5oYXNDb2xvcnNjYWxlPXQoIi4vaGFzX2NvbG9yc2NhbGUiKSxyLmlzVmFsaWRTY2FsZT10KCIuL2lzX3ZhbGlkX3NjYWxlIiksci5nZXRTY2FsZT10KCIuL2dldF9zY2FsZSIpLHIuZmxpcFNjYWxlPXQoIi4vZmxpcF9zY2FsZSIpLHIuZXh0cmFjdFNjYWxlPXQoIi4vZXh0cmFjdF9zY2FsZSIpLHIubWFrZUNvbG9yU2NhbGVGdW5jPXQoIi4vbWFrZV9jb2xvcl9zY2FsZV9mdW5jIil9LHsiLi9hdHRyaWJ1dGVzIjo2MDcsIi4vY2FsYyI6NjA4LCIuL2RlZmF1bHRfc2NhbGUiOjYxMCwiLi9kZWZhdWx0cyI6NjExLCIuL2V4dHJhY3Rfc2NhbGUiOjYxMiwiLi9mbGlwX3NjYWxlIjo2MTMsIi4vZ2V0X3NjYWxlIjo2MTQsIi4vaGFzX2NvbG9yc2NhbGUiOjYxNSwiLi9pc192YWxpZF9zY2FsZSI6NjE3LCIuL21ha2VfY29sb3Jfc2NhbGVfZnVuYyI6NjE5LCIuL3NjYWxlcyI6NjIwfV0sNjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIiksaT10KCIuL2lzX3ZhbGlkX3NjYWxlX2FycmF5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1uW3RdfHxpKHQpfX0seyIuL2lzX3ZhbGlkX3NjYWxlX2FycmF5Ijo2MTgsIi4vc2NhbGVzIjo2MjB9XSw2MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07aWYoMiE9PWkubGVuZ3RofHwraVswXTxlfHwhbihpWzFdKS5pc1ZhbGlkKCkpcmV0dXJuITE7ZT0raVswXX1yZXR1cm4hMH19LHt0aW55Y29sb3IyOjUzMn1dLDYxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXtyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnRbM119O3JldHVybiBhKGUpLnRvUmdiU3RyaW5nKCl9dmFyIGk9dCgiZDMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoImZhc3QtaXNudW1lcmljIikscz10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8e307Zm9yKHZhciByPXQuZG9tYWluLGw9dC5yYW5nZSx1PWwubGVuZ3RoLGM9bmV3IEFycmF5KHUpLGg9MDtoPHU7aCsrKXt2YXIgZj1hKGxbaF0pLnRvUmdiKCk7Y1toXT1bZi5yLGYuZyxmLmIsZi5hXX12YXIgZCxwPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKHIpLnJhbmdlKGMpLmNsYW1wKCEwKSxtPWUubm9OdW1lcmljQ2hlY2ssdj1lLnJldHVybkFycmF5O3JldHVybiBkPW0mJnY/cDptP2Z1bmN0aW9uKHQpe3JldHVybiBuKHAodCkpfTp2P2Z1bmN0aW9uKHQpe3JldHVybiBvKHQpP3AodCk6YSh0KS5pc1ZhbGlkKCk/dDpzLmRlZmF1bHRMaW5lfTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KT9uKHAodCkpOmEodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX0sZC5kb21haW49cC5kb21haW4sZC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBsfSxkfX0seyIuLi9jb2xvciI6NjAyLGQzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOSx0aW55Y29sb3IyOjUzMn1dLDYyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0dyZXlzOltbMCwicmdiKDAsMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLFlsR25CdTpbWzAsInJnYig4LDI5LDg4KSJdLFsuMTI1LCJyZ2IoMzcsNTIsMTQ4KSJdLFsuMjUsInJnYigzNCw5NCwxNjgpIl0sWy4zNzUsInJnYigyOSwxNDUsMTkyKSJdLFsuNSwicmdiKDY1LDE4MiwxOTYpIl0sWy42MjUsInJnYigxMjcsMjA1LDE4NykiXSxbLjc1LCJyZ2IoMTk5LDIzMywxODApIl0sWy44NzUsInJnYigyMzcsMjQ4LDIxNykiXSxbMSwicmdiKDI1NSwyNTUsMjE3KSJdXSxHcmVlbnM6W1swLCJyZ2IoMCw2OCwyNykiXSxbLjEyNSwicmdiKDAsMTA5LDQ0KSJdLFsuMjUsInJnYigzNSwxMzksNjkpIl0sWy4zNzUsInJnYig2NSwxNzEsOTMpIl0sWy41LCJyZ2IoMTE2LDE5NiwxMTgpIl0sWy42MjUsInJnYigxNjEsMjE3LDE1NSkiXSxbLjc1LCJyZ2IoMTk5LDIzMywxOTIpIl0sWy44NzUsInJnYigyMjksMjQ1LDIyNCkiXSxbMSwicmdiKDI0NywyNTIsMjQ1KSJdXSxZbE9yUmQ6W1swLCJyZ2IoMTI4LDAsMzgpIl0sWy4xMjUsInJnYigxODksMCwzOCkiXSxbLjI1LCJyZ2IoMjI3LDI2LDI4KSJdLFsuMzc1LCJyZ2IoMjUyLDc4LDQyKSJdLFsuNSwicmdiKDI1MywxNDEsNjApIl0sWy42MjUsInJnYigyNTQsMTc4LDc2KSJdLFsuNzUsInJnYigyNTQsMjE3LDExOCkiXSxbLjg3NSwicmdiKDI1NSwyMzcsMTYwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyMDQpIl1dLEJsdWVyZWQ6W1swLCJyZ2IoMCwwLDI1NSkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJkQnU6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDEwNiwxMzcsMjQ3KSJdLFsuNSwicmdiKDE5MCwxOTAsMTkwKSJdLFsuNiwicmdiKDIyMCwxNzAsMTMyKSJdLFsuNywicmdiKDIzMCwxNDUsOTApIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLFJlZHM6W1swLCJyZ2IoMjIwLDIyMCwyMjApIl0sWy4yLCJyZ2IoMjQ1LDE5NSwxNTcpIl0sWy40LCJyZ2IoMjQ1LDE2MCwxMDUpIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLEJsdWVzOltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYig0MCw2MCwxOTApIl0sWy41LCJyZ2IoNzAsMTAwLDI0NSkiXSxbLjYsInJnYig5MCwxMjAsMjQ1KSJdLFsuNywicmdiKDEwNiwxMzcsMjQ3KSJdLFsxLCJyZ2IoMjIwLDIyMCwyMjApIl1dLFBpY25pYzpbWzAsInJnYigwLDAsMjU1KSJdLFsuMSwicmdiKDUxLDE1MywyNTUpIl0sWy4yLCJyZ2IoMTAyLDIwNCwyNTUpIl0sWy4zLCJyZ2IoMTUzLDIwNCwyNTUpIl0sWy40LCJyZ2IoMjA0LDIwNCwyNTUpIl0sWy41LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWy42LCJyZ2IoMjU1LDIwNCwyNTUpIl0sWy43LCJyZ2IoMjU1LDE1MywyNTUpIl0sWy44LCJyZ2IoMjU1LDEwMiwyMDQpIl0sWy45LCJyZ2IoMjU1LDEwMiwxMDIpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSYWluYm93OltbMCwicmdiKDE1MCwwLDkwKSJdLFsuMTI1LCJyZ2IoMCwwLDIwMCkiXSxbLjI1LCJyZ2IoMCwyNSwyNTUpIl0sWy4zNzUsInJnYigwLDE1MiwyNTUpIl0sWy41LCJyZ2IoNDQsMjU1LDE1MCkiXSxbLjYyNSwicmdiKDE1MSwyNTUsMCkiXSxbLjc1LCJyZ2IoMjU1LDIzNCwwKSJdLFsuODc1LCJyZ2IoMjU1LDExMSwwKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUG9ydGxhbmQ6W1swLCJyZ2IoMTIsNTEsMTMxKSJdLFsuMjUsInJnYigxMCwxMzYsMTg2KSJdLFsuNSwicmdiKDI0MiwyMTEsNTYpIl0sWy43NSwicmdiKDI0MiwxNDMsNTYpIl0sWzEsInJnYigyMTcsMzAsMzApIl1dLEpldDpbWzAsInJnYigwLDAsMTMxKSJdLFsuMTI1LCJyZ2IoMCw2MCwxNzApIl0sWy4zNzUsInJnYig1LDI1NSwyNTUpIl0sWy42MjUsInJnYigyNTUsMjU1LDApIl0sWy44NzUsInJnYigyNTAsMCwwKSJdLFsxLCJyZ2IoMTI4LDAsMCkiXV0sSG90OltbMCwicmdiKDAsMCwwKSJdLFsuMywicmdiKDIzMCwwLDApIl0sWy42LCJyZ2IoMjU1LDIxMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEJsYWNrYm9keTpbWzAsInJnYigwLDAsMCkiXSxbLjIsInJnYigyMzAsMCwwKSJdLFsuNCwicmdiKDIzMCwyMTAsMCkiXSxbLjcsInJnYigyNTUsMjU1LDI1NSkiXSxbMSwicmdiKDE2MCwyMDAsMjU1KSJdXSxFYXJ0aDpbWzAsInJnYigwLDAsMTMwKSJdLFsuMSwicmdiKDAsMTgwLDE4MCkiXSxbLjIsInJnYig0MCwyMTAsNDApIl0sWy40LCJyZ2IoMjMwLDIzMCw1MCkiXSxbLjYsInJnYigxMjAsNzAsMjApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sRWxlY3RyaWM6W1swLCJyZ2IoMCwwLDApIl0sWy4xNSwicmdiKDMwLDAsMTAwKSJdLFsuNCwicmdiKDEyMCwwLDEwMCkiXSxbLjYsInJnYigxNjAsOTAsMCkiXSxbLjgsInJnYigyMzAsMjAwLDApIl0sWzEsInJnYigyNTUsMjUwLDIyMCkiXV0sVmlyaWRpczpbWzAsIiM0NDAxNTQiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LCIjNDgxODZhIl0sWy4xMjU0OTAxOTYwNzg0MzEzNywiIzQ3MmQ3YiJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsIiM0MjQwODYiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LCIjM2I1MjhiIl0sWy4zMTM3MjU0OTAxOTYwNzg0LCIjMzM2MzhkIl0sWy4zNzY0NzA1ODgyMzUyOTQxLCIjMmM3MjhlIl0sWy40MzkyMTU2ODYyNzQ1MDk4LCIjMjY4MjhlIl0sWy41MDE5NjA3ODQzMTM3MjU1LCIjMjE5MThjIl0sWy41NjQ3MDU4ODIzNTI5NDEyLCIjMWZhMDg4Il0sWy42Mjc0NTA5ODAzOTIxNTY5LCIjMjhhZTgwIl0sWy42OTAxOTYwNzg0MzEzNzI1LCIjM2ZiYzczIl0sWy43NTI5NDExNzY0NzA1ODgyLCIjNWVjOTYyIl0sWy44MTU2ODYyNzQ1MDk4MDM5LCIjODRkNDRiIl0sWy44Nzg0MzEzNzI1NDkwMTk2LCIjYWRkYzMwIl0sWy45NDExNzY0NzA1ODgyMzUzLCIjZDhlMjE5Il0sWzEsIiNmZGU3MjUiXV19fSx7fV0sNjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSh0LXIpLyhuLXIpLG89YStlLyhuLXIpLHM9KGErbykvMjtyZXR1cm4ibGVmdCI9PT1pfHwiYm90dG9tIj09PWk/YToiY2VudGVyIj09PWl8fCJtaWRkbGUiPT09aT9zOiJyaWdodCI9PT1pfHwidG9wIj09PWk/bzphPDIvMy1zP2E6bz40LzMtcz9vOnN9fSx7fV0sNjIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9W1sic3ctcmVzaXplIiwicy1yZXNpemUiLCJzZS1yZXNpemUiXSxbInctcmVzaXplIiwibW92ZSIsImUtcmVzaXplIl0sWyJudy1yZXNpemUiLCJuLXJlc2l6ZSIsIm5lLXJlc2l6ZSJdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIHQ9ImxlZnQiPT09cj8wOiJjZW50ZXIiPT09cj8xOiJyaWdodCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKnQpLDAsMiksZT0iYm90dG9tIj09PWE/MDoibWlkZGxlIj09PWE/MToidG9wIj09PWE/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSxpW2VdW3RdfX0seyIuLi8uLi9saWIiOjcyNH1dLDYyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImRyYWdjb3ZlciI7dmFyIGU9dC5zdHlsZTtyZXR1cm4gZS5wb3NpdGlvbj0iZml4ZWQiLGUubGVmdD0wLGUucmlnaHQ9MCxlLnRvcD0wLGUuYm90dG9tPTAsZS56SW5kZXg9OTk5OTk5OTk5LGUuYmFja2dyb3VuZD0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fWZ1bmN0aW9uIGkodCl7dC5fZHJhZ2dpbmc9ITEsdC5fcmVwbG90UGVuZGluZyYmbC5wbG90KHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG8odC5jaGFuZ2VkVG91Y2hlcz90LmNoYW5nZWRUb3VjaGVzWzBdOnQsZG9jdW1lbnQuYm9keSl9dmFyIG89dCgibW91c2UtZXZlbnQtb2Zmc2V0Iikscz10KCJoYXMtaG92ZXIiKSxsPXQoIi4uLy4uL3Bsb3RseSIpLHU9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksaD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksZj1lLmV4cG9ydHM9e307Zi5hbGlnbj10KCIuL2FsaWduIiksZi5nZXRDdXJzb3I9dCgiLi9jdXJzb3IiKTt2YXIgZD10KCIuL3VuaG92ZXIiKTtmLnVuaG92ZXI9ZC53cmFwcGVkLGYudW5ob3ZlclJhdz1kLnJhdyxmLmluaXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt5Ll9kcmFnZ2VkPSExLHkuX2RyYWdnaW5nPSEwO3ZhciBpPWEoZSk7cmV0dXJuIGw9aVswXSxkPWlbMV0sZz1lLnRhcmdldCxwPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHAteS5fbW91c2VEb3duVGltZTx4P2IrPTE6KGI9MSx5Ll9tb3VzZURvd25UaW1lPXApLHQucHJlcEZuJiZ0LnByZXBGbihlLGwsZCkscz8odj1uKCksdi5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUodC5lbGVtZW50KS5jdXJzb3IpOih2PWRvY3VtZW50LG09d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jdXJzb3IsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LmVsZW1lbnQpLmN1cnNvciksdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHIpLHYuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbyksdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsbyksdi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHIpLHYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLG8pLHUucGF1c2VFdmVudChlKX1mdW5jdGlvbiByKGUpewp2YXIgcj1hKGUpLG49clswXS1sLGk9clsxXS1kLG89dC5taW5EcmFnfHxjLk1JTkRSQUc7cmV0dXJuIE1hdGguYWJzKG4pPG8mJihuPTApLE1hdGguYWJzKGkpPG8mJihpPTApLChufHxpKSYmKHkuX2RyYWdnZWQ9ITAsZi51bmhvdmVyKHkpKSx0Lm1vdmVGbiYmdC5tb3ZlRm4obixpLHkuX2RyYWdnZWQpLHUucGF1c2VFdmVudChlKX1mdW5jdGlvbiBvKGUpe2lmKHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixyKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG8pLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLG8pLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixyKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixvKSxzP3UucmVtb3ZlRWxlbWVudCh2KTptJiYodi5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPW0sbT1udWxsKSwheS5fZHJhZ2dpbmcpcmV0dXJuIHZvaWQoeS5fZHJhZ2dlZD0hMSk7aWYoeS5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCkteS5fbW91c2VEb3duVGltZT54JiYoYj1NYXRoLm1heChiLTEsMSkpLHQuZG9uZUZuJiZ0LmRvbmVGbih5Ll9kcmFnZ2VkLGIsZSksIXkuX2RyYWdnZWQpe3ZhciBuO3RyeXtuPW5ldyBNb3VzZUV2ZW50KCJjbGljayIsZSl9Y2F0Y2godCl7dmFyIGw9YShlKTtuPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLG4uaW5pdE1vdXNlRXZlbnQoImNsaWNrIixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlLGUudmlldyxlLmRldGFpbCxlLnNjcmVlblgsZS5zY3JlZW5ZLGxbMF0sbFsxXSxlLmN0cmxLZXksZS5hbHRLZXksZS5zaGlmdEtleSxlLm1ldGFLZXksZS5idXR0b24sZS5yZWxhdGVkVGFyZ2V0KX1nLmRpc3BhdGNoRXZlbnQobil9cmV0dXJuIGkoeSkseS5fZHJhZ2dlZD0hMSx1LnBhdXNlRXZlbnQoZSl9dmFyIGwsZCxwLG0sdixnLHk9dC5nZCxiPTEseD1oLkRCTENMSUNLREVMQVk7eS5fbW91c2VEb3duVGltZXx8KHkuX21vdXNlRG93blRpbWU9MCksdC5lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIsdC5lbGVtZW50Lm9ubW91c2Vkb3duPWUsdC5lbGVtZW50Lm9udG91Y2hzdGFydD1lfSxmLmNvdmVyU2xpcD1ufSx7Ii4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcwMywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RseSI6NzU5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NjksIi4vYWxpZ24iOjYyMSwiLi9jdXJzb3IiOjYyMiwiLi91bmhvdmVyIjo2MjQsImhhcy1ob3ZlciI6Mjg2LCJtb3VzZS1ldmVudC1vZmZzZXQiOjQ1MX1dLDYyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXZlbnRzIiksaT1lLmV4cG9ydHM9e307aS53cmFwcGVkPWZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIj09dHlwZW9mIHQmJih0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSx0Ll9ob3ZlclRpbWVyJiYoY2xlYXJUaW1lb3V0KHQuX2hvdmVyVGltZXIpLHQuX2hvdmVyVGltZXI9dm9pZCAwKSxpLnJhdyh0LGUscil9LGkucmF3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPXQuX2hvdmVyZGF0YTtlfHwoZT17fSksZS50YXJnZXQmJiExPT09bi50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpfHwoci5faG92ZXJsYXllci5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgibGluZSIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJjaXJjbGUiKS5yZW1vdmUoKSx0Ll9ob3ZlcmRhdGE9dm9pZCAwLGUudGFyZ2V0JiZpJiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6aX0pKX19LHsiLi4vLi4vbGliL2V2ZW50cyI6NzE0fV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIn19LHt9XSw2MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMpe2lmKHUudHJhY2VJcyhyLCJzeW1ib2xzIikpe3ZhciBsPXkocik7ZS5hdHRyKCJkIixmdW5jdGlvbih0KXt2YXIgZTtlPSJ2YXJpb3VzIj09PXQubXN8fCJ2YXJpb3VzIj09PWEuc2l6ZT8zOmcuaXNCdWJibGUocik/bCh0Lm1zKTooYS5zaXplfHw2KS8yLHQubXJjPWU7dmFyIG49Yi5zeW1ib2xOdW1iZXIodC5teHx8YS5zeW1ib2wpfHwwLGk9biUxMDA7cmV0dXJuIHQub209biUyMDA+PTEwMCxiLnN5bWJvbEZ1bmNzW2ldKGUpKyhuPj0yMDA/dzoiIil9KS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuKHQubW8rMXx8YS5vcGFjaXR5KzEpLTF9KX12YXIgaCxmLGQscD0hMTtpZih0LnNvPyhkPW8ub3V0bGllcndpZHRoLGY9by5vdXRsaWVyY29sb3IsaD1hLm91dGxpZXJjb2xvcik6KGQ9KHQubWx3KzF8fG8ud2lkdGgrMXx8KHQudHJhY2U/dC50cmFjZS5tYXJrZXIubGluZS53aWR0aDowKSsxKS0xLGY9Im1sYyJpbiB0P3QubWxjYz1pKHQubWxjKTpBcnJheS5pc0FycmF5KG8uY29sb3IpP2MuZGVmYXVsdExpbmU6by5jb2xvcixBcnJheS5pc0FycmF5KGEuY29sb3IpJiYoaD1jLmRlZmF1bHRMaW5lLHA9ITApLGg9Im1jImluIHQ/dC5tY2M9bih0Lm1jKTphLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIpLHQub20pZS5jYWxsKGMuc3Ryb2tlLGgpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjooZHx8MSkrInB4IixmaWxsOiJub25lIn0pO2Vsc2V7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixkKyJweCIpO3ZhciBtPWEuZ3JhZGllbnQsdj10Lm1ndDtpZih2P3A9ITA6dj1tJiZtLnR5cGUsdiYmIm5vbmUiIT09dil7dmFyIHg9dC5tZ2M7eD9wPSEwOng9bS5jb2xvcjt2YXIgXz0iZyIrcy5fZnVsbExheW91dC5fdWlkKyItIityLnVpZDtwJiYoXys9Ii0iK3QuaSksZS5jYWxsKGIuZ3JhZGllbnQscyxfLHYsaCx4KX1lbHNlIGUuY2FsbChjLmZpbGwsaCk7ZCYmZS5jYWxsKGMuc3Ryb2tlLGYpfX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPXRbMF0tZVswXSxhPXRbMV0tZVsxXSxzPXJbMF0tZVswXSxsPXJbMV0tZVsxXSx1PU1hdGgucG93KGkqaSthKmEsVC8yKSxjPU1hdGgucG93KHMqcytsKmwsVC8yKSxoPShjKmMqaS11KnUqcykqbixmPShjKmMqYS11KnUqbCkqbixkPTMqYyoodStjKSxwPTMqdSoodStjKTtyZXR1cm5bW28ucm91bmQoZVswXSsoZCYmaC9kKSwyKSxvLnJvdW5kKGVbMV0rKGQmJmYvZCksMildLFtvLnJvdW5kKGVbMF0tKHAmJmgvcCksMiksby5yb3VuZChlWzFdLShwJiZmL3ApLDIpXV19ZnVuY3Rpb24gYSh0KXt2YXIgZT10LmdldEF0dHJpYnV0ZSgiZGF0YS11bmZvcm1hdHRlZCIpO2lmKG51bGwhPT1lKXJldHVybiBlK3QuZ2V0QXR0cmlidXRlKCJkYXRhLW1hdGgiKSt0LmdldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiKSt0LmdldEF0dHJpYnV0ZSgic3R5bGUiKX12YXIgbz10KCJkMyIpLHM9dCgiZmFzdC1pc251bWVyaWMiKSxsPXQoInRpbnljb2xvcjIiKSx1PXQoIi4uLy4uL3JlZ2lzdHJ5IiksYz10KCIuLi9jb2xvciIpLGg9dCgiLi4vY29sb3JzY2FsZSIpLGY9dCgiLi4vLi4vbGliIiksZD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxwPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdj1tLkxJTkVfU1BBQ0lORyxnPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIikseT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxiPWUuZXhwb3J0cz17fTtiLmZvbnQ9ZnVuY3Rpb24odCxlLHIsbil7Zi5pc1BsYWluT2JqZWN0KGUpJiYobj1lLmNvbG9yLHI9ZS5zaXplLGU9ZS5mYW1pbHkpLGUmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlKSxyKzEmJnQuc3R5bGUoImZvbnQtc2l6ZSIscisicHgiKSxuJiZ0LmNhbGwoYy5maWxsLG4pfSxiLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIngiLGUpLmF0dHIoInkiLHIpfSxiLnNldFNpemU9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigid2lkdGgiLGUpLmF0dHIoImhlaWdodCIscil9LGIuc2V0UmVjdD1mdW5jdGlvbih0LGUscixuLGkpe3QuY2FsbChiLnNldFBvc2l0aW9uLGUscikuY2FsbChiLnNldFNpemUsbixpKX0sYi50cmFuc2xhdGVQb2ludD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLmMycCh0LngpLGE9bi5jMnAodC55KTtyZXR1cm4hIShzKGkpJiZzKGEpJiZlLm5vZGUoKSkmJigidGV4dCI9PT1lLm5vZGUoKS5ub2RlTmFtZT9lLmF0dHIoIngiLGkpLmF0dHIoInkiLGEpOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrYSsiKSIpLCEwKX0sYi50cmFuc2xhdGVQb2ludHM9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKTtiLnRyYW5zbGF0ZVBvaW50KHQsbixlLHIpfSl9LGIuaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe2UuYXR0cigiZGlzcGxheSIsci5pc1B0V2l0aGluUmFuZ2UodCkmJm4uaXNQdFdpdGhpblJhbmdlKHQpP251bGw6Im5vbmUiKX0sYi5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYoZS5faGFzQ2xpcE9uQXhpc0ZhbHNlKXt2YXIgcj1lLnhheGlzLG49ZS55YXhpczt0LmVhY2goZnVuY3Rpb24odCl7Yi5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxvLnNlbGVjdCh0aGlzKSxyLG4pfSl9fSxiLmdldFB4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE51bWJlcih0LnN0eWxlKGUpLnJlcGxhY2UoL3B4JC8sIiIpKX0sYi5jcmlzcFJvdW5kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcyhlKT90Ll9jb250ZXh0LnN0YXRpY1Bsb3Q/ZTplPDE/MTpNYXRoLnJvdW5kKGUpOnJ8fDB9LGIuc2luZ2xlTGluZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89cnx8YS53aWR0aHx8MCxzPWl8fGEuZGFzaHx8IiI7Yy5zdHJva2UoZSxufHxhLmNvbG9yKSxiLmRhc2hMaW5lKGUscyxvKX0sYi5saW5lR3JvdXBTdHlsZT1mdW5jdGlvbih0LGUscixuKXt0LnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGk9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxhPWV8fGkud2lkdGh8fDAscz1ufHxpLmRhc2h8fCIiO28uc2VsZWN0KHRoaXMpLmNhbGwoYy5zdHJva2Uscnx8aS5jb2xvcikuY2FsbChiLmRhc2hMaW5lLHMsYSl9KX0sYi5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPWIuZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7InN0cm9rZS1kYXNoYXJyYXkiOmUsInN0cm9rZS13aWR0aCI6cisicHgifSl9LGIuZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVybiJzb2xpZCI9PT10P3Q9IiI6ImRvdCI9PT10P3Q9cisicHgsIityKyJweCI6ImRhc2giPT09dD90PTMqcisicHgsIiszKnIrInB4IjoibG9uZ2Rhc2giPT09dD90PTUqcisicHgsIis1KnIrInB4IjoiZGFzaGRvdCI9PT10P3Q9MypyKyJweCwiK3IrInB4LCIrcisicHgsIityKyJweCI6ImxvbmdkYXNoZG90Ij09PXQmJih0PTUqcisicHgsIisyKnIrInB4LCIrcisicHgsIisyKnIrInB4IiksdH0sYi5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9by5zZWxlY3QodC5ub2RlKCkpLHI9ZS5kYXRhKCksbj0oKChyWzBdfHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmZpbGxjb2xvcjtuJiZ0LmNhbGwoYy5maWxsLG4pfSxiLmZpbGxHcm91cFN0eWxlPWZ1bmN0aW9uKHQpe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1vLnNlbGVjdCh0aGlzKTt0cnl7ci5jYWxsKGMuZmlsbCxlWzBdLnRyYWNlLmZpbGxjb2xvcil9Y2F0Y2goZSl7Zi5lcnJvcihlLHQpLHIucmVtb3ZlKCl9fSl9O3ZhciB4PXQoIi4vc3ltYm9sX2RlZnMiKTtiLnN5bWJvbE5hbWVzPVtdLGIuc3ltYm9sRnVuY3M9W10sYi5zeW1ib2xOZWVkTGluZXM9e30sYi5zeW1ib2xOb0RvdD17fSxiLnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMoeCkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT14W3RdO2Iuc3ltYm9sTGlzdD1iLnN5bWJvbExpc3QuY29uY2F0KFtlLm4sdCxlLm4rMTAwLHQrIi1vcGVuIl0pLGIuc3ltYm9sTmFtZXNbZS5uXT10LGIuc3ltYm9sRnVuY3NbZS5uXT1lLmYsZS5uZWVkTGluZSYmKGIuc3ltYm9sTmVlZExpbmVzW2Uubl09ITApLGUubm9Eb3Q/Yi5zeW1ib2xOb0RvdFtlLm5dPSEwOmIuc3ltYm9sTGlzdD1iLnN5bWJvbExpc3QuY29uY2F0KFtlLm4rMjAwLHQrIi1kb3QiLGUubiszMDAsdCsiLW9wZW4tZG90Il0pfSk7dmFyIF89Yi5zeW1ib2xOYW1lcy5sZW5ndGgsdz0iTTAsMC41TDAuNSwwTDAsLTAuNUwtMC41LDBaIjtiLnN5bWJvbE51bWJlcj1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPTA7dC5pbmRleE9mKCItb3BlbiIpPjAmJihlPTEwMCx0PXQucmVwbGFjZSgiLW9wZW4iLCIiKSksdC5pbmRleE9mKCItZG90Iik+MCYmKGUrPTIwMCx0PXQucmVwbGFjZSgiLWRvdCIsIiIpKSx0PWIuc3ltYm9sTmFtZXMuaW5kZXhPZih0KSx0Pj0wJiYodCs9ZSl9cmV0dXJuIHQlMTAwPj1ffHx0Pj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KHQsMCkpfTt2YXIgTT17eDE6MSx4MjowLHkxOjAseTI6MH0saz17eDE6MCx4MjowLHkxOjEseTI6MH07Yi5ncmFkaWVudD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9ZS5fZnVsbExheW91dC5fZGVmcy5zZWxlY3QoIi5ncmFkaWVudHMiKS5zZWxlY3RBbGwoIiMiK3IpLmRhdGEoW24raSthXSxmLmlkZW50aXR5KTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJyYWRpYWwiPT09bj8icmFkaWFsR3JhZGllbnQiOiJsaW5lYXJHcmFkaWVudCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1vLnNlbGVjdCh0aGlzKTsiaG9yaXpvbnRhbCI9PT1uP3QuYXR0cihNKToidmVydGljYWwiPT09biYmdC5hdHRyKGspLHQuYXR0cigiaWQiLHIpO3ZhciBlPWwoaSkscz1sKGEpO3QuYXBwZW5kKCJzdG9wIikuYXR0cih7b2Zmc2V0OiIwJSIsInN0b3AtY29sb3IiOmMudGlueVJHQihzKSwic3RvcC1vcGFjaXR5IjpzLmdldEFscGhhKCl9KSx0LmFwcGVuZCgic3RvcCIpLmF0dHIoe29mZnNldDoiMTAwJSIsInN0b3AtY29sb3IiOmMudGlueVJHQihlKSwic3RvcC1vcGFjaXR5IjplLmdldEFscGhhKCl9KX0pLHQuc3R5bGUoe2ZpbGw6InVybCgjIityKyIpIiwiZmlsbC1vcGFjaXR5IjpudWxsfSl9LGIuaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9kZWZzLnNlbGVjdEFsbCgiLmdyYWRpZW50cyIpLmRhdGEoWzBdKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ3JhZGllbnRzIiwhMCksZS5zZWxlY3RBbGwoImxpbmVhckdyYWRpZW50LHJhZGlhbEdyYWRpZW50IikucmVtb3ZlKCl9LGIuc2luZ2xlUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscixpLGEsbyl7dmFyIHM9ci5tYXJrZXI7bih0LGUscixpLGEscyxzLmxpbmUsbyl9LGIucG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBuPWUubWFya2VyLGk9Yi50cnlDb2xvcnNjYWxlKG4sIiIpLGE9Yi50cnlDb2xvcnNjYWxlKG4sImxpbmUiKTt0LmVhY2goZnVuY3Rpb24odCl7Yi5zaW5nbGVQb2ludFN0eWxlKHQsby5zZWxlY3QodGhpcyksZSxpLGEscil9KX19LGIudHJ5Q29sb3JzY2FsZT1mdW5jdGlvbih0LGUpe3ZhciByPWU/Zi5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpOnQsbj1yLmNvbG9yc2NhbGUsaT1yLmNvbG9yO3JldHVybiBuJiZBcnJheS5pc0FycmF5KGkpP2gubWFrZUNvbG9yU2NhbGVGdW5jKGguZXh0cmFjdFNjYWxlKG4sci5jbWluLHIuY21heCkpOmYuaWRlbnRpdHl9O3ZhciBBPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2IudGV4dFBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKSxpPXQudHh8fGUudGV4dDtpZighaXx8QXJyYXkuaXNBcnJheShpKSlyZXR1cm4gdm9pZCBuLnJlbW92ZSgpO3ZhciBhPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9LTEhPT1hLmluZGV4T2YoInRvcCIpPyJ0b3AiOi0xIT09YS5pbmRleE9mKCJib3R0b20iKT8iYm90dG9tIjoibWlkZGxlIix1PS0xIT09YS5pbmRleE9mKCJsZWZ0Iik/ImVuZCI6LTEhPT1hLmluZGV4T2YoInJpZ2h0Iik/InN0YXJ0IjoibWlkZGxlIixjPXQudHN8fGUudGV4dGZvbnQuc2l6ZSxoPXQubXJjP3QubXJjLy44KzE6MDtjPXMoYykmJmM+MD9jOjAsbi5jYWxsKGIuZm9udCx0LnRmfHxlLnRleHRmb250LmZhbWlseSxjLHQudGN8fGUudGV4dGZvbnQuY29sb3IpLmF0dHIoInRleHQtYW5jaG9yIix1KS50ZXh0KGkpLmNhbGwoZC5jb252ZXJ0VG9Uc3BhbnMscik7dmFyIGY9by5zZWxlY3QodGhpcy5wYXJlbnROb2RlKSxwPShkLmxpbmVDb3VudChuKS0xKSp2KzEsbT1BW3VdKmgsZz0uNzUqYytBW2xdKmgrKEFbbF0tMSkqcCpjLzI7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIittKyIsIitnKyIpIil9KX07dmFyIFQ9LjU7Yi5zbW9vdGhvcGVuPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4iTSIrdC5qb2luKCJMIik7dmFyIHIsbj0iTSIrdFswXSxhPVtdO2ZvcihyPTE7cjx0Lmxlbmd0aC0xO3IrKylhLnB1c2goaSh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihuKz0iUSIrYVswXVswXSsiICIrdFsxXSxyPTI7cjx0Lmxlbmd0aC0xO3IrKyluKz0iQyIrYVtyLTJdWzFdKyIgIithW3ItMV1bMF0rIiAiK3Rbcl07cmV0dXJuIG4rPSJRIithW3QubGVuZ3RoLTNdWzFdKyIgIit0W3QubGVuZ3RoLTFdfSxiLnNtb290aGNsb3NlZD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpKyJaIjt2YXIgcixuPSJNIit0WzBdLGE9dC5sZW5ndGgtMSxvPVtpKHRbYV0sdFswXSx0WzFdLGUpXTtmb3Iocj0xO3I8YTtyKyspby5wdXNoKGkodFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3Ioby5wdXNoKGkodFthLTFdLHRbYV0sdFswXSxlKSkscj0xO3I8PWE7cisrKW4rPSJDIitvW3ItMV1bMV0rIiAiK29bcl1bMF0rIiAiK3Rbcl07cmV0dXJuIG4rPSJDIitvW2FdWzFdKyIgIitvWzBdWzBdKyIgIit0WzBdKyJaIn07dmFyIFM9e2h2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIkgiK28ucm91bmQoZVswXSwyKSsiViIrby5yb3VuZChlWzFdLDIpfSx2aDpmdW5jdGlvbih0LGUpe3JldHVybiJWIitvLnJvdW5kKGVbMV0sMikrIkgiK28ucm91bmQoZVswXSwyKX0saHZoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIkgiK28ucm91bmQoKHRbMF0rZVswXSkvMiwyKSsiViIrby5yb3VuZChlWzFdLDIpKyJIIitvLnJvdW5kKGVbMF0sMil9LHZodjpmdW5jdGlvbih0LGUpe3JldHVybiJWIitvLnJvdW5kKCh0WzFdK2VbMV0pLzIsMikrIkgiK28ucm91bmQoZVswXSwyKSsiViIrby5yb3VuZChlWzFdLDIpfX0sRT1mdW5jdGlvbih0LGUpe3JldHVybiJMIitvLnJvdW5kKGVbMF0sMikrIiwiK28ucm91bmQoZVsxXSwyKX07Yi5zdGVwcz1mdW5jdGlvbih0KXt2YXIgZT1TW3RdfHxFO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHI9Ik0iK28ucm91bmQodFswXVswXSwyKSsiLCIrby5yb3VuZCh0WzBdWzFdLDIpLG49MTtuPHQubGVuZ3RoO24rKylyKz1lKHRbbi0xXSx0W25dKTtyZXR1cm4gcn19LGIubWFrZVRlc3Rlcj1mdW5jdGlvbigpe3ZhciB0PW8uc2VsZWN0KCJib2R5Iikuc2VsZWN0QWxsKCIjanMtcGxvdGx5LXRlc3RlciIpLmRhdGEoWzBdKTt0LmVudGVyKCkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsImpzLXBsb3RseS10ZXN0ZXIiKS5hdHRyKHAuc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwMHB4Iix0b3A6Ii0xMDAwMHB4Iix3aWR0aDoiOTAwMHB4IixoZWlnaHQ6IjkwMDBweCIsInotaW5kZXgiOiIxIn0pO3ZhciBlPXQuc2VsZWN0QWxsKCIuanMtcmVmZXJlbmNlLXBvaW50IikuZGF0YShbMF0pO2UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1yZWZlcmVuY2UtcG9pbnQiLCEwKS5hdHRyKCJkIiwiTTAsMEgxVjFIMFoiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6MCxmaWxsOiJibGFjayJ9KSxiLnRlc3Rlcj10LGIudGVzdHJlZj1lfSxiLnNhdmVkQkJveGVzPXt9O3ZhciBMPTA7Yi5iQm94PWZ1bmN0aW9uKHQsZSxyKXtyfHwocj1hKHQpKTt2YXIgbjtpZihyKXtpZihuPWIuc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGYuZXh0ZW5kRmxhdCh7fSxuKX1lbHNlIGlmKDE9PT10LmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgaT10LmNoaWxkTm9kZXNbMF07aWYocj1hKGkpKXt2YXIgcz0raS5nZXRBdHRyaWJ1dGUoIngiKXx8MCxsPStpLmdldEF0dHJpYnV0ZSgieSIpfHwwLHU9aS5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpO2lmKCF1KXt2YXIgYz1iLmJCb3goaSwhMSxyKTtyZXR1cm4gcyYmKGMubGVmdCs9cyxjLnJpZ2h0Kz1zKSxsJiYoYy50b3ArPWwsYy5ib3R0b20rPWwpLGN9aWYocis9In4iK3MrIn4iK2wrIn4iK3Usbj1iLnNhdmVkQkJveGVzW3JdKXJldHVybiBmLmV4dGVuZEZsYXQoe30sbil9fXZhciBoLHA7ZT9oPXQ6KHA9Yi50ZXN0ZXIubm9kZSgpLGg9dC5jbG9uZU5vZGUoITApLHAuYXBwZW5kQ2hpbGQoaCkpLG8uc2VsZWN0KGgpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuY2FsbChkLnBvc2l0aW9uVGV4dCwwLDApO3ZhciBtPWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1iLnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V8fHAucmVtb3ZlQ2hpbGQoaCk7dmFyIGc9e2hlaWdodDptLmhlaWdodCx3aWR0aDptLndpZHRoLGxlZnQ6bS5sZWZ0LXYubGVmdCx0b3A6bS50b3Atdi50b3AscmlnaHQ6bS5yaWdodC12LmxlZnQsYm90dG9tOm0uYm90dG9tLXYudG9wfTtyZXR1cm4gTD49MWU0JiYoYi5zYXZlZEJCb3hlcz17fSxMPTApLHImJihiLnNhdmVkQkJveGVzW3JdPWcpLEwrKyxmLmV4dGVuZEZsYXQoe30sZyl9LGIuc2V0Q2xpcFVybD1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB2b2lkIHQuYXR0cigiY2xpcC1wYXRoIixudWxsKTt2YXIgcj0iIyIrZSxuPW8uc2VsZWN0KCJiYXNlIik7bi5zaXplKCkmJm4uYXR0cigiaHJlZiIpJiYocj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdK3IpLHQuYXR0cigiY2xpcC1wYXRoIiwidXJsKCIrcisiKSIpfSxiLmdldFRyYW5zbGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0vLipcYnRyYW5zbGF0ZVwoKC0/XGQqXC4/XGQqKVteLVxkXSooLT9cZCpcLj9cZCopW15cZF0uKi8scj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLG49dFtyXSgidHJhbnNmb3JtIil8fCIiLGk9bi5yZXBsYWNlKGUsZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oIiAiKX0pLnNwbGl0KCIgIik7cmV0dXJue3g6K2lbMF18fDAseToraVsxXXx8MH19LGIuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0vKFxidHJhbnNsYXRlXCguKj9cKTs/KS8saT10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGE9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixvPXRbaV0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwwLHI9cnx8MCxvPW8ucmVwbGFjZShuLCIiKS50cmltKCksbys9IiB0cmFuc2xhdGUoIitlKyIsICIrcisiKSIsbz1vLnRyaW0oKSx0W2FdKCJ0cmFuc2Zvcm0iLG8pLG99LGIuZ2V0U2NhbGU9ZnVuY3Rpb24odCl7dmFyIGU9Ly4qXGJzY2FsZVwoKFxkKlwuP1xkKilbXlxkXSooXGQqXC4/XGQqKVteXGRdLiovLHI9dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixuPXRbcl0oInRyYW5zZm9ybSIpfHwiIixpPW4ucmVwbGFjZShlLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKCIgIil9KS5zcGxpdCgiICIpO3JldHVybnt4OitpWzBdfHwxLHk6K2lbMV18fDF9fSxiLnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0vKFxic2NhbGVcKC4qP1wpOz8pLyxpPXQuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSIsYT10LmF0dHI/ImF0dHIiOiJzZXRBdHRyaWJ1dGUiLG89dFtpXSgidHJhbnNmb3JtIil8fCIiO3JldHVybiBlPWV8fDEscj1yfHwxLG89by5yZXBsYWNlKG4sIiIpLnRyaW0oKSxvKz0iIHNjYWxlKCIrZSsiLCAiK3IrIikiLG89by50cmltKCksdFthXSgidHJhbnNmb3JtIixvKSxvfSxiLnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhO3JldHVybiBlPWV8fDEscj1yfHwxLGk9MT09PWUmJjE9PT1yPyIiOiIgc2NhbGUoIitlKyIsIityKyIpIixhPS9ccypzYy4qLyx0LmVhY2goZnVuY3Rpb24oKXtuPSh0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKGEsIiIpLG4rPWksbj1uLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKX0pLGl9O3ZhciBDPS90cmFuc2xhdGVcKFteKV0qXClccyokLztiLnNldFRleHRQb2ludHNTY2FsZT1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsbj1vLnNlbGVjdCh0aGlzKSxpPW4uc2VsZWN0KCJ0ZXh0IiksYT1wYXJzZUZsb2F0KGkuYXR0cigieCIpfHwwKSxzPXBhcnNlRmxvYXQoaS5hdHRyKCJ5Iil8fDApLGw9KG4uYXR0cigidHJhbnNmb3JtIil8fCIiKS5tYXRjaChDKTt0PTE9PT1lJiYxPT09cj9bXTpbInRyYW5zbGF0ZSgiK2ErIiwiK3MrIikiLCJzY2FsZSgiK2UrIiwiK3IrIikiLCJ0cmFuc2xhdGUoIistYSsiLCIrLXMrIikiXSxsJiZ0LnB1c2gobCksbi5hdHRyKCJ0cmFuc2Zvcm0iLHQuam9pbigiICIpKX0pfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MDYsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDQwLCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiLi4vY29sb3IiOjYwMiwiLi4vY29sb3JzY2FsZSI6NjE2LCIuL3N5bWJvbF9kZWZzIjo2MjcsZDM6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTI5LHRpbnljb2xvcjI6NTMyfV0sNjI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPXtjaXJjbGU6e246MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifX0sc3F1YXJlOntuOjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9fSxkaWFtb25kOntuOjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWiJ9fSxjcm9zczp7bjozLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNCp0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSCIrZSsiViIrcisiSC0iK2UrIlYiK2UrIkgtIityKyJWLSIrZSsiSC0iK2UrIlYtIityKyJIIitlKyJWLSIrZSsiSCIrcisiWiJ9fSx4OntuOjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC44KnQvTWF0aC5zcXJ0KDIpLDIpLHI9ImwiK2UrIiwiK2UsaT0ibCIrZSsiLC0iK2UsYT0ibC0iK2UrIiwtIitlLG89ImwtIitlKyIsIitlO3JldHVybiJNMCwiK2UrcitpK2EraSthK28rYStvK3IrbytyKyJaIn19LCJ0cmlhbmdsZS11cCI6e246NSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK2UrIiwiK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwtIituLnJvdW5kKHQsMikrIloifX0sInRyaWFuZ2xlLWRvd24iOntuOjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsLSIrbi5yb3VuZCh0LzIsMikrIkgiK2UrIkwwLCIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1sZWZ0Ijp7bjo3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNIituLnJvdW5kKHQvMiwyKSsiLC0iK2UrIlYiK2UrIkwtIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtcmlnaHQiOntuOjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIituLnJvdW5kKHQvMiwyKSsiLC0iK2UrIlYiK2UrIkwiK24ucm91bmQodCwyKSsiLDBaIn19LCJ0cmlhbmdsZS1uZSI6e246OSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0tIityKyIsLSIrZSsiSCIrZSsiViIrcisiWiJ9fSwidHJpYW5nbGUtc2UiOntuOjEwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrZSsiLC0iK3IrIlYiK2UrIkgtIityKyJaIn19LCJ0cmlhbmdsZS1zdyI6e246MTEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIityKyIsIitlKyJILSIrZSsiVi0iK3IrIloifX0sInRyaWFuZ2xlLW53Ijp7bjoxMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0tIitlKyIsIityKyJWLSIrZSsiSCIrcisiWiJ9fSxwZW50YWdvbjp7bjoxMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjk1MSp0LDIpLHI9bi5yb3VuZCguNTg4KnQsMiksaT1uLnJvdW5kKC10LDIpLGE9bi5yb3VuZCgtLjMwOSp0LDIpO3JldHVybiJNIitlKyIsIithKyJMIityKyIsIituLnJvdW5kKC44MDkqdCwyKSsiSC0iK3IrIkwtIitlKyIsIithKyJMMCwiK2krIloifX0saGV4YWdvbjp7bjoxNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVybiJNIitpKyIsLSIrcisiViIrcisiTDAsIitlKyJMLSIraSsiLCIrcisiVi0iK3IrIkwwLC0iK2UrIloifX0saGV4YWdvbjI6e246MTUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTS0iK3IrIiwiK2krIkgiK3IrIkwiK2UrIiwwTCIrcisiLC0iK2krIkgtIityKyJMLSIrZSsiLDBaIn19LG9jdGFnb246e246MTYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45MjQqdCwyKSxyPW4ucm91bmQoLjM4Myp0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK3IrIkwiK2UrIiwtIityKyJWIityKyJMIityKyIsIitlKyJILSIrcisiTC0iK2UrIiwiK3IrIlYtIityKyJaIn19LHN0YXI6e246MTcsZjpmdW5jdGlvbih0KXt2YXIgZT0xLjQqdCxyPW4ucm91bmQoLjIyNSplLDIpLGk9bi5yb3VuZCguOTUxKmUsMiksYT1uLnJvdW5kKC4zNjMqZSwyKSxvPW4ucm91bmQoLjU4OCplLDIpLHM9bi5yb3VuZCgtZSwyKSxsPW4ucm91bmQoLS4zMDkqZSwyKSx1PW4ucm91bmQoLjExOCplLDIpLGM9bi5yb3VuZCguODA5KmUsMik7cmV0dXJuIk0iK3IrIiwiK2wrIkgiK2krIkwiK2ErIiwiK3UrIkwiK28rIiwiK2MrIkwwLCIrbi5yb3VuZCguMzgyKmUsMikrIkwtIitvKyIsIitjKyJMLSIrYSsiLCIrdSsiTC0iK2krIiwiK2wrIkgtIityKyJMMCwiK3MrIloifX0saGV4YWdyYW06e246MTgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42Nip0LDIpLHI9bi5yb3VuZCguMzgqdCwyKSxpPW4ucm91bmQoLjc2KnQsMik7cmV0dXJuIk0tIitpKyIsMGwtIityKyIsLSIrZSsiaCIraSsibCIrcisiLC0iK2UrImwiK3IrIiwiK2UrImgiK2krImwtIityKyIsIitlKyJsIityKyIsIitlKyJoLSIraSsibC0iK3IrIiwiK2UrImwtIityKyIsLSIrZSsiaC0iK2krIloifX0sInN0YXItdHJpYW5nbGUtdXAiOntuOjE5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPSJBICIrYSsiLCIrYSsiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsIityK28rZSsiLCIrcitvKyIwLC0iK2krbysiLSIrZSsiLCIrcisiWiJ9fSwic3Rhci10cmlhbmdsZS1kb3duIjp7bjoyMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNIitlKyIsLSIrcitvKyItIitlKyIsLSIrcitvKyIwLCIraStvK2UrIiwtIityKyJaIn19LCJzdGFyLXNxdWFyZSI6e246MjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMSp0LDIpLHI9bi5yb3VuZCgyKnQsMiksaT0iQSAiK3IrIiwiK3IrIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLC0iK2UraSsiLSIrZSsiLCIrZStpK2UrIiwiK2UraStlKyIsLSIrZStpKyItIitlKyIsLSIrZSsiWiJ9fSwic3Rhci1kaWFtb25kIjp7bjoyMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKDEuOSp0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwwIitpKyIwLCIrZStpK2UrIiwwIitpKyIwLC0iK2UraSsiLSIrZSsiLDBaIn19LCJkaWFtb25kLXRhbGwiOntuOjIzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNyp0LDIpLHI9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0sImRpYW1vbmQtd2lkZSI6e246MjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCguNyp0LDIpO3JldHVybiJNMCwiK3IrIkwiK2UrIiwwTDAsLSIrcisiTC0iK2UrIiwwWiJ9fSxob3VyZ2xhc3M6e246MjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkgtIitlKyJMIitlKyIsLSIrZSsiSC0iK2UrIloifSxub0RvdDohMH0sYm93dGllOntuOjI2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJWLSIrZSsiTC0iK2UrIiwiK2UrIlYtIitlKyJaIn0sbm9Eb3Q6ITB9LCJjaXJjbGUtY3Jvc3MiOntuOjI3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiY2lyY2xlLXgiOntuOjI4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0L01hdGguc3FydCgyKSwyKTtyZXR1cm4iTSIrcisiLCIrcisiTC0iK3IrIiwtIityKyJNIityKyIsLSIrcisiTC0iK3IrIiwiK3IrIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUtY3Jvc3MiOntuOjI5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sInNxdWFyZS14Ijp7bjozMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlKyJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2UrIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiZGlhbW9uZC1jcm9zcyI6e246MzEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWk0wLC0iK2UrIlYiK2UrIk0tIitlKyIsMEgiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiZGlhbW9uZC14Ijp7bjozMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMikscj1uLnJvdW5kKC42NSp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWk0tIityKyIsLSIrcisiTCIrcisiLCIrcisiTS0iK3IrIiwiK3IrIkwiK3IrIiwtIityfSxuZWVkTGluZTohMCxub0RvdDohMH0sImNyb3NzLXRoaW4iOntuOjMzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJ4LXRoaW4iOntuOjM0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoLjg1KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityfSxuZWVkTGluZTohMCxub0RvdDohMH0saGFzaDp7bjozNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodC8yLDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIityKyJWLSIrcisibS0iK3IrIiwwViIrcisiTSIrcisiLCIrZSsiSC0iK3IrIm0wLC0iK3IrIkgiK3J9LG5lZWRMaW5lOiEwfSwieS11cCI6e246MzcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK2krIkwwLDBNIitlKyIsIitpKyJMMCwwTTAsLSIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwieS1kb3duIjp7bjozOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLC0iK2krIkwwLDBNIitlKyIsLSIraSsiTDAsME0wLCIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwieS1sZWZ0Ijp7bjozOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNIitpKyIsIitlKyJMMCwwTSIraSsiLC0iK2UrIkwwLDBNLSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJ5LXJpZ2h0Ijp7bjo0MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIraSsiLCIrZSsiTDAsME0tIitpKyIsLSIrZSsiTDAsME0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwibGluZS1ldyI6e246NDEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImxpbmUtbnMiOntuOjQyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJsaW5lLW5lIjp7bjo0MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImxpbmUtbnciOntuOjQ0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfX19LHtkMzoxMjB9XSw2Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGVyY2VudCIsImNvbnN0YW50Iiwic3FydCIsImRhdGEiXX0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIn0sYXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxhcnJheW1pbnVzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0sdmFsdWVtaW51czp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSx0cmFjZXJlZjp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowfSx0cmFjZXJlZm1pbnVzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIn0sY29weV96c3R5bGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxjb2xvcjp7dmFsVHlwZToiY29sb3IifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MH0sX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciJ9fX19LHt9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgYT1lWyJlcnJvcl8iK25dfHx7fSxsPWEudmlzaWJsZSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2Yoci50eXBlKSx1PVtdO2lmKGwpe2Zvcih2YXIgYz1zKGEpLGg9MDtoPHQubGVuZ3RoO2grKyl7dmFyIGY9dFtoXSxkPWZbbl07aWYoaShyLmMybChkKSkpe3ZhciBwPWMoZCxoKTtpZihpKHBbMF0pJiZpKHBbMV0pKXt2YXIgbT1mW24rInMiXT1kLXBbMF0sdj1mW24rImgiXT1kK3BbMV07dS5wdXNoKG0sdil9fX1vLmV4cGFuZChyLHUse3BhZGRlZDohMH0pfX12YXIgaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuL2NvbXB1dGVfZXJyb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdLHM9aVswXS50cmFjZTtpZihhLnRyYWNlSXMocywiZXJyb3JCYXJzT0siKSl7dmFyIGw9by5nZXRGcm9tSWQodCxzLnhheGlzKSx1PW8uZ2V0RnJvbUlkKHQscy55YXhpcyk7bihpLHMsbCwieCIpLG4oaSxzLHUsInkiKX19fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2NvbXB1dGVfZXJyb3IiOjYzMCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuInBlcmNlbnQiPT09dD9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModCplLzEwMCl9OiJjb25zdGFudCI9PT10P2Z1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKGUpfToic3FydCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5hYnModCkpfTp2b2lkIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZSxyPXQuc3ltbWV0cmljO2lmKCJkYXRhIj09PWUpe3ZhciBpPXQuYXJyYXksYT10LmFycmF5bWludXM7cmV0dXJuIHJ8fHZvaWQgMD09PWE/ZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX06ZnVuY3Rpb24odCxlKXtyZXR1cm5bK2FbZV0sK2lbZV1dfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSw2MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGEuY29lcmNlKGgsYyxvLHQsZSl9dmFyIHU9ImVycm9yXyIrcy5heGlzLGM9ZVt1XT17fSxoPXRbdV18fHt9O2lmKCExIT09bCgidmlzaWJsZSIsdm9pZCAwIT09aC5hcnJheXx8dm9pZCAwIT09aC52YWx1ZXx8InNxcnQiPT09aC50eXBlKSl7dmFyIGY9bCgidHlwZSIsImFycmF5ImluIGg/ImRhdGEiOiJwZXJjZW50IiksZD0hMDsic3FydCIhPT1mJiYoZD1sKCJzeW1tZXRyaWMiLCEoKCJkYXRhIj09PWY/ImFycmF5bWludXMiOiJ2YWx1ZW1pbnVzIilpbiBoKSkpLCJkYXRhIj09PWY/KGwoImFycmF5Iil8fChjLmFycmF5PVtdKSxsKCJ0cmFjZXJlZiIpLGR8fChsKCJhcnJheW1pbnVzIil8fChjLmFycmF5bWludXM9W10pLGwoInRyYWNlcmVmbWludXMiKSkpOiJwZXJjZW50IiE9PWYmJiJjb25zdGFudCIhPT1mfHwobCgidmFsdWUiKSxkfHxsKCJ2YWx1ZW1pbnVzIikpO3ZhciBwPSJjb3B5XyIrcy5pbmhlcml0KyJzdHlsZSI7cy5pbmhlcml0JiYoZVsiZXJyb3JfIitzLmluaGVyaXRdfHx7fSkudmlzaWJsZSYmbChwLCEoaC5jb2xvcnx8bihoLnRoaWNrbmVzcyl8fG4oaC53aWR0aCkpKSxzLmluaGVyaXQmJmNbcF18fChsKCJjb2xvciIsciksbCgidGhpY2tuZXNzIiksbCgid2lkdGgiLGkudHJhY2VJcyhlLCJnbDNkIik/MDo0KSl9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi9hdHRyaWJ1dGVzIjo2MjgsImZhc3QtaXNudW1lcmljIjoxMjl9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5jYWxjRnJvbVRyYWNlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQueHx8W10saT10Lnl8fFtdLGE9ci5sZW5ndGh8fGkubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7cysrKW9bc109e3g6cltzXSx5Omlbc119O3JldHVybiBvWzBdLnRyYWNlPXQsbi5jYWxjKHtjYWxjZGF0YTpbb10sX2Z1bGxMYXlvdXQ6ZX0pLG99LG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVySW5mbz1mdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpLChlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19LHsiLi9hdHRyaWJ1dGVzIjo2MjgsIi4vY2FsYyI6NjI5LCIuL2RlZmF1bHRzIjo2MzEsIi4vcGxvdCI6NjMzLCIuL3N0eWxlIjo2MzR9XSw2MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49e3g6ZS5jMnAodC54KSx5OnIuYzJwKHQueSl9O3JldHVybiB2b2lkIDAhPT10LnloJiYobi55aD1yLmMycCh0LnloKSxuLnlzPXIuYzJwKHQueXMpLGEobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycCh0LnlzLCEwKSkpLHZvaWQgMCE9PXQueGgmJihuLnhoPWUuYzJwKHQueGgpLG4ueHM9ZS5jMnAodC54cyksYShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPWUuYzJwKHQueHMsITApKSksbn12YXIgaT10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbCx1PWUueGF4aXMsYz1lLnlheGlzLGg9ciYmci5kdXJhdGlvbj4wO3QuZWFjaChmdW5jdGlvbih0KXt2YXIgZixkPXRbMF0udHJhY2UscD1kLmVycm9yX3h8fHt9LG09ZC5lcnJvcl95fHx7fTtkLmlkcyYmKGY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KTt2YXIgdj1zLmhhc01hcmtlcnMoZCkmJmQubWFya2VyLm1heGRpc3BsYXllZD4wO2lmKG0udmlzaWJsZXx8cC52aXNpYmxlKXt2YXIgZz1pLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZXJyb3JiYXIiKS5kYXRhKHQsZik7Zy5leGl0KCkucmVtb3ZlKCksZy5zdHlsZSgib3BhY2l0eSIsMSk7dmFyIHk9Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVycm9yYmFyIiwhMCk7aCYmeS5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxvLnNldENsaXBVcmwoZyxlLmxheWVyQ2xpcElkKSxnLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyksbz1uKHQsdSxjKTtpZighdnx8dC52aXMpe3ZhciBzO2lmKG0udmlzaWJsZSYmYShvLngpJiZhKG8ueWgpJiZhKG8ueXMpKXt2YXIgZj1tLndpZHRoO3M9Ik0iKyhvLngtZikrIiwiK28ueWgrImgiKzIqZisibS0iK2YrIiwwViIrby55cyxvLm5vWVN8fChzKz0ibS0iK2YrIiwwaCIrMipmKTt2YXIgZD1lLnNlbGVjdCgicGF0aC55ZXJyb3IiKTtsPSFkLnNpemUoKSxsP2Q9ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInllcnJvciIsITApOmgmJihkPWQudHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpKSxkLmF0dHIoImQiLHMpfWlmKHAudmlzaWJsZSYmYShvLnkpJiZhKG8ueGgpJiZhKG8ueHMpKXt2YXIgZz0ocC5jb3B5X3lzdHlsZT9tOnApLndpZHRoO3M9Ik0iK28ueGgrIiwiKyhvLnktZykrInYiKzIqZysibTAsLSIrZysiSCIrby54cyxvLm5vWFN8fChzKz0ibTAsLSIrZysidiIrMipnKTt2YXIgeT1lLnNlbGVjdCgicGF0aC54ZXJyb3IiKTtsPSF5LnNpemUoKSxsP3k9ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInhlcnJvciIsITApOmgmJih5PXkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpKSx5LmF0dHIoImQiLHMpfX19KX19KX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsIi4uL2RyYXdpbmciOjYyNixkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjl9XSw2MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxhPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLHIuY29sb3IpLGEuY29weV95c3R5bGUmJihhPXIpLG8uc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGEudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2UsYS5jb2xvcil9KX19LHsiLi4vY29sb3IiOjYwMixkMzoxMjB9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITB9LGZvbnQ6e2ZhbWlseTpuKHt9LGkuZmFtaWx5LHthcnJheU9rOiEwfSksc2l6ZTpuKHt9LGkuc2l6ZSx7YXJyYXlPazohMH0pLGNvbG9yOm4oe30saS5jb2xvcix7YXJyYXlPazohMH0pfSxuYW1lbGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsYXJyYXlPazohMH19fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4fV0sNjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7bj1ufHxpLmlkZW50aXR5LEFycmF5LmlzQXJyYXkodCkmJihlWzBdW3JdPW4odCkpfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0LG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIHM9ZVtvXSxsPXNbMF0udHJhY2U7aWYoIWEudHJhY2VJcyhsLCJwaWUiKSl7dmFyIHU9YS50cmFjZUlzKGwsIjJkTWFwIik/bjppLmZpbGxBcnJheTt1KGwuaG92ZXJpbmZvLHMsImhpIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkuY29lcmNlSG92ZXJpbmZvKHtob3ZlcmluZm86ZX0se19tb2R1bGU6dC5fbW9kdWxlfSxyKX19KGwpKSxsLmhvdmVybGFiZWwmJih1KGwuaG92ZXJsYWJlbC5iZ2NvbG9yLHMsImhiZyIpLHUobC5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLHMsImhiYyIpLHUobC5ob3ZlcmxhYmVsLmZvbnQuc2l6ZSxzLCJodHMiKSx1KGwuaG92ZXJsYWJlbC5mb250LmNvbG9yLHMsImh0YyIpLHUobC5ob3ZlcmxhYmVsLmZvbnQuZmFtaWx5LHMsImh0ZiIpLHUobC5ob3ZlcmxhYmVsLm5hbWVsZW5ndGgscywiaG5sIikpfX19fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyfV0sNjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuL2hvdmVyIikuaG92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKCl7dC5lbWl0KCJwbG90bHlfY2xpY2siLHtwb2ludHM6dC5faG92ZXJkYXRhLGV2ZW50OmV9KX12YXIgbz1uLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJvbkNsaWNrIikodCx0Ll9ob3ZlcmRhdGEpO3ZvaWQgMCE9PXImJmkodCxlLHIsITApLHQuX2hvdmVyZGF0YSYmZSYmZS50YXJnZXQmJihvJiZvLnRoZW4/by50aGVuKGEpOmEoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vaG92ZXIiOjY0MX1dLDYzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e01BWERJU1Q6MjAsWUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6IkFyaWFsLCBzYW5zLXNlcmlmIixIT1ZFUk1JTlRJTUU6NTB9fSx7fV0sNjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEodCxlLHMsby5ob3ZlcmxhYmVsKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6NjM1LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY0Mn1dLDY0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQociksaT1lKHIpO3JldHVybiBNYXRoLnNxcnQobipuK2kqaSl9fXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9jb25zdGFudHMiKTtyLmdldFN1YnBsb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3VicGxvdHx8dC54YXhpcyt0LnlheGlzfHx0Lmdlb30sci5mbGF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09ZTtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10W25dLnAyYyhlKTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiJjbG9zZXN0Ij09PXQ/aXx8bihlLHIpOiJ4Ij09PXQ/ZTpyfSxyLmdldENsb3Nlc3Q9ZnVuY3Rpb24odCxlLHIpe2lmKCExIT09ci5pbmRleClyLmluZGV4Pj0wJiZyLmluZGV4PHQubGVuZ3RoP3IuZGlzdGFuY2U9MDpyLmluZGV4PSExO2Vsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUodFtuXSk7aTw9ci5kaXN0YW5jZSYmKHIuaW5kZXg9bixyLmRpc3RhbmNlPWkpfXJldHVybiByfSxyLmluYm94PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQqZTwwfHwwPT09dD9hLk1BWERJU1QqKC42LS4zL01hdGgubWF4KDMsTWF0aC5hYnModC1lKSkpOjEvMH0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuX2FycmF5QXR0cnM7aWYobilmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG8scz1uW2FdO2lmKG89ImlkcyI9PT1zPyJpZCI6ImxvY2F0aW9ucyI9PT1zPyJsb2NhdGlvbiI6cyx2b2lkIDA9PT10W29dKXt2YXIgbD1pLm5lc3RlZFByb3BlcnR5KGUscykuZ2V0KCk7QXJyYXkuaXNBcnJheShyKT9BcnJheS5pc0FycmF5KGwpJiZBcnJheS5pc0FycmF5KGxbclswXV0pJiYodFtvXT1sW3JbMF1dW3JbMV1dKTp0W29dPWxbcl19fX19LHsiLi4vLi4vbGliIjo3MjQsIi4vY29uc3RhbnRzIjo2Mzh9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtpZigoInBpZSI9PT1yfHwic2Fua2V5Ij09PXIpJiYhbilyZXR1cm4gdm9pZCB0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUub3JpZ2luYWxFdmVudCxwb2ludHM6W2VdfSk7cnx8KHI9Inh5Iik7dmFyIGY9QXJyYXkuaXNBcnJheShyKT9yOltyXSxtPXQuX2Z1bGxMYXlvdXQsZz1tLl9wbG90c3x8W10saz1nW3JdO2lmKGspe3ZhciBBPWsub3ZlcmxheXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7Zj1mLmNvbmNhdChBKX1mb3IodmFyIFQ9Zi5sZW5ndGgsUz1uZXcgQXJyYXkoVCksRT1uZXcgQXJyYXkoVCksTD0wO0w8VDtMKyspe3ZhciBDPWZbTF0sej1nW0NdO2lmKHopU1tMXT14LmdldEZyb21JZCh0LHoueGF4aXMuX2lkKSxFW0xdPXguZ2V0RnJvbUlkKHQsei55YXhpcy5faWQpO2Vsc2V7dmFyIEk9bVtDXS5fc3VicGxvdDtTW0xdPUkueGF4aXMsRVtMXT1JLnlheGlzfX12YXIgRD1lLmhvdmVybW9kZXx8bS5ob3Zlcm1vZGU7aWYoLTE9PT1bIngiLCJ5IiwiY2xvc2VzdCJdLmluZGV4T2YoRCl8fCF0LmNhbGNkYXRhfHx0LnF1ZXJ5U2VsZWN0b3IoIi56b29tYm94Iil8fHQuX2RyYWdnaW5nKXJldHVybiBiLnVuaG92ZXJSYXcodCxlKTt2YXIgUCxPLFIsRixqLE4sQixVLFYsSCxxLEcsWSxYPVtdLFc9W107aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoRD0iYXJyYXkiLFI9MDtSPGUubGVuZ3RoO1IrKylqPXQuY2FsY2RhdGFbZVtSXS5jdXJ2ZU51bWJlcnx8MF0sInNraXAiIT09alswXS50cmFjZS5ob3ZlcmluZm8mJlcucHVzaChqKTtlbHNle2ZvcihGPTA7Rjx0LmNhbGNkYXRhLmxlbmd0aDtGKyspaj10LmNhbGNkYXRhW0ZdLE49alswXS50cmFjZSwic2tpcCIhPT1OLmhvdmVyaW5mbyYmLTEhPT1mLmluZGV4T2Yody5nZXRTdWJwbG90KE4pKSYmVy5wdXNoKGopO3ZhciBaLEosSz0hZS50YXJnZXQ7aWYoSylaPSJ4cHgiaW4gZT9lLnhweDpTWzBdLl9sZW5ndGgvMixKPSJ5cHgiaW4gZT9lLnlweDpFWzBdLl9sZW5ndGgvMjtlbHNle2lmKCExPT09cC50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpKXJldHVybjt2YXIgUT1lLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihaPWUuY2xpZW50WC1RLmxlZnQsSj1lLmNsaWVudFktUS50b3AsWjwwfHxaPlEud2lkdGh8fEo8MHx8Sj5RLmhlaWdodClyZXR1cm4gYi51bmhvdmVyUmF3KHQsZSl9aWYoUD0ieHZhbCJpbiBlP3cuZmxhdChmLGUueHZhbCk6dy5wMmMoUyxaKSxPPSJ5dmFsImluIGU/dy5mbGF0KGYsZS55dmFsKTp3LnAyYyhFLEopLCFoKFBbMF0pfHwhaChPWzBdKSlyZXR1cm4gZC53YXJuKCJGeC5ob3ZlciBmYWlsZWQiLGUsdCksYi51bmhvdmVyUmF3KHQsZSl9dmFyICQ9MS8wO2ZvcihGPTA7RjxXLmxlbmd0aDtGKyspaWYoKGo9V1tGXSkmJmpbMF0mJmpbMF0udHJhY2UmJiEwPT09alswXS50cmFjZS52aXNpYmxlJiYoTj1qWzBdLnRyYWNlLC0xPT09WyJjYXJwZXQiLCJjb250b3VyY2FycGV0Il0uaW5kZXhPZihOLl9tb2R1bGUubmFtZSkpKXtpZihCPXcuZ2V0U3VicGxvdChOKSxVPWYuaW5kZXhPZihCKSxWPUQsRz17Y2Q6aix0cmFjZTpOLHhhOlNbVV0seWE6RVtVXSxpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbigkLE0uTUFYRElTVCksY29sb3I6eS5kZWZhdWx0TGluZSxuYW1lOk4ubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LG1bQl0mJihHLnN1YnBsb3Q9bVtCXS5fc3VicGxvdCksWT1YLmxlbmd0aCwiYXJyYXkiPT09Vil7dmFyIHR0PWVbRl07InBvaW50TnVtYmVyImluIHR0PyhHLmluZGV4PXR0LnBvaW50TnVtYmVyLFY9ImNsb3Nlc3QiKTooVj0iIiwieHZhbCJpbiB0dCYmKEg9dHQueHZhbCxWPSJ4IiksInl2YWwiaW4gdHQmJihxPXR0Lnl2YWwsVj1WPyJjbG9zZXN0IjoieSIpKX1lbHNlIEg9UFtVXSxxPU9bVV07aWYoTi5fbW9kdWxlJiZOLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBldD1OLl9tb2R1bGUuaG92ZXJQb2ludHMoRyxILHEsVik7aWYoZXQpZm9yKHZhciBydCxudD0wO250PGV0Lmxlbmd0aDtudCsrKXJ0PWV0W250XSxoKHJ0LngwKSYmaChydC55MCkmJlgucHVzaChzKHJ0LEQpKX1lbHNlIGQubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjoiLE4pOyJjbG9zZXN0Ij09PUQmJlgubGVuZ3RoPlkmJihYLnNwbGljZSgwLFkpLCQ9WFswXS5kaXN0YW5jZSl9aWYoMD09PVgubGVuZ3RoKXJldHVybiBiLnVuaG92ZXJSYXcodCxlKTtYLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZS1lLmRpc3RhbmNlfSk7dmFyIGl0PXQuX2hvdmVyZGF0YSxhdD1bXTtmb3IoUj0wO1I8WC5sZW5ndGg7UisrKXt2YXIgb3Q9WFtSXSxzdD17ZGF0YTpvdC50cmFjZS5faW5wdXQsZnVsbERhdGE6b3QudHJhY2UsY3VydmVOdW1iZXI6b3QudHJhY2UuaW5kZXgscG9pbnROdW1iZXI6b3QuaW5kZXh9O290LnRyYWNlLl9tb2R1bGUuZXZlbnREYXRhP3N0PW90LnRyYWNlLl9tb2R1bGUuZXZlbnREYXRhKHN0LG90KTooc3QueD1vdC54VmFsLHN0Lnk9b3QueVZhbCxzdC54YXhpcz1vdC54YSxzdC55YXhpcz1vdC55YSx2b2lkIDAhPT1vdC56TGFiZWxWYWwmJihzdC56PW90LnpMYWJlbFZhbCkpLHcuYXBwZW5kQXJyYXlQb2ludFZhbHVlKHN0LG90LnRyYWNlLG90LmluZGV4KSxhdC5wdXNoKHN0KX1pZih0Ll9ob3ZlcmRhdGE9YXQsdSh0LGUsaXQpJiZtLl9oYXNDYXJ0ZXNpYW4pe2woWCx7aG92ZXJtb2RlOkQsZnVsbExheW91dDptLGNvbnRhaW5lcjptLl9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOm0uX3BhcGVyZGl2fSl9dmFyIGx0PSJ5Ij09PUQmJlcubGVuZ3RoPjEsdXQ9eS5jb21iaW5lKG0ucGxvdF9iZ2NvbG9yfHx5LmJhY2tncm91bmQsbS5wYXBlcl9iZ2NvbG9yKSxjdD17aG92ZXJtb2RlOkQscm90YXRlTGFiZWxzOmx0LGJnQ29sb3I6dXQsY29udGFpbmVyOm0uX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6bS5fcGFwZXJkaXYsY29tbW9uTGFiZWxPcHRzOm0uaG92ZXJsYWJlbH0saHQ9aShYLGN0LHQpO2lmKGEoWCxsdD8ieGEiOiJ5YSIpLG8oaHQsbHQpLGUudGFyZ2V0JiZlLnRhcmdldC50YWdOYW1lKXsKdmFyIGZ0PV8uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImhhc0NsaWNrVG9TaG93IikodCxhdCk7dihjLnNlbGVjdChlLnRhcmdldCksZnQ/InBvaW50ZXIiOiIiKX1lLnRhcmdldCYmIW4mJnUodCxlLGl0KSYmKGl0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6aXR9KSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczpTLHlheGVzOkUseHZhbHM6UCx5dmFsczpPfSkpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYT1lLmhvdmVybW9kZSxvPWUucm90YXRlTGFiZWxzLHM9ZS5iZ0NvbG9yLGw9ZS5jb250YWluZXIsdT1lLm91dGVyQ29udGFpbmVyLGg9ZS5jb21tb25MYWJlbE9wdHN8fHt9LGY9ZS5mb250RmFtaWx5fHxNLkhPVkVSRk9OVCxkPWUuZm9udFNpemV8fE0uSE9WRVJGT05UU0laRSxwPXRbMF0sdj1wLnhhLGI9cC55YSx4PSJ5Ij09PWE/InlMYWJlbCI6InhMYWJlbCIsXz1wW3hdLHc9KFN0cmluZyhfKXx8IiIpLnNwbGl0KCIgIilbMF0sQT11Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxUPUEudG9wLFM9QS53aWR0aCxFPUEuaGVpZ2h0LHo9cC5kaXN0YW5jZTw9TS5NQVhESVNUJiYoIngiPT09YXx8InkiPT09YSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7aT10W25dLmhvdmVyaW5mb3x8dFtuXS50cmFjZS5ob3ZlcmluZm87dmFyIEk9aS5zcGxpdCgiKyIpO2lmKC0xPT09SS5pbmRleE9mKCJhbGwiKSYmLTE9PT1JLmluZGV4T2YoYSkpe3o9ITE7YnJlYWt9fXZhciBEPWwuc2VsZWN0QWxsKCJnLmF4aXN0ZXh0IikuZGF0YSh6P1swXTpbXSk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCksRC5leGl0KCkucmVtb3ZlKCksRC5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Yy5zZWxlY3QodGhpcyksbj1lLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoWzBdKSxpPWUuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO24uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSh7ZmlsbDpoLmJnY29sb3J8fHkuZGVmYXVsdExpbmUsc3Ryb2tlOmguYm9yZGVyY29sb3J8fHkuYmFja2dyb3VuZCwic3Ryb2tlLXdpZHRoIjoiMXB4In0pLGkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jYWxsKGcuZm9udCxoLmZvbnQuZmFtaWx5fHxmLGguZm9udC5zaXplfHxkLGguZm9udC5jb2xvcnx8eS5iYWNrZ3JvdW5kKS5hdHRyKCJkYXRhLW5vdGV4IiwxKSxpLnRleHQoXykuY2FsbChtLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobS5jb252ZXJ0VG9Uc3BhbnMsciksZS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKTt2YXIgbz1pLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigieCI9PT1hKXtpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChtLnBvc2l0aW9uVGV4dCwwLCJ0b3AiPT09di5zaWRlP1Qtby5ib3R0b20tTC1DOlQtby50b3ArTCtDKTt2YXIgcz0idG9wIj09PXYuc2lkZT8iLSI6IiI7bi5hdHRyKCJkIiwiTTAsMEwiK0wrIiwiK3MrTCsiSCIrKEMrby53aWR0aC8yKSsidiIrcysoMipDK28uaGVpZ2h0KSsiSC0iKyhDK28ud2lkdGgvMikrIlYiK3MrTCsiSC0iK0wrIloiKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh2Ll9vZmZzZXQrKHAueDArcC54MSkvMikrIiwiKyhiLl9vZmZzZXQrKCJ0b3AiPT09di5zaWRlPzA6Yi5fbGVuZ3RoKSkrIikiKX1lbHNle2kuYXR0cigidGV4dC1hbmNob3IiLCJyaWdodCI9PT1iLnNpZGU/InN0YXJ0IjoiZW5kIikuY2FsbChtLnBvc2l0aW9uVGV4dCwoInJpZ2h0Ij09PWIuc2lkZT8xOi0xKSooQytMKSxULW8udG9wLW8uaGVpZ2h0LzIpO3ZhciBsPSJyaWdodCI9PT1iLnNpZGU/IiI6Ii0iO24uYXR0cigiZCIsIk0wLDBMIitsK0wrIiwiK0wrIlYiKyhDK28uaGVpZ2h0LzIpKyJoIitsKygyKkMrby53aWR0aCkrIlYtIisoQytvLmhlaWdodC8yKSsiSCIrbCtMKyJWLSIrTCsiWiIpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHYuX29mZnNldCsoInJpZ2h0Ij09PWIuc2lkZT92Ll9sZW5ndGg6MCkpKyIsIisoYi5fb2Zmc2V0KyhwLnkwK3AueTEpLzIpKyIpIil9dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC56TGFiZWxWYWx8fCh0W3hdfHwiIikuc3BsaXQoIiAiKVswXT09PXd9KX0pO3ZhciBQPWwuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEodCxmdW5jdGlvbih0KXtyZXR1cm5bdC50cmFjZS5pbmRleCx0LmluZGV4LHQueDAsdC55MCx0Lm5hbWUsdC5hdHRyLHQueGEsdC55YXx8IiJdLmpvaW4oIiwiKX0pO3JldHVybiBQLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWMuc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJyZWN0IikuY2FsbCh5LmZpbGwseS5hZGRPcGFjaXR5KHMsLjgpKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm5hbWUiLCEwKSx0LmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIxcHgiKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm51bXMiLCEwKS5jYWxsKGcuZm9udCxmLGQpfSksUC5leGl0KCkucmVtb3ZlKCksUC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWMuc2VsZWN0KHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsIiIpLG49IiIsaT0iIixsPXkub3BhY2l0eSh0LmNvbG9yKT90LmNvbG9yOnkuZGVmYXVsdExpbmUsdT15LmNvbWJpbmUobCxzKSxoPXQuYm9yZGVyQ29sb3J8fHkuY29udHJhc3QodSk7aWYodm9pZCAwIT09dC5uYW1lT3ZlcnJpZGUmJih0Lm5hbWU9dC5uYW1lT3ZlcnJpZGUpLHQubmFtZSl7bj1tLnBsYWluVGV4dCh0Lm5hbWV8fCIiKTt2YXIgcD1NYXRoLnJvdW5kKHQubmFtZUxlbmd0aCk7cD4tMSYmbi5sZW5ndGg+cCYmKG49cD4zP24uc3Vic3RyKDAscC0zKSsiLi4uIjpuLnN1YnN0cigwLHApKX12b2lkIDAhPT10LmV4dHJhVGV4dCYmKGkrPXQuZXh0cmFUZXh0KSx2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihpKz0ieDogIit0LnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PXQueUxhYmVsJiYoaSs9Ink6ICIrdC55TGFiZWwrIjxicj4iKSxpKz0oaT8iejogIjoiIikrdC56TGFiZWwpOnomJnRbYSsiTGFiZWwiXT09PV8/aT10WygieCI9PT1hPyJ5IjoieCIpKyJMYWJlbCJdfHwiIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmKGk9dC55TGFiZWwpOmk9dm9pZCAwPT09dC55TGFiZWw/dC54TGFiZWw6IigiK3QueExhYmVsKyIsICIrdC55TGFiZWwrIikiLHQudGV4dCYmIUFycmF5LmlzQXJyYXkodC50ZXh0KSYmKGkrPShpPyI8YnI+IjoiIikrdC50ZXh0KSwiIj09PWkmJigiIj09PW4mJmUucmVtb3ZlKCksaT1uKTt2YXIgdj1lLnNlbGVjdCgidGV4dC5udW1zIikuY2FsbChnLmZvbnQsdC5mb250RmFtaWx5fHxmLHQuZm9udFNpemV8fGQsdC5mb250Q29sb3J8fGgpLnRleHQoaSkuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChtLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobS5jb252ZXJ0VG9Uc3BhbnMsciksYj1lLnNlbGVjdCgidGV4dC5uYW1lIikseD0wO24mJm4hPT1pPyhiLmNhbGwoZy5mb250LHQuZm9udEZhbWlseXx8Zix0LmZvbnRTaXplfHxkLHUpLnRleHQobikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChtLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobS5jb252ZXJ0VG9Uc3BhbnMscikseD1iLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsyKkMpOihiLnJlbW92ZSgpLGUuc2VsZWN0KCJyZWN0IikucmVtb3ZlKCkpLGUuc2VsZWN0KCJwYXRoIikuc3R5bGUoe2ZpbGw6dSxzdHJva2U6aH0pO3ZhciB3LE0sQT12Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxJPXQueGEuX29mZnNldCsodC54MCt0LngxKS8yLEQ9dC55YS5fb2Zmc2V0Kyh0LnkwK3QueTEpLzIsUD1NYXRoLmFicyh0LngxLXQueDApLE89TWF0aC5hYnModC55MS10LnkwKSxSPUEud2lkdGgrTCtDK3g7dC50eTA9VC1BLnRvcCx0LmJ4PUEud2lkdGgrMipDLHQuYnk9QS5oZWlnaHQrMipDLHQuYW5jaG9yPSJzdGFydCIsdC50eHdpZHRoPUEud2lkdGgsdC50eDJ3aWR0aD14LHQub2Zmc2V0PTAsbz8odC5wb3M9SSx3PUQrTy8yK1I8PUUsTT1ELU8vMi1SPj0wLCJ0b3AiIT09dC5pZGVhbEFsaWduJiZ3fHwhTT93PyhEKz1PLzIsdC5hbmNob3I9InN0YXJ0Iik6dC5hbmNob3I9Im1pZGRsZSI6KEQtPU8vMix0LmFuY2hvcj0iZW5kIikpOih0LnBvcz1ELHc9SStQLzIrUjw9UyxNPUktUC8yLVI+PTAsImxlZnQiIT09dC5pZGVhbEFsaWduJiZ3fHwhTT93PyhJKz1QLzIsdC5hbmNob3I9InN0YXJ0Iik6dC5hbmNob3I9Im1pZGRsZSI6KEktPVAvMix0LmFuY2hvcj0iZW5kIikpLHYuYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSx4JiZiLmF0dHIoInRleHQtYW5jaG9yIix0LmFuY2hvciksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitJKyIsIitEKyIpIisobz8icm90YXRlKCIraysiKSI6IiIpKX0pLFB9ZnVuY3Rpb24gYSh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07aWYoaT1lLnBtaW4tZS5wb3MtZS5kcCtlLnNpemUsYT1yLnBvcytyLmRwK3Iuc2l6ZS1lLnBtYXgsaT4uMDEpe2ZvcihzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcCs9aTtuPSExfWlmKCEoYTwuMDEpKXtpZihpPC0uMDEpe2ZvcihzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcC09YTtuPSExfWlmKG4pe3ZhciB1PTA7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylsPXRbb10sbC5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiZ1Kys7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKHU8PTApO28tLSlsPXRbb10sbC5wb3M+ZS5wbWF4LTEmJihsLmRlbD0hMCx1LS0pO2ZvcihvPTA7bzx0Lmxlbmd0aCYmISh1PD0wKTtvKyspaWYobD10W29dLGwucG9zPGUucG1pbisxKWZvcihsLmRlbD0hMCx1LS0sYT0yKmwuc2l6ZSxzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcC09YTtmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEodTw9MCk7by0tKWw9dFtvXSxsLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJihsLmRlbD0hMCx1LS0pfX19Zm9yKHZhciBuLGksYSxvLHMsbCx1LGM9MCxoPXQubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49dFtlXTtyZXR1cm5be2k6cixkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KigieCI9PT1uLl9pZC5jaGFyQXQoMCk/VDoxKS8yLHBtaW46bi5fb2Zmc2V0LHBtYXg6bi5fb2Zmc2V0K24uX2xlbmd0aH1dfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLnBvc3JlZi1lWzBdLnBvc3JlZn0pOyFuJiZjPD10Lmxlbmd0aDspe2ZvcihjKyssbj0hMCxvPTA7bzxoLmxlbmd0aC0xOyl7dmFyIGY9aFtvXSxkPWhbbysxXSxwPWZbZi5sZW5ndGgtMV0sbT1kWzBdO2lmKChpPXAucG9zK3AuZHArcC5zaXplLW0ucG9zLW0uZHArbS5zaXplKT4uMDEmJnAucG1pbj09PW0ucG1pbiYmcC5wbWF4PT09bS5wbWF4KXtmb3Iocz1kLmxlbmd0aC0xO3M+PTA7cy0tKWRbc10uZHArPWk7Zm9yKGYucHVzaC5hcHBseShmLGQpLGguc3BsaWNlKG8rMSwxKSx1PTAscz1mLmxlbmd0aC0xO3M+PTA7cy0tKXUrPWZbc10uZHA7Zm9yKGE9dS9mLmxlbmd0aCxzPWYubGVuZ3RoLTE7cz49MDtzLS0pZltzXS5kcC09YTtuPSExfWVsc2UgbysrfWguZm9yRWFjaChyKX1mb3Iobz1oLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgdj1oW29dO2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBnPXZbc10seT10W2cuaV07eS5vZmZzZXQ9Zy5kcCx5LmRlbD1nLmRlbH19fWZ1bmN0aW9uIG8odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9Yy5zZWxlY3QodGhpcyk7aWYodC5kZWwpcmV0dXJuIHZvaWQgci5yZW1vdmUoKTt2YXIgbj0iZW5kIj09PXQuYW5jaG9yPy0xOjEsaT1yLnNlbGVjdCgidGV4dC5udW1zIiksYT17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3QuYW5jaG9yXSxvPWEqKEwrQykscz1vK2EqKHQudHh3aWR0aCtDKSxsPTAsdT10Lm9mZnNldDsibWlkZGxlIj09PXQuYW5jaG9yJiYoby09dC50eDJ3aWR0aC8yLHMtPXQudHgyd2lkdGgvMiksZSYmKHUqPS1FLGw9dC5vZmZzZXQqUyksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIiwibWlkZGxlIj09PXQuYW5jaG9yPyJNLSIrdC5ieC8yKyIsLSIrdC5ieS8yKyJoIit0LmJ4KyJ2Iit0LmJ5KyJoLSIrdC5ieCsiWiI6Ik0wLDBMIisobipMK2wpKyIsIisoTCt1KSsidiIrKHQuYnkvMi1MKSsiaCIrbip0LmJ4KyJ2LSIrdC5ieSsiSCIrKG4qTCtsKSsiViIrKHUtTCkrIloiKSxpLmNhbGwobS5wb3NpdGlvblRleHQsbytsLHUrdC50eTAtdC5ieS8yK0MpLHQudHgyd2lkdGgmJihyLnNlbGVjdCgidGV4dC5uYW1lIikuY2FsbChtLnBvc2l0aW9uVGV4dCxzK2EqQytsLHUrdC50eTAtdC5ieS8yK0MpLHIuc2VsZWN0KCJyZWN0IikuY2FsbChnLnNldFJlY3QscysoYS0xKSp0LnR4MndpZHRoLzIrbCx1LXQuYnkvMi0xLHQudHgyd2lkdGgsdC5ieSsyKSl9KX1mdW5jdGlvbiBzKHQsZSl7ZnVuY3Rpb24gcihlLHIsbyl7dmFyIHM7aWYoYVtyXSlzPWFbcl07ZWxzZSBpZihpW3JdKXt2YXIgbD1pW3JdO0FycmF5LmlzQXJyYXkobCkmJkFycmF5LmlzQXJyYXkobFt0LmluZGV4WzBdXSkmJihzPWxbdC5pbmRleFswXV1bdC5pbmRleFsxXV0pfWVsc2Ugcz1kLm5lc3RlZFByb3BlcnR5KG4sbykuZ2V0KCk7cyYmKHRbZV09cyl9dmFyIG49dC50cmFjZXx8e30saT10LmNkWzBdLGE9dC5jZFt0LmluZGV4XXx8e307cigiaG92ZXJpbmZvIiwiaGkiLCJob3ZlcmluZm8iKSxyKCJjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHIoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHIoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IikscigiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHIoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHIoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx0LnBvc3JlZj0ieSI9PT1lPyh0LngwK3QueDEpLzI6KHQueTArdC55MSkvMix0LngwPWQuY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9ZC5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1kLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPWQuY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpO3ZhciBvO2lmKHZvaWQgMCE9PXQueExhYmVsVmFsKXtvPSJsb2ciPT09dC54YS50eXBlJiZ0LnhMYWJlbFZhbDw9MDt2YXIgcz14LnRpY2tUZXh0KHQueGEsdC54YS5jMmwobz8tdC54TGFiZWxWYWw6dC54TGFiZWxWYWwpLCJob3ZlciIpO28/MD09PXQueExhYmVsVmFsP3QueExhYmVsPSIwIjp0LnhMYWJlbD0iLSIrcy50ZXh0OnQueExhYmVsPXMudGV4dCx0LnhWYWw9dC54YS5jMmQodC54TGFiZWxWYWwpfWlmKHZvaWQgMCE9PXQueUxhYmVsVmFsKXtvPSJsb2ciPT09dC55YS50eXBlJiZ0LnlMYWJlbFZhbDw9MDt2YXIgbD14LnRpY2tUZXh0KHQueWEsdC55YS5jMmwobz8tdC55TGFiZWxWYWw6dC55TGFiZWxWYWwpLCJob3ZlciIpO28/MD09PXQueUxhYmVsVmFsP3QueUxhYmVsPSIwIjp0LnlMYWJlbD0iLSIrbC50ZXh0OnQueUxhYmVsPWwudGV4dCx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpfWlmKHZvaWQgMCE9PXQuekxhYmVsVmFsJiYodC56TGFiZWw9U3RyaW5nKHQuekxhYmVsVmFsKSksIShpc05hTih0LnhlcnIpfHwibG9nIj09PXQueGEudHlwZSYmdC54ZXJyPD0wKSl7dmFyIHU9eC50aWNrVGV4dCh0LnhhLHQueGEuYzJsKHQueGVyciksImhvdmVyIikudGV4dDt2b2lkIDAhPT10LnhlcnJuZWc/dC54TGFiZWwrPSIgKyIrdSsiIC8gLSIreC50aWNrVGV4dCh0LnhhLHQueGEuYzJsKHQueGVycm5lZyksImhvdmVyIikudGV4dDp0LnhMYWJlbCs9IiBceGIxICIrdSwieCI9PT1lJiYodC5kaXN0YW5jZSs9MSl9aWYoIShpc05hTih0LnllcnIpfHwibG9nIj09PXQueWEudHlwZSYmdC55ZXJyPD0wKSl7dmFyIGM9eC50aWNrVGV4dCh0LnlhLHQueWEuYzJsKHQueWVyciksImhvdmVyIikudGV4dDt2b2lkIDAhPT10LnllcnJuZWc/dC55TGFiZWwrPSIgKyIrYysiIC8gLSIreC50aWNrVGV4dCh0LnlhLHQueWEuYzJsKHQueWVycm5lZyksImhvdmVyIikudGV4dDp0LnlMYWJlbCs9IiBceGIxICIrYywieSI9PT1lJiYodC5kaXN0YW5jZSs9MSl9dmFyIGg9dC5ob3ZlcmluZm98fHQudHJhY2UuaG92ZXJpbmZvO3JldHVybiJhbGwiIT09aCYmKGg9aC5zcGxpdCgiKyIpLC0xPT09aC5pbmRleE9mKCJ4IikmJih0LnhMYWJlbD12b2lkIDApLC0xPT09aC5pbmRleE9mKCJ5IikmJih0LnlMYWJlbD12b2lkIDApLC0xPT09aC5pbmRleE9mKCJ6IikmJih0LnpMYWJlbD12b2lkIDApLC0xPT09aC5pbmRleE9mKCJ0ZXh0IikmJih0LnRleHQ9dm9pZCAwKSwtMT09PWguaW5kZXhPZigibmFtZSIpJiYodC5uYW1lPXZvaWQgMCkpLHR9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPWUuaG92ZXJtb2RlLG49ZS5jb250YWluZXIsaT10WzBdLGE9aS54YSxvPWkueWEscz1hLnNob3dzcGlrZXMsbD1vLnNob3dzcGlrZXM7aWYobi5zZWxlY3RBbGwoIi5zcGlrZWxpbmUiKS5yZW1vdmUoKSwiY2xvc2VzdCI9PT1yJiYoc3x8bCkpe3ZhciB1PWUuZnVsbExheW91dCxjPWEuX29mZnNldCsoaS54MCtpLngxKS8yLGg9by5fb2Zmc2V0KyhpLnkwK2kueTEpLzIsZD15LmNvbWJpbmUodS5wbG90X2JnY29sb3IsdS5wYXBlcl9iZ2NvbG9yKSxwPWYucmVhZGFiaWxpdHkoaS5jb2xvcixkKTwxLjU/eS5jb250cmFzdChkKTppLmNvbG9yO2lmKGwpe3ZhciBtPW8uc3Bpa2Vtb2RlLHY9by5zcGlrZXRoaWNrbmVzcyxiPW8uc3Bpa2Vjb2xvcnx8cCx4PW8uX2JvdW5kaW5nQm94LF89KHgubGVmdCt4LnJpZ2h0KS8yPGM/eC5yaWdodDp4LmxlZnQ7aWYoLTEhPT1tLmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PW0uaW5kZXhPZigiYWNyb3NzIikpe3ZhciB3PV8sTT1jOy0xIT09bS5pbmRleE9mKCJhY3Jvc3MiKSYmKHc9by5fY291bnRlclNwYW5bMF0sTT1vLl9jb3VudGVyU3BhblsxXSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKHt4MTp3LHgyOk0seTE6aCx5MjpoLCJzdHJva2Utd2lkdGgiOnYrMixzdHJva2U6ZH0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksbi5hcHBlbmQoImxpbmUiKS5hdHRyKHt4MTp3LHgyOk0seTE6aCx5MjpoLCJzdHJva2Utd2lkdGgiOnYsc3Ryb2tlOmIsInN0cm9rZS1kYXNoYXJyYXkiOmcuZGFzaFN0eWxlKG8uc3Bpa2VkYXNoLHYpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PW0uaW5kZXhPZigibWFya2VyIikmJm4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHtjeDpfKygicmlnaHQiIT09by5zaWRlP3Y6LXYpLGN5Omgscjp2LGZpbGw6Yn0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApfWlmKHMpe3ZhciBrPWEuc3Bpa2Vtb2RlLEE9YS5zcGlrZXRoaWNrbmVzcyxUPWEuc3Bpa2Vjb2xvcnx8cCxTPWEuX2JvdW5kaW5nQm94LEU9KFMudG9wK1MuYm90dG9tKS8yPGg/Uy5ib3R0b206Uy50b3A7aWYoLTEhPT1rLmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PWsuaW5kZXhPZigiYWNyb3NzIikpe3ZhciBMPUUsQz1oOy0xIT09ay5pbmRleE9mKCJhY3Jvc3MiKSYmKEw9YS5fY291bnRlclNwYW5bMF0sQz1hLl9jb3VudGVyU3BhblsxXSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKHt4MTpjLHgyOmMseTE6TCx5MjpDLCJzdHJva2Utd2lkdGgiOkErMixzdHJva2U6ZH0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksbi5hcHBlbmQoImxpbmUiKS5hdHRyKHt4MTpjLHgyOmMseTE6TCx5MjpDLCJzdHJva2Utd2lkdGgiOkEsc3Ryb2tlOlQsInN0cm9rZS1kYXNoYXJyYXkiOmcuZGFzaFN0eWxlKGEuc3Bpa2VkYXNoLEEpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PWsuaW5kZXhPZigibWFya2VyIikmJm4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHtjeDpjLGN5OkUtKCJ0b3AiIT09YS5zaWRlP0E6LUEpLHI6QSxmaWxsOlR9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFyfHxyLmxlbmd0aCE9PXQuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXJbbl0sYT10Ll9ob3ZlcmRhdGFbbl07aWYoaS5jdXJ2ZU51bWJlciE9PWEuY3VydmVOdW1iZXJ8fFN0cmluZyhpLnBvaW50TnVtYmVyKSE9PVN0cmluZyhhLnBvaW50TnVtYmVyKSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgYz10KCJkMyIpLGg9dCgiZmFzdC1pc251bWVyaWMiKSxmPXQoInRpbnljb2xvcjIiKSxkPXQoIi4uLy4uL2xpYiIpLHA9dCgiLi4vLi4vbGliL2V2ZW50cyIpLG09dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdj10KCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yIiksZz10KCIuLi9kcmF3aW5nIikseT10KCIuLi9jb2xvciIpLGI9dCgiLi4vZHJhZ2VsZW1lbnQiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksXz10KCIuLi8uLi9yZWdpc3RyeSIpLHc9dCgiLi9oZWxwZXJzIiksTT10KCIuL2NvbnN0YW50cyIpLGs9TS5ZQU5HTEUsQT1NYXRoLlBJKmsvMTgwLFQ9MS9NYXRoLnNpbihBKSxTPU1hdGguY29zKEEpLEU9TWF0aC5zaW4oQSksTD1NLkhPVkVSQVJST1dTSVpFLEM9TS5IT1ZFUlRFWFRQQUQ7ci5ob3Zlcj1mdW5jdGlvbih0LGUscixpKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSx2b2lkIDA9PT10Ll9sYXN0SG92ZXJUaW1lJiYodC5fbGFzdEhvdmVyVGltZT0wKSx2b2lkIDAhPT10Ll9ob3ZlclRpbWVyJiYoY2xlYXJUaW1lb3V0KHQuX2hvdmVyVGltZXIpLHQuX2hvdmVyVGltZXI9dm9pZCAwKSxEYXRlLm5vdygpPnQuX2xhc3RIb3ZlclRpbWUrTS5IT1ZFUk1JTlRJTUUpcmV0dXJuIG4odCxlLHIsaSksdm9pZCh0Ll9sYXN0SG92ZXJUaW1lPURhdGUubm93KCkpO3QuX2hvdmVyVGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe24odCxlLHIsaSksdC5fbGFzdEhvdmVyVGltZT1EYXRlLm5vdygpLHQuX2hvdmVyVGltZXI9dm9pZCAwfSxNLkhPVkVSTUlOVElNRSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2NvbG9yOnQuY29sb3J8fHkuZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsdHJhY2U6e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowfSxuPWMuc2VsZWN0KGUuY29udGFpbmVyKSxhPWUub3V0ZXJDb250YWluZXI/Yy5zZWxlY3QoZS5vdXRlckNvbnRhaW5lcik6bixzPXtob3Zlcm1vZGU6ImNsb3Nlc3QiLHJvdGF0ZUxhYmVsczohMSxiZ0NvbG9yOmUuYmdDb2xvcnx8eS5iYWNrZ3JvdW5kLGNvbnRhaW5lcjpuLG91dGVyQ29udGFpbmVyOmF9LGw9aShbcl0scyxlLmdkKTtyZXR1cm4gbyhsLHMucm90YXRlTGFiZWxzKSxsLm5vZGUoKX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9ldmVudHMiOjcxNCwiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6NzMzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuL2NvbnN0YW50cyI6NjM4LCIuL2hlbHBlcnMiOjY0MCxkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjksdGlueWNvbG9yMjo1MzJ9XSw2NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2k9aXx8e30scigiaG92ZXJsYWJlbC5iZ2NvbG9yIixpLmJnY29sb3IpLHIoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiLGkuYm9yZGVyY29sb3IpLHIoImhvdmVybGFiZWwubmFtZWxlbmd0aCIsaS5uYW1lbGVuZ3RoKSxuLmNvZXJjZUZvbnQociwiaG92ZXJsYWJlbC5mb250IixpLmZvbnQpfX0seyIuLi8uLi9saWIiOjcyNH1dLDY0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXMuaXNEM1NlbGVjdGlvbih0KT90Om8uc2VsZWN0KHQpO2Uuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpLGUuc2VsZWN0QWxsKCIuc3Bpa2VsaW5lIikucmVtb3ZlKCl9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHMuY2FzdE9wdGlvbih0LGUsImhvdmVybGFiZWwuIityKX1mdW5jdGlvbiBhKHQsZSxyKXtmdW5jdGlvbiBuKHIpe3JldHVybiBzLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9cmV0dXJuIHMuY2FzdE9wdGlvbih0LHIsImhvdmVyaW5mbyIsbil9dmFyIG89dCgiZDMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSx1PXQoIi4vaGVscGVycyIpLGM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOnQoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6Y30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOmMsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dCgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOnUuZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0OnUuZ2V0Q2xvc2VzdCxpbmJveDp1LmluYm94LGFwcGVuZEFycmF5UG9pbnRWYWx1ZTp1LmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246aSxjYXN0SG92ZXJpbmZvOmEsaG92ZXI6dCgiLi9ob3ZlciIpLmhvdmVyLHVuaG92ZXI6bC51bmhvdmVyLGxvbmVIb3Zlcjp0KCIuL2hvdmVyIikubG9uZUhvdmVyLGxvbmVVbmhvdmVyOm4sY2xpY2s6dCgiLi9jbGljayIpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi9hdHRyaWJ1dGVzIjo2MzUsIi4vY2FsYyI6NjM2LCIuL2NsaWNrIjo2MzcsIi4vY29uc3RhbnRzIjo2MzgsIi4vZGVmYXVsdHMiOjYzOSwiLi9oZWxwZXJzIjo2NDAsIi4vaG92ZXIiOjY0MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjQ0LCIuL2xheW91dF9kZWZhdWx0cyI6NjQ1LCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiOjY0NixkMzoxMjB9XSw2NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXtkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwib3JiaXQiLCJ0dXJudGFibGUiXSxkZmx0OiJ6b29tIn0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsImNsb3Nlc3QiLCExXX0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IifSxmb250OntmYW1pbHk6bih7fSxpLmZhbWlseSx7ZGZsdDphLkhPVkVSRk9OVH0pLHNpemU6bih7fSxpLnNpemUse2RmbHQ6YS5IT1ZFUkZPTlRTSVpFfSksY29sb3I6bih7fSxpLmNvbG9yKX0sbmFtZWxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MTV9fX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi9jb25zdGFudHMiOjYzOH1dLDY0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0hMCxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKCJoIiE9PXRbcl0ub3JpZW50YXRpb24pe2U9ITE7YnJlYWt9fXJldHVybiBlfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfW8oImRyYWdtb2RlIik7dmFyIHM7ZS5faGFzKCJjYXJ0ZXNpYW4iKT8oZS5faXNIb3Jpej1uKHIpLHM9ZS5faXNIb3Jpej8ieSI6IngiKTpzPSJjbG9zZXN0IixvKCJob3Zlcm1vZGUiLHMpLGUuX2hhcygibWFwYm94IikmJjE9PT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiYiem9vbSI9PT1lLmRyYWdtb2RlJiYoZS5kcmFnbW9kZT0icGFuIil9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NDR9XSw2NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aSh0LGUscil9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY0MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjQ0fV0sNjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6ImltYWdlIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUifSxzaXpleDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHNpemV5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiY29udGFpbiIsInN0cmV0Y2giXSxkZmx0OiJjb250YWluIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHg6e3ZhbFR5cGU6ImFueSIsZGZsdDowfSx5Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MH0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueC50b1N0cmluZygpXSxkZmx0OiJwYXBlciJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OiJwYXBlciJ9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3Njl9XSw2NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCx1LGM9dC5fZnVsbExheW91dC5pbWFnZXMsaD1lLl9pZC5jaGFyQXQoMCksZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGw9Y1tmXSx1PSJpbWFnZXNbIitmKyJdLiIsbFtoKyJyZWYiXT09PWUuX2lkKXt2YXIgZD1sW2hdLHA9bFsic2l6ZSIraF0sbT1udWxsLHY9bnVsbDtpZihvKXttPWkoZCxlLnJhbmdlKTt2YXIgZz1wL01hdGgucG93KDEwLG0pLzI7dj0yKk1hdGgubG9nKGcrTWF0aC5zcXJ0KDErZypnKSkvTWF0aC5MTjEwfWVsc2UgbT1NYXRoLnBvdygxMCxkKSx2PW0qKE1hdGgucG93KDEwLHAvMiktTWF0aC5wb3coMTAsLXAvMikpO24obSk/bih2KXx8KHY9bnVsbCk6KG09bnVsbCx2PW51bGwpLGEodStoLG0pLGEodSsic2l6ZSIraCx2KX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjc0NCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDY0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxzLHIsbil9aWYoIW4oInZpc2libGUiLCEhbigic291cmNlIikpKXJldHVybiBlO24oImxheWVyIiksbigieGFuY2hvciIpLG4oInlhbmNob3IiKSxuKCJzaXpleCIpLG4oInNpemV5Iiksbigic2l6aW5nIiksbigib3BhY2l0eSIpO2Zvcih2YXIgbz17X2Z1bGxMYXlvdXQ6cn0sbD1bIngiLCJ5Il0sdT0wO3U8Mjt1Kyspe3ZhciBjPWxbdV0saD1hLmNvZXJjZVJlZih0LGUsbyxjLCJwYXBlciIpO2EuY29lcmNlUG9zaXRpb24oZSxvLG4saCxjLDApfXJldHVybiBlfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7byh0LGUse25hbWU6ImltYWdlcyIsaGFuZGxlSXRlbURlZmF1bHRzOm59KX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzYxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2F0dHJpYnV0ZXMiOjY0N31dLDY1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vZHJhd2luZyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYoIXRoaXMuaW1nfHx0aGlzLmltZy5zcmMhPT1lLnNvdXJjZSl7ci5hdHRyKCJ4bWxucyIsby5zdmcpO3ZhciBpPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyLnJlbW92ZSgpLHQoKX12YXIgaT1uZXcgSW1hZ2U7dGhpcy5pbWc9aSxpLnNldEF0dHJpYnV0ZSgiY3Jvc3NPcmlnaW4iLCJhbm9ueW1vdXMiKSxpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9dGhpcy53aWR0aCxlLmhlaWdodD10aGlzLmhlaWdodCxlLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHRoaXMsMCwwKTt2YXIgbj1lLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ci5hdHRyKCJ4bGluazpocmVmIixuKSx0KCl9LHIub24oImVycm9yIixuKSxpLnNyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gcihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSxzPWEuZ2V0RnJvbUlkKHQsZS55cmVmKSxsPXUuX3NpemUsYz1vP01hdGguYWJzKG8ubDJwKGUuc2l6ZXgpLW8ubDJwKDApKTplLnNpemV4KmwudyxoPXM/TWF0aC5hYnMocy5sMnAoZS5zaXpleSktcy5sMnAoMCkpOmUuc2l6ZXkqbC5oLGY9YyptLnhbZS54YW5jaG9yXS5vZmZzZXQsZD1oKm0ueVtlLnlhbmNob3JdLm9mZnNldCxwPW0ueFtlLnhhbmNob3JdLnNpemluZyttLnlbZS55YW5jaG9yXS5zaXppbmcsdj0obz9vLnIycChlLngpK28uX29mZnNldDplLngqbC53K2wubCkrZixnPShzP3MucjJwKGUueSkrcy5fb2Zmc2V0OmwuaC1lLnkqbC5oK2wudCkrZDtzd2l0Y2goZS5zaXppbmcpe2Nhc2UiZmlsbCI6cCs9IiBzbGljZSI7YnJlYWs7Y2FzZSJzdHJldGNoIjpwPSJub25lIn1yLmF0dHIoe3g6dix5Omcsd2lkdGg6YyxoZWlnaHQ6aCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOnAsb3BhY2l0eTplLm9wYWNpdHl9KTt2YXIgeT1vP28uX2lkOiIiLGI9cz9zLl9pZDoiIix4PXkrYjtyLmNhbGwoaS5zZXRDbGlwVXJsLHg/ImNsaXAiK3UuX3VpZCt4Om51bGwpfXZhciBzLGwsdT10Ll9mdWxsTGF5b3V0LGM9W10saD17fSxmPVtdO2ZvcihsPTA7bDx1LmltYWdlcy5sZW5ndGg7bCsrKXt2YXIgZD11LmltYWdlc1tsXTtpZihkLnZpc2libGUpaWYoImJlbG93Ij09PWQubGF5ZXImJiJwYXBlciIhPT1kLnhyZWYmJiJwYXBlciIhPT1kLnlyZWYpe3M9ZC54cmVmK2QueXJlZjt2YXIgcD11Ll9wbG90c1tzXTtpZighcCl7Zi5wdXNoKGQpO2NvbnRpbnVlfXAubWFpbnBsb3QmJihzPXAubWFpbnBsb3QuaWQpLGhbc118fChoW3NdPVtdKSxoW3NdLnB1c2goZCl9ZWxzZSJhYm92ZSI9PT1kLmxheWVyP2MucHVzaChkKTpmLnB1c2goZCl9dmFyIG09e3g6e2xlZnQ6e3NpemluZzoieE1pbiIsb2Zmc2V0OjB9LGNlbnRlcjp7c2l6aW5nOiJ4TWlkIixvZmZzZXQ6LS41fSxyaWdodDp7c2l6aW5nOiJ4TWF4IixvZmZzZXQ6LTF9fSx5Ont0b3A6e3NpemluZzoiWU1pbiIsb2Zmc2V0OjB9LG1pZGRsZTp7c2l6aW5nOiJZTWlkIixvZmZzZXQ6LS41fSxib3R0b206e3NpemluZzoiWU1heCIsb2Zmc2V0Oi0xfX19LHY9dS5faW1hZ2VMb3dlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGYpLGc9dS5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGMpO3YuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksZy5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx2LmV4aXQoKS5yZW1vdmUoKSxnLmV4aXQoKS5yZW1vdmUoKSx2LmVhY2goZnVuY3Rpb24odCl7ZS5iaW5kKHRoaXMpKHQpLHIuYmluZCh0aGlzKSh0KX0pLGcuZWFjaChmdW5jdGlvbih0KXtlLmJpbmQodGhpcykodCksci5iaW5kKHRoaXMpKHQpfSk7dmFyIHk9T2JqZWN0LmtleXModS5fcGxvdHMpO2ZvcihsPTA7bDx5Lmxlbmd0aDtsKyspe3M9eVtsXTt2YXIgYj11Ll9wbG90c1tzXTtpZihiLmltYWdlbGF5ZXIpe3ZhciB4PWIuaW1hZ2VsYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShoW3NdfHxbXSk7eC5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24odCl7ZS5iaW5kKHRoaXMpKHQpLHIuYmluZCh0aGlzKSh0KX0pfX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MDYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uL2RyYXdpbmciOjYyNixkMzoxMjB9XSw2NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImltYWdlcyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi9hdHRyaWJ1dGVzIjo2NDcsIi4vY29udmVydF9jb29yZHMiOjY0OCwiLi9kZWZhdWx0cyI6NjQ5LCIuL2RyYXciOjY1MH1dLDY1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzUmlnaHRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInJpZ2h0Ij09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+PTIvM30sci5pc0NlbnRlckFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iY2VudGVyIj09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+MS8zJiZ0Lng8Mi8zfSxyLmlzQm90dG9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJib3R0b20iPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueTw9MS8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJtaWRkbGUiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT4xLzMmJnQueTwyLzN9fSx7fV0sNjUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LGZvbnQ6YSh7fSxuLHt9KSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJ2In0sdHJhY2VvcmRlcjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsicmV2ZXJzZWQiLCJncm91cGVkIl0sZXh0cmFzOlsibm9ybWFsIl19LHRyYWNlZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxLjAyfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MX0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6ImF1dG8ifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi4vY29sb3IvYXR0cmlidXRlcyI6NjAxfV0sNjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NCxzY3JvbGxCYXJIZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0fX0se31dLDY1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gaS5jb2VyY2UoZCxwLGEsdCxlKX1mb3IodmFyIHUsYyxoLGYsZD10LmxlZ2VuZHx8e30scD1lLmxlZ2VuZD17fSxtPTAsdj0ibm9ybWFsIixnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB5PXJbZ107cy5sZWdlbmRHZXRzVHJhY2UoeSkmJihtKyssbi50cmFjZUlzKHksInBpZSIpJiZtKyspLChuLnRyYWNlSXMoeSwiYmFyIikmJiJzdGFjayI9PT1lLmJhcm1vZGV8fC0xIT09WyJ0b25leHR4IiwidG9uZXh0eSJdLmluZGV4T2YoeS5maWxsKSkmJih2PXMuaXNHcm91cGVkKHt0cmFjZW9yZGVyOnZ9KT8iZ3JvdXBlZCtyZXZlcnNlZCI6InJldmVyc2VkIiksdm9pZCAwIT09eS5sZWdlbmRncm91cCYmIiIhPT15LmxlZ2VuZGdyb3VwJiYodj1zLmlzUmV2ZXJzZWQoe3RyYWNlb3JkZXI6dn0pPyJyZXZlcnNlZCtncm91cGVkIjoiZ3JvdXBlZCIpfWlmKCExIT09aS5jb2VyY2UodCxlLG8sInNob3dsZWdlbmQiLG0+MSkpe2lmKGwoImJnY29sb3IiLGUucGFwZXJfYmdjb2xvciksbCgiYm9yZGVyY29sb3IiKSxsKCJib3JkZXJ3aWR0aCIpLGkuY29lcmNlRm9udChsLCJmb250IixlLmZvbnQpLGwoIm9yaWVudGF0aW9uIiksImgiPT09cC5vcmllbnRhdGlvbil7dmFyIGI9dC54YXhpcztiJiZiLnJhbmdlc2xpZGVyJiZiLnJhbmdlc2xpZGVyLnZpc2libGU/KHU9MCxoPSJsZWZ0IixjPTEuMSxmPSJib3R0b20iKToodT0wLGg9ImxlZnQiLGM9LS4xLGY9InRvcCIpfWwoInRyYWNlb3JkZXIiLHYpLHMuaXNHcm91cGVkKGUubGVnZW5kKSYmbCgidHJhY2Vncm91cGdhcCIpLGwoIngiLHUpLGwoInhhbmNob3IiLGgpLGwoInkiLGMpLGwoInlhbmNob3IiLGYpLGkubm9uZU9yQWxsKGQscCxbIngiLCJ5Il0pfX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4MTgsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vYXR0cmlidXRlcyI6NjUzLCIuL2hlbHBlcnMiOjY1OH1dLDY1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcihyKXt5LmNvbnZlcnRUb1RzcGFucyhyLGUsZnVuY3Rpb24oKXtvKHQsZSl9KX12YXIgbj10LmRhdGEoKVswXVswXSxpPWUuX2Z1bGxMYXlvdXQsYT1uLnRyYWNlLHM9cC50cmFjZUlzKGEsInBpZSIpLGw9YS5pbmRleCx1PXM/bi5sYWJlbDphLm5hbWUsYz10LnNlbGVjdEFsbCgidGV4dC5sZWdlbmR0ZXh0IikuZGF0YShbMF0pO2MuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJsZWdlbmR0ZXh0IiwhMCksYy5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmNhbGwodi5mb250LGkubGVnZW5kLmZvbnQpLnRleHQodSksZS5fY29udGV4dC5lZGl0cy5sZWdlbmRUZXh0JiYhcz9jLmNhbGwoeS5tYWtlRWRpdGFibGUse2dkOmV9KS5jYWxsKHIpLm9uKCJlZGl0IixmdW5jdGlvbih0KXt0aGlzLnRleHQodCkuY2FsbChyKSx0aGlzLnRleHQoKXx8KHQ9IiAgICAiKTt2YXIgaSxhPW4udHJhY2UuX2Z1bGxJbnB1dHx8e307aWYoLTEhPT1bIm9obGMiLCJjYW5kbGVzdGljayJdLmluZGV4T2YoYS50eXBlKSl7dmFyIG89bi50cmFjZS50cmFuc2Zvcm1zO2k9b1tvLmxlbmd0aC0xXS5kaXJlY3Rpb24rIi5uYW1lIn1lbHNlIGk9Im5hbWUiO2gucmVzdHlsZShlLGksdCxsKX0pOmMuY2FsbChyKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbj0xLGk9dC5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKFswXSk7aS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZHRvZ2dsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5jYWxsKGcuZmlsbCwicmdiYSgwLDAsMCwwKSIpLGkub24oIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHItZS5fbGVnZW5kTW91c2VEb3duVGltZTxTP24rPTE6KG49MSxlLl9sZWdlbmRNb3VzZURvd25UaW1lPXIpfSksaS5vbigibW91c2V1cCIsZnVuY3Rpb24oKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU+UyYmKG49TWF0aC5tYXgobi0xLDEpKSwxPT09bj9yLl9jbGlja1RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2EodCxlLG4pfSxTKToyPT09biYmKHIuX2NsaWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHIuX2NsaWNrVGltZW91dCksZS5fbGVnZW5kTW91c2VEb3duVGltZT0wLGEodCxlLG4pKX19KX1mdW5jdGlvbiBhKHQsZSxyKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciBuLGksYT1lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscz9lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5zbGljZSgpOltdLG89dC5kYXRhKClbMF1bMF0scz1lLl9mdWxsRGF0YSxsPW8udHJhY2UsdT1sLmxlZ2VuZGdyb3VwLGM9W107aWYoMT09PXImJlQmJmUuZGF0YSYmZS5fY29udGV4dC5zaG93VGlwcz8oZi5ub3RpZmllcigiRG91YmxlIGNsaWNrIG9uIGxlZ2VuZCB0byBpc29sYXRlIGluZGl2aWR1YWwgdHJhY2UiLCJsb25nIiksVD0hMSk6VD0hMSxwLnRyYWNlSXMobCwicGllIikpe3ZhciBkPW8ubGFiZWwsbT1hLmluZGV4T2YoZCk7MT09PXI/LTE9PT1tP2EucHVzaChkKTphLnNwbGljZShtLDEpOjI9PT1yJiYoYT1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goZnVuY3Rpb24odCl7ZCE9PXQubGFiZWwmJmEucHVzaCh0LmxhYmVsKX0pLGUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzJiZlLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5sZW5ndGg9PT1hLmxlbmd0aCYmLTE9PT1tJiYoYT1bXSkpLGgucmVsYXlvdXQoZSwiaGlkZGVubGFiZWxzIixhKX1lbHNle3ZhciB2LGc9W10seT1bXTtmb3Iodj0wO3Y8cy5sZW5ndGg7disrKWcucHVzaCh2KSx5LnB1c2goISFwLnRyYWNlSXMoc1t2XSwibm90TGVnZW5kSXNvbGF0YWJsZSIpfHwibGVnZW5kb25seSIpO2lmKCIiPT09dSljPVtsLmluZGV4XSx5W2wuaW5kZXhdPSEwO2Vsc2UgZm9yKHY9MDt2PHMubGVuZ3RoO3YrKyluPXNbdl0sbi5sZWdlbmRncm91cD09PXUmJihjLnB1c2gobi5pbmRleCkseVtnLmluZGV4T2YodildPSEwKTtpZigxPT09cilpPSEwIT09bC52aXNpYmxlfHwibGVnZW5kb25seSIsaC5yZXN0eWxlKGUsInZpc2libGUiLGksYyk7ZWxzZSBpZigyPT09cil7dmFyIGI9ITA7Zm9yKHY9MDt2PHMubGVuZ3RoO3YrKylpZihzW3ZdLnZpc2libGUhPT15W3ZdKXtiPSExO2JyZWFrfWImJih5PSEwKTt2YXIgeD1bXTtmb3Iodj0wO3Y8cy5sZW5ndGg7disrKXgucHVzaChnW3ZdKTtoLnJlc3R5bGUoZSwidmlzaWJsZSIseSx4KX19fX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5kYXRhKClbMF1bMF07aWYoIXIudHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3ZhciBuLGksYT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxvPWEubm9kZSgpLHM9ZS5fZnVsbExheW91dC5sZWdlbmQsbD1zLmZvbnQuc2l6ZSpfO2lmKG8pe3ZhciB1PXYuYkJveChvKTtuPXUuaGVpZ2h0LGk9dS53aWR0aCx2LnNldFRyYW5zbGF0ZShhLDAsbi80KX1lbHNle3ZhciBjPXQuc2VsZWN0KCIubGVnZW5kdGV4dCIpLGg9eS5saW5lQ291bnQoYyksZj1jLm5vZGUoKTtuPWwqaCxpPWY/di5iQm94KGYpLndpZHRoOjA7dmFyIGQ9bCooLjMrKDEtaCkvMik7eS5wb3NpdGlvblRleHQoYyw0MCxkKX1uPU1hdGgubWF4KG4sMTYpKzMsci5oZWlnaHQ9bixyLndpZHRoPWl9ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPW4ubGVnZW5kLGE9aS5ib3JkZXJ3aWR0aCxvPWsuaXNHcm91cGVkKGkpLHM9MDtpZihpLndpZHRoPTAsaS5oZWlnaHQ9MCxrLmlzVmVydGljYWwoaSkpbyYmZS5lYWNoKGZ1bmN0aW9uKHQsZSl7di5zZXRUcmFuc2xhdGUodGhpcywwLGUqaS50cmFjZWdyb3VwZ2FwKX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9ZS5oZWlnaHQsbj1lLndpZHRoO3Yuc2V0VHJhbnNsYXRlKHRoaXMsYSw1K2EraS5oZWlnaHQrci8yKSxpLmhlaWdodCs9cixpLndpZHRoPU1hdGgubWF4KGkud2lkdGgsbil9KSxpLndpZHRoKz00NSsyKmEsaS5oZWlnaHQrPTEwKzIqYSxvJiYoaS5oZWlnaHQrPShpLl9sZ3JvdXBzTGVuZ3RoLTEpKmkudHJhY2Vncm91cGdhcCkscz00MDtlbHNlIGlmKG8pe2Zvcih2YXIgbD1baS53aWR0aF0sdT1lLmRhdGEoKSxoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXt2YXIgZD11W2hdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS53aWR0aH0pLHA9NDArTWF0aC5tYXguYXBwbHkobnVsbCxkKTtpLndpZHRoKz1pLnRyYWNlZ3JvdXBnYXArcCxsLnB1c2goaS53aWR0aCl9ZS5lYWNoKGZ1bmN0aW9uKHQsZSl7di5zZXRUcmFuc2xhdGUodGhpcyxsW2VdLDApfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Yy5zZWxlY3QodGhpcyksZT10LnNlbGVjdEFsbCgiZy50cmFjZXMiKSxyPTA7ZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0sbj1lLmhlaWdodDt2LnNldFRyYW5zbGF0ZSh0aGlzLDAsNSthK3Irbi8yKSxyKz1ufSksaS5oZWlnaHQ9TWF0aC5tYXgoaS5oZWlnaHQscil9KSxpLmhlaWdodCs9MTArMiphLGkud2lkdGgrPTIqYX1lbHNle3ZhciBtPTAsZz0wLHk9MCxiPTA7ci5lYWNoKGZ1bmN0aW9uKHQpe3k9TWF0aC5tYXgoNDArdFswXS53aWR0aCx5KX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9eSxvPWkudHJhY2Vncm91cGdhcHx8NTthK2IrbytyPm4ud2lkdGgtKG4ubWFyZ2luLnIrbi5tYXJnaW4ubCkmJihiPTAsbSs9ZyxpLmhlaWdodD1pLmhlaWdodCtnLGc9MCksdi5zZXRUcmFuc2xhdGUodGhpcyxhK2IsNSthK2UuaGVpZ2h0LzIrbSksaS53aWR0aCs9bytyLGkuaGVpZ2h0PU1hdGgubWF4KGkuaGVpZ2h0LGUuaGVpZ2h0KSxiKz1vK3IsZz1NYXRoLm1heChlLmhlaWdodCxnKX0pLGkud2lkdGgrPTIqYSxpLmhlaWdodCs9MTArMiphfWkud2lkdGg9TWF0aC5jZWlsKGkud2lkdGgpLGkuaGVpZ2h0PU1hdGguY2VpbChpLmhlaWdodCksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07Yy5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVnZW5kdG9nZ2xlIikuY2FsbCh2LnNldFJlY3QsMCwtci5oZWlnaHQvMiwodC5fY29udGV4dC5lZGl0cy5sZWdlbmRUZXh0PzA6aS53aWR0aCkrcyxyLmhlaWdodCl9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLmxlZ2VuZCxuPSJsZWZ0IjtBLmlzUmlnaHRBbmNob3Iocik/bj0icmlnaHQiOkEuaXNDZW50ZXJBbmNob3IocikmJihuPSJjZW50ZXIiKTt2YXIgaT0idG9wIjtBLmlzQm90dG9tQW5jaG9yKHIpP2k9ImJvdHRvbSI6QS5pc01pZGRsZUFuY2hvcihyKSYmKGk9Im1pZGRsZSIpLGQuYXV0b01hcmdpbih0LCJsZWdlbmQiLHt4OnIueCx5OnIueSxsOnIud2lkdGgqKHtyaWdodDoxLGNlbnRlcjouNX1bbl18fDApLHI6ci53aWR0aCooe2xlZnQ6MSxjZW50ZXI6LjV9W25dfHwwKSxiOnIuaGVpZ2h0Kih7dG9wOjEsbWlkZGxlOi41fVtpXXx8MCksdDpyLmhlaWdodCooe2JvdHRvbToxLG1pZGRsZTouNX1baV18fDApfSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5sZWdlbmQsbj0ibGVmdCI7QS5pc1JpZ2h0QW5jaG9yKHIpP249InJpZ2h0IjpBLmlzQ2VudGVyQW5jaG9yKHIpJiYobj0iY2VudGVyIiksZC5hdXRvTWFyZ2luKHQsImxlZ2VuZCIse3g6ci54LHk6LjUsbDpyLndpZHRoKih7cmlnaHQ6MSxjZW50ZXI6LjV9W25dfHwwKSxyOnIud2lkdGgqKHtsZWZ0OjEsY2VudGVyOi41fVtuXXx8MCksYjowLHQ6MH0pfXZhciBjPXQoImQzIiksaD10KCIuLi8uLi9wbG90bHkiKSxmPXQoIi4uLy4uL2xpYiIpLGQ9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxwPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbT10KCIuLi9kcmFnZWxlbWVudCIpLHY9dCgiLi4vZHJhd2luZyIpLGc9dCgiLi4vY29sb3IiKSx5PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGI9dCgiLi9jb25zdGFudHMiKSx4PXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKSxfPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsdz10KCIuL2dldF9sZWdlbmRfZGF0YSIpLE09dCgiLi9zdHlsZSIpLGs9dCgiLi9oZWxwZXJzIiksQT10KCIuL2FuY2hvcl91dGlscyIpLFQ9ITAsUz14LkRCTENMSUNLREVMQVk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtMLmF0dHIoImRhdGEtc2Nyb2xsIixlKS5jYWxsKHYuc2V0VHJhbnNsYXRlLDAsZSksQy5jYWxsKHYuc2V0UmVjdCxOLHQsYi5zY3JvbGxCYXJXaWR0aCxiLnNjcm9sbEJhckhlaWdodCksVC5zZWxlY3QoInJlY3QiKS5hdHRyKHt5OnkuYm9yZGVyd2lkdGgtZX0pfXZhciByPXQuX2Z1bGxMYXlvdXQsbz0ibGVnZW5kIityLl91aWQ7aWYoci5faW5mb2xheWVyJiZ0LmNhbGNkYXRhKXt0Ll9sZWdlbmRNb3VzZURvd25UaW1lfHwodC5fbGVnZW5kTW91c2VEb3duVGltZT0wKTt2YXIgeT1yLmxlZ2VuZCx4PXIuc2hvd2xlZ2VuZCYmdyh0LmNhbGNkYXRhLHkpLF89ci5oaWRkZW5sYWJlbHN8fFtdO2lmKCFyLnNob3dsZWdlbmR8fCF4Lmxlbmd0aClyZXR1cm4gci5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLnJlbW92ZSgpLHIuX3RvcGRlZnMuc2VsZWN0KCIjIitvKS5yZW1vdmUoKSx2b2lkIGQuYXV0b01hcmdpbih0LCJsZWdlbmQiKTt2YXIgaz1yLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLmxlZ2VuZCIpLmRhdGEoWzBdKTtrLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cih7Y2xhc3M6ImxlZ2VuZCIsInBvaW50ZXItZXZlbnRzIjoiYWxsIn0pO3ZhciBUPXIuX3RvcGRlZnMuc2VsZWN0QWxsKCIjIitvKS5kYXRhKFswXSk7VC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsbykuYXBwZW5kKCJyZWN0Iik7dmFyIEU9ay5zZWxlY3RBbGwoInJlY3QuYmciKS5kYXRhKFswXSk7RS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoe2NsYXNzOiJiZyIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksRS5jYWxsKGcuc3Ryb2tlLHkuYm9yZGVyY29sb3IpLEUuY2FsbChnLmZpbGwseS5iZ2NvbG9yKSxFLnN0eWxlKCJzdHJva2Utd2lkdGgiLHkuYm9yZGVyd2lkdGgrInB4Iik7dmFyIEw9ay5zZWxlY3RBbGwoImcuc2Nyb2xsYm94IikuZGF0YShbMF0pO0wuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInNjcm9sbGJveCIpO3ZhciBDPWsuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhciIpLmRhdGEoWzBdKTtDLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cih7Y2xhc3M6InNjcm9sbGJhciIscng6MjAscnk6Mix3aWR0aDowLGhlaWdodDowfSkuY2FsbChnLmZpbGwsIiM4MDhCQTQiKTt2YXIgej1MLnNlbGVjdEFsbCgiZy5ncm91cHMiKS5kYXRhKHgpO3ouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyb3VwcyIpLHouZXhpdCgpLnJlbW92ZSgpO3ZhciBJPXouc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmRhdGEoZi5pZGVudGl0eSk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2VzIiksSS5leGl0KCkucmVtb3ZlKCksSS5jYWxsKE0sdCkuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuIHAudHJhY2VJcyhlLCJwaWUiKT8tMSE9PV8uaW5kZXhPZih0WzBdLmxhYmVsKT8uNToxOiJsZWdlbmRvbmx5Ij09PWUudmlzaWJsZT8uNToxfSkuZWFjaChmdW5jdGlvbigpe2Muc2VsZWN0KHRoaXMpLmNhbGwobix0KS5jYWxsKGksdCl9KTt2YXIgRD0wIT09ay5lbnRlcigpLnNpemUoKTtEJiYocyh0LHosSSksbCh0KSk7dmFyIFA9ci53aWR0aCxPPXIuaGVpZ2h0O3ModCx6LEkpLHkuaGVpZ2h0Pk8/dSh0KTpsKHQpO3ZhciBSPXIuX3NpemUsRj1SLmwrUi53KnkueCxqPVIudCtSLmgqKDEteS55KTtBLmlzUmlnaHRBbmNob3IoeSk/Ri09eS53aWR0aDpBLmlzQ2VudGVyQW5jaG9yKHkpJiYoRi09eS53aWR0aC8yKSxBLmlzQm90dG9tQW5jaG9yKHkpP2otPXkuaGVpZ2h0OkEuaXNNaWRkbGVBbmNob3IoeSkmJihqLT15LmhlaWdodC8yKTt2YXIgTj15LndpZHRoLEI9Ui53O04+Qj8oRj1SLmwsTj1CKTooRitOPlAmJihGPVAtTiksRjwwJiYoRj0wKSxOPU1hdGgubWluKFAtRix5LndpZHRoKSk7dmFyIFU9eS5oZWlnaHQsVj1SLmg7VT5WPyhqPVIudCxVPVYpOihqK1U+TyYmKGo9Ty1VKSxqPDAmJihqPTApLFU9TWF0aC5taW4oTy1qLHkuaGVpZ2h0KSksdi5zZXRUcmFuc2xhdGUoayxGLGopO3ZhciBILHEsRz1VLWIuc2Nyb2xsQmFySGVpZ2h0LTIqYi5zY3JvbGxCYXJNYXJnaW4sWT15LmhlaWdodC1VO2lmKHkuaGVpZ2h0PD1VfHx0Ll9jb250ZXh0LnN0YXRpY1Bsb3QpRS5hdHRyKHt3aWR0aDpOLXkuYm9yZGVyd2lkdGgsaGVpZ2h0OlUteS5ib3JkZXJ3aWR0aCx4OnkuYm9yZGVyd2lkdGgvMix5OnkuYm9yZGVyd2lkdGgvMn0pLHYuc2V0VHJhbnNsYXRlKEwsMCwwKSxULnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOk4tMip5LmJvcmRlcndpZHRoLGhlaWdodDpVLTIqeS5ib3JkZXJ3aWR0aCx4OnkuYm9yZGVyd2lkdGgseTp5LmJvcmRlcndpZHRofSksTC5jYWxsKHYuc2V0Q2xpcFVybCxvKTtlbHNle0g9Yi5zY3JvbGxCYXJNYXJnaW4scT1MLmF0dHIoImRhdGEtc2Nyb2xsIil8fDAsRS5hdHRyKHt3aWR0aDpOLTIqeS5ib3JkZXJ3aWR0aCtiLnNjcm9sbEJhcldpZHRoK2Iuc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDpVLXkuYm9yZGVyd2lkdGgseDp5LmJvcmRlcndpZHRoLzIseTp5LmJvcmRlcndpZHRoLzJ9KSxULnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOk4tMip5LmJvcmRlcndpZHRoK2Iuc2Nyb2xsQmFyV2lkdGgrYi5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OlUtMip5LmJvcmRlcndpZHRoLHg6eS5ib3JkZXJ3aWR0aCx5OnkuYm9yZGVyd2lkdGgtcX0pLEwuY2FsbCh2LnNldENsaXBVcmwsbyksRCYmZShILHEpLGsub24oIndoZWVsIixudWxsKSxrLm9uKCJ3aGVlbCIsZnVuY3Rpb24oKXtxPWYuY29uc3RyYWluKEwuYXR0cigiZGF0YS1zY3JvbGwiKS1jLmV2ZW50LmRlbHRhWS9HKlksLVksMCksSD1iLnNjcm9sbEJhck1hcmdpbi1xL1kqRyxlKEgscSksMCE9PXEmJnEhPT0tWSYmYy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSksQy5vbigiLmRyYWciLG51bGwpLEwub24oIi5kcmFnIixudWxsKTt2YXIgWD1jLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZyIsZnVuY3Rpb24oKXtIPWYuY29uc3RyYWluKGMuZXZlbnQueS1iLnNjcm9sbEJhckhlaWdodC8yLGIuc2Nyb2xsQmFyTWFyZ2luLGIuc2Nyb2xsQmFyTWFyZ2luK0cpLHE9LShILWIuc2Nyb2xsQmFyTWFyZ2luKS9HKlksZShILHEpfSk7Qy5jYWxsKFgpLEwuY2FsbChYKX1pZih0Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFBvc2l0aW9uKXt2YXIgVyxaLEosSztrLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCksbS5pbml0KHtlbGVtZW50Omsubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9di5nZXRUcmFuc2xhdGUoayk7Sj10LngsSz10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3ZhciByPUordCxuPUsrZTt2LnNldFRyYW5zbGF0ZShrLHIsbiksVz1tLmFsaWduKHIsMCxSLmwsUi5sK1Iudyx5LnhhbmNob3IpLFo9bS5hbGlnbihuLDAsUi50K1IuaCxSLnQseS55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKGUsbixpKXtpZihlJiZ2b2lkIDAhPT1XJiZ2b2lkIDAhPT1aKWgucmVsYXlvdXQodCx7ImxlZ2VuZC54IjpXLCJsZWdlbmQueSI6Wn0pO2Vsc2V7dmFyIG89ci5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBpLmNsaWVudFg+PXQubGVmdCYmaS5jbGllbnRYPD10LnJpZ2h0JiZpLmNsaWVudFk+PXQudG9wJiZpLmNsaWVudFk8PXQuYm90dG9tfSk7by5zaXplKCk+MCYmKDE9PT1uP2suX2NsaWNrVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YShvLHQsbil9LFMpOjI9PT1uJiYoay5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQoay5fY2xpY2tUaW1lb3V0KSxhKG8sdCxuKSkpfX19KX19fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcwMywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuL2FuY2hvcl91dGlscyI6NjUyLCIuL2NvbnN0YW50cyI6NjU0LCIuL2dldF9sZWdlbmRfZGF0YSI6NjU3LCIuL2hlbHBlcnMiOjY1OCwiLi9zdHlsZSI6NjYwLGQzOjEyMH1dLDY1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIpe2lmKCIiIT09dCYmaS5pc0dyb3VwZWQoZSkpLTE9PT1sLmluZGV4T2YodCk/KGwucHVzaCh0KSx1PSEwLHNbdF09W1tyXV0pOnNbdF0ucHVzaChbcl0pO2Vsc2V7CnZhciBuPSJ+fmkiK2g7bC5wdXNoKG4pLHNbbl09W1tyXV0saCsrfX12YXIgYSxvLHM9e30sbD1bXSx1PSExLGM9e30saD0wO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBmPXRbYV0sZD1mWzBdLHA9ZC50cmFjZSxtPXAubGVnZW5kZ3JvdXA7aWYoaS5sZWdlbmRHZXRzVHJhY2UocCkmJnAuc2hvd2xlZ2VuZClpZihuLnRyYWNlSXMocCwicGllIikpZm9yKGNbbV18fChjW21dPXt9KSxvPTA7bzxmLmxlbmd0aDtvKyspe3ZhciB2PWZbb10ubGFiZWw7Y1ttXVt2XXx8KHIobSx7bGFiZWw6dixjb2xvcjpmW29dLmNvbG9yLGk6ZltvXS5pLHRyYWNlOnB9KSxjW21dW3ZdPSEwKX1lbHNlIHIobSxkKX1pZighbC5sZW5ndGgpcmV0dXJuW107dmFyIGcseSxiPWwubGVuZ3RoO2lmKHUmJmkuaXNHcm91cGVkKGUpKWZvcih5PW5ldyBBcnJheShiKSxhPTA7YTxiO2ErKylnPXNbbFthXV0seVthXT1pLmlzUmV2ZXJzZWQoZSk/Zy5yZXZlcnNlKCk6ZztlbHNle2Zvcih5PVtuZXcgQXJyYXkoYildLGE9MDthPGI7YSsrKWc9c1tsW2FdXVswXSx5WzBdW2kuaXNSZXZlcnNlZChlKT9iLWEtMTphXT1nO2I9MX1yZXR1cm4gZS5fbGdyb3Vwc0xlbmd0aD1iLHl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vaGVscGVycyI6NjU4fV0sNjU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ci5sZWdlbmRHZXRzVHJhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmbi50cmFjZUlzKHQsInNob3dMZWdlbmQiKX0sci5pc0dyb3VwZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigiZ3JvdXBlZCIpfSxyLmlzVmVydGljYWw9ZnVuY3Rpb24odCl7cmV0dXJuImgiIT09dC5vcmllbnRhdGlvbn0sci5pc1JldmVyc2VkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoInJldmVyc2VkIil9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDJ9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImxlZ2VuZCIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxzdHlsZTp0KCIuL3N0eWxlIil9fSx7Ii4vYXR0cmlidXRlcyI6NjUzLCIuL2RlZmF1bHRzIjo2NTUsIi4vZHJhdyI6NjU2LCIuL3N0eWxlIjo2NjB9XSw2NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uL2NvbG9yIiksbD10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLHU9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLnZpc2libGUmJmUuZmlsbCYmIm5vbmUiIT09ZS5maWxsLGk9bC5oYXNMaW5lcyhlKTtlJiZlLl9tb2R1bGUmJiJjb250b3VyY2FycGV0Ij09PWUuX21vZHVsZS5uYW1lJiYoaT1lLmNvbnRvdXJzLnNob3dsaW5lcyxyPSJmaWxsIj09PWUuY29udG91cnMuY29sb3JpbmcpO3ZhciBhPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZGZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKHI/W3RdOltdKTthLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtZmlsbCIsITApLGEuZXhpdCgpLnJlbW92ZSgpLGEuYXR0cigiZCIsIk01LDBoMzB2NmgtMzB6IikuY2FsbChvLmZpbGxHcm91cFN0eWxlKTt2YXIgcz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5sZWdlbmRsaW5lcyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoaT9bdF06W10pO3MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuYXR0cigiZCIsIk01LDBoMzAiKSxzLmV4aXQoKS5yZW1vdmUoKSxzLmNhbGwoby5saW5lR3JvdXBTdHlsZSl9ZnVuY3Rpb24gYyh0KXtmdW5jdGlvbiByKHQsZSxyKXt2YXIgbj1hLm5lc3RlZFByb3BlcnR5KGgsdCkuZ2V0KCksaT1BcnJheS5pc0FycmF5KG4pJiZlP2Uobik6bjtpZihyKXtpZihpPHJbMF0pcmV0dXJuIHJbMF07aWYoaT5yWzFdKXJldHVybiByWzFdfXJldHVybiBpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMF19dmFyIHMsdSxjPXRbMF0saD1jLnRyYWNlLGY9bC5oYXNNYXJrZXJzKGgpLGQ9bC5oYXNUZXh0KGgpLHA9bC5oYXNMaW5lcyhoKTtpZihmfHxkfHxwKXt2YXIgbT17fSx2PXt9O2YmJihtLm1jPXIoIm1hcmtlci5jb2xvciIsaSksbS5tbz1yKCJtYXJrZXIub3BhY2l0eSIsYS5tZWFuLFsuMiwxXSksbS5tcz1yKCJtYXJrZXIuc2l6ZSIsYS5tZWFuLFsyLDE2XSksbS5tbGM9cigibWFya2VyLmxpbmUuY29sb3IiLGkpLG0ubWx3PXIoIm1hcmtlci5saW5lLndpZHRoIixhLm1lYW4sWzAsNV0pLHYubWFya2VyPXtzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9KSxwJiYodi5saW5lPXt3aWR0aDpyKCJsaW5lLndpZHRoIixpLFswLDEwXSl9KSxkJiYobS50eD0iQWEiLG0udHA9cigidGV4dHBvc2l0aW9uIixpKSxtLnRzPTEwLG0udGM9cigidGV4dGZvbnQuY29sb3IiLGkpLG0udGY9cigidGV4dGZvbnQuZmFtaWx5IixpKSkscz1bYS5taW5FeHRlbmQoYyxtKV0sdT1hLm1pbkV4dGVuZChoLHYpfXZhciBnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKSx5PWcuc2VsZWN0QWxsKCJwYXRoLnNjYXR0ZXJwdHMiKS5kYXRhKGY/czpbXSk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInNjYXR0ZXJwdHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSx5LmV4aXQoKS5yZW1vdmUoKSx5LmNhbGwoby5wb2ludFN0eWxlLHUsZSksZiYmKHNbMF0ubXJjPTMpO3ZhciBiPWcuc2VsZWN0QWxsKCJnLnBvaW50dGV4dCIpLmRhdGEoZD9zOltdKTtiLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9pbnR0ZXh0IiwhMCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksYi5leGl0KCkucmVtb3ZlKCksYi5zZWxlY3RBbGwoInRleHQiKS5jYWxsKG8udGV4dFBvaW50U3R5bGUsdSxlKX1mdW5jdGlvbiBoKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLm1hcmtlcnx8e30sYT1yLmxpbmV8fHt9LG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRiYXIiKS5kYXRhKGkudHJhY2VJcyhlLCJiYXIiKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRiYXIiLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXRbMF0sbz0oaS5tbHcrMXx8YS53aWR0aCsxKS0xO2Uuc3R5bGUoInN0cm9rZS13aWR0aCIsbysicHgiKS5jYWxsKHMuZmlsbCxpLm1jfHxyLmNvbG9yKSxvJiZlLmNhbGwocy5zdHJva2UsaS5tbGN8fGEuY29sb3IpfSl9ZnVuY3Rpb24gZih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRib3giKS5kYXRhKGkudHJhY2VJcyhlLCJib3giKSYmZS52aXNpYmxlP1t0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGJveCIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5saW5lLndpZHRoLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSgic3Ryb2tlLXdpZHRoIix0KyJweCIpLmNhbGwocy5maWxsLGUuZmlsbGNvbG9yKSx0JiZyLmNhbGwocy5zdHJva2UsZS5saW5lLmNvbG9yKX0pfWZ1bmN0aW9uIGQodCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kcGllIikuZGF0YShpLnRyYWNlSXMoZSwicGllIikmJmUudmlzaWJsZT9bdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRwaWUiLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLHIuZXhpdCgpLnJlbW92ZSgpLHIuc2l6ZSgpJiZyLmNhbGwodSx0WzBdLGUpfXQuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPWUuc2VsZWN0QWxsKCJnLmxheWVycyIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXJzIiwhMCksci5zdHlsZSgib3BhY2l0eSIsdFswXS50cmFjZS5vcGFjaXR5KSxyLnNlbGVjdEFsbCgiZy5sZWdlbmRmaWxsIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kZmlsbCIsITApLHIuc2VsZWN0QWxsKCJnLmxlZ2VuZGxpbmVzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kbGluZXMiLCEwKTt2YXIgaT1yLnNlbGVjdEFsbCgiZy5sZWdlbmRzeW1ib2xzIikuZGF0YShbdF0pO2kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRzeW1ib2xzIiwhMCksaS5zZWxlY3RBbGwoImcubGVnZW5kcG9pbnRzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kcG9pbnRzIiwhMCl9KS5lYWNoKGgpLmVhY2goZikuZWFjaChkKS5lYWNoKHIpLmVhY2goYyl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZSI6MTAxMSwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsIi4uL2NvbG9yIjo2MDIsIi4uL2RyYXdpbmciOjYyNixkMzoxMjB9XSw2NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG4saT1lLmN1cnJlbnRUYXJnZXQsYT1pLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksbz1pLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAscz10Ll9mdWxsTGF5b3V0LGw9e30sdT1mLmxpc3QodCxudWxsLCEwKSxoPSJvbiI7aWYoInpvb20iPT09YSl7dmFyIGQscD0iaW4iPT09bz8uNToyLG09KDErcCkvMix2PSgxLXApLzI7Zm9yKG49MDtuPHUubGVuZ3RoO24rKylpZihyPXVbbl0sIXIuZml4ZWRyYW5nZSlpZihkPXIuX25hbWUsImF1dG8iPT09bylsW2QrIi5hdXRvcmFuZ2UiXT0hMDtlbHNlIGlmKCJyZXNldCI9PT1vKXtpZih2b2lkIDA9PT1yLl9yYW5nZUluaXRpYWwpbFtkKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgZz1yLl9yYW5nZUluaXRpYWwuc2xpY2UoKTtsW2QrIi5yYW5nZVswXSJdPWdbMF0sbFtkKyIucmFuZ2VbMV0iXT1nWzFdfXZvaWQgMCE9PXIuX3Nob3dTcGlrZUluaXRpYWwmJihsW2QrIi5zaG93c3Bpa2VzIl09ci5fc2hvd1NwaWtlSW5pdGlhbCwib24iIT09aHx8ci5fc2hvd1NwaWtlSW5pdGlhbHx8KGg9Im9mZiIpKX1lbHNle3ZhciB5PVtyLnIybChyLnJhbmdlWzBdKSxyLnIybChyLnJhbmdlWzFdKV0sYj1bbSp5WzBdK3YqeVsxXSxtKnlbMV0rdip5WzBdXTtsW2QrIi5yYW5nZVswXSJdPXIubDJyKGJbMF0pLGxbZCsiLnJhbmdlWzFdIl09ci5sMnIoYlsxXSl9cy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1ofWVsc2V7aWYoImhvdmVybW9kZSIhPT1hfHwieCIhPT1vJiYieSIhPT1vKXtpZigiaG92ZXJtb2RlIj09PWEmJiJjbG9zZXN0Ij09PW8pe2ZvcihuPTA7bjx1Lmxlbmd0aDtuKyspcj11W25dLCJvbiIhPT1ofHxyLnNob3dzcGlrZXN8fChoPSJvZmYiKTtzLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWh9fWVsc2Ugbz1zLl9pc0hvcml6PyJ5IjoieCIsaS5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixvKSwiY2xvc2VzdCIhPT1vJiYocy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD0ib2ZmIik7bFthXT1vfWMucmVsYXlvdXQodCxsKX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxuPXIuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxpPXIuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxhPXQuX2Z1bGxMYXlvdXQsbz1oLmdldFN1YnBsb3RJZHMoYSwiZ2wzZCIpLHM9e30sbD1uLnNwbGl0KCIuIiksdT0wO3U8by5sZW5ndGg7dSsrKXNbb1t1XSsiLiIrbFsxXV09aTtjLnJlbGF5b3V0KHQscyl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksaT10Ll9mdWxsTGF5b3V0LGE9aC5nZXRTdWJwbG90SWRzKGksImdsM2QiKSxvPXt9LHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PWwrIi5jYW1lcmEiLGY9aVtsXS5fc2NlbmU7InJlc2V0RGVmYXVsdCI9PT1uP29bdV09bnVsbDoicmVzZXRMYXN0U2F2ZSI9PT1uJiYob1t1XT1kLmV4dGVuZERlZXAoe30sZi5jYW1lcmFJbml0aWFsKSl9Yy5yZWxheW91dCh0LG8pfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLl9wcmV2aW91c1ZhbHx8ITEsaT10LmxheW91dCxhPXQuX2Z1bGxMYXlvdXQsbz1oLmdldFN1YnBsb3RJZHMoYSwiZ2wzZCIpLHM9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxsPVsic2hvd3NwaWtlcyIsInNwaWtlc2lkZXMiLCJzcGlrZXRoaWNrbmVzcyIsInNwaWtlY29sb3IiXSx1PXt9LGY9e30scD17fTtpZihuKXA9ZC5leHRlbmREZWVwKGksbiksci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle3A9eyJhbGxheGVzLnNob3dzcGlrZXMiOiExfTtmb3IodmFyIG09MDttPG8ubGVuZ3RoO20rKyl7dmFyIHY9b1ttXSxnPWFbdl0seT11W3ZdPXt9O3kuaG92ZXJtb2RlPWcuaG92ZXJtb2RlLHBbdisiLmhvdmVybW9kZSJdPSExO2Zvcih2YXIgYj0wO2I8MztiKyspe3ZhciB4PXNbYl07Zj15W3hdPXt9O2Zvcih2YXIgXz0wO188bC5sZW5ndGg7XysrKXt2YXIgdz1sW19dO2Zbd109Z1t4XVt3XX19fXIuX3ByZXZpb3VzVmFsPWQuZXh0ZW5kRGVlcCh7fSx1KX1jLnJlbGF5b3V0KHQscCl9ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsYT10Ll9mdWxsTGF5b3V0LG89aC5nZXRTdWJwbG90SWRzKGEsImdlbyIpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9YVtvW3NdXS5fc3VicGxvdDtpZigiem9vbSI9PT1uKXt2YXIgdT1sLnByb2plY3Rpb24uc2NhbGUoKSxjPSJpbiI9PT1pPzIqdTouNSp1O2wucHJvamVjdGlvbi5zY2FsZShjKSxsLnpvb20uc2NhbGUoYyksbC5yZW5kZXIoKX1lbHNlInJlc2V0Ij09PW4mJmwuem9vbVJlc2V0KCl9fWZ1bmN0aW9uIGwodCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0O2U9ci5faGFzKCJjYXJ0ZXNpYW4iKT9yLl9pc0hvcml6PyJ5IjoieCI6ImNsb3Nlc3QiO3ZhciBuPSF0Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmZTtjLnJlbGF5b3V0KHQsImhvdmVybW9kZSIsbil9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGUscixuPXQuX2Z1bGxMYXlvdXQsaT1mLmxpc3QodCxudWxsLCEwKSxhPXt9LG89MDtvPGkubGVuZ3RoO28rKyllPWlbb10scj1lLl9uYW1lLGFbcisiLnNob3dzcGlrZXMiXT0ib24iPT09bi5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtyZXR1cm4gYX12YXIgYz10KCIuLi8uLi9wbG90bHkiKSxoPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vLi4vbGliIikscD10KCIuLi8uLi9zbmFwc2hvdC9kb3dubG9hZCIpLG09dCgiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iKSx2PWUuZXhwb3J0cz17fTt2LnRvSW1hZ2U9e25hbWU6InRvSW1hZ2UiLHRpdGxlOiJEb3dubG9hZCBwbG90IGFzIGEgcG5nIixpY29uOm0uY2FtZXJhLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPSJwbmciO2Qubm90aWZpZXIoIlRha2luZyBzbmFwc2hvdCAtIHRoaXMgbWF5IHRha2UgYSBmZXcgc2Vjb25kcyIsImxvbmciKSxkLmlzSUUoKSYmKGQubm90aWZpZXIoIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy4iLCJsb25nIiksZT0ic3ZnIikscCh0LHtmb3JtYXQ6ZX0pLnRoZW4oZnVuY3Rpb24odCl7ZC5ub3RpZmllcigiU25hcHNob3Qgc3VjY2VlZGVkIC0gIit0LCJsb25nIil9KS5jYXRjaChmdW5jdGlvbigpe2Qubm90aWZpZXIoIlNvcnJ5IHRoZXJlIHdhcyBhIHByb2JsZW0gZG93bmxvYWRpbmcgeW91ciBzbmFwc2hvdCEiLCJsb25nIil9KX19LHYuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOiJzZW5kRGF0YVRvQ2xvdWQiLHRpdGxlOiJTYXZlIGFuZCBlZGl0IHBsb3QgaW4gY2xvdWQiLGljb246bS5kaXNrLGNsaWNrOmZ1bmN0aW9uKHQpe2guc2VuZERhdGFUb0Nsb3VkKHQpfX0sdi56b29tMmQ9e25hbWU6Inpvb20yZCIsdGl0bGU6Ilpvb20iLGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246bS56b29tYm94LGNsaWNrOm59LHYucGFuMmQ9e25hbWU6InBhbjJkIix0aXRsZToiUGFuIixhdHRyOiJkcmFnbW9kZSIsdmFsOiJwYW4iLGljb246bS5wYW4sY2xpY2s6bn0sdi5zZWxlY3QyZD17bmFtZToic2VsZWN0MmQiLHRpdGxlOiJCb3ggU2VsZWN0IixhdHRyOiJkcmFnbW9kZSIsdmFsOiJzZWxlY3QiLGljb246bS5zZWxlY3Rib3gsY2xpY2s6bn0sdi5sYXNzbzJkPXtuYW1lOiJsYXNzbzJkIix0aXRsZToiTGFzc28gU2VsZWN0IixhdHRyOiJkcmFnbW9kZSIsdmFsOiJsYXNzbyIsaWNvbjptLmxhc3NvLGNsaWNrOm59LHYuem9vbUluMmQ9e25hbWU6Inpvb21JbjJkIix0aXRsZToiWm9vbSBpbiIsYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjptLnpvb21fcGx1cyxjbGljazpufSx2Lnpvb21PdXQyZD17bmFtZToiem9vbU91dDJkIix0aXRsZToiWm9vbSBvdXQiLGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOm0uem9vbV9taW51cyxjbGljazpufSx2LmF1dG9TY2FsZTJkPXtuYW1lOiJhdXRvU2NhbGUyZCIsdGl0bGU6IkF1dG9zY2FsZSIsYXR0cjoiem9vbSIsdmFsOiJhdXRvIixpY29uOm0uYXV0b3NjYWxlLGNsaWNrOm59LHYucmVzZXRTY2FsZTJkPXtuYW1lOiJyZXNldFNjYWxlMmQiLHRpdGxlOiJSZXNldCBheGVzIixhdHRyOiJ6b29tIix2YWw6InJlc2V0IixpY29uOm0uaG9tZSxjbGljazpufSx2LmhvdmVyQ2xvc2VzdENhcnRlc2lhbj17bmFtZToiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIix0aXRsZToiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiLGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOm0udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6bn0sdi5ob3ZlckNvbXBhcmVDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ29tcGFyZUNhcnRlc2lhbiIsdGl0bGU6IkNvbXBhcmUgZGF0YSBvbiBob3ZlciIsYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjptLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6bn0sdi56b29tM2Q9e25hbWU6Inpvb20zZCIsdGl0bGU6Ilpvb20iLGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6Inpvb20iLGljb246bS56b29tYm94LGNsaWNrOml9LHYucGFuM2Q9e25hbWU6InBhbjNkIix0aXRsZToiUGFuIixhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJwYW4iLGljb246bS5wYW4sY2xpY2s6aX0sdi5vcmJpdFJvdGF0aW9uPXtuYW1lOiJvcmJpdFJvdGF0aW9uIix0aXRsZToib3JiaXRhbCByb3RhdGlvbiIsYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoib3JiaXQiLGljb246bVsiM2Rfcm90YXRlIl0sY2xpY2s6aX0sdi50YWJsZVJvdGF0aW9uPXtuYW1lOiJ0YWJsZVJvdGF0aW9uIix0aXRsZToidHVybnRhYmxlIHJvdGF0aW9uIixhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ0dXJudGFibGUiLGljb246bVsiei1heGlzIl0sY2xpY2s6aX0sdi5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZToicmVzZXRDYW1lcmFEZWZhdWx0M2QiLHRpdGxlOiJSZXNldCBjYW1lcmEgdG8gZGVmYXVsdCIsYXR0cjoicmVzZXREZWZhdWx0IixpY29uOm0uaG9tZSxjbGljazphfSx2LnJlc2V0Q2FtZXJhTGFzdFNhdmUzZD17bmFtZToicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIix0aXRsZToiUmVzZXQgY2FtZXJhIHRvIGxhc3Qgc2F2ZSIsYXR0cjoicmVzZXRMYXN0U2F2ZSIsaWNvbjptLm1vdmllLGNsaWNrOmF9LHYuaG92ZXJDbG9zZXN0M2Q9e25hbWU6ImhvdmVyQ2xvc2VzdDNkIix0aXRsZToiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm0udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6b30sdi56b29tSW5HZW89e25hbWU6Inpvb21JbkdlbyIsdGl0bGU6Ilpvb20gaW4iLGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246bS56b29tX3BsdXMsY2xpY2s6c30sdi56b29tT3V0R2VvPXtuYW1lOiJ6b29tT3V0R2VvIix0aXRsZToiWm9vbSBvdXQiLGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOm0uem9vbV9taW51cyxjbGljazpzfSx2LnJlc2V0R2VvPXtuYW1lOiJyZXNldEdlbyIsdGl0bGU6IlJlc2V0IixhdHRyOiJyZXNldCIsdmFsOm51bGwsaWNvbjptLmF1dG9zY2FsZSxjbGljazpzfSx2LmhvdmVyQ2xvc2VzdEdlbz17bmFtZToiaG92ZXJDbG9zZXN0R2VvIix0aXRsZToiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm0udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6bH0sdi5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOiJob3ZlckNsb3Nlc3RHbDJkIix0aXRsZToiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm0udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6bH0sdi5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6ImhvdmVyQ2xvc2VzdFBpZSIsdGl0bGU6IlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIsYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246bS50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpsfSx2LnRvZ2dsZUhvdmVyPXtuYW1lOiJ0b2dnbGVIb3ZlciIsdGl0bGU6IlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIsYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjptLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7bCh0KSxvKHQsZSl9fSx2LnJlc2V0Vmlld3M9e25hbWU6InJlc2V0Vmlld3MiLHRpdGxlOiJSZXNldCB2aWV3cyIsaWNvbjptLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQ7ci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInpvb20iKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLCJyZXNldCIpLG4odCxlKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwicmVzZXRMYXN0U2F2ZSIpLGEodCxlKX19LHYudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZToidG9nZ2xlU3Bpa2VsaW5lcyIsdGl0bGU6IlRvZ2dsZSBTcGlrZSBMaW5lcyIsaWNvbjptLnNwaWtlbGluZSxhdHRyOiJfY2FydGVzaWFuU3Bpa2VzRW5hYmxlZCIsdmFsOiJvbiIsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPSJjbG9zZXN0Ij09PWUuaG92ZXJtb2RlJiYib24iPT09ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD8ib2ZmIjoib24iO3ZhciByPXUodCk7ci5ob3Zlcm1vZGU9ImNsb3Nlc3QiLGMucmVsYXlvdXQodCxyKX19LHYucmVzZXRWaWV3TWFwYm94PXtuYW1lOiJyZXNldFZpZXdNYXBib3giLHRpdGxlOiJSZXNldCB2aWV3IixhdHRyOiJyZXNldCIsaWNvbjptLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1oLmdldFN1YnBsb3RJZHMoZSwibWFwYm94Iiksbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspZm9yKHZhciBhPXJbaV0sbz1lW2FdLl9zdWJwbG90LHM9by52aWV3SW5pdGlhbCxsPU9iamVjdC5rZXlzKHMpLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGY9bFt1XTtuW2ErIi4iK2ZdPXNbZl19Yy5yZWxheW91dCh0LG4pfX19LHsiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iOjIsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vLi4vc25hcHNob3QvZG93bmxvYWQiOjg0NH1dLDY2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLm1hbmFnZT10KCIuL21hbmFnZSIpfSx7Ii4vbWFuYWdlIjo2NjN9XSw2NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0KXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dOy0xPT09ZS5pbmRleE9mKGkpJiZyLnB1c2goZltpXSl9Zy5wdXNoKHIpfXZhciBzPXQuX2Z1bGxMYXlvdXQsbD10Ll9mdWxsRGF0YSx1PXMuX2hhcygiY2FydGVzaWFuIiksYz1zLl9oYXMoImdsM2QiKSxoPXMuX2hhcygiZ2VvIiksZD1zLl9oYXMoInBpZSIpLHA9cy5faGFzKCJnbDJkIiksbT1zLl9oYXMoInRlcm5hcnkiKSx2PXMuX2hhcygibWFwYm94IiksZz1bXTtpZihuKFsidG9JbWFnZSIsInNlbmREYXRhVG9DbG91ZCJdKSwodXx8cHx8ZHx8bSkraCtjPjEpcmV0dXJuIG4oWyJyZXNldFZpZXdzIiwidG9nZ2xlSG92ZXIiXSksbyhnLHIpO2MmJihuKFsiem9vbTNkIiwicGFuM2QiLCJvcmJpdFJvdGF0aW9uIiwidGFibGVSb3RhdGlvbiJdKSxuKFsicmVzZXRDYW1lcmFEZWZhdWx0M2QiLCJyZXNldENhbWVyYUxhc3RTYXZlM2QiXSksbihbImhvdmVyQ2xvc2VzdDNkIl0pKSxoJiYobihbInpvb21JbkdlbyIsInpvb21PdXRHZW8iLCJyZXNldEdlbyJdKSxuKFsiaG92ZXJDbG9zZXN0R2VvIl0pKTt2YXIgeT1pKHMpLGI9W107cmV0dXJuKCh1fHxwKSYmIXl8fG0pJiYoYj1bInpvb20yZCIsInBhbjJkIl0pLHYmJihiPVsicGFuMmQiXSksYShsKSYmKGIucHVzaCgic2VsZWN0MmQiKSxiLnB1c2goImxhc3NvMmQiKSksYi5sZW5ndGgmJm4oYiksIXUmJiFwfHx5fHxtfHxuKFsiem9vbUluMmQiLCJ6b29tT3V0MmQiLCJhdXRvU2NhbGUyZCIsInJlc2V0U2NhbGUyZCJdKSx1JiZkP24oWyJ0b2dnbGVIb3ZlciJdKTpwP24oWyJob3ZlckNsb3Nlc3RHbDJkIl0pOnU/bihbInRvZ2dsZVNwaWtlbGluZXMiLCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iXSk6ZD9uKFsiaG92ZXJDbG9zZXN0UGllIl0pOnYmJm4oWyJyZXNldFZpZXdNYXBib3giLCJ0b2dnbGVIb3ZlciJdKSxvKGcscil9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9bC5saXN0KHtfZnVsbExheW91dDp0fSxudWxsLCEwKSxyPSEwLG49MDtuPGUubGVuZ3RoO24rKylpZighZVtuXS5maXhlZHJhbmdlKXtyPSExO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPSExLHI9MDtyPHQubGVuZ3RoJiYhZTtyKyspe3ZhciBuPXRbcl07bi5fbW9kdWxlJiZuLl9tb2R1bGUuc2VsZWN0UG9pbnRzJiYoYy50cmFjZUlzKG4sInNjYXR0ZXItbGlrZSIpPyh1Lmhhc01hcmtlcnMobil8fHUuaGFzVGV4dChuKSkmJihlPSEwKTplPSEwKX1yZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSl7aWYoZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2goZVtyXSk7ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9dFtlXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoInN0cmluZyI9PXR5cGVvZiBpKXtpZih2b2lkIDA9PT1mW2ldKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9ucyogY29uZmlndXJhdGlvbiBvcHRpb25zIiwiaW52YWxpZCBidXR0b24gbmFtZSJdLmpvaW4oIiAiKSk7dFtlXVtuXT1mW2ldfX1yZXR1cm4gdH12YXIgbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHU9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaD10KCIuL21vZGViYXIiKSxmPXQoIi4vYnV0dG9ucyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fY29udGV4dCxpPWUuX21vZGVCYXI7aWYoIXIuZGlzcGxheU1vZGVCYXIpcmV0dXJuIHZvaWQoaSYmKGkuZGVzdHJveSgpLGRlbGV0ZSBlLl9tb2RlQmFyKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb1JlbW92ZSogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb0FkZCkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9BZGQqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTt2YXIgYSxvPXIubW9kZUJhckJ1dHRvbnM7YT1BcnJheS5pc0FycmF5KG8pJiZvLmxlbmd0aD9zKG8pOm4odCxyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUsci5tb2RlQmFyQnV0dG9uc1RvQWRkKSxpP2kudXBkYXRlKHQsYSk6ZS5fbW9kZUJhcj1oKHQsYSl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1LCIuL2J1dHRvbnMiOjY2MSwiLi9tb2RlYmFyIjo2NjR9XSw2NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9bmV3IG4oe2dyYXBoSW5mbzp0LGNvbnRhaW5lcjpyLl9wYXBlcmRpdi5ub2RlKCksYnV0dG9uczplfSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZhLnNlbGVjdChpLmVsZW1lbnQpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnQiLCEwKS50ZXh0KCJQUklWQVRFIiksaX12YXIgYT10KCJkMyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi8uLi9idWlsZC9wbG90aWNvbiIpLGw9bi5wcm90b3R5cGU7bC51cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdyYXBoSW5mbz10O3ZhciByPXRoaXMuZ3JhcGhJbmZvLl9jb250ZXh0OyJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyP3RoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIgbW9kZWJhci0taG92ZXIiOnRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiO3ZhciBuPSF0aGlzLmhhc0J1dHRvbnMoZSksaT10aGlzLmhhc0xvZ28hPT1yLmRpc3BsYXlsb2dvOyhufHxpKSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyhlKSxyLmRpc3BsYXlsb2dvJiYodGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ2V0TG9nbygpKSx0aGlzLmhhc0xvZ289ITApKSx0aGlzLnVwZGF0ZUFjdGl2ZUJ1dHRvbigpfSxsLnVwZGF0ZUJ1dHRvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmJ1dHRvbnM9dCx0aGlzLmJ1dHRvbkVsZW1lbnRzPVtdLHRoaXMuYnV0dG9uc05hbWVzPVtdLHRoaXMuYnV0dG9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWUuY3JlYXRlR3JvdXAoKTt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5uYW1lO2lmKCFuKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIGJ1dHRvbiAnbmFtZScgaW4gYnV0dG9uIGNvbmZpZyIpO2lmKC0xIT09ZS5idXR0b25zTmFtZXMuaW5kZXhPZihuKSl0aHJvdyBuZXcgRXJyb3IoImJ1dHRvbiBuYW1lICciK24rIicgaXMgdGFrZW4iKTtlLmJ1dHRvbnNOYW1lcy5wdXNoKG4pO3ZhciBpPWUuY3JlYXRlQnV0dG9uKHQpO2UuYnV0dG9uRWxlbWVudHMucHVzaChpKSxyLmFwcGVuZENoaWxkKGkpfSksZS5lbGVtZW50LmFwcGVuZENoaWxkKHIpfSl9LGwuY3JlYXRlR3JvdXA9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5jbGFzc05hbWU9Im1vZGViYXItZ3JvdXAiLHR9LGwuY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5zZXRBdHRyaWJ1dGUoInJlbCIsInRvb2x0aXAiKSxyLmNsYXNzTmFtZT0ibW9kZWJhci1idG4iO3ZhciBuPXQudGl0bGU7dm9pZCAwPT09biYmKG49dC5uYW1lKSwobnx8MD09PW4pJiZyLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsbiksdm9pZCAwIT09dC5hdHRyJiZyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIix0LmF0dHIpO3ZhciBpPXQudmFsO2lmKHZvaWQgMCE9PWkmJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKGk9aSh0aGlzLmdyYXBoSW5mbykpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsaSkpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNsaWNrKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIGJ1dHRvbiAnY2xpY2snIGZ1bmN0aW9uIGluIGJ1dHRvbiBjb25maWciKTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZhLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKSxyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbih0Lmljb258fHMucXVlc3Rpb24sdC5uYW1lKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtZ3Jhdml0eSIsdC5ncmF2aXR5fHwibiIpLHJ9LGwuY3JlYXRlSWNvbj1mdW5jdGlvbih0LGUpe3ZhciByPXQuYXNjZW50LXQuZGVzY2VudCxuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwic3ZnIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2kuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxpLnNldEF0dHJpYnV0ZSgid2lkdGgiLHQud2lkdGgvcisiZW0iKSxpLnNldEF0dHJpYnV0ZSgidmlld0JveCIsWzAsMCx0LndpZHRoLHJdLmpvaW4oIiAiKSk7dmFyIG89InRvZ2dsZVNwaWtlbGluZXMiPT09ZT8ibWF0cml4KDEuNSAwIDAgLTEuNSAwICIrdC5hc2NlbnQrIikiOiJtYXRyaXgoMSAwIDAgLTEgMCAiK3QuYXNjZW50KyIpIjtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoImQiLHQucGF0aCksYS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbyksaS5hcHBlbmRDaGlsZChhKSxpfSxsLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxzPSJ0cnVlIj09PXQuZ2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIpLGw9YS5zZWxlY3QodCk7aWYocylpPT09ciYmbC5jbGFzc2VkKCJhY3RpdmUiLCFsLmNsYXNzZWQoImFjdGl2ZSIpKTtlbHNle3ZhciB1PW51bGw9PT1pP2k6by5uZXN0ZWRQcm9wZXJ0eShlLGkpLmdldCgpO2wuY2xhc3NlZCgiYWN0aXZlIix1PT09bil9fSl9LGwuaGFzQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1dHRvbnM7aWYoIWUpcmV0dXJuITE7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoO24rKylpZih0W3JdW25dLm5hbWUhPT1lW3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LGwuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3JlYXRlR3JvdXAoKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPSJodHRwczovL3Bsb3QubHkvIixlLnRhcmdldD0iX2JsYW5rIixlLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsIlByb2R1Y2VkIHdpdGggUGxvdGx5IiksZS5jbGFzc05hbWU9Im1vZGViYXItYnRuIHBsb3RseWpzaWNvbiBtb2RlYmFyLWJ0bi0tbG9nbyIsZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24ocy5wbG90bHlsb2dvKSksdC5hcHBlbmRDaGlsZChlKSx0fSxsLnJlbW92ZUFsbEJ1dHRvbnM9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuZWxlbWVudC5maXJzdENoaWxkOyl0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpO3RoaXMuaGFzTG9nbz0hMX0sbC5kZXN0cm95PWZ1bmN0aW9uKCl7by5yZW1vdmVFbGVtZW50KHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5tb2RlYmFyIikpfSxlLmV4cG9ydHM9aX0seyIuLi8uLi8uLi9idWlsZC9wbG90aWNvbiI6MiwiLi4vLi4vbGliIjo3MjQsZDM6MTIwfV0sNjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuL2J1dHRvbl9hdHRyaWJ1dGVzIik7bz1hKG8se19pc0xpbmtlZFRvQXJyYXk6ImJ1dHRvbiJ9KSxlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxidXR0b25zOm8seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjN9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjN9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJib3R0b20ifSxmb250OmEoe30sbix7fSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5saWdodExpbmV9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4vYnV0dG9uX2F0dHJpYnV0ZXMiOjY2Nn1dLDY2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3N0ZXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm1vbnRoIiwieWVhciIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJhbGwiXSxkZmx0OiJtb250aCJ9LHN0ZXBtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiYWNrd2FyZCIsInRvZGF0ZSJdLGRmbHQ6ImJhY2t3YXJkIn0sY291bnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIn19fSx7fV0sNjY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sNjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gYS5jb2VyY2UoaSxvLGwsdCxlKX1mb3IodmFyIGksbyxzPXQuYnV0dG9uc3x8W10sdT1lLmJ1dHRvbnM9W10sYz0wO2M8cy5sZW5ndGg7YysrKWlmKGk9c1tjXSxvPXt9LGEuaXNQbGFpbk9iamVjdChpKSl7dmFyIGg9bigic3RlcCIpOyJhbGwiIT09aCYmKCFyfHwiZ3JlZ29yaWFuIj09PXJ8fCJtb250aCIhPT1oJiYieWVhciIhPT1oP24oInN0ZXBtb2RlIik6by5zdGVwbW9kZT0iYmFja3dhcmQiLG4oImNvdW50IikpLG4oImxhYmVsIiksby5faW5kZXg9Yyx1LnB1c2gobyl9cmV0dXJuIHV9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdLmFuY2hvcj09PXQuX2lkfSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrdS55UGFkXX12YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2NvbG9yIikscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXQoIi4vYnV0dG9uX2F0dHJpYnV0ZXMiKSx1PXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsYyl7ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBhLmNvZXJjZShmLGQscyx0LGUpfXZhciBmPXQucmFuZ2VzZWxlY3Rvcnx8e30sZD1lLnJhbmdlc2VsZWN0b3I9e307aWYoaCgidmlzaWJsZSIsbihmLGQsYykubGVuZ3RoPjApKXt2YXIgcD1pKGUscixsKTtoKCJ4IixwWzBdKSxoKCJ5IixwWzFdKSxhLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxoKCJ4YW5jaG9yIiksaCgieWFuY2hvciIpLGEuY29lcmNlRm9udChoLCJmb250IixyLmZvbnQpO3ZhciBtPWgoImJnY29sb3IiKTtoKCJhY3RpdmVjb2xvciIsby5jb250cmFzdChtLHUubGlnaHRBbW91bnQsdS5kYXJrQW1vdW50KSksaCgiYm9yZGVyY29sb3IiKSxoKCJib3JkZXJ3aWR0aCIpfX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL2NvbG9yIjo2MDIsIi4vYXR0cmlidXRlcyI6NjY1LCIuL2J1dHRvbl9hdHRyaWJ1dGVzIjo2NjYsIi4vY29uc3RhbnRzIjo2Njd9XSw2Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9Zy5saXN0KHQsIngiLCEwKSxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLnJhbmdlc2VsZWN0b3ImJmkucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24gYSh0LGUscil7aWYoImFsbCI9PT1lLnN0ZXApcmV0dXJuITA9PT10LmF1dG9yYW5nZTt2YXIgbj1PYmplY3Qua2V5cyhyKTtyZXR1cm4gdC5yYW5nZVswXT09PXJbblswXV0mJnQucmFuZ2VbMV09PT1yW25bMV1dfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShbMF0pO24uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzZWxlY3Rvci1yZWN0IiwhMCksbi5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksbi5hdHRyKHtyeDp4LnJ4LHJ5Ongucnl9KSxuLmNhbGwocC5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChwLmZpbGwscyhlLHIpKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZS5pc0FjdGl2ZXx8ZS5pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9ZnVuY3Rpb24gbCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3YuY29udmVydFRvVHNwYW5zKHQsbil9dmFyIGE9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoInNlbGVjdG9yLXRleHQiLCEwKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCksYS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLGEuY2FsbChtLmZvbnQsZS5mb250KS50ZXh0KHUocikpLmNhbGwoaSl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5sYWJlbD90LmxhYmVsOiJhbGwiPT09dC5zdGVwPyJhbGwiOnQuY291bnQrdC5zdGVwLmNoYXJBdCgwKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3Iud2lkdGg9MCxyLmhlaWdodD0wO3ZhciBpPXIuYm9yZGVyd2lkdGg7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9aC5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxuPXIuZm9udC5zaXplKmIsaT1NYXRoLm1heChuKnYubGluZUNvdW50KGUpLDE2KSszO3IuaGVpZ2h0PU1hdGgubWF4KHIuaGVpZ2h0LGkpfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9aC5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXJlY3QiKSxuPXQuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGE9bi5ub2RlKCkmJm0uYkJveChuLm5vZGUoKSkud2lkdGgsbz1yLmZvbnQuc2l6ZSpiLHM9di5saW5lQ291bnQobiksbD1NYXRoLm1heChhKzEwLHgubWluQnV0dG9uV2lkdGgpO3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGkrci53aWR0aCkrIiwiK2krIikiKSxlLmF0dHIoe3g6MCx5OjAsd2lkdGg6bCxoZWlnaHQ6ci5oZWlnaHR9KSx2LnBvc2l0aW9uVGV4dChuLGwvMixyLmhlaWdodC8yLShzLTEpKm8vMiszKSxyLndpZHRoKz1sKzV9KSxlLnNlbGVjdEFsbCgicmVjdCIpLmF0dHIoImhlaWdodCIsci5oZWlnaHQpO3ZhciBhPXQuX2Z1bGxMYXlvdXQuX3NpemU7ci5seD1hLmwrYS53KnIueCxyLmx5PWEudCthLmgqKDEtci55KTt2YXIgbz0ibGVmdCI7eS5pc1JpZ2h0QW5jaG9yKHIpJiYoci5seC09ci53aWR0aCxvPSJyaWdodCIpLHkuaXNDZW50ZXJBbmNob3IocikmJihyLmx4LT1yLndpZHRoLzIsbz0iY2VudGVyIik7dmFyIHM9InRvcCI7eS5pc0JvdHRvbUFuY2hvcihyKSYmKHIubHktPXIuaGVpZ2h0LHM9ImJvdHRvbSIpLHkuaXNNaWRkbGVBbmNob3IocikmJihyLmx5LT1yLmhlaWdodC8yLHM9Im1pZGRsZSIpLHIud2lkdGg9TWF0aC5jZWlsKHIud2lkdGgpLHIuaGVpZ2h0PU1hdGguY2VpbChyLmhlaWdodCksci5seD1NYXRoLnJvdW5kKHIubHgpLHIubHk9TWF0aC5yb3VuZChyLmx5KSxkLmF1dG9NYXJnaW4odCxuKyItcmFuZ2Utc2VsZWN0b3IiLHt4OnIueCx5OnIueSxsOnIud2lkdGgqKHtyaWdodDoxLGNlbnRlcjouNX1bb118fDApLHI6ci53aWR0aCooe2xlZnQ6MSxjZW50ZXI6LjV9W29dfHwwKSxiOnIuaGVpZ2h0Kih7dG9wOjEsbWlkZGxlOi41fVtzXXx8MCksdDpyLmhlaWdodCooe2JvdHRvbToxLG1pZGRsZTouNX1bc118fDApfSl9dmFyIGg9dCgiZDMiKSxmPXQoIi4uLy4uL3Bsb3RseSIpLGQ9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxwPXQoIi4uL2NvbG9yIiksbT10KCIuLi9kcmF3aW5nIiksdj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxnPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHk9dCgiLi4vbGVnZW5kL2FuY2hvcl91dGlscyIpLGI9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyx4PXQoIi4vY29uc3RhbnRzIiksXz10KCIuL2dldF91cGRhdGVfb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIucmFuZ2VzZWxlY3RvciIpLmRhdGEobih0KSxpKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmFuZ2VzZWxlY3RvciIsITApLHIuZXhpdCgpLnJlbW92ZSgpLHIuc3R5bGUoe2N1cnNvcjoicG9pbnRlciIsInBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1oLnNlbGVjdCh0aGlzKSxuPWUsaT1uLnJhbmdlc2VsZWN0b3Iscz1yLnNlbGVjdEFsbCgiZy5idXR0b24iKS5kYXRhKGkuYnV0dG9ucyk7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJ1dHRvbiIsITApLHMuZXhpdCgpLnJlbW92ZSgpLHMuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1oLnNlbGVjdCh0aGlzKSxzPV8obixlKTtlLmlzQWN0aXZlPWEobixlLHMpLHIuY2FsbChvLGksZSksci5jYWxsKGwsaSxlLHQpLHIub24oImNsaWNrIixmdW5jdGlvbigpe3QuX2RyYWdnZWR8fGYucmVsYXlvdXQodCxzKX0pLHIub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtlLmlzSG92ZXJlZD0hMCxyLmNhbGwobyxpLGUpfSksci5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZS5pc0hvdmVyZWQ9ITEsci5jYWxsKG8saSxlKX0pfSksYyh0LHMsaSxuLl9uYW1lKSxyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2kubHgrIiwiK2kubHkrIikiKX0pfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjcsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4uL2NvbG9yIjo2MDIsIi4uL2RyYXdpbmciOjYyNiwiLi4vbGVnZW5kL2FuY2hvcl91dGlscyI6NjUyLCIuL2NvbnN0YW50cyI6NjY3LCIuL2dldF91cGRhdGVfb2JqZWN0Ijo2NzAsZDM6MTIwfV0sNjcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuPXQucmFuZ2UsYT1uZXcgRGF0ZSh0LnIybChuWzFdKSksbz1lLnN0ZXAscz1lLmNvdW50O3N3aXRjaChlLnN0ZXBtb2RlKXtjYXNlImJhY2t3YXJkIjpyPXQubDJyKCtpLnRpbWVbb10udXRjLm9mZnNldChhLC1zKSk7YnJlYWs7Y2FzZSJ0b2RhdGUiOnZhciBsPWkudGltZVtvXS51dGMub2Zmc2V0KGEsLXMpO3I9dC5sMnIoK2kudGltZVtvXS51dGMuY2VpbChsKSl9cmV0dXJuW3IsblsxXV19dmFyIGk9dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoImFsbCI9PT1lLnN0ZXApaVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgYT1uKHQsZSk7aVtyKyIucmFuZ2VbMF0iXT1hWzBdLGlbcisiLnJhbmdlWzFdIl09YVsxXX1yZXR1cm4gaX19LHtkMzoxMjB9XSw2NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InJhbmdlc2VsZWN0b3IiLHNjaGVtYTp7bGF5b3V0OnsieGF4aXMucmFuZ2VzZWxlY3RvciI6dCgiLi9hdHRyaWJ1dGVzIil9fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjY2NSwiLi9kZWZhdWx0cyI6NjY4LCIuL2RyYXciOjY2OX1dLDY3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDowLG1pbjowfSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi4xNSxtaW46MCxtYXg6MX0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19fSx7Ii4uL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMX1dLDY3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1lW3JdLG89YVtpLm5hbWVdO28mJm8udmlzaWJsZSYmby5hdXRvcmFuZ2UmJmEuX21pbi5sZW5ndGgmJmEuX21heC5sZW5ndGgmJihvLl9pbnB1dC5hdXRvcmFuZ2U9ITAsby5faW5wdXQucmFuZ2U9by5yYW5nZT1uLmdldEF1dG9SYW5nZShhKSl9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2NvbnN0YW50cyI6Njc0fV0sNjc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmFuZ2VzbGlkZXIiLGNvbnRhaW5lckNsYXNzTmFtZToicmFuZ2VzbGlkZXItY29udGFpbmVyIixiZ0NsYXNzTmFtZToicmFuZ2VzbGlkZXItYmciLHJhbmdlUGxvdENsYXNzTmFtZToicmFuZ2VzbGlkZXItcmFuZ2VwbG90IixtYXNrTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbiIsbWFza01heENsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1tYXgiLHNsaWRlQm94Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1zbGlkZWJveCIsZ3JhYmJlck1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmJlci1taW4iLGdyYWJBcmVhTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYXJlYS1taW4iLGhhbmRsZU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItaGFuZGxlLW1pbiIsZ3JhYmJlck1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmJlci1tYXgiLGdyYWJBcmVhTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYXJlYS1tYXgiLGhhbmRsZU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItaGFuZGxlLW1heCIsbWFza0NvbG9yOiJyZ2JhKDAsMCwwLDAuNCkiLHNsaWRlQm94RmlsbDoidHJhbnNwYXJlbnQiLHNsaWRlQm94Q3Vyc29yOiJldy1yZXNpemUiLGdyYWJBcmVhRmlsbDoidHJhbnNwYXJlbnQiLGdyYWJBcmVhQ3Vyc29yOiJjb2wtcmVzaXplIixncmFiQXJlYVdpZHRoOjEwLGhhbmRsZVdpZHRoOjQsaGFuZGxlUmFkaXVzOjEsaGFuZGxlU3Ryb2tlV2lkdGg6MSxleHRyYVBhZDoxNX19LHt9XSw2NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gbi5jb2VyY2UobyxsLGksdCxlKX1pZih0W3JdLnJhbmdlc2xpZGVyKXtuLmlzUGxhaW5PYmplY3QodFtyXS5yYW5nZXNsaWRlcil8fCh0W3JdLnJhbmdlc2xpZGVyPXt9KTt2YXIgbz10W3JdLnJhbmdlc2xpZGVyLHM9ZVtyXSxsPXMucmFuZ2VzbGlkZXI9e307aWYoYSgidmlzaWJsZSIpKXtpZihhKCJiZ2NvbG9yIixlLnBsb3RfYmdjb2xvciksYSgiYm9yZGVyY29sb3IiKSxhKCJib3JkZXJ3aWR0aCIpLGEoInRoaWNrbmVzcyIpLGEoImF1dG9yYW5nZSIsIXMuaXNWYWxpZFJhbmdlKG8ucmFuZ2UpKSxhKCJyYW5nZSIpLGwucmFuZ2Upe3ZhciB1PWwucmFuZ2UsYz1zLnJhbmdlO3VbMF09cy5sMnIoTWF0aC5taW4ocy5yMmwodVswXSkscy5yMmwoY1swXSkpKSx1WzFdPXMubDJyKE1hdGgubWF4KHMucjJsKHVbMV0pLHMucjJsKGNbMV0pKSl9cy5jbGVhblJhbmdlKCJyYW5nZXNsaWRlci5yYW5nZSIpLGwuX2lucHV0PW99fX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6NjcyfV0sNjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dy5saXN0KHtfZnVsbExheW91dDp0fSwieCIsITApLHI9QS5uYW1lLG49W107aWYodC5faGFzKCJnbDJkIikpcmV0dXJuIG47Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07YVtyXSYmYVtyXS52aXNpYmxlJiZuLnB1c2goYSl9cmV0dXJuIG59ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT10LnNlbGVjdCgicmVjdC4iK0Euc2xpZGVCb3hDbGFzc05hbWUpLm5vZGUoKSxvPXQuc2VsZWN0KCJyZWN0LiIrQS5ncmFiQXJlYU1pbkNsYXNzTmFtZSkubm9kZSgpLHM9dC5zZWxlY3QoInJlY3QuIitBLmdyYWJBcmVhTWF4Q2xhc3NOYW1lKS5ub2RlKCk7dC5vbigibW91c2Vkb3duIixmdW5jdGlvbigpe2Z1bmN0aW9uIGwobCl7dmFyIHUsYyx5LGI9K2wuY2xpZW50WC1mO3N3aXRjaChoKXtjYXNlIGk6eT0iZXctcmVzaXplIix1PXArYixjPXYrYjticmVhaztjYXNlIG86eT0iY29sLXJlc2l6ZSIsdT1wK2IsYz12O2JyZWFrO2Nhc2Ugczp5PSJjb2wtcmVzaXplIix1PXAsYz12K2I7YnJlYWs7ZGVmYXVsdDp5PSJldy1yZXNpemUiLHU9ZCxjPWQrYn1pZihjPHUpe3ZhciB4PWM7Yz11LHU9eH1uLl9waXhlbE1pbj11LG4uX3BpeGVsTWF4PWMsayhtLnNlbGVjdChnKSx5KSxhKHQsZSxyLG4pfWZ1bmN0aW9uIHUoKXtnLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbCksZy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix1KSx5LnJlbW92ZUVsZW1lbnQoZyl9dmFyIGM9bS5ldmVudCxoPWMudGFyZ2V0LGY9Yy5jbGllbnRYLGQ9Zi10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHA9bi5kMnAoci5fcmxbMF0pLHY9bi5kMnAoci5fcmxbMV0pLGc9TS5jb3ZlclNsaXAoKTtnLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbCksZy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix1KX0pfWZ1bmN0aW9uIGEodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5sMnIoeS5jb25zdHJhaW4odCxuLl9ybFswXSxuLl9ybFsxXSkpfXZhciBhPWkobi5wMmQobi5fcGl4ZWxNaW4pKSxvPWkobi5wMmQobi5fcGl4ZWxNYXgpKTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7di5yZWxheW91dChlLHIuX25hbWUrIi5yYW5nZSIsW2Esb10pfSl9ZnVuY3Rpb24gbyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB5LmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHkuY29uc3RyYWluKHQsLW8sbi5fd2lkdGgrbyl9dmFyIG89QS5oYW5kbGVXaWR0aC8yLHM9aShuLmQycChyLl9ybFswXSkpLGw9aShuLmQycChyLl9ybFsxXSkpO3Quc2VsZWN0KCJyZWN0LiIrQS5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieCIscykuYXR0cigid2lkdGgiLGwtcyksdC5zZWxlY3QoInJlY3QuIitBLm1hc2tNaW5DbGFzc05hbWUpLmF0dHIoIndpZHRoIixzKSx0LnNlbGVjdCgicmVjdC4iK0EubWFza01heENsYXNzTmFtZSkuYXR0cigieCIsbCkuYXR0cigid2lkdGgiLG4uX3dpZHRoLWwpO3ZhciB1PU1hdGgucm91bmQoYShzLW8pKS0uNSxjPU1hdGgucm91bmQoYShsLW8pKSsuNTt0LnNlbGVjdCgiZy4iK0EuZ3JhYmJlck1pbkNsYXNzTmFtZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLDAuNSkiKSx0LnNlbGVjdCgiZy4iK0EuZ3JhYmJlck1heENsYXNzTmFtZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYysiLDAuNSkiKX1mdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJyZWN0LiIrQS5iZ0NsYXNzTmFtZSkuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKEEuYmdDbGFzc05hbWUsITApLmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSk7dmFyIGE9bi5ib3JkZXJ3aWR0aCUyPT0wP24uYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aC0xLG89LW4uX29mZnNldFNoaWZ0LHM9Yi5jcmlzcFJvdW5kKGUsbi5ib3JkZXJ3aWR0aCk7aS5hdHRyKHt3aWR0aDpuLl93aWR0aCthLGhlaWdodDpuLl9oZWlnaHQrYSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK28rIiwiK28rIikiLGZpbGw6bi5iZ2NvbG9yLHN0cm9rZTpuLmJvcmRlcmNvbG9yLCJzdHJva2Utd2lkdGgiOnN9KX1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPWUuX2Z1bGxMYXlvdXQsYT1pLl90b3BkZWZzLnNlbGVjdEFsbCgiIyIrbi5fY2xpcElkKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsbi5fY2xpcElkKS5hcHBlbmQoInJlY3QiKS5hdHRyKHt4OjAseTowfSksYS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpuLl93aWR0aCxoZWlnaHQ6bi5faGVpZ2h0fSl9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT13LmdldFN1YnBsb3RzKGUsciksYT1lLmNhbGNkYXRhLG89dC5zZWxlY3RBbGwoImcuIitBLnJhbmdlUGxvdENsYXNzTmFtZSkuZGF0YShpLHkuaWRlbnRpdHkpO28uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuIEEucmFuZ2VQbG90Q2xhc3NOYW1lKyIgIit0fSkuY2FsbChiLnNldENsaXBVcmwsbi5fY2xpcElkKSxvLm9yZGVyKCksby5leGl0KCkucmVtb3ZlKCk7dmFyIHM7by5lYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIG89bS5zZWxlY3QodGhpcyksbD0wPT09aSx1PXcuZ2V0RnJvbUlkKGUsdCwieSIpLGg9dS5fbmFtZSxmPXtkYXRhOltdLGxheW91dDp7eGF4aXM6e3R5cGU6ci50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZTpuLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6ci5jYWxlbmRhcn0sd2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodCxtYXJnaW46e3Q6MCxiOjAsbDowLHI6MH19fTtmLmxheW91dFtoXT17dHlwZTp1LnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOnUucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjp1LmNhbGVuZGFyfSxnLnN1cHBseURlZmF1bHRzKGYpO3ZhciBkPWYuX2Z1bGxMYXlvdXQueGF4aXMscD1mLl9mdWxsTGF5b3V0W2hdLHY9e2lkOnQscGxvdGdyb3VwOm8seGF4aXM6ZCx5YXhpczpwfTtsP3M9djoodi5tYWlucGxvdD0ieHkiLHYubWFpbnBsb3RpbmZvPXMpLF8ucmFuZ2VQbG90KGUsdixjKGEsdCkpfSl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJyZWN0LiIrQS5tYXNrTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7aS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5tYXNrTWluQ2xhc3NOYW1lLCEwKS5hdHRyKHt4OjAseTowfSkuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwoeC5maWxsLEEubWFza0NvbG9yKTt2YXIgYT10LnNlbGVjdEFsbCgicmVjdC4iK0EubWFza01heENsYXNzTmFtZSkuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKEEubWFza01heENsYXNzTmFtZSwhMCkuYXR0cigieSIsMCkuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGEuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwoeC5maWxsLEEubWFza0NvbG9yKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2lmKCFlLl9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBpPXQuc2VsZWN0QWxsKCJyZWN0LiIrQS5zbGlkZUJveENsYXNzTmFtZSkuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKEEuc2xpZGVCb3hDbGFzc05hbWUsITApLmF0dHIoInkiLDApLmF0dHIoImN1cnNvciIsQS5zbGlkZUJveEN1cnNvcikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGkuYXR0cih7aGVpZ2h0Om4uX2hlaWdodCxmaWxsOkEuc2xpZGVCb3hGaWxsfSl9fWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9dC5zZWxlY3RBbGwoImcuIitBLmdyYWJiZXJNaW5DbGFzc05hbWUpLmRhdGEoWzBdKTtpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChBLmdyYWJiZXJNaW5DbGFzc05hbWUsITApO3ZhciBhPXQuc2VsZWN0QWxsKCJnLiIrQS5ncmFiYmVyTWF4Q2xhc3NOYW1lKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoQS5ncmFiYmVyTWF4Q2xhc3NOYW1lLCEwKTt2YXIgbz17eDowLHdpZHRoOkEuaGFuZGxlV2lkdGgscng6QS5oYW5kbGVSYWRpdXMsCmZpbGw6eC5iYWNrZ3JvdW5kLHN0cm9rZTp4LmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOkEuaGFuZGxlU3Ryb2tlV2lkdGgsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSxzPXt5Ok1hdGgucm91bmQobi5faGVpZ2h0LzQpLGhlaWdodDpNYXRoLnJvdW5kKG4uX2hlaWdodC8yKX0sbD1pLnNlbGVjdEFsbCgicmVjdC4iK0EuaGFuZGxlTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7bC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5oYW5kbGVNaW5DbGFzc05hbWUsITApLmF0dHIobyksbC5hdHRyKHMpO3ZhciB1PWEuc2VsZWN0QWxsKCJyZWN0LiIrQS5oYW5kbGVNYXhDbGFzc05hbWUpLmRhdGEoWzBdKTtpZih1LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChBLmhhbmRsZU1heENsYXNzTmFtZSwhMCkuYXR0cihvKSx1LmF0dHIocyksIWUuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIGM9e3dpZHRoOkEuZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6QS5ncmFiQXJlYUZpbGwsY3Vyc29yOkEuZ3JhYkFyZWFDdXJzb3J9LGg9aS5zZWxlY3RBbGwoInJlY3QuIitBLmdyYWJBcmVhTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7aC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5ncmFiQXJlYU1pbkNsYXNzTmFtZSwhMCkuYXR0cihjKSxoLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KTt2YXIgZj1hLnNlbGVjdEFsbCgicmVjdC4iK0EuZ3JhYkFyZWFNYXhDbGFzc05hbWUpLmRhdGEoWzBdKTtmLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChBLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLCEwKS5hdHRyKGMpLGYuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2lufHx7fSxyPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTstMSE9PWkuaW5kZXhPZihBLm5hbWUpJiZnLmF1dG9NYXJnaW4odCxpKX19dmFyIG09dCgiZDMiKSx2PXQoIi4uLy4uL3Bsb3RseSIpLGc9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSx5PXQoIi4uLy4uL2xpYiIpLGI9dCgiLi4vZHJhd2luZyIpLHg9dCgiLi4vY29sb3IiKSxfPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLHc9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxNPXQoIi4uL2RyYWdlbGVtZW50Iiksaz10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksQT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiB0Ll9uYW1lfXZhciByPXQuX2Z1bGxMYXlvdXQsYT1uKHIpLGM9ci5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK0EuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKGEsZSk7Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoQS5jb250YWluZXJDbGFzc05hbWUsITApLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksYy5leGl0KCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1tLnNlbGVjdCh0aGlzKSxuPXRbQS5uYW1lXTtlLnJlbW92ZSgpLHIuX3RvcGRlZnMuc2VsZWN0KCIjIituLl9jbGlwSWQpLnJlbW92ZSgpfSksYy5leGl0KCkuc2l6ZSgpJiZwKHQpLDAhPT1hLmxlbmd0aCYmYy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPW0uc2VsZWN0KHRoaXMpLGE9ZVtBLm5hbWVdLGM9clt3LmlkMm5hbWUoZS5hbmNob3IpXSxwPXIubWFyZ2luLHY9ci5fc2l6ZSx5PWUuZG9tYWluLGI9Yy5kb21haW4seD0oZS5fYm91bmRpbmdCb3h8fHt9KS5oZWlnaHR8fDA7YS5faWQ9QS5uYW1lK2UuX2lkLGEuX2NsaXBJZD1hLl9pZCsiLSIrci5fdWlkLGEuX3dpZHRoPXYudyooeVsxXS15WzBdKSxhLl9oZWlnaHQ9KHIuaGVpZ2h0LXAuYi1wLnQpKmEudGhpY2tuZXNzLGEuX29mZnNldFNoaWZ0PU1hdGguZmxvb3IoYS5ib3JkZXJ3aWR0aC8yKTt2YXIgXz1NYXRoLnJvdW5kKHAubCt2LncqeVswXSksTT1NYXRoLnJvdW5kKHAudCt2LmgqKDEtYlswXSkreCthLl9vZmZzZXRTaGlmdCtBLmV4dHJhUGFkKTtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIiwiK00rIikiKTt2YXIgaz1lLnIybChhLnJhbmdlWzBdKSxUPWUucjJsKGEucmFuZ2VbMV0pLFM9VC1rO2EucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L2EuX3dpZHRoKlMra30sYS5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQtaykvUyphLl93aWR0aH0sYS5fcmw9W2ssVF0sbi5jYWxsKHMsdCxlLGEpLmNhbGwobCx0LGUsYSkuY2FsbCh1LHQsZSxhKS5jYWxsKGgsdCxlLGEpLmNhbGwoZix0LGUsYSkuY2FsbChkLHQsZSxhKSxpKG4sdCxlLGEpLG8obix0LGUsYSksZy5hdXRvTWFyZ2luKHQsYS5faWQse3g6eVswXSx5OmJbMF0sbDowLHI6MCx0OjAsYjphLl9oZWlnaHQrcC5iK3gscGFkOkEuZXh0cmFQYWQrMiphLl9vZmZzZXRTaGlmdH0pfSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzksIi4uLy4uL3Bsb3RseSI6NzU5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuL2NvbnN0YW50cyI6Njc0LGQzOjEyMH1dLDY3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzbGlkZXIiLHNjaGVtYTp7bGF5b3V0OnsieGF4aXMucmFuZ2VzbGlkZXIiOnQoIi4vYXR0cmlidXRlcyIpfX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzp0KCIuL2RyYXciKX19LHsiLi9hdHRyaWJ1dGVzIjo2NzIsIi4vY2FsY19hdXRvcmFuZ2UiOjY3MywiLi9kZWZhdWx0cyI6Njc1LCIuL2RyYXciOjY3Nn1dLDY3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6InNoYXBlIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJyZWN0IiwicGF0aCIsImxpbmUiXX0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHgwOnt2YWxUeXBlOiJhbnkifSx4MTp7dmFsVHlwZToiYW55In0seXJlZjpvKHt9LG4ueXJlZix7fSkseTA6e3ZhbFR5cGU6ImFueSJ9LHkxOnt2YWxUeXBlOiJhbnkifSxwYXRoOnt2YWxUeXBlOiJzdHJpbmcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sbGluZTp7Y29sb3I6aS5jb2xvcix3aWR0aDppLndpZHRoLGRhc2g6YX0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjUsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjU4NSwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjo2MjV9XSw2Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPSJjYXRlZ29yeSI9PT10LnR5cGU/dC5yMmM6dC5kMmM7aWYodm9pZCAwIT09ZSlyZXR1cm5bYShlKSxhKHIpXTtpZihuKXt2YXIgbCx1LGMsaCxmLGQ9MS8wLHA9LTEvMCxtPW4ubWF0Y2goby5zZWdtZW50UkUpO2ZvcigiZGF0ZSI9PT10LnR5cGUmJihhPXMuZGVjb2RlRGF0ZShhKSksbD0wO2w8bS5sZW5ndGg7bCsrKXU9bVtsXSx2b2lkIDAhPT0oYz1pW3UuY2hhckF0KDApXS5kcmF3bikmJighKGg9bVtsXS5zdWJzdHIoMSkubWF0Y2goby5wYXJhbVJFKSl8fGgubGVuZ3RoPGN8fChmPWEoaFtjXSksZjxkJiYoZD1mKSxmPnAmJihwPWYpKSk7cmV0dXJuIHA+PWQ/W2QscF06dm9pZCAwfX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1pLmZpbHRlclZpc2libGUoZS5zaGFwZXMpO2lmKHIubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpZm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsLHUsYz1yW3NdLGg9Yy5saW5lLndpZHRoLzI7InBhcGVyIiE9PWMueHJlZiYmKGw9YS5nZXRGcm9tSWQodCxjLnhyZWYpLCh1PW4obCxjLngwLGMueDEsYy5wYXRoLG8ucGFyYW1Jc1gpKSYmYS5leHBhbmQobCx1LHtwcGFkOmh9KSksInBhcGVyIiE9PWMueXJlZiYmKGw9YS5nZXRGcm9tSWQodCxjLnlyZWYpLCh1PW4obCxjLnkwLGMueTEsYy5wYXRoLG8ucGFyYW1Jc1kpKSYmYS5leHBhbmQobCx1LHtwcGFkOmh9KSl9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi9jb25zdGFudHMiOjY4MCwiLi9oZWxwZXJzIjo2ODN9XSw2ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzZWdtZW50UkU6L1tNTEhWUUNUU1pdW15NTEhWUUNUU1pdKi9nLHBhcmFtUkU6L1teXHMsXSsvZyxwYXJhbUlzWDp7TTp7MDohMCxkcmF3bjowfSxMOnswOiEwLGRyYXduOjB9LEg6ezA6ITAsZHJhd246MH0sVjp7fSxROnswOiEwLDI6ITAsZHJhd246Mn0sQzp7MDohMCwyOiEwLDQ6ITAsZHJhd246NH0sVDp7MDohMCxkcmF3bjowfSxTOnswOiEwLDI6ITAsZHJhd246Mn0sWjp7fX0scGFyYW1Jc1k6e006ezE6ITAsZHJhd246MX0sTDp7MTohMCxkcmF3bjoxfSxIOnt9LFY6ezA6ITAsZHJhd246MH0sUTp7MTohMCwzOiEwLGRyYXduOjN9LEM6ezE6ITAsMzohMCw1OiEwLGRyYXduOjV9LFQ6ezE6ITAsZHJhd246MX0sUzp7MTohMCwzOiEwLGRyYXduOjV9LFo6e319LG51bVBhcmFtczp7TToyLEw6MixIOjEsVjoxLFE6NCxDOjYsVDoyLFM6NCxaOjB9fX0se31dLDY4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxpPXQoIi4vc2hhcGVfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuKHQsZSx7bmFtZToic2hhcGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6aX0pfX0seyIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi9zaGFwZV9kZWZhdWx0cyI6Njg1fV0sNjgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9zaGFwZVVwcGVyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fc2hhcGVMb3dlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLGUuX3NoYXBlU3VicGxvdExheWVycy5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKTtmb3IodmFyIHI9MDtyPGUuc2hhcGVzLmxlbmd0aDtyKyspZS5zaGFwZXNbcl0udmlzaWJsZSYmaSh0LHIpfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHIpe3ZhciBuPXsiZGF0YS1pbmRleCI6ZSwiZmlsbC1ydWxlIjoiZXZlbm9kZCIsZDpvKHQsaSl9LHM9aS5saW5lLndpZHRoP2kubGluZS5jb2xvcjoicmdiYSgwLDAsMCwwKSIsbD1yLmFwcGVuZCgicGF0aCIpLmF0dHIobikuc3R5bGUoIm9wYWNpdHkiLGkub3BhY2l0eSkuY2FsbChmLnN0cm9rZSxzKS5jYWxsKGYuZmlsbCxpLmZpbGxjb2xvcikuY2FsbChkLmRhc2hMaW5lLGkubGluZS5kYXNoLGkubGluZS53aWR0aCksdT0oaS54cmVmK2kueXJlZikucmVwbGFjZSgvcGFwZXIvZywiIik7bC5jYWxsKGQuc2V0Q2xpcFVybCx1PyJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrdTpudWxsKSx0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24mJmEodCxsLGksZSl9dC5fZnVsbExheW91dC5fcGFwZXIuc2VsZWN0QWxsKCcuc2hhcGVsYXllciBbZGF0YS1pbmRleD0iJytlKyciXScpLnJlbW92ZSgpO3ZhciBuPSh0LmxheW91dC5zaGFwZXN8fFtdKVtlXSxpPXQuX2Z1bGxMYXlvdXQuc2hhcGVzW2VdO2lmKG4mJiExIT09aS52aXNpYmxlKWlmKCJiZWxvdyIhPT1pLmxheWVyKXIodC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKCJwYXBlciI9PT1pLnhyZWZ8fCJwYXBlciI9PT1pLnlyZWYpcih0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpO2Vsc2V7dmFyIHM9dC5fZnVsbExheW91dC5fcGxvdHNbaS54cmVmK2kueXJlZl07aWYocyl7dmFyIGw9cy5tYWlucGxvdHx8cztyKGwuc2hhcGVsYXllcil9ZWxzZSByKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9fWZ1bmN0aW9uIGEodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt2YXIgcj1aLnJpZ2h0LVoubGVmdCxuPVouYm90dG9tLVoudG9wLGk9dC5jbGllbnRYLVoubGVmdCxhPXQuY2xpZW50WS1aLnRvcCxvPXI+WSYmbj5YJiYhdC5zaGlmdEtleT9wLmdldEN1cnNvcihpL3IsMS1hL24pOiJtb3ZlIjttKGUsbyksRz1vLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gYShlKXtOPWguZ2V0RnJvbUlkKHQsci54cmVmKSxCPWguZ2V0RnJvbUlkKHQsci55cmVmKSxVPWcuZ2V0RGF0YVRvUGl4ZWwodCxOKSxWPWcuZ2V0RGF0YVRvUGl4ZWwodCxCLCEwKSxIPWcuZ2V0UGl4ZWxUb0RhdGEodCxOKSxxPWcuZ2V0UGl4ZWxUb0RhdGEodCxCLCEwKTt2YXIgYT0ic2hhcGVzWyIrbisiXSI7InBhdGgiPT09ci50eXBlPyhGPXIucGF0aCxqPWErIi5wYXRoIik6KHY9VShyLngwKSx5PVYoci55MCksYj1VKHIueDEpLHg9VihyLnkxKSxfPWErIi54MCIsdz1hKyIueTAiLE09YSsiLngxIixrPWErIi55MSIpLHY8Yj8oUz12LHo9YSsiLngwIixPPSJ4MCIsRT1iLEk9YSsiLngxIixSPSJ4MSIpOihTPWIsej1hKyIueDEiLE89IngxIixFPXYsST1hKyIueDAiLFI9IngwIikseTx4PyhBPXksTD1hKyIueTAiLEQ9InkwIixUPXgsQz1hKyIueTEiLFA9InkxIik6KEE9eCxMPWErIi55MSIsRD0ieTEiLFQ9eSxDPWErIi55MCIsUD0ieTAiKSxkPXt9LGkoZSksVy5tb3ZlRm49Im1vdmUiPT09Rz9jOmZ9ZnVuY3Rpb24gcyhyKXttKGUpLHImJnUucmVsYXlvdXQodCxkKX1mdW5jdGlvbiBjKG4saSl7aWYoInBhdGgiPT09ci50eXBlKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gSChVKHQpK24pfTtOJiYiZGF0ZSI9PT1OLnR5cGUmJihhPWcuZW5jb2RlRGF0ZShhKSk7dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIHEoVih0KStpKX07QiYmImRhdGUiPT09Qi50eXBlJiYocz1nLmVuY29kZURhdGUocykpLHIucGF0aD1sKEYsYSxzKSxkW2pdPXIucGF0aH1lbHNlIGRbX109ci54MD1IKHYrbiksZFt3XT1yLnkwPXEoeStpKSxkW01dPXIueDE9SChiK24pLGRba109ci55MT1xKHgraSk7ZS5hdHRyKCJkIixvKHQscikpfWZ1bmN0aW9uIGYobixpKXtpZigicGF0aCI9PT1yLnR5cGUpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBIKFUodCkrbil9O04mJiJkYXRlIj09PU4udHlwZSYmKGE9Zy5lbmNvZGVEYXRlKGEpKTt2YXIgcz1mdW5jdGlvbih0KXtyZXR1cm4gcShWKHQpK2kpfTtCJiYiZGF0ZSI9PT1CLnR5cGUmJihzPWcuZW5jb2RlRGF0ZShzKSksci5wYXRoPWwoRixhLHMpLGRbal09ci5wYXRofWVsc2V7dmFyIHU9fkcuaW5kZXhPZigibiIpP0EraTpBLGM9fkcuaW5kZXhPZigicyIpP1QraTpULGg9fkcuaW5kZXhPZigidyIpP1MrbjpTLGY9fkcuaW5kZXhPZigiZSIpP0UrbjpFO2MtdT5YJiYoZFtMXT1yW0RdPXEodSksZFtDXT1yW1BdPXEoYykpLGYtaD5ZJiYoZFt6XT1yW09dPUgoaCksZFtJXT1yW1JdPUgoZikpfWUuYXR0cigiZCIsbyh0LHIpKX12YXIgZCx2LHksYix4LF8sdyxNLGssQSxULFMsRSxMLEMseixJLEQsUCxPLFIsRixqLE4sQixVLFYsSCxxLEcsWT0xMCxYPTEwLFc9e2VsZW1lbnQ6ZS5ub2RlKCksZ2Q6dCxwcmVwRm46YSxkb25lRm46c30sWj1XLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cC5pbml0KFcpLGUubm9kZSgpLm9ubW91c2Vtb3ZlPWl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saSxhLG89ZS50eXBlLGw9aC5nZXRGcm9tSWQodCxlLnhyZWYpLHU9aC5nZXRGcm9tSWQodCxlLnlyZWYpLGM9dC5fZnVsbExheW91dC5fc2l6ZTtpZihsPyhyPWcuc2hhcGVQb3NpdGlvblRvUmFuZ2UobCksbj1mdW5jdGlvbih0KXtyZXR1cm4gbC5fb2Zmc2V0K2wucjJwKHIodCwhMCkpfSk6bj1mdW5jdGlvbih0KXtyZXR1cm4gYy5sK2Mudyp0fSx1PyhpPWcuc2hhcGVQb3NpdGlvblRvUmFuZ2UodSksYT1mdW5jdGlvbih0KXtyZXR1cm4gdS5fb2Zmc2V0K3UucjJwKGkodCwhMCkpfSk6YT1mdW5jdGlvbih0KXtyZXR1cm4gYy50K2MuaCooMS10KX0sInBhdGgiPT09bylyZXR1cm4gbCYmImRhdGUiPT09bC50eXBlJiYobj1nLmRlY29kZURhdGUobikpLHUmJiJkYXRlIj09PXUudHlwZSYmKGE9Zy5kZWNvZGVEYXRlKGEpKSxzKGUucGF0aCxuLGEpO3ZhciBmPW4oZS54MCksZD1uKGUueDEpLHA9YShlLnkwKSxtPWEoZS55MSk7aWYoImxpbmUiPT09bylyZXR1cm4iTSIrZisiLCIrcCsiTCIrZCsiLCIrbTtpZigicmVjdCI9PT1vKXJldHVybiJNIitmKyIsIitwKyJIIitkKyJWIittKyJIIitmKyJaIjt2YXIgdj0oZitkKS8yLHk9KHArbSkvMixiPU1hdGguYWJzKHYtZikseD1NYXRoLmFicyh5LXApLF89IkEiK2IrIiwiK3gsdz12K2IrIiwiK3k7cmV0dXJuIk0iK3crXysiIDAgMSwxICIrdisiLCIrKHkteCkrXysiIDAgMCwxICIrdysiWiJ9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHQucmVwbGFjZSh2LnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT12LnBhcmFtSXNYW2ldLG89di5wYXJhbUlzWVtpXSxzPXYubnVtUGFyYW1zW2ldLGw9dC5zdWJzdHIoMSkucmVwbGFjZSh2LnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyxuPnMmJih0PSJYIiksdH0pO3JldHVybiBuPnMmJihsPWwucmVwbGFjZSgvW1xzLF0qWC4qLywiIiksYy5sb2coIklnbm9yaW5nIGV4dHJhIHBhcmFtcyBpbiBzZWdtZW50ICIrdCkpLGkrbH0pfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiB0LnJlcGxhY2Uodi5zZWdtZW50UkUsZnVuY3Rpb24odCl7dmFyIG49MCxpPXQuY2hhckF0KDApLGE9di5wYXJhbUlzWFtpXSxvPXYucGFyYW1Jc1lbaV0scz12Lm51bVBhcmFtc1tpXTtyZXR1cm4gaSt0LnN1YnN0cigxKS5yZXBsYWNlKHYucGFyYW1SRSxmdW5jdGlvbih0KXtyZXR1cm4gbj49cz90OihhW25dP3Q9ZSh0KTpvW25dJiYodD1yKHQpKSxuKyssdCl9KX0pfXZhciB1PXQoIi4uLy4uL3Bsb3RseSIpLGM9dCgiLi4vLi4vbGliIiksaD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGY9dCgiLi4vY29sb3IiKSxkPXQoIi4uL2RyYXdpbmciKSxwPXQoIi4uL2RyYWdlbGVtZW50IiksbT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksdj10KCIuL2NvbnN0YW50cyIpLGc9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPXtkcmF3Om4sZHJhd09uZTppfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vbGliL3NldGN1cnNvciI6NzM5LCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuL2NvbnN0YW50cyI6NjgwLCIuL2hlbHBlcnMiOjY4M31dLDY4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QucjJkOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5zaGFwZVBvc2l0aW9uVG9SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKCJfIiwiICIpKSx0KGUpfX0sci5lbmNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKS5yZXBsYWNlKCIgIiwiXyIpfX0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbih0LGUsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpe3ZhciBvPXIuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZSk7aT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fb2Zmc2V0K2UucjJwKG8odCwhMCkpfSwiZGF0ZSI9PT1lLnR5cGUmJihpPXIuZGVjb2RlRGF0ZShpKSl9ZWxzZSBpPW4/ZnVuY3Rpb24odCl7cmV0dXJuIGEudCthLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmwrYS53KnR9O3JldHVybiBpfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBvKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LWEudCkvYS5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1hLmwpL2Eud307cmV0dXJuIGl9fSx7fV0sNjg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJzaGFwZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0seyIuL2F0dHJpYnV0ZXMiOjY3OCwiLi9jYWxjX2F1dG9yYW5nZSI6Njc5LCIuL2RlZmF1bHRzIjo2ODEsIi4vZHJhdyI6NjgyfV0sNjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWlmKHM9c3x8e30sbD1sfHx7fSwhdSgidmlzaWJsZSIsIWwuaXRlbUlzTm90UGxhaW5PYmplY3QpKXJldHVybiBlO3UoImxheWVyIiksdSgib3BhY2l0eSIpLHUoImZpbGxjb2xvciIpLHUoImxpbmUuY29sb3IiKSx1KCJsaW5lLndpZHRoIiksdSgibGluZS5kYXNoIik7Zm9yKHZhciBjPXQucGF0aD8icGF0aCI6InJlY3QiLGg9dSgidHlwZSIsYyksZj1bIngiLCJ5Il0sZD0wO2Q8MjtkKyspe3ZhciBwPWZbZF0sbT17X2Z1bGxMYXlvdXQ6cn0sdj1pLmNvZXJjZVJlZih0LGUsbSxwLCIiLCJwYXBlciIpO2lmKCJwYXRoIiE9PWgpe3ZhciBnLHksYjsicGFwZXIiIT09dj8oZz1pLmdldEZyb21JZChtLHYpLGI9by5yYW5nZVRvU2hhcGVQb3NpdGlvbihnKSx5PW8uc2hhcGVQb3NpdGlvblRvUmFuZ2UoZykpOnk9Yj1uLmlkZW50aXR5O3ZhciB4PXArIjAiLF89cCsiMSIsdz10W3hdLE09dFtfXTt0W3hdPXkodFt4XSwhMCksdFtfXT15KHRbX10sITApLGkuY29lcmNlUG9zaXRpb24oZSxtLHUsdix4LC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLG0sdSx2LF8sLjc1KSxlW3hdPWIoZVt4XSksZVtfXT1iKGVbX10pLHRbeF09dyx0W19dPU19fXJldHVybiJwYXRoIj09PWg/dSgicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pLGV9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2F0dHJpYnV0ZXMiOjY3OCwiLi9oZWxwZXJzIjo2ODN9XSw2ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcCxzPXQoIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksbD10KCIuL2NvbnN0YW50cyIpLHU9e19pc0xpbmtlZFRvQXJyYXk6InN0ZXAiLG1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVzdHlsZSIsInJlbGF5b3V0IiwiYW5pbWF0ZSIsInVwZGF0ZSIsInNraXAiXSxkZmx0OiJyZXN0eWxlIn0sYXJnczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fTtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6InNsaWRlciIsdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYWN0aXZlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sc3RlcHM6dSxsZW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6ImZyYWN0aW9uIn0sbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSxwYWQ6byh7fSxpLHt9LHt0OntkZmx0OjIwfX0pLHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxNTB9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMudHJhbnNpdGlvbi5lYXNpbmcudmFsdWVzLGRmbHQ6ImN1YmljLWluLW91dCJ9fSxjdXJyZW50dmFsdWU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSxvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMH0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmcifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6YSh7fSxuLHt9KX0sZm9udDphKHt9LG4se30pLGFjdGl2ZWJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmwuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmwucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpsLnJhaWxCb3JkZXJDb2xvcn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpsLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmwudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpsLnRpY2tDb2xvcn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6bC5taW5vclRpY2tMZW5ndGh9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3NjAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4LCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6ODI2LCIuL2NvbnN0YW50cyI6Njg3fV0sNjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToic2xpZGVycyIsY29udGFpbmVyQ2xhc3NOYW1lOiJzbGlkZXItY29udGFpbmVyIixncm91cENsYXNzTmFtZToic2xpZGVyLWdyb3VwIixpbnB1dEFyZWFDbGFzczoic2xpZGVyLWlucHV0LWFyZWEiLHJhaWxSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXJlY3QiLHJhaWxUb3VjaFJlY3RDbGFzczoic2xpZGVyLXJhaWwtdG91Y2gtcmVjdCIsZ3JpcFJlY3RDbGFzczoic2xpZGVyLWdyaXAtcmVjdCIsdGlja1JlY3RDbGFzczoic2xpZGVyLXRpY2stcmVjdCIsaW5wdXRQcm94eUNsYXNzOiJzbGlkZXItaW5wdXQtcHJveHkiLGxhYmVsc0NsYXNzOiJzbGlkZXItbGFiZWxzIixsYWJlbEdyb3VwQ2xhc3M6InNsaWRlci1sYWJlbC1ncm91cCIsbGFiZWxDbGFzczoic2xpZGVyLWxhYmVsIixjdXJyZW50VmFsdWVDbGFzczoic2xpZGVyLWN1cnJlbnQtdmFsdWUiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZToic2xpZGVyLWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoic2xpZGVyLSIsbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjQwLGFycm93T2Zmc2V0WDo0LHJhaWxSYWRpdXM6MixyYWlsV2lkdGg6NSxyYWlsQm9yZGVyOjQscmFpbEJvcmRlcldpZHRoOjEscmFpbEJvcmRlckNvbG9yOiIjYmVjOGQ5IixyYWlsQmdDb2xvcjoiI2Y4ZmFmYyIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLGdyaXBCZ0NvbG9yOiIjZjZmOGZhIixncmlwQmdBY3RpdmVDb2xvcjoiI2RiZGRlMCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6IiMzMzMiLHRpY2tPZmZzZXQ6MjUsdGlja0xlbmd0aDo3LG1pbm9yVGlja09mZnNldDoyNSxtaW5vclRpY2tDb2xvcjoiIzMzMyIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLHMscixuKX1uKCJ2aXNpYmxlIixpKHQsZSkubGVuZ3RoPjApJiYobigiYWN0aXZlIiksbigieCIpLG4oInkiKSxhLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxuKCJ4YW5jaG9yIiksbigieWFuY2hvciIpLG4oImxlbiIpLG4oImxlbm1vZGUiKSxuKCJwYWQudCIpLG4oInBhZC5yIiksbigicGFkLmIiKSxuKCJwYWQubCIpLGEuY29lcmNlRm9udChuLCJmb250IixyLmZvbnQpLG4oImN1cnJlbnR2YWx1ZS52aXNpYmxlIikmJihuKCJjdXJyZW50dmFsdWUueGFuY2hvciIpLG4oImN1cnJlbnR2YWx1ZS5wcmVmaXgiKSxuKCJjdXJyZW50dmFsdWUuc3VmZml4IiksbigiY3VycmVudHZhbHVlLm9mZnNldCIpLGEuY29lcmNlRm9udChuLCJjdXJyZW50dmFsdWUuZm9udCIsZS5mb250KSksbigidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG4oInRyYW5zaXRpb24uZWFzaW5nIiksbigiYmdjb2xvciIpLG4oImFjdGl2ZWJnY29sb3IiKSxuKCJib3JkZXJjb2xvciIpLG4oImJvcmRlcndpZHRoIiksbigidGlja2xlbiIpLG4oInRpY2t3aWR0aCIpLG4oInRpY2tjb2xvciIpLG4oIm1pbm9ydGlja2xlbiIpKX1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBhLmNvZXJjZShuLGksYyx0LGUpfWZvcih2YXIgbixpLG89dC5zdGVwc3x8W10scz1lLnN0ZXBzPVtdLGw9MDtsPG8ubGVuZ3RoO2wrKyluPW9bbF0saT17fSxyKCJtZXRob2QiKSxhLmlzUGxhaW5PYmplY3QobikmJigic2tpcCI9PT1pLm1ldGhvZHx8QXJyYXkuaXNBcnJheShuLmFyZ3MpKSYmKHIoImFyZ3MiKSxyKCJsYWJlbCIsInN0ZXAtIitsKSxyKCJ2YWx1ZSIsaS5sYWJlbCkscigiZXhlY3V0ZSIpLHMucHVzaChpKSk7cmV0dXJuIHN9dmFyIGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKSx1PWwubmFtZSxjPXMuc3RlcHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7byh0LGUse25hbWU6dSxoYW5kbGVJdGVtRGVmYXVsdHM6bn0pfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NjEsIi4vYXR0cmlidXRlcyI6Njg2LCIuL2NvbnN0YW50cyI6Njg3fV0sNjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9dFtFLm5hbWVdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2EudmlzaWJsZSYmYS5zdGVwcy5sZW5ndGgmJihhLmdkPWUsbi5wdXNoKGEpKX1yZXR1cm4gbn1mdW5jdGlvbiBpKHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9QS50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrRS5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5zdGVwcyk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoRS5sYWJlbEdyb3VwQ2xhc3MsITApO3ZhciBuPTAsaT0wO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgcj13LnNlbGVjdCh0aGlzKSxhPXUocix7c3RlcDp0fSxlKSxvPWEubm9kZSgpO2lmKG8pe3ZhciBzPUEuYkJveChvKTtpPU1hdGgubWF4KGkscy5oZWlnaHQpLG49TWF0aC5tYXgobixzLndpZHRoKX19KSxyLnJlbW92ZSgpLGUuaW5wdXRBcmVhV2lkdGg9TWF0aC5tYXgoRS5yYWlsV2lkdGgsRS5ncmlwSGVpZ2h0KTt2YXIgYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2UubHg9YS5sK2EudyplLngsZS5seT1hLnQrYS5oKigxLWUueSksImZyYWN0aW9uIj09PWUubGVubW9kZT9lLm91dGVyTGVuZ3RoPU1hdGgucm91bmQoYS53KmUubGVuKTplLm91dGVyTGVuZ3RoPWUubGVuLGUubGVuUGFkPU1hdGgucm91bmQoLjUqRS5ncmlwV2lkdGgpLGUuaW5wdXRBcmVhU3RhcnQ9MCxlLmlucHV0QXJlYUxlbmd0aD1NYXRoLnJvdW5kKGUub3V0ZXJMZW5ndGgtZS5wYWQubC1lLnBhZC5yKTt2YXIgbz1lLmlucHV0QXJlYUxlbmd0aC0yKkUuc3RlcEluc2V0LGw9by8oZS5zdGVwcy5sZW5ndGgtMSksYz1uK0UubGFiZWxQYWRkaW5nO2lmKGUubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoYy9sKSksZS5sYWJlbEhlaWdodD1pLGUuY3VycmVudFZhbHVlTWF4V2lkdGg9MCxlLmN1cnJlbnRWYWx1ZUhlaWdodD0wLGUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCxlLmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIGg9QS50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXMoaCxlLHQubGFiZWwpLG49ci5ub2RlKCkmJkEuYkJveChyLm5vZGUoKSl8fHt3aWR0aDowLGhlaWdodDowfSxpPVQubGluZUNvdW50KHIpO2UuY3VycmVudFZhbHVlTWF4V2lkdGg9TWF0aC5tYXgoZS5jdXJyZW50VmFsdWVNYXhXaWR0aCxNYXRoLmNlaWwobi53aWR0aCkpLGUuY3VycmVudFZhbHVlSGVpZ2h0PU1hdGgubWF4KGUuY3VycmVudFZhbHVlSGVpZ2h0LE1hdGguY2VpbChuLmhlaWdodCkpLGUuY3VycmVudFZhbHVlTWF4TGluZXM9TWF0aC5tYXgoZS5jdXJyZW50VmFsdWVNYXhMaW5lcyxpKX0pLGUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9ZS5jdXJyZW50VmFsdWVIZWlnaHQrZS5jdXJyZW50dmFsdWUub2Zmc2V0LGgucmVtb3ZlKCl9ZS5oZWlnaHQ9ZS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCtFLnRpY2tPZmZzZXQrZS50aWNrbGVuK0UubGFiZWxPZmZzZXQrZS5sYWJlbEhlaWdodCtlLnBhZC50K2UucGFkLmI7dmFyIGY9ImxlZnQiO1MuaXNSaWdodEFuY2hvcihlKSYmKGUubHgtPWUub3V0ZXJMZW5ndGgsZj0icmlnaHQiKSxTLmlzQ2VudGVyQW5jaG9yKGUpJiYoZS5seC09ZS5vdXRlckxlbmd0aC8yLGY9ImNlbnRlciIpO3ZhciBkPSJ0b3AiO1MuaXNCb3R0b21BbmNob3IoZSkmJihlLmx5LT1lLmhlaWdodCxkPSJib3R0b20iKSxTLmlzTWlkZGxlQW5jaG9yKGUpJiYoZS5seS09ZS5oZWlnaHQvMixkPSJtaWRkbGUiKSxlLm91dGVyTGVuZ3RoPU1hdGguY2VpbChlLm91dGVyTGVuZ3RoKSxlLmhlaWdodD1NYXRoLmNlaWwoZS5oZWlnaHQpLGUubHg9TWF0aC5yb3VuZChlLmx4KSxlLmx5PU1hdGgucm91bmQoZS5seSksTS5hdXRvTWFyZ2luKHQsRS5hdXRvTWFyZ2luSWRSb290K2UuX2luZGV4LHt4OmUueCx5OmUueSxsOmUub3V0ZXJMZW5ndGgqKHtyaWdodDoxLGNlbnRlcjouNX1bZl18fDApLHI6ZS5vdXRlckxlbmd0aCooe2xlZnQ6MSxjZW50ZXI6LjV9W2ZdfHwwKSxiOmUuaGVpZ2h0Kih7dG9wOjEsbWlkZGxlOi41fVtkXXx8MCksdDplLmhlaWdodCooe2JvdHRvbToxLG1pZGRsZTouNX1bZF18fDApfSl9ZnVuY3Rpb24gbyh0LGUscil7ci5hY3RpdmU+PXIuc3RlcHMubGVuZ3RoJiYoci5hY3RpdmU9MCksZS5jYWxsKHMscikuY2FsbCh4LHIpLmNhbGwoYyxyKS5jYWxsKHAscikuY2FsbChiLHQscikuY2FsbChsLHQsciksQS5zZXRUcmFuc2xhdGUoZSxyLmx4K3IucGFkLmwsci5seStyLnBhZC50KSxlLmNhbGwodixyLHIuYWN0aXZlLyhyLnN0ZXBzLmxlbmd0aC0xKSwhMSksZS5jYWxsKHMscil9ZnVuY3Rpb24gcyh0LGUscil7aWYoZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4saSxhPXQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO3N3aXRjaChlLmN1cnJlbnR2YWx1ZS54YW5jaG9yKXtjYXNlInJpZ2h0IjpuPWUuaW5wdXRBcmVhTGVuZ3RoLUUuY3VycmVudFZhbHVlSW5zZXQtZS5jdXJyZW50VmFsdWVNYXhXaWR0aCxpPSJsZWZ0IjticmVhaztjYXNlImNlbnRlciI6bj0uNSplLmlucHV0QXJlYUxlbmd0aCxpPSJtaWRkbGUiO2JyZWFrO2RlZmF1bHQ6bj1FLmN1cnJlbnRWYWx1ZUluc2V0LGk9ImxlZnQifWEuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKEUubGFiZWxDbGFzcywhMCkuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoeyJ0ZXh0LWFuY2hvciI6aSwiZGF0YS1ub3RleCI6MX0pO3ZhciBvPWUuY3VycmVudHZhbHVlLnByZWZpeD9lLmN1cnJlbnR2YWx1ZS5wcmVmaXg6IiI7aWYoInN0cmluZyI9PXR5cGVvZiByKW8rPXI7ZWxzZXtvKz1lLnN0ZXBzW2UuYWN0aXZlXS5sYWJlbH1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgmJihvKz1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgpLGEuY2FsbChBLmZvbnQsZS5jdXJyZW50dmFsdWUuZm9udCkudGV4dChvKS5jYWxsKFQuY29udmVydFRvVHNwYW5zLGUuZ2QpO3ZhciBzPVQubGluZUNvdW50KGEpLGw9KGUuY3VycmVudFZhbHVlTWF4TGluZXMrMS1zKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqTDtyZXR1cm4gVC5wb3NpdGlvblRleHQoYSxuLGwpLGF9fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKCJyZWN0LiIrRS5ncmlwUmVjdENsYXNzKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoRS5ncmlwUmVjdENsYXNzLCEwKS5jYWxsKGQsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLG4uYXR0cih7d2lkdGg6RS5ncmlwV2lkdGgsaGVpZ2h0OkUuZ3JpcEhlaWdodCxyeDpFLmdyaXBSYWRpdXMscnk6RS5ncmlwUmFkaXVzfSkuY2FsbChrLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5jYWxsKGsuZmlsbCxyLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG49dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFswXSk7cmV0dXJuIG4uZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKEUubGFiZWxDbGFzcywhMCkuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KSxuLmNhbGwoQS5mb250LHIuZm9udCkudGV4dChlLnN0ZXAubGFiZWwpLmNhbGwoVC5jb252ZXJ0VG9Uc3BhbnMsci5nZCksbn1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoImcuIitFLmxhYmVsc0NsYXNzKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoRS5sYWJlbHNDbGFzcywhMCk7dmFyIG49ci5zZWxlY3RBbGwoImcuIitFLmxhYmVsR3JvdXBDbGFzcykuZGF0YShlLmxhYmVsU3RlcHMpO24uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEUubGFiZWxHcm91cENsYXNzLCEwKSxuLmV4aXQoKS5yZW1vdmUoKSxuLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dy5zZWxlY3QodGhpcyk7ci5jYWxsKHUsdCxlKSxBLnNldFRyYW5zbGF0ZShyLGcoZSx0LmZyYWN0aW9uKSxFLnRpY2tPZmZzZXQrZS50aWNrbGVuK2UuZm9udC5zaXplKkwrRS5sYWJlbE9mZnNldCtlLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pfWZ1bmN0aW9uIGgodCxlLHIsbixpKXt2YXIgYT1NYXRoLnJvdW5kKG4qKHIuc3RlcHMubGVuZ3RoLTEpKTthIT09ci5hY3RpdmUmJmYodCxlLHIsYSwhMCxpKX1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbz1yLmFjdGl2ZTtyLl9pbnB1dC5hY3RpdmU9ci5hY3RpdmU9bjt2YXIgbD1yLnN0ZXBzW3IuYWN0aXZlXTtlLmNhbGwodixyLHIuYWN0aXZlLyhyLnN0ZXBzLmxlbmd0aC0xKSxhKSxlLmNhbGwocyxyKSx0LmVtaXQoInBsb3RseV9zbGlkZXJjaGFuZ2UiLHtzbGlkZXI6cixzdGVwOnIuc3RlcHNbci5hY3RpdmVdLGludGVyYWN0aW9uOmkscHJldmlvdXNBY3RpdmU6b30pLGwmJmwubWV0aG9kJiZpJiYoZS5fbmV4dE1ldGhvZD8oZS5fbmV4dE1ldGhvZC5zdGVwPWwsZS5fbmV4dE1ldGhvZC5kb0NhbGxiYWNrPWksZS5fbmV4dE1ldGhvZC5kb1RyYW5zaXRpb249YSk6KGUuX25leHRNZXRob2Q9e3N0ZXA6bCxkb0NhbGxiYWNrOmksZG9UcmFuc2l0aW9uOmF9LGUuX25leHRNZXRob2RSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmTS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpfWZ1bmN0aW9uIGQodCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gci5kYXRhKClbMF19dmFyIGk9ci5ub2RlKCksYT13LnNlbGVjdChlKTt0Lm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7dmFyIHQ9bigpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbz1yLnNlbGVjdCgiLiIrRS5ncmlwUmVjdENsYXNzKTt3LmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHcuZXZlbnQucHJldmVudERlZmF1bHQoKSxvLmNhbGwoay5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIHM9eSh0LHcubW91c2UoaSlbMF0pO2goZSxyLHQscywhMCksdC5fZHJhZ2dpbmc9ITAsYS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe3ZhciB0PW4oKSxhPXkodCx3Lm1vdXNlKGkpWzBdKTtoKGUscix0LGEsITEpfSksYS5vbigibW91c2V1cCIsZnVuY3Rpb24oKXt2YXIgdD1uKCk7dC5fZHJhZ2dpbmc9ITEsby5jYWxsKGsuZmlsbCx0LmJnY29sb3IpLGEub24oIm1vdXNldXAiLG51bGwpLGEub24oIm1vdXNlbW92ZSIsbnVsbCksZS5lbWl0KCJwbG90bHlfc2xpZGVyZW5kIix7c2xpZGVyOnQsc3RlcDp0LnN0ZXBzW3QuYWN0aXZlXX0pfSl9KX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIitFLnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5zdGVwcyk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoRS50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOmUudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIG49ciVlLmxhYmVsU3RyaWRlPT0wLGk9dy5zZWxlY3QodGhpcyk7aS5hdHRyKHtoZWlnaHQ6bj9lLnRpY2tsZW46ZS5taW5vcnRpY2tsZW59KS5jYWxsKGsuZmlsbCxlLnRpY2tjb2xvciksQS5zZXRUcmFuc2xhdGUoaSxnKGUsci8oZS5zdGVwcy5sZW5ndGgtMSkpLS41KmUudGlja3dpZHRoLChuP0UudGlja09mZnNldDpFLm1pbm9yVGlja09mZnNldCkrZS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KX1mdW5jdGlvbiBtKHQpe3QubGFiZWxTdGVwcz1bXTtmb3IodmFyIGU9dC5zdGVwcy5sZW5ndGgscj0wO3I8ZTtyKz10LmxhYmVsU3RyaWRlKXQubGFiZWxTdGVwcy5wdXNoKHtmcmFjdGlvbjpyLyhlLTEpLHN0ZXA6dC5zdGVwc1tyXX0pfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoInJlY3QuIitFLmdyaXBSZWN0Q2xhc3MpLGE9ZyhlLHIpO2lmKCFlLl9pbnZva2luZ0NvbW1hbmQpe3ZhciBvPWk7biYmZS50cmFuc2l0aW9uLmR1cmF0aW9uPjAmJihvPW8udHJhbnNpdGlvbigpLmR1cmF0aW9uKGUudHJhbnNpdGlvbi5kdXJhdGlvbikuZWFzZShlLnRyYW5zaXRpb24uZWFzaW5nKSksby5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYS0uNSpFLmdyaXBXaWR0aCkrIiwiK2UuY3VycmVudFZhbHVlVG90YWxIZWlnaHQrIikiKX19ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0LmlucHV0QXJlYVN0YXJ0K0Uuc3RlcEluc2V0Kyh0LmlucHV0QXJlYUxlbmd0aC0yKkUuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgwLChlLUUuc3RlcEluc2V0LXQuaW5wdXRBcmVhU3RhcnQpLyh0LmlucHV0QXJlYUxlbmd0aC0yKkUuc3RlcEluc2V0LTIqdC5pbnB1dEFyZWFTdGFydCkpKX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgicmVjdC4iK0UucmFpbFRvdWNoUmVjdENsYXNzKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoRS5yYWlsVG91Y2hSZWN0Q2xhc3MsITApLmNhbGwoZCxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksbi5hdHRyKHt3aWR0aDpyLmlucHV0QXJlYUxlbmd0aCxoZWlnaHQ6TWF0aC5tYXgoci5pbnB1dEFyZWFXaWR0aCxFLnRpY2tPZmZzZXQrci50aWNrbGVuK3IubGFiZWxIZWlnaHQpfSkuY2FsbChrLmZpbGwsci5iZ2NvbG9yKS5hdHRyKCJvcGFjaXR5IiwwKSxBLnNldFRyYW5zbGF0ZShuLDAsci5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9ZnVuY3Rpb24geCh0LGUpe3ZhciByPXQuc2VsZWN0QWxsKCJyZWN0LiIrRS5yYWlsUmVjdENsYXNzKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoRS5yYWlsUmVjdENsYXNzLCEwKTt2YXIgbj1lLmlucHV0QXJlYUxlbmd0aC0yKkUucmFpbEluc2V0O3IuYXR0cih7d2lkdGg6bixoZWlnaHQ6RS5yYWlsV2lkdGgscng6RS5yYWlsUmFkaXVzLHJ5OkUucmFpbFJhZGl1cywic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KS5jYWxsKGsuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoay5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKSxBLnNldFRyYW5zbGF0ZShyLEUucmFpbEluc2V0LC41KihlLmlucHV0QXJlYVdpZHRoLUUucmFpbFdpZHRoKStlLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1mdW5jdGlvbiBfKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2lufHx7fSxyPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTstMSE9PWkuaW5kZXhPZihFLmF1dG9NYXJnaW5JZFJvb3QpJiZNLmF1dG9NYXJnaW4odCxpKX19dmFyIHc9dCgiZDMiKSxNPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaz10KCIuLi9jb2xvciIpLEE9dCgiLi4vZHJhd2luZyIpLFQ9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksUz10KCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIiksRT10KCIuL2NvbnN0YW50cyIpLEw9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPW4oZSx0KSxzPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitFLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYocy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoRS5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxzLmV4aXQoKS5yZW1vdmUoKSxzLmV4aXQoKS5zaXplKCkmJl8odCksMCE9PXIubGVuZ3RoKXt2YXIgbD1zLnNlbGVjdEFsbCgiZy4iK0UuZ3JvdXBDbGFzc05hbWUpLmRhdGEocixpKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChFLmdyb3VwQ2xhc3NOYW1lLCEwKSxsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKGUpe3cuc2VsZWN0KHRoaXMpLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSxkZWxldGUgZS5fY29tbWFuZE9ic2VydmVyLE0uYXV0b01hcmdpbih0LEUuYXV0b01hcmdpbklkUm9vdCtlLl9pbmRleCl9KTtmb3IodmFyIHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGM9clt1XTthKHQsYyl9bC5lYWNoKGZ1bmN0aW9uKGUpe2lmKCEoZS5zdGVwcy5sZW5ndGg8Mikpe3ZhciByPXcuc2VsZWN0KHRoaXMpO20oZSksTS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuc3RlcHMsZnVuY3Rpb24oZSl7dmFyIG49ci5kYXRhKClbMF07bi5hY3RpdmUhPT1lLmluZGV4JiYobi5fZHJhZ2dpbmd8fGYodCxyLG4sZS5pbmRleCwhMSwhMCkpfSksbyh0LHcuc2VsZWN0KHRoaXMpLGUpfX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vY29sb3IiOjYwMiwiLi4vZHJhd2luZyI6NjI2LCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIjo2NTIsIi4vY29uc3RhbnRzIjo2ODcsZDM6MTIwfV0sNjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6Njg2LCIuL2NvbnN0YW50cyI6Njg3LCIuL2RlZmF1bHRzIjo2ODgsIi4vZHJhdyI6Njg5fV0sNjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdGx5Iiksbz10KCIuLi8uLi9wbG90cy9wbG90cyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi9kcmF3aW5nIiksdT10KCIuLi9jb2xvciIpLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksZj0vQ2xpY2sgdG8gZW50ZXIgLisgdGl0bGUvOyhlLmV4cG9ydHM9e30pLmRyYXc9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGQodCl7cy5zeW5jT3JBc3luYyhbcCxtXSx0KX1mdW5jdGlvbiBwKGUpe3JldHVybiBlLmF0dHIoInRyYW5zZm9ybSIsTT8icm90YXRlKCIrW00ucm90YXRlLHcueCx3LnldKyIpIHRyYW5zbGF0ZSgwLCAiK00ub2Zmc2V0KyIpIjpudWxsKSxlLnN0eWxlKHsiZm9udC1mYW1pbHkiOlQsImZvbnQtc2l6ZSI6bi5yb3VuZChTLDIpKyJweCIsZmlsbDp1LnJnYihFKSxvcGFjaXR5OkwqdS5vcGFjaXR5KEUpLCJmb250LXdlaWdodCI6by5mb250V2VpZ2h0fSkuYXR0cih3KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHQpLG8ucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBtKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKF8mJl8uc2VsZWN0aW9uJiZfLnNpZGUmJnope2UuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcj0wLGE9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn1bXy5zaWRlXSxvPS0xIT09WyJsZWZ0IiwidG9wIl0uaW5kZXhPZihfLnNpZGUpPy0xOjEsdT1pKF8ucGFkKT9fLnBhZDoyLGM9bC5iQm94KGUubm9kZSgpKSxoPXtsZWZ0OjAsdG9wOjAscmlnaHQ6QS53aWR0aCxib3R0b206QS5oZWlnaHR9LGY9Xy5tYXhTaGlmdHx8KGhbXy5zaWRlXS1jW18uc2lkZV0pKigibGVmdCI9PT1fLnNpZGV8fCJ0b3AiPT09Xy5zaWRlPy0xOjEpO2lmKGY8MClyPWY7ZWxzZXt2YXIgZD1fLm9mZnNldExlZnR8fDAscD1fLm9mZnNldFRvcHx8MDtjLmxlZnQtPWQsYy5yaWdodC09ZCxjLnRvcC09cCxjLmJvdHRvbS09cCxfLnNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bC5iQm94KHRoaXMpO3MuYkJveEludGVyc2VjdChjLHQsdSkmJihyPU1hdGgubWF4KHIsbyoodFtfLnNpZGVdLWNbYV0pK3UpKX0pLHI9TWF0aC5taW4oZixyKX1pZihyPjB8fGY8MCl7dmFyIG09e2xlZnQ6Wy1yLDBdLHJpZ2h0OltyLDBdLHRvcDpbMCwtcl0sYm90dG9tOlswLHJdfVtfLnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbSsiKSIpfX19dmFyIHYsZz1yLnByb3BDb250YWluZXIseT1yLnByb3BOYW1lLGI9ci50cmFjZUluZGV4LHg9ci5kZmx0TmFtZSxfPXIuYXZvaWR8fHt9LHc9ci5hdHRyaWJ1dGVzLE09ci50cmFuc2Zvcm0saz1yLmNvbnRhaW5lckdyb3VwLEE9dC5fZnVsbExheW91dCxUPWcudGl0bGVmb250LmZhbWlseSxTPWcudGl0bGVmb250LnNpemUsRT1nLnRpdGxlZm9udC5jb2xvcixMPTEsQz0hMSx6PWcudGl0bGUudHJpbSgpOyJ0aXRsZSI9PT15P3Y9InRpdGxlVGV4dCI6LTEhPT15LmluZGV4T2YoImF4aXMiKT92PSJheGlzVGl0bGVUZXh0Ijp5LmluZGV4T2YoITApJiYodj0iY29sb3JiYXJUaXRsZVRleHQiKTt2YXIgST10Ll9jb250ZXh0LmVkaXRzW3ZdOyIiPT09eiYmKEw9MCksei5tYXRjaChmKSYmKEw9LjIsQz0hMCxJfHwoej0iIikpO3ZhciBEPXp8fEk7a3x8KGs9QS5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitlKS5kYXRhKFswXSksay5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImctIitlLCEwKSk7dmFyIFA9ay5zZWxlY3RBbGwoInRleHQiKS5kYXRhKEQ/WzBdOltdKTtpZihQLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IiksUC50ZXh0KHopLmF0dHIoImNsYXNzIixlKSxQLmV4aXQoKS5yZW1vdmUoKSxEKXtQLmNhbGwoZCk7dmFyIE89IkNsaWNrIHRvIGVudGVyICIreCsiIHRpdGxlIjtJJiYoej9QLm9uKCIub3BhY2l0eSIsbnVsbCk6ZnVuY3Rpb24oKXtMPTAsQz0hMCx6PU8sUC50ZXh0KHopLm9uKCJtb3VzZW92ZXIub3BhY2l0eSIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oaC5TSE9XX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQub3BhY2l0eSIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oaC5ISURFX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMCl9KX0oKSxQLmNhbGwoYy5tYWtlRWRpdGFibGUse2dkOnR9KS5vbigiZWRpdCIsZnVuY3Rpb24oZSl7dm9pZCAwIT09Yj9hLnJlc3R5bGUodCx5LGUsYik6YS5yZWxheW91dCh0LHksZSl9KS5vbigiY2FuY2VsIixmdW5jdGlvbigpe3RoaXMudGV4dCh0aGlzLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSkuY2FsbChkKX0pLm9uKCJpbnB1dCIsZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fCIgIikuY2FsbChjLnBvc2l0aW9uVGV4dCx3Lngsdy55KX0pKSxQLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIixDKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcwMywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vY29sb3IiOjYwMiwiLi4vZHJhd2luZyI6NjI2LGQzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDY5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxzPXtfaXNMaW5rZWRUb0FycmF5OiJidXR0b24iLG1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVzdHlsZSIsInJlbGF5b3V0IiwiYW5pbWF0ZSIsInVwZGF0ZSIsInNraXAiXSxkZmx0OiJyZXN0eWxlIn0sYXJnczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX07ZS5leHBvcnRzPXtfaXNMaW5rZWRUb0FycmF5OiJ1cGRhdGVtZW51IixfYXJyYXlBdHRyUmVnZXhwczpbL151cGRhdGVtZW51c1xbKDB8WzEtOV1bMC05XSspXF1cLmJ1dHRvbnMvXSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZHJvcGRvd24iLCJidXR0b25zIl0sZGZsdDoiZHJvcGRvd24ifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJyaWdodCIsInVwIiwiZG93biJdLGRmbHQ6ImRvd24ifSxhY3RpdmU6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjB9LHNob3dhY3RpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGJ1dHRvbnM6cyx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0Oi0uMDV9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJyaWdodCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MX0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHBhZDphKHt9LG8se30pLGZvbnQ6YSh7fSxuLHt9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3ODgsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4MjYsIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMX1dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sNjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLHMscixuKX1uKCJ2aXNpYmxlIixpKHQsZSkubGVuZ3RoPjApJiYobigiYWN0aXZlIiksbigiZGlyZWN0aW9uIiksbigidHlwZSIpLG4oInNob3dhY3RpdmUiKSxuKCJ4IiksbigieSIpLGEubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG4oInhhbmNob3IiKSxuKCJ5YW5jaG9yIiksbigicGFkLnQiKSxuKCJwYWQuciIpLG4oInBhZC5iIiksbigicGFkLmwiKSxhLmNvZXJjZUZvbnQobiwiZm9udCIsci5mb250KSxuKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG4oImJvcmRlcmNvbG9yIiksbigiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gYS5jb2VyY2UobixpLGMsdCxlKX1mb3IodmFyIG4saSxvPXQuYnV0dG9uc3x8W10scz1lLmJ1dHRvbnM9W10sbD0wO2w8by5sZW5ndGg7bCsrKW49b1tsXSxpPXt9LHIoIm1ldGhvZCIpLGEuaXNQbGFpbk9iamVjdChuKSYmKCJza2lwIj09PWkubWV0aG9kfHxBcnJheS5pc0FycmF5KG4uYXJncykpJiYocigiYXJncyIpLHIoImxhYmVsIikscigiZXhlY3V0ZSIpLGkuX2luZGV4PWwscy5wdXNoKGkpKTtyZXR1cm4gc312YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2NvbnN0YW50cyIpLHU9bC5uYW1lLGM9cy5idXR0b25zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe28odCxlLHtuYW1lOnUsaGFuZGxlSXRlbURlZmF1bHRzOm59KX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzYxLCIuL2F0dHJpYnV0ZXMiOjY5MiwiLi9jb25zdGFudHMiOjY5M31dLDY5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT10W0wubmFtZV0scj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gYSh0KXtyZXR1cm4tMT09K3QuYXR0cihMLm1lbnVJbmRleEF0dHJOYW1lKX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuK3QuYXR0cihMLm1lbnVJbmRleEF0dHJOYW1lKT09PWUuX2luZGV4fWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyxzKXtlLl9pbnB1dC5hY3RpdmU9ZS5hY3RpdmU9bywiYnV0dG9ucyI9PT1lLnR5cGU/dSh0LG4sbnVsbCxudWxsLGUpOiJkcm9wZG93biI9PT1lLnR5cGUmJihpLmF0dHIoTC5tZW51SW5kZXhBdHRyTmFtZSwiLTEiKSxsKHQsbixpLGEsZSksc3x8dSh0LG4saSxhLGUpKX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIGE9ZS5zZWxlY3RBbGwoImcuIitMLmhlYWRlckNsYXNzTmFtZSkuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEwuaGVhZGVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgcz1pLmFjdGl2ZSxsPWkuYnV0dG9uc1tzXXx8TC5ibGFua0hlYWRlck9wdHMsYz17eTppLnBhZC50LHlQYWQ6MCx4OmkucGFkLmwseFBhZDowLGluZGV4OjB9LGg9e3dpZHRoOmkuaGVhZGVyV2lkdGgsaGVpZ2h0OmkuaGVhZGVySGVpZ2h0fTthLmNhbGwoZixpLGwsdCkuY2FsbChiLGksYyxoKQo7dmFyIGQ9ZS5zZWxlY3RBbGwoInRleHQuIitMLmhlYWRlckFycm93Q2xhc3NOYW1lKS5kYXRhKFswXSk7ZC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoTC5oZWFkZXJBcnJvd0NsYXNzTmFtZSwhMCkuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuY2FsbChBLmZvbnQsaS5mb250KS50ZXh0KEwuYXJyb3dTeW1ib2xbaS5kaXJlY3Rpb25dKSxkLmF0dHIoe3g6aS5oZWFkZXJXaWR0aC1MLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6aS5oZWFkZXJIZWlnaHQvMitMLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKCJjbGljayIsZnVuY3Rpb24oKXtyLmNhbGwoeCksci5hdHRyKEwubWVudUluZGV4QXR0ck5hbWUsbyhyLGkpPy0xOlN0cmluZyhpLl9pbmRleCkpLHUodCxlLHIsbixpKX0pLGEub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXthLmNhbGwodil9KSxhLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLmNhbGwoZyxpKX0pLEEuc2V0VHJhbnNsYXRlKGUsaS5seCxpLmx5KX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7cnx8KHI9ZSxyLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikpO3ZhciBvPWEocikmJiJidXR0b25zIiE9PWkudHlwZT9bXTppLmJ1dHRvbnMsbD0iZHJvcGRvd24iPT09aS50eXBlP0wuZHJvcGRvd25CdXR0b25DbGFzc05hbWU6TC5idXR0b25DbGFzc05hbWUsdT1yLnNlbGVjdEFsbCgiZy4iK2wpLmRhdGEobyksZD11LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLCEwKSxwPXUuZXhpdCgpOyJkcm9wZG93biI9PT1pLnR5cGU/KGQuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKSxwLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLnJlbW92ZSgpKTpwLnJlbW92ZSgpO3ZhciB5PTAseD0wLF89LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoaS5kaXJlY3Rpb24pOyJkcm9wZG93biI9PT1pLnR5cGUmJihfP3g9aS5oZWFkZXJIZWlnaHQrTC5nYXBCdXR0b25IZWFkZXI6eT1pLmhlYWRlcldpZHRoK0wuZ2FwQnV0dG9uSGVhZGVyKSwiZHJvcGRvd24iPT09aS50eXBlJiYidXAiPT09aS5kaXJlY3Rpb24mJih4PS1MLmdhcEJ1dHRvbkhlYWRlcitMLmdhcEJ1dHRvbi1pLm9wZW5IZWlnaHQpLCJkcm9wZG93biI9PT1pLnR5cGUmJiJsZWZ0Ij09PWkuZGlyZWN0aW9uJiYoeT0tTC5nYXBCdXR0b25IZWFkZXIrTC5nYXBCdXR0b24taS5vcGVuV2lkdGgpO3ZhciBrPXt4OmkubHgreStpLnBhZC5sLHk6aS5seSt4K2kucGFkLnQseVBhZDpMLmdhcEJ1dHRvbix4UGFkOkwuZ2FwQnV0dG9uLGluZGV4OjB9LEE9e2w6ay54K2kuYm9yZGVyd2lkdGgsdDprLnkraS5ib3JkZXJ3aWR0aH07dS5lYWNoKGZ1bmN0aW9uKGEsbyl7dmFyIGw9dy5zZWxlY3QodGhpcyk7bC5jYWxsKGYsaSxhLHQpLmNhbGwoYixpLGspLGwub24oImNsaWNrIixmdW5jdGlvbigpe3cuZXZlbnQuZGVmYXVsdFByZXZlbnRlZHx8KHModCxpLGEsZSxyLG4sbyksYS5leGVjdXRlJiZNLmV4ZWN1dGVBUElDb21tYW5kKHQsYS5tZXRob2QsYS5hcmdzKSx0LmVtaXQoInBsb3RseV9idXR0b25jbGlja2VkIix7bWVudTppLGJ1dHRvbjphLGFjdGl2ZTppLmFjdGl2ZX0pKX0pLGwub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtsLmNhbGwodil9KSxsLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtsLmNhbGwoZyxpKSx1LmNhbGwobSxpKX0pfSksdS5jYWxsKG0saSksXz8oQS53PU1hdGgubWF4KGkub3BlbldpZHRoLGkuaGVhZGVyV2lkdGgpLEEuaD1rLnktQS50KTooQS53PWsueC1BLmwsQS5oPU1hdGgubWF4KGkub3BlbkhlaWdodCxpLmhlYWRlckhlaWdodCkpLEEuZGlyZWN0aW9uPWkuZGlyZWN0aW9uLG4mJih1LnNpemUoKT9jKHQsZSxyLG4saSxBKTpoKG4pKX1mdW5jdGlvbiBjKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsdT1pLmRpcmVjdGlvbixjPSJ1cCI9PT11fHwiZG93biI9PT11LGg9aS5hY3RpdmU7aWYoYylmb3Iocz0wLGw9MDtsPGg7bCsrKXMrPWkuaGVpZ2h0c1tsXStMLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAsbD0wO2w8aDtsKyspbys9aS53aWR0aHNbbF0rTC5nYXBCdXR0b247bi5lbmFibGUoYSxvLHMpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIiksbi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX1mdW5jdGlvbiBoKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSksciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSl9ZnVuY3Rpb24gZih0LGUscixuKXt0LmNhbGwoZCxlKS5jYWxsKHAsZSxyLG4pfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChMLml0ZW1SZWN0Q2xhc3NOYW1lLCEwKS5hdHRyKHtyeDpMLnJ4LHJ5OkwucnksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5jYWxsKGsuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoay5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBwKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKEwuaXRlbVRleHRDbGFzc05hbWUsITApLmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5hdHRyKHsidGV4dC1hbmNob3IiOiJzdGFydCIsImRhdGEtbm90ZXgiOjF9KSxpLmNhbGwoQS5mb250LGUuZm9udCkudGV4dChyLmxhYmVsKS5jYWxsKFQuY29udmVydFRvVHNwYW5zLG4pfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj1lLmFjdGl2ZTt0LmVhY2goZnVuY3Rpb24odCxuKXt2YXIgaT13LnNlbGVjdCh0aGlzKTtuPT09ciYmZS5zaG93YWN0aXZlJiZpLnNlbGVjdCgicmVjdC4iK0wuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoay5maWxsLEwuYWN0aXZlQ29sb3IpfSl9ZnVuY3Rpb24gdih0KXt0LnNlbGVjdCgicmVjdC4iK0wuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoay5maWxsLEwuaG92ZXJDb2xvcil9ZnVuY3Rpb24gZyh0LGUpe3Quc2VsZWN0KCJyZWN0LiIrTC5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChrLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiB5KHQsZSl7ZS53aWR0aDE9MCxlLmhlaWdodDE9MCxlLmhlaWdodHM9W10sZS53aWR0aHM9W10sZS50b3RhbFdpZHRoPTAsZS50b3RhbEhlaWdodD0wLGUub3BlbldpZHRoPTAsZS5vcGVuSGVpZ2h0PTAsZS5seD0wLGUubHk9MDt2YXIgcj1BLnRlc3Rlci5zZWxlY3RBbGwoImcuIitMLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5kYXRhKGUuYnV0dG9ucyk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoTC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIG49LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pO3IuZWFjaChmdW5jdGlvbihyLGkpe3ZhciBhPXcuc2VsZWN0KHRoaXMpO2EuY2FsbChmLGUscix0KTt2YXIgbz1hLnNlbGVjdCgiLiIrTC5pdGVtVGV4dENsYXNzTmFtZSkscz1vLm5vZGUoKSYmQS5iQm94KG8ubm9kZSgpKS53aWR0aCxsPU1hdGgubWF4KHMrTC50ZXh0UGFkWCxMLm1pbldpZHRoKSx1PWUuZm9udC5zaXplKkUsYz1ULmxpbmVDb3VudChvKSxoPU1hdGgubWF4KHUqYyxMLm1pbkhlaWdodCkrTC50ZXh0T2Zmc2V0WTtoPU1hdGguY2VpbChoKSxsPU1hdGguY2VpbChsKSxlLndpZHRoc1tpXT1sLGUuaGVpZ2h0c1tpXT1oLGUuaGVpZ2h0MT1NYXRoLm1heChlLmhlaWdodDEsaCksZS53aWR0aDE9TWF0aC5tYXgoZS53aWR0aDEsbCksbj8oZS50b3RhbFdpZHRoPU1hdGgubWF4KGUudG90YWxXaWR0aCxsKSxlLm9wZW5XaWR0aD1lLnRvdGFsV2lkdGgsZS50b3RhbEhlaWdodCs9aCtMLmdhcEJ1dHRvbixlLm9wZW5IZWlnaHQrPWgrTC5nYXBCdXR0b24pOihlLnRvdGFsV2lkdGgrPWwrTC5nYXBCdXR0b24sZS5vcGVuV2lkdGgrPWwrTC5nYXBCdXR0b24sZS50b3RhbEhlaWdodD1NYXRoLm1heChlLnRvdGFsSGVpZ2h0LGgpLGUub3BlbkhlaWdodD1lLnRvdGFsSGVpZ2h0KX0pLG4/ZS50b3RhbEhlaWdodC09TC5nYXBCdXR0b246ZS50b3RhbFdpZHRoLT1MLmdhcEJ1dHRvbixlLmhlYWRlcldpZHRoPWUud2lkdGgxK0wuYXJyb3dQYWRYLGUuaGVhZGVySGVpZ2h0PWUuaGVpZ2h0MSwiZHJvcGRvd24iPT09ZS50eXBlJiYobj8oZS53aWR0aDErPUwuYXJyb3dQYWRYLGUudG90YWxIZWlnaHQ9ZS5oZWlnaHQxKTplLnRvdGFsV2lkdGg9ZS53aWR0aDEsZS50b3RhbFdpZHRoKz1MLmFycm93UGFkWCksci5yZW1vdmUoKTt2YXIgaT1lLnRvdGFsV2lkdGgrZS5wYWQubCtlLnBhZC5yLGE9ZS50b3RhbEhlaWdodCtlLnBhZC50K2UucGFkLmIsbz10Ll9mdWxsTGF5b3V0Ll9zaXplO2UubHg9by5sK28udyplLngsZS5seT1vLnQrby5oKigxLWUueSk7dmFyIHM9ImxlZnQiO1MuaXNSaWdodEFuY2hvcihlKSYmKGUubHgtPWkscz0icmlnaHQiKSxTLmlzQ2VudGVyQW5jaG9yKGUpJiYoZS5seC09aS8yLHM9ImNlbnRlciIpO3ZhciBsPSJ0b3AiO1MuaXNCb3R0b21BbmNob3IoZSkmJihlLmx5LT1hLGw9ImJvdHRvbSIpLFMuaXNNaWRkbGVBbmNob3IoZSkmJihlLmx5LT1hLzIsbD0ibWlkZGxlIiksZS50b3RhbFdpZHRoPU1hdGguY2VpbChlLnRvdGFsV2lkdGgpLGUudG90YWxIZWlnaHQ9TWF0aC5jZWlsKGUudG90YWxIZWlnaHQpLGUubHg9TWF0aC5yb3VuZChlLmx4KSxlLmx5PU1hdGgucm91bmQoZS5seSksTS5hdXRvTWFyZ2luKHQsTC5hdXRvTWFyZ2luSWRSb290K2UuX2luZGV4LHt4OmUueCx5OmUueSxsOmkqKHtyaWdodDoxLGNlbnRlcjouNX1bc118fDApLHI6aSooe2xlZnQ6MSxjZW50ZXI6LjV9W3NdfHwwKSxiOmEqKHt0b3A6MSxtaWRkbGU6LjV9W2xdfHwwKSx0OmEqKHtib3R0b206MSxtaWRkbGU6LjV9W2xdfHwwKX0pfWZ1bmN0aW9uIGIodCxlLHIsbil7bj1ufHx7fTt2YXIgaT10LnNlbGVjdCgiLiIrTC5pdGVtUmVjdENsYXNzTmFtZSksYT10LnNlbGVjdCgiLiIrTC5pdGVtVGV4dENsYXNzTmFtZSksbz1lLmJvcmRlcndpZHRoLHM9ci5pbmRleDtBLnNldFRyYW5zbGF0ZSh0LG8rci54LG8rci55KTt2YXIgbD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihlLmRpcmVjdGlvbiksdT1uLmhlaWdodHx8KGw/ZS5oZWlnaHRzW3NdOmUuaGVpZ2h0MSk7aS5hdHRyKHt4OjAseTowLHdpZHRoOm4ud2lkdGh8fChsP2Uud2lkdGgxOmUud2lkdGhzW3NdKSxoZWlnaHQ6dX0pO3ZhciBjPWUuZm9udC5zaXplKkUsaD1ULmxpbmVDb3VudChhKSxmPShoLTEpKmMvMjtULnBvc2l0aW9uVGV4dChhLEwudGV4dE9mZnNldFgsdS8yLWYrTC50ZXh0T2Zmc2V0WSksbD9yLnkrPWUuaGVpZ2h0c1tzXStyLnlQYWQ6ci54Kz1lLndpZHRoc1tzXStyLnhQYWQsci5pbmRleCsrfWZ1bmN0aW9uIHgodCl7dC5zZWxlY3RBbGwoImcuIitMLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5yZW1vdmUoKX1mdW5jdGlvbiBfKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2lufHx7fSxyPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTstMSE9PWkuaW5kZXhPZihMLmF1dG9NYXJnaW5JZFJvb3QpJiZNLmF1dG9NYXJnaW4odCxpKX19dmFyIHc9dCgiZDMiKSxNPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaz10KCIuLi9jb2xvciIpLEE9dCgiLi4vZHJhd2luZyIpLFQ9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksUz10KCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIiksRT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLEw9dCgiLi9jb25zdGFudHMiKSxDPXQoIi4vc2Nyb2xsYm94Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uKGUpLGE9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK0wuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihhLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmV4aXQoKS5zaXplKCkmJl8odCksMCE9PXIubGVuZ3RoKXt2YXIgYz1hLnNlbGVjdEFsbCgiZy4iK0wuaGVhZGVyR3JvdXBDbGFzc05hbWUpLmRhdGEocixpKTtjLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmhlYWRlckdyb3VwQ2xhc3NOYW1lLCEwKTt2YXIgaD1hLnNlbGVjdEFsbCgiZy4iK0wuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSkuZGF0YShbMF0pO2guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEwuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSwhMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7Zm9yKHZhciBmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBkPXJbZl07eSh0LGQpfXZhciBwPSJ1cGRhdGVtZW51cyIrZS5fdWlkLG09bmV3IEModCxoLHApO2MuZW50ZXIoKS5zaXplKCkmJmguY2FsbCh4KS5hdHRyKEwubWVudUluZGV4QXR0ck5hbWUsIi0xIiksYy5leGl0KCkuZWFjaChmdW5jdGlvbihlKXt3LnNlbGVjdCh0aGlzKS5yZW1vdmUoKSxoLmNhbGwoeCkuYXR0cihMLm1lbnVJbmRleEF0dHJOYW1lLCItMSIpLE0uYXV0b01hcmdpbih0LEwuYXV0b01hcmdpbklkUm9vdCtlLl9pbmRleCl9KSxjLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dy5zZWxlY3QodGhpcyksbj0iZHJvcGRvd24iPT09ZS50eXBlP2g6bnVsbDtNLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLGZ1bmN0aW9uKGkpe3ModCxlLGUuYnV0dG9uc1tpLmluZGV4XSxyLG4sbSxpLmluZGV4LCEwKX0pLCJkcm9wZG93biI9PT1lLnR5cGU/KGwodCxyLGgsbSxlKSxvKGgsZSkmJnUodCxyLGgsbSxlKSk6dSh0LHIsbnVsbCxudWxsLGUpfSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90cy9wbG90cyI6ODI3LCIuLi9jb2xvciI6NjAyLCIuLi9kcmF3aW5nIjo2MjYsIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiOjY1MiwiLi9jb25zdGFudHMiOjY5MywiLi9zY3JvbGxib3giOjY5NyxkMzoxMjB9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNjkwXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9hdHRyaWJ1dGVzIjo2OTIsIi4vY29uc3RhbnRzIjo2OTMsIi4vZGVmYXVsdHMiOjY5NCwiLi9kcmF3Ijo2OTUsZHVwOjY5MH1dLDY5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmdkPXQsdGhpcy5jb250YWluZXI9ZSx0aGlzLmlkPXIsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMudHJhbnNsYXRlWD1udWxsLHRoaXMudHJhbnNsYXRlWT1udWxsLHRoaXMuaGJhcj1udWxsLHRoaXMudmJhcj1udWxsLHRoaXMuYmc9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJveC1iZyIpLmRhdGEoWzBdKSx0aGlzLmJnLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLm9uKCJ3aGVlbCIsbnVsbCkucmVtb3ZlKCksdGhpcy5iZy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJveC1iZyIsITApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoe29wYWNpdHk6MCx4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9KX1lLmV4cG9ydHM9bjt2YXIgaT10KCJkMyIpLGE9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpO24uYmFyV2lkdGg9MixuLmJhckxlbmd0aD0yMCxuLmJhclJhZGl1cz0yLG4uYmFyUGFkPTEsbi5iYXJDb2xvcj0iIzgwOEJBNCIsbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgcz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9cy53aWR0aCx1PXMuaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgYyxoLGYsZCxwPXRoaXMucG9zaXRpb24ubCxtPXRoaXMucG9zaXRpb24udyx2PXRoaXMucG9zaXRpb24udCxnPXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLGI9ImRvd24iPT09eSx4PSJsZWZ0Ij09PXksXz0icmlnaHQiPT09eSx3PSJ1cCI9PT15LE09bSxrPWc7Ynx8eHx8X3x8d3x8KHRoaXMucG9zaXRpb24uZGlyZWN0aW9uPSJkb3duIixiPSEwKSxifHx3PyhjPXAsaD1jK00sYj8oZj12LGQ9TWF0aC5taW4oZitrLHUpLGs9ZC1mKTooZD12K2ssZj1NYXRoLm1heChkLWssMCksaz1kLWYpKTooZj12LGQ9ZitrLHg/KGg9cCtNLGM9TWF0aC5tYXgoaC1NLDApLE09aC1jKTooYz1wLGg9TWF0aC5taW4oYytNLGwpLE09aC1jKSksdGhpcy5fYm94PXtsOmMsdDpmLHc6TSxoOmt9O3ZhciBBPW0+TSxUPW4uYmFyTGVuZ3RoKzIqbi5iYXJQYWQsUz1uLmJhcldpZHRoKzIqbi5iYXJQYWQsRT1wLEw9ditnO0wrUz51JiYoTD11LVMpO3ZhciBDPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbCIpLmRhdGEoQT9bMF06W10pO0MuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksQy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci1ob3Jpem9udGFsIiwhMCkuY2FsbChhLmZpbGwsbi5iYXJDb2xvciksQT8odGhpcy5oYmFyPUMuYXR0cih7cng6bi5iYXJSYWRpdXMscnk6bi5iYXJSYWRpdXMseDpFLHk6TCx3aWR0aDpULGhlaWdodDpTfSksdGhpcy5faGJhclhNaW49RStULzIsdGhpcy5faGJhclRyYW5zbGF0ZU1heD1NLVQpOihkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCk7dmFyIHo9Zz5rLEk9bi5iYXJXaWR0aCsyKm4uYmFyUGFkLEQ9bi5iYXJMZW5ndGgrMipuLmJhclBhZCxQPXArbSxPPXY7UCtJPmwmJihQPWwtSSk7dmFyIFI9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbCIpLmRhdGEoej9bMF06W10pO1IuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksUi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci12ZXJ0aWNhbCIsITApLmNhbGwoYS5maWxsLG4uYmFyQ29sb3IpLHo/KHRoaXMudmJhcj1SLmF0dHIoe3J4Om4uYmFyUmFkaXVzLHJ5Om4uYmFyUmFkaXVzLHg6UCx5Ok8sd2lkdGg6SSxoZWlnaHQ6RH0pLHRoaXMuX3ZiYXJZTWluPU8rRC8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9ay1EKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBGPXRoaXMuaWQsaj1jLS41LE49ej9oK0krLjU6aCsuNSxCPWYtLjUsVT1BP2QrUysuNTpkKy41LFY9cy5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK0YpLmRhdGEoQXx8ej9bMF06W10pO2lmKFYuZXhpdCgpLnJlbW92ZSgpLFYuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLEYpLmFwcGVuZCgicmVjdCIpLEF8fHo/KHRoaXMuX2NsaXBSZWN0PVYuc2VsZWN0KCJyZWN0IikuYXR0cih7eDpNYXRoLmZsb29yKGopLHk6TWF0aC5mbG9vcihCKSx3aWR0aDpNYXRoLmNlaWwoTiktTWF0aC5mbG9vcihqKSxoZWlnaHQ6TWF0aC5jZWlsKFUpLU1hdGguZmxvb3IoQil9KSx0aGlzLmNvbnRhaW5lci5jYWxsKG8uc2V0Q2xpcFVybCxGKSx0aGlzLmJnLmF0dHIoe3g6cCx5OnYsd2lkdGg6bSxoZWlnaHQ6Z30pKToodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoby5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksQXx8eil7dmFyIEg9aS5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsZnVuY3Rpb24oKXtpLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCl9KS5vbigiZHJhZyIsdGhpcy5fb25Cb3hEcmFnLmJpbmQodGhpcykpO3RoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIndoZWVsIix0aGlzLl9vbkJveFdoZWVsLmJpbmQodGhpcykpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChIKTt2YXIgcT1pLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe2kuZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKSxpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24oImRyYWciLHRoaXMuX29uQmFyRHJhZy5iaW5kKHRoaXMpKTtBJiZ0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKHEpLHomJnRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLmNhbGwocSl9dGhpcy5zZXRUcmFuc2xhdGUoZSxyKX0sbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpeyh0aGlzLmhiYXJ8fHRoaXMudmJhcikmJih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChvLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSx0aGlzLmhiYXImJih0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLmhiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpLHRoaXMudmJhciYmKHRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLHRoaXMudmJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9LG4ucHJvdG90eXBlLl9vbkJveERyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodC09aS5ldmVudC5keCksdGhpcy52YmFyJiYoZS09aS5ldmVudC5keSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0sbi5wcm90b3R5cGUuX29uQm94V2hlZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodCs9aS5ldmVudC5kZWx0YVkpLHRoaXMudmJhciYmKGUrPWkuZXZlbnQuZGVsdGFZKSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxuLnByb3RvdHlwZS5fb25CYXJEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO2lmKHRoaXMuaGJhcil7dmFyIHI9dCt0aGlzLl9oYmFyWE1pbixuPXIrdGhpcy5faGJhclRyYW5zbGF0ZU1heDt0PShzLmNvbnN0cmFpbihpLmV2ZW50LngscixuKS1yKS8obi1yKSoodGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53KX1pZih0aGlzLnZiYXIpe3ZhciBhPWUrdGhpcy5fdmJhcllNaW4sbz1hK3RoaXMuX3ZiYXJUcmFuc2xhdGVNYXg7ZT0ocy5jb25zdHJhaW4oaS5ldmVudC55LGEsbyktYSkvKG8tYSkqKHRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaCl9dGhpcy5zZXRUcmFuc2xhdGUodCxlKX0sbi5wcm90b3R5cGUuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53LG49dGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oO2lmKHQ9cy5jb25zdHJhaW4odHx8MCwwLHIpLGU9cy5jb25zdHJhaW4oZXx8MCwwLG4pLHRoaXMudHJhbnNsYXRlWD10LHRoaXMudHJhbnNsYXRlWT1lLHRoaXMuY29udGFpbmVyLmNhbGwoby5zZXRUcmFuc2xhdGUsdGhpcy5fYm94LmwtdGhpcy5wb3NpdGlvbi5sLXQsdGhpcy5fYm94LnQtdGhpcy5wb3NpdGlvbi50LWUpLHRoaXMuX2NsaXBSZWN0JiZ0aGlzLl9jbGlwUmVjdC5hdHRyKHt4Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi5sK3QtLjUpLHk6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLnQrZS0uNSl9KSx0aGlzLmhiYXIpe3ZhciBpPXQvcjt0aGlzLmhiYXIuY2FsbChvLnNldFRyYW5zbGF0ZSx0K2kqdGhpcy5faGJhclRyYW5zbGF0ZU1heCxlKX1pZih0aGlzLnZiYXIpe3ZhciBhPWUvbjt0aGlzLnZiYXIuY2FsbChvLnNldFRyYW5zbGF0ZSx0LGUrYSp0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX19fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9jb2xvciI6NjAyLCIuLi9kcmF3aW5nIjo2MjYsZDM6MTIwfV0sNjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17RlJPTV9CTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sRlJPTV9UTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbToxLG1pZGRsZTouNSx0b3A6MH0sTElORV9TUEFDSU5HOjEuMyxNSURfU0hJRlQ6LjM1fX0se31dLDY5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NvbGlkOlsxXSxkb3Q6WzEsMV0sZGFzaDpbNCwxXSxsb25nZGFzaDpbOCwxXSxkYXNoZG90Ols0LDEsMSwxXSxsb25nZGFzaGRvdDpbOCwxLDEsMV19fSx7fV0sNzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXtjaXJjbGU6e3VuaWNvZGU6Ilx1MjVjZiJ9LHNxdWFyZTp7dW5pY29kZToiXHUyNWEwIn0sZGlhbW9uZDp7dW5pY29kZToiXHUyNWM2In0sY3Jvc3M6e3VuaWNvZGU6Ilx1MjcxYSJ9LHg6e3VuaWNvZGU6Ilx1Mjc0YyJ9LCJ0cmlhbmdsZS11cCI6e3VuaWNvZGU6Ilx1MjViMiJ9LCJ0cmlhbmdsZS1kb3duIjp7dW5pY29kZToiXHUyNWJjIn0sInRyaWFuZ2xlLWxlZnQiOnt1bmljb2RlOiJcdTI1YzQifSwidHJpYW5nbGUtcmlnaHQiOnt1bmljb2RlOiJcdTI1YmEifSwidHJpYW5nbGUtbmUiOnt1bmljb2RlOiJcdTI1ZTUifSwidHJpYW5nbGUtbnciOnt1bmljb2RlOiJcdTI1ZTQifSwidHJpYW5nbGUtc2UiOnt1bmljb2RlOiJcdTI1ZTIifSwidHJpYW5nbGUtc3ciOnt1bmljb2RlOiJcdTI1ZTMifSxwZW50YWdvbjp7dW5pY29kZToiXHUyYjFmIn0saGV4YWdvbjp7dW5pY29kZToiXHUyYjIyIn0saGV4YWdvbjI6e3VuaWNvZGU6Ilx1MmIyMyJ9LHN0YXI6e3VuaWNvZGU6Ilx1MjYwNSJ9LCJkaWFtb25kLXRhbGwiOnt1bmljb2RlOiJcdTI2NjYifSxib3d0aWU6e3VuaWNvZGU6Ilx1MjlkMyJ9LCJkaWFtb25kLXgiOnt1bmljb2RlOiJcdTI3NTYifSwiY3Jvc3MtdGhpbiI6e3VuaWNvZGU6IisiLG5vQm9yZGVyOiEwfSxhc3Rlcmlzazp7dW5pY29kZToiXHUyNzMzIixub0JvcmRlcjohMH0sInktdXAiOnt1bmljb2RlOiJcdTIxNDQiLG5vQm9yZGVyOiEwfSwieS1kb3duIjp7dW5pY29kZToiWSIsbm9Cb3JkZXI6ITB9LCJsaW5lLWV3Ijp7dW5pY29kZToiXHUyNTAwIixub0JvcmRlcjohMH0sImxpbmUtbnMiOnt1bmljb2RlOiJcdTI1MDIiLG5vQm9yZGVyOiEwfX0sYT17fSxvPU9iamVjdC5rZXlzKGkpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthW2wrIi1vcGVuIl09bih7fSxpW2xdKX12YXIgdT17ImNpcmNsZS1jcm9zcy1vcGVuIjp7dW5pY29kZToiXHUyYTAxIixub0ZpbGw6ITB9LCJjaXJjbGUteC1vcGVuIjp7dW5pY29kZToiXHUyYTAyIixub0ZpbGw6ITB9LCJzcXVhcmUtY3Jvc3Mtb3BlbiI6e3VuaWNvZGU6Ilx1MjI5ZSIsbm9GaWxsOiEwfSwic3F1YXJlLXgtb3BlbiI6e3VuaWNvZGU6Ilx1MjJhMCIsbm9GaWxsOiEwfX07ZS5leHBvcnRzPW4oe30saSxhLHUpfSx7Ii4uL2xpYi9leHRlbmQiOjcxNX1dLDcwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NvbGlkOltbXSwwXSxkb3Q6W1suNSwxXSwyMDBdLGRhc2g6W1suNSwxXSw1MF0sbG9uZ2Rhc2g6W1suNSwxXSwxMF0sZGFzaGRvdDpbWy41LC42MjUsLjg3NSwxXSw1MF0sbG9uZ2Rhc2hkb3Q6W1suNSwuNywuOCwxXSwxMF19fSx7fV0sNzAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2lyY2xlOiJcdTI1Y2YiLCJjaXJjbGUtb3BlbiI6Ilx1MjVjYiIsc3F1YXJlOiJcdTI1YTAiLCJzcXVhcmUtb3BlbiI6Ilx1MjVhMSIsZGlhbW9uZDoiXHUyNWM2IiwiZGlhbW9uZC1vcGVuIjoiXHUyNWM3Iixjcm9zczoiKyIseDoiXHUyNzRjIn19LHt9XSw3MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtTSE9XX1BMQUNFSE9MREVSOjEwMCxISURFX1BMQUNFSE9MREVSOjFlMyxEQkxDTElDS0RFTEFZOjMwMCxERVNFTEVDVERJTTouMn19LHt9XSw3MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCQUROVU06dm9pZCAwLEZQX1NBRkU6TnVtYmVyLk1BWF9WQUxVRS8xZTQsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDoxLTFlLTZ9fSx7fV0sNzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZW50aXR5VG9Vbmljb2RlOnttdToiXHUwM2JjIiwiIzk1NiI6Ilx1MDNiYyIsYW1wOiImIiwiIzI4IjoiJiIsbHQ6IjwiLCIjNjAiOiI8IixndDoiPiIsIiM2MiI6Ij4iLG5ic3A6Ilx4YTAiLCIjMTYwIjoiXHhhMCIsdGltZXM6Ilx4ZDciLCIjMjE1IjoiXHhkNyIscGx1c21uOiJceGIxIiwiIzE3NyI6Ilx4YjEiLGRlZzoiXHhiMCIsIiMxNzYiOiJceGIwIn19fSx7fV0sNzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IueG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixyLnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIueGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHIuc3ZnQXR0cnM9e3htbG5zOnIuc3ZnLCJ4bWxuczp4bGluayI6ci54bGlua319LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wbG90bHkiKTtyLnZlcnNpb249IjEuMjkuMiIsdCgiZXM2LXByb21pc2UiKS5wb2x5ZmlsbCgpLHQoIi4uL2J1aWxkL3Bsb3Rjc3MiKSx0KCIuL2ZvbnRzL21hdGhqYXhfY29uZmlnIiksci5wbG90PW4ucGxvdCxyLm5ld1Bsb3Q9bi5uZXdQbG90LHIucmVzdHlsZT1uLnJlc3R5bGUsci5yZWxheW91dD1uLnJlbGF5b3V0LHIucmVkcmF3PW4ucmVkcmF3LHIudXBkYXRlPW4udXBkYXRlLHIuZXh0ZW5kVHJhY2VzPW4uZXh0ZW5kVHJhY2VzLHIucHJlcGVuZFRyYWNlcz1uLnByZXBlbmRUcmFjZXMsci5hZGRUcmFjZXM9bi5hZGRUcmFjZXMsci5kZWxldGVUcmFjZXM9bi5kZWxldGVUcmFjZXMsci5tb3ZlVHJhY2VzPW4ubW92ZVRyYWNlcyxyLnB1cmdlPW4ucHVyZ2Usci5zZXRQbG90Q29uZmlnPXQoIi4vcGxvdF9hcGkvc2V0X3Bsb3RfY29uZmlnIiksci5yZWdpc3Rlcj10KCIuL3Bsb3RfYXBpL3JlZ2lzdGVyIiksci50b0ltYWdlPXQoIi4vcGxvdF9hcGkvdG9faW1hZ2UiKSxyLmRvd25sb2FkSW1hZ2U9dCgiLi9zbmFwc2hvdC9kb3dubG9hZCIpLHIudmFsaWRhdGU9dCgiLi9wbG90X2FwaS92YWxpZGF0ZSIpLHIuYWRkRnJhbWVzPW4uYWRkRnJhbWVzLHIuZGVsZXRlRnJhbWVzPW4uZGVsZXRlRnJhbWVzLHIuYW5pbWF0ZT1uLmFuaW1hdGUsci5yZWdpc3Rlcih0KCIuL3RyYWNlcy9zY2F0dGVyIikpLHIucmVnaXN0ZXIoW3QoIi4vY29tcG9uZW50cy9meCIpLHQoIi4vY29tcG9uZW50cy9sZWdlbmQiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCIpLHQoIi4vY29tcG9uZW50cy9zaGFwZXMiKSx0KCIuL2NvbXBvbmVudHMvaW1hZ2VzIiksdCgiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIiksdCgiLi9jb21wb25lbnRzL3NsaWRlcnMiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciIpXSksci5JY29ucz10KCIuLi9idWlsZC9wbG90aWNvbiIpLHIuUGxvdHM9bi5QbG90cyxyLkZ4PXQoIi4vY29tcG9uZW50cy9meCIpLHIuU25hcHNob3Q9dCgiLi9zbmFwc2hvdCIpLHIuUGxvdFNjaGVtYT10KCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksci5RdWV1ZT10KCIuL2xpYi9xdWV1ZSIpLHIuZDM9dCgiZDMiKX0seyIuLi9idWlsZC9wbG90Y3NzIjoxLCIuLi9idWlsZC9wbG90aWNvbiI6MiwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIjo1OTMsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIjo1OTgsIi4vY29tcG9uZW50cy9meCI6NjQzLCIuL2NvbXBvbmVudHMvaW1hZ2VzIjo2NTEsIi4vY29tcG9uZW50cy9sZWdlbmQiOjY1OSwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiOjY3MSwiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIjo2NzcsIi4vY29tcG9uZW50cy9zaGFwZXMiOjY4NCwiLi9jb21wb25lbnRzL3NsaWRlcnMiOjY5MCwiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIjo2OTYsIi4vZm9udHMvbWF0aGpheF9jb25maWciOjcwOCwiLi9saWIvcXVldWUiOjczNiwiLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NzUzLCIuL3Bsb3RfYXBpL3JlZ2lzdGVyIjo3NTQsIi4vcGxvdF9hcGkvc2V0X3Bsb3RfY29uZmlnIjo3NTUsIi4vcGxvdF9hcGkvdG9faW1hZ2UiOjc1NywiLi9wbG90X2FwaS92YWxpZGF0ZSI6NzU4LCIuL3Bsb3RseSI6NzU5LCIuL3NuYXBzaG90Ijo4NDcsIi4vc25hcHNob3QvZG93bmxvYWQiOjg0NCwiLi90cmFjZXMvc2NhdHRlciI6MTAzNSxkMzoxMjAsImVzNi1wcm9taXNlIjoxMjZ9XSw3MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7InVuZGVmaW5lZCIhPXR5cGVvZiBNYXRoSmF4PyhyLk1hdGhKYXg9ITAsTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHNraXBTdGFydHVwVHlwZXNldDohMCxkaXNwbGF5QWxpZ246ImxlZnQiLHRleDJqYXg6e2lubGluZU1hdGg6W1siJCIsIiQiXSxbIlxcKCIsIlxcKSJdXX19KSxNYXRoSmF4Lkh1Yi5Db25maWd1cmVkKCkpOnIuTWF0aEpheD0hMX0se31dLDcwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7QXJyYXkuaXNBcnJheSh0KSYmKGVbcl09dFtuXSl9fSx7fV0sNzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9L15bJyIlLCQjXHMnXSt8WywgXXxbJyIlLCQjXHMnXSskL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5yZXBsYWNlKGEsIiIpKSxuKHQpP051bWJlcih0KTppfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsImZhc3QtaXNudW1lcmljIjoxMjl9XSw3MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9nZXRfc2NhbGUiKSxzPShPYmplY3Qua2V5cyh0KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIikpLHQoIi4vbmVzdGVkX3Byb3BlcnR5IikpLGw9L14oWzItOV18WzEtOV1bMC05XSspJC87ci52YWxPYmplY3RzPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheSh0KT9lLnNldCh0KTp2b2lkIDAhPT1yJiZlLnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe24uY29lcmNlTnVtYmVyJiYodD0rdCksLTE9PT1uLnZhbHVlcy5pbmRleE9mKHQpP2Uuc2V0KHIpOmUuc2V0KHQpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7ZS5jb2VyY2VOdW1iZXImJih0PSt0KTtmb3IodmFyIHI9ZS52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1TdHJpbmcocltuXSk7aWYoIi8iPT09aS5jaGFyQXQoMCkmJiIvIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGkuc3Vic3RyKDEsaS5sZW5ndGgtMikpLnRlc3QodCkpcmV0dXJuITB9ZWxzZSBpZih0PT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXshMD09PXR8fCExPT09dD9lLnNldCh0KTplLnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXt0JTF8fCFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPSJudW1iZXIiPT10eXBlb2YgdDshMCE9PW4uc3RyaWN0JiZpP2Uuc2V0KFN0cmluZyh0KSk6ZS5zZXQocil9ZWxzZSBuLm5vQmxhbmsmJiF0P2Uuc2V0KHIpOmUuc2V0KHQpfX0sY29sb3I6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtpKHQpLmlzVmFsaWQoKT9lLnNldCh0KTplLnNldChyKX19LGNvbG9yc2NhbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtlLnNldChvKHQscikpfX0sYW5nbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXsiYXV0byI9PT10P2Uuc2V0KCJhdXRvIik6bih0KT8oTWF0aC5hYnModCk+MTgwJiYodC09MzYwKk1hdGgucm91bmQodC8zNjApKSxlLnNldCgrdCkpOmUuc2V0KHIpfX0sc3VicGxvdGlkOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dmFyIG49ci5sZW5ndGg7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0LnN1YnN0cigwLG4pPT09ciYmbC50ZXN0KHQuc3Vic3RyKG4pKSlyZXR1cm4gdm9pZCBlLnNldCh0KTtlLnNldChyKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPWUuZGZsdCxuPXIubGVuZ3RoO3JldHVybiB0PT09cnx8InN0cmluZyI9PXR5cGVvZiB0JiYhKHQuc3Vic3RyKDAsbikhPT1yfHwhbC50ZXN0KHQuc3Vic3RyKG4pKSl9fSxmbGFnbGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB2b2lkIGUuc2V0KHIpO2lmKC0xIT09KG4uZXh0cmFzfHxbXSkuaW5kZXhPZih0KSlyZXR1cm4gdm9pZCBlLnNldCh0KTtmb3IodmFyIGk9dC5zcGxpdCgiKyIpLGE9MDthPGkubGVuZ3RoOyl7dmFyIG89aVthXTstMT09PW4uZmxhZ3MuaW5kZXhPZihvKXx8aS5pbmRleE9mKG8pPGE/aS5zcGxpY2UoYSwxKTphKyt9aS5sZW5ndGg/ZS5zZXQoaS5qb2luKCIrIikpOmUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiB2b2lkIGUuc2V0KG4pO3ZhciBhPWkuaXRlbXMsbz1bXTtuPUFycmF5LmlzQXJyYXkobik/bjpbXTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKylyLmNvZXJjZSh0LG8sYSwiWyIrcysiXSIsbltzXSk7ZS5zZXQobyl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgbj1lLml0ZW1zO2lmKCFlLmZyZWVMZW5ndGgmJnQubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKCFyLnZhbGlkYXRlKHRbaV0sZS5pdGVtc1tpXSkpcmV0dXJuITF9cmV0dXJuITB9fX0sci5jb2VyY2U9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1zKG4saSkuZ2V0KCksbD1zKHQsaSksdT1zKGUsaSksYz1sLmdldCgpO3JldHVybiB2b2lkIDA9PT1hJiYoYT1vLmRmbHQpLG8uYXJyYXlPayYmQXJyYXkuaXNBcnJheShjKT8odS5zZXQoYyksYyk6KHIudmFsT2JqZWN0c1tvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uKGMsdSxhLG8pLHUuZ2V0KCkpfSxyLmNvZXJjZTI9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1zKHQsaSksbD1yLmNvZXJjZSh0LGUsbixpLGEpLHU9by5nZXQoKTtyZXR1cm4gdm9pZCAwIT09dSYmbnVsbCE9PXUmJmx9LHIuY29lcmNlRm9udD1mdW5jdGlvbih0LGUscil7dmFyIG49e307cmV0dXJuIHI9cnx8e30sbi5mYW1pbHk9dChlKyIuZmFtaWx5IixyLmZhbWlseSksbi5zaXplPXQoZSsiLnNpemUiLHIuc2l6ZSksbi5jb2xvcj10KGUrIi5jb2xvciIsci5jb2xvciksbn0sci5jb2VyY2VIb3ZlcmluZm89ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG89ZS5fbW9kdWxlLmF0dHJpYnV0ZXMscz1vLmhvdmVyaW5mbz97aG92ZXJpbmZvOm8uaG92ZXJpbmZvfTphLGw9cy5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciB1PSJhbGwiPT09bC5kZmx0P2wuZmxhZ3Muc2xpY2UoKTpsLmRmbHQuc3BsaXQoIisiKTt1LnNwbGljZSh1LmluZGV4T2YoIm5hbWUiKSwxKSxpPXUuam9pbigiKyIpfXJldHVybiByLmNvZXJjZSh0LGUscywiaG92ZXJpbmZvIixpKX0sci52YWxpZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXIudmFsT2JqZWN0c1tlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBpPXt9LGE9aSxvPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGksZSksYSE9PWl9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9nZXRfc2NhbGUiOjYxNCwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6NjIwLCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3MzAsImZhc3QtaXNudW1lcmljIjoxMjksdGlueWNvbG9yMjo1MzJ9XSw3MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmTS5jb21wb25lbnRzUmVnaXN0cnkuY2FsZW5kYXJzJiYic3RyaW5nIj09dHlwZW9mIHQmJiJncmVnb3JpYW4iIT09dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIFN0cmluZyh0K01hdGgucG93KDEwLGUpKS5zdWJzdHIoMSl9ZnVuY3Rpb24gYSh0LGUscixuLGEpe2lmKChlfHxyfHxufHxhKSYmKHQrPSIgIitpKGUsMikrIjoiK2kociwyKSwobnx8YSkmJih0Kz0iOiIraShuLDIpLGEpKSl7Zm9yKHZhciBvPTQ7YSUxMD09MDspby09MSxhLz0xMDt0Kz0iLiIraShhLG8pfXJldHVybiB0fWZ1bmN0aW9uIG8odCxlLHIpe3Q9dC5yZXBsYWNlKEQsZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5taW4oK3QuY2hhckF0KDEpfHw2LDYpO3JldHVybihlLzFlMyUxKzIpLnRvRml4ZWQocikuc3Vic3RyKDIpLnJlcGxhY2UoLzArJC8sIiIpfHwiMCJ9KTt2YXIgaT1uZXcgRGF0ZShNYXRoLmZsb29yKGUrLjA1KSk7aWYobihyKSl0cnl7dD1NLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwid29ybGRDYWxGbXQiKSh0LGUscil9Y2F0Y2godCl7cmV0dXJuIkludmFsaWQifXJldHVybiBrKHQpKGkpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1tKHQrLjA1LHkpLG49aShNYXRoLmZsb29yKHIvYiksMikrIjoiK2kobShNYXRoLmZsb29yKHIveCksNjApLDIpO2lmKCJNIiE9PWUpe2QoZSl8fChlPTApO3ZhciBhPU1hdGgubWluKG0odC9fLDYwKSxQW2VdKSxvPSgxMDArYSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYobz1vLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IitvfXJldHVybiBufWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQuZm9ybWF0RGF0ZSgieXl5eSIpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQuZm9ybWF0RGF0ZSgiTSB5eXl5Iil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5mb3JtYXREYXRlKCJNIGQiKX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LmZvcm1hdERhdGUoIk0gZCwgeXl5eSIpfXZhciBmPXQoImQzIiksZD10KCJmYXN0LWlzbnVtZXJpYyIpLHA9dCgiLi9sb2dnZXJzIikuZXJyb3IsbT10KCIuL21vZCIpLHY9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGc9di5CQUROVU0seT12Lk9ORURBWSxiPXYuT05FSE9VUix4PXYuT05FTUlOLF89di5PTkVTRUMsdz12LkVQT0NISkQsTT10KCIuLi9yZWdpc3RyeSIpLGs9Zi50aW1lLmZvcm1hdC51dGMsQT0vXlxzKigtP1xkXGRcZFxkfFxkXGQpKC0oXGQ/XGQpKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQ6P1xkXGQpPyk/KT8pPyk/XHMqJC9tLFQ9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkaT8pKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQ6P1xkXGQpPyk/KT8pPyk/XHMqJC9tLFM9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTcwO3IuZGF0ZVRpY2swPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCk/ZT9NLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1NVTkRBWSIpW3RdOk0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfVElDSyIpW3RdOmU/IjIwMDAtMDEtMDIiOiIyMDAwLTAxLTAxIn0sci5kZmx0UmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCk/TS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkRGTFRSQU5HRSIpW3RdOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXX0sci5pc0pTRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRUaW1lfTt2YXIgRSxMO3IuZGF0ZVRpbWUybXM9ZnVuY3Rpb24odCxlKXtpZihyLmlzSlNEYXRlKHQpKXJldHVybiB0PU51bWJlcih0KS10LmdldFRpbWV6b25lT2Zmc2V0KCkqeCx0Pj1FJiZ0PD1MP3Q6ZztpZigic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gZzt0PVN0cmluZyh0KTt2YXIgaT1uKGUpLGE9dC5jaGFyQXQoMCk7IWl8fCJHIiE9PWEmJiJnIiE9PWF8fCh0PXQuc3Vic3RyKDEpLGU9IiIpO3ZhciBvPWkmJiJjaGluZXNlIj09PWUuc3Vic3RyKDAsNykscz10Lm1hdGNoKG8/VDpBKTtpZighcylyZXR1cm4gZzt2YXIgbD1zWzFdLHU9c1szXXx8IjEiLGM9TnVtYmVyKHNbNV18fDEpLGg9TnVtYmVyKHNbN118fDApLGY9TnVtYmVyKHNbOV18fDApLGQ9TnVtYmVyKHNbMTFdfHwwKTtpZihpKXtpZigyPT09bC5sZW5ndGgpcmV0dXJuIGc7bD1OdW1iZXIobCk7dmFyIHA7dHJ5e3ZhciBtPU0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZihvKXt2YXIgdj0iaSI9PT11LmNoYXJBdCh1Lmxlbmd0aC0xKTt1PXBhcnNlSW50KHUsMTApLHA9bS5uZXdEYXRlKGwsbS50b01vbnRoSW5kZXgobCx1LHYpLGMpfWVsc2UgcD1tLm5ld0RhdGUobCxOdW1iZXIodSksYyl9Y2F0Y2godCl7cmV0dXJuIGd9cmV0dXJuIHA/KHAudG9KRCgpLXcpKnkraCpiK2YqeCtkKl86Z31sPTI9PT1sLmxlbmd0aD8oTnVtYmVyKGwpKzJlMy1TKSUxMDArUzpOdW1iZXIobCksdS09MTt2YXIgaz1uZXcgRGF0ZShEYXRlLlVUQygyZTMsdSxjLGgsZikpO3JldHVybiBrLnNldFVUQ0Z1bGxZZWFyKGwpLGsuZ2V0VVRDTW9udGgoKSE9PXU/ZzprLmdldFVUQ0RhdGUoKSE9PWM/ZzprLmdldFRpbWUoKStkKl99LEU9ci5NSU5fTVM9ci5kYXRlVGltZTJtcygiLTk5OTkiKSxMPXIuTUFYX01TPXIuZGF0ZVRpbWUybXMoIjk5OTktMTItMzEgMjM6NTk6NTkuOTk5OSIpLHIuaXNEYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmRhdGVUaW1lMm1zKHQsZSkhPT1nfTt2YXIgQz05MCp5LHo9MypiLEk9NSp4O3IubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8ISh0Pj1FJiZ0PD1MKSlyZXR1cm4gZztlfHwoZT0wKTt2YXIgaSxvLHMsbCx1LGMsaD1NYXRoLmZsb29yKDEwKm0odCsuMDUsMSkpLGY9TWF0aC5yb3VuZCh0LWgvMTApO2lmKG4ocikpe3ZhciBkPU1hdGguZmxvb3IoZi95KSt3LHA9TWF0aC5mbG9vcihtKHQseSkpO3RyeXtpPU0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKS5mcm9tSkQoZCkuZm9ybWF0RGF0ZSgieXl5eS1tbS1kZCIpfWNhdGNoKHQpe2k9aygiRyVZLSVtLSVkIikobmV3IERhdGUoZikpfWlmKCItIj09PWkuY2hhckF0KDApKWZvcig7aS5sZW5ndGg8MTE7KWk9Ii0wIitpLnN1YnN0cigxKTtlbHNlIGZvcig7aS5sZW5ndGg8MTA7KWk9IjAiK2k7bz1lPEM/TWF0aC5mbG9vcihwL2IpOjAscz1lPEM/TWF0aC5mbG9vcihwJWIveCk6MCxsPWU8ej9NYXRoLmZsb29yKHAleC9fKTowLHU9ZTxJP3AlXyoxMCtoOjB9ZWxzZSBjPW5ldyBEYXRlKGYpLGk9aygiJVktJW0tJWQiKShjKSxvPWU8Qz9jLmdldFVUQ0hvdXJzKCk6MCxzPWU8Qz9jLmdldFVUQ01pbnV0ZXMoKTowLGw9ZTx6P2MuZ2V0VVRDU2Vjb25kcygpOjAsdT1lPEk/MTAqYy5nZXRVVENNaWxsaXNlY29uZHMoKStoOjA7cmV0dXJuIGEoaSxvLHMsbCx1KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49RSt5JiZ0PD1MLXkpKXJldHVybiBnO3ZhciBlPU1hdGguZmxvb3IoMTAqbSh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBhKGYudGltZS5mb3JtYXQoIiVZLSVtLSVkIikociksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLDEwKnIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkrZSl9LHIuY2xlYW5EYXRlPWZ1bmN0aW9uKHQsZSxpKXtpZihyLmlzSlNEYXRlKHQpfHwibnVtYmVyIj09dHlwZW9mIHQpe2lmKG4oaSkpcmV0dXJuIHAoIkpTIERhdGVzIGFuZCBtaWxsaXNlY29uZHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHdvcmxkIGNhbGVuZGFycyIsdCksZTtpZighKHQ9ci5tczJEYXRlVGltZUxvY2FsKCt0KSkmJnZvaWQgMCE9PWUpcmV0dXJuIGV9ZWxzZSBpZighci5pc0RhdGVUaW1lKHQsaSkpcmV0dXJuIHAoInVucmVjb2duaXplZCBkYXRlIix0KSxlO3JldHVybiB0fTt2YXIgRD0vJVxkP2YvZyxQPVs1OSw1OS45LDU5Ljk5LDU5Ljk5OSw1OS45OTk5XSxPPWsoIiVZIiksUj1rKCIlYiAlWSIpLEY9aygiJWIgJS1kIiksaj1rKCIlYiAlLWQsICVZIik7ci5mb3JtYXREYXRlPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLGY7aWYoaT1uKGkpJiZpLGUpcmV0dXJuIG8oZSx0LGkpO2lmKGkpdHJ5e3ZhciBkPU1hdGguZmxvb3IoKHQrLjA1KS95KSt3LHA9TS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKGkpLmZyb21KRChkKTsieSI9PT1yP2Y9bChwKToibSI9PT1yP2Y9dShwKToiZCI9PT1yPyhhPWwocCksZj1jKHApKTooYT1oKHApLGY9cyh0LHIpKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9ZWxzZXt2YXIgbT1uZXcgRGF0ZShNYXRoLmZsb29yKHQrLjA1KSk7InkiPT09cj9mPU8obSk6Im0iPT09cj9mPVIobSk6ImQiPT09cj8oYT1PKG0pLGY9RihtKSk6KGE9aihtKSxmPXModCxyKSl9cmV0dXJuIGYrKGE/IlxuIithOiIiKX07dmFyIE49Myp5O3IuaW5jcmVtZW50TW9udGg9ZnVuY3Rpb24odCxlLHIpe3I9bihyKSYmcjt2YXIgaT1tKHQseSk7aWYodD1NYXRoLnJvdW5kKHQtaSkscil0cnl7dmFyIGE9TWF0aC5yb3VuZCh0L3kpK3csbz1NLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikocikscz1vLmZyb21KRChhKTtyZXR1cm4gZSUxMj9vLmFkZChzLGUsIm0iKTpvLmFkZChzLGUvMTIsInkiKSwocy50b0pEKCktdykqeStpfWNhdGNoKGUpe3AoImludmFsaWQgbXMgIit0KyIgaW4gY2FsZW5kYXIgIityKX12YXIgbD1uZXcgRGF0ZSh0K04pO3JldHVybiBsLnNldFVUQ01vbnRoKGwuZ2V0VVRDTW9udGgoKStlKStpLU59LHIuZmluZEV4YWN0RGF0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsaSxhPTAsbz0wLHM9MCxsPTAsdT1uKGUpJiZNLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikoZSksYz0wO2M8dC5sZW5ndGg7YysrKWlmKGk9dFtjXSxkKGkpKXtpZighKGkleSkpaWYodSl0cnl7cj11LmZyb21KRChpL3krdyksMT09PXIuZGF5KCk/MT09PXIubW9udGgoKT9hKys6bysrOnMrK31jYXRjaCh0KXt9ZWxzZSByPW5ldyBEYXRlKGkpLDE9PT1yLmdldFVUQ0RhdGUoKT8wPT09ci5nZXRVVENNb250aCgpP2ErKzpvKys6cysrfWVsc2UgbCsrO28rPWEscys9bzt2YXIgaD10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmEvaCxleGFjdE1vbnRoczpvL2gsZXhhY3REYXlzOnMvaH19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vcmVnaXN0cnkiOjg0MiwiLi9sb2dnZXJzIjo3MjcsIi4vbW9kIjo3MjksZDM6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNzEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwodD1bXSksdC5sZW5ndGg9ZSx0fX0se31dLDcxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGE9dC5fZXY7aWYoIWEpcmV0dXJuIG47dmFyIG89YS5fZXZlbnRzW2VdO2lmKCFvKXJldHVybiBuOyJmdW5jdGlvbiI9PXR5cGVvZiBvJiYobz1bb10pO2Zvcih2YXIgcz1vLnBvcCgpLGw9MDtsPG8ubGVuZ3RoO2wrKylvW2xdKHIpO3JldHVybiBpPXMociksdm9pZCAwIT09bj9uOml9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1pfSx7ZXZlbnRzOjEyN31dLDcxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpZihudWxsIT09KG49dFtyXSkmJiJvYmplY3QiPT10eXBlb2YgbilyZXR1cm4hMTt2b2lkIDAhPT1uJiYoZVtyXT1uKX1yZXR1cm4hMH1mdW5jdGlvbiBpKHQsZSxyLHMpe3ZhciBsLHUsYyxoLGYsZCxwPXRbMF0sbT10Lmxlbmd0aDtpZigyPT09bSYmbyhwKSYmbyh0WzFdKSYmMD09PXAubGVuZ3RoKXtpZihuKHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciB2PTE7djxtO3YrKyl7bD10W3ZdO2Zvcih1IGluIGwpYz1wW3VdLGg9bFt1XSxzJiZvKGgpP3BbdV09aDplJiZoJiYoYShoKXx8KGY9byhoKSkpPyhmPyhmPSExLGQ9YyYmbyhjKT9jOltdKTpkPWMmJmEoYyk/Yzp7fSxwW3VdPWkoW2QsaF0sZSxyLHMpKToodm9pZCAwIT09aHx8cikmJihwW3VdPWgpfXJldHVybiBwfXZhciBhPXQoIi4vaXNfcGxhaW5fb2JqZWN0LmpzIiksbz1BcnJheS5pc0FycmF5O3IuZXh0ZW5kRmxhdD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMSwhMSwhMSl9LHIuZXh0ZW5kRGVlcD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMCwhMSwhMSl9LHIuZXh0ZW5kRGVlcEFsbD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMCwhMCwhMSl9LHIuZXh0ZW5kRGVlcE5vQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCEwLCExLCEwKX19LHsiLi9pc19wbGFpbl9vYmplY3QuanMiOjcyNn1dLDcxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyEwPT09bi52aXNpYmxlJiZlLnB1c2gobil9cmV0dXJuIGV9fSx7fV0sNzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4oMCxsW3RdKShlKX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0wO2U8cy5sZW5ndGg7ZSsrKXt2YXIgcj1zW2VdO2lmKG5ldyBSZWdFeHAoYVtyXSkudGVzdCh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcn1yZXR1cm4gby53YXJuKCJVbnJlY29nbml6ZWQgY291bnRyeSBuYW1lOiAiK3QrIi4iKSwhMX12YXIgYT10KCJjb3VudHJ5LXJlZ2V4Iiksbz10KCIuLi9saWIiKSxzPU9iamVjdC5rZXlzKGEpLGw9eyJJU08tMyI6by5pZGVudGl0eSwiVVNBLXN0YXRlcyI6by5pZGVudGl0eSwiY291bnRyeSBuYW1lcyI6aX07ci5sb2NhdGlvblRvRmVhdHVyZT1mdW5jdGlvbih0LGUscil7dmFyIGk9bih0LGUpO2lmKGkpe2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKHMuaWQ9PT1pKXJldHVybiBzfW8ud2FybihbIkxvY2F0aW9uIHdpdGggaWQiLGksImRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyB0b3BvanNvbiBmZWF0dXJlIGF0IHRoaXMgcmVzb2x1dGlvbi4iXS5qb2luKCIgIikpfXJldHVybiExfX0seyIuLi9saWIiOjcyNCwiY291bnRyeS1yZWdleCI6MTA1fV0sNzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5jYWxjVHJhY2VUb0xpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2Uscj1lLmNvbm5lY3RnYXBzLGk9W10sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sbD1zLmxvbmxhdDtsWzBdIT09bj9hLnB1c2gobCk6IXImJmEubGVuZ3RoPjAmJihpLnB1c2goYSksYT1bXSl9cmV0dXJuIGEubGVuZ3RoPjAmJmkucHVzaChhKSxpfSxyLm1ha2VMaW5lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307cmV0dXJuIHI9MT09PXQubGVuZ3RoP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0WzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fSxlJiYoci50cmFjZT1lKSxyfSxyLm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYoMT09PXQubGVuZ3RoKXI9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnR9O2Vsc2V7Zm9yKHZhciBuPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7aSsrKW5baV09W3RbaV1dO3I9e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6bn19cmV0dXJuIGUmJihyLnRyYWNlPWUpLHJ9LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbXX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNH1dLDcyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LHU9aS10LGM9by1pLGg9bi1lLGY9YS1lLGQ9cy1hLHA9bCpkLWMqaDtpZigwPT09cClyZXR1cm4gbnVsbDt2YXIgbT0odSpkLWMqZikvcCx2PSh1KmgtbCpmKS9wO3JldHVybiB2PDB8fHY+MXx8bTwwfHxtPjE/bnVsbDp7eDp0K2wqbSx5OmUraCptfX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGE9bip0K2kqZTtpZihhPDApcmV0dXJuIG4qbitpKmk7aWYoYT5yKXt2YXIgbz1uLXQscz1pLWU7cmV0dXJuIG8qbytzKnN9dmFyIGw9biplLWkqdDtyZXR1cm4gbCpsL3J9dmFyIGE9dCgiLi9tb2QiKTtyLnNlZ21lbnRzSW50ZXJzZWN0PW4sci5zZWdtZW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsYSxvLHMsbCx1KXtpZihuKHQsZSxyLGEsbyxzLGwsdSkpcmV0dXJuIDA7dmFyIGM9ci10LGg9YS1lLGY9bC1vLGQ9dS1zLHA9YypjK2gqaCxtPWYqZitkKmQsdj1NYXRoLm1pbihpKGMsaCxwLG8tdCxzLWUpLGkoYyxoLHAsbC10LHUtZSksaShmLGQsbSx0LW8sZS1zKSxpKGYsZCxtLHItbyxhLXMpKTtyZXR1cm4gTWF0aC5zcXJ0KHYpfTt2YXIgbyxzLGw7ci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbil7aWYodD09PXMmJm49PT1sfHwobz17fSxzPXQsbD1uKSxvW3JdKXJldHVybiBvW3JdO3ZhciBpPXQuZ2V0UG9pbnRBdExlbmd0aChhKHItbi8yLGUpKSx1PXQuZ2V0UG9pbnRBdExlbmd0aChhKHIrbi8yLGUpKSxjPU1hdGguYXRhbigodS55LWkueSkvKHUueC1pLngpKSxoPXQuZ2V0UG9pbnRBdExlbmd0aChhKHIsZSkpLGY9KDQqaC54K2kueCt1LngpLzYsZD0oNCpoLnkraS55K3UueSkvNixwPXt4OmYseTpkLHRoZXRhOmN9O3JldHVybiBvW3JdPXAscH0sci5jbGVhckxvY2F0aW9uQ2FjaGU9ZnVuY3Rpb24oKXtzPW51bGx9LHIuZ2V0VmlzaWJsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9dC5nZXRQb2ludEF0TGVuZ3RoKGUpOzA9PT1lP2k9cjplPT09aCYmKGE9cik7dmFyIG49ci54PG8/by1yLng6ci54PnM/ci54LXM6MCxjPXIueTxsP2wtci55OnIueT51P3IueS11OjA7cmV0dXJuIE1hdGguc3FydChuKm4rYypjKX1mb3IodmFyIGksYSxvPWUubGVmdCxzPWUucmlnaHQsbD1lLnRvcCx1PWUuYm90dG9tLGM9MCxoPXQuZ2V0VG90YWxMZW5ndGgoKSxmPWgsZD1uKGMpO2Q7KXtpZigoYys9ZCtyKT5mKXJldHVybjtkPW4oYyl9Zm9yKGQ9bihmKTtkOyl7aWYoZi09ZCtyLGM+ZilyZXR1cm47ZD1uKGYpfXJldHVybnttaW46YyxtYXg6ZixsZW46Zi1jLHRvdGFsOmgsaXNDbG9zZWQ6MD09PWMmJmY9PT1oJiZNYXRoLmFicyhpLngtYS54KTwuMSYmTWF0aC5hYnMoaS55LWEueSk8LjF9fX0seyIuL21vZCI6NzI5fV0sNzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gaSh0KXtpZihzKHQpKXJldHVybiBoO3ZhciBlPWwodCk7cmV0dXJuIGUubGVuZ3RoP2U6aH1mdW5jdGlvbiBhKHQpe3JldHVybiBzKHQpP3Q6Zn1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbyxzLGMsZCxwLG09dC5jb2xvcix2PUFycmF5LmlzQXJyYXkobSksZz1BcnJheS5pc0FycmF5KGUpLHk9W10KO2lmKG89dm9pZCAwIT09dC5jb2xvcnNjYWxlP3UubWFrZUNvbG9yU2NhbGVGdW5jKHUuZXh0cmFjdFNjYWxlKHQuY29sb3JzY2FsZSx0LmNtaW4sdC5jbWF4KSk6aSxzPXY/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9oOmwobyh0W2VdKSl9OmksYz1nP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/ZjphKHRbZV0pfTphLHZ8fGcpZm9yKHZhciBiPTA7YjxyO2IrKylkPXMobSxiKSxwPWMoZSxiKSx5W2JdPW4oZCxwKTtlbHNlIHk9bihsKG0pLGUpO3JldHVybiB5fXZhciBzPXQoImZhc3QtaXNudW1lcmljIiksbD10KCJjb2xvci1yZ2JhIiksdT10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxjPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGg9bChjKSxmPTE7ZS5leHBvcnRzPW99LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCJjb2xvci1yZ2JhIjo5MywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDcyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wOyhlPXQuaW5kZXhPZigiPHN1cD4iLGUpKT49MDspe3ZhciByPXQuaW5kZXhPZigiPC9zdXA+IixlKTtpZihyPGUpYnJlYWs7dD10LnNsaWNlKDAsZSkrbCh0LnNsaWNlKGUrNSxyKSkrdC5zbGljZShyKzYpfXJldHVybiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQucmVwbGFjZSgvXDxiclw+L2csIlxuIil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cPC4qXD4vZywiIil9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dS5lbnRpdHlUb1VuaWNvZGUscj0wOyhyPXQuaW5kZXhPZigiJiIscikpPj0wOyl7dmFyIG49dC5pbmRleE9mKCI7IixyKTtpZihuPHIpcis9MTtlbHNle3ZhciBpPWVbdC5zbGljZShyKzEsbildO3Q9aT90LnNsaWNlKDAscikraSt0LnNsaWNlKG4rMSk6dC5zbGljZSgwLHIpK3Quc2xpY2UobisxKX19cmV0dXJuIHR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4iIitvKGEobihpKHQpKSkpfXZhciBsPXQoInN1cGVyc2NyaXB0LXRleHQiKSx1PXQoIi4uL2NvbnN0YW50cy9zdHJpbmdfbWFwcGluZ3MiKTtlLmV4cG9ydHM9c30seyIuLi9jb25zdGFudHMvc3RyaW5nX21hcHBpbmdzIjo3MDUsInN1cGVyc2NyaXB0LXRleHQiOjUyOH1dLDcyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSx7fV0sNzI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5GUF9TQUZFLHM9YS5CQUROVU0sbD1lLmV4cG9ydHM9e307bC5uZXN0ZWRQcm9wZXJ0eT10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGwuaXNQbGFpbk9iamVjdD10KCIuL2lzX3BsYWluX29iamVjdCIpLGwuaXNBcnJheT10KCIuL2lzX2FycmF5IiksbC5tb2Q9dCgiLi9tb2QiKSxsLnRvTG9nUmFuZ2U9dCgiLi90b19sb2dfcmFuZ2UiKSxsLnJlbGlua1ByaXZhdGVLZXlzPXQoIi4vcmVsaW5rX3ByaXZhdGUiKSxsLmVuc3VyZUFycmF5PXQoIi4vZW5zdXJlX2FycmF5Iik7dmFyIHU9dCgiLi9jb2VyY2UiKTtsLnZhbE9iamVjdHM9dS52YWxPYmplY3RzLGwuY29lcmNlPXUuY29lcmNlLGwuY29lcmNlMj11LmNvZXJjZTIsbC5jb2VyY2VGb250PXUuY29lcmNlRm9udCxsLmNvZXJjZUhvdmVyaW5mbz11LmNvZXJjZUhvdmVyaW5mbyxsLnZhbGlkYXRlPXUudmFsaWRhdGU7dmFyIGM9dCgiLi9kYXRlcyIpO2wuZGF0ZVRpbWUybXM9Yy5kYXRlVGltZTJtcyxsLmlzRGF0ZVRpbWU9Yy5pc0RhdGVUaW1lLGwubXMyRGF0ZVRpbWU9Yy5tczJEYXRlVGltZSxsLm1zMkRhdGVUaW1lTG9jYWw9Yy5tczJEYXRlVGltZUxvY2FsLGwuY2xlYW5EYXRlPWMuY2xlYW5EYXRlLGwuaXNKU0RhdGU9Yy5pc0pTRGF0ZSxsLmZvcm1hdERhdGU9Yy5mb3JtYXREYXRlLGwuaW5jcmVtZW50TW9udGg9Yy5pbmNyZW1lbnRNb250aCxsLmRhdGVUaWNrMD1jLmRhdGVUaWNrMCxsLmRmbHRSYW5nZT1jLmRmbHRSYW5nZSxsLmZpbmRFeGFjdERhdGVzPWMuZmluZEV4YWN0RGF0ZXMsbC5NSU5fTVM9Yy5NSU5fTVMsbC5NQVhfTVM9Yy5NQVhfTVM7dmFyIGg9dCgiLi9zZWFyY2giKTtsLmZpbmRCaW49aC5maW5kQmluLGwuc29ydGVyQXNjPWguc29ydGVyQXNjLGwuc29ydGVyRGVzPWguc29ydGVyRGVzLGwuZGlzdGluY3RWYWxzPWguZGlzdGluY3RWYWxzLGwucm91bmRVcD1oLnJvdW5kVXA7dmFyIGY9dCgiLi9zdGF0cyIpO2wuYWdnTnVtcz1mLmFnZ051bXMsbC5sZW49Zi5sZW4sbC5tZWFuPWYubWVhbixsLnZhcmlhbmNlPWYudmFyaWFuY2UsbC5zdGRldj1mLnN0ZGV2LGwuaW50ZXJwPWYuaW50ZXJwO3ZhciBkPXQoIi4vbWF0cml4Iik7bC5pbml0MmRBcnJheT1kLmluaXQyZEFycmF5LGwudHJhbnNwb3NlUmFnZ2VkPWQudHJhbnNwb3NlUmFnZ2VkLGwuZG90PWQuZG90LGwudHJhbnNsYXRpb25NYXRyaXg9ZC50cmFuc2xhdGlvbk1hdHJpeCxsLnJvdGF0aW9uTWF0cml4PWQucm90YXRpb25NYXRyaXgsbC5yb3RhdGlvblhZTWF0cml4PWQucm90YXRpb25YWU1hdHJpeCxsLmFwcGx5MkRUcmFuc2Zvcm09ZC5hcHBseTJEVHJhbnNmb3JtLGwuYXBwbHkyRFRyYW5zZm9ybTI9ZC5hcHBseTJEVHJhbnNmb3JtMjt2YXIgcD10KCIuL2dlb21ldHJ5MmQiKTtsLnNlZ21lbnRzSW50ZXJzZWN0PXAuc2VnbWVudHNJbnRlcnNlY3QsbC5zZWdtZW50RGlzdGFuY2U9cC5zZWdtZW50RGlzdGFuY2UsbC5nZXRUZXh0TG9jYXRpb249cC5nZXRUZXh0TG9jYXRpb24sbC5jbGVhckxvY2F0aW9uQ2FjaGU9cC5jbGVhckxvY2F0aW9uQ2FjaGUsbC5nZXRWaXNpYmxlU2VnbWVudD1wLmdldFZpc2libGVTZWdtZW50O3ZhciBtPXQoIi4vZXh0ZW5kIik7bC5leHRlbmRGbGF0PW0uZXh0ZW5kRmxhdCxsLmV4dGVuZERlZXA9bS5leHRlbmREZWVwLGwuZXh0ZW5kRGVlcEFsbD1tLmV4dGVuZERlZXBBbGwsbC5leHRlbmREZWVwTm9BcnJheXM9bS5leHRlbmREZWVwTm9BcnJheXM7dmFyIHY9dCgiLi9sb2dnZXJzIik7bC5sb2c9di5sb2csbC53YXJuPXYud2FybixsLmVycm9yPXYuZXJyb3IsbC5ub3RpZmllcj10KCIuL25vdGlmaWVyIiksbC5maWx0ZXJVbmlxdWU9dCgiLi9maWx0ZXJfdW5pcXVlIiksbC5maWx0ZXJWaXNpYmxlPXQoIi4vZmlsdGVyX3Zpc2libGUiKSxsLnB1c2hVbmlxdWU9dCgiLi9wdXNoX3VuaXF1ZSIpLGwuY2xlYW5OdW1iZXI9dCgiLi9jbGVhbl9udW1iZXIiKSxsLmVuc3VyZU51bWJlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT8odD1OdW1iZXIodCksdDwtb3x8dD5vP3M6aSh0KT9OdW1iZXIodCk6cyk6c30sbC5ub29wPXQoIi4vbm9vcCIpLGwuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGwuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSx1PW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQodSl9fSxsLnBhdXNlRXZlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uJiZ0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQmJnQucHJldmVudERlZmF1bHQoKSx0LmNhbmNlbEJ1YmJsZT0hMCwhMX0sbC5jb25zdHJhaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPnI/TWF0aC5tYXgocixNYXRoLm1pbihlLHQpKTpNYXRoLm1heChlLE1hdGgubWluKHIsdCkpfSxsLmJCb3hJbnRlcnNlY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByPXJ8fDAsdC5sZWZ0PD1lLnJpZ2h0K3ImJmUubGVmdDw9dC5yaWdodCtyJiZ0LnRvcDw9ZS5ib3R0b20rciYmZS50b3A8PXQuYm90dG9tK3J9LGwuc2ltcGxlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpO28rKylhW29dPWUodFtvXSxyLG4pO3JldHVybiBhfSxsLnJhbmRzdHI9ZnVuY3Rpb24gdChlLHIsbil7aWYobnx8KG49MTYpLHZvaWQgMD09PXImJihyPTI0KSxyPD0wKXJldHVybiIwIjt2YXIgaSxhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxsPSIiO2ZvcihpPTI7cz09PTEvMDtpKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2kpKS9NYXRoLmxvZyhuKSppO3ZhciB1PXMtTWF0aC5mbG9vcihzKTtmb3IoaT0wO2k8TWF0aC5mbG9vcihzKTtpKyspbz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobiksbD1vK2w7dSYmKGE9TWF0aC5wb3cobix1KSxvPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphKS50b1N0cmluZyhuKSxsPW8rbCk7dmFyIGM9cGFyc2VJbnQobCxuKTtyZXR1cm4gZSYmZS5pbmRleE9mKGwpPi0xfHxjIT09MS8wJiZjPj1NYXRoLnBvdygyLHIpP3QoZSxyLG4pOmx9LGwuT3B0aW9uQ29udHJvbD1mdW5jdGlvbih0LGUpe3R8fCh0PXt9KSxlfHwoZT0ib3B0Iik7dmFyIHI9e307cmV0dXJuIHIub3B0aW9uTGlzdD1bXSxyLl9uZXdvcHRpb249ZnVuY3Rpb24obil7bltlXT10LHJbbi5uYW1lXT1uLHIub3B0aW9uTGlzdC5wdXNoKG4pfSxyWyJfIitlXT10LHJ9LGwuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsdT1uZXcgQXJyYXkobCksYz1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKXVbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKWk9cituKzEtZSxpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSp1W25dO2Nbcl09YX1yZXR1cm4gY30sbC5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBsLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IodmFyIGksYTt0Lmxlbmd0aDspaWYoYT10LnNwbGljZSgwLDEpWzBdLChpPWEoZSkpJiZpLnRoZW4pcmV0dXJuIGkudGhlbihuKS50aGVuKHZvaWQgMCxsLnByb21pc2VFcnJvcik7cmV0dXJuIHImJnIoZSl9LGwuc3RyaXBUcmFpbGluZ1NsYXNoPWZ1bmN0aW9uKHQpe3JldHVybiIvIj09PXQuc3Vic3RyKC0xKT90LnN1YnN0cigwLHQubGVuZ3RoLTEpOnR9LGwubm9uZU9yQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbixpLGE9ITEsbz0hMDtmb3Iobj0wO248ci5sZW5ndGg7bisrKWk9dFtyW25dXSx2b2lkIDAhPT1pJiZudWxsIT09aT9hPSEwOm89ITE7aWYoYSYmIW8pZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxsLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPTA7aTxuO2krKyllW2ldW3JdPXRbaV19LGwuZmlsbEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG49bnx8bC5pZGVudGl0eSxBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sbC5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8bC5pZGVudGl0eTt2YXIgaT1sLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/bihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KGlbZVswXV0pP2lbZVswXV1bZVsxXV06aVtlXSk6aX0sbC5nZXRUYXJnZXRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPWUudGFyZ2V0O2lmKCJzdHJpbmciPT10eXBlb2YgciYmcil7dmFyIG49bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiEhQXJyYXkuaXNBcnJheShuKSYmbn1yZXR1cm4hIUFycmF5LmlzQXJyYXkocikmJnJ9LGwubWluRXh0ZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Im9iamVjdCIhPXR5cGVvZiBlJiYoZT17fSk7dmFyIG4saSxhLG89T2JqZWN0LmtleXModCk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpPW9bbl0sYT10W2ldLCJfIiE9PWkuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgYSYmKCJtb2R1bGUiPT09aT9yW2ldPWE6QXJyYXkuaXNBcnJheShhKT9yW2ldPWEuc2xpY2UoMCwzKTpyW2ldPWEmJiJvYmplY3QiPT10eXBlb2YgYT9sLm1pbkV4dGVuZCh0W2ldLGVbaV0pOmEpO2ZvcihvPU9iamVjdC5rZXlzKGUpLG49MDtuPG8ubGVuZ3RoO24rKylpPW9bbl0sIm9iamVjdCI9PXR5cGVvZihhPWVbaV0pJiZpIGluIHImJiJvYmplY3QiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGwudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxsLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGwuaXNQbG90RGl2PWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpO3JldHVybiBlLm5vZGUoKWluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuc2l6ZSgpJiZlLmNsYXNzZWQoImpzLXBsb3RseS1wbG90Iil9LGwucmVtb3ZlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10JiZ0LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0KX0sbC5hZGRTdHlsZVJ1bGU9ZnVuY3Rpb24odCxlKXtpZighbC5zdHlsZVNoZWV0KXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHIpLGwuc3R5bGVTaGVldD1yLnNoZWV0fXZhciBuPWwuc3R5bGVTaGVldDtuLmluc2VydFJ1bGU/bi5pbnNlcnRSdWxlKHQrInsiK2UrIn0iLDApOm4uYWRkUnVsZT9uLmFkZFJ1bGUodCxlLDApOmwud2FybigiYWRkU3R5bGVSdWxlIGZhaWxlZCIpfSxsLmlzSUU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09d2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9ifSxsLmlzRDNTZWxlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsYXNzZWR9LGwub2JqZWN0RnJvbVBhdGg9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnNwbGl0KCIuIiksaT1yPXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW51bGwsbD1uW2FdLm1hdGNoKC8oLiopXFsoWzAtOV0rKVxdLyk7bD8obz1sWzFdLHM9bFsyXSxyPXJbb109W10sYT09PW4ubGVuZ3RoLTE/cltzXT1lOnJbc109e30scj1yW3NdKTooYT09PW4ubGVuZ3RoLTE/cltvXT1lOnJbb109e30scj1yW29dKX1yZXR1cm4gaX07dmFyIGc9L14oW15cW1wuXSspXC4oLispPy8seT0vXihbXlwuXSspXFsoWzAtOV0rKVxdKFwuKT8oLispPy87bC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpKWZvcihyIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKChlPXIubWF0Y2goZykpPyhpPXRbcl0sbj1lWzFdLGRlbGV0ZSB0W3JdLHRbbl09bC5leHRlbmREZWVwTm9BcnJheXModFtuXXx8e30sbC5vYmplY3RGcm9tUGF0aChyLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpW25dKSk6KGU9ci5tYXRjaCh5KSk/KGk9dFtyXSxuPWVbMV0sYT1wYXJzZUludChlWzJdKSxkZWxldGUgdFtyXSx0W25dPXRbbl18fFtdLCIuIj09PWVbM10/KHM9ZVs0XSxvPXRbbl1bYV09dFtuXVthXXx8e30sbC5leHRlbmREZWVwTm9BcnJheXMobyxsLm9iamVjdEZyb21QYXRoKHMsbC5leHBhbmRPYmplY3RQYXRocyhpKSkpKTp0W25dW2FdPWwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpOnRbcl09bC5leHBhbmRPYmplY3RQYXRocyh0W3JdKSk7cmV0dXJuIHR9LGwubnVtU2VwYXJhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHJ8fChyPSExKSwic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlcGFyYXRvciBzdHJpbmcgcmVxdWlyZWQgZm9yIGZvcm1hdHRpbmchIik7Im51bWJlciI9PXR5cGVvZiB0JiYodD1TdHJpbmcodCkpO3ZhciBuPS8oXGQrKShcZHszfSkvLGk9ZS5jaGFyQXQoMCksYT1lLmNoYXJBdCgxKSxvPXQuc3BsaXQoIi4iKSxzPW9bMF0sbD1vLmxlbmd0aD4xP2krb1sxXToiIjtpZihhJiYoby5sZW5ndGg+MXx8cy5sZW5ndGg+NHx8cikpZm9yKDtuLnRlc3Qocyk7KXM9cy5yZXBsYWNlKG4sIiQxIithKyIkMiIpO3JldHVybiBzK2x9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi9jbGVhbl9udW1iZXIiOjcxMCwiLi9jb2VyY2UiOjcxMSwiLi9kYXRlcyI6NzEyLCIuL2Vuc3VyZV9hcnJheSI6NzEzLCIuL2V4dGVuZCI6NzE1LCIuL2ZpbHRlcl91bmlxdWUiOjcxNiwiLi9maWx0ZXJfdmlzaWJsZSI6NzE3LCIuL2dlb21ldHJ5MmQiOjcyMCwiLi9pZGVudGl0eSI6NzIzLCIuL2lzX2FycmF5Ijo3MjUsIi4vaXNfcGxhaW5fb2JqZWN0Ijo3MjYsIi4vbG9nZ2VycyI6NzI3LCIuL21hdHJpeCI6NzI4LCIuL21vZCI6NzI5LCIuL25lc3RlZF9wcm9wZXJ0eSI6NzMwLCIuL25vb3AiOjczMSwiLi9ub3RpZmllciI6NzMyLCIuL3B1c2hfdW5pcXVlIjo3MzUsIi4vcmVsaW5rX3ByaXZhdGUiOjczNywiLi9zZWFyY2giOjczOCwiLi9zdGF0cyI6NzQxLCIuL3RvX2xvZ19yYW5nZSI6NzQ0LGQzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDcyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXI6e2lzVmlldzpmdW5jdGlvbigpe3JldHVybiExfX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxuLmlzVmlldyh0KX19LHt9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucz8iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KToiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSw3Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQuYXBwbHkpdC5hcHBseSh0LGUpO2Vsc2UgZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdChlW3JdKX12YXIgaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLGE9ZS5leHBvcnRzPXt9O2EubG9nPWZ1bmN0aW9uKCl7aWYoaS5sb2dnaW5nPjEpe2Zvcih2YXIgdD1bIkxPRzoiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTtuKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLHQpfX0sYS53YXJuPWZ1bmN0aW9uKCl7aWYoaS5sb2dnaW5nPjApe2Zvcih2YXIgdD1bIldBUk46Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7bihjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGEuZXJyb3I9ZnVuY3Rpb24oKXtpZihpLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVsiRVJST1I6Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7bihjb25zb2xlLmVycm9yLHQpfX19LHsiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjc1Mn1dLDcyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5MkRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzOzM9PT1lLmxlbmd0aCYmKGU9ZVswXSk7dmFyIG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdXTtyZXR1cm4gci5kb3QodCxbblswXSxuWzFdLDFdKS5zbGljZSgwLDIpfX0sci5hcHBseTJEVHJhbnNmb3JtMj1mdW5jdGlvbih0KXt2YXIgZT1yLmFwcGx5MkRUcmFuc2Zvcm0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQuc2xpY2UoMCwyKSkuY29uY2F0KGUodC5zbGljZSgyLDQpKSl9fX0se31dLDcyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn19LHt9XSw3MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGksYSxvLHMsbD10O2ZvcihvPTA7bzxlLmxlbmd0aC0xO28rKyl7aWYoLTE9PT0ocj1lW29dKSl7Zm9yKGk9ITAsYT1bXSxzPTA7czxsLmxlbmd0aDtzKyspYVtzXT1uKGxbc10sZS5zbGljZShvKzEpKSgpLGFbc10hPT1hWzBdJiYoaT0hMSk7cmV0dXJuIGk/YVswXTphfWlmKCJudW1iZXIiPT10eXBlb2YgciYmIWQobCkpcmV0dXJuO2lmKCJvYmplY3QiIT10eXBlb2YobD1sW3JdKXx8bnVsbD09PWwpcmV0dXJufWlmKCJvYmplY3QiPT10eXBlb2YgbCYmbnVsbCE9PWwmJm51bGwhPT0oYT1sW2Vbb11dKSlyZXR1cm4gYX19ZnVuY3Rpb24gaSh0LGUpe2lmKCFjKHQpfHxwKHQpJiYiXSI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKXx8ZS5tYXRjaChnKSYmdm9pZCAwIT09dClyZXR1cm4hMTtpZighZCh0KSlyZXR1cm4hMDtpZihlLm1hdGNoKHYpKXJldHVybiEwO3ZhciByPW0oZSk7cmV0dXJuIHImJiIiPT09ci5pbmRleH1mdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGEsYyxoPXQsZj0iIixwPVtbdCxmXV0sbT1pKG4scik7Zm9yKGM9MDtjPGUubGVuZ3RoLTE7YysrKXtpZigibnVtYmVyIj09dHlwZW9mKGE9ZVtjXSkmJiFkKGgpKXRocm93ImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IjtpZigtMT09PWEpe2lmKG09IXMoaCxlLnNsaWNlKGMrMSksbixyKSlicmVhaztyZXR1cm59aWYoIWwoaCxhLGVbYysxXSxtKSlicmVhaztpZigib2JqZWN0IiE9dHlwZW9mKGg9aFthXSl8fG51bGw9PT1oKXRocm93ImNvbnRhaW5lciBpcyBub3QgYW4gb2JqZWN0IjtmPW8oZixhKSxwLnB1c2goW2gsZl0pfW0/KGM9PT1lLmxlbmd0aC0xJiZkZWxldGUgaFtlW2NdXSx1KHApKTpoW2VbY11dPW59fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1lO3JldHVybiBmKGUpP3I9IlsiK2UrIl0iOnQmJihyPSIuIitlKSx0K3J9ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgbyxzPWQociksdT0hMCxjPXIsaD1uLnJlcGxhY2UoIi0xIiwwKSxmPSFzJiZpKHIsaCkscD1lWzBdO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaD1uLnJlcGxhY2UoIi0xIixvKSxzJiYoYz1yW28lci5sZW5ndGhdLGY9aShjLGgpKSxmJiYodT0hMSksbCh0LG8scCxmKSYmYSh0W29dLGUsbi5yZXBsYWNlKCItMSIsbykpKGMpO3JldHVybiB1fWZ1bmN0aW9uIGwodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPSJudW1iZXIiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH1mdW5jdGlvbiB1KHQpe3ZhciBlLHIsbixhLHMsbDtmb3IoZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtpZihuPXRbZV1bMF0sYT10W2VdWzFdLGw9ITEsZChuKSlmb3Iocj1uLmxlbmd0aC0xO3I+PTA7ci0tKWkobltyXSxvKGEscikpP2w/bltyXT12b2lkIDA6bi5wb3AoKTpsPSEwO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09bilmb3Iocz1PYmplY3Qua2V5cyhuKSxsPSExLHI9cy5sZW5ndGgtMTtyPj0wO3ItLSlpKG5bc1tyXV0sbyhhLHNbcl0pKT9kZWxldGUgbltzW3JdXTpsPSEwO2lmKGwpcmV0dXJufX1mdW5jdGlvbiBjKHQpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dHx8Im9iamVjdCI9PXR5cGVvZiB0JiYoZCh0KT8hdC5sZW5ndGg6IU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX12YXIgZj10KCJmYXN0LWlzbnVtZXJpYyIpLGQ9dCgiLi9pc19hcnJheSIpLHA9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxtPXQoIi4uL3Bsb3RfYXBpL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGYoZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixpLG8scz0wLGw9ZS5zcGxpdCgiLiIpO3M8bC5sZW5ndGg7KXtpZihyPVN0cmluZyhsW3NdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pbFtzXT1yWzFdO2Vsc2V7aWYoMCE9PXMpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7bC5zcGxpY2UoMCwxKX1mb3IoaT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGkubGVuZ3RoO28rKylzKyssbC5zcGxpY2UocywwLE51bWJlcihpW29dKSl9cysrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9oKHQsZSxsKTp7c2V0OmEodCxsLGUpLGdldDpuKHQsbCksYXN0cjplLHBhcnRzOmwsb2JqOnR9fTt2YXIgdj0vKF58XC4pKChkb21haW58cmFuZ2UpKFwuW3h5XSk/fGFyZ3N8cGFyYWxsZWxzKSQvLGc9LyhefFwuKWFyZ3NcWy99LHsiLi4vcGxvdF9hcGkvY29udGFpbmVyX2FycmF5X21hdGNoIjo3NDcsIi4vaXNfYXJyYXkiOjcyNSwiLi9pc19wbGFpbl9vYmplY3QiOjcyNiwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDczMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sNzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9W107ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt0LmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goImVuZCIsZnVuY3Rpb24odCl7dmFyIGU9YS5pbmRleE9mKHQpOy0xIT09ZSYmYS5zcGxpY2UoZSwxKSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfWlmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIG89MWUzO2koZSk/bz1lOiJsb25nIj09PWUmJihvPTNlMyk7dmFyIHM9bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7cy5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCk7cy5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKCJidXR0b24iKS5jbGFzc2VkKCJub3RpZmllci1jbG9zZSIsITApLmh0bWwoIiZ0aW1lczsiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuY2FsbChyKX0pO2Zvcih2YXIgaT1lLmFwcGVuZCgicCIpLGE9dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxzPTA7czxhLmxlbmd0aDtzKyspcyYmaS5hcHBlbmQoImJyIiksaS5hcHBlbmQoInNwYW4iKS50ZXh0KGFbc10pO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShvKS5jYWxsKHIpfSl9fX0se2QzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDczMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NldGN1cnNvciIpLGk9ImRhdGEtc2F2ZWRjdXJzb3IiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cihpKTtpZihlKXtpZighcil7Zm9yKHZhciBhPSh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTswPT09cy5pbmRleE9mKCJjdXJzb3ItIikmJnQuYXR0cihpLHMuc3Vic3RyKDcpKS5jbGFzc2VkKHMsITEpfXQuYXR0cihpKXx8dC5hdHRyKGksIiEhIil9bih0LGUpfWVsc2UgciYmKHQuYXR0cihpLG51bGwpLCIhISI9PT1yP24odCk6bih0LHIpKX19LHsiLi9zZXRjdXJzb3IiOjczOX1dLDczNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21hdHJpeCIpLmRvdCxpPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT1lLmV4cG9ydHM9e307YS50ZXN0ZXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPXRbMF0sbj10WzFdO3JldHVybiEocj09PWl8fHI8YXx8cj5vfHxuPT09aXx8bjxzfHxuPmwpJiYoIWV8fCFjKHQpKX1mdW5jdGlvbiByKHQsZSl7dmFyIHI9dFswXSx1PXRbMV07aWYocj09PWl8fHI8YXx8cj5vfHx1PT09aXx8dTxzfHx1PmwpcmV0dXJuITE7dmFyIGMsaCxmLGQscCxtPW4ubGVuZ3RoLHY9blswXVswXSxnPW5bMF1bMV0seT0wO2ZvcihjPTE7YzxtO2MrKylpZihoPXYsZj1nLHY9bltjXVswXSxnPW5bY11bMV0sZD1NYXRoLm1pbihoLHYpLCEocjxkfHxyPk1hdGgubWF4KGgsdil8fHU+TWF0aC5tYXgoZixnKSkpaWYodTxNYXRoLm1pbihmLGcpKXIhPT1kJiZ5Kys7ZWxzZXtpZihwPXY9PT1oP3U6Zisoci1oKSooZy1mKS8odi1oKSx1PT09cClyZXR1cm4gMSE9PWN8fCFlO3U8PXAmJnIhPT1kJiZ5Kyt9cmV0dXJuIHklMj09MX12YXIgbj10LnNsaWNlKCksYT1uWzBdWzBdLG89YSxzPW5bMF1bMV0sbD1zO24ucHVzaChuWzBdKTtmb3IodmFyIHU9MTt1PG4ubGVuZ3RoO3UrKylhPU1hdGgubWluKGEsblt1XVswXSksbz1NYXRoLm1heChvLG5bdV1bMF0pLHM9TWF0aC5taW4ocyxuW3VdWzFdKSxsPU1hdGgubWF4KGwsblt1XVsxXSk7dmFyIGMsaD0hMTtyZXR1cm4gNT09PW4ubGVuZ3RoJiYoblswXVswXT09PW5bMV1bMF0/blsyXVswXT09PW5bM11bMF0mJm5bMF1bMV09PT1uWzNdWzFdJiZuWzFdWzFdPT09blsyXVsxXSYmKGg9ITAsYz1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PW5bMF1bMF19KTpuWzBdWzFdPT09blsxXVsxXSYmblsyXVsxXT09PW5bM11bMV0mJm5bMF1bMF09PT1uWzNdWzBdJiZuWzFdWzBdPT09blsyXVswXSYmKGg9ITAsYz1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXT09PW5bMF1bMV19KSkse3htaW46YSx4bWF4Om8seW1pbjpzLHltYXg6bCxwdHM6bixjb250YWluczpoP2U6cixpc1JlY3Q6aH19O3ZhciBvPWEuaXNTZWdtZW50QmVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbD10W2VdLHU9W3Rbcl1bMF0tbFswXSx0W3JdWzFdLWxbMV1dLGM9bih1LHUpLGg9TWF0aC5zcXJ0KGMpLGY9Wy11WzFdL2gsdVswXS9oXTtmb3IoYT1lKzE7YTxyO2ErKylpZihvPVt0W2FdWzBdLWxbMF0sdFthXVsxXS1sWzFdXSwocz1uKG8sdSkpPDB8fHM+Y3x8TWF0aC5hYnMobihvLGYpKT5pKXJldHVybiEwO3JldHVybiExfTthLmZpbHRlcj1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocil7dC5wdXNoKHIpO3ZhciBzPW4ubGVuZ3RoLGw9aTtuLnNwbGljZShhKzEpO2Zvcih2YXIgdT1sKzE7dTx0Lmxlbmd0aDt1KyspKHU9PT10Lmxlbmd0aC0xfHxvKHQsbCx1KzEsZSkpJiYobi5wdXNoKHRbdV0pLG4ubGVuZ3RoPHMtMiYmKGk9dSxhPW4ubGVuZ3RoLTEpLGw9dSl9dmFyIG49W3RbMF1dLGk9MCxhPTA7aWYodC5sZW5ndGg+MSl7cih0LnBvcCgpKX1yZXR1cm57YWRkUHQ6cixyYXc6dCxmaWx0ZXJlZDpufX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuL21hdHJpeCI6NzI4fV0sNzM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe3ZhciByLG49ZS50b1N0cmluZygpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXWluc3RhbmNlb2YgUmVnRXhwJiZ0W3JdLnRvU3RyaW5nKCk9PT1uKXJldHVybiB0O3QucHVzaChlKX1lbHNlIGUmJi0xPT09dC5pbmRleE9mKGUpJiZ0LnB1c2goZSk7cmV0dXJuIHR9fSx7fV0sNzM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHIsbj1bXSxhPTA7YTxlLmxlbmd0aDthKyspcj1lW2FdLG5bYV09cj09PXQ/cjoib2JqZWN0Ij09dHlwZW9mIHI/QXJyYXkuaXNBcnJheShyKT9pLmV4dGVuZERlZXAoW10scik6aS5leHRlbmREZWVwQWxsKHt9LHIpOnI7cmV0dXJuIG59dmFyIGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLG89e307by5hZGQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzO2lmKHQudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0scz10LnVuZG9RdWV1ZS5pbmRleCx0LmF1dG9wbGF5KXJldHVybiB2b2lkKHQudW5kb1F1ZXVlLmluU2VxdWVuY2V8fCh0LmF1dG9wbGF5PSExKSk7IXQudW5kb1F1ZXVlLnNlcXVlbmNlfHx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPyhvPXt1bmRvOntjYWxsczpbXSxhcmdzOltdfSxyZWRvOntjYWxsczpbXSxhcmdzOltdfX0sdC51bmRvUXVldWUucXVldWUuc3BsaWNlKHMsdC51bmRvUXVldWUucXVldWUubGVuZ3RoLXMsbyksdC51bmRvUXVldWUuaW5kZXgrPTEpOm89dC51bmRvUXVldWUucXVldWVbcy0xXSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExLG8mJihvLnVuZG8uY2FsbHMudW5zaGlmdChlKSxvLnVuZG8uYXJncy51bnNoaWZ0KHIpLG8ucmVkby5jYWxscy5wdXNoKG4pLG8ucmVkby5hcmdzLnB1c2goaSkpLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aD5hLnF1ZXVlTGVuZ3RoJiYodC51bmRvUXVldWUucXVldWUuc2hpZnQoKSx0LnVuZG9RdWV1ZS5pbmRleC0tKX0sby5zdGFydFNlcXVlbmNlPWZ1bmN0aW9uKHQpe3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0sdC51bmRvUXVldWUuc2VxdWVuY2U9ITAsdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMH0sby5zdG9wU2VxdWVuY2U9ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExfSxvLnVuZG89ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gdm9pZCB0LmZyYW1ld29yay51bmRvKCk7aWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleDw9MCkpe2Zvcih0LnVuZG9RdWV1ZS5pbmRleC0tLGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS51bmRvLmNhbGxzLmxlbmd0aDtyKyspby5wbG90RG8odCxlLnVuZG8uY2FsbHNbcl0sZS51bmRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMX19LG8ucmVkbz1mdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiB2b2lkIHQuZnJhbWV3b3JrLnJlZG8oKTtpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4Pj10LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgpKXtmb3IoZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnJlZG8uY2FsbHMubGVuZ3RoO3IrKylvLnBsb3REbyh0LGUucmVkby5jYWxsc1tyXSxlLnJlZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExLHQudW5kb1F1ZXVlLmluZGV4Kyt9fSxvLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPW4odCxyKSxlLmFwcGx5KG51bGwscil9LGUuZXhwb3J0cz1vfSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6NzUyfV0sNzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXNfYXJyYXkiKSxpPXQoIi4vaXNfcGxhaW5fb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIGE9T2JqZWN0LmtleXMocnx8e30pLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPXJbc10sdT1lW3NdO2lmKCJfIj09PXMuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2YgbCl7aWYocyBpbiBlKWNvbnRpbnVlO2Vbc109bH1lbHNlIGlmKG4obCkmJm4odSkmJmkobFswXSkpZm9yKHZhciBjPTA7YzxsLmxlbmd0aDtjKyspaShsW2NdKSYmaSh1W2NdKSYmdCh1W2NdLGxbY10pO2Vsc2UgaShsKSYmaSh1KSYmKHQodSxsKSxPYmplY3Qua2V5cyh1KS5sZW5ndGh8fGRlbGV0ZSBlW3NdKX19fSx7Ii4vaXNfYXJyYXkiOjcyNSwiLi9pc19wbGFpbl9vYmplY3QiOjcyNn1dLDczODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQ8ZX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0PmV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0Pj1lfXZhciBzPXQoImZhc3QtaXNudW1lcmljIiksbD10KCIuL2xvZ2dlcnMiKTtyLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKHMoZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZSktMTpNYXRoLmZsb29yKCh0LWUuc3RhcnQpL2Uuc2l6ZSk7dmFyIHUsYyxoPTAsZj1lLmxlbmd0aCxkPTA7Zm9yKGM9ZVtlLmxlbmd0aC0xXT49ZVswXT9yP246aTpyP286YTtoPGYmJmQrKzwxMDA7KXU9TWF0aC5mbG9vcigoaCtmKS8yKSxjKGVbdV0sdCk/aD11KzE6Zj11O3JldHVybiBkPjkwJiZsLmxvZygiTG9uZyBiaW5hcnkgc2VhcmNoLi4uIiksaC0xfSxyLnNvcnRlckFzYz1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LHIuc29ydGVyRGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0sci5kaXN0aW5jdFZhbHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO2Uuc29ydChyLnNvcnRlckFzYyk7Zm9yKHZhciBuPWUubGVuZ3RoLTEsaT1lW25dLWVbMF18fDEsYT1pLyhufHwxKS8xZTQsbz1bZVswXV0scz0wO3M8bjtzKyspZVtzKzFdPmVbc10rYSYmKGk9TWF0aC5taW4oaSxlW3MrMV0tZVtzXSksby5wdXNoKGVbcysxXSkpO3JldHVybnt2YWxzOm8sbWluRGlmZjppfX0sci5yb3VuZFVwPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGgtMSxvPTAscz1yPzA6MSxsPXI/MTowLHU9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjtpPGEmJm8rKzwxMDA7KW49dSgoaSthKS8yKSxlW25dPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfX0seyIuL2xvZ2dlcnMiOjcyNywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDczOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSksZSYmdC5jbGFzc2VkKCJjdXJzb3ItIitlLCEwKX19LHt9XSw3NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGk9ZnVuY3Rpb24oKXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiByLnRleHRDb250ZW50PSJXZWJnbCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHA6Ly9nZXQud2ViZ2wub3JnIGZvciBtb3JlIGluZm8iLHIuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixyLnN0eWxlLmZvbnRTaXplPSIyNHB4IixyLnN0eWxlLmNvbG9yPW4uZGVmYXVsdHNbMF0sdC5jb250YWluZXIuYXBwZW5kQ2hpbGQociksdC5jb250YWluZXIuc3R5bGUuYmFja2dyb3VuZD0iI0ZGRkZGRiIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKCJodHRwOi8vZ2V0LndlYmdsLm9yZyIpfSwhMX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjAyfV0sNzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ci5hZ2dOdW1zPWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBvLHM7aWYoYXx8KGE9aS5sZW5ndGgpLG4oZSl8fChlPSExKSxBcnJheS5pc0FycmF5KGlbMF0pKXtmb3Iocz1uZXcgQXJyYXkoYSksbz0wO288YTtvKyspc1tvXT1yLmFnZ051bXModCxlLGlbb10pO2k9c31mb3Iobz0wO288YTtvKyspbihlKT9uKGlbb10pJiYoZT10KCtlLCtpW29dKSk6ZT1pW29dO3JldHVybiBlfSxyLmxlbj1mdW5jdGlvbih0KXtyZXR1cm4gci5hZ2dOdW1zKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9LDAsdCl9LHIubWVhbj1mdW5jdGlvbih0LGUpe3JldHVybiBlfHwoZT1yLmxlbih0KSksci5hZ2dOdW1zKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0sMCx0KS9lfSxyLnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLG4oaSl8fChpPXIubWVhbih0LGUpKSxyLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9LDAsdCkvZX0sci5zdGRldj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguc3FydChyLnZhcmlhbmNlKHQsZSxuKSl9LHIuaW50ZXJwPWZ1bmN0aW9uKHQsZSl7aWYoIW4oZSkpdGhyb3cibiBzaG91bGQgYmUgYSBmaW5pdGUgbnVtYmVyIjtpZigoZT1lKnQubGVuZ3RoLS41KTwwKXJldHVybiB0WzBdO2lmKGU+dC5sZW5ndGgtMSlyZXR1cm4gdFt0Lmxlbmd0aC0xXTt2YXIgcj1lJTE7cmV0dXJuIHIqdFtNYXRoLmNlaWwoZSldKygxLXIpKnRbTWF0aC5mbG9vcihlKV19fSx7ImZhc3QtaXNudW1lcmljIjoxMjl9XSw3NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1pKHQpO3JldHVybiBlLmxlbmd0aD9lOlswLDAsMCwxXX12YXIgaT10KCJjb2xvci1yZ2JhIik7ZS5leHBvcnRzPW59LHsiY29sb3ItcmdiYSI6OTN9XSw3NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlcGxhY2UoZywiXFxsdCAiKS5yZXBsYWNlKHksIlxcZ3QgIil9ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49Im1hdGgtb3V0cHV0LSIrZi5yYW5kc3RyKFtdLDY0KSxhPWguc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKHtpZDpufSkuc3R5bGUoe3Zpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pLnN0eWxlKHsiZm9udC1zaXplIjplLmZvbnRTaXplKyJweCJ9KS50ZXh0KGkodCkpO01hdGhKYXguSHViLlF1ZXVlKFsiVHlwZXNldCIsTWF0aEpheC5IdWIsYS5ub2RlKCldLGZ1bmN0aW9uKCl7dmFyIGU9aC5zZWxlY3QoImJvZHkiKS5zZWxlY3QoIiNNYXRoSmF4X1NWR19nbHlwaHMiKTtpZihhLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIikuZW1wdHkoKXx8IWEuc2VsZWN0KCJzdmciKS5ub2RlKCkpZi5sb2coIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC4iLHQpLHIoKTtlbHNle3ZhciBuPWEuc2VsZWN0KCJzdmciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cihhLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIiksZSxuKX1hLnJlbW92ZSgpfSl9ZnVuY3Rpb24gbyh0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPXQubWF0Y2goZSk7cmV0dXJuIHImJihyWzNdfHxyWzRdKX1mdW5jdGlvbiBzKHQsZSl7aWYoIXQpcmV0dXJuIiI7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07dD10LnJlcGxhY2Uobi5yZWdFeHAsbi5zdWIpfXJldHVybiB0fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHModCxBKX1mdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcigpe2MrKzt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5zdmcsInRzcGFuIik7aC5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqbSsiZW0ifSksdC5hcHBlbmRDaGlsZChlKSxhPWU7dmFyIHI9dTtpZih1PVt7bm9kZTplfV0sci5sZW5ndGg+MSlmb3IodmFyIGk9MTtpPHIubGVuZ3RoO2krKyluKHJbaV0pfWZ1bmN0aW9uIG4odCl7dmFyIGUscj10LnR5cGUsbj17fTtpZigiYSI9PT1yKXtlPSJhIjt2YXIgbz10LnRhcmdldCxzPXQuaHJlZixsPXQucG9wdXA7cyYmKG49eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PW98fCJfIiE9PW8uY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6bywieGxpbms6eGxpbms6aHJlZiI6c30sbCYmKG4ub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJytsKyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgZT0idHNwYW4iO3Quc3R5bGUmJihuLnN0eWxlPXQuc3R5bGUpO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhkLnN2ZyxlKTtpZigic3VwIj09PXJ8fCJzdWIiPT09cil7aShhLHcpLGEuYXBwZW5kQ2hpbGQoYyk7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuc3ZnLCJ0c3BhbiIpO2koZix3KSxoLnNlbGVjdChmKS5hdHRyKCJkeSIsX1tyXSksbi5keT14W3JdLGEuYXBwZW5kQ2hpbGQoYyksYS5hcHBlbmRDaGlsZChmKX1lbHNlIGEuYXBwZW5kQ2hpbGQoYyk7aC5zZWxlY3QoYykuYXR0cihuKSxhPXQubm9kZT1jLHUucHVzaCh0KX1mdW5jdGlvbiBpKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZT1sKGUpLnJlcGxhY2UoVCwiICIpO3ZhciBhLHM9ITEsdT1bXSxjPS0xO0wudGVzdChlKT9yKCk6KGE9dCx1PVt7bm9kZTp0fV0pO2Zvcih2YXIgcD1lLnNwbGl0KFMpLHY9MDt2PHAubGVuZ3RoO3YrKyl7dmFyIGc9cFt2XSx5PWcubWF0Y2goRSksaz15JiZ5WzJdLnRvTG93ZXJDYXNlKCksQT1iW2tdO2lmKCJiciI9PT1rKXIoKTtlbHNlIGlmKHZvaWQgMD09PUEpaShhLGcpO2Vsc2UgaWYoeVsxXSkhZnVuY3Rpb24odCl7dmFyIHI9dS5wb3AoKTt0IT09ci50eXBlJiZmLmxvZygiU3RhcnQgdGFnIDwiK3IudHlwZSsiPiBkb2VzbnQgbWF0Y2ggZW5kIHRhZyA8Iit0KyI+LiBQcmV0ZW5kaW5nIGl0IGRpZCBtYXRjaC4iLGUpLGE9dVt1Lmxlbmd0aC0xXS5ub2RlfShrKTtlbHNle3ZhciBPPXlbNF0sUj17dHlwZTprfSxGPW8oTyxDKTtpZihGPyhGPUYucmVwbGFjZShQLCIkMSBmaWxsOiIpLEEmJihGKz0iOyIrQSkpOkEmJihGPUEpLEYmJihSLnN0eWxlPUYpLCJhIj09PWspe3M9ITA7dmFyIGo9byhPLHopO2lmKGope3ZhciBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtOLmhyZWY9aiwtMSE9PU0uaW5kZXhPZihOLnByb3RvY29sKSYmKFIuaHJlZj1lbmNvZGVVUkkoaiksUi50YXJnZXQ9byhPLEkpfHwiX2JsYW5rIixSLnBvcHVwPW8oTyxEKSl9fW4oUil9fXJldHVybiBzfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuLGksYSxvPXIuaG9yaXpvbnRhbEFsaWduLHM9ci52ZXJ0aWNhbEFsaWdufHwidG9wIixsPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGk9ImJvdHRvbSI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGwuYm90dG9tLW4uaGVpZ2h0fToibWlkZGxlIj09PXM/ZnVuY3Rpb24oKXtyZXR1cm4gbC50b3ArKGwuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBsLnRvcH0sYT0icmlnaHQiPT09bz9mdW5jdGlvbigpe3JldHVybiBsLnJpZ2h0LW4ud2lkdGh9OiJjZW50ZXIiPT09bz9mdW5jdGlvbigpe3JldHVybiBsLmxlZnQrKGwud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0fSxmdW5jdGlvbigpe3JldHVybiBuPXRoaXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuc3R5bGUoe3RvcDppKCktdS50b3ArInB4IixsZWZ0OmEoKS11LmxlZnQrInB4Iiwiei1pbmRleCI6MWUzfSksdGhpc319dmFyIGg9dCgiZDMiKSxmPXQoIi4uL2xpYiIpLGQ9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxwPXQoIi4uL2NvbnN0YW50cy9zdHJpbmdfbWFwcGluZ3MiKSxtPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsdj0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKCl7Yy5lbXB0eSgpfHwoZj10LmF0dHIoImNsYXNzIikrIi1tYXRoIixjLnNlbGVjdCgic3ZnLiIrZikucmVtb3ZlKCkpLHQudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksdSh0Lm5vZGUoKSxzKSYmdC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxyLnBvc2l0aW9uVGV4dCh0KSxpJiZpLmNhbGwodCl9dmFyIHM9dC50ZXh0KCksbD0hdC5hdHRyKCJkYXRhLW5vdGV4IikmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWF0aEpheCYmcy5tYXRjaCh2KSxjPWguc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKCFjLmVtcHR5KCkpe3ZhciBmPXQuYXR0cigiY2xhc3MiKT90LmF0dHIoImNsYXNzIikuc3BsaXQoIiAiKVswXToidGV4dCI7cmV0dXJuIGYrPSItbWF0aCIsYy5zZWxlY3RBbGwoInN2Zy4iK2YpLnJlbW92ZSgpLGMuc2VsZWN0QWxsKCJnLiIrZisiLWdyb3VwIikucmVtb3ZlKCksdC5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cih7ImRhdGEtdW5mb3JtYXR0ZWQiOnMsImRhdGEtbWF0aCI6Ik4ifSksbD8oZSYmZS5fcHJvbWlzZXN8fFtdKS5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3Quc3R5bGUoImRpc3BsYXkiLCJub25lIik7dmFyIHI9e2ZvbnRTaXplOnBhcnNlSW50KHQuc3R5bGUoImZvbnQtc2l6ZSIpLDEwKX07YShsWzJdLHIsZnVuY3Rpb24ocixhLGwpe2Muc2VsZWN0QWxsKCJzdmcuIitmKS5yZW1vdmUoKSxjLnNlbGVjdEFsbCgiZy4iK2YrIi1ncm91cCIpLnJlbW92ZSgpO3ZhciB1PXImJnIuc2VsZWN0KCJzdmciKTtpZighdXx8IXUubm9kZSgpKXJldHVybiBvKCksdm9pZCBlKCk7dmFyIGg9Yy5hcHBlbmQoImciKS5jbGFzc2VkKGYrIi1ncm91cCIsITApLmF0dHIoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLCJkYXRhLXVuZm9ybWF0dGVkIjpzLCJkYXRhLW1hdGgiOiJZIn0pO2gubm9kZSgpLmFwcGVuZENoaWxkKHUubm9kZSgpKSxhJiZhLm5vZGUoKSYmdS5ub2RlKCkuaW5zZXJ0QmVmb3JlKGEubm9kZSgpLmNsb25lTm9kZSghMCksdS5ub2RlKCkuZmlyc3RDaGlsZCksdS5hdHRyKHtjbGFzczpmLGhlaWdodDpsLmhlaWdodCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBtZWV0In0pLnN0eWxlKHtvdmVyZmxvdzoidmlzaWJsZSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgZD10LnN0eWxlKCJmaWxsIil8fCJibGFjayI7dS5zZWxlY3QoImciKS5hdHRyKHtmaWxsOmQsc3Ryb2tlOmR9KTt2YXIgcD1uKHUsIndpZHRoIiksbT1uKHUsImhlaWdodCIpLHY9K3QuYXR0cigieCIpLXAqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoInRleHQtYW5jaG9yIil8fCJzdGFydCJdLGc9cGFyc2VJbnQodC5zdHlsZSgiZm9udC1zaXplIiksMTApfHxuKHQsImhlaWdodCIpLHk9LWcvNDsieSI9PT1mWzBdPyhoLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrWy05MCwrdC5hdHRyKCJ4IiksK3QuYXR0cigieSIpXSsiKSB0cmFuc2xhdGUoIitbLXAvMix5LW0vMl0rIikifSksdS5hdHRyKHt4Oit0LmF0dHIoIngiKSx5Oit0LmF0dHIoInkiKX0pKToibCI9PT1mWzBdP3UuYXR0cih7eDp0LmF0dHIoIngiKSx5OnktbS8yfSk6ImEiPT09ZlswXT91LmF0dHIoe3g6MCx5Onl9KTp1LmF0dHIoe3g6dix5Oit0LmF0dHIoInkiKSt5LW0vMn0pLGkmJmkuY2FsbCh0LGgpLGUoaCl9KX0pKTpvKCksdH19O3ZhciBnPS8oPHwmbHQ7fCYjNjA7KS9nLHk9Lyg+fCZndDt8JiM2MjspL2csYj17c3VwOiJmb250LXNpemU6NzAlIixzdWI6ImZvbnQtc2l6ZTo3MCUiLGI6ImZvbnQtd2VpZ2h0OmJvbGQiLGk6ImZvbnQtc3R5bGU6aXRhbGljIixhOiJjdXJzb3I6cG9pbnRlciIsc3BhbjoiIixlbToiZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZCJ9LHg9e3N1YjoiMC4zZW0iLHN1cDoiLTAuNmVtIn0sXz17c3ViOiItMC4yMWVtIixzdXA6IjAuNDJlbSJ9LHc9Ilx1MjAwYiIsTT1bImh0dHA6IiwiaHR0cHM6IiwibWFpbHRvOiIsIiIsdm9pZCAwLCI6Il0saz1uZXcgUmVnRXhwKCI8Lz8oIitPYmplY3Qua2V5cyhiKS5qb2luKCJ8IikrIikoIFtePl0qKT8vPz4iLCJnIiksQT1PYmplY3Qua2V5cyhwLmVudGl0eVRvVW5pY29kZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntyZWdFeHA6bmV3IFJlZ0V4cCgiJiIrdCsiOyIsImciKSxzdWI6cC5lbnRpdHlUb1VuaWNvZGVbdF19fSksVD0vKFxyXG4/fFxuKS9nLFM9Lyg8W148Pl0qPikvLEU9LzwoXC8/KShbXiA+XSopKFxzKyguKikpPz4vaSxMPS88YnIoXHMrLiopPz4vaSxDPS8oXnxbXHMiJ10pc3R5bGVccyo9XHMqKCIoW14iXSopOz8ifCcoW14nXSopOz8nKS9pLHo9LyhefFtccyInXSlocmVmXHMqPVxzKigiKFteIl0qKSJ8JyhbXiddKiknKS9pLEk9LyhefFtccyInXSl0YXJnZXRccyo9XHMqKCIoW14iXHNdKikifCcoW14nXHNdKiknKS9pLEQ9LyhefFtccyInXSlwb3B1cFxzKj1ccyooIihbXHc9LF0qKSJ8JyhbXHc9LF0qKScpL2ksUD0vKF58Oylccypjb2xvcjovO3IucGxhaW5UZXh0PWZ1bmN0aW9uKHQpe3JldHVybih0fHwiIikucmVwbGFjZShrLCIgIil9LHIubGluZUNvdW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLnNpemUoKXx8MX0sci5wb3NpdGlvblRleHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/bnVsbD09PShlPW4uYXR0cih0KSkmJihuLmF0dHIodCwwKSxlPTApOm4uYXR0cih0LGUpLGV9dmFyIG49aC5zZWxlY3QodGhpcyksaT10KCJ4IixlKSxhPXQoInkiLHIpOyJ0ZXh0Ij09PXRoaXMubm9kZU5hbWUmJm4uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuYXR0cih7eDppLHk6YX0pfSl9LHIubWFrZUVkaXRhYmxlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe2koKSx0LnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgZSxyPWwuYXR0cigiY2xhc3MiKTsoZT1yPyIuIityLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmaC5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGUpLnN0eWxlKHtvcGFjaXR5OjB9KX1mdW5jdGlvbiBuKHQpe3ZhciBlPXQubm9kZSgpLHI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyLnNlbGVjdE5vZGVDb250ZW50cyhlKTt2YXIgbj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7bi5yZW1vdmVBbGxSYW5nZXMoKSxuLmFkZFJhbmdlKHIpLGUuZm9jdXMoKX1mdW5jdGlvbiBpKCl7dmFyIHI9aC5zZWxlY3QoYSksaT1yLnNlbGVjdCgiLnN2Zy1jb250YWluZXIiKSxvPWkuYXBwZW5kKCJkaXYiKTtvLmNsYXNzZWQoInBsdWdpbi1lZGl0YWJsZSBlZGl0YWJsZSIsITApLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLCJmb250LWZhbWlseSI6dC5zdHlsZSgiZm9udC1mYW1pbHkiKXx8IkFyaWFsIiwiZm9udC1zaXplIjp0LnN0eWxlKCJmb250LXNpemUiKXx8MTIsY29sb3I6ZS5maWxsfHx0LnN0eWxlKCJmaWxsIil8fCJibGFjayIsb3BhY2l0eToxLCJiYWNrZ3JvdW5kLWNvbG9yIjplLmJhY2tncm91bmR8fCJ0cmFuc3BhcmVudCIsb3V0bGluZToiI2ZmZmZmZjMzIDFweCBzb2xpZCIsbWFyZ2luOlstcGFyc2VGbG9hdCh0LnN0eWxlKCJmb250LXNpemUiKSkvOCsxLDAsMCwtMV0uam9pbigicHggIikrInB4IixwYWRkaW5nOiIwIiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSkuYXR0cih7Y29udGVudGVkaXRhYmxlOiEwfSkudGV4dChlLnRleHR8fHQuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpKS5jYWxsKGModCxpLGUpKS5vbigiYmx1ciIsZnVuY3Rpb24oKXthLl9lZGl0aW5nPSExLHQudGV4dCh0aGlzLnRleHRDb250ZW50KS5zdHlsZSh7b3BhY2l0eToxfSk7dmFyIGUscj1oLnNlbGVjdCh0aGlzKS5hdHRyKCJjbGFzcyIpOyhlPXI/Ii4iK3Iuc3BsaXQoIiAiKVswXSsiLW1hdGgtZ3JvdXAiOiJbY2xhc3MqPS1tYXRoLWdyb3VwXSIpJiZoLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoZSkuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBuPXRoaXMudGV4dENvbnRlbnQ7aC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLnJlbW92ZSgpLGguc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsbnVsbCkscy5lZGl0LmNhbGwodCxuKX0pLm9uKCJmb2N1cyIsZnVuY3Rpb24oKXt2YXIgdD10aGlzO2EuX2VkaXRpbmc9ITAsaC5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixmdW5jdGlvbigpe2lmKGguZXZlbnQudGFyZ2V0PT09dClyZXR1cm4hMTtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09by5ub2RlKCkmJm8ubm9kZSgpLmJsdXIoKX0pfSkub24oImtleXVwIixmdW5jdGlvbigpezI3PT09aC5ldmVudC53aGljaD8oYS5fZWRpdGluZz0hMSx0LnN0eWxlKHtvcGFjaXR5OjF9KSxoLnNlbGVjdCh0aGlzKS5zdHlsZSh7b3BhY2l0eTowfSkub24oImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuITF9KS50cmFuc2l0aW9uKCkucmVtb3ZlKCkscy5jYW5jZWwuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpKToocy5pbnB1dC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCksaC5zZWxlY3QodGhpcykuY2FsbChjKHQsaSxlKSkpfSkub24oImtleWRvd24iLGZ1bmN0aW9uKCl7MTM9PT1oLmV2ZW50LndoaWNoJiZ0aGlzLmJsdXIoKX0pLmNhbGwobil9dmFyIGE9ZS5nZCxvPWUuZGVsZWdhdGUscz1oLmRpc3BhdGNoKCJlZGl0IiwiaW5wdXQiLCJjYW5jZWwiKSxsPW98fHQ7aWYodC5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjpvPyJub25lIjoiYWxsIn0pLDEhPT10LnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoImJvbyIpO3JldHVybiBlLmltbWVkaWF0ZT9yKCk6bC5vbigiY2xpY2siLHIpLGgucmViaW5kKHQscywib24iKX19LHsiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njk4LCIuLi9jb25zdGFudHMvc3RyaW5nX21hcHBpbmdzIjo3MDUsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MDYsIi4uL2xpYiI6NzI0LGQzOjEyMH1dLDc0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ+MClyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwO3ZhciByPU1hdGgubG9nKE1hdGgubWluKGVbMF0sZVsxXSkpL01hdGguTE4xMDtyZXR1cm4gbihyKXx8KHI9TWF0aC5sb2coTWF0aC5tYXgoZVswXSxlWzFdKSkvTWF0aC5MTjEwLTYpLHJ9fSx7ImZhc3QtaXNudW1lcmljIjoxMjl9XSw3NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9LGk9dCgiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyIpLmxvY2F0aW9ubW9kZVRvTGF5ZXIsYT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO24uZ2V0VG9wb2pzb25OYW1lPWZ1bmN0aW9uKHQpe3JldHVyblt0LnNjb3BlLnJlcGxhY2UoLyAvZywiLSIpLCJfIix0LnJlc29sdXRpb24udG9TdHJpbmcoKSwibSJdLmpvaW4oIiIpfSxuLmdldFRvcG9qc29uUGF0aD1mdW5jdGlvbih0LGUpe3JldHVybiB0K2UrIi5qc29uIn0sbi5nZXRUb3BvanNvbkZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aVt0LmxvY2F0aW9ubW9kZV0sbj1lLm9iamVjdHNbcl07cmV0dXJuIGEoZSxuKS5mZWF0dXJlc319LHsiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyI6NzkwLCJ0b3BvanNvbi1jbGllbnQiOjUzNH1dLDc0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBGbG9hdDMyQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10W25dO3JldHVybiByfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEZsb2F0NjRBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbih0LGUpO2lmKHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpcmV0dXJuIGkodCxlKTt0aHJvdyBuZXcgRXJyb3IoIlRoaXMgYXJyYXkgdHlwZSBpcyBub3QgeWV0IHN1cHBvcnRlZCBieSBgdHJ1bmNhdGVgLiIpfX0se31dLDc0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8YS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goYVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWlbaS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsKIi4uL3JlZ2lzdHJ5Ijo4NDJ9XSw3NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt0cmFjZXM6ZnVuY3Rpb24oKXtyZXR1cm57ZG9jYWxjOiExLGRvY2FsY0F1dG9yYW5nZTohMSxkb3Bsb3Q6ITEsZG9zdHlsZTohMSxkb2NvbG9yYmFyczohMSxhdXRvcmFuZ2VPbjohMSxjbGVhckNhbGM6ITEsZnVsbFJlcGxvdDohMX19LGxheW91dDpmdW5jdGlvbigpe3JldHVybntkb2xlZ2VuZDohMSxkb3RpY2tzOiExLGRvbGF5b3V0c3R5bGU6ITEsZG9wbG90OiExLGRvY2FsYzohMSxkb21vZGViYXI6ITEsZG9jYW1lcmE6ITEsbGF5b3V0UmVwbG90OiExfX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9fX0se31dLDc0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT1mLmNsZWFuSWQocixuKSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT0ibWlkZGxlIixyPSJjZW50ZXIiO3JldHVybi0xIT09dC5pbmRleE9mKCJ0b3AiKT9lPSJ0b3AiOi0xIT09dC5pbmRleE9mKCJib3R0b20iKSYmKGU9ImJvdHRvbSIpLC0xIT09dC5pbmRleE9mKCJsZWZ0Iik/cj0ibGVmdCI6LTEhPT10LmluZGV4T2YoInJpZ2h0IikmJihyPSJyaWdodCIpLGUrIiAiK3J9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuc2VhcmNoKHApO2lmKGU+MClyZXR1cm4gdC5zdWJzdHIoMCxlKX12YXIgcz10KCJmYXN0LWlzbnVtZXJpYyIpLGw9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLHU9dCgiLi4vcmVnaXN0cnkiKSxjPXQoIi4uL2xpYiIpLGg9dCgiLi4vcGxvdHMvcGxvdHMiKSxmPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZD10KCIuLi9jb21wb25lbnRzL2NvbG9yIik7ci5nZXRHcmFwaERpdj1mdW5jdGlvbih0KXt2YXIgZTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0oZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSkpdGhyb3cgbmV3IEVycm9yKCJObyBET00gZWxlbWVudCB3aXRoIGlkICciK3QrIicgZXhpc3RzIG9uIHRoZSBwYWdlLiIpO3JldHVybiBlfWlmKG51bGw9PT10fHx2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiRE9NIGVsZW1lbnQgcHJvdmlkZWQgaXMgbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdH0sci5jbGVhclByb21pc2VRdWV1ZT1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKSYmdC5fcHJvbWlzZXMubGVuZ3RoPjAmJmMubG9nKCJDbGVhcmluZyBwcmV2aW91cyByZWplY3RlZCBwcm9taXNlcyBmcm9tIHF1ZXVlLiIpLHQuX3Byb21pc2VzPVtdfSxyLmNsZWFuTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7dHx8KHQ9e30pLHQueGF4aXMxJiYodC54YXhpc3x8KHQueGF4aXM9dC54YXhpczEpLGRlbGV0ZSB0LnhheGlzMSksdC55YXhpczEmJih0LnlheGlzfHwodC55YXhpcz10LnlheGlzMSksZGVsZXRlIHQueWF4aXMxKTt2YXIgaT1mLmxpc3Qoe19mdWxsTGF5b3V0OnR9KTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKXt2YXIgbz1pW2VdO28uYW5jaG9yJiYiZnJlZSIhPT1vLmFuY2hvciYmKG8uYW5jaG9yPWYuY2xlYW5JZChvLmFuY2hvcikpLG8ub3ZlcmxheWluZyYmKG8ub3ZlcmxheWluZz1mLmNsZWFuSWQoby5vdmVybGF5aW5nKSksby50eXBlfHwoby5pc2RhdGU/by50eXBlPSJkYXRlIjpvLmlzbG9nP28udHlwZT0ibG9nIjohMT09PW8uaXNkYXRlJiYhMT09PW8uaXNsb2cmJihvLnR5cGU9ImxpbmVhciIpKSwid2l0aHplcm8iIT09by5hdXRvcmFuZ2UmJiJ0b3plcm8iIT09by5hdXRvcmFuZ2V8fChvLmF1dG9yYW5nZT0hMCxvLnJhbmdlbW9kZT0idG96ZXJvIiksZGVsZXRlIG8uaXNsb2csZGVsZXRlIG8uaXNkYXRlLGRlbGV0ZSBvLmNhdGVnb3JpZXMsYShvLCJkb21haW4iKSYmZGVsZXRlIG8uZG9tYWluLHZvaWQgMCE9PW8uYXV0b3RpY2smJih2b2lkIDA9PT1vLnRpY2ttb2RlJiYoby50aWNrbW9kZT1vLmF1dG90aWNrPyJhdXRvIjoibGluZWFyIiksZGVsZXRlIG8uYXV0b3RpY2spfXZhciBzPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8cztlKyspe3ZhciB1PXQuYW5ub3RhdGlvbnNbZV07Yy5pc1BsYWluT2JqZWN0KHUpJiYodS5yZWYmJigicGFwZXIiPT09dS5yZWY/KHUueHJlZj0icGFwZXIiLHUueXJlZj0icGFwZXIiKToiZGF0YSI9PT11LnJlZiYmKHUueHJlZj0ieCIsdS55cmVmPSJ5IiksZGVsZXRlIHUucmVmKSxuKHUsInhyZWYiKSxuKHUsInlyZWYiKSl9dmFyIHA9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPHA7ZSsrKXt2YXIgbT10LnNoYXBlc1tlXTtjLmlzUGxhaW5PYmplY3QobSkmJihuKG0sInhyZWYiKSxuKG0sInlyZWYiKSl9dmFyIHY9dC5sZWdlbmQ7diYmKHYueD4zPyh2Lng9MS4wMix2LnhhbmNob3I9ImxlZnQiKTp2Lng8LTImJih2Lng9LS4wMix2LnhhbmNob3I9InJpZ2h0Iiksdi55PjM/KHYueT0xLjAyLHYueWFuY2hvcj0iYm90dG9tIik6di55PC0yJiYodi55PS0uMDIsdi55YW5jaG9yPSJ0b3AiKSksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSx0LnNjZW5lMSYmKHQuc2NlbmV8fCh0LnNjZW5lPXQuc2NlbmUxKSxkZWxldGUgdC5zY2VuZTEpO3ZhciBnPWguZ2V0U3VicGxvdElkcyh0LCJnbDNkIik7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHk9dFtnW2VdXSxiPXkuY2FtZXJhcG9zaXRpb247aWYoQXJyYXkuaXNBcnJheShiKSYmND09PWJbMF0ubGVuZ3RoKXt2YXIgeD1iWzBdLF89YlsxXSx3PWJbMl0sTT1sKFtdLHgpLGs9W107Zm9yKHI9MDtyPDM7KytyKWtbcl09X1tlXSt3Kk1bMis0KnJdO3kuY2FtZXJhPXtleWU6e3g6a1swXSx5OmtbMV0sejprWzJdfSxjZW50ZXI6e3g6X1swXSx5Ol9bMV0sejpfWzJdfSx1cDp7eDpNWzFdLHk6TVs1XSx6Ok1bOV19fSxkZWxldGUgeS5jYW1lcmFwb3NpdGlvbn19cmV0dXJuIGQuY2xlYW4odCksdH0sci5jbGVhbkRhdGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10sbz0odC5jb25jYXQoQXJyYXkuaXNBcnJheShlKT9lOltdKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInVpZCJpbiB0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnVpZH0pKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsLHA9dFtzXTtpZighKCJ1aWQiaW4gcCl8fC0xIT09bi5pbmRleE9mKHAudWlkKSl7dmFyIG07Zm9yKGw9MDtsPDEwMCYmKG09Yy5yYW5kc3RyKG8pLC0xIT09bi5pbmRleE9mKG0pKTtsKyspO3AudWlkPWMucmFuZHN0cihvKSxvLnB1c2gocC51aWQpfWlmKG4ucHVzaChwLnVpZCksImhpc3RvZ3JhbXkiPT09cC50eXBlJiYieGJpbnMiaW4gcCYmISgieWJpbnMiaW4gcCkmJihwLnliaW5zPXAueGJpbnMsZGVsZXRlIHAueGJpbnMpLHAuZXJyb3JfeSYmIm9wYWNpdHkiaW4gcC5lcnJvcl95KXt2YXIgdj1kLmRlZmF1bHRzLGc9cC5lcnJvcl95LmNvbG9yfHwodS50cmFjZUlzKHAsImJhciIpP2QuZGVmYXVsdExpbmU6dltzJXYubGVuZ3RoXSk7cC5lcnJvcl95LmNvbG9yPWQuYWRkT3BhY2l0eShkLnJnYihnKSxkLm9wYWNpdHkoZykqcC5lcnJvcl95Lm9wYWNpdHkpLGRlbGV0ZSBwLmVycm9yX3kub3BhY2l0eX1pZigiYmFyZGlyImluIHAmJigiaCIhPT1wLmJhcmRpcnx8IXUudHJhY2VJcyhwLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1wLnR5cGUuc3Vic3RyKDAsOSl8fChwLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEocCkpLGRlbGV0ZSBwLmJhcmRpciksImhpc3RvZ3JhbXkiPT09cC50eXBlJiZyLnN3YXBYWURhdGEocCksImhpc3RvZ3JhbXgiIT09cC50eXBlJiYiaGlzdG9ncmFteSIhPT1wLnR5cGV8fChwLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gcCYmKHAuY29sb3JzY2FsZT1wLnNjbCxkZWxldGUgcC5zY2wpLCJyZXZlcnNlc2NsImluIHAmJihwLnJldmVyc2VzY2FsZT1wLnJldmVyc2VzY2wsZGVsZXRlIHAucmV2ZXJzZXNjbCkscC54YXhpcyYmKHAueGF4aXM9Zi5jbGVhbklkKHAueGF4aXMsIngiKSkscC55YXhpcyYmKHAueWF4aXM9Zi5jbGVhbklkKHAueWF4aXMsInkiKSksdS50cmFjZUlzKHAsImdsM2QiKSYmcC5zY2VuZSYmKHAuc2NlbmU9aC5zdWJwbG90c1JlZ2lzdHJ5LmdsM2QuY2xlYW5JZChwLnNjZW5lKSksdS50cmFjZUlzKHAsInBpZSIpfHx1LnRyYWNlSXMocCwiYmFyIil8fChBcnJheS5pc0FycmF5KHAudGV4dHBvc2l0aW9uKT9wLnRleHRwb3NpdGlvbj1wLnRleHRwb3NpdGlvbi5tYXAoaSk6cC50ZXh0cG9zaXRpb24mJihwLnRleHRwb3NpdGlvbj1pKHAudGV4dHBvc2l0aW9uKSkpLHUudHJhY2VJcyhwLCIyZE1hcCIpJiYoIllJR25CdSI9PT1wLmNvbG9yc2NhbGUmJihwLmNvbG9yc2NhbGU9IllsR25CdSIpLCJZSU9yUmQiPT09cC5jb2xvcnNjYWxlJiYocC5jb2xvcnNjYWxlPSJZbE9yUmQiKSksdS50cmFjZUlzKHAsIm1hcmtlckNvbG9yc2NhbGUiKSYmcC5tYXJrZXIpe3ZhciB5PXAubWFya2VyOyJZSUduQnUiPT09eS5jb2xvcnNjYWxlJiYoeS5jb2xvcnNjYWxlPSJZbEduQnUiKSwiWUlPclJkIj09PXkuY29sb3JzY2FsZSYmKHkuY29sb3JzY2FsZT0iWWxPclJkIil9aWYoInN1cmZhY2UiPT09cC50eXBlJiZjLmlzUGxhaW5PYmplY3QocC5jb250b3Vycykpe3ZhciBiPVsieCIsInkiLCJ6Il07Zm9yKGw9MDtsPGIubGVuZ3RoO2wrKyl7dmFyIHg9cC5jb250b3Vyc1tiW2xdXTtjLmlzUGxhaW5PYmplY3QoeCkmJih4LmhpZ2hsaWdodENvbG9yJiYoeC5oaWdobGlnaHRjb2xvcj14LmhpZ2hsaWdodENvbG9yLGRlbGV0ZSB4LmhpZ2hsaWdodENvbG9yKSx4LmhpZ2hsaWdodFdpZHRoJiYoeC5oaWdobGlnaHR3aWR0aD14LmhpZ2hsaWdodFdpZHRoLGRlbGV0ZSB4LmhpZ2hsaWdodFdpZHRoKSl9fWlmKEFycmF5LmlzQXJyYXkocC50cmFuc2Zvcm1zKSl7dmFyIF89cC50cmFuc2Zvcm1zO2ZvcihsPTA7bDxfLmxlbmd0aDtsKyspe3ZhciB3PV9bbF07aWYoYy5pc1BsYWluT2JqZWN0KHcpKXN3aXRjaCh3LnR5cGUpe2Nhc2UiZmlsdGVyIjp3LmZpbHRlcnNyYyYmKHcudGFyZ2V0PXcuZmlsdGVyc3JjLGRlbGV0ZSB3LmZpbHRlcnNyYyksdy5jYWxlbmRhciYmKHcudmFsdWVjYWxlbmRhcnx8KHcudmFsdWVjYWxlbmRhcj13LmNhbGVuZGFyKSxkZWxldGUgdy5jYWxlbmRhcik7YnJlYWs7Y2FzZSJncm91cGJ5IjppZih3LnN0eWxlcz13LnN0eWxlc3x8dy5zdHlsZSx3LnN0eWxlcyYmIUFycmF5LmlzQXJyYXkody5zdHlsZXMpKXt2YXIgTT13LnN0eWxlcyxrPU9iamVjdC5rZXlzKE0pO3cuc3R5bGVzPVtdO2Zvcih2YXIgQT0wO0E8ay5sZW5ndGg7QSsrKXcuc3R5bGVzLnB1c2goe3RhcmdldDprW0FdLHZhbHVlOk1ba1tBXV19KX19fX1hKHAsImxpbmUiKSYmZGVsZXRlIHAubGluZSwibWFya2VyImluIHAmJihhKHAubWFya2VyLCJsaW5lIikmJmRlbGV0ZSBwLm1hcmtlci5saW5lLGEocCwibWFya2VyIikmJmRlbGV0ZSBwLm1hcmtlciksZC5jbGVhbihwKX19LHIuc3dhcFhZRGF0YT1mdW5jdGlvbih0KXt2YXIgZTtpZihjLnN3YXBBdHRycyh0LFsiPyIsIj8wIiwiZD8iLCI/YmlucyIsIm5iaW5zPyIsImF1dG9iaW4/IiwiP3NyYyIsImVycm9yXz8iXSksQXJyYXkuaXNBcnJheSh0LnopJiZBcnJheS5pc0FycmF5KHQuelswXSkmJih0LnRyYW5zcG9zZT9kZWxldGUgdC50cmFuc3Bvc2U6dC50cmFuc3Bvc2U9ITApLHQuZXJyb3JfeCYmdC5lcnJvcl95KXt2YXIgcj10LmVycm9yX3ksbj0iY29weV95c3R5bGUiaW4gcj9yLmNvcHlfeXN0eWxlOiEoci5jb2xvcnx8ci50aGlja25lc3N8fHIud2lkdGgpO2Muc3dhcEF0dHJzKHQsWyJlcnJvcl8/LmNvcHlfeXN0eWxlIl0pLG4mJmMuc3dhcEF0dHJzKHQsWyJlcnJvcl8/LmNvbG9yIiwiZXJyb3JfPy50aGlja25lc3MiLCJlcnJvcl8/LndpZHRoIl0pfWlmKCJzdHJpbmciPT10eXBlb2YgdC5ob3ZlcmluZm8pe3ZhciBpPXQuaG92ZXJpbmZvLnNwbGl0KCIrIik7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKykieCI9PT1pW2VdP2lbZV09InkiOiJ5Ij09PWlbZV0mJihpW2VdPSJ4Iik7dC5ob3ZlcmluZm89aS5qb2luKCIrIil9fSxyLmNvZXJjZVRyYWNlSW5kaWNlcz1mdW5jdGlvbih0LGUpe3JldHVybiBzKGUpP1tlXTpBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD9lOnQuZGF0YS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pfSxyLm1hbmFnZUFycmF5Q29udGFpbmVycz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vYmosaT10LnBhcnRzLGE9aS5sZW5ndGgsbz1pW2EtMV0sbD1zKG8pO2lmKGwmJm51bGw9PT1lKXt2YXIgdT1pLnNsaWNlKDAsYS0xKS5qb2luKCIuIik7Yy5uZXN0ZWRQcm9wZXJ0eShuLHUpLmdldCgpLnNwbGljZShvLDEpfWVsc2UgbCYmdm9pZCAwPT09dC5nZXQoKT8odm9pZCAwPT09dC5nZXQoKSYmKHJbdC5hc3RyXT1udWxsKSx0LnNldChlKSk6dC5zZXQoZSl9O3ZhciBwPS8oXC5bXlxbXF1cLl0rfFxbW15cW1xdXC5dK1xdKSQvO3IuaGFzUGFyZW50PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW8oZSk7cjspe2lmKHIgaW4gdClyZXR1cm4hMDtyPW8ocil9cmV0dXJuITF9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vbGliIjo3MjQsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4uL3JlZ2lzdHJ5Ijo4NDIsImZhc3QtaXNudW1lcmljIjoxMjksImdsLW1hdDQvZnJvbVF1YXQiOjE3Nn1dLDc1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvbmVzdGVkX3Byb3BlcnR5IiksaT10KCIuLi9saWIvaXNfcGxhaW5fb2JqZWN0IiksYT10KCIuLi9saWIvbm9vcCIpLG89dCgiLi4vbGliL2xvZ2dlcnMiKSxzPXQoIi4uL2xpYi9zZWFyY2giKS5zb3J0ZXJBc2MsbD10KCIuLi9yZWdpc3RyeSIpO3IuY29udGFpbmVyQXJyYXlNYXRjaD10KCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO3ZhciB1PXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuImFkZCI9PT10fHxpKHQpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwicmVtb3ZlIj09PXR9O3IuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGg9ZS5hc3RyLGY9bC5nZXRDb21wb25lbnRNZXRob2QoaCwic3VwcGx5TGF5b3V0RGVmYXVsdHMiKSxkPWwuZ2V0Q29tcG9uZW50TWV0aG9kKGgsImRyYXciKSxwPWwuZ2V0Q29tcG9uZW50TWV0aG9kKGgsImRyYXdPbmUiKSxtPWkucmVwbG90fHxpLnJlY2FsY3x8Zj09PWF8fGQ9PT1hLHY9dC5sYXlvdXQsZz10Ll9mdWxsTGF5b3V0O2lmKHJbIiJdKXtPYmplY3Qua2V5cyhyKS5sZW5ndGg+MSYmby53YXJuKCJGdWxsIGFycmF5IGVkaXRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBlZGl0cyIsaCk7dmFyIHk9clsiIl1bIiJdO2lmKGMoeSkpZS5zZXQobnVsbCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gby53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBhcnJheSBlZGl0IHZhbHVlIixoLHkpLCEwO2Uuc2V0KHkpfXJldHVybiFtJiYoZih2LGcpLGQodCksITApfXZhciBiLHgsXyx3LE0sayxBLFQ9T2JqZWN0LmtleXMocikubWFwKE51bWJlcikuc29ydChzKSxTPWUuZ2V0KCksRT1TfHxbXSxMPW4oZyxoKS5nZXQoKSxDPVtdLHo9LTEsST1FLmxlbmd0aDtmb3IoYj0wO2I8VC5sZW5ndGg7YisrKWlmKF89VFtiXSx3PXJbX10sTT1PYmplY3Qua2V5cyh3KSxrPXdbIiJdLEE9dShrKSxfPDB8fF8+RS5sZW5ndGgtKEE/MDoxKSlvLndhcm4oImluZGV4IG91dCBvZiByYW5nZSIsaCxfKTtlbHNlIGlmKHZvaWQgMCE9PWspTS5sZW5ndGg+MSYmby53YXJuKCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC4iLGgsXyksYyhrKT9DLnB1c2goXyk6QT8oImFkZCI9PT1rJiYoaz17fSksRS5zcGxpY2UoXywwLGspLEwmJkwuc3BsaWNlKF8sMCx7fSkpOm8ud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IGVkaXQgdmFsdWUiLGgsXyxrKSwtMT09PXomJih6PV8pO2Vsc2UgZm9yKHg9MDt4PE0ubGVuZ3RoO3grKyluKEVbX10sTVt4XSkuc2V0KHdbTVt4XV0pO2ZvcihiPUMubGVuZ3RoLTE7Yj49MDtiLS0pRS5zcGxpY2UoQ1tiXSwxKSxMJiZMLnNwbGljZShDW2JdLDEpO2lmKEUubGVuZ3RoP1N8fGUuc2V0KEUpOmUuc2V0KG51bGwpLG0pcmV0dXJuITE7aWYoZih2LGcpLHAhPT1hKXt2YXIgRDtpZigtMT09PXopRD1UO2Vsc2V7Zm9yKEk9TWF0aC5tYXgoRS5sZW5ndGgsSSksRD1bXSxiPTA7YjxULmxlbmd0aCYmISgoXz1UW2JdKT49eik7YisrKUQucHVzaChfKTtmb3IoYj16O2I8STtiKyspRC5wdXNoKGIpfWZvcihiPTA7YjxELmxlbmd0aDtiKyspcCh0LERbYl0pfWVsc2UgZCh0KTtyZXR1cm4hMH19LHsiLi4vbGliL2lzX3BsYWluX29iamVjdCI6NzI2LCIuLi9saWIvbG9nZ2VycyI6NzI3LCIuLi9saWIvbmVzdGVkX3Byb3BlcnR5Ijo3MzAsIi4uL2xpYi9ub29wIjo3MzEsIi4uL2xpYi9zZWFyY2giOjczOCwiLi4vcmVnaXN0cnkiOjg0MiwiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giOjc0N31dLDc1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dC5fZnVsbExheW91dC5fcGFwZXJkaXYuc3R5bGUoImJhY2tncm91bmQiLCJ3aGl0ZSIpLGIuZGVmYXVsdENvbmZpZy5zZXRCYWNrZ3JvdW5kKHQsZSl9ZnVuY3Rpb24gaSh0LGUpe3QuX2NvbnRleHR8fCh0Ll9jb250ZXh0PXguZXh0ZW5kRGVlcCh7fSxiLmRlZmF1bHRDb25maWcpKTt2YXIgcixpLGEsbz10Ll9jb250ZXh0O2lmKGUpe2ZvcihpPU9iamVjdC5rZXlzKGUpLHI9MDtyPGkubGVuZ3RoO3IrKykiZWRpdGFibGUiIT09KGE9aVtyXSkmJiJlZGl0cyIhPT1hJiZhIGluIG8mJigic2V0QmFja2dyb3VuZCI9PT1hJiYib3BhcXVlIj09PWVbYV0/b1thXT1uOm9bYV09ZVthXSk7ZS5wbG90M2RQaXhlbFJhdGlvJiYhby5wbG90R2xQaXhlbFJhdGlvJiYoby5wbG90R2xQaXhlbFJhdGlvPW8ucGxvdDNkUGl4ZWxSYXRpbyk7dmFyIHM9ZS5lZGl0YWJsZTtpZih2b2lkIDAhPT1zKWZvcihvLmVkaXRhYmxlPXMsaT1PYmplY3Qua2V5cyhvLmVkaXRzKSxyPTA7cjxpLmxlbmd0aDtyKyspby5lZGl0c1tpW3JdXT1zO2lmKGUuZWRpdHMpZm9yKGk9T2JqZWN0LmtleXMoZS5lZGl0cykscj0wO3I8aS5sZW5ndGg7cisrKShhPWlbcl0paW4gby5lZGl0cyYmKG8uZWRpdHNbYV09ZS5lZGl0c1thXSl9by5zdGF0aWNQbG90JiYoby5lZGl0YWJsZT0hMSxvLmVkaXRzPXt9LG8uYXV0b3NpemFibGU9ITEsby5zY3JvbGxab29tPSExLG8uZG91YmxlQ2xpY2s9ITEsby5zaG93VGlwcz0hMSxvLnNob3dMaW5rPSExLG8uZGlzcGxheU1vZGVCYXI9ITEpLCJob3ZlciIhPT1vLmRpc3BsYXlNb2RlQmFyfHx5fHwoby5kaXNwbGF5TW9kZUJhcj0hMCl9ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49di5zZWxlY3QodCkuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSk7bi5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIgcGxvdGx5IiwhMCk7dmFyIGk9bi5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLGkuaHRtbCgiIiksZSYmKHQuZGF0YT1lKSxyJiYodC5sYXlvdXQ9ciksQS5tYW5hZ2VyLmZpbGxMYXlvdXQodCksaS5zdHlsZSh7d2lkdGg6dC5fZnVsbExheW91dC53aWR0aCsicHgiLGhlaWdodDp0Ll9mdWxsTGF5b3V0LmhlaWdodCsicHgifSksdC5mcmFtZXdvcms9QS5tYW5hZ2VyLmZyYW1ld29yayh0KSx0LmZyYW1ld29yayh7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSxpLm5vZGUoKSksdC5mcmFtZXdvcmsuc2V0VW5kb1BvaW50KCk7dmFyIGE9dC5mcmFtZXdvcmsuc3ZnKCksbz0xLHM9dC5fZnVsbExheW91dC50aXRsZTsiIiE9PXMmJnN8fChvPTApO3ZhciBsPWZ1bmN0aW9uKCl7dGhpcy5jYWxsKEMuY29udmVydFRvVHNwYW5zLHQpfSx1PWEuc2VsZWN0KCIudGl0bGUtZ3JvdXAgdGV4dCIpLmNhbGwobCk7aWYodC5fY29udGV4dC5lZGl0cy50aXRsZVRleHQpe3MmJiJDbGljayB0byBlbnRlciB0aXRsZSIhPT1zfHwobz0uMix1LmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjoiQ2xpY2sgdG8gZW50ZXIgdGl0bGUifSkudGV4dCgiQ2xpY2sgdG8gZW50ZXIgdGl0bGUiKS5zdHlsZSh7b3BhY2l0eTpvfSkub24oIm1vdXNlb3Zlci5vcGFjaXR5IixmdW5jdGlvbigpe3Yuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IiwxKX0pLm9uKCJtb3VzZW91dC5vcGFjaXR5IixmdW5jdGlvbigpe3Yuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxZTMpLnN0eWxlKCJvcGFjaXR5IiwwKX0pKTt2YXIgYz1mdW5jdGlvbigpe3RoaXMuY2FsbChDLm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IixmdW5jdGlvbihlKXt0LmZyYW1ld29yayh7bGF5b3V0Ont0aXRsZTplfX0pLHRoaXMudGV4dChlKS5jYWxsKGwpLHRoaXMuY2FsbChjKX0pLm9uKCJjYW5jZWwiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIik7dGhpcy50ZXh0KHQpLmNhbGwobCl9KX07dS5jYWxsKGMpfXJldHVybiB0Ll9jb250ZXh0LnNldEJhY2tncm91bmQodCx0Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IpLGsuYWRkTGlua3ModCksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saT1lKzEsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKW49dFtyXSxuPDA/YS5wdXNoKGkrbik6YS5wdXNoKG4pO3JldHVybiBhfWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuLGk7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7aWYoKGk9ZVtuXSkhPT1wYXJzZUludChpLDEwKSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gIityKyIgbXVzdCBiZSBpbnRlZ2VycyIpO2lmKGk+PXQuZGF0YS5sZW5ndGh8fGk8LXQuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIrIiBtdXN0IGJlIHZhbGlkIGluZGljZXMgZm9yIGdkLmRhdGEuIik7aWYoZS5pbmRleE9mKGksbisxKT4tMXx8aT49MCYmZS5pbmRleE9mKC10LmRhdGEubGVuZ3RoK2kpPi0xfHxpPDAmJmUuaW5kZXhPZih0LmRhdGEubGVuZ3RoK2kpPi0xKXRocm93IG5ldyBFcnJvcigiZWFjaCBpbmRleCBpbiAiK3IrIiBtdXN0IGJlIHVuaXF1ZS4iKX19ZnVuY3Rpb24gbCh0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheS4iKTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiY3VycmVudEluZGljZXMgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4iKTtpZihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLHModCxlLCJjdXJyZW50SW5kaWNlcyIpLHZvaWQgMD09PXJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksdm9pZCAwIT09ciYmcyh0LHIsIm5ld0luZGljZXMiKSx2b2lkIDAhPT1yJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3VycmVudCBhbmQgbmV3IGluZGljZXMgbXVzdCBiZSBvZiBlcXVhbCBsZW5ndGguIil9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG4saTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LiIpO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJ0cmFjZXMgbXVzdCBiZSBkZWZpbmVkLiIpO2ZvcihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLG49MDtuPGUubGVuZ3RoO24rKylpZigib2JqZWN0IiE9dHlwZW9mKGk9ZVtuXSl8fEFycmF5LmlzQXJyYXkoaSl8fG51bGw9PT1pKXRocm93IG5ldyBFcnJvcigiYWxsIHZhbHVlcyBpbiB0cmFjZXMgYXJyYXkgbXVzdCBiZSBub24tYXJyYXkgb2JqZWN0cyIpO2lmKHZvaWQgMD09PXJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksdm9pZCAwIT09ciYmci5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImlmIGluZGljZXMgaXMgc3BlY2lmaWVkLCB0cmFjZXMubGVuZ3RoIG11c3QgZXF1YWwgaW5kaWNlcy5sZW5ndGgiKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPXguaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIXguaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdCIpO2lmKHZvaWQgMD09PXIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO3ModCxyLCJpbmRpY2VzIik7Zm9yKHZhciBhIGluIGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIrYSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoaSYmKCEoYSBpbiBuKXx8IUFycmF5LmlzQXJyYXkoblthXSl8fG5bYV0ubGVuZ3RoIT09ZVthXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX1mdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpLGEscyxsLHUsYz14LmlzUGxhaW5PYmplY3QobiksaD1bXTtBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHI9byhyLHQuZGF0YS5sZW5ndGgtMSk7Zm9yKHZhciBmIGluIGUpZm9yKHZhciBkPTA7ZDxyLmxlbmd0aDtkKyspe2lmKGk9dC5kYXRhW3JbZF1dLHM9eC5uZXN0ZWRQcm9wZXJ0eShpLGYpLGE9cy5nZXQoKSxsPWVbZl1bZF0sIUFycmF5LmlzQXJyYXkobCkpdGhyb3cgbmV3IEVycm9yKCJhdHRyaWJ1dGU6ICIrZisiIGluZGV4OiAiK2QrIiBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIUFycmF5LmlzQXJyYXkoYSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogIitmKTt1PWM/bltmXVtkXTpuLGcodSl8fCh1PS0xKSxoLnB1c2goe3Byb3A6cyx0YXJnZXQ6YSxpbnNlcnQ6bCxtYXhwOk1hdGguZmxvb3IodSl9KX1yZXR1cm4gaH1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXtjKHQsZSxyLG4pO2Zvcih2YXIgbyxzLGwsdT1oKHQsZSxyLG4pLGY9W10sZD17fSxwPXt9LG09MDttPHUubGVuZ3RoO20rKylzPXVbbV0ucHJvcCxsPXVbbV0ubWF4cCxvPWkodVttXS50YXJnZXQsdVttXS5pbnNlcnQpLGw+PTAmJmw8by5sZW5ndGgmJihmPWEobyxsKSksbD11W21dLnRhcmdldC5sZW5ndGgscy5zZXQobyksQXJyYXkuaXNBcnJheShkW3MuYXN0cl0pfHwoZFtzLmFzdHJdPVtdKSxBcnJheS5pc0FycmF5KHBbcy5hc3RyXSl8fChwW3MuYXN0cl09W10pLGRbcy5hc3RyXS5wdXNoKGYpLHBbcy5hc3RyXS5wdXNoKGwpO3JldHVybnt1cGRhdGU6ZCxtYXhQb2ludHM6cH19ZnVuY3Rpb24gZCh0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBkLm1hcChmdW5jdGlvbigpe30pfWZ1bmN0aW9uIGkodCl7dmFyIGU9Yi5BeGVzLmlkMm5hbWUodCk7LTE9PT11LmluZGV4T2YoZSkmJnUucHVzaChlKX1mdW5jdGlvbiBhKHQpe3JldHVybiJMQVlPVVQiK3QrIi5hdXRvcmFuZ2UifWZ1bmN0aW9uIG8odCl7cmV0dXJuIkxBWU9VVCIrdCsiLnJhbmdlIn1mdW5jdGlvbiBzKHIsaSxhKXtpZihBcnJheS5pc0FycmF5KHIpKXJldHVybiB2b2lkIHIuZm9yRWFjaChmdW5jdGlvbih0KXtzKHQsaSxhKX0pO2lmKCEociBpbiBlfHxJLmhhc1BhcmVudChlLHIpKSl7dmFyIG87bz0iTEFZT1VUIj09PXIuc3Vic3RyKDAsNik/eC5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCxyLnJlcGxhY2UoIkxBWU9VVCIsIiIpKTp4Lm5lc3RlZFByb3BlcnR5KGZbZFthXV0sciksciBpbiB2fHwodltyXT1uKCkpLHZvaWQgMD09PXZbcl1bYV0mJih2W3JdW2FdPW8uZ2V0KCkpLHZvaWQgMCE9PWkmJm8uc2V0KGkpfX12YXIgbCx1LGM9dC5fZnVsbExheW91dCxoPXQuX2Z1bGxEYXRhLGY9dC5kYXRhLGQ9SS5jb2VyY2VUcmFjZUluZGljZXModCxyKSxwPVAudHJhY2VzKCksbT17fSx2PXt9LGc9e30seT1bIm1vZGUiLCJ2aXNpYmxlIiwidHlwZSIsIm9yaWVudGF0aW9uIiwiZmlsbCIsImhpc3RmdW5jIiwiaGlzdG5vcm0iLCJ0ZXh0IiwieCIsInkiLCJ6IiwiYSIsImIiLCJjIiwib3BlbiIsImhpZ2giLCJsb3ciLCJjbG9zZSIsImJhc2UiLCJ3aWR0aCIsIm9mZnNldCIsInh0eXBlIiwieDAiLCJkeCIsInl0eXBlIiwieTAiLCJkeSIsInhheGlzIiwieWF4aXMiLCJsaW5lLndpZHRoIiwiY29ubmVjdGdhcHMiLCJ0cmFuc3Bvc2UiLCJ6c21vb3RoIiwic2hvd3NjYWxlIiwibWFya2VyLnNob3dzY2FsZSIsInphdXRvIiwibWFya2VyLmNhdXRvIiwiYXV0b2NvbG9yc2NhbGUiLCJtYXJrZXIuYXV0b2NvbG9yc2NhbGUiLCJjb2xvcnNjYWxlIiwibWFya2VyLmNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJtYXJrZXIucmV2ZXJzZXNjYWxlIiwiYXV0b2JpbngiLCJuYmluc3giLCJ4YmlucyIsInhiaW5zLnN0YXJ0IiwieGJpbnMuZW5kIiwieGJpbnMuc2l6ZSIsImF1dG9iaW55IiwibmJpbnN5IiwieWJpbnMiLCJ5Ymlucy5zdGFydCIsInliaW5zLmVuZCIsInliaW5zLnNpemUiLCJlcnJvcl95IiwiZXJyb3JfeS52aXNpYmxlIiwiZXJyb3JfeS52YWx1ZSIsImVycm9yX3kudHlwZSIsImVycm9yX3kudHJhY2VyZWYiLCJlcnJvcl95LmFycmF5IiwiZXJyb3JfeS5zeW1tZXRyaWMiLCJlcnJvcl95LmFycmF5bWludXMiLCJlcnJvcl95LnZhbHVlbWludXMiLCJlcnJvcl95LnRyYWNlcmVmbWludXMiLCJlcnJvcl94IiwiZXJyb3JfeC52aXNpYmxlIiwiZXJyb3JfeC52YWx1ZSIsImVycm9yX3gudHlwZSIsImVycm9yX3gudHJhY2VyZWYiLCJlcnJvcl94LmFycmF5IiwiZXJyb3JfeC5zeW1tZXRyaWMiLCJlcnJvcl94LmFycmF5bWludXMiLCJlcnJvcl94LnZhbHVlbWludXMiLCJlcnJvcl94LnRyYWNlcmVmbWludXMiLCJzd2FweHkiLCJzd2FweHlheGVzIiwib3JpZW50YXRpb25heGVzIiwibWFya2VyLmNvbG9ycyIsInZhbHVlcyIsImxhYmVscyIsImxhYmVsMCIsImRsYWJlbCIsInNvcnQiLCJ0ZXh0aW5mbyIsInRleHRwb3NpdGlvbiIsInRleHRmb250LnNpemUiLCJ0ZXh0Zm9udC5mYW1pbHkiLCJ0ZXh0Zm9udC5jb2xvciIsImluc2lkZXRleHRmb250LnNpemUiLCJpbnNpZGV0ZXh0Zm9udC5mYW1pbHkiLCJpbnNpZGV0ZXh0Zm9udC5jb2xvciIsIm91dHNpZGV0ZXh0Zm9udC5zaXplIiwib3V0c2lkZXRleHRmb250LmZhbWlseSIsIm91dHNpZGV0ZXh0Zm9udC5jb2xvciIsImhvbGUiLCJzY2FsZWdyb3VwIiwiZG9tYWluIiwiZG9tYWluLngiLCJkb21haW4ueSIsImRvbWFpbi54WzBdIiwiZG9tYWluLnhbMV0iLCJkb21haW4ueVswXSIsImRvbWFpbi55WzFdIiwidGlsdCIsInRpbHRheGlzIiwiZGVwdGgiLCJkaXJlY3Rpb24iLCJyb3RhdGlvbiIsInB1bGwiLCJsaW5lLnNob3dzY2FsZSIsImxpbmUuY2F1dG8iLCJsaW5lLmF1dG9jb2xvcnNjYWxlIiwibGluZS5yZXZlcnNlc2NhbGUiLCJtYXJrZXIubGluZS5zaG93c2NhbGUiLCJtYXJrZXIubGluZS5jYXV0byIsIm1hcmtlci5saW5lLmF1dG9jb2xvcnNjYWxlIiwibWFya2VyLmxpbmUucmV2ZXJzZXNjYWxlIiwieGNhbGVuZGFyIiwieWNhbGVuZGFyIiwiY3VtdWxhdGl2ZSIsImN1bXVsYXRpdmUuZW5hYmxlZCIsImN1bXVsYXRpdmUuZGlyZWN0aW9uIiwiY3VtdWxhdGl2ZS5jdXJyZW50YmluIiwiYTAiLCJkYSIsImIwIiwiZGIiLCJhdHlwZSIsImJ0eXBlIiwiY2hlYXRlcnNsb3BlIiwiY2FycGV0Iiwic3VtIl0sXz1bImNvbG9yIiwic21vb3RoaW5nIiwidGl0bGUiLCJ0aXRsZWZvbnQiLCJ0aXRsZWZvbnQuc2l6ZSIsInRpdGxlZm9udC5mYW1pbHkiLCJ0aXRsZWZvbnQuY29sb3IiLCJ0aXRsZW9mZnNldCIsInR5cGUiLCJhdXRvcmFuZ2UiLCJyYW5nZW1vZGUiLCJyYW5nZSIsImZpeGVkcmFuZ2UiLCJjaGVhdGVydHlwZSIsInRpY2ttb2RlIiwibnRpY2tzIiwidGlja3ZhbHMiLCJ0aWNrdGV4dCIsInRpY2tzIiwibWlycm9yIiwidGlja2xlbiIsInRpY2t3aWR0aCIsInRpY2tjb2xvciIsInNob3d0aWNrbGFiZWxzIiwidGlja2ZvbnQiLCJ0aWNrZm9udC5zaXplIiwidGlja2ZvbnQuZmFtaWx5IiwidGlja2ZvbnQuY29sb3IiLCJ0aWNrcHJlZml4Iiwic2hvd3RpY2twcmVmaXgiLCJ0aWNrc3VmZml4Iiwic2hvd3RpY2tzdWZmaXgiLCJzaG93ZXhwb25lbnQiLCJleHBvbmVudGZvcm1hdCIsInNlcGFyYXRldGhvdXNhbmRzIiwidGlja2Zvcm1hdCIsImNhdGVnb3J5b3JkZXIiLCJjYXRlZ29yeWFycmF5IiwibGFiZWxwYWRkaW5nIiwibGFiZWxwcmVmaXgiLCJsYWJlbHN1ZmZpeCIsImxhYmVsZm9udCIsImxhYmVsZm9udC5mYW1pbHkiLCJsYWJlbGZvbnQuc2l6ZSIsImxhYmVsZm9udC5jb2xvciIsInNob3dsaW5lIiwibGluZWNvbG9yIiwibGluZXdpZHRoIiwiZ3JpZGNvbG9yIiwiZ3JpZHdpZHRoIiwic2hvd2dyaWQiLCJtaW5vcmdyaWRjb3VudCIsIm1pbm9yZ3JpZHdpZHRoIiwibWlub3JncmlkY29sb3IiLCJzdGFydGxpbmUiLCJzdGFydGxpbmVjb2xvciIsInN0YXJ0bGluZXdpZHRoIiwiZW5kbGluZSIsImVuZGxpbmV3aWR0aCIsImVuZGxpbmVjb2xvciIsInRpY2swIiwiZHRpY2siLCJhcnJheXRpY2swIiwiYXJyYXlkdGljayIsImhvdmVyZm9ybWF0IiwidGlja2FuZ2xlIl07Zm9yKGw9MDtsPF8ubGVuZ3RoO2wrKyl5LnB1c2goImFheGlzLiIrX1tsXSkseS5wdXNoKCJiYXhpcy4iK19bbF0pO2ZvcihsPTA7bDxkLmxlbmd0aDtsKyspaWYoTS50cmFjZUlzKGhbZFtsXV0sImJveCIpKXt5LnB1c2goIm5hbWUiKTticmVha312YXIgdz1bIm1hcmtlciIsIm1hcmtlci5zaXplIiwidGV4dGZvbnQiLCJib3hwb2ludHMiLCJqaXR0ZXIiLCJwb2ludHBvcyIsIndoaXNrZXJ3aWR0aCIsImJveG1lYW4iLCJ0aWNrd2lkdGgiXSxBPVsiem1pbiIsInptYXgiLCJ6YXV0byIsInhnYXAiLCJ5Z2FwIiwibWFya2VyLmNtaW4iLCJtYXJrZXIuY21heCIsIm1hcmtlci5jYXV0byIsImxpbmUuY21pbiIsImxpbmUuY21heCIsIm1hcmtlci5saW5lLmNtaW4iLCJtYXJrZXIubGluZS5jbWF4IiwibGluZSIsImxpbmUuc21vb3RoaW5nIiwibGluZS5zaGFwZSIsImVycm9yX3kud2lkdGgiLCJlcnJvcl94LndpZHRoIiwiZXJyb3JfeC5jb3B5X3lzdHlsZSIsIm1hcmtlci5tYXhkaXNwbGF5ZWQiXSxUPVsidHlwZSIsIngiLCJ5IiwieDAiLCJ5MCIsIm9yaWVudGF0aW9uIiwieGF4aXMiLCJ5YXhpcyJdLFM9WyJ6bWluIiwiem1heCJdLEU9WyJjbWluIiwiY21heCJdLEw9WyJ4Ymlucy5zdGFydCIsInhiaW5zLmVuZCIsInhiaW5zLnNpemUiXSxDPVsieWJpbnMuc3RhcnQiLCJ5Ymlucy5lbmQiLCJ5Ymlucy5zaXplIl0sej1bImNvbnRvdXJzLnN0YXJ0IiwiY29udG91cnMuZW5kIiwiY29udG91cnMuc2l6ZSJdLEQ9WyJjYXJ0ZXNpYW4iLCJwaWUiLCJ0ZXJuYXJ5Il07Yy5fYmFzZVBsb3RNb2R1bGVzLmZvckVhY2goZnVuY3Rpb24odCl7LTE9PT1ELmluZGV4T2YodC5uYW1lKSYmKHAuZG9jYWxjPSEwKX0pO2Zvcih2YXIgTyBpbiBlKXtpZihJLmhhc1BhcmVudChlLE8pKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK08rImFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgUixGLGosTixCLFU9ZVtPXTtpZihtW09dPVUsIkxBWU9VVCIhPT1PLnN1YnN0cigwLDYpKXtmb3IodltPXT1uKCksbD0wO2w8ZC5sZW5ndGg7bCsrKWlmKFI9ZltkW2xdXSxGPWhbZFtsXV0saj14Lm5lc3RlZFByb3BlcnR5KFIsTyksTj1qLmdldCgpLHZvaWQgMCE9PShCPUFycmF5LmlzQXJyYXkoVSk/VVtsJVUubGVuZ3RoXTpVKSl7aWYoLTEhPT1TLmluZGV4T2YoTykmJnMoInphdXRvIiwhMSxsKSwtMSE9PUUuaW5kZXhPZihPKSlzKCJjYXV0byIsITEsbCk7ZWxzZSBpZigiY29sb3JzY2FsZSI9PT1PKXMoImF1dG9jb2xvcnNjYWxlIiwhMSxsKTtlbHNlIGlmKCJhdXRvY29sb3JzY2FsZSI9PT1PKXMoImNvbG9yc2NhbGUiLHZvaWQgMCxsKTtlbHNlIGlmKCJtYXJrZXIuY29sb3JzY2FsZSI9PT1PKXMoIm1hcmtlci5hdXRvY29sb3JzY2FsZSIsITEsbCk7ZWxzZSBpZigibWFya2VyLmF1dG9jb2xvcnNjYWxlIj09PU8pcygibWFya2VyLmNvbG9yc2NhbGUiLHZvaWQgMCxsKTtlbHNlIGlmKCJ6YXV0byI9PT1PKXMoUyx2b2lkIDAsbCk7ZWxzZSBpZigtMSE9PUwuaW5kZXhPZihPKSlzKCJhdXRvYmlueCIsITEsbCk7ZWxzZSBpZigiYXV0b2JpbngiPT09TylzKEwsdm9pZCAwLGwpO2Vsc2UgaWYoLTEhPT1DLmluZGV4T2YoTykpcygiYXV0b2JpbnkiLCExLGwpO2Vsc2UgaWYoImF1dG9iaW55Ij09PU8pcyhDLHZvaWQgMCxsKTtlbHNlIGlmKC0xIT09ei5pbmRleE9mKE8pKXMoImF1dG9jb250b3VyIiwhMSxsKTtlbHNlIGlmKCJhdXRvY29udG91ciI9PT1PKXMoeix2b2lkIDAsbCk7ZWxzZSBpZigtMSE9PVsieDAiLCJkeCJdLmluZGV4T2YoTykmJkYueCYmInNjYWxlZCIhPT1GLnh0eXBlKXMoInh0eXBlIiwic2NhbGVkIixsKTtlbHNlIGlmKC0xIT09WyJ5MCIsImR5Il0uaW5kZXhPZihPKSYmRi55JiYic2NhbGVkIiE9PUYueXR5cGUpcygieXR5cGUiLCJzY2FsZWQiLGwpO2Vsc2UgaWYoImNvbG9yYmFyLnRoaWNrbmVzc21vZGUiPT09TyYmai5nZXQoKSE9PUImJi0xIT09WyJmcmFjdGlvbiIsInBpeGVscyJdLmluZGV4T2YoQikmJkYuY29sb3JiYXIpe3ZhciBWPS0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEYuY29sb3JiYXIub3JpZW50KT9jLmhlaWdodC1jLm1hcmdpbi50LWMubWFyZ2luLmI6Yy53aWR0aC1jLm1hcmdpbi5sLWMubWFyZ2luLnI7cygiY29sb3JiYXIudGhpY2tuZXNzIixGLmNvbG9yYmFyLnRoaWNrbmVzcyooImZyYWN0aW9uIj09PUI/MS9WOlYpLGwpfWVsc2UgaWYoImNvbG9yYmFyLmxlbm1vZGUiPT09TyYmai5nZXQoKSE9PUImJi0xIT09WyJmcmFjdGlvbiIsInBpeGVscyJdLmluZGV4T2YoQikmJkYuY29sb3JiYXIpe3ZhciBIPS0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEYuY29sb3JiYXIub3JpZW50KT9jLndpZHRoLWMubWFyZ2luLmwtYy5tYXJnaW4ucjpjLmhlaWdodC1jLm1hcmdpbi50LWMubWFyZ2luLmI7cygiY29sb3JiYXIubGVuIixGLmNvbG9yYmFyLmxlbiooImZyYWN0aW9uIj09PUI/MS9IOkgpLGwpfWVsc2UiY29sb3JiYXIudGljazAiPT09T3x8ImNvbG9yYmFyLmR0aWNrIj09PU8/cygiY29sb3JiYXIudGlja21vZGUiLCJsaW5lYXIiLGwpOiJjb2xvcmJhci50aWNrbW9kZSI9PT1PJiZzKFsiY29sb3JiYXIudGljazAiLCJjb2xvcmJhci5kdGljayJdLHZvaWQgMCxsKTtpZigidHlwZSI9PT1PJiYicGllIj09PUIhPSgicGllIj09PU4pKXt2YXIgcT0ieCIsRz0ieSI7ImJhciIhPT1CJiYiYmFyIiE9PU58fCJoIiE9PVIub3JpZW50YXRpb258fChxPSJ5IixHPSJ4IikseC5zd2FwQXR0cnMoUixbIj8iLCI/c3JjIl0sImxhYmVscyIscSkseC5zd2FwQXR0cnMoUixbImQ/IiwiPzAiXSwibGFiZWwiLHEpLHguc3dhcEF0dHJzKFIsWyI/IiwiP3NyYyJdLCJ2YWx1ZXMiLEcpLCJwaWUiPT09Tj8oeC5uZXN0ZWRQcm9wZXJ0eShSLCJtYXJrZXIuY29sb3IiKS5zZXQoeC5uZXN0ZWRQcm9wZXJ0eShSLCJtYXJrZXIuY29sb3JzIikuZ2V0KCkpLGMuX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpKTpNLnRyYWNlSXMoUiwiY2FydGVzaWFuIikmJih4Lm5lc3RlZFByb3BlcnR5KFIsIm1hcmtlci5jb2xvcnMiKS5zZXQoeC5uZXN0ZWRQcm9wZXJ0eShSLCJtYXJrZXIuY29sb3IiKS5nZXQoKSksZ1tSLnhheGlzfHwieCJdPSEwLGdbUi55YXhpc3x8InkiXT0hMCl9dltPXVtsXT1OO3ZhciBZPVsic3dhcHh5Iiwic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uIiwib3JpZW50YXRpb25heGVzIl07aWYoLTEhPT1ZLmluZGV4T2YoTykpe2lmKCJvcmllbnRhdGlvbiI9PT1PKXtpZihqLnNldChCKSxqLmdldCgpPT09dltPXVtsXSljb250aW51ZX1lbHNlIm9yaWVudGF0aW9uYXhlcyI9PT1PJiYoUi5vcmllbnRhdGlvbj17djoiaCIsaDoidiJ9W0Yub3JpZW50YXRpb25dKTtJLnN3YXBYWURhdGEoUil9ZWxzZSBpZigtMSE9PWsuZGF0YUFycmF5Q29udGFpbmVycy5pbmRleE9mKGoucGFydHNbMF0pKUkubWFuYWdlQXJyYXlDb250YWluZXJzKGosQix2KSxwLmRvY2FsYz0hMDtlbHNle3ZhciBYPWoucGFydHNbMF0sVz0oRi5fbW9kdWxlfHx7fSkuYXR0cmlidXRlcyxaPVcmJldbWF07aWYoWnx8KFo9ay5hdHRyaWJ1dGVzW1hdKSxaKXtmb3IodmFyIEo9MTtKPGoucGFydHMubGVuZ3RoO0orKyl7dmFyIEs9WltqLnBhcnRzW0pdXTtpZighSylicmVhaztaPUt9KCFaLnZhbFR5cGV8fFouYXJyYXlPayYmKEFycmF5LmlzQXJyYXkoQil8fEFycmF5LmlzQXJyYXkoTikpKSYmKHAuZG9jYWxjPSEwKSxQLnVwZGF0ZShwLFopfWVsc2UgcC5kb2NhbGM9ITA7ai5zZXQoQil9fWlmKC0xIT09WyJzd2FweHlheGVzIiwib3JpZW50YXRpb25heGVzIl0uaW5kZXhPZihPKSYmYi5BeGVzLnN3YXAodCxkKSwib3JpZW50YXRpb25heGVzIj09PU8pe3ZhciBRPXgubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsImhvdmVybW9kZSIpOyJ4Ij09PVEuZ2V0KCk/US5zZXQoInkiKToieSI9PT1RLmdldCgpJiZRLnNldCgieCIpfS0xIT09ZC5pbmRleE9mKDApJiYtMSE9PVQuaW5kZXhPZihPKSYmKGIuQXhlcy5jbGVhclR5cGVzKHQsZCkscC5kb2NhbGM9ITApLC0xIT09WyJhdXRvYmlueCIsImF1dG9iaW55IiwiemF1dG8iXS5pbmRleE9mKE8pJiYhMT09PUJ8fChwLmRvc3R5bGU9ITApLCgtMSE9PVsiY29sb3JiYXIiLCJsaW5lIl0uaW5kZXhPZihqLnBhcnRzWzBdKXx8Im1hcmtlciI9PT1qLnBhcnRzWzBdJiYiY29sb3JiYXIiPT09ai5wYXJ0c1sxXSkmJihwLmRvY29sb3JiYXJzPSEwKTt2YXIgJD1PLmluZGV4T2YoIlsiKSx0dD0tMT09PSQ/TzpPLnN1YnN0cigwLCQpO2lmKC0xIT09eS5pbmRleE9mKHR0KSl7aWYoLTEhPT1bIm9yaWVudGF0aW9uIiwidHlwZSJdLmluZGV4T2YoTykpe2Zvcih1PVtdLGw9MDtsPGQubGVuZ3RoO2wrKyl7dmFyIGV0PWZbZFtsXV07TS50cmFjZUlzKGV0LCJjYXJ0ZXNpYW4iKSYmKGkoZXQueGF4aXN8fCJ4IiksaShldC55YXhpc3x8InkiKSwidHlwZSI9PT1PJiZzKFsiYXV0b2JpbngiLCJhdXRvYmlueSJdLCEwLGwpKX1zKHUubWFwKGEpLCEwLDApLHModS5tYXAobyksWzAsMV0sMCl9cC5kb2NhbGM9ITB9ZWxzZS0xIT09QS5pbmRleE9mKHR0KT9wLmRvcGxvdD0hMDowPT09dHQuaW5kZXhPZigiYWF4aXMiKXx8MD09PXR0LmluZGV4T2YoImJheGlzIik/cC5kb3Bsb3Q9ITA6LTEhPT13LmluZGV4T2YodHQpJiYocC5kb2NhbGNBdXRvcmFuZ2U9ITApfWVsc2Ugaj14Lm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LE8ucmVwbGFjZSgiTEFZT1VUIiwiIikpLHZbT109W2ouZ2V0KCldLGouc2V0KEFycmF5LmlzQXJyYXkoVSk/VVswXTpVKSxwLmRvY2FsYz0hMH1iLkF4ZXMubGlzdCh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYXV0b3JhbmdlJiYocC5hdXRvcmFuZ2VPbj0hMCl9KTt2YXIgcnQ9T2JqZWN0LmtleXMoZyk7dDpmb3IobD0wO2w8cnQubGVuZ3RoO2wrKyl7Zm9yKHZhciBudD1ydFtsXSxpdD1udC5jaGFyQXQoMCksYXQ9aXQrImF4aXMiLG90PTA7b3Q8Zi5sZW5ndGg7b3QrKylpZihNLnRyYWNlSXMoZltvdF0sImNhcnRlc2lhbiIpJiYoZltvdF1bYXRdfHxpdCk9PT1udCljb250aW51ZSB0O3MoIkxBWU9VVCIrYi5BeGVzLmlkMm5hbWUobnQpLG51bGwsMCl9cmV0dXJuKHAuZG9jYWxjfHxwLmRvY2FsY0F1dG9yYW5nZSYmcC5hdXRvcmFuZ2VPbikmJihwLmNsZWFyQ2FsYz0hMCksKHAuZG9jYWxjfHxwLmRvcGxvdHx8cC5kb2NhbGNBdXRvcmFuZ2UpJiYocC5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6cCx1bmRvaXQ6dixyZWRvaXQ6bSx0cmFjZXM6ZCxldmVudERhdGE6eC5leHRlbmREZWVwTm9BcnJheXMoW10sW20sZF0pfX1mdW5jdGlvbiBwKHQsZSl7ZnVuY3Rpb24gcih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHZvaWQgdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IodCxuKX0pO2lmKCEodCBpbiBlfHxJLmhhc1BhcmVudChlLHQpKSl7dmFyIGk9eC5uZXN0ZWRQcm9wZXJ0eShsLHQpO3QgaW4gX3x8KF9bdF09aS5nZXQoKSksdm9pZCAwIT09biYmaS5zZXQobil9fWZ1bmN0aW9uIG4oZSxyKXtpZigheC5pc1BsYWluT2JqZWN0KGUpKXJldHVybiExO3ZhciBuPWVbcisicmVmIl18fHIsaT1iLkF4ZXMuZ2V0RnJvbUlkKHQsbik7cmV0dXJuIGl8fG4uY2hhckF0KDApIT09cnx8KGk9Yi5BeGVzLmdldEZyb21JZCh0LHIpKSwoaXx8e30pLmF1dG9yYW5nZX1mdW5jdGlvbiBpKHQpe3ZhciBlPU4ubmFtZTJpZCh0LnNwbGl0KCIuIilbMF0pO3JldHVybiB3W2VdPTEsZX12YXIgYSxvLHMsbD10LmxheW91dCx1PXQuX2Z1bGxMYXlvdXQsYz1PYmplY3Qua2V5cyhlKSxoPWIuQXhlcy5saXN0KHQpLGY9e307Zm9yKG89MDtvPGMubGVuZ3RoO28rKylpZigwPT09Y1tvXS5pbmRleE9mKCJhbGxheGVzIikpe2ZvcihzPTA7czxoLmxlbmd0aDtzKyspe3ZhciBkPWhbc10uX2lkLnN1YnN0cigxKSxwPS0xIT09ZC5pbmRleE9mKCJzY2VuZSIpP2QrIi4iOiIiLG09Y1tvXS5yZXBsYWNlKCJhbGxheGVzIixwK2hbc10uX25hbWUpO2VbbV18fChlW21dPWVbY1tvXV0pfWRlbGV0ZSBlW2Nbb11dfXZhciB2LGc9UC5sYXlvdXQoKSx5PXt9LF89e30sdz17fTtmb3IodmFyIEEgaW4gZSl7aWYoSS5oYXNQYXJlbnQoZSxBKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzZXQgIitBKyJhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7dmFyIFQ9eC5uZXN0ZWRQcm9wZXJ0eShsLEEpLFM9ZVtBXSxFPVQucGFydHMubGVuZ3RoLEw9InN0cmluZyI9PXR5cGVvZiBULnBhcnRzW0UtMV0/RS0xOkUtMixDPVQucGFydHNbMF0sRD1ULnBhcnRzW0xdLFI9VC5wYXJ0c1tMLTFdKyIuIitELEY9VC5wYXJ0cy5zbGljZSgwLEwpLmpvaW4oIi4iKSxqPXgubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsRikuZ2V0KCksQj14Lm5lc3RlZFByb3BlcnR5KHUsRikuZ2V0KCksVT1ULmdldCgpO2lmKHZvaWQgMCE9PVMpe2lmKHlbQV09UyxfW0FdPSJyZXZlcnNlIj09PUQ/UzpVLC0xIT09WyJ3aWR0aCIsImhlaWdodCJdLmluZGV4T2YoQSkmJm51bGw9PT1TKXVbQV09dC5faW5pdGlhbEF1dG9TaXplW0FdO2Vsc2UgaWYoUi5tYXRjaCgvXlt4eXpdYXhpc1swLTldKlwucmFuZ2UoXFtbMHwxXVxdKT8kLykpcihGKyIuYXV0b3JhbmdlIiwhMSksaShSKSx4Lm5lc3RlZFByb3BlcnR5KHUsRisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO2Vsc2UgaWYoUi5tYXRjaCgvXlt4eXpdYXhpc1swLTldKlwuYXV0b3JhbmdlJC8pKXtyKFtGKyIucmFuZ2VbMF0iLEYrIi5yYW5nZVsxXSJdLHZvaWQgMCksaShSKSx4Lm5lc3RlZFByb3BlcnR5KHUsRisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO3ZhciBWPXgubmVzdGVkUHJvcGVydHkodSxGKS5nZXQoKTtWLl9pbnB1dERvbWFpbiYmKFYuX2lucHV0LmRvbWFpbj1WLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIFIubWF0Y2goL15beHl6XWF4aXNbMC05XSpcLmRvbWFpbihcW1swfDFdXF0pPyQvKT94Lm5lc3RlZFByb3BlcnR5KHUsRisiLl9pbnB1dERvbWFpbiIpLnNldChudWxsKTpSLm1hdGNoKC9eW3h5el1heGlzWzAtOV0qXC5jb25zdHJhaW4uKiQvKT9nLmRvY2FsYz0hMDpSLm1hdGNoKC9eYXNwZWN0cmF0aW9cLlt4eXpdJC8pP3IoQysiLmFzcGVjdG1vZGUiLCJtYW51YWwiKTpSLm1hdGNoKC9eYXNwZWN0bW9kZSQvKT9yKFtGKyIueCIsRisiLnkiLEYrIi56Il0sdm9pZCAwKToidGljazAiPT09RHx8ImR0aWNrIj09PUQ/cihGKyIudGlja21vZGUiLCJsaW5lYXIiKToidGlja21vZGUiPT09RD9yKFtGKyIudGljazAiLEYrIi5kdGljayJdLHZvaWQgMCk6L1t4eV1heGlzWzAtOV0qPyQvLnRlc3QoRCkmJiFPYmplY3Qua2V5cyhTfHx7fSkubGVuZ3RoP2cuZG9jYWxjPSEwOi9beHldYXhpc1swLTldKlwuY2F0ZWdvcnlvcmRlciQvLnRlc3QoUik/Zy5kb2NhbGM9ITA6L1t4eV1heGlzWzAtOV0qXC5jYXRlZ29yeWFycmF5Ly50ZXN0KFIpJiYoZy5kb2NhbGM9ITApO2lmKC0xIT09Ui5pbmRleE9mKCJyYW5nZXNsaWRlciIpJiYoZy5kb2NhbGM9ITApLCJ0eXBlIj09PUQpe3ZhciBIPWoscT0ibGluZWFyIj09PUIudHlwZSYmImxvZyI9PT1TLEc9ImxvZyI9PT1CLnR5cGUmJiJsaW5lYXIiPT09UztpZihxfHxHKXtpZihIJiZILnJhbmdlKWlmKEIuYXV0b3JhbmdlKXEmJihILnJhbmdlPUgucmFuZ2VbMV0+SC5yYW5nZVswXT9bMSwyXTpbMiwxXSk7ZWxzZXt2YXIgWT1ILnJhbmdlWzBdLFg9SC5yYW5nZVsxXTtxPyhZPD0wJiZYPD0wJiZyKEYrIi5hdXRvcmFuZ2UiLCEwKSxZPD0wP1k9WC8xZTY6WDw9MCYmKFg9WS8xZTYpLHIoRisiLnJhbmdlWzBdIixNYXRoLmxvZyhZKS9NYXRoLkxOMTApLHIoRisiLnJhbmdlWzFdIixNYXRoLmxvZyhYKS9NYXRoLkxOMTApKToocihGKyIucmFuZ2VbMF0iLE1hdGgucG93KDEwLFkpKSxyKEYrIi5yYW5nZVsxXSIsTWF0aC5wb3coMTAsWCkpKX1lbHNlIHIoRisiLmF1dG9yYW5nZSIsITApO00uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LEIsUyxyKSxNLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsQixTLHIpfWVsc2UgcihGKyIuYXV0b3JhbmdlIiwhMCk7eC5uZXN0ZWRQcm9wZXJ0eSh1LEYrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKEQubWF0Y2goTy5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgVz14Lm5lc3RlZFByb3BlcnR5KHUsQSkuZ2V0KCksWj0oU3x8e30pLnR5cGU7WiYmIi0iIT09Wnx8KFo9ImxpbmVhciIpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LFcsWixyKSxNLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsVyxaLHIpfXZhciBKPXouY29udGFpbmVyQXJyYXlNYXRjaChBKTtpZihKKXthPUouYXJyYXksbz1KLmluZGV4O3ZhciBLPUoucHJvcGVydHksUT14Lm5lc3RlZFByb3BlcnR5KGwsYSksJD0oUXx8W10pW29dfHx7fTtpZigiIj09PW8pLTE9PT1BLmluZGV4T2YoInVwZGF0ZW1lbnVzIikmJihnLmRvY2FsYz0hMCk7ZWxzZSBpZigiIj09PUspe3ZhciB0dD1TO3ouaXNBZGRWYWwoUyk/X1tBXT1udWxsOnouaXNSZW1vdmVWYWwoUyk/KF9bQV09JCx0dD0kKTp4Lndhcm4oInVucmVjb2duaXplZCBmdWxsIG9iamVjdCB2YWx1ZSIsZSksKG4odHQsIngiKXx8bih0dCwieSIpJiYtMT09PUEuaW5kZXhPZigidXBkYXRlbWVudXMiKSkmJihnLmRvY2FsYz0hMCl9ZWxzZSFuKCQsIngiKSYmIW4oJCwieSIpfHx4LmNvbnRhaW5zQW55KEEsWyJjb2xvciIsIm9wYWNpdHkiLCJhbGlnbiIsImRhc2giLCJ1cGRhdGVtZW51cyJdKXx8KGcuZG9jYWxjPSEwKTtmW2FdfHwoZlthXT17fSk7dmFyIGV0PWZbYV1bb107ZXR8fChldD1mW2FdW29dPXt9KSxldFtLXT1TLGRlbGV0ZSBlW0FdfWVsc2UgaWYoInJldmVyc2UiPT09RClqLnJhbmdlP2oucmFuZ2UucmV2ZXJzZSgpOihyKEYrIi5hdXRvcmFuZ2UiLCEwKSxqLnJhbmdlPVsxLDBdKSxCLmF1dG9yYW5nZT9nLmRvY2FsYz0hMDpnLmRvcGxvdD0hMDtlbHNle3ZhciBydD1TdHJpbmcoVC5wYXJ0c1sxXXx8IiIpOzA9PT1DLmluZGV4T2YoInNjZW5lIik/ImNhbWVyYSI9PT1ULnBhcnRzWzFdP2cuZG9jYW1lcmE9ITA6Zy5kb3Bsb3Q9ITA6MD09PUMuaW5kZXhPZigiZ2VvIik/Zy5kb3Bsb3Q9ITA6MD09PUMuaW5kZXhPZigidGVybmFyeSIpP2cuZG9wbG90PSEwOiJwYXBlcl9iZ2NvbG9yIj09PUE/Zy5kb3Bsb3Q9ITA6Im1hcmdpbiI9PT1DfHwiYXV0b3JhbmdlIj09PXJ0fHwicmFuZ2Vtb2RlIj09PXJ0fHwidHlwZSI9PT1ydHx8ImRvbWFpbiI9PT1ydHx8ImZpeGVkcmFuZ2UiPT09cnR8fCJzY2FsZWFuY2hvciI9PT1ydHx8InNjYWxlcmF0aW8iPT09cnR8fC0xIT09QS5pbmRleE9mKCJjYWxlbmRhciIpfHxBLm1hdGNoKC9eKGJhcnxib3h8Zm9udCkvKT9nLmRvY2FsYz0hMDohdS5faGFzKCJnbDJkIil8fC0xPT09QS5pbmRleE9mKCJheGlzIikmJiJwbG90X2JnY29sb3IiIT09QT8hdS5faGFzKCJnbDJkIil8fCJkcmFnbW9kZSIhPT1BfHwibGFzc28iIT09UyYmInNlbGVjdCIhPT1TfHwibGFzc28iPT09VXx8InNlbGVjdCI9PT1VPyJoaWRkZW5sYWJlbHMiPT09QT9nLmRvY2FsYz0hMDotMSE9PUMuaW5kZXhPZigibGVnZW5kIik/Zy5kb2xlZ2VuZD0hMDotMSE9PUEuaW5kZXhPZigidGl0bGUiKT9nLmRvdGlja3M9ITA6LTEhPT1DLmluZGV4T2YoImJnY29sb3IiKT9nLmRvbGF5b3V0c3R5bGU9ITA6RT4xJiZ4LmNvbnRhaW5zQW55KHJ0LFsidGljayIsImV4cG9uZW50IiwiZ3JpZCIsInplcm9saW5lIl0pP2cuZG90aWNrcz0hMDotMSE9PUEuaW5kZXhPZigiLmxpbmV3aWR0aCIpJiYtMSE9PUEuaW5kZXhPZigiYXhpcyIpP2cuZG90aWNrcz1nLmRvbGF5b3V0c3R5bGU9ITA6RT4xJiYtMSE9PXJ0LmluZGV4T2YoImxpbmUiKT9nLmRvbGF5b3V0c3R5bGU9ITA6RT4xJiYibWlycm9yIj09PXJ0P2cuZG90aWNrcz1nLmRvbGF5b3V0c3R5bGU9ITA6Im1hcmdpbi5wYWQiPT09QT9nLmRvdGlja3M9Zy5kb2xheW91dHN0eWxlPSEwOi0xIT09WyJob3Zlcm1vZGUiLCJkcmFnbW9kZSJdLmluZGV4T2YoQSl8fC0xIT09QS5pbmRleE9mKCJzcGlrZSIpP2cuZG9tb2RlYmFyPSEwOi0xPT09WyJoZWlnaHQiLCJ3aWR0aCIsImF1dG9zaXplIl0uaW5kZXhPZihBKSYmKGcuZG9wbG90PSEwKTpnLmRvY2FsYz0hMDpnLmRvcGxvdD0hMCxULnNldChTKX19fWZvcihhIGluIGYpe3ouYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXModCx4Lm5lc3RlZFByb3BlcnR5KGwsYSksZlthXSxnKXx8KGcuZG9wbG90PSEwKX12YXIgbnQ9dS5fYXhpc0NvbnN0cmFpbnRHcm91cHM7Zm9yKHYgaW4gdylmb3Iobz0wO288bnQubGVuZ3RoO28rKyl7dmFyIGl0PW50W29dO2lmKGl0W3ZdKXtnLmRvY2FsYz0hMDtmb3IodmFyIGF0IGluIGl0KXdbYXRdfHwoTi5nZXRGcm9tSWQodCxhdCkuX2NvbnN0cmFpbnRTaHJpbmthYmxlPSEwKX19dmFyIG90PXUud2lkdGgsc3Q9dS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZrLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LHUpLChlLmhlaWdodHx8ZS53aWR0aHx8dS53aWR0aCE9PW90fHx1LmhlaWdodCE9PXN0KSYmKGcuZG9jYWxjPSEwKSwoZy5kb3Bsb3R8fGcuZG9jYWxjKSYmKGcubGF5b3V0UmVwbG90PSEwKSx7ZmxhZ3M6Zyx1bmRvaXQ6XyxyZWRvaXQ6eSxldmVudERhdGE6eC5leHRlbmREZWVwKHt9LHkpfX1mdW5jdGlvbiBtKHQpe3ZhciBlPXYuc2VsZWN0KHQpLHI9dC5fZnVsbExheW91dDtpZihyLl9jb250YWluZXI9ZS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9jb250YWluZXIuZW50ZXIoKS5pbnNlcnQoImRpdiIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInBsb3QtY29udGFpbmVyIiwhMCkuY2xhc3NlZCgicGxvdGx5IiwhMCksci5fcGFwZXJkaXY9ci5fY29udGFpbmVyLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKS5kYXRhKFswXSksci5fcGFwZXJkaXYuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLHIuX2dsY29udGFpbmVyPXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmdsLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZ2wtY29udGFpbmVyIiwhMCksci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5yZW1vdmUoKSxyLl9wYXBlcj1yLl9wYXBlcmRpdi5pbnNlcnQoInN2ZyIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fdG9wcGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLCFyLl91aWQpe3ZhciBuPVtdO3Yuc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbigpe3RoaXMuaWQmJm4ucHVzaCh0aGlzLmlkLnNwbGl0KCItIilbMV0pfSksci5fdWlkPXgucmFuZHN0cihuKX1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmF0dHIoTC5zdmdBdHRycyksci5fZGVmcz1yLl9wYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsImRlZnMtIityLl91aWQpLHIuX3RvcGRlZnM9ci5fdG9wcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJ0b3BkZWZzLSIrci5fdWlkKSxyLl9iZ0xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnbGF5ZXIiLCEwKSxyLl9kcmFnZ2Vycz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJkcmFnbGF5ZXIiLCEwKTt2YXIgaT1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1iZWxvdyIsITApO3IuX2ltYWdlTG93ZXJMYXllcj1pLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZUxvd2VyTGF5ZXI9aS5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5fY2FydGVzaWFubGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2FydGVzaWFubGF5ZXIiLCEwKSxyLl90ZXJuYXJ5bGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgidGVybmFyeWxheWVyIiwhMCksci5fZ2VvbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2VvbGF5ZXIiLCEwKTt2YXIgYT1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1hYm92ZSIsITApO3IuX2ltYWdlVXBwZXJMYXllcj1hLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZVVwcGVyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5fcGllbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicGllbGF5ZXIiLCEwKSxyLl9nbGltYWdlcz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnbGltYWdlcyIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmZvbGF5ZXIiLCEwKSxyLl96b29tbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiem9vbWxheWVyIiwhMCksci5faG92ZXJsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcmxheWVyIiwhMCksdC5lbWl0KCJwbG90bHlfZnJhbWV3b3JrIil9dmFyIHY9dCgiZDMiKSxnPXQoImZhc3QtaXNudW1lcmljIikseT10KCJoYXMtaG92ZXIiKSxiPXQoIi4uL3Bsb3RseSIpLHg9dCgiLi4vbGliIiksXz10KCIuLi9saWIvZXZlbnRzIiksdz10KCIuLi9saWIvcXVldWUiKSxNPXQoIi4uL3JlZ2lzdHJ5Iiksaz10KCIuLi9wbG90cy9wbG90cyIpLEE9dCgiLi4vcGxvdHMvcG9sYXIiKSxUPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLFM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksRT10KCIuLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLEw9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxDPXQoIi4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHo9dCgiLi9tYW5hZ2VfYXJyYXlzIiksST10KCIuL2hlbHBlcnMiKSxEPXQoIi4vc3Vicm91dGluZXMiKSxQPXQoIi4vZWRpdF90eXBlcyIpLE89dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLFI9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksRj1SLmVuZm9yY2Usaj1SLmNsZWFuLE49dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIik7Yi5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIG8oKXtpZihnKXJldHVybiBiLmFkZEZyYW1lcyh0LGcpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIGU9QS5fYmFzZVBsb3RNb2R1bGVzLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmRyYXdGcmFtZXdvcmsmJmVbcl0uZHJhd0ZyYW1ld29yayh0KTtyZXR1cm4geC5zeW5jT3JBc3luYyhbRC5sYXlvdXRTdHlsZXNdLHQpfWZ1bmN0aW9uIGwoKXt2YXIgZSxyLG4saT10LmNhbGNkYXRhO2ZvcihNLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKSh0KSxlPTA7ZTxpLmxlbmd0aDtlKyspcj1pW2VdLG49clswXS50cmFjZSwhMD09PW4udmlzaWJsZSYmbi5fbW9kdWxlLmNvbG9yYmFyP24uX21vZHVsZS5jb2xvcmJhcih0LHIpOmsuYXV0b01hcmdpbih0LCJjYiIrbi51aWQpO3JldHVybiBrLmRvQXV0b01hcmdpbih0KSxrLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gdSgpe2lmKEpTT04uc3RyaW5naWZ5KEEuX3NpemUpIT09eilyZXR1cm4geC5zeW5jT3JBc3luYyhbbCxELmxheW91dFN0eWxlc10sdCl9ZnVuY3Rpb24gYygpe2lmKCFMKXJldHVybiB2b2lkIEYodCk7Zm9yKHZhciBlLHIsbj1rLmdldFN1YnBsb3RJZHMoQSwiY2FydGVzaWFuIiksaT1BLl9tb2R1bGVzLGE9MDthPG4ubGVuZ3RoO2ErKyl7ZT1BLl9wbG90c1tuW2FdXTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylyPWlbb10sci5zZXRQb3NpdGlvbnMmJnIuc2V0UG9zaXRpb25zKHQsZSl9cmV0dXJuIEUuY2FsYyh0KSx4LnN5bmNPckFzeW5jKFtNLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiY2FsY0F1dG9yYW5nZSIpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNhbGNBdXRvcmFuZ2UiKSxoLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImNhbGNBdXRvcmFuZ2UiKV0sdCl9ZnVuY3Rpb24gaCgpe2lmKCF0Ll90cmFuc2l0aW9uaW5nKXtmb3IodmFyIGU9Yi5BeGVzLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2oodCxuKSxiLkF4ZXMuZG9BdXRvUmFuZ2Uobil9Rih0KSx3JiZiLkF4ZXMuc2F2ZVJhbmdlSW5pdGlhbCh0KX19ZnVuY3Rpb24gZigpe3JldHVybiBiLkF4ZXMuZG9UaWNrcyh0LCJyZWRyYXciKX1mdW5jdGlvbiBkKCl7dmFyIGUscj10LmNhbGNkYXRhLG49QS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy5yYW5nZXNsaWRlci1jb250YWluZXIiKTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdWzBdLnRyYWNlLGE9ITA9PT1pLnZpc2libGUsbz1pLnVpZDtpZighYXx8IU0udHJhY2VJcyhpLCIyZE1hcCIpKXt2YXIgcz0iLmhtIitvKyIsLmNvbnRvdXIiK28rIiwjY2xpcCIrbztBLl9wYXBlci5zZWxlY3RBbGwocykucmVtb3ZlKCksbi5zZWxlY3RBbGwocykucmVtb3ZlKCl9YSYmaS5fbW9kdWxlLmNvbG9yYmFyfHxBLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuY2IiK28pLnJlbW92ZSgpfXZhciBsPUEuX2Jhc2VQbG90TW9kdWxlcztmb3IoZT0wO2U8bC5sZW5ndGg7ZSsrKWxbZV0ucGxvdCh0KTt2YXIgdT1BLl9wYXBlci5zZWxlY3RBbGwoIi5sYXllci1zdWJwbG90IikKO3JldHVybiBBLl9zaGFwZVN1YnBsb3RMYXllcnM9dS5zZWxlY3RBbGwoIi5zaGFwZWxheWVyIiksay5zdHlsZSh0KSxNLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxrLmFkZExpbmtzKHQpLEEuX3JlcGxvdHRpbmc9ITEsay5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIHAoKXtNLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJkcmF3IikodCksTS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksTS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKSh0KX12YXIgZztpZih0PUkuZ2V0R3JhcGhEaXYodCksXy5pbml0KHQpLHguaXNQbGFpbk9iamVjdChlKSl7dmFyIHk9ZTtlPXkuZGF0YSxyPXkubGF5b3V0LG49eS5jb25maWcsZz15LmZyYW1lc31pZighMT09PV8udHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZXBsb3QiLFtlLHIsbl0pKXJldHVybiBQcm9taXNlLnJlamVjdCgpO2V8fHJ8fHguaXNQbG90RGl2KHQpfHx4Lndhcm4oIkNhbGxpbmcgUGxvdGx5LnBsb3QgYXMgaWYgcmVkcmF3aW5nIGJ1dCB0aGlzIGNvbnRhaW5lciBkb2Vzbid0IHlldCBoYXZlIGEgcGxvdC4iLHQpLGkodCxuKSxyfHwocj17fSksdi5zZWxlY3QodCkuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiLCEwKSxTLm1ha2VUZXN0ZXIoKSx0Ll9wcm9taXNlcz1bXTt2YXIgdz0wPT09KHQuZGF0YXx8W10pLmxlbmd0aCYmQXJyYXkuaXNBcnJheShlKTtpZihBcnJheS5pc0FycmF5KGUpJiYoSS5jbGVhbkRhdGEoZSx0LmRhdGEpLHc/dC5kYXRhPWU6dC5kYXRhLnB1c2guYXBwbHkodC5kYXRhLGUpLHQuZW1wdHk9ITEpLHQubGF5b3V0JiYhd3x8KHQubGF5b3V0PUkuY2xlYW5MYXlvdXQocikpLHQuX2RyYWdnaW5nJiYhdC5fdHJhbnNpdGlvbmluZylyZXR1cm4gdC5fcmVwbG90UGVuZGluZz0hMCxQcm9taXNlLnJlamVjdCgpO3QuX3JlcGxvdFBlbmRpbmc9ITEsay5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgQT10Ll9mdWxsTGF5b3V0O2lmKGUmJmVbMF0mJmVbMF0ucilyZXR1cm4gYSh0LGUscik7QS5fcmVwbG90dGluZz0hMCx3JiZtKHQpLHQuZnJhbWV3b3JrIT09bSYmKHQuZnJhbWV3b3JrPW0sbSh0KSksUy5pbml0R3JhZGllbnRzKHQpLHcmJmIuQXhlcy5zYXZlU2hvd1NwaWtlSW5pdGlhbCh0KTt2YXIgTD0hdC5jYWxjZGF0YXx8dC5jYWxjZGF0YS5sZW5ndGghPT0odC5fZnVsbERhdGF8fFtdKS5sZW5ndGg7TCYmay5kb0NhbGNkYXRhKHQpO2Zvcih2YXIgQz0wO0M8dC5jYWxjZGF0YS5sZW5ndGg7QysrKXQuY2FsY2RhdGFbQ11bMF0udHJhY2U9dC5fZnVsbERhdGFbQ107dmFyIHo9SlNPTi5zdHJpbmdpZnkoQS5fc2l6ZSksUD1bay5wcmV2aW91c1Byb21pc2VzLG8scyxsLHUsYyxELmxheW91dFN0eWxlcyxmLGQscCxULGsucmVob3Zlcl07cmV0dXJuIHguc3luY09yQXN5bmMoUCx0KSxQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9hZnRlcnBsb3QiKSx0fSl9LGIucmVkcmF3PWZ1bmN0aW9uKHQpe2lmKHQ9SS5nZXRHcmFwaERpdih0KSwheC5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7cmV0dXJuIEkuY2xlYW5EYXRhKHQuZGF0YSx0LmRhdGEpLEkuY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLGIucGxvdCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlZHJhdyIpLHR9KX0sYi5uZXdQbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0PUkuZ2V0R3JhcGhEaXYodCksay5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGF8fHt9LHQuX2Z1bGxMYXlvdXR8fHt9KSxrLnB1cmdlKHQpLGIucGxvdCh0LGUscixuKX0sYi5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLHIsbixpKXtlPUkuZ2V0R3JhcGhEaXYoZSk7dmFyIGE9ZihlLHIsbixpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUpfSxmdW5jdGlvbih0LGUpe3JldHVybiB0LnNwbGljZSgwLHQubGVuZ3RoLWUpfSksbz1iLnJlZHJhdyhlKSxzPVtlLGEudXBkYXRlLG4sYS5tYXhQb2ludHNdO3JldHVybiB3LmFkZChlLGIucHJlcGVuZFRyYWNlcyxzLHQsYXJndW1lbnRzKSxvfSxiLnByZXBlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLHIsbixpKXtlPUkuZ2V0R3JhcGhEaXYoZSk7dmFyIGE9ZihlLHIsbixpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuY29uY2F0KHQpfSxmdW5jdGlvbih0LGUpe3JldHVybiB0LnNwbGljZShlLHQubGVuZ3RoKX0pLG89Yi5yZWRyYXcoZSkscz1bZSxhLnVwZGF0ZSxuLGEubWF4UG9pbnRzXTtyZXR1cm4gdy5hZGQoZSxiLmV4dGVuZFRyYWNlcyxzLHQsYXJndW1lbnRzKSxvfSxiLmFkZFRyYWNlcz1mdW5jdGlvbiB0KGUscixuKXtlPUkuZ2V0R3JhcGhEaXYoZSk7dmFyIGksYSxvPVtdLHM9Yi5kZWxldGVUcmFjZXMsYz10LGg9W2Usb10sZj1bZSxyXTtmb3IodShlLHIsbiksQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPXIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB4LmV4dGVuZEZsYXQoe30sdCl9KSxJLmNsZWFuRGF0YShyLGUuZGF0YSksaT0wO2k8ci5sZW5ndGg7aSsrKWUuZGF0YS5wdXNoKHJbaV0pO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspby5wdXNoKC1yLmxlbmd0aCtpKTtpZih2b2lkIDA9PT1uKXJldHVybiBhPWIucmVkcmF3KGUpLHcuYWRkKGUscyxoLGMsZiksYTtBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pO3RyeXtsKGUsbyxuKX1jYXRjaCh0KXt0aHJvdyBlLmRhdGEuc3BsaWNlKGUuZGF0YS5sZW5ndGgtci5sZW5ndGgsci5sZW5ndGgpLHR9cmV0dXJuIHcuc3RhcnRTZXF1ZW5jZShlKSx3LmFkZChlLHMsaCxjLGYpLGE9Yi5tb3ZlVHJhY2VzKGUsbyxuKSx3LnN0b3BTZXF1ZW5jZShlKSxhfSxiLmRlbGV0ZVRyYWNlcz1mdW5jdGlvbiB0KGUscil7ZT1JLmdldEdyYXBoRGl2KGUpO3ZhciBuLGksYT1bXSxsPWIuYWRkVHJhY2VzLHU9dCxjPVtlLGEscl0saD1bZSxyXTtpZih2b2lkIDA9PT1yKXRocm93IG5ldyBFcnJvcigiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuIik7Zm9yKEFycmF5LmlzQXJyYXkocil8fChyPVtyXSkscyhlLHIsImluZGljZXMiKSxyPW8ocixlLmRhdGEubGVuZ3RoLTEpLHIuc29ydCh4LnNvcnRlckRlcyksbj0wO248ci5sZW5ndGg7bis9MSlpPWUuZGF0YS5zcGxpY2UocltuXSwxKVswXSxhLnB1c2goaSk7dmFyIGY9Yi5yZWRyYXcoZSk7cmV0dXJuIHcuYWRkKGUsbCxjLHUsaCksZn0sYi5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxyLG4pe2U9SS5nZXRHcmFwaERpdihlKTt2YXIgaSxhPVtdLHM9W10sdT10LGM9dCxoPVtlLG4scl0sZj1bZSxyLG5dO2lmKGwoZSxyLG4pLHI9QXJyYXkuaXNBcnJheShyKT9yOltyXSx2b2lkIDA9PT1uKWZvcihuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyluLnB1c2goLXIubGVuZ3RoK2kpO2ZvcihuPUFycmF5LmlzQXJyYXkobik/bjpbbl0scj1vKHIsZS5kYXRhLmxlbmd0aC0xKSxuPW8obixlLmRhdGEubGVuZ3RoLTEpLGk9MDtpPGUuZGF0YS5sZW5ndGg7aSsrKS0xPT09ci5pbmRleE9mKGkpJiZhLnB1c2goZS5kYXRhW2ldKTtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXMucHVzaCh7bmV3SW5kZXg6bltpXSx0cmFjZTplLmRhdGFbcltpXV19KTtmb3Iocy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmV3SW5kZXgtZS5uZXdJbmRleH0pLGk9MDtpPHMubGVuZ3RoO2krPTEpYS5zcGxpY2Uoc1tpXS5uZXdJbmRleCwwLHNbaV0udHJhY2UpO2UuZGF0YT1hO3ZhciBkPWIucmVkcmF3KGUpO3JldHVybiB3LmFkZChlLHUsaCxjLGYpLGR9LGIucmVzdHlsZT1mdW5jdGlvbiB0KGUscixuLGkpe2U9SS5nZXRHcmFwaERpdihlKSxJLmNsZWFyUHJvbWlzZVF1ZXVlKGUpO3ZhciBhPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgcilhW3JdPW47ZWxzZXtpZigheC5pc1BsYWluT2JqZWN0KHIpKXJldHVybiB4Lndhcm4oIlJlc3R5bGUgZmFpbC4iLHIsbixpKSxQcm9taXNlLnJlamVjdCgpO2E9eC5leHRlbmRGbGF0KHt9LHIpLHZvaWQgMD09PWkmJihpPW4pfU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIG89ZChlLGEsaSkscz1vLmZsYWdzO3MuY2xlYXJDYWxjJiYoZS5jYWxjZGF0YT12b2lkIDApO3ZhciBsPVtdO3MuZnVsbFJlcGxvdD9sLnB1c2goYi5wbG90KToobC5wdXNoKGsucHJldmlvdXNQcm9taXNlcyksay5zdXBwbHlEZWZhdWx0cyhlKSxzLmRvc3R5bGUmJmwucHVzaChELmRvVHJhY2VTdHlsZSkscy5kb2NvbG9yYmFycyYmbC5wdXNoKEQuZG9Db2xvckJhcnMpKSxsLnB1c2goay5yZWhvdmVyKSx3LmFkZChlLHQsW2Usby51bmRvaXQsby50cmFjZXNdLHQsW2Usby5yZWRvaXQsby50cmFjZXNdKTt2YXIgdT14LnN5bmNPckFzeW5jKGwsZSk7cmV0dXJuIHUmJnUudGhlbnx8KHU9UHJvbWlzZS5yZXNvbHZlKCkpLHUudGhlbihmdW5jdGlvbigpe3JldHVybiBlLmVtaXQoInBsb3RseV9yZXN0eWxlIixvLmV2ZW50RGF0YSksZX0pfSxiLnJlbGF5b3V0PWZ1bmN0aW9uIHQoZSxyLG4pe2lmKGU9SS5nZXRHcmFwaERpdihlKSxJLmNsZWFyUHJvbWlzZVF1ZXVlKGUpLGUuZnJhbWV3b3JrJiZlLmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZSk7dmFyIGk9e307aWYoInN0cmluZyI9PXR5cGVvZiByKWlbcl09bjtlbHNle2lmKCF4LmlzUGxhaW5PYmplY3QocikpcmV0dXJuIHgud2FybigiUmVsYXlvdXQgZmFpbC4iLHIsbiksUHJvbWlzZS5yZWplY3QoKTtpPXguZXh0ZW5kRmxhdCh7fSxyKX1PYmplY3Qua2V5cyhpKS5sZW5ndGgmJihlLmNoYW5nZWQ9ITApO3ZhciBhPXAoZSxpKSxvPWEuZmxhZ3M7by5kb2NhbGMmJihlLmNhbGNkYXRhPXZvaWQgMCk7dmFyIHM9W2sucHJldmlvdXNQcm9taXNlc107by5sYXlvdXRSZXBsb3Q/cy5wdXNoKEQubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhpKS5sZW5ndGgmJihrLnN1cHBseURlZmF1bHRzKGUpLG8uZG9sZWdlbmQmJnMucHVzaChELmRvTGVnZW5kKSxvLmRvbGF5b3V0c3R5bGUmJnMucHVzaChELmxheW91dFN0eWxlcyksby5kb3RpY2tzJiZzLnB1c2goRC5kb1RpY2tzUmVsYXlvdXQpLG8uZG9tb2RlYmFyJiZzLnB1c2goRC5kb01vZGVCYXIpLG8uZG9jYW1lcmEmJnMucHVzaChELmRvQ2FtZXJhKSkscy5wdXNoKGsucmVob3Zlciksdy5hZGQoZSx0LFtlLGEudW5kb2l0XSx0LFtlLGEucmVkb2l0XSk7dmFyIGw9eC5zeW5jT3JBc3luYyhzLGUpO3JldHVybiBsJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZShlKSksbC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixhLmV2ZW50RGF0YSksZX0pfSxiLnVwZGF0ZT1mdW5jdGlvbiB0KGUscixuLGkpe2lmKGU9SS5nZXRHcmFwaERpdihlKSxJLmNsZWFyUHJvbWlzZVF1ZXVlKGUpLGUuZnJhbWV3b3JrJiZlLmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZSk7eC5pc1BsYWluT2JqZWN0KHIpfHwocj17fSkseC5pc1BsYWluT2JqZWN0KG4pfHwobj17fSksT2JqZWN0LmtleXMocikubGVuZ3RoJiYoZS5jaGFuZ2VkPSEwKSxPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihlLmNoYW5nZWQ9ITApO3ZhciBhPWQoZSx4LmV4dGVuZEZsYXQoe30sciksaSksbz1hLmZsYWdzLHM9cChlLHguZXh0ZW5kRmxhdCh7fSxuKSksbD1zLmZsYWdzOyhvLmNsZWFyQ2FsY3x8bC5kb2NhbGMpJiYoZS5jYWxjZGF0YT12b2lkIDApO3ZhciB1PVtdO2lmKG8uZnVsbFJlcGxvdCYmbC5sYXlvdXRSZXBsb3Qpe3ZhciBjPWUuZGF0YSxoPWUubGF5b3V0O2UuZGF0YT12b2lkIDAsZS5sYXlvdXQ9dm9pZCAwLHUucHVzaChmdW5jdGlvbigpe3JldHVybiBiLnBsb3QoZSxjLGgpfSl9ZWxzZSBvLmZ1bGxSZXBsb3Q/dS5wdXNoKGIucGxvdCk6bC5sYXlvdXRSZXBsb3Q/dS5wdXNoKEQubGF5b3V0UmVwbG90KToodS5wdXNoKGsucHJldmlvdXNQcm9taXNlcyksay5zdXBwbHlEZWZhdWx0cyhlKSxvLmRvc3R5bGUmJnUucHVzaChELmRvVHJhY2VTdHlsZSksby5kb2NvbG9yYmFycyYmdS5wdXNoKEQuZG9Db2xvckJhcnMpLGwuZG9sZWdlbmQmJnUucHVzaChELmRvTGVnZW5kKSxsLmRvbGF5b3V0c3R5bGUmJnUucHVzaChELmxheW91dFN0eWxlcyksbC5kb3RpY2tzJiZ1LnB1c2goRC5kb1RpY2tzUmVsYXlvdXQpLGwuZG9tb2RlYmFyJiZ1LnB1c2goRC5kb01vZGVCYXIpLGwuZG9DYW1lcmEmJnUucHVzaChELmRvQ2FtZXJhKSk7dS5wdXNoKGsucmVob3Zlciksdy5hZGQoZSx0LFtlLGEudW5kb2l0LHMudW5kb2l0LGEudHJhY2VzXSx0LFtlLGEucmVkb2l0LHMucmVkb2l0LGEudHJhY2VzXSk7dmFyIGY9eC5zeW5jT3JBc3luYyh1LGUpO3JldHVybiBmJiZmLnRoZW58fChmPVByb21pc2UucmVzb2x2ZShlKSksZi50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3VwZGF0ZSIse2RhdGE6YS5ldmVudERhdGEsbGF5b3V0OnMuZXZlbnREYXRhfSksZX0pfSxiLmFuaW1hdGU9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkocyk/dD49cy5sZW5ndGg/c1swXTpzW3RdOnN9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT90Pj1sLmxlbmd0aD9sWzBdOmxbdF06bH1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fWlmKHQ9SS5nZXRHcmFwaERpdih0KSwheC5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYW5pbWF0aW5nIGl0LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgbz10Ll90cmFuc2l0aW9uRGF0YTtvLl9mcmFtZVF1ZXVlfHwoby5fZnJhbWVRdWV1ZT1bXSkscj1rLnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzKHIpO3ZhciBzPXIudHJhbnNpdGlvbixsPXIuZnJhbWU7cmV0dXJuIHZvaWQgMD09PW8uX2ZyYW1lV2FpdGluZ0NudCYmKG8uX2ZyYW1lV2FpdGluZ0NudD0wKSxuZXcgUHJvbWlzZShmdW5jdGlvbihsLHUpe2Z1bmN0aW9uIGMoKXt0LmVtaXQoInBsb3RseV9hbmltYXRlZCIpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShvLl9hbmltYXRpb25SYWYpLG8uX2FuaW1hdGlvblJhZj1udWxsfWZ1bmN0aW9uIGgoKXtvLl9jdXJyZW50RnJhbWUmJm8uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZvLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciBlPW8uX2N1cnJlbnRGcmFtZT1vLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYoZSl7dmFyIHI9ZS5uYW1lP2UubmFtZS50b1N0cmluZygpOm51bGw7dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsby5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxvLl90aW1lVG9OZXh0PWUuZnJhbWVPcHRzLmR1cmF0aW9uLGsudHJhbnNpdGlvbih0LGUuZnJhbWUuZGF0YSxlLmZyYW1lLmxheW91dCxJLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGUuZnJhbWUudHJhY2VzKSxlLmZyYW1lT3B0cyxlLnRyYW5zaXRpb25PcHRzKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbkNvbXBsZXRlJiZlLm9uQ29tcGxldGUoKX0pLHQuZW1pdCgicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIix7bmFtZTpyLGZyYW1lOmUuZnJhbWUsYW5pbWF0aW9uOntmcmFtZTplLmZyYW1lT3B0cyx0cmFuc2l0aW9uOmUudHJhbnNpdGlvbk9wdHN9fSl9ZWxzZSBjKCl9ZnVuY3Rpb24gZigpe3QuZW1pdCgicGxvdGx5X2FuaW1hdGluZyIpLG8uX2xhc3RGcmFtZUF0PS0xLzAsby5fdGltZVRvTmV4dD0wLG8uX3J1bm5pbmdUcmFuc2l0aW9ucz0wLG8uX2N1cnJlbnRGcmFtZT1udWxsO3ZhciBlPWZ1bmN0aW9uKCl7by5fYW5pbWF0aW9uUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSksRGF0ZS5ub3coKS1vLl9sYXN0RnJhbWVBdD5vLl90aW1lVG9OZXh0JiZoKCl9O2UoKX1mdW5jdGlvbiBkKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHMpP3Y+PXMubGVuZ3RoP3QudHJhbnNpdGlvbk9wdHM9c1t2XTp0LnRyYW5zaXRpb25PcHRzPXNbMF06dC50cmFuc2l0aW9uT3B0cz1zLHYrKyx0fXZhciBwLG0sdj0wLGc9W10seT12b2lkIDA9PT1lfHxudWxsPT09ZSxiPUFycmF5LmlzQXJyYXkoZSk7aWYoeXx8Ynx8IXguaXNQbGFpbk9iamVjdChlKSl7aWYoeXx8LTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGUpKWZvcihwPTA7cDxvLl9mcmFtZXMubGVuZ3RoO3ArKykobT1vLl9mcmFtZXNbcF0pJiYoeXx8U3RyaW5nKG0uZ3JvdXApPT09U3RyaW5nKGUpKSYmZy5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6U3RyaW5nKG0ubmFtZSksZGF0YTpkKHtuYW1lOm0ubmFtZX0pfSk7ZWxzZSBpZihiKWZvcihwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBfPWVbcF07LTEhPT1bIm51bWJlciIsInN0cmluZyJdLmluZGV4T2YodHlwZW9mIF8pPyhfPVN0cmluZyhfKSxnLnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTpfLGRhdGE6ZCh7bmFtZTpffSl9KSk6eC5pc1BsYWluT2JqZWN0KF8pJiZnLnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTpkKHguZXh0ZW5kRmxhdCh7fSxfKSl9KX19ZWxzZSBnLnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTpkKHguZXh0ZW5kRmxhdCh7fSxlKSl9KTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKG09Z1twXSwiYnluYW1lIj09PW0udHlwZSYmIW8uX2ZyYW1lSGFzaFttLmRhdGEubmFtZV0pcmV0dXJuIHgud2FybignYW5pbWF0ZSBmYWlsdXJlOiBmcmFtZSBub3QgZm91bmQ6ICInK20uZGF0YS5uYW1lKyciJyksdm9pZCB1KCk7LTEhPT1bIm5leHQiLCJpbW1lZGlhdGUiXS5pbmRleE9mKHIubW9kZSkmJmZ1bmN0aW9uKCl7aWYoMCE9PW8uX2ZyYW1lUXVldWUubGVuZ3RoKXtmb3IoO28uX2ZyYW1lUXVldWUubGVuZ3RoOyl7dmFyIGU9by5fZnJhbWVRdWV1ZS5wb3AoKTtlLm9uSW50ZXJydXB0JiZlLm9uSW50ZXJydXB0KCl9dC5lbWl0KCJwbG90bHlfYW5pbWF0aW9uaW50ZXJydXB0ZWQiLFtdKX19KCksInJldmVyc2UiPT09ci5kaXJlY3Rpb24mJmcucmV2ZXJzZSgpO3ZhciB3PXQuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZTtpZih3JiZyLmZyb21jdXJyZW50KXt2YXIgTT0tMTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKG09Z1twXSwiYnluYW1lIj09PW0udHlwZSYmbS5uYW1lPT09dyl7TT1wO2JyZWFrfWlmKE0+MCYmTTxnLmxlbmd0aC0xKXt2YXIgQT1bXTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKW09Z1twXSwoImJ5bmFtZSIhPT1nW3BdLnR5cGV8fHA+TSkmJkEucHVzaChtKTtnPUF9fWcubGVuZ3RoPjA/ZnVuY3Rpb24oZSl7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGM7Yz0iYnluYW1lIj09PWVbc10udHlwZT9rLmNvbXB1dGVGcmFtZSh0LGVbc10ubmFtZSk6ZVtzXS5kYXRhO3ZhciBoPWkocyksZD1uKHMpO2QuZHVyYXRpb249TWF0aC5taW4oZC5kdXJhdGlvbixoLmR1cmF0aW9uKTt2YXIgcD17ZnJhbWU6YyxuYW1lOmVbc10ubmFtZSxmcmFtZU9wdHM6aCx0cmFuc2l0aW9uT3B0czpkfTtzPT09ZS5sZW5ndGgtMSYmKHAub25Db21wbGV0ZT1hKGwsMikscC5vbkludGVycnVwdD11KSxvLl9mcmFtZVF1ZXVlLnB1c2gocCl9ImltbWVkaWF0ZSI9PT1yLm1vZGUmJihvLl9sYXN0RnJhbWVBdD0tMS8wKSxvLl9hbmltYXRpb25SYWZ8fGYoKX19KGcpOih0LmVtaXQoInBsb3RseV9hbmltYXRlZCIpLGwoKSl9KX0sYi5hZGRGcmFtZXM9ZnVuY3Rpb24odCxlLHIpe3Q9SS5nZXRHcmFwaERpdih0KTt2YXIgbj0wO2lmKG51bGw9PT1lfHx2b2lkIDA9PT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZigheC5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIGksYSxvLHMsbD10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoImFkZEZyYW1lcyBmYWlsdXJlOiBmcmFtZUxpc3QgbXVzdCBiZSBhbiBBcnJheSBvZiBmcmFtZSBkZWZpbml0aW9ucyIrZSk7dmFyIGM9bC5sZW5ndGgrMiplLmxlbmd0aCxoPVtdO2ZvcihpPWUubGVuZ3RoLTE7aT49MDtpLS0paWYoeC5pc1BsYWluT2JqZWN0KGVbaV0pKXt2YXIgZj0odVtlW2ldLm5hbWVdfHx7fSkubmFtZSxkPWVbaV0ubmFtZTtmJiZkJiYibnVtYmVyIj09dHlwZW9mIGQmJnVbZl0mJihuKysseC53YXJuKCdhZGRGcmFtZXM6IG92ZXJ3cml0aW5nIGZyYW1lICInK3VbZl0ubmFtZSsnIiB3aXRoIGEgZnJhbWUgd2hvc2UgbmFtZSBvZiB0eXBlICJudW1iZXIiIGFsc28gZXF1YXRlcyB0byAiJytmKyciLiBUaGlzIGlzIHZhbGlkIGJ1dCBtYXkgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIHNpbmNlIGFsbCBwbG90bHkuanMgZnJhbWUgbmFtZXMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHN0cmluZ3MuJyksbj41JiZ4Lndhcm4oImFkZEZyYW1lczogVGhpcyBBUEkgY2FsbCBoYXMgeWllbGRlZCB0b28gbWFueSB3YXJuaW5ncy4gRm9yIHRoZSByZXN0IG9mIHRoaXMgY2FsbCwgZnVydGhlciB3YXJuaW5ncyBhYm91dCBudW1lcmljIGZyYW1lIG5hbWVzIHdpbGwgYmUgc3VwcHJlc3NlZC4iKSksaC5wdXNoKHtmcmFtZTprLnN1cHBseUZyYW1lRGVmYXVsdHMoZVtpXSksaW5kZXg6ciYmdm9pZCAwIT09cltpXSYmbnVsbCE9PXJbaV0/cltpXTpjK2l9KX1oLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbmRleD5lLmluZGV4Py0xOnQuaW5kZXg8ZS5pbmRleD8xOjB9KTt2YXIgcD1bXSxtPVtdLHY9bC5sZW5ndGg7Zm9yKGk9aC5sZW5ndGgtMTtpPj0wO2ktLSl7aWYoYT1oW2ldLmZyYW1lLCJudW1iZXIiPT10eXBlb2YgYS5uYW1lJiZ4Lndhcm4oIldhcm5pbmc6IGFkZEZyYW1lcyBhY2NlcHRzIGZyYW1lcyB3aXRoIG51bWVyaWMgbmFtZXMsIGJ1dCB0aGUgbnVtYmVycyBhcmVpbXBsaWNpdGx5IGNhc3QgdG8gc3RyaW5ncyIpLCFhLm5hbWUpZm9yKDt1W2EubmFtZT0iZnJhbWUgIit0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcisrXTspO2lmKHVbYS5uYW1lXSl7Zm9yKG89MDtvPGwubGVuZ3RoJiYobFtvXXx8e30pLm5hbWUhPT1hLm5hbWU7bysrKTtwLnB1c2goe3R5cGU6InJlcGxhY2UiLGluZGV4Om8sdmFsdWU6YX0pLG0udW5zaGlmdCh7dHlwZToicmVwbGFjZSIsaW5kZXg6byx2YWx1ZTpsW29dfSl9ZWxzZSBzPU1hdGgubWF4KDAsTWF0aC5taW4oaFtpXS5pbmRleCx2KSkscC5wdXNoKHt0eXBlOiJpbnNlcnQiLGluZGV4OnMsdmFsdWU6YX0pLG0udW5zaGlmdCh7dHlwZToiZGVsZXRlIixpbmRleDpzfSksdisrfXZhciBnPWsubW9kaWZ5RnJhbWVzLHk9ay5tb2RpZnlGcmFtZXMsYj1bdCxtXSxfPVt0LHBdO3JldHVybiB3JiZ3LmFkZCh0LGcsYix5LF8pLGsubW9kaWZ5RnJhbWVzKHQscCl9LGIuZGVsZXRlRnJhbWVzPWZ1bmN0aW9uKHQsZSl7aWYodD1JLmdldEdyYXBoRGl2KHQpLCF4LmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTt2YXIgcixuLGk9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxhPVtdLG89W107aWYoIWUpZm9yKGU9W10scj0wO3I8aS5sZW5ndGg7cisrKWUucHVzaChyKTtmb3IoZT1lLnNsaWNlKDApLGUuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxvLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTppW25dfSk7dmFyIHM9ay5tb2RpZnlGcmFtZXMsbD1rLm1vZGlmeUZyYW1lcyx1PVt0LG9dLGM9W3QsYV07cmV0dXJuIHcmJncuYWRkKHQscyx1LGwsYyksay5tb2RpZnlGcmFtZXModCxhKX0sYi5wdXJnZT1mdW5jdGlvbih0KXt0PUkuZ2V0R3JhcGhEaXYodCk7dmFyIGU9dC5fZnVsbExheW91dHx8e30scj10Ll9mdWxsRGF0YXx8W107cmV0dXJuIGsuY2xlYW5QbG90KFtdLHt9LHIsZSksay5wdXJnZSh0KSxfLnB1cmdlKHQpLGUuX2NvbnRhaW5lciYmZS5fY29udGFpbmVyLnJlbW92ZSgpLGRlbGV0ZSB0Ll9jb250ZXh0LGRlbGV0ZSB0Ll9yZXBsb3RQZW5kaW5nLGRlbGV0ZSB0Ll9tb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9sZWdlbmRNb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9obXBpeGNvdW50LGRlbGV0ZSB0Ll9obWx1bWNvdW50LHR9fSx7Ii4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjMyLCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzA2LCIuLi9saWIiOjcyNCwiLi4vbGliL2V2ZW50cyI6NzE0LCIuLi9saWIvcXVldWUiOjczNiwiLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDMsIi4uL3Bsb3RseSI6NzU5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc2NywiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzY5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjc3MSwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0Ijo3NzMsIi4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4uL3Bsb3RzL3BvbGFyIjo4MzAsIi4uL3JlZ2lzdHJ5Ijo4NDIsIi4vZWRpdF90eXBlcyI6NzQ4LCIuL2hlbHBlcnMiOjc0OSwiLi9tYW5hZ2VfYXJyYXlzIjo3NTAsIi4vc3Vicm91dGluZXMiOjc1NixkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjksImhhcy1ob3ZlciI6Mjg2fV0sNzUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxyKXt0cnl7dC5fZnVsbExheW91dC5fcGFwZXIuc3R5bGUoImJhY2tncm91bmQiLHIpfWNhdGNoKHQpe2UuZXhwb3J0cy5sb2dnaW5nPjAmJmNvbnNvbGUuZXJyb3IodCl9fWUuZXhwb3J0cz17c3RhdGljUGxvdDohMSxlZGl0YWJsZTohMSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOiExLGFubm90YXRpb25UYWlsOiExLGFubm90YXRpb25UZXh0OiExLGF4aXNUaXRsZVRleHQ6ITEsY29sb3JiYXJQb3NpdGlvbjohMSxjb2xvcmJhclRpdGxlVGV4dDohMSxsZWdlbmRQb3NpdGlvbjohMSxsZWdlbmRUZXh0OiExLHNoYXBlUG9zaXRpb246ITEsdGl0bGVUZXh0OiExfSxhdXRvc2l6YWJsZTohMSxxdWV1ZUxlbmd0aDowLGZpbGxGcmFtZTohMSxmcmFtZU1hcmdpbnM6MCxzY3JvbGxab29tOiExLGRvdWJsZUNsaWNrOiJyZXNldCthdXRvc2l6ZSIsc2hvd1RpcHM6ITAsc2hvd0F4aXNEcmFnSGFuZGxlczohMCxzaG93QXhpc1JhbmdlRW50cnlCb3hlczohMCxzaG93TGluazohMSxzZW5kRGF0YTohMCxsaW5rVGV4dDoiRWRpdCBjaGFydCIsc2hvd1NvdXJjZXM6ITEsZGlzcGxheU1vZGVCYXI6ImhvdmVyIixtb2RlQmFyQnV0dG9uc1RvUmVtb3ZlOltdLG1vZGVCYXJCdXR0b25zVG9BZGQ6W10sbW9kZUJhckJ1dHRvbnM6ITEsZGlzcGxheWxvZ286ITAscGxvdEdsUGl4ZWxSYXRpbzoyLHNldEJhY2tncm91bmQ6bix0b3BvanNvblVSTDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8iLG1hcGJveEFjY2Vzc1Rva2VuOm51bGwsbG9nZ2luZzohMSxnbG9iYWxUcmFuc2Zvcm1zOltdfX0se31dLDc1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlLHI7ImFyZWEiPT09dD8oZT17YXR0cmlidXRlczpifSxyPXt9KTooZT1kLm1vZHVsZXNbdF0uX21vZHVsZSxyPWUuYmFzZVBsb3RNb2R1bGUpO3ZhciBuPXt9O24udHlwZT1udWxsLE0obixtKSxNKG4sZS5hdHRyaWJ1dGVzKSxyLmF0dHJpYnV0ZXMmJk0obixyLmF0dHJpYnV0ZXMpLE9iamVjdC5rZXlzKGQuY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWQuY29tcG9uZW50c1JlZ2lzdHJ5W2VdO3Iuc2NoZW1hJiZyLnNjaGVtYS50cmFjZXMmJnIuc2NoZW1hLnRyYWNlc1t0XSYmT2JqZWN0LmtleXMoci5zY2hlbWEudHJhY2VzW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2YobixyLnNjaGVtYS50cmFjZXNbdF1bZV0sZSl9KX0pLG4udHlwZT10O3ZhciBpPXttZXRhOmUubWV0YXx8e30sYXR0cmlidXRlczpzKG4pfTtpZihlLmxheW91dEF0dHJpYnV0ZXMpe3ZhciBhPXt9O00oYSxlLmxheW91dEF0dHJpYnV0ZXMpLGkubGF5b3V0QXR0cmlidXRlcz1zKGEpfXJldHVybiBpfWZ1bmN0aW9uIGkoKXt2YXIgdD17fTtyZXR1cm4gTSh0LHYpLE9iamVjdC5rZXlzKGQuc3VicGxvdHNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1kLnN1YnBsb3RzUmVnaXN0cnlbZV07aWYoci5sYXlvdXRBdHRyaWJ1dGVzKWlmKCJjYXJ0ZXNpYW4iPT09ci5uYW1lKWgodCxyLCJ4YXhpcyIpLGgodCxyLCJ5YXhpcyIpO2Vsc2V7dmFyIG49InN1YnBsb3QiPT09ci5hdHRyP3IubmFtZTpyLmF0dHI7aCh0LHIsbil9fSksdD1jKHQpLE9iamVjdC5rZXlzKGQuY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWQuY29tcG9uZW50c1JlZ2lzdHJ5W2VdO3IubGF5b3V0QXR0cmlidXRlcyYmKHIuc2NoZW1hJiZyLnNjaGVtYS5sYXlvdXQ/T2JqZWN0LmtleXMoci5zY2hlbWEubGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2YodCxyLnNjaGVtYS5sYXlvdXRbZV0sZSl9KTpmKHQsci5sYXlvdXRBdHRyaWJ1dGVzLHIubmFtZSkpfSkse2xheW91dEF0dHJpYnV0ZXM6cyh0KX19ZnVuY3Rpb24gYSh0KXt2YXIgZT1kLnRyYW5zZm9ybXNSZWdpc3RyeVt0XSxyPU0oe30sZS5hdHRyaWJ1dGVzKTtyZXR1cm4gT2JqZWN0LmtleXMoZC5jb21wb25lbnRzUmVnaXN0cnkpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ZC5jb21wb25lbnRzUmVnaXN0cnlbZV07bi5zY2hlbWEmJm4uc2NoZW1hLnRyYW5zZm9ybXMmJm4uc2NoZW1hLnRyYW5zZm9ybXNbdF0mJk9iamVjdC5rZXlzKG4uc2NoZW1hLnRyYW5zZm9ybXNbdF0pLmZvckVhY2goZnVuY3Rpb24oZSl7ZihyLG4uc2NoZW1hLnRyYW5zZm9ybXNbdF1bZV0sZSl9KX0pLHthdHRyaWJ1dGVzOnMocil9fWZ1bmN0aW9uIG8oKXt2YXIgdD17ZnJhbWVzOnAuZXh0ZW5kRGVlcCh7fSxnKX07cmV0dXJuIHModCksdC5mcmFtZXN9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbCh0KSx1KHQpLHR9ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBlKHQpe3JldHVybnt2YWxUeXBlOiJzdHJpbmcifX1mdW5jdGlvbiBuKHQsbixpKXtyLmlzVmFsT2JqZWN0KHQpPyJkYXRhX2FycmF5Ij09PXQudmFsVHlwZT8odC5yb2xlPSJkYXRhIixpW24rInNyYyJdPWUobikpOiEwPT09dC5hcnJheU9rJiYoaVtuKyJzcmMiXT1lKG4pKTpwLmlzUGxhaW5PYmplY3QodCkmJih0LnJvbGU9Im9iamVjdCIpfXIuY3Jhd2wodCxuKX1mdW5jdGlvbiB1KHQpe2Z1bmN0aW9uIGUodCxlLHIpe2lmKHQpe3ZhciBuPXRbQV07biYmKGRlbGV0ZSB0W0FdLHJbZV09e2l0ZW1zOnt9fSxyW2VdLml0ZW1zW25dPXQscltlXS5yb2xlPSJvYmplY3QiKX19ci5jcmF3bCh0LGUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIHcodCx7cmFkaWFsYXhpczp4LnJhZGlhbGF4aXMsYW5ndWxhcmF4aXM6eC5hbmd1bGFyYXhpc30pLHcodCx4LmxheW91dCksdH1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj1wLm5lc3RlZFByb3BlcnR5KHQsciksaT1NKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7aVtrXT0hMCxuLnNldChpKX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1wLm5lc3RlZFByb3BlcnR5KHQscik7bi5zZXQoTShuLmdldCgpfHx7fSxlKSl9dmFyIGQ9dCgiLi4vcmVnaXN0cnkiKSxwPXQoIi4uL2xpYiIpLG09dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLHY9dCgiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxnPXQoIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiKSx5PXQoIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksYj10KCIuLi9wbG90cy9wb2xhci9hcmVhX2F0dHJpYnV0ZXMiKSx4PXQoIi4uL3Bsb3RzL3BvbGFyL2F4aXNfYXR0cmlidXRlcyIpLF89dCgiLi9lZGl0X3R5cGVzIiksdz1wLmV4dGVuZEZsYXQsTT1wLmV4dGVuZERlZXAsaz0iX2lzU3VicGxvdE9iaiIsQT0iX2lzTGlua2VkVG9BcnJheSIsVD1bayxBLCJfYXJyYXlBdHRyUmVnZXhwcyIsIl9kZXByZWNhdGVkIl07ci5JU19TVUJQTE9UX09CSj1rLHIuSVNfTElOS0VEX1RPX0FSUkFZPUEsci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPVQsci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtkLmFsbFR5cGVzLmNvbmNhdCgiYXJlYSIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1uKGUpfSk7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKGQudHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09YSh0KX0pLHtkZWZzOnt2YWxPYmplY3RzOnAudmFsT2JqZWN0cyxtZXRhS2V5czpULmNvbmNhdChbImRlc2NyaXB0aW9uIiwicm9sZSJdKSxlZGl0VHlwZXM6e3RyYWNlczpfLnRyYWNlcygpLGxheW91dDpfLmxheW91dCgpfX0sdHJhY2VzOnQsbGF5b3V0OmkoKSx0cmFuc2Zvcm1zOmUsZnJhbWVzOm8oKSxhbmltYXRpb246cyh5KX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW58fDA7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgYT10W25dOy0xPT09VC5pbmRleE9mKG4pJiYoZShhLG4sdCxpKSxyLmlzVmFsT2JqZWN0KGEpfHxwLmlzUGxhaW5PYmplY3QoYSkmJnIuY3Jhd2woYSxlLGkrMSkpfSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG8scyl7aWYoYT1hLnNsaWNlKDAscykuY29uY2F0KFtyXSksZSYmKCJkYXRhX2FycmF5Ij09PWUudmFsVHlwZXx8ITA9PT1lLmFycmF5T2spJiYhKCJjb2xvcmJhciI9PT1hW3MtMV0mJigidGlja3RleHQiPT09cnx8InRpY2t2YWxzIj09PXIpKSl7dmFyIGw9bihhKSx1PXAubmVzdGVkUHJvcGVydHkodCxsKS5nZXQoKTtBcnJheS5pc0FycmF5KHUpJiZpLnB1c2gobCl9fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQuam9pbigiLiIpfXZhciBpPVtdLGE9W107aWYoci5jcmF3bChtLGUpLHQuX21vZHVsZSYmdC5fbW9kdWxlLmF0dHJpYnV0ZXMmJnIuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsZSksdC50cmFuc2Zvcm1zKWZvcih2YXIgbz10LnRyYW5zZm9ybXMscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdLHU9bC5fbW9kdWxlO3UmJihhPVsidHJhbnNmb3Jtc1siK3MrIl0iXSxyLmNyYXdsKHUuYXR0cmlidXRlcyxlLDEpKX1yZXR1cm4gdC5fZnVsbElucHV0JiZ0Ll9mdWxsSW5wdXQuX21vZHVsZSYmdC5fZnVsbElucHV0Ll9tb2R1bGUuYXR0cmlidXRlcyYmKHIuY3Jhd2wodC5fZnVsbElucHV0Ll9tb2R1bGUuYXR0cmlidXRlcyxlKSxpPXAuZmlsdGVyVW5pcXVlKGkpKSxpfX0seyIuLi9saWIiOjcyNCwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc2MCwiLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIjo3ODksIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4MTgsIi4uL3Bsb3RzL3BvbGFyL2FyZWFfYXR0cmlidXRlcyI6ODI4LCIuLi9wbG90cy9wb2xhci9heGlzX2F0dHJpYnV0ZXMiOjgyOSwiLi4vcmVnaXN0cnkiOjg0MiwiLi9lZGl0X3R5cGVzIjo3NDh9XSw3NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtvLnJlZ2lzdGVyKHQsdC5uYW1lLHQuY2F0ZWdvcmllcyx0Lm1ldGEpLG8uc3VicGxvdHNSZWdpc3RyeVt0LmJhc2VQbG90TW9kdWxlLm5hbWVdfHxvLnJlZ2lzdGVyU3VicGxvdCh0LmJhc2VQbG90TW9kdWxlKX1mdW5jdGlvbiBpKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiVHJhbnNmb3JtIG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT0iVHJhbnNmb3JtIG1vZHVsZSAiK3QubmFtZSxyPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSxuPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIXImJiFuKXRocm93IG5ldyBFcnJvcihlKyIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuIik7ciYmbiYmcy5sb2coW2UrIiBoYXMgYm90aCBhICp0cmFuc2Zvcm0qIGFuZCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iLCJQbGVhc2Ugbm90ZSB0aGF0IGFsbCAqdHJhbnNmb3JtKiBtZXRob2RzIGFyZSBleGVjdXRlZCIsImJlZm9yZSBhbGwgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIl0uam9pbigiICIpKSxzLmlzUGxhaW5PYmplY3QodC5hdHRyaWJ1dGVzKXx8cy5sb2coZSsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhbiAqYXR0cmlidXRlcyogb2JqZWN0LiIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LnN1cHBseURlZmF1bHRzJiZzLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGEgKnN1cHBseURlZmF1bHRzKiBtZXRob2QuIiksby50cmFuc2Zvcm1zUmVnaXN0cnlbdC5uYW1lXT10fWZ1bmN0aW9uIGEodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb21wb25lbnQgbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO28ucmVnaXN0ZXJDb21wb25lbnQodCl9dmFyIG89dCgiLi4vcmVnaXN0cnkiKSxzPXQoIi4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFyZ3VtZW50IHBhc3NlZCB0byBQbG90bHkucmVnaXN0ZXIuIik7dCYmIUFycmF5LmlzQXJyYXkodCkmJih0PVt0XSk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIik7c3dpdGNoKHIubW9kdWxlVHlwZSl7Y2FzZSJ0cmFjZSI6bihyKTticmVhaztjYXNlInRyYW5zZm9ybSI6aShyKTticmVhaztjYXNlImNvbXBvbmVudCI6YShyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpfX19fSx7Ii4uL2xpYiI6NzI0LCIuLi9yZWdpc3RyeSI6ODQyfV0sNzU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RseSIpLGk9dCgiLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpLmV4dGVuZEZsYXQobi5kZWZhdWx0Q29uZmlnLHQpfX0seyIuLi9saWIiOjcyNCwiLi4vcGxvdGx5Ijo3NTl9XSw3NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl1bMF0sYT1yW25dWzFdO2lmKCEoaVswXT49dFsxXXx8aVsxXTw9dFswXSkmJihhWzBdPGVbMV0mJmFbMV0+ZVswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHQuX2FuY2hvckF4aXM9PT1lJiYodC5taXJyb3J8fHQuc2lkZT09PXIpfHwiYWxsIj09PXQubWlycm9yfHwiYWxsdGlja3MiPT09dC5taXJyb3J8fHQubWlycm9ycyYmdC5taXJyb3JzW2UuX2lkK3JdfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPVtdLGk9ZS5fYW5jaG9yQXhpcztpZihpKXt2YXIgYT1pLl9tYWluQXhpcztpZigtMT09PW4uaW5kZXhPZihhKSl7bi5wdXNoKGEpO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXJbb10ub3ZlcmxheWluZz09PWEuX2lkJiYtMT09PW4uaW5kZXhPZihyW29dKSYmbi5wdXNoKHJbb10pfX1yZXR1cm4gbn1mdW5jdGlvbiBvKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPWEuX2FuY2hvckF4aXM7aWYobyYmaShhLG8scikpcmV0dXJuIHAuY3Jpc3BSb3VuZCh0LGEubGluZXdpZHRoKX19ZnVuY3Rpb24gcyh0LGUscixuLGkscyl7aWYobilyZXR1cm4gcjt2YXIgbCx1PWUuX21haW5BeGlzLGM9YSh0LHUscyksaD1vKHQsYyxpKTtpZihoKXJldHVybiBoO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspaWYoc1tsXS5vdmVybGF5aW5nPT09dS5faWQmJihjPWEodCxzW2xdLHMpLGg9byh0LGMsaSkpKXJldHVybiBoO3JldHVybiAwfXZhciBsPXQoImQzIiksdT10KCIuLi9wbG90bHkiKSxjPXQoIi4uL3JlZ2lzdHJ5IiksaD10KCIuLi9wbG90cy9wbG90cyIpLGY9dCgiLi4vbGliIiksZD10KCIuLi9jb21wb25lbnRzL2NvbG9yIikscD10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxtPXQoIi4uL2NvbXBvbmVudHMvdGl0bGVzIiksdj10KCIuLi9jb21wb25lbnRzL21vZGViYXIiKSxnPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLHk9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpO3IubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBmLnN5bmNPckFzeW5jKFtoLmRvQXV0b01hcmdpbixyLmxzSW5uZXJdLHQpfSxyLmxzSW5uZXI9ZnVuY3Rpb24odCl7dmFyIGUsYT10Ll9mdWxsTGF5b3V0LG89YS5fc2l6ZSxjPW8ucCxoPXUuQXhlcy5saXN0KHQpLGY9YS5faGFzKCJjYXJ0ZXNpYW4iKTtmb3IoZT0wO2U8aC5sZW5ndGg7ZSsrKWhbZV0uX2xpbmVwb3NpdGlvbnM9e307YS5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOmEud2lkdGgrInB4IixoZWlnaHQ6YS5oZWlnaHQrInB4In0pLnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuY2FsbChwLnNldFNpemUsYS53aWR0aCxhLmhlaWdodCksdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsYS5wYXBlcl9iZ2NvbG9yKTt2YXIgbT1hLl9wYXBlci5zZWxlY3RBbGwoImcuc3VicGxvdCIpLGc9W10sYj1bXTttLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YS5fcGxvdHNbdF07aWYoZS5tYWlucGxvdClyZXR1cm4gZS5iZyYmZS5iZy5yZW1vdmUoKSx2b2lkKGUuYmc9dm9pZCAwKTt2YXIgcj1lLnhheGlzLmRvbWFpbixpPWUueWF4aXMuZG9tYWluLG89W107bihyLGksYik/bz1bMF06KGcucHVzaCh0KSxiLnB1c2goW3IsaV0pKTt2YXIgcz1lLnBsb3Rncm91cC5zZWxlY3RBbGwoIi5iZyIpLmRhdGEobyk7cy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJnIiwhMCkscy5leGl0KCkucmVtb3ZlKCkscy5lYWNoKGZ1bmN0aW9uKCl7ZS5iZz1zO3ZhciB0PWUucGxvdGdyb3VwLm5vZGUoKTt0Lmluc2VydEJlZm9yZSh0aGlzLHQuY2hpbGROb2Rlc1swXSl9KX0pO3ZhciB4PWEuX2JnTGF5ZXIuc2VsZWN0QWxsKCIuYmciKS5kYXRhKGcpO3guZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLHguZXhpdCgpLnJlbW92ZSgpLHguZWFjaChmdW5jdGlvbih0KXthLl9wbG90c1t0XS5iZz1sLnNlbGVjdCh0aGlzKX0pO3ZhciBfPXt9O3JldHVybiBtLmVhY2goZnVuY3Rpb24ocil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBlPyJNIitQKyIsIit0KyJIIitSOiIifWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gZT8iTSIrdCsiLCIrSCsiViIrVToiIn12YXIgdT1hLl9wbG90c1tyXSxtPXUueGF4aXMsdj11LnlheGlzO20uc2V0U2NhbGUoKSx2LnNldFNjYWxlKCksdS5iZyYmZiYmdS5iZy5jYWxsKHAuc2V0UmVjdCxtLl9vZmZzZXQtYyx2Ll9vZmZzZXQtYyxtLl9sZW5ndGgrMipjLHYuX2xlbmd0aCsyKmMpLmNhbGwoZC5maWxsLGEucGxvdF9iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKSx1LmNsaXBJZD0iY2xpcCIrYS5fdWlkK3IrInBsb3QiO3ZhciBnPWEuX2RlZnMuc2VsZWN0QWxsKCJnLmNsaXBzIikuc2VsZWN0QWxsKCIjIit1LmNsaXBJZCkuZGF0YShbMF0pO2cuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cih7Y2xhc3M6InBsb3RjbGlwIixpZDp1LmNsaXBJZH0pLmFwcGVuZCgicmVjdCIpLGcuc2VsZWN0QWxsKCJyZWN0IikuYXR0cih7d2lkdGg6bS5fbGVuZ3RoLGhlaWdodDp2Ll9sZW5ndGh9KSxwLnNldFRyYW5zbGF0ZSh1LnBsb3QsbS5fb2Zmc2V0LHYuX29mZnNldCk7dmFyIGIseDtmb3IodS5faGFzQ2xpcE9uQXhpc0ZhbHNlPyhiPW51bGwseD11LmNsaXBJZCk6KGI9dS5jbGlwSWQseD1udWxsKSxwLnNldENsaXBVcmwodS5wbG90LGIpLGU9MDtlPHkudHJhY2VMYXllckNsYXNzZXMubGVuZ3RoO2UrKyl7dmFyIHc9eS50cmFjZUxheWVyQ2xhc3Nlc1tlXTsic2NhdHRlcmxheWVyIiE9PXcmJnUucGxvdC5zZWxlY3RBbGwoImcuIit3KS5jYWxsKHAuc2V0Q2xpcFVybCx4KX11LmxheWVyQ2xpcElkPXg7dmFyIE09IW0uX2FuY2hvckF4aXMsaz1NJiYhX1ttLl9pZF0sQT1pKG0sdiwiYm90dG9tIiksVD1pKG0sdiwidG9wIiksUz0hdi5fYW5jaG9yQXhpcyxFPVMmJiFfW3YuX2lkXSxMPWkodixtLCJsZWZ0IiksQz1pKHYsbSwicmlnaHQiKSx6PXAuY3Jpc3BSb3VuZCh0LG0ubGluZXdpZHRoLDEpLEk9cC5jcmlzcFJvdW5kKHQsdi5saW5ld2lkdGgsMSksRD1zKHQsbSxJLEwsImxlZnQiLGgpLFA9IU0mJkQ/LWMtRDowLE89cyh0LG0sSSxDLCJyaWdodCIsaCksUj1tLl9sZW5ndGgrKCFNJiZPP2MrTzowKSxGPW8uaCooMS0obS5wb3NpdGlvbnx8MCkpK3ovMiUxLGo9di5fbGVuZ3RoK2Mrei8yLE49LWMtei8yLEI9IVMmJnModCx2LHosQSwiYm90dG9tIixoKSxVPXYuX2xlbmd0aCsoQj9jOjApLFY9IVMmJnModCx2LHosVCwidG9wIixoKSxIPVY/LWM6MCxxPW8udyoodi5wb3NpdGlvbnx8MCkrSS8yJTEsRz0tYy1JLzIsWT1tLl9sZW5ndGgrYytJLzI7bS5fbGluZXBvc2l0aW9uc1tyXT1bQT9qOnZvaWQgMCxUP046dm9pZCAwLGs/Rjp2b2lkIDBdLG0uX2FuY2hvckF4aXM9PT12P20uX2xpbmVwb3NpdGlvbnNbcl1bM109InRvcCI9PT1tLnNpZGU/TjpqOmsmJihtLl9saW5lcG9zaXRpb25zW3JdWzNdPUYpLHYuX2xpbmVwb3NpdGlvbnNbcl09W0w/Rzp2b2lkIDAsQz9ZOnZvaWQgMCxFP3E6dm9pZCAwXSx2Ll9hbmNob3JBeGlzPT09bT92Ll9saW5lcG9zaXRpb25zW3JdWzNdPSJyaWdodCI9PT12LnNpZGU/WTpHOkUmJih2Ll9saW5lcG9zaXRpb25zW3JdWzNdPXEpO3ZhciBYPSJ0cmFuc2xhdGUoIittLl9vZmZzZXQrIiwiK3YuX29mZnNldCsiKSIsVz1YLFo9WDtrJiYoVz0idHJhbnNsYXRlKCIrbS5fb2Zmc2V0KyIsIitvLnQrIikiLE4rPXYuX29mZnNldC1vLnQsais9di5fb2Zmc2V0LW8udCksRSYmKFo9InRyYW5zbGF0ZSgiK28ubCsiLCIrdi5fb2Zmc2V0KyIpIixHKz1tLl9vZmZzZXQtby5sLFkrPW0uX29mZnNldC1vLmwpLGYmJih1LnhsaW5lcy5hdHRyKCJ0cmFuc2Zvcm0iLFcpLmF0dHIoImQiLG4oaixBKStuKE4sVCkrbihGLGspfHwiTTAsMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHorInB4IikuY2FsbChkLnN0cm9rZSxtLnNob3dsaW5lP20ubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIiksdS55bGluZXMuYXR0cigidHJhbnNmb3JtIixaKS5hdHRyKCJkIixsKEcsTCkrbChZLEMpK2wocSxFKXx8Ik0wLDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixJKyJweCIpLmNhbGwoZC5zdHJva2Usdi5zaG93bGluZT92LmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSx1LnhheGlzbGF5ZXIuYXR0cigidHJhbnNmb3JtIixXKSx1LnlheGlzbGF5ZXIuYXR0cigidHJhbnNmb3JtIixaKSx1LmdyaWRsYXllci5hdHRyKCJ0cmFuc2Zvcm0iLFgpLHUuemVyb2xpbmVsYXllci5hdHRyKCJ0cmFuc2Zvcm0iLFgpLHUuZHJhZ2xheWVyLmF0dHIoInRyYW5zZm9ybSIsWCksayYmKF9bbS5faWRdPTEpLEUmJihfW3YuX2lkXT0xKX0pLHUuQXhlcy5tYWtlQ2xpcFBhdGhzKHQpLHIuZHJhd01haW5UaXRsZSh0KSx2Lm1hbmFnZSh0KSx0Ll9wcm9taXNlcy5sZW5ndGgmJlByb21pc2UuYWxsKHQuX3Byb21pc2VzKX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7bS5kcmF3KHQsImd0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZToidGl0bGUiLGRmbHROYW1lOiJQbG90IixhdHRyaWJ1dGVzOnt4OmUud2lkdGgvMix5OmUuX3NpemUudC8yLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5jYWxjZGF0YS5sZW5ndGg7ZSsrKXt2YXIgcj10LmNhbGNkYXRhW2VdLG49KChyWzBdfHx7fSkudHJhY2V8fHt9KS5fbW9kdWxlfHx7fSxpPW4uYXJyYXlzVG9DYWxjZGF0YTtpJiZpKHIsclswXS50cmFjZSl9cmV0dXJuIGguc3R5bGUodCksYy5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxoLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Db2xvckJhcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0LmNhbGNkYXRhLmxlbmd0aDtlKyspe3ZhciByPXQuY2FsY2RhdGFbZV1bMF07aWYoKHIudHx8e30pLmNiKXt2YXIgbj1yLnRyYWNlLGk9ci50LmNiO2MudHJhY2VJcyhuLCJjb250b3VyIikmJmkubGluZSh7d2lkdGg6ITEhPT1uLmNvbnRvdXJzLnNob3dsaW5lcz9uLmxpbmUud2lkdGg6MCxkYXNoOm4ubGluZS5kYXNoLGNvbG9yOiJsaW5lIj09PW4uY29udG91cnMuY29sb3Jpbmc/aS5fb3B0cy5saW5lLmNvbG9yOm4ubGluZS5jb2xvcn0pLGMudHJhY2VJcyhuLCJtYXJrZXJDb2xvcnNjYWxlIik/aS5vcHRpb25zKG4ubWFya2VyLmNvbG9yYmFyKSgpOmkub3B0aW9ucyhuLmNvbG9yYmFyKSgpfX1yZXR1cm4gaC5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmxheW91dFJlcGxvdD1mdW5jdGlvbih0KXt2YXIgZT10LmxheW91dDtyZXR1cm4gdC5sYXlvdXQ9dm9pZCAwLHUucGxvdCh0LCIiLGUpfSxyLmRvTGVnZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBjLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGgucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUuQXhlcy5kb1RpY2tzKHQsInJlZHJhdyIpLHIuZHJhd01haW5UaXRsZSh0KSxoLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Nb2RlQmFyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQuX2Z1bGxMYXlvdXQ7Zm9yKHYubWFuYWdlKHQpLGcodCksZT1oLmdldFN1YnBsb3RJZHMoaSwiZ2wzZCIpLG49MDtuPGUubGVuZ3RoO24rKylyPWlbZVtuXV0uX3NjZW5lLHIudXBkYXRlRngoaS5kcmFnbW9kZSxpLmhvdmVybW9kZSk7Zm9yKGU9aC5nZXRTdWJwbG90SWRzKGksImdsMmQiKSxuPTA7bjxlLmxlbmd0aDtuKyspcj1pLl9wbG90c1tlW25dXS5fc2NlbmUyZCxyLnVwZGF0ZUZ4KGkuZHJhZ21vZGUpO2ZvcihlPWguZ2V0U3VicGxvdElkcyhpLCJtYXBib3giKSxuPTA7bjxlLmxlbmd0aDtuKyspcj1pW2Vbbl1dLl9zdWJwbG90LHIudXBkYXRlRngoaSk7cmV0dXJuIGgucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NhbWVyYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWguZ2V0U3VicGxvdElkcyhlLCJnbDNkIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dO2kuX3NjZW5lLnNldENhbWVyYShpLmNhbWVyYSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi9jb21wb25lbnRzL21vZGViYXIiOjY2MiwiLi4vY29tcG9uZW50cy90aXRsZXMiOjY5MSwiLi4vbGliIjo3MjQsIi4uL3Bsb3RseSI6NzU5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NjksIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCI6NzczLCIuLi9wbG90cy9wbG90cyI6ODI3LCIuLi9yZWdpc3RyeSI6ODQyLGQzOjEyMH1dLDc1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7ZnVuY3Rpb24gaCgpe3ZhciB0PXMuZ2V0RGVsYXkocC5fZnVsbExheW91dCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PXUocCksaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpLmlkPW8ucmFuZHN0cigpLGMoe2Zvcm1hdDplLmZvcm1hdCx3aWR0aDpwLl9mdWxsTGF5b3V0LndpZHRoLGhlaWdodDpwLl9mdWxsTGF5b3V0LmhlaWdodCxjYW52YXM6aSxzdmc6dCxwcm9taXNlOiEwfSkudGhlbihmdW5jdGlvbih0KXtwJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHApLHIodCl9KS5jYXRjaChmdW5jdGlvbih0KXtuKHQpfSl9LHQpfSl9ZT1lfHx7fSxlLmZvcm1hdD1lLmZvcm1hdHx8InBuZyI7dmFyIGY9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR8fG51bGw9PT10fHwhIShpKHQpJiZ0PjEpfTtmKGUud2lkdGgpJiZmKGUuaGVpZ2h0KXx8bihuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKSk7dmFyIGQ9bCh0LHtmb3JtYXQ6InBuZyIsaGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUud2lkdGh9KSxwPWQuZ2Q7cC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHAuc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwKTt2YXIgbT1zLmdldFJlZHJhd0Z1bmMocCk7YS5wbG90KHAsZC5kYXRhLGQubGF5b3V0LGQuY29uZmlnKS50aGVuKG0pLnRoZW4oaCkudGhlbihmdW5jdGlvbih0KXtyKHQpfSkuY2F0Y2goZnVuY3Rpb24odCl7bih0KX0pfSl9dmFyIGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL3Bsb3RseSIpLG89dCgiLi4vbGliIikscz10KCIuLi9zbmFwc2hvdC9oZWxwZXJzIiksbD10KCIuLi9zbmFwc2hvdC9jbG9uZXBsb3QiKSx1PXQoIi4uL3NuYXBzaG90L3Rvc3ZnIiksYz10KCIuLi9zbmFwc2hvdC9zdmd0b2ltZyIpO2UuZXhwb3J0cz1ufSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90bHkiOjc1OSwiLi4vc25hcHNob3QvY2xvbmVwbG90Ijo4NDMsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjg0NiwiLi4vc25hcHNob3Qvc3ZndG9pbWciOjg0OCwiLi4vc25hcHNob3QvdG9zdmciOjg1MCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDc1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLGksYSx1KXt1PXV8fFtdO2Zvcih2YXIgYz1PYmplY3Qua2V5cyh0KSxmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBkPWNbZl07aWYoInRyYW5zZm9ybXMiIT09ZCl7dmFyIHY9dS5zbGljZSgpO3YucHVzaChkKTt2YXIgZz10W2RdLHk9ZVtkXSxiPWwocixkKSx4PSJpbmZvX2FycmF5Ij09PShifHx7fSkudmFsVHlwZSxfPSJjb2xvcnNjYWxlIj09PShifHx7fSkudmFsVHlwZTtpZihzKHIsZCkpaWYocChnKSYmcCh5KSluKGcseSxiLGksYSx2KTtlbHNlIGlmKGIuaXRlbXMmJiF4JiZtKGcpKXt2YXIgdyxNLGs9Yi5pdGVtcyxBPWtbT2JqZWN0LmtleXMoaylbMF1dLFQ9W107Zm9yKHc9MDt3PHkubGVuZ3RoO3crKyl7dmFyIFM9eVt3XS5faW5kZXh8fHc7TT12LnNsaWNlKCksTS5wdXNoKFMpLHAoZ1tTXSkmJnAoeVt3XSkmJihULnB1c2goUyksbihnW1NdLHlbd10sQSxpLGEsTSkpfWZvcih3PTA7dzxnLmxlbmd0aDt3KyspTT12LnNsaWNlKCksTS5wdXNoKHcpLHAoZ1t3XSk/LTE9PT1ULmluZGV4T2YodykmJmkucHVzaChvKCJ1bnVzZWQiLGEsTSkpOmkucHVzaChvKCJvYmplY3QiLGEsTSxnW3ddKSl9ZWxzZSFwKGcpJiZwKHkpP2kucHVzaChvKCJvYmplY3QiLGEsdixnKSk6bShnKXx8IW0oeSl8fHh8fF8/ZCBpbiBlP2gudmFsaWRhdGUoZyxiKT8iZW51bWVyYXRlZCI9PT1iLnZhbFR5cGUmJihiLmNvZXJjZU51bWJlciYmZyE9PSt5fHxnIT09eSkmJmkucHVzaChvKCJkeW5hbWljIixhLHYsZyx5KSk6aS5wdXNoKG8oInZhbHVlIixhLHYsZykpOmkucHVzaChvKCJ1bnVzZWQiLGEsdixnKSk6aS5wdXNoKG8oImFycmF5IixhLHYsZykpO2Vsc2UgaS5wdXNoKG8oInNjaGVtYSIsYSx2KSl9fXJldHVybiBpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXS50eXBlLGk9dC50cmFjZXNbbl0ubGF5b3V0QXR0cmlidXRlcztpJiZoLmV4dGVuZEZsYXQodC5sYXlvdXQubGF5b3V0QXR0cmlidXRlcyxpKX1yZXR1cm4gdC5sYXlvdXQubGF5b3V0QXR0cmlidXRlc31mdW5jdGlvbiBhKHQpe3JldHVybiBtKHQpPyJJbiBkYXRhIHRyYWNlICIrdFsxXSsiLCAiOiJJbiAiK3QrIiwgIn1mdW5jdGlvbiBvKHQsZSxyLG4saSl7cj1yfHwiIjt2YXIgYSxvO20oZSk/KGE9ZVswXSxvPWVbMV0pOihhPWUsbz1udWxsKTt2YXIgcz1jKHIpLGw9dlt0XShlLHMsbixpKTtyZXR1cm4gaC5sb2cobCkse2NvZGU6dCxjb250YWluZXI6YSx0cmFjZTpvLHBhdGg6cixhc3RyOnMsbXNnOmx9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj11KGUpLG49ci5rZXlNaW51c0lkLGk9ci5pZDtyZXR1cm4hIShuIGluIHQmJnRbbl0uX2lzU3VicGxvdE9iaiYmaSl8fGUgaW4gdH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbdShlKS5rZXlNaW51c0lkXX1mdW5jdGlvbiB1KHQpe3ZhciBlPS8oWzItOV18WzEtOV1bMC05XSspJC8scj10LnNwbGl0KGUpWzBdO3JldHVybntrZXlNaW51c0lkOnIsaWQ6dC5zdWJzdHIoci5sZW5ndGgsdC5sZW5ndGgpfX1mdW5jdGlvbiBjKHQpe2lmKCFtKHQpKXJldHVybiBTdHJpbmcodCk7Zm9yKHZhciBlPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTsibnVtYmVyIj09dHlwZW9mIG4/ZT1lLnN1YnN0cigwLGUubGVuZ3RoLTEpKyJbIituKyJdIjplKz1uLHI8dC5sZW5ndGgtMSYmKGUrPSIuIil9cmV0dXJuIGV9dmFyIGg9dCgiLi4vbGliIiksZj10KCIuLi9wbG90cy9wbG90cyIpLGQ9dCgiLi9wbG90X3NjaGVtYSIpLHA9aC5pc1BsYWluT2JqZWN0LG09QXJyYXkuaXNBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLHM9ZC5nZXQoKSxsPVtdLHU9e307bSh0KT8odS5kYXRhPWguZXh0ZW5kRGVlcChbXSx0KSxyPXQpOih1LmRhdGE9W10scj1bXSxsLnB1c2gobygiYXJyYXkiLCJkYXRhIikpKSxwKGUpPyh1LmxheW91dD1oLmV4dGVuZERlZXAoe30sZSksYT1lKToodS5sYXlvdXQ9e30sYT17fSxhcmd1bWVudHMubGVuZ3RoPjEmJmwucHVzaChvKCJvYmplY3QiLCJsYXlvdXQiKSkpLGYuc3VwcGx5RGVmYXVsdHModSk7Zm9yKHZhciBjPXUuX2Z1bGxEYXRhLHY9ci5sZW5ndGgsZz0wO2c8djtnKyspe3ZhciB5PXJbZ10sYj1bImRhdGEiLGddO2lmKHAoeSkpe3ZhciB4PWNbZ10sXz14LnR5cGUsdz1zLnRyYWNlc1tfXS5hdHRyaWJ1dGVzO3cudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltfXX0sITE9PT14LnZpc2libGUmJiExIT09eS52aXNpYmxlJiZsLnB1c2gobygiaW52aXNpYmxlIixiKSksbih5LHgsdyxsLGIpO3ZhciBNPXkudHJhbnNmb3JtcyxrPXgudHJhbnNmb3JtcztpZihNKXttKE0pfHxsLnB1c2gobygiYXJyYXkiLGIsWyJ0cmFuc2Zvcm1zIl0pKSxiLnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIEE9MDtBPE0ubGVuZ3RoO0ErKyl7dmFyIFQ9WyJ0cmFuc2Zvcm1zIixBXSxTPU1bQV0udHlwZTtpZihwKE1bQV0pKXt2YXIgRT1zLnRyYW5zZm9ybXNbU10/cy50cmFuc2Zvcm1zW1NdLmF0dHJpYnV0ZXM6e307RS50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMocy50cmFuc2Zvcm1zKX0sbihNW0FdLGtbQV0sRSxsLGIsVCl9ZWxzZSBsLnB1c2gobygib2JqZWN0IixiLFQpKX19fWVsc2UgbC5wdXNoKG8oIm9iamVjdCIsYikpfXJldHVybiBuKGEsdS5fZnVsbExheW91dCxpKHMsYyksbCwibGF5b3V0IiksMD09PWwubGVuZ3RoP3ZvaWQgMDpsfTt2YXIgdj17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjphKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6YSh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXAocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIGEodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVyblthKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiJUcmFjZSAiK3RbMV0rIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVyblthKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX19LHsiLi4vbGliIjo3MjQsIi4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4vcGxvdF9zY2hlbWEiOjc1M31dLDc1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRlZmF1bHRDb25maWc9dCgiLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLHIuUGxvdHM9dCgiLi9wbG90cy9wbG90cyIpLHIuQXhlcz10KCIuL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksci5Nb2RlQmFyPXQoIi4vY29tcG9uZW50cy9tb2RlYmFyIiksdCgiLi9wbG90X2FwaS9wbG90X2FwaSIpfSx7Ii4vY29tcG9uZW50cy9tb2RlYmFyIjo2NjIsIi4vcGxvdF9hcGkvcGxvdF9hcGkiOjc1MSwiLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6NzUyLCIuL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4vcGxvdHMvcGxvdHMiOjgyN31dLDc2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImFmdGVyYWxsIix2YWx1ZXM6WyJpbW1lZGlhdGUiLCJuZXh0IiwiYWZ0ZXJhbGwiXX0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmb3J3YXJkIiwicmV2ZXJzZSJdLGRmbHQ6ImZvcndhcmQifSxmcm9tY3VycmVudDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZnJhbWU6e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NTAwfSxyZWRyYXc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0sZWFzaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjdWJpYy1pbi1vdXQiLAp2YWx1ZXM6WyJsaW5lYXIiLCJxdWFkIiwiY3ViaWMiLCJzaW4iLCJleHAiLCJjaXJjbGUiLCJlbGFzdGljIiwiYmFjayIsImJvdW5jZSIsImxpbmVhci1pbiIsInF1YWQtaW4iLCJjdWJpYy1pbiIsInNpbi1pbiIsImV4cC1pbiIsImNpcmNsZS1pbiIsImVsYXN0aWMtaW4iLCJiYWNrLWluIiwiYm91bmNlLWluIiwibGluZWFyLW91dCIsInF1YWQtb3V0IiwiY3ViaWMtb3V0Iiwic2luLW91dCIsImV4cC1vdXQiLCJjaXJjbGUtb3V0IiwiZWxhc3RpYy1vdXQiLCJiYWNrLW91dCIsImJvdW5jZS1vdXQiLCJsaW5lYXItaW4tb3V0IiwicXVhZC1pbi1vdXQiLCJjdWJpYy1pbi1vdXQiLCJzaW4taW4tb3V0IiwiZXhwLWluLW91dCIsImNpcmNsZS1pbi1vdXQiLCJlbGFzdGljLWluLW91dCIsImJhY2staW4tb3V0IiwiYm91bmNlLWluLW91dCJdfX19fSx7fV0sNzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYT1yLm5hbWUsbz1lW2FdLHM9bi5pc0FycmF5KHRbYV0pP3RbYV06W10sbD1lW2FdPVtdO2ZvcihpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciB1PXNbaV0sYz17fSxoPXt9O24uaXNQbGFpbk9iamVjdCh1KXx8KGguaXRlbUlzTm90UGxhaW5PYmplY3Q9ITAsdT17fSksci5oYW5kbGVJdGVtRGVmYXVsdHModSxjLGUscixoKSxjLl9pbnB1dD11LGMuX2luZGV4PWksbC5wdXNoKGMpfWlmKG4uaXNBcnJheShvKSl7dmFyIGY9TWF0aC5taW4oby5sZW5ndGgsbC5sZW5ndGgpO2ZvcihpPTA7aTxmO2krKyluLnJlbGlua1ByaXZhdGVLZXlzKGxbaV0sb1tpXSl9fX0seyIuLi9saWIiOjcyNH1dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXSxkZmx0OiJzY2F0dGVyIn0sdmlzaWJsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwibGVnZW5kb25seSJdLGRmbHQ6ITB9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxuYW1lOnt2YWxUeXBlOiJzdHJpbmcifSx1aWQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0saWRzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGhvdmVyaW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsieCIsInkiLCJ6IiwidGV4dCIsIm5hbWUiXSxleHRyYXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGFycmF5T2s6ITAsZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsc3RyZWFtOnt0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDB9fX19LHsiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2MzV9XSw3NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt4YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ4In0seWF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieSJ9fX0se31dLDc2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7ZnVuY3Rpb24gYShlKXtyZXR1cm4oMSsxMDAqKGUtdCkvci5kdGljayklMTAwPDJ9Zm9yKHZhciBvPTAscz0wLGw9MCx1PTAsYz0wO2M8ZS5sZW5ndGg7YysrKWVbY10lMT09MD9sKys6YihlW2NdKXx8dSsrLGEoZVtjXSkmJm8rKyxhKGVbY10rci5kdGljay8yKSYmcysrO3ZhciBoPWUubGVuZ3RoLXU7aWYobD09PWgmJiJkYXRlIiE9PXIudHlwZSlyLmR0aWNrPDE/dD1uLS41KnIuZHRpY2s6KHQtPS41KStyLmR0aWNrPG4mJih0Kz1yLmR0aWNrKTtlbHNlIGlmKHM8LjEqaCYmKG8+LjMqaHx8YShuKXx8YShpKSkpe3ZhciBmPXIuZHRpY2svMjt0Kz10K2Y8bj9mOi1mfXJldHVybiB0fWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYT1fLmZpbmRFeGFjdERhdGVzKGUsaSk7aWYoYS5leGFjdERheXM+Ljgpe3ZhciBvPU51bWJlcihyLnN1YnN0cigxKSk7YS5leGFjdFllYXJzPi44JiZvJTEyPT0wP3Q9Ty50aWNrSW5jcmVtZW50KHQsIk02IiwicmV2ZXJzZSIpKzEuNSpDOmEuZXhhY3RNb250aHM+Ljg/dD1PLnRpY2tJbmNyZW1lbnQodCwiTTEiLCJyZXZlcnNlIikrMTUuNSpDOnQtPUMvMjt2YXIgcz1PLnRpY2tJbmNyZW1lbnQodCxyKTtpZihzPD1uKXJldHVybiBzfXJldHVybiB0fWZ1bmN0aW9uIGEodCl7dmFyIGUscixuPXQudGlja3ZhbHMsaT10LnRpY2t0ZXh0LGE9bmV3IEFycmF5KG4ubGVuZ3RoKSxvPV8uc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLHM9MS4wMDAxKm9bMF0tMWUtNCpvWzFdLHU9MS4wMDAxKm9bMV0tMWUtNCpvWzBdLGM9TWF0aC5taW4ocyx1KSxoPU1hdGgubWF4KHMsdSksZj0wO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdKTt2YXIgZD0iY2F0ZWdvcnkiPT09dC50eXBlP3QuZDJsX25vYWRkOnQuZDJsO2ZvcigibG9nIj09PXQudHlwZSYmIkwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9IkwiK01hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5taW4odC5yYW5nZVswXSx0LnJhbmdlWzFdKSktMSkpLHI9MDtyPG4ubGVuZ3RoO3IrKykoZT1kKG5bcl0pKT5jJiZlPGgmJih2b2lkIDA9PT1pW3JdP2FbZl09Ty50aWNrVGV4dCh0LGUpOmFbZl09bCh0LGUsU3RyaW5nKGlbcl0pKSxmKyspO3JldHVybiBmPG4ubGVuZ3RoJiZhLnNwbGljZShmLG4ubGVuZ3RoLWYpLGF9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIGUqXy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQuZHRpY2s7aWYodC5fdGlja2V4cG9uZW50PTAsYihlKXx8InN0cmluZyI9PXR5cGVvZiBlfHwoZT0xKSwiY2F0ZWdvcnkiPT09dC50eXBlJiYodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksaT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWk+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PUMmJmk8PTEwfHxlPj0xNSpDKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj1JJiZpPD0xNnx8ZT49eil0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49RCYmaTw9MTl8fGU+PUkpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBhPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGksYSktMjB9fWVsc2UgaWYoYihlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBvPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2IoZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnMob1swXSksTWF0aC5hYnMob1sxXSkpLGw9TWF0aC5mbG9vcihNYXRoLmxvZyhzKS9NYXRoLkxOMTArLjAxKTtNYXRoLmFicyhsKT4zJiYoIlNJIj09PXQuZXhwb25lbnRmb3JtYXR8fCJCIj09PXQuZXhwb25lbnRmb3JtYXQ/dC5fdGlja2V4cG9uZW50PTMqTWF0aC5yb3VuZCgobC0xKS8zKTp0Ll90aWNrZXhwb25lbnQ9bCl9ZWxzZSB0Ll90aWNrcm91bmQ9bnVsbH1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj10LnRpY2tmb250fHx7fTtyZXR1cm57eDplLGR4OjAsZHk6MCx0ZXh0OnJ8fCIiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPXQuX3RpY2tyb3VuZCxhPXImJnQuaG92ZXJmb3JtYXR8fHQudGlja2Zvcm1hdDtuJiYoaT1iKGkpPzQ6e3k6Im0iLG06ImQiLGQ6Ik0iLE06IlMiLFM6NH1baV0pO3ZhciBvLHM9Xy5mb3JtYXREYXRlKGUueCxhLGksdC5jYWxlbmRhciksbD1zLmluZGV4T2YoIlxuIik7LTEhPT1sJiYobz1zLnN1YnN0cihsKzEpLHM9cy5zdWJzdHIoMCxsKSksbiYmKCIwMDowMDowMCI9PT1zfHwiMDA6MDAiPT09cz8ocz1vLG89IiIpOjg9PT1zLmxlbmd0aCYmKHM9cy5yZXBsYWNlKC86MDAkLywiIikpKSxvJiYocj8iZCI9PT1pP3MrPSIsICIrbzpzPW8rKHM/IiwgIitzOiIiKTp0Ll9pbkNhbGNUaWNrcyYmbz09PXQuX3ByZXZEYXRlSGVhZHx8KHMrPSI8YnI+IitvLHQuX3ByZXZEYXRlSGVhZD1vKSksZS50ZXh0PXN9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBhPXQuZHRpY2ssbz1lLng7aWYoIW58fCJzdHJpbmciPT10eXBlb2YgYSYmIkwiPT09YS5jaGFyQXQoMCl8fChhPSJMMyIpLHQudGlja2Zvcm1hdHx8InN0cmluZyI9PXR5cGVvZiBhJiYiTCI9PT1hLmNoYXJBdCgwKSllLnRleHQ9ZChNYXRoLnBvdygxMCxvKSx0LGksbik7ZWxzZSBpZihiKGEpfHwiRCI9PT1hLmNoYXJBdCgwKSYmXy5tb2QobysuMDEsMSk8LjEpaWYoLTEhPT1bImUiLCJFIiwicG93ZXIiXS5pbmRleE9mKHQuZXhwb25lbnRmb3JtYXQpKXt2YXIgcz1NYXRoLnJvdW5kKG8pO2UudGV4dD0wPT09cz8xOjE9PT1zPyIxMCI6cz4xPyIxMDxzdXA+IitzKyI8L3N1cD4iOiIxMDxzdXA+XHUyMjEyIistcysiPC9zdXA+IixlLmZvbnRTaXplKj0xLjI1fWVsc2UgZS50ZXh0PWQoTWF0aC5wb3coMTAsbyksdCwiIiwiZmFrZWhvdmVyIiksIkQxIj09PWEmJiJ5Ij09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNik7ZWxzZXtpZigiRCIhPT1hLmNoYXJBdCgwKSl0aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcoYSk7ZS50ZXh0PVN0cmluZyhNYXRoLnJvdW5kKE1hdGgucG93KDEwLF8ubW9kKG8sMSkpKSksZS5mb250U2l6ZSo9Ljc1fWlmKCJEMSI9PT10LmR0aWNrKXt2YXIgbD1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7IjAiIT09bCYmIjEiIT09bHx8KCJ5Ij09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKG88MD8uNTouMjUpKSl9fWZ1bmN0aW9uIGgodCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9IiIpLGUudGV4dD1TdHJpbmcocil9ZnVuY3Rpb24gZih0LGUscixuLGkpeyJhbGwiPT09dC5zaG93ZXhwb25lbnQmJk1hdGguYWJzKGUueC90LmR0aWNrKTwxZS02JiYoaT0iaGlkZSIpLGUudGV4dD1kKGUueCx0LGksbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT10PDAsYT1lLl90aWNrcm91bmQsbz1yfHxlLmV4cG9uZW50Zm9ybWF0fHwiQiIsbD1lLl90aWNrZXhwb25lbnQsdT1lLnRpY2tmb3JtYXQsYz1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBoPXtleHBvbmVudGZvcm1hdDplLmV4cG9uZW50Zm9ybWF0LGR0aWNrOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6Yih0KT9NYXRoLmFicyh0KXx8MToxLHJhbmdlOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UucmFuZ2UubWFwKGUucjJkKTpbMCx0fHwxXX07cyhoKSxhPShOdW1iZXIoaC5fdGlja3JvdW5kKXx8MCkrNCxsPWguX3RpY2tleHBvbmVudCxlLmhvdmVyZm9ybWF0JiYodT1lLmhvdmVyZm9ybWF0KX1pZih1KXJldHVybiB5LmZvcm1hdCh1KSh0KS5yZXBsYWNlKC8tL2csIlx1MjIxMiIpO3ZhciBmPU1hdGgucG93KDEwLC1hKS8yO2lmKCJub25lIj09PW8mJihsPTApLCh0PU1hdGguYWJzKHQpKTxmKXQ9IjAiLGk9ITE7ZWxzZXtpZih0Kz1mLGwmJih0Kj1NYXRoLnBvdygxMCwtbCksYSs9bCksMD09PWEpdD1TdHJpbmcoTWF0aC5mbG9vcih0KSk7ZWxzZSBpZihhPDApe3Q9U3RyaW5nKE1hdGgucm91bmQodCkpLHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aCthKTtmb3IodmFyIGQ9YTtkPDA7ZCsrKXQrPSIwIn1lbHNle3Q9U3RyaW5nKHQpO3ZhciBwPXQuaW5kZXhPZigiLiIpKzE7cCYmKHQ9dC5zdWJzdHIoMCxwK2EpLnJlcGxhY2UoL1wuPzArJC8sIiIpKX10PV8ubnVtU2VwYXJhdGUodCxlLl9zZXBhcmF0b3JzLGMpfWlmKGwmJiJoaWRlIiE9PW8pe3ZhciBtO209bDwwPyJcdTIyMTIiKy1sOiJwb3dlciIhPT1vPyIrIitsOlN0cmluZyhsKSwiZSI9PT1vfHwoIlNJIj09PW98fCJCIj09PW8pJiYobD4xMnx8bDwtMTUpP3QrPSJlIittOiJFIj09PW8/dCs9IkUiK206InBvd2VyIj09PW8/dCs9Ilx4ZDcxMDxzdXA+IittKyI8L3N1cD4iOiJCIj09PW8mJjk9PT1sP3QrPSJCIjoiU0kiIT09byYmIkIiIT09b3x8KHQrPXFbbC8zKzVdKX1yZXR1cm4gaT8iXHUyMjEyIit0OnR9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1bXSxvPXQuX2Z1bGxEYXRhW2Vbcl1dLnhheGlzLHM9dC5fZnVsbERhdGFbZVtyXV0ueWF4aXM7aWYobyYmcyl7Zm9yKG49MDtuPGkubGVuZ3RoO24rKyktMT09PWlbbl0ueC5pbmRleE9mKG8pJiYtMT09PWlbbl0ueS5pbmRleE9mKHMpfHxhLnB1c2gobik7aWYoYS5sZW5ndGgpe3ZhciBsLHU9aVthWzBdXTtpZihhLmxlbmd0aD4xKWZvcihuPTE7bjxhLmxlbmd0aDtuKyspbD1pW2Fbbl1dLG0odS54LGwueCksbSh1LnksbC55KTttKHUueCxbb10pLG0odS55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyktMT09PXQuaW5kZXhPZihlW3JdKSYmdC5wdXNoKGVbcl0pfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuLGksYT1bXSxvPVtdLHM9dC5sYXlvdXQ7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylhLnB1c2goTy5nZXRGcm9tSWQodCxlW25dKSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylvLnB1c2goTy5nZXRGcm9tSWQodCxyW25dKSk7dmFyIGw9T2JqZWN0LmtleXMoYVswXSksdT1bImFuY2hvciIsImRvbWFpbiIsIm92ZXJsYXlpbmciLCJwb3NpdGlvbiIsInNpZGUiLCJ0aWNrYW5nbGUiXSxjPVsibGluZWFyIiwibG9nIl07Zm9yKG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGg9bFtuXSxmPWFbMF1baF0sZD1vWzBdW2hdLHA9ITAsbT0hMSx2PSExO2lmKCJfIiE9PWguY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgZiYmLTE9PT11LmluZGV4T2YoaCkpe2ZvcihpPTE7aTxhLmxlbmd0aCYmcDtpKyspe3ZhciB5PWFbaV1baF07InR5cGUiPT09aCYmLTEhPT1jLmluZGV4T2YoZikmJi0xIT09Yy5pbmRleE9mKHkpJiZmIT09eT9tPSEwOnkhPT1mJiYocD0hMSl9Zm9yKGk9MTtpPG8ubGVuZ3RoJiZwO2krKyl7dmFyIGI9b1tpXVtoXTsidHlwZSI9PT1oJiYtMSE9PWMuaW5kZXhPZihkKSYmLTEhPT1jLmluZGV4T2YoYikmJmQhPT1iP3Y9ITA6b1tpXVtoXSE9PWQmJihwPSExKX1wJiYobSYmKHNbYVswXS5fbmFtZV0udHlwZT0ibGluZWFyIiksdiYmKHNbb1swXS5fbmFtZV0udHlwZT0ibGluZWFyIiksZyhzLGgsYSxvKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciB4PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoeC54cmVmKSYmLTEhPT1yLmluZGV4T2YoeC55cmVmKSYmXy5zd2FwQXR0cnMocy5hbm5vdGF0aW9uc1tuXSxbIj8iXSl9fWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGksYT1fLm5lc3RlZFByb3BlcnR5LG89YSh0W3JbMF0uX25hbWVdLGUpLmdldCgpLHM9YSh0W25bMF0uX25hbWVdLGUpLmdldCgpO2ZvcigidGl0bGUiPT09ZSYmKCJDbGljayB0byBlbnRlciBYIGF4aXMgdGl0bGUiPT09byYmKG89IkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLCJDbGljayB0byBlbnRlciBZIGF4aXMgdGl0bGUiPT09cyYmKHM9IkNsaWNrIHRvIGVudGVyIFggYXhpcyB0aXRsZSIpKSxpPTA7aTxyLmxlbmd0aDtpKyspYSh0LHJbaV0uX25hbWUrIi4iK2UpLnNldChzKTtmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKWEodCxuW2ldLl9uYW1lKyIuIitlKS5zZXQobyl9dmFyIHk9dCgiZDMiKSxiPXQoImZhc3QtaXNudW1lcmljIikseD10KCIuLi8uLi9yZWdpc3RyeSIpLF89dCgiLi4vLi4vbGliIiksdz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxNPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksaz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksQT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxUPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxTPVQuRlBfU0FGRSxFPVQuT05FQVZHWUVBUixMPVQuT05FQVZHTU9OVEgsQz1ULk9ORURBWSx6PVQuT05FSE9VUixJPVQuT05FTUlOLEQ9VC5PTkVTRUMsUD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULE89ZS5leHBvcnRzPXt9O08ubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksTy5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLE8uc2V0Q29udmVydD10KCIuL3NldF9jb252ZXJ0Iik7dmFyIFI9dCgiLi9heGlzX2F1dG90eXBlIiksRj10KCIuL2F4aXNfaWRzIik7Ty5pZDJuYW1lPUYuaWQybmFtZSxPLmNsZWFuSWQ9Ri5jbGVhbklkLE8ubGlzdD1GLmxpc3QsTy5saXN0SWRzPUYubGlzdElkcyxPLmdldEZyb21JZD1GLmdldEZyb21JZCxPLmdldEZyb21UcmFjZT1GLmdldEZyb21UcmFjZSxPLmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSkscz1PLmxpc3RJZHMocixvKSxsPW4rInJlZiIsdT17fTtyZXR1cm4gaXx8KGk9c1swXXx8YSksYXx8KGE9aSksdVtsXT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMuY29uY2F0KGE/W2FdOltdKSxkZmx0Oml9LF8uY29lcmNlKHQsZSx1LGwpfSxPLmNvZXJjZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzO2lmKCJwYXBlciI9PT1ufHwicGl4ZWwiPT09bilvPV8uZW5zdXJlTnVtYmVyLHM9cihpLGEpO2Vsc2V7dmFyIGw9Ty5nZXRGcm9tSWQoZSxuKTthPWwuZnJhY3Rpb24ycihhKSxzPXIoaSxhKSxvPWwuY2xlYW5Qb3N9dFtpXT1vKHMpfSxPLmNsZWFuUG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3JldHVybigicGFwZXIiPT09cnx8InBpeGVsIj09PXI/Xy5lbnN1cmVOdW1iZXI6Ty5nZXRGcm9tSWQoZSxyKS5jbGVhblBvcykodCl9LE8uZ2V0RGF0YVRvQ29vcmRGdW5jPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9IngiPT09cnx8InkiPT09cnx8InoiPT09cj9yOm47aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT17dHlwZTpSKG4pLF9jYXRlZ29yaWVzOltdfSxPLnNldENvbnZlcnQoaSksImNhdGVnb3J5Ij09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9Ty5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP2kuZDJjOiJpZHMiPT09YT9mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4rdH19LE8uY2xlYXJUeXBlcz1mdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RofHwoZT10Ll9mdWxsRGF0YS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dC5kYXRhW2VdO2RlbGV0ZShPLmdldEZyb21JZCh0LHIueGF4aXMpfHx7fSkudHlwZSxkZWxldGUoTy5nZXRGcm9tSWQodCxyLnlheGlzKXx8e30pLnR5cGV9KX0sTy5jb3VudGVyTGV0dGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckF0KDApO3JldHVybiJ4Ij09PWU/InkiOiJ5Ij09PWU/IngiOnZvaWQgMH0sTy5taW5EdGljaz1mdW5jdGlvbih0LGUscixuKXstMT09PVsibG9nIiwiY2F0ZWdvcnkiXS5pbmRleE9mKHQudHlwZSkmJm4/dm9pZCAwPT09dC5fbWluRHRpY2s/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTp0Ll9taW5EdGljayYmKCh0Ll9taW5EdGljay9lKzFlLTYpJTE8MmUtNiYmKChyLXQuX2ZvcmNlVGljazApL2UlMSsxLjAwMDAwMSklMTwyZS02Pyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6KChlL3QuX21pbkR0aWNrKzFlLTYpJTE+MmUtNnx8KChyLXQuX2ZvcmNlVGljazApL3QuX21pbkR0aWNrJTErMS4wMDAwMDEpJTE+MmUtNikmJih0Ll9taW5EdGljaz0wKSk6dC5fbWluRHRpY2s9MH0sTy5nZXRBdXRvUmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGUscj1bXSxuPXQuX21pblswXS52YWwsaT10Ll9tYXhbMF0udmFsO2ZvcihlPTE7ZTx0Ll9taW4ubGVuZ3RoJiZuPT09aTtlKyspbj1NYXRoLm1pbihuLHQuX21pbltlXS52YWwpO2ZvcihlPTE7ZTx0Ll9tYXgubGVuZ3RoJiZuPT09aTtlKyspaT1NYXRoLm1heChpLHQuX21heFtlXS52YWwpO3ZhciBhLG8scyxsLHUsYyxoLGY9MCxkPSExO2lmKHQucmFuZ2Upe3ZhciBwPV8uc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2Q9cFsxXTxwWzBdfWZvcigicmV2ZXJzZWQiPT09dC5hdXRvcmFuZ2UmJihkPSEwLHQuYXV0b3JhbmdlPSEwKSxlPTA7ZTx0Ll9taW4ubGVuZ3RoO2UrKylmb3Iobz10Ll9taW5bZV0sYT0wO2E8dC5fbWF4Lmxlbmd0aDthKyspcz10Ll9tYXhbYV0saD1zLnZhbC1vLnZhbCxjPXQuX2xlbmd0aC1vLnBhZC1zLnBhZCxoPjAmJmM+MCYmaC9jPmYmJihsPW8sdT1zLGY9aC9jKTtpZihuPT09aSl7dmFyIG09bi0xLHY9bisxO3I9InRvemVybyI9PT10LnJhbmdlbW9kZT9uPDA/W20sMF06WzAsdl06Im5vbm5lZ2F0aXZlIj09PXQucmFuZ2Vtb2RlP1tNYXRoLm1heCgwLG0pLE1hdGgubWF4KDAsdildOlttLHZdfWVsc2UgZiYmKCJsaW5lYXIiIT09dC50eXBlJiYiLSIhPT10LnR5cGV8fCgidG96ZXJvIj09PXQucmFuZ2Vtb2RlPyhsLnZhbD49MCYmKGw9e3ZhbDowLHBhZDowfSksdS52YWw8PTAmJih1PXt2YWw6MCxwYWQ6MH0pKToibm9ubmVnYXRpdmUiPT09dC5yYW5nZW1vZGUmJihsLnZhbC1mKmwucGFkPDAmJihsPXt2YWw6MCxwYWQ6MH0pLHUudmFsPDAmJih1PXt2YWw6MSxwYWQ6MH0pKSxmPSh1LnZhbC1sLnZhbCkvKHQuX2xlbmd0aC1sLnBhZC11LnBhZCkpLHI9W2wudmFsLWYqbC5wYWQsdS52YWwrZip1LnBhZF0pO3JldHVybiByWzBdPT09clsxXSYmKCJ0b3plcm8iPT09dC5yYW5nZW1vZGU/cj1yWzBdPDA/W3JbMF0sMF06clswXT4wP1swLHJbMF1dOlswLDFdOihyPVtyWzBdLTEsclswXSsxXSwibm9ubmVnYXRpdmUiPT09dC5yYW5nZW1vZGUmJihyWzBdPU1hdGgubWF4KDAsclswXSkpKSksZCYmci5yZXZlcnNlKCksXy5zaW1wbGVNYXAocix0Lmwycnx8TnVtYmVyKX0sTy5kb0F1dG9SYW5nZT1mdW5jdGlvbih0KXt0Ll9sZW5ndGh8fHQuc2V0U2NhbGUoKTt2YXIgZT10Ll9taW4mJnQuX21heCYmdC5fbWluLmxlbmd0aCYmdC5fbWF4Lmxlbmd0aDtpZih0LmF1dG9yYW5nZSYmZSl7dC5yYW5nZT1PLmdldEF1dG9SYW5nZSh0KSx0Ll9yPXQucmFuZ2Uuc2xpY2UoKSx0Ll9ybD1fLnNpbXBsZU1hcCh0Ll9yLHQucjJsKTt2YXIgcj10Ll9pbnB1dDtyLnJhbmdlPXQucmFuZ2Uuc2xpY2UoKSxyLmF1dG9yYW5nZT10LmF1dG9yYW5nZX19LE8uc2F2ZVJhbmdlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PLmxpc3QodCwiIiwhMCksbj0hMSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz12b2lkIDA9PT1hLl9yYW5nZUluaXRpYWwscz1vfHwhKGEucmFuZ2VbMF09PT1hLl9yYW5nZUluaXRpYWxbMF0mJmEucmFuZ2VbMV09PT1hLl9yYW5nZUluaXRpYWxbMV0pOyhvJiYhMT09PWEuYXV0b3JhbmdlfHxlJiZzKSYmKGEuX3JhbmdlSW5pdGlhbD1hLnJhbmdlLnNsaWNlKCksbj0hMCl9cmV0dXJuIG59LE8uc2F2ZVNob3dTcGlrZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Ty5saXN0KHQsIiIsITApLG49ITEsaT0ib24iLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPXZvaWQgMD09PW8uX3Nob3dTcGlrZUluaXRpYWwsbD1zfHwhKG8uc2hvd3NwaWtlcz09PW8uX3Nob3dzcGlrZXMpOyhzfHxlJiZsKSYmKG8uX3Nob3dTcGlrZUluaXRpYWw9by5zaG93c3Bpa2VzLG49ITApLCJvbiIhPT1pfHxvLnNob3dzcGlrZXN8fChpPSJvZmYiKX1yZXR1cm4gdC5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1pLG59LE8uZXhwYW5kPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChOdW1iZXIodFtlXXx8MCksMCl9O3ZhciBlPU1hdGgubWF4KE51bWJlcih0fHwwKSwwKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gaShyKXtmdW5jdGlvbiBuKHQpe3JldHVybiBiKHQpJiZNYXRoLmFicyh0KTxTfWlmKGw9ZVtyXSxiKGwpKXtpZihoPXgocikrZyxmPXcocikrZyxwPWwtayhyKSxtPWwrTShyKSwibG9nIj09PXQudHlwZSYmcDxtLzEwJiYocD1tLzEwKSx1PXQuYzJsKHApLGM9dC5jMmwobSkseSYmKHU9TWF0aC5taW4oMCx1KSxjPU1hdGgubWF4KDAsYykpLG4odSkpe2ZvcihkPSEwLG89MDtvPHQuX21pbi5sZW5ndGgmJmQ7bysrKXM9dC5fbWluW29dLHMudmFsPD11JiZzLnBhZD49Zj9kPSExOnMudmFsPj11JiZzLnBhZDw9ZiYmKHQuX21pbi5zcGxpY2UobywxKSxvLS0pO2QmJnQuX21pbi5wdXNoKHt2YWw6dSxwYWQ6eSYmMD09PXU/MDpmfSl9aWYobihjKSl7Zm9yKGQ9ITAsbz0wO288dC5fbWF4Lmxlbmd0aCYmZDtvKyspcz10Ll9tYXhbb10scy52YWw+PWMmJnMucGFkPj1oP2Q9ITE6cy52YWw8PWMmJnMucGFkPD1oJiYodC5fbWF4LnNwbGljZShvLDEpLG8tLSk7ZCYmdC5fbWF4LnB1c2goe3ZhbDpjLHBhZDp5JiYwPT09Yz8wOmh9KX19fWlmKCh0LmF1dG9yYW5nZXx8ISFfLm5lc3RlZFByb3BlcnR5KHQsInJhbmdlc2xpZGVyLmF1dG9yYW5nZSIpLmdldCgpKSYmZSl7dC5fbWlufHwodC5fbWluPVtdKSx0Ll9tYXh8fCh0Ll9tYXg9W10pLHJ8fChyPXt9KSx0Ll9tfHx0LnNldFNjYWxlKCk7dmFyIGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2PWUubGVuZ3RoLGc9ci5wYWRkZWQ/LjA1KnQuX2xlbmd0aDowLHk9ci50b3plcm8mJigibGluZWFyIj09PXQudHlwZXx8Ii0iPT09dC50eXBlKTtnJiYiZG9tYWluIj09PXQuY29uc3RyYWluJiZ0Ll9pbnB1dERvbWFpbiYmKGcqPSh0Ll9pbnB1dERvbWFpblsxXS10Ll9pbnB1dERvbWFpblswXSkvKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSk7dmFyIHg9bigodC5fbT4wP3IucHBhZHBsdXM6ci5wcGFkbWludXMpfHxyLnBwYWR8fDApLHc9bigodC5fbT4wP3IucHBhZG1pbnVzOnIucHBhZHBsdXMpfHxyLnBwYWR8fDApLE09bihyLnZwYWRwbHVzfHxyLnZwYWQpLGs9bihyLnZwYWRtaW51c3x8ci52cGFkKTtmb3IoYT0wO2E8NjthKyspaShhKTtmb3IoYT12LTE7YT41O2EtLSlpKGEpfX0sTy5hdXRvQmluPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9Xy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksbD1fLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZihvfHwobz1lLmNhbGVuZGFyKSwiY2F0ZWdvcnkiPT09ZS50eXBlKXJldHVybntzdGFydDpzLS41LGVuZDpsKy41LHNpemU6MX07dmFyIHU7aWYocil1PShsLXMpL3I7ZWxzZXt2YXIgYz1fLmRpc3RpbmN0VmFscyh0KSxoPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coYy5taW5EaWZmKS9NYXRoLkxOMTApKSxmPWgqXy5yb3VuZFVwKGMubWluRGlmZi9oLFsuOSwxLjksNC45LDkuOV0sITApO3U9TWF0aC5tYXgoZiwyKl8uc3RkZXYodCkvTWF0aC5wb3codC5sZW5ndGgsYT8uMjU6LjQpKSxiKHUpfHwodT0xKX12YXIgZDtkPSJsb2ciPT09ZS50eXBlP3t0eXBlOiJsaW5lYXIiLHJhbmdlOltzLGxdfTp7dHlwZTplLnR5cGUscmFuZ2U6Xy5zaW1wbGVNYXAoW3MsbF0sZS5jMnIsMCxvKSxjYWxlbmRhcjpvfSxPLnNldENvbnZlcnQoZCksTy5hdXRvVGlja3MoZCx1KTt2YXIgcCxtPU8udGlja0luY3JlbWVudChPLnRpY2tGaXJzdChkKSxkLmR0aWNrLCJyZXZlcnNlIixvKTtpZigibnVtYmVyIj09dHlwZW9mIGQuZHRpY2spe209bihtLHQsZCxzLGwpO3A9bSsoMStNYXRoLmZsb29yKChsLW0pL2QuZHRpY2spKSpkLmR0aWNrfWVsc2UgZm9yKCJNIj09PWQuZHRpY2suY2hhckF0KDApJiYobT1pKG0sdCxkLmR0aWNrLHMsbykpLHA9bTtwPD1sOylwPU8udGlja0luY3JlbWVudChwLGQuZHRpY2ssITEsbyk7cmV0dXJue3N0YXJ0OmUuYzJyKG0sMCxvKSxlbmQ6ZS5jMnIocCwwLG8pLHNpemU6ZC5kdGlja319LE8uY2FsY1RpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPV8uc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKCJhdXRvIj09PXQudGlja21vZGV8fCF0LmR0aWNrKXt2YXIgcixuPXQubnRpY2tzO258fCgiY2F0ZWdvcnkiPT09dC50eXBlPyhyPXQudGlja2ZvbnQ/MS4yKih0LnRpY2tmb250LnNpemV8fDEyKToxNSxuPXQuX2xlbmd0aC9yKToocj0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/NDA6ODAsbj1fLmNvbnN0cmFpbih0Ll9sZW5ndGgvciw0LDkpKzEpKSwiYXJyYXkiPT09dC50aWNrbW9kZSYmKG4qPTEwMCksTy5hdXRvVGlja3ModCxNYXRoLmFicyhlWzFdLWVbMF0pL24pLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9aWYodC50aWNrMHx8KHQudGljazA9ImRhdGUiPT09dC50eXBlPyIyMDAwLTAxLTAxIjowKSxzKHQpLCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBhKHQpO3QuX3RtaW49Ty50aWNrRmlyc3QodCk7dmFyIGk9ZVsxXTxlWzBdLG89W10sbD0xLjAwMDEqZVsxXS0xZS00KmVbMF07ImNhdGVnb3J5Ij09PXQudHlwZSYmKGw9aT9NYXRoLm1heCgtLjUsbCk6TWF0aC5taW4odC5fY2F0ZWdvcmllcy5sZW5ndGgtLjUsbCkpO2Zvcih2YXIgdT1udWxsLGM9TWF0aC5tYXgoMWUzLHQuX2xlbmd0aHx8MCksaD10Ll90bWluOyhpP2g+PWw6aDw9bCkmJiEoby5sZW5ndGg+Y3x8aD09PXUpO2g9Ty50aWNrSW5jcmVtZW50KGgsdC5kdGljayxpLHQuY2FsZW5kYXIpKXU9aCxvLnB1c2goaCk7dC5fdG1heD1vW28ubGVuZ3RoLTFdLHQuX3ByZXZEYXRlSGVhZD0iIix0Ll9pbkNhbGNUaWNrcz0hMDtmb3IodmFyIGY9bmV3IEFycmF5KG8ubGVuZ3RoKSxkPTA7ZDxvLmxlbmd0aDtkKyspZltkXT1PLnRpY2tUZXh0KHQsb1tkXSk7cmV0dXJuIHQuX2luQ2FsY1RpY2tzPSExLGZ9O3ZhciBqPVsyLDUsMTBdLE49WzEsMiwzLDYsMTJdLEI9WzEsMiw1LDEwLDE1LDMwXSxVPVsxLDIsMyw3LDE0XSxWPVstLjA0NiwwLC4zMDEsLjQ3NywuNjAyLC42OTksLjc3OCwuODQ1LC45MDMsLjk1NCwxXSxIPVstLjMwMSwwLC4zMDEsLjY5OSwxXTtPLmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2lmKCJkYXRlIj09PXQudHlwZSl7dC50aWNrMD1fLmRhdGVUaWNrMCh0LmNhbGVuZGFyKTt2YXIgbj0yKmU7bj5FPyhlLz1FLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPSJNIisxMipvKGUscixqKSk6bj5MPyhlLz1MLHQuZHRpY2s9Ik0iK28oZSwxLE4pKTpuPkM/KHQuZHRpY2s9byhlLEMsVSksdC50aWNrMD1fLmRhdGVUaWNrMCh0LmNhbGVuZGFyLCEwKSk6bj56P3QuZHRpY2s9byhlLHosTik6bj5JP3QuZHRpY2s9byhlLEksQik6bj5EP3QuZHRpY2s9byhlLEQsQik6KHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPW8oZSxyLGopKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIGk9Xy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKGlbMV0taVswXSk8MSl7dmFyIGE9MS41Kk1hdGguYWJzKChpWzFdLWlbMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsaVsxXSktTWF0aC5wb3coMTAsaVswXSkpL2Escj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCkpLHQuZHRpY2s9IkwiK28oZSxyLGopfWVsc2UgdC5kdGljaz1lPi4zPyJEMiI6IkQxIn1lbHNlImNhdGVnb3J5Ij09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKToodC50aWNrMD0wLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPW8oZSxyLGopKTtpZigwPT09dC5kdGljayYmKHQuZHRpY2s9MSksIWIodC5kdGljaykmJiJzdHJpbmciIT10eXBlb2YgdC5kdGljayl7dmFyIHM9dC5kdGljazt0aHJvdyB0LmR0aWNrPTEsImF4LmR0aWNrIGVycm9yOiAiK1N0cmluZyhzKX19LE8udGlja0luY3JlbWVudD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yPy0xOjE7aWYoYihlKSlyZXR1cm4gdCtpKmU7dmFyIGE9ZS5jaGFyQXQoMCksbz1pKk51bWJlcihlLnN1YnN0cigxKSk7aWYoIk0iPT09YSlyZXR1cm4gXy5pbmNyZW1lbnRNb250aCh0LG8sbik7aWYoIkwiPT09YSlyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsdCkrbykvTWF0aC5MTjEwO2lmKCJEIj09PWEpe3ZhciBzPSJEMiI9PT1lP0g6VixsPXQrLjAxKmksdT1fLnJvdW5kVXAoXy5tb2QobCwxKSxzLHIpO3JldHVybiBNYXRoLmZsb29yKGwpK01hdGgubG9nKHkucm91bmQoTWF0aC5wb3coMTAsdSksMSkpL01hdGguTE4xMH10aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcoZSl9LE8udGlja0ZpcnN0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucjJsfHxOdW1iZXIscj1fLnNpbXBsZU1hcCh0LnJhbmdlLGUpLG49clsxXTxyWzBdLGk9bj9NYXRoLmZsb29yOk1hdGguY2VpbCxhPTEuMDAwMSpyWzBdLTFlLTQqclsxXSxvPXQuZHRpY2sscz1lKHQudGljazApO2lmKGIobykpe3ZhciBsPWkoKGEtcykvbykqbytzO3JldHVybiJjYXRlZ29yeSI9PT10LnR5cGUmJihsPV8uY29uc3RyYWluKGwsMCx0Ll9jYXRlZ29yaWVzLmxlbmd0aC0xKSksbH12YXIgdT1vLmNoYXJBdCgwKSxjPU51bWJlcihvLnN1YnN0cigxKSk7aWYoIk0iPT09dSl7Zm9yKHZhciBoLGYsZCxwPTAsbT1zO3A8MTA7KXtpZigoKGg9Ty50aWNrSW5jcmVtZW50KG0sbyxuLHQuY2FsZW5kYXIpKS1hKSoobS1hKTw9MClyZXR1cm4gbj9NYXRoLm1pbihtLGgpOk1hdGgubWF4KG0saCk7Zj0oYS0obStoKS8yKS8oaC1tKSxkPXUrKE1hdGguYWJzKE1hdGgucm91bmQoZikpfHwxKSpjLG09Ty50aWNrSW5jcmVtZW50KG0sZCxmPDA/IW46bix0LmNhbGVuZGFyKSxwKyt9cmV0dXJuIF8uZXJyb3IoInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlIix0KSxtfWlmKCJMIj09PXUpcmV0dXJuIE1hdGgubG9nKGkoKE1hdGgucG93KDEwLGEpLXMpL2MpKmMrcykvTWF0aC5MTjEwO2lmKCJEIj09PXUpe3ZhciB2PSJEMiI9PT1vP0g6VixnPV8ucm91bmRVcChfLm1vZChhLDEpLHYsbik7cmV0dXJuIE1hdGguZmxvb3IoYSkrTWF0aC5sb2coeS5yb3VuZChNYXRoLnBvdygxMCxnKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhvKX0sTy50aWNrVGV4dD1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihuKXt2YXIgaTtyZXR1cm4gdm9pZCAwPT09bnx8KHI/Im5vbmUiPT09bjooaT17Zmlyc3Q6dC5fdG1pbixsYXN0OnQuX3RtYXh9W25dLCJhbGwiIT09biYmZSE9PWkpKX12YXIgaSxhLG89bCh0LGUpLHM9ImFycmF5Ij09PXQudGlja21vZGUsZD1yfHxzLHA9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDtpZihzJiZBcnJheS5pc0FycmF5KHQudGlja3RleHQpKXt2YXIgbT1fLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSx2PU1hdGguYWJzKG1bMV0tbVswXSkvMWU0O2ZvcihhPTA7YTx0LnRpY2t0ZXh0Lmxlbmd0aCYmIShNYXRoLmFicyhlLXAodC50aWNrdmFsc1thXSkpPHYpO2ErKyk7aWYoYTx0LnRpY2t0ZXh0Lmxlbmd0aClyZXR1cm4gby50ZXh0PVN0cmluZyh0LnRpY2t0ZXh0W2FdKSxvfXJldHVybiBpPSJub25lIiE9PXQuZXhwb25lbnRmb3JtYXQmJm4odC5zaG93ZXhwb25lbnQpPyJoaWRlIjoiIiwiZGF0ZSI9PT10LnR5cGU/dSh0LG8scixkKToibG9nIj09PXQudHlwZT9jKHQsbyxyLGQsaSk6ImNhdGVnb3J5Ij09PXQudHlwZT9oKHQsbyk6Zih0LG8scixkLGkpLHQudGlja3ByZWZpeCYmIW4odC5zaG93dGlja3ByZWZpeCkmJihvLnRleHQ9dC50aWNrcHJlZml4K28udGV4dCksdC50aWNrc3VmZml4JiYhbih0LnNob3d0aWNrc3VmZml4KSYmKG8udGV4dCs9dC50aWNrc3VmZml4KSxvfTt2YXIgcT1bImYiLCJwIiwibiIsIlx1MDNiYyIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIl07Ty5zdWJwbG90TWF0Y2g9L154KFswLTldKil5KFswLTldKikkLyxPLmdldFN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9W10sbz10Ll9mdWxsRGF0YXx8dC5kYXRhfHxbXTtmb3Iocj0wO3I8by5sZW5ndGg7cisrKXt2YXIgcz1vW3JdO2lmKCExIT09cy52aXNpYmxlJiYibGVnZW5kb25seSIhPT1zLnZpc2libGUmJih4LnRyYWNlSXMocywiY2FydGVzaWFuIil8fHgudHJhY2VJcyhzLCJnbDJkIikpKXtpPShzLnhheGlzfHwieCIpKyhzLnlheGlzfHwieSIpLC0xPT09YS5pbmRleE9mKGkpJiZhLnB1c2goaSl9fXZhciBsPU8ubGlzdCh0LCIiLCEwKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXt2YXIgdT1sW3JdLGM9dS5faWQuY2hhckF0KDApLGg9ImZyZWUiPT09dS5hbmNob3I/IngiPT09Yz8ieSI6IngiOnUuYW5jaG9yLGY9Ty5nZXRGcm9tSWQodCxoKSxkPSExO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspaWYoZnVuY3Rpb24odCxlKXtyZXR1cm4tMSE9PXQuaW5kZXhPZihlLl9pZCl9KGFbbl0sdSkpe2Q9ITA7YnJlYWt9ImZyZWUiPT09dS5hbmNob3ImJmR8fGYmJihpPSJ4Ij09PWM/dS5faWQrZi5faWQ6Zi5faWQrdS5faWQsLTE9PT1hLmluZGV4T2YoaSkmJmEucHVzaChpKSl9dmFyIHA9Ty5zdWJwbG90TWF0Y2gsbT1bXTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWk9YVtyXSxwLnRlc3QoaSkmJm0ucHVzaChpKTtyZXR1cm4gbS5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaChwKSxuPWUubWF0Y2gocCk7cmV0dXJuIHJbMV09PT1uWzFdPysoclsyXXx8MSktKG5bMl18fDEpOisoclsxXXx8MCktKG5bMV18fDApfSksZT9PLmZpbmRTdWJwbG90c1dpdGhBeGlzKG0sZSk6bX0sTy5maW5kU3VicGxvdHNXaXRoQXhpcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgUmVnRXhwKCJ4Ij09PWUuX2lkLmNoYXJBdCgwKT8iXiIrZS5faWQrInkiOmUuX2lkKyIkIiksbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07ci50ZXN0KGEpJiZuLnB1c2goYSl9cmV0dXJuIG59LE8ubWFrZUNsaXBQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG49dC5fZnVsbExheW91dCxpPW4uX2RlZnMsYT17X29mZnNldDowLF9sZW5ndGg6bi53aWR0aCxfaWQ6IiJ9LG89e19vZmZzZXQ6MCxfbGVuZ3RoOm4uaGVpZ2h0LF9pZDoiIn0scz1PLmxpc3QodCwieCIsITApLGw9Ty5saXN0KHQsInkiLCEwKSx1PVtdO2ZvcihlPTA7ZTxzLmxlbmd0aDtlKyspZm9yKHUucHVzaCh7eDpzW2VdLHk6b30pLHI9MDtyPGwubGVuZ3RoO3IrKykwPT09ZSYmdS5wdXNoKHt4OmEseTpsW3JdfSksdS5wdXNoKHt4OnNbZV0seTpsW3JdfSk7dmFyIGM9aS5zZWxlY3RBbGwoImcuY2xpcHMiKS5kYXRhKFswXSk7Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCk7dmFyIGg9Yy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLmRhdGEodSxmdW5jdGlvbih0KXtyZXR1cm4gdC54Ll9pZCt0LnkuX2lkfSk7aC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJheGVzY2xpcCIsITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4iY2xpcCIrbi5fdWlkK3QueC5faWQrdC55Ll9pZH0pLmFwcGVuZCgicmVjdCIpLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaChmdW5jdGlvbih0KXt5LnNlbGVjdCh0aGlzKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt4OnQueC5fb2Zmc2V0fHwwLHk6dC55Ll9vZmZzZXR8fDAsd2lkdGg6dC54Ll9sZW5ndGh8fDEsaGVpZ2h0OnQueS5fbGVuZ3RofHwxfSl9KX0sTy5kb1RpY2tzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXUubDJwKHQueCk7cmV0dXJuIGU+MSYmZTx1Ll9sZW5ndGgtMX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInBhdGguIitMKS5kYXRhKCJpbnNpZGUiPT09dS50aWNrcz9xOlMsRSk7ZSYmdS50aWNrcz8oci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoTCwxKS5jbGFzc2VkKCJ0aWNrcyIsMSkuY2xhc3NlZCgiY3Jpc3AiLDEpLmNhbGwoay5zdHJva2UsdS50aWNrY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLEIrInB4IikuYXR0cigiZCIsZSksci5hdHRyKCJ0cmFuc2Zvcm0iLGQpLHIuZXhpdCgpLnJlbW92ZSgpKTpyLnJlbW92ZSgpfWZ1bmN0aW9uIGEocixuKXtmdW5jdGlvbiBpKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXgoZSksbj15LnNlbGVjdCh0aGlzKSxpPW4uc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIiksYT1kKHQpKyhiKGUpJiYwIT0rZT8iIHJvdGF0ZSgiK2UrIiwiK2YodCkrIiwiKyhwKHQpLXQuZm9udFNpemUvMikrIikiOiIiKTtpZihpLmVtcHR5KCkpbi5zZWxlY3QoInRleHQiKS5hdHRyKHt0cmFuc2Zvcm06YSwidGV4dC1hbmNob3IiOnJ9KTtlbHNle3ZhciBvPUEuYkJveChpLm5vZGUoKSkud2lkdGgqe2VuZDotLjUsc3RhcnQ6LjV9W3JdO2kuYXR0cigidHJhbnNmb3JtIixhKyhvPyJ0cmFuc2xhdGUoIitvKyIsMCkiOiIiKSl9fSl9ZnVuY3Rpb24gYSgpe3JldHVybiB6Lmxlbmd0aCYmUHJvbWlzZS5hbGwoeil9ZnVuY3Rpb24gcygpe2lmKGkoaCx1LnRpY2thbmdsZSksIngiPT09ZyYmIWIodS50aWNrYW5nbGUpJiYoImxvZyIhPT11LnR5cGV8fCJEIiE9PVN0cmluZyh1LmR0aWNrKS5jaGFyQXQoMCkpKXt2YXIgdD1bXTtmb3IoaC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXkuc2VsZWN0KHRoaXMpLG49ci5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKSxpPXUubDJwKGUueCk7bi5lbXB0eSgpJiYobj1yLnNlbGVjdCgidGV4dCIpKTt2YXIgYT1BLmJCb3gobi5ub2RlKCkpO3QucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OmktYS53aWR0aC8yLHJpZ2h0OmkrYS53aWR0aC8yKzIsd2lkdGg6YS53aWR0aCsyfSl9KSx2PTA7djx0Lmxlbmd0aC0xO3YrKylpZihfLmJCb3hJbnRlcnNlY3QodFt2XSx0W3YrMV0pKXtDPTMwO2JyZWFrfWlmKEMpe01hdGguYWJzKChTW1MubGVuZ3RoLTFdLngtU1swXS54KSp1Ll9tKS8oUy5sZW5ndGgtMSk8Mi41KlQmJihDPTkwKSxpKGgsQyl9dS5fbGFzdGFuZ2xlPUN9cmV0dXJuIG8oKSxlKyIgZG9uZSJ9ZnVuY3Rpb24gbCgpe2Z1bmN0aW9uIGUodCxlKXt0WzBdPU1hdGgubWluKHRbMF0sZVswXSksdFsxXT1NYXRoLm1heCh0WzFdLGVbMV0pfXZhciBuPXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih1Ll9ib3VuZGluZ0JveD17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsbGVmdDpuLmxlZnQtaS5sZWZ0LHJpZ2h0Om4ucmlnaHQtaS5sZWZ0LHRvcDpuLnRvcC1pLnRvcCxib3R0b206bi5ib3R0b20taS50b3B9LG0pe3ZhciBhPXUuX2NvdW50ZXJTcGFuPVsxLzAsLTEvMF07Zm9yKHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIG89Yy5fcGxvdHNbbVt2XV0scz1vWyJ4Ij09PWc/InlheGlzIjoieGF4aXMiXTtlKGEsW3MuX29mZnNldCxzLl9vZmZzZXQrcy5fbGVuZ3RoXSl9ImZyZWUiPT09dS5hbmNob3ImJmUoYSwieCI9PT1nP1t1Ll9ib3VuZGluZ0JveC5ib3R0b20sdS5fYm91bmRpbmdCb3gudG9wXTpbdS5fYm91bmRpbmdCb3gucmlnaHQsdS5fYm91bmRpbmdCb3gubGVmdF0pfX12YXIgaD1yLnNlbGVjdEFsbCgiZy4iK0wpLmRhdGEoUyxFKTtpZighdS5zaG93dGlja2xhYmVsc3x8IWIobikpcmV0dXJuIGgucmVtb3ZlKCksdm9pZCBvKCk7dmFyIGYscCx4LE0sazsieCI9PT1nPyhrPSJib3R0b20iPT09Vj8xOi0xLGY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrUiprfSxNPW4rKEQrSSkqayxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K00rdC5mb250U2l6ZSooImJvdHRvbSI9PT1WPzE6LS4yKX0seD1mdW5jdGlvbih0KXtyZXR1cm4gYih0KSYmMCE9PXQmJjE4MCE9PXQ/dCprPDA/ImVuZCI6InN0YXJ0IjoibWlkZGxlIn0pOihrPSJyaWdodCI9PT1WPzE6LTEscD1mdW5jdGlvbih0KXtyZXR1cm4gdC5keSt0LmZvbnRTaXplKlAtUiprfSxmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K24rKEQrSSsoOTA9PT1NYXRoLmFicyh1LnRpY2thbmdsZSk/dC5mb250U2l6ZS8yOjApKSprfSx4PWZ1bmN0aW9uKHQpe3JldHVybiBiKHQpJiY5MD09PU1hdGguYWJzKHQpPyJtaWRkbGUiOiJyaWdodCI9PT1WPyJzdGFydCI6ImVuZCJ9KTt2YXIgVD0wLEM9MCx6PVtdO2guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEwsMSkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXkuc2VsZWN0KHRoaXMpLG49dC5fcHJvbWlzZXMubGVuZ3RoO3IuY2FsbCh3LnBvc2l0aW9uVGV4dCxmKGUpLHAoZSkpLmNhbGwoQS5mb250LGUuZm9udCxlLmZvbnRTaXplLGUuZm9udENvbG9yKS50ZXh0KGUudGV4dCkuY2FsbCh3LmNvbnZlcnRUb1RzcGFucyx0KSxuPXQuX3Byb21pc2VzW25dLG4/ei5wdXNoKHQuX3Byb21pc2VzLnBvcCgpLnRoZW4oZnVuY3Rpb24oKXtpKHIsdS50aWNrYW5nbGUpfSkpOmkocix1LnRpY2thbmdsZSl9KSxoLmV4aXQoKS5yZW1vdmUoKSxoLmVhY2goZnVuY3Rpb24odCl7VD1NYXRoLm1heChULHQuZm9udFNpemUpfSksaShoLHUuX2xhc3RhbmdsZXx8dS50aWNrYW5nbGUpO3ZhciBPPV8uc3luY09yQXN5bmMoW2EscyxsXSk7cmV0dXJuIE8mJk8udGhlbiYmdC5fcHJvbWlzZXMucHVzaChPKSxPfWZ1bmN0aW9uIG8oKXtpZighcil7dmFyIG4saSxhLG8scz1GLmdldEZyb21JZCh0LGUpLGw9eS5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLiIrZSsidGljayIpLHU9e3NlbGVjdGlvbjpsLHNpZGU6cy5zaWRlfSxoPWUuY2hhckF0KDApLGY9dC5fZnVsbExheW91dC5fc2l6ZSxkPXMudGl0bGVmb250LnNpemU7aWYobC5zaXplKCkpe3ZhciBwPUEuZ2V0VHJhbnNsYXRlKGwubm9kZSgpLnBhcmVudE5vZGUpO3Uub2Zmc2V0TGVmdD1wLngsdS5vZmZzZXRUb3A9cC55fXZhciBtPTEwKzEuNSpkKyhzLmxpbmV3aWR0aD9zLmxpbmV3aWR0aC0xOjApOyJ4Ij09PWg/KGk9ImZyZWUiPT09cy5hbmNob3I/e19vZmZzZXQ6Zi50KygxLShzLnBvc2l0aW9ufHwwKSkqZi5oLF9sZW5ndGg6MH06Ri5nZXRGcm9tSWQodCxzLmFuY2hvciksYT1zLl9vZmZzZXQrcy5fbGVuZ3RoLzIsbz0idG9wIj09PXMuc2lkZT8tbS1kKihzLnNob3d0aWNrbGFiZWxzPzE6MCk6aS5fbGVuZ3RoK20rZCoocy5zaG93dGlja2xhYmVscz8xLjU6LjUpLG8rPWkuX29mZnNldCxzLnJhbmdlc2xpZGVyJiZzLnJhbmdlc2xpZGVyLnZpc2libGUmJnMuX2JvdW5kaW5nQm94JiYobys9KGMuaGVpZ2h0LWMubWFyZ2luLmItYy5tYXJnaW4udCkqcy5yYW5nZXNsaWRlci50aGlja25lc3Mrcy5fYm91bmRpbmdCb3guaGVpZ2h0KSx1LnNpZGV8fCh1LnNpZGU9ImJvdHRvbSIpKTooaT0iZnJlZSI9PT1zLmFuY2hvcj97X29mZnNldDpmLmwrKHMucG9zaXRpb258fDApKmYudyxfbGVuZ3RoOjB9OkYuZ2V0RnJvbUlkKHQscy5hbmNob3IpLG89cy5fb2Zmc2V0K3MuX2xlbmd0aC8yLGE9InJpZ2h0Ij09PXMuc2lkZT9pLl9sZW5ndGgrbStkKihzLnNob3d0aWNrbGFiZWxzPzE6LjUpOi1tLWQqKHMuc2hvd3RpY2tsYWJlbHM/LjU6MCksYSs9aS5fb2Zmc2V0LG49e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH0sdS5zaWRlfHwodS5zaWRlPSJsZWZ0IikpLE0uZHJhdyh0LGUrInRpdGxlIix7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnMuX25hbWUrIi50aXRsZSIsZGZsdE5hbWU6aC50b1VwcGVyQ2FzZSgpKyIgYXhpcyIsYXZvaWQ6dSx0cmFuc2Zvcm06bixhdHRyaWJ1dGVzOnt4OmEseTpvLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4hMD09PXQudmlzaWJsZSYmdC54YXhpcyt0LnlheGlzPT09ZSYmKCEoIXgudHJhY2VJcyh0LCJiYXIiKXx8dC5vcmllbnRhdGlvbiE9PXt4OiJoIix5OiJ2In1bZ10pfHx0LmZpbGwmJnQuZmlsbC5jaGFyQXQodC5maWxsLmxlbmd0aC0xKT09PWcpfWZ1bmN0aW9uIGwoZSxyLGkpe3ZhciBhPWUuZ3JpZGxheWVyLG89ZS56ZXJvbGluZWxheWVyLGw9ZVsiaGlkZWdyaWQiK2ddP1tdOnEsYz11Ll9ncmlkcGF0aHx8Ik0wLDAiKygieCI9PT1nPyJ2IjoiaCIpK3IuX2xlbmd0aCxoPWEuc2VsZWN0QWxsKCJwYXRoLiIrQykuZGF0YSghMT09PXUuc2hvd2dyaWQ/W106bCxFKTtpZihoLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChDLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5hdHRyKCJkIixjKS5lYWNoKGZ1bmN0aW9uKHQpe3UuemVyb2xpbmUmJigibGluZWFyIj09PXUudHlwZXx8Ii0iPT09dS50eXBlKSYmTWF0aC5hYnModC54KTx1LmR0aWNrLzEwMCYmeS5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxoLmF0dHIoInRyYW5zZm9ybSIsZCkuY2FsbChrLnN0cm9rZSx1LmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixqKyJweCIpLGguZXhpdCgpLnJlbW92ZSgpLG8pe2Zvcih2YXIgZj0hMSxwPTA7cDx0Ll9mdWxsRGF0YS5sZW5ndGg7cCsrKWlmKHModC5fZnVsbERhdGFbcF0saSkpe2Y9ITA7YnJlYWt9dmFyIG09Xy5zaW1wbGVNYXAodS5yYW5nZSx1LnIybCksdj1tWzBdKm1bMV08PTAmJnUuemVyb2xpbmUmJigibGluZWFyIj09PXUudHlwZXx8Ii0iPT09dS50eXBlKSYmbC5sZW5ndGgmJihmfHxuKHt4OjB9KXx8IXUuc2hvd2xpbmUpLGI9by5zZWxlY3RBbGwoInBhdGguIit6KS5kYXRhKHY/W3t4OjB9XTpbXSk7Yi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoeiwxKS5jbGFzc2VkKCJ6bCIsMSkuY2xhc3NlZCgiY3Jpc3AiLDEpLmF0dHIoImQiLGMpLGIuYXR0cigidHJhbnNmb3JtIixkKS5jYWxsKGsuc3Ryb2tlLHUuemVyb2xpbmVjb2xvcnx8ay5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsTisicHgiKSxiLmV4aXQoKS5yZW1vdmUoKX19dmFyIHUsYz10Ll9mdWxsTGF5b3V0LGg9ITE7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXU9ZSxlPXUuX2lkLGg9ITA7ZWxzZSBpZih1PU8uZ2V0RnJvbUlkKHQsZSksInJlZHJhdyI9PT1lJiZjLl9wYXBlci5zZWxlY3RBbGwoImcuc3VicGxvdCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9Yy5fcGxvdHNbdF0scj1lLnhheGlzLG49ZS55YXhpcztlLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIityLl9pZCsidGljayIpLnJlbW92ZSgpLGUueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK24uX2lkKyJ0aWNrIikucmVtb3ZlKCksZS5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpfSksIWV8fCJyZWRyYXciPT09ZSlyZXR1cm4gXy5zeW5jT3JBc3luYyhPLmxpc3QodCwiIiwhMCkubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbigpe2lmKHIuX2lkKXt2YXIgbj1PLmRvVGlja3ModCxyLl9pZCk7cmV0dXJuInJlZHJhdyI9PT1lJiYoci5fcj1yLnJhbmdlLnNsaWNlKCksci5fcmw9Xy5zaW1wbGVNYXAoci5fcixyLnIybCkpLG59fX0pKTt1LnRpY2tmb3JtYXR8fCgtMT09PVsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXS5pbmRleE9mKHUuZXhwb25lbnRmb3JtYXQpJiYodS5leHBvbmVudGZvcm1hdD0iZSIpLC0xPT09WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0uaW5kZXhPZih1LnNob3dleHBvbmVudCkmJih1LnNob3dleHBvbmVudD0iYWxsIikpLHUuc2V0U2NhbGUoKTt2YXIgZixkLHAsbSx2LGc9ZS5jaGFyQXQoMCksVD1PLmNvdW50ZXJMZXR0ZXIoZSksUz1PLmNhbGNUaWNrcyh1KSxFPWZ1bmN0aW9uKHQpe3JldHVyblt0LnRleHQsdC54LHUubWlycm9yXS5qb2luKCJfIil9LEw9ZSsidGljayIsQz1lKyJncmlkIix6PWUrInpsIixJPSh1LmxpbmV3aWR0aHx8MSkvMixEPSJvdXRzaWRlIj09PXUudGlja3M/dS50aWNrbGVuOjAsUj0wLGo9QS5jcmlzcFJvdW5kKHQsdS5ncmlkd2lkdGgsMSksTj1BLmNyaXNwUm91bmQodCx1Lnplcm9saW5ld2lkdGgsaiksQj1BLmNyaXNwUm91bmQodCx1LnRpY2t3aWR0aCwxKTtpZih1Ll9jb3VudGVyYW5nbGUmJiJvdXRzaWRlIj09PXUudGlja3Mpe3ZhciBVPXUuX2NvdW50ZXJhbmdsZSpNYXRoLlBJLzE4MDtEPXUudGlja2xlbipNYXRoLmNvcyhVKSsxLFI9dS50aWNrbGVuKk1hdGguc2luKFUpfWlmKHUuc2hvd3RpY2tsYWJlbHMmJigib3V0c2lkZSI9PT11LnRpY2tzfHx1LnNob3dsaW5lKSYmKEQrPS4yKnUudGlja2ZvbnQuc2l6ZSksIngiPT09ZylmPVsiYm90dG9tIiwidG9wIl0sZD1mdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdS5sMnAodC54KSsiLDApIn0scD1mdW5jdGlvbih0LGUpe2lmKHUuX2NvdW50ZXJhbmdsZSl7dmFyIHI9dS5fY291bnRlcmFuZ2xlKk1hdGguUEkvMTgwO3JldHVybiJNMCwiK3QrImwiK01hdGguc2luKHIpKmUrIiwiK01hdGguY29zKHIpKmV9cmV0dXJuIk0wLCIrdCsidiIrZX07ZWxzZXtpZigieSIhPT1nKXJldHVybiB2b2lkIF8ud2FybigiVW5yZWNvZ25pemVkIGRvVGlja3MgYXhpczoiLGUpO2Y9WyJsZWZ0IiwicmlnaHQiXSxkPWZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3UubDJwKHQueCkrIikifSxwPWZ1bmN0aW9uKHQsZSl7aWYodS5fY291bnRlcmFuZ2xlKXt2YXIgcj11Ll9jb3VudGVyYW5nbGUqTWF0aC5QSS8xODA7cmV0dXJuIk0iK3QrIiwwbCIrTWF0aC5jb3MocikqZSsiLCIrLU1hdGguc2luKHIpKmV9cmV0dXJuIk0iK3QrIiwwaCIrZX19dmFyIFY9dS5zaWRlfHxmWzBdLEg9Wy0xLDEsVj09PWZbMV0/MTotMV07aWYoImluc2lkZSIhPT11LnRpY2tzPT0oIngiPT09ZykmJihIPUgubWFwKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpLHUudmlzaWJsZSl7dmFyIHE9Uy5maWx0ZXIobik7aWYoaCl7aWYoaSh1Ll9heGlzbGF5ZXIscCh1Ll9wb3MrSSpIWzJdLEhbMl0qdS50aWNrbGVuKSksdS5fY291bnRlcmF4aXMpe2woe2dyaWRsYXllcjp1Ll9ncmlkbGF5ZXIsemVyb2xpbmVsYXllcjp1Ll96ZXJvbGluZWxheWVyfSx1Ll9jb3VudGVyYXhpcyl9cmV0dXJuIGEodS5fYXhpc2xheWVyLHUuX3Bvcyl9bT1PLmdldFN1YnBsb3RzKHQsdSk7dmFyIEc9bS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9Yy5fcGxvdHNbdF07aWYoYy5faGFzKCJjYXJ0ZXNpYW4iKSl7dmFyIHI9ZVtnKyJheGlzbGF5ZXIiXSxuPXUuX2xpbmVwb3NpdGlvbnNbdF18fFtdLG89ZVtUKyJheGlzIl0scz1vLl9pZD09PXUuYW5jaG9yLGg9WyExLCExLCExXSxkPSIiO2lmKCJhbGx0aWNrcyI9PT11Lm1pcnJvcj9oPVshMCwhMCwhMV06cyYmKCJ0aWNrcyI9PT11Lm1pcnJvcj9oPVshMCwhMCwhMV06aFtmLmluZGV4T2YoVildPSEwKSx1Lm1pcnJvcnMpZm9yKHY9MDt2PDI7disrKXt2YXIgbT11Lm1pcnJvcnNbby5faWQrZlt2XV07InRpY2tzIiE9PW0mJiJsYWJlbHMiIT09bXx8KGhbdl09ITApfXJldHVybiB2b2lkIDAhPT1uWzJdJiYoaFsyXT0hMCksaC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9bltlXSxpPUhbZV07dCYmYihyKSYmKGQrPXAocitJKmksaSp1LnRpY2tsZW4pKX0pLGkocixkKSxsKGUsbyx0KSxhKHIsblszXSl9fSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LnRoZW59KTtyZXR1cm4gRy5sZW5ndGg/UHJvbWlzZS5hbGwoRyk6MH19LE8uc3dhcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1wKHQsZSksbj0wO248ci5sZW5ndGg7bisrKXYodCxyW25dLngscltuXS55KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiOjY5MSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njk4LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi9heGlzX2F1dG90eXBlIjo3NjUsIi4vYXhpc19pZHMiOjc2NywiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuL2xheW91dF9kZWZhdWx0cyI6Nzc2LCIuL3NldF9jb252ZXJ0Ijo3ODEsZDM6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNzY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYoIXQpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYobyh0W2VdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByLG49MCxpPTAsYT1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLGw9MDtsPHQubGVuZ3RoO2wrPWEpcj10W01hdGgucm91bmQobCldLHMuaXNEYXRlVGltZShyLGUpJiYobis9MSksbyhyKSYmKGkrPTEpO3JldHVybiBuPjIqaX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZSxyPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMyksbj0wLGk9MCxhPTA7YTx0Lmxlbmd0aDthKz1yKWU9dFtNYXRoLnJvdW5kKGEpXSxzLmNsZWFuTnVtYmVyKGUpIT09bD9uKys6InN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWUmJiJOb25lIiE9PWUmJmkrKztyZXR1cm4gaT4yKm59dmFyIG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LGUpPyJkYXRlIjphKHQpPyJjYXRlZ29yeSI6bih0KT8ibGluZWFyIjoiLSJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vLi4vbGliIjo3MjQsImZhc3QtaXNudW1lcmljIjoxMjl9XSw3NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLm1peCxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmxpZ2h0RnJhY3Rpb24scz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSx1PXQoIi4vdGlja19tYXJrX2RlZmF1bHRzIiksYz10KCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxoPXQoIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxmPXQoIi4vc2V0X2NvbnZlcnQiKSxkPXQoIi4vb3JkZXJlZF9jYXRlZ29yaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHAsbSl7ZnVuY3Rpb24gdihyLG4pe3JldHVybiBhLmNvZXJjZTIodCxlLHMscixuKX12YXIgZz1wLmxldHRlcix5PXAuZm9udHx8e30sYj0iQ2xpY2sgdG8gZW50ZXIgIisocC50aXRsZXx8Zy50b1VwcGVyQ2FzZSgpKyIgYXhpcyIpKyIgdGl0bGUiLHg9cigidmlzaWJsZSIsIXAuY2hlYXRlcm9ubHkpLF89ZS50eXBlO2lmKCJkYXRlIj09PV8pe2kuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiLHAuY2FsZW5kYXIpfWlmKGYoZSxtKSxyKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJnIoInJhbmdlbW9kZSIpLHIoInJhbmdlIiksZS5jbGVhblJhbmdlKCksaCh0LGUsciksZS5faW5pdGlhbENhdGVnb3JpZXM9ImNhdGVnb3J5Ij09PV8/ZChnLGUuY2F0ZWdvcnlvcmRlcixlLmNhdGVnb3J5YXJyYXkscC5kYXRhKTpbXSwheClyZXR1cm4gZTt2YXIgdz1yKCJjb2xvciIpLE09dz09PXQuY29sb3I/dzp5LmNvbG9yO3IoInRpdGxlIixiKSxhLmNvZXJjZUZvbnQociwidGl0bGVmb250Iix7ZmFtaWx5OnkuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqeS5zaXplKSxjb2xvcjpNfSksbCh0LGUscixfKSxjKHQsZSxyLF8scCksdSh0LGUscixwKTt2YXIgaz12KCJsaW5lY29sb3IiLHcpLEE9digibGluZXdpZHRoIiksVD1yKCJzaG93bGluZSIsISFrfHwhIUEpO1R8fChkZWxldGUgZS5saW5lY29sb3IsZGVsZXRlIGUubGluZXdpZHRoKSwoVHx8ZS50aWNrcykmJnIoIm1pcnJvciIpO3ZhciBTPXYoImdyaWRjb2xvciIsbih3LHAuYmdDb2xvcixvKS50b1JnYlN0cmluZygpKSxFPXYoImdyaWR3aWR0aCIpO3IoInNob3dncmlkIixwLnNob3dHcmlkfHwhIVN8fCEhRSl8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgTD12KCJ6ZXJvbGluZWNvbG9yIix3KSxDPXYoInplcm9saW5ld2lkdGgiKTtyZXR1cm4gcigiemVyb2xpbmUiLHAuc2hvd0dyaWR8fCEhTHx8ISFDKXx8KGRlbGV0ZSBlLnplcm9saW5lY29sb3IsZGVsZXRlIGUuemVyb2xpbmV3aWR0aCksZX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo3NjgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NSwiLi9vcmRlcmVkX2NhdGVnb3JpZXMiOjc3NywiLi9zZXRfY29udmVydCI6NzgxLCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc4MiwiLi90aWNrX21hcmtfZGVmYXVsdHMiOjc4MywiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3ODQsdGlueWNvbG9yMjo1MzJ9XSw3Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0LHIpe2Zvcih2YXIgbj1PYmplY3Qua2V5cyh0KSxpPS9eW3h5el1heGlzWzAtOV0qLyxhPVtdLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXTtlJiZzLmNoYXJBdCgwKSE9PWV8fGkudGVzdChzKSYmYS5wdXNoKHIrcyl9cmV0dXJuIGEuc29ydCgpfXZhciBpPXQuX2Z1bGxMYXlvdXQ7aWYoIWkpcmV0dXJuW107dmFyIG89bihpLCIiKTtpZihyKXJldHVybiBvO2Zvcih2YXIgcz1hLmdldFN1YnBsb3RJZHMoaSwiZ2wzZCIpfHxbXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF07bz1vLmNvbmNhdChuKGlbdV0sdSsiLiIpKX1yZXR1cm4gb312YXIgaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vcGxvdHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi9jb25zdGFudHMiKTtyLmlkMm5hbWU9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKHMuQVhfSURfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDEpO3JldHVybiIxIj09PWUmJihlPSIiKSx0LmNoYXJBdCgwKSsiYXhpcyIrZX19LHIubmFtZTJpZD1mdW5jdGlvbih0KXtpZih0Lm1hdGNoKHMuQVhfTkFNRV9QQVRURVJOKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLHQuY2hhckF0KDApK2V9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCxlKXtpZih0Lm1hdGNoKHMuQVhfSURfUEFUVEVSTikmJighZXx8dC5jaGFyQXQoMCk9PT1lKSl7dmFyIHI9dC5zdWJzdHIoMSkucmVwbGFjZSgvXjArLywiIik7cmV0dXJuIjEiPT09ciYmKHI9IiIpLHQuY2hhckF0KDApK3J9fSxyLmxpc3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKHQsZSxyKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG8ubmVzdGVkUHJvcGVydHkodC5fZnVsbExheW91dCxlKS5nZXQoKX0pfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUsITApLm1hcChyLm5hbWUyaWQpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4ieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLG4pewp2YXIgYT10Ll9mdWxsTGF5b3V0LG89bnVsbDtpZihpLnRyYWNlSXMoZSwiZ2wzZCIpKXt2YXIgcz1lLnNjZW5lOyJzY2VuZSI9PT1zLnN1YnN0cigwLDUpJiYobz1hW3NdW24rImF4aXMiXSl9ZWxzZSBvPXIuZ2V0RnJvbUlkKHQsZVtuKyJheGlzIl18fG4pO3JldHVybiBvfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vcGxvdHMiOjgyNywiLi9jb25zdGFudHMiOjc2OX1dLDc2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCJjYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBuLGk9dC5jYXRlZ29yeWFycmF5LGE9QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MDthJiYobj0iYXJyYXkiKTt2YXIgbz1yKCJjYXRlZ29yeW9yZGVyIixuKTsiYXJyYXkiPT09byYmcigiY2F0ZWdvcnlhcnJheSIpLGF8fCJhcnJheSIhPT1vfHwoZS5jYXRlZ29yeW9yZGVyPSJ0cmFjZSIpfX19LHt9XSw3Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtpZFJlZ2V4Ont4Oi9eeChbMi05XXxbMS05XVswLTldKyk/JC8seTovXnkoWzItOV18WzEtOV1bMC05XSspPyQvfSxhdHRyUmVnZXg6e3g6L154YXhpcyhbMi05XXxbMS05XVswLTldKyk/JC8seTovXnlheGlzKFsyLTldfFsxLTldWzAtOV0rKT8kL30seEF4aXNNYXRjaDovXnhheGlzWzAtOV0qJC8seUF4aXNNYXRjaDovXnlheGlzWzAtOV0qJC8sQVhfSURfUEFUVEVSTjovXlt4eXpdWzAtOV0qJC8sQVhfTkFNRV9QQVRURVJOOi9eW3h5el1heGlzWzAtOV0qJC8sTUlORFJBRzo4LE1JTlNFTEVDVDoxMixNSU5aT09NOjIwLERSQUdHRVJTSVpFOjIwLEJFTkRQWDoxLjUsUkVEUkFXREVMQVk6NTAsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6WyJpbWFnZWxheWVyIiwibWFwbGF5ZXIiLCJiYXJsYXllciIsImNhcnBldGxheWVyIiwiYm94bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7fV0sNzcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGksYSxzLGwsdT1uW28oZSldLnR5cGUsYz1bXTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKShzPXJbYV0pIT09ZSYmKGw9bltvKHMpXSxsLnR5cGUhPT11fHxsLmZpeGVkcmFuZ2V8fGMucHVzaChzKSk7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpZih0W2ldW2VdKXt2YXIgaD10W2ldLGY9W107Zm9yKGE9MDthPGMubGVuZ3RoO2ErKylzPWNbYV0saFtzXXx8Zi5wdXNoKHMpO3JldHVybntsaW5rYWJsZUF4ZXM6Zix0aGlzR3JvdXA6aH19cmV0dXJue2xpbmthYmxlQXhlczpjLHRoaXNHcm91cDpudWxsfX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsdTtudWxsPT09ZT8oZT17fSxlW3JdPTEsdT10Lmxlbmd0aCx0LnB1c2goZSkpOnU9dC5pbmRleE9mKGUpO3ZhciBjPU9iamVjdC5rZXlzKGUpO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspaWYocz10W2FdLGEhPT11JiZzW25dKXt2YXIgaD1zW25dO2ZvcihvPTA7bzxjLmxlbmd0aDtvKyspbD1jW29dLHNbbF09aCppKmVbbF07cmV0dXJuIHZvaWQgdC5zcGxpY2UodSwxKX1pZigxIT09aSlmb3Iobz0wO288Yy5sZW5ndGg7bysrKWVbY1tvXV0qPWk7ZVtuXT0xfXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9heGlzX2lkcyIpLmlkMm5hbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7dmFyIGw9cy5fYXhpc0NvbnN0cmFpbnRHcm91cHMsdT1lLl9pZCxjPXUuY2hhckF0KDApO2lmKCFlLmZpeGVkcmFuZ2UmJihyKCJjb25zdHJhaW4iKSxhLmNvZXJjZSh0LGUse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOiJ4Ij09PWM/WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXTpbImJvdHRvbSIsIm1pZGRsZSIsInRvcCJdLGRmbHQ6IngiPT09Yz8iY2VudGVyIjoibWlkZGxlIn19LCJjb25zdHJhaW50b3dhcmQiKSx0LnNjYWxlYW5jaG9yKSl7dmFyIGg9bihsLHUsbyxzKSxmPWEuY29lcmNlKHQsZSx7c2NhbGVhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpoLmxpbmthYmxlQXhlc319LCJzY2FsZWFuY2hvciIpO2lmKGYpe3ZhciBkPXIoInNjYWxlcmF0aW8iKTtkfHwoZD1lLnNjYWxlcmF0aW89MSksaShsLGgudGhpc0dyb3VwLHUsZixkKX1lbHNlLTEhPT1vLmluZGV4T2YodC5zY2FsZWFuY2hvcikmJmEud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogIicrdC5zY2FsZWFuY2hvcisnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoZSB0YXJnZXRheGlzIGhhcyBmaXhlZCByYW5nZS4nKX19fSx7Ii4uLy4uL2xpYiI6NzI0LCIuL2F4aXNfaWRzIjo3Njd9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQuX2lucHV0RG9tYWluLG49c1t0LmNvbnN0cmFpbnRvd2FyZF0saT1yWzBdKyhyWzFdLXJbMF0pKm47dC5kb21haW49dC5faW5wdXQuZG9tYWluPVtpKyhyWzBdLWkpL2UsaSsoclsxXS1pKS9lXX12YXIgaT10KCIuL2F4aXNfaWRzIikuaWQybmFtZSxhPXQoIi4vc2NhbGVfem9vbSIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkFMTU9TVF9FUVVBTCxzPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO3IuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLHMsbCx1LGMsaCxmPXQuX2Z1bGxMYXlvdXQsZD1mLl9heGlzQ29uc3RyYWludEdyb3Vwcztmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgcD1kW2VdLG09T2JqZWN0LmtleXMocCksdj0xLzAsZz0wLHk9MS8wLGI9e30seD17fSxfPSExO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspcz1tW3JdLHhbc109bD1mW2kocyldLGwuX2lucHV0RG9tYWluP2wuZG9tYWluPWwuX2lucHV0RG9tYWluLnNsaWNlKCk6bC5faW5wdXREb21haW49bC5kb21haW4uc2xpY2UoKSxsLl9pbnB1dFJhbmdlfHwobC5faW5wdXRSYW5nZT1sLnJhbmdlLnNsaWNlKCkpLGwuc2V0U2NhbGUoKSxiW3NdPXU9TWF0aC5hYnMobC5fbSkvcFtzXSx2PU1hdGgubWluKHYsdSksImRvbWFpbiIhPT1sLmNvbnN0cmFpbiYmbC5fY29uc3RyYWludFNocmlua2FibGV8fCh5PU1hdGgubWluKHksdSkpLGRlbGV0ZSBsLl9jb25zdHJhaW50U2hyaW5rYWJsZSxnPU1hdGgubWF4KGcsdSksImRvbWFpbiI9PT1sLmNvbnN0cmFpbiYmKF89ITApO2lmKCEodj5vKmcpfHxfKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYocz1tW3JdLHU9YltzXSxsPXhbc10sYz1sLmNvbnN0cmFpbix1IT09eXx8ImRvbWFpbiI9PT1jKWlmKGg9dS95LCJyYW5nZSI9PT1jKWEobCxoKTtlbHNle3ZhciB3PWwuX2lucHV0RG9tYWluLE09KGwuZG9tYWluWzFdLWwuZG9tYWluWzBdKS8od1sxXS13WzBdKSxrPShsLnIybChsLnJhbmdlWzFdKS1sLnIybChsLnJhbmdlWzBdKSkvKGwucjJsKGwuX2lucHV0UmFuZ2VbMV0pLWwucjJsKGwuX2lucHV0UmFuZ2VbMF0pKTtpZigoaC89TSkqazwxKXtsLmRvbWFpbj1sLl9pbnB1dC5kb21haW49dy5zbGljZSgpLGEobCxoKTtjb250aW51ZX1pZihrPDEmJihsLnJhbmdlPWwuX2lucHV0LnJhbmdlPWwuX2lucHV0UmFuZ2Uuc2xpY2UoKSxoKj1rKSxsLmF1dG9yYW5nZSYmbC5fbWluLmxlbmd0aCYmbC5fbWF4Lmxlbmd0aCl7dmFyIEE9bC5yMmwobC5yYW5nZVswXSksVD1sLnIybChsLnJhbmdlWzFdKSxTPShBK1QpLzIsRT1TLEw9UyxDPU1hdGguYWJzKFQtUyksej1TLUMqaCoxLjAwMDEsST1TK0MqaCoxLjAwMDE7bihsLGgpLGwuc2V0U2NhbGUoKTt2YXIgRCxQLE89TWF0aC5hYnMobC5fbSk7Zm9yKFA9MDtQPGwuX21pbi5sZW5ndGg7UCsrKShEPWwuX21pbltQXS52YWwtbC5fbWluW1BdLnBhZC9PKT56JiZEPEUmJihFPUQpO2ZvcihQPTA7UDxsLl9tYXgubGVuZ3RoO1ArKykoRD1sLl9tYXhbUF0udmFsK2wuX21heFtQXS5wYWQvTyk8SSYmRD5MJiYoTD1EKTt2YXIgUj0oTC1FKS8oMipDKTtoLz1SLEU9bC5sMnIoRSksTD1sLmwycihMKSxsLnJhbmdlPWwuX2lucHV0LnJhbmdlPUE8VD9bRSxMXTpbTCxFXX1uKGwsaCl9fX0sci5jbGVhbj1mdW5jdGlvbih0LGUpe2lmKGUuX2lucHV0RG9tYWluKXtmb3IodmFyIHI9ITEsbj1lLl9pZCxpPXQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLGE9MDthPGkubGVuZ3RoO2ErKylpZihpW2FdW25dKXtyPSEwO2JyZWFrfXImJiJkb21haW4iPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY5OCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuL2F4aXNfaWRzIjo3NjcsIi4vc2NhbGVfem9vbSI6Nzc5fV0sNzcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dmFyIHM9dC5kcmFnbGF5ZXIuc2VsZWN0QWxsKCIuIitlKS5kYXRhKFswXSk7cmV0dXJuIHMuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJkcmFnIiwhMCkuY2xhc3NlZChlLCEwKS5zdHlsZSh7ZmlsbDoidHJhbnNwYXJlbnQiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJkYXRhLXN1YnBsb3QiLHQuaWQpLHMuY2FsbChTLnNldFJlY3QsbixpLGEsbykuY2FsbChFLHIpLHMubm9kZSgpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuPXQucmFuZ2VbZV0saT1NYXRoLmFicyhuLXQucmFuZ2VbMS1lXSk7cmV0dXJuImRhdGUiPT09dC50eXBlP246ImxvZyI9PT10LnR5cGU/KHI9TWF0aC5jZWlsKE1hdGgubWF4KDAsLU1hdGgubG9nKGkpL01hdGguTE4xMCkpKzMseC5mb3JtYXQoIi4iK3IrImciKShNYXRoLnBvdygxMCxuKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMobikpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKzQseC5mb3JtYXQoIi4iK1N0cmluZyhyKSsiZyIpKG4pKX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7dmFyIGEscyxsLHU7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylzPXRbYV0scy5maXhlZHJhbmdlfHwobD1zLl9ybFswXSx1PXMuX3JsWzFdLWwscy5yYW5nZT1bcy5sMnIobCt1KmUpLHMubDJyKGwrdSpyKV0sbltzLl9uYW1lKyIucmFuZ2VbMF0iXT1zLnJhbmdlWzBdLG5bcy5fbmFtZSsiLnJhbmdlWzFdIl09cy5yYW5nZVsxXSk7aWYoaSYmaS5sZW5ndGgpe3ZhciBjPShlKygxLXIpKS8yO28oaSxjLDEtYyxuKX19ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiBsKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0PyJuc2V3Ij09PXQ/InBhbiI9PT1lPyJtb3ZlIjoiY3Jvc3NoYWlyIjp0LnRvTG93ZXJDYXNlKCkrIi1yZXNpemUiOiJwb2ludGVyIn1mdW5jdGlvbiBjKHQsZSxyLG4saSl7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94Iikuc3R5bGUoe2ZpbGw6ZT4uMj8icmdiYSgwLDAsMCwwKSI6InJnYmEoMjU1LDI1NSwyNTUsMCkiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIityKyIsICIrbisiKSIpLmF0dHIoImQiLGkrIloiKX1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOlQuYmFja2dyb3VuZCxzdHJva2U6VC5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UrIiwgIityKyIpIikuYXR0cigiZCIsIk0wLDBaIil9ZnVuY3Rpb24gZih0KXt0LnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9ZnVuY3Rpb24gZCh0LGUscixuLGksYSl7dC5hdHRyKCJkIixuKyJNIityLmwrIiwiK3IudCsidiIrci5oKyJoIityLncrInYtIityLmgrImgtIityLncrIloiKSxpfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLGE+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkpfWZ1bmN0aW9uIHAodCl7eC5zZWxlY3QodCkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX1mdW5jdGlvbiBtKHQpe3JldHVybi0xIT09WyJsYXNzbyIsInNlbGVjdCJdLmluZGV4T2YodCl9ZnVuY3Rpb24gdih0LGUpe3JldHVybiJNIisodC5sLS41KSsiLCIrKGUtai0uNSkrImgtM3YiKygyKmorMSkrImgzWk0iKyh0LnIrLjUpKyIsIisoZS1qLS41KSsiaDN2IisoMipqKzEpKyJoLTNaIn1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIk0iKyhlLWotLjUpKyIsIisodC50LS41KSsidi0zaCIrKDIqaisxKSsidjNaTSIrKGUtai0uNSkrIiwiKyh0LmIrLjUpKyJ2M2giKygyKmorMSkrInYtM1oifWZ1bmN0aW9uIHkodCl7dmFyIGU9TWF0aC5mbG9vcihNYXRoLm1pbih0LmItdC50LHQuci10LmwsaikvMik7cmV0dXJuIk0iKyh0LmwtMy41KSsiLCIrKHQudC0uNStlKSsiaDN2IistZSsiaCIrZSsidi0zaC0iKyhlKzMpKyJaTSIrKHQuciszLjUpKyIsIisodC50LS41K2UpKyJoLTN2IistZSsiaCIrLWUrInYtM2giKyhlKzMpKyJaTSIrKHQuciszLjUpKyIsIisodC5iKy41LWUpKyJoLTN2IitlKyJoIistZSsidjNoIisoZSszKSsiWk0iKyh0LmwtMy41KSsiLCIrKHQuYisuNS1lKSsiaDN2IitlKyJoIitlKyJ2M2gtIisoZSszKSsiWiJ9ZnVuY3Rpb24gYih0LGUscil7dmFyIG4saSxhLG8scyxsLHU9ITEsYz17fSxoPXt9O2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe2ZvcihvPXRbbl0saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKG9bZVtpXV0pe2ZvcihzIGluIG8pLTE9PT0oIngiPT09cy5jaGFyQXQoMCk/ZTpyKS5pbmRleE9mKHMpJiYoY1tzXT0xKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKW9bclthXV0mJih1PSEwKX1mb3IoaT0wO2k8ci5sZW5ndGg7aSsrKWlmKG9bcltpXV0pZm9yKGwgaW4gbyktMT09PSgieCI9PT1sLmNoYXJBdCgwKT9lOnIpLmluZGV4T2YobCkmJihoW2xdPTEpfXJldHVybiB1JiYoay5leHRlbmRGbGF0KGMsaCksaD17fSkse3g6Yyx5OmgseHk6dX19dmFyIHg9dCgiZDMiKSxfPXQoInRpbnljb2xvcjIiKSx3PXQoIi4uLy4uL3Bsb3RseSIpLE09dCgiLi4vLi4vcmVnaXN0cnkiKSxrPXQoIi4uLy4uL2xpYiIpLEE9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksVD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksUz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxFPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxMPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxDPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX1RMLHo9dCgiLi4vcGxvdHMiKSxJPXQoIi4vYXhlcyIpLmRvVGlja3MsRD10KCIuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLFA9dCgiLi9zZWxlY3QiKSxPPXQoIi4vc2NhbGVfem9vbSIpLFI9dCgiLi9jb25zdGFudHMiKSxGPVIuTUlORFJBRyxqPVIuTUlOWk9PTSxOPSEwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixULEUsQixVLFYpe2Z1bmN0aW9uIEgoKXtldD1bZS54YXhpc10scnQ9W2UueWF4aXNdO3ZhciByPWV0WzBdLG49cnRbMF07YXQ9ci5fbGVuZ3RoLG90PW4uX2xlbmd0aDt2YXIgYT1kdC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsbz1bci5faWRdLHM9W24uX2lkXTt0dD1bZV0uY29uY2F0KFUmJlY/ZS5vdmVybGF5czpbXSk7Zm9yKHZhciBsPTE7bDx0dC5sZW5ndGg7bCsrKXt2YXIgYz10dFtsXS54YXhpcyxoPXR0W2xdLnlheGlzOy0xPT09ZXQuaW5kZXhPZihjKSYmKGV0LnB1c2goYyksby5wdXNoKGMuX2lkKSksLTE9PT1ydC5pbmRleE9mKGgpJiYocnQucHVzaChoKSxzLnB1c2goaC5faWQpKX1zdD1pKGV0LFYpLGx0PWkocnQsVSksdXQ9dShsdCtzdCxkdC5kcmFnbW9kZSksbnQ9ci5fb2Zmc2V0LGl0PW4uX29mZnNldDt2YXIgZj1iKGEsbyxzKTtjdD1mLnh5LGh0PVtdO2Zvcih2YXIgZCBpbiBmLngpaHQucHVzaChEKHQsZCkpO2Z0PVtdO2Zvcih2YXIgcCBpbiBmLnkpZnQucHVzaChEKHQscCkpfWZ1bmN0aW9uIHEoZSxyLG4pe3ZhciBpPXZ0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3l0PXItaS5sZWZ0LGJ0PW4taS50b3AseHQ9e2w6eXQscjp5dCx3OjAsdDpidCxiOmJ0LGg6MH0sX3Q9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6Xyh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksd3Q9Ik0wLDBIIithdCsiViIrb3QrIkgwVjAiLE10PSExLGt0PSJ4eSIsQXQ9YyhwdCxfdCxudCxpdCx3dCksVHQ9aChwdCxudCxpdCksZihwdCl9ZnVuY3Rpb24gRyhlLHIpe2Z1bmN0aW9uIG4oKXtrdD0iIix4dC5yPXh0LmwseHQudD14dC5iLFR0LmF0dHIoImQiLCJNMCwwWiIpfWlmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuITE7dmFyIGk9TWF0aC5tYXgoMCxNYXRoLm1pbihhdCxlK3l0KSksYT1NYXRoLm1heCgwLE1hdGgubWluKG90LHIrYnQpKSxvPU1hdGguYWJzKGkteXQpLHM9TWF0aC5hYnMoYS1idCk7eHQubD1NYXRoLm1pbih5dCxpKSx4dC5yPU1hdGgubWF4KHl0LGkpLHh0LnQ9TWF0aC5taW4oYnQsYSkseHQuYj1NYXRoLm1heChidCxhKSxjdD9vPmp8fHM+aj8oa3Q9Inh5IixvL2F0PnMvb3Q/KHM9bypvdC9hdCxidD5hP3h0LnQ9YnQtczp4dC5iPWJ0K3MpOihvPXMqYXQvb3QseXQ+aT94dC5sPXl0LW86eHQucj15dCtvKSxUdC5hdHRyKCJkIix5KHh0KSkpOm4oKTohbHR8fHM8TWF0aC5taW4oTWF0aC5tYXgoLjYqbyxGKSxqKT9vPEY/bigpOih4dC50PTAseHQuYj1vdCxrdD0ieCIsVHQuYXR0cigiZCIsdih4dCxidCkpKTohc3R8fG88TWF0aC5taW4oLjYqcyxqKT8oeHQubD0wLHh0LnI9YXQsa3Q9InkiLFR0LmF0dHIoImQiLGcoeHQseXQpKSk6KGt0PSJ4eSIsVHQuYXR0cigiZCIseSh4dCkpKSx4dC53PXh0LnIteHQubCx4dC5oPXh0LmIteHQudCxkKEF0LFR0LHh0LHd0LE10LF90KSxNdD0hMH1mdW5jdGlvbiBZKGUscil7aWYoTWF0aC5taW4oeHQuaCx4dC53KTwyKkYpcmV0dXJuIDI9PT1yJiZLKCkscCh0KTsieHkiIT09a3QmJiJ4IiE9PWt0fHxvKGV0LHh0LmwvYXQseHQuci9hdCxTdCxodCksInh5IiE9PWt0JiYieSIhPT1rdHx8byhydCwob3QteHQuYikvb3QsKG90LXh0LnQpL290LFN0LGZ0KSxwKHQpLFEoa3QpLE4mJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKGsubm90aWZpZXIoIkRvdWJsZS1jbGljayB0bzxicj56b29tIGJhY2sgb3V0IiwibG9uZyIpLE49ITEpfWZ1bmN0aW9uIFgoZSxyKXt2YXIgbj0xPT09KFUrVikubGVuZ3RoO2lmKGUpUSgpO2Vsc2UgaWYoMiE9PXJ8fG4pe2lmKDE9PT1yJiZuKXt2YXIgaT1VP3J0WzBdOmV0WzBdLG89InMiPT09VXx8InciPT09Vj8wOjEscz1pLl9uYW1lKyIucmFuZ2VbIitvKyJdIixsPWEoaSxvKSx1PSJsZWZ0IixjPSJtaWRkbGUiO2lmKGkuZml4ZWRyYW5nZSlyZXR1cm47VT8oYz0ibiI9PT1VPyJ0b3AiOiJib3R0b20iLCJyaWdodCI9PT1pLnNpZGUmJih1PSJyaWdodCIpKToiZSI9PT1WJiYodT0icmlnaHQiKSx0Ll9jb250ZXh0LnNob3dBeGlzUmFuZ2VFbnRyeUJveGVzJiZ4LnNlbGVjdCh2dCkuY2FsbChBLm1ha2VFZGl0YWJsZSx7Z2Q6dCxpbW1lZGlhdGU6ITAsYmFja2dyb3VuZDpkdC5wYXBlcl9iZ2NvbG9yLHRleHQ6U3RyaW5nKGwpLGZpbGw6aS50aWNrZm9udD9pLnRpY2tmb250LmNvbG9yOiIjNDQ0Iixob3Jpem9udGFsQWxpZ246dSx2ZXJ0aWNhbEFsaWduOmN9KS5vbigiZWRpdCIsZnVuY3Rpb24oZSl7dmFyIHI9aS5kMnIoZSk7dm9pZCAwIT09ciYmdy5yZWxheW91dCh0LHMscil9KX19ZWxzZSBLKCl9ZnVuY3Rpb24gVyhlKXtmdW5jdGlvbiByKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiB0LmwycihhKyhlLWEpKnIpfWlmKCF0LmZpeGVkcmFuZ2Upe3ZhciBpPWsuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGE9aVswXSsoaVsxXS1pWzBdKSplO3QucmFuZ2U9aS5tYXAobil9fWlmKHQuX2NvbnRleHQuc2Nyb2xsWm9vbXx8ZHQuX2VuYWJsZXNjcm9sbHpvb20pe2lmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIGsucGF1c2VFdmVudChlKTt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIi5wbG90bHkiKTtpZihIKCksIShuLnNjcm9sbEhlaWdodC1uLmNsaWVudEhlaWdodD4xMHx8bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoPjEwKSl7Y2xlYXJUaW1lb3V0KEx0KTt2YXIgaT0tZS5kZWx0YVk7aWYoaXNGaW5pdGUoaSl8fChpPWUud2hlZWxEZWx0YS8xMCksIWlzRmluaXRlKGkpKXJldHVybiB2b2lkIGsubG9nKCJEaWQgbm90IGZpbmQgd2hlZWwgbW90aW9uIGF0dHJpYnV0ZXM6ICIsZSk7dmFyIGEsbz1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgoaSwtMjApLDIwKS8xMDApLHM9enQuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9KGUuY2xpZW50WC1zLmxlZnQpL3Mud2lkdGgsdT0ocy5ib3R0b20tZS5jbGllbnRZKS9zLmhlaWdodDtpZihWfHxjdCl7Zm9yKFZ8fChsPS41KSxhPTA7YTxldC5sZW5ndGg7YSsrKXIoZXRbYV0sbCxvKTtFdFsyXSo9byxFdFswXSs9RXRbMl0qbCooMS9vLTEpfWlmKFV8fGN0KXtmb3IoVXx8KHU9LjUpLGE9MDthPHJ0Lmxlbmd0aDthKyspcihydFthXSx1LG8pO0V0WzNdKj1vLEV0WzFdKz1FdFszXSooMS11KSooMS9vLTEpfXJldHVybiAkKEV0KSxKKFUsViksTHQ9c2V0VGltZW91dChmdW5jdGlvbigpe0V0PVswLDAsYXQsb3RdO3ZhciB0O3Q9Y3Q/Inh5IjooVj8ieCI6IiIpKyhVPyJ5IjoiIiksUSh0KX0sQ3QpLGsucGF1c2VFdmVudChlKX19fWZ1bmN0aW9uIFooZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG4saSxhPTEtZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aWYoIXMuZml4ZWRyYW5nZSl7bj1zLGk9cy5fcmxbYV0rKHMuX3JsW2VdLXMuX3JsW2FdKS9sKHIvcy5fbGVuZ3RoKTt2YXIgdT1zLmwycihpKTshMSE9PXUmJnZvaWQgMCE9PXUmJihzLnJhbmdlW2VdPXUpfX1yZXR1cm4gbi5fbGVuZ3RoKihuLl9ybFtlXS1pKS8obi5fcmxbZV0tbi5fcmxbYV0pfWlmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZihIKCksImV3Ij09PXN0fHwibnMiPT09bHQpcmV0dXJuIHN0JiZzKGV0LGUpLGx0JiZzKHJ0LHIpLCQoW3N0Py1lOjAsbHQ/LXI6MCxhdCxvdF0pLHZvaWQgSihsdCxzdCk7aWYoY3QmJnN0JiZsdCl7dmFyIGk9InciPT09c3Q9PSgibiI9PT1sdCk/MTotMSxhPShlL2F0K2kqci9vdCkvMjtlPWEqYXQscj1pKmEqb3R9InciPT09c3Q/ZT1uKGV0LDAsZSk6ImUiPT09c3Q/ZT1uKGV0LDEsLWUpOnN0fHwoZT0wKSwibiI9PT1sdD9yPW4ocnQsMSxyKToicyI9PT1sdD9yPW4ocnQsMCwtcik6bHR8fChyPTApO3ZhciBvPSJ3Ij09PXN0P2U6MCx1PSJuIj09PWx0P3I6MDtpZihjdCl7dmFyIGM7aWYoIXN0JiYxPT09bHQubGVuZ3RoKXtmb3IoYz0wO2M8ZXQubGVuZ3RoO2MrKylldFtjXS5yYW5nZT1ldFtjXS5fci5zbGljZSgpLE8oZXRbY10sMS1yL290KTtlPXIqYXQvb3Qsbz1lLzJ9aWYoIWx0JiYxPT09c3QubGVuZ3RoKXtmb3IoYz0wO2M8cnQubGVuZ3RoO2MrKylydFtjXS5yYW5nZT1ydFtjXS5fci5zbGljZSgpLE8ocnRbY10sMS1lL2F0KTtyPWUqb3QvYXQsdT1yLzJ9fSQoW28sdSxhdC1lLG90LXJdKSxKKGx0LHN0KX19ZnVuY3Rpb24gSihlLHIpe2Z1bmN0aW9uIG4odCl7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyl0W2FdLmZpeGVkcmFuZ2V8fG8ucHVzaCh0W2FdLl9pZCl9ZnVuY3Rpb24gaShuLGkscyl7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIGw9blthXTtpZigociYmLTEhPT1vLmluZGV4T2YobC54cmVmKXx8ZSYmLTEhPT1vLmluZGV4T2YobC55cmVmKSkmJihpKHQsYSkscykpcmV0dXJufX12YXIgYSxvPVtdO2Zvcigocnx8Y3QpJiYobihldCksbihodCkpLChlfHxjdCkmJihuKHJ0KSxuKGZ0KSksU3Q9e30sYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgcz1vW2FdO0kodCxzLCEwKTt2YXIgbD1EKHQscyk7U3RbbC5fbmFtZSsiLnJhbmdlWzBdIl09bC5yYW5nZVswXSxTdFtsLl9uYW1lKyIucmFuZ2VbMV0iXT1sLnJhbmdlWzFdfWkoZHQuYW5ub3RhdGlvbnN8fFtdLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSksaShkdC5zaGFwZXN8fFtdLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3T25lIikpLGkoZHQuaW1hZ2VzfHxbXSxNLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX1mdW5jdGlvbiBLKCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlLHIsbixpPXQuX2NvbnRleHQuZG91YmxlQ2xpY2ssYT0oc3Q/ZXQ6W10pLmNvbmNhdChsdD9ydDpbXSksbz17fTtpZigicmVzZXQrYXV0b3NpemUiPT09aSlmb3IoaT0iYXV0b3NpemUiLHI9MDtyPGEubGVuZ3RoO3IrKylpZihlPWFbcl0sZS5fcmFuZ2VJbml0aWFsJiYoZS5yYW5nZVswXSE9PWUuX3JhbmdlSW5pdGlhbFswXXx8ZS5yYW5nZVsxXSE9PWUuX3JhbmdlSW5pdGlhbFsxXSl8fCFlLl9yYW5nZUluaXRpYWwmJiFlLmF1dG9yYW5nZSl7aT0icmVzZXQiO2JyZWFrfWlmKCJhdXRvc2l6ZSI9PT1pKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspZT1hW3JdLGUuZml4ZWRyYW5nZXx8KG9bZS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTtlbHNlIGlmKCJyZXNldCI9PT1pKWZvcigoc3R8fGN0KSYmKGE9YS5jb25jYXQoaHQpKSxsdCYmIWN0JiYoYT1hLmNvbmNhdChmdCkpLGN0JiYoc3Q/bHR8fChhPWEuY29uY2F0KHJ0KSk6YT1hLmNvbmNhdChldCkpLHI9MDtyPGEubGVuZ3RoO3IrKyllPWFbcl0sZS5fcmFuZ2VJbml0aWFsPyhuPWUuX3JhbmdlSW5pdGlhbCxvW2UuX25hbWUrIi5yYW5nZVswXSJdPW5bMF0sb1tlLl9uYW1lKyIucmFuZ2VbMV0iXT1uWzFdKTpvW2UuX25hbWUrIi5hdXRvcmFuZ2UiXT0hMDt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksdy5yZWxheW91dCh0LG8pfX1mdW5jdGlvbiBRKGUpe3ZvaWQgMD09PWUmJihlPShWPyJ4IjoiIikrKFU/InkiOiIiKSksJChbMCwwLGF0LG90XSksay5zeW5jT3JBc3luYyhbei5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dy5yZWxheW91dCh0LFN0KX1dLHQpfWZ1bmN0aW9uICQodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5maXhlZHJhbmdlPzA6ZCYmLTEhPT1odC5pbmRleE9mKHQpP2g6cCYmLTEhPT0oY3Q/aHQ6ZnQpLmluZGV4T2YodCk/ZjowfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gZT8odC5yYW5nZT10Ll9yLnNsaWNlKCksTyh0LGUpLG4odCxlKSk6MH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQuX2xlbmd0aCooMS1lKSpDW3QuY29uc3RyYWludG93YXJkfHwibWlkZGxlIl19dmFyIGksYSxvLHMsbCx1PWR0Ll9wbG90cyxjPU9iamVjdC5rZXlzKHUpLGg9dFsyXS9ldFswXS5fbGVuZ3RoLGY9dFszXS9ydFswXS5fbGVuZ3RoLGQ9Vnx8Y3QscD1VfHxjdDtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKXt2YXIgbT11W2NbaV1dLHY9bS54YXhpcyxnPW0ueWF4aXMseT1kJiYhdi5maXhlZHJhbmdlJiYtMSE9PWV0LmluZGV4T2YodiksYj1wJiYhZy5maXhlZHJhbmdlJiYtMSE9PXJ0LmluZGV4T2YoZyk7aWYoeT8oYT1oLHM9Vj90WzBdOm4odixhKSk6KGE9ZSh2KSxzPXIodixhKSksYj8obz1mLGw9VT90WzFdOm4oZyxvKSk6KG89ZShnKSxsPXIoZyxvKSksYXx8byl7YXx8KGE9MSksb3x8KG89MSk7dmFyIHg9di5fb2Zmc2V0LXMvYSxfPWcuX29mZnNldC1sL287ZHQuX2RlZnMuc2VsZWN0KCIjIittLmNsaXBJZCsiPiByZWN0IikuY2FsbChTLnNldFRyYW5zbGF0ZSxzLGwpLmNhbGwoUy5zZXRTY2FsZSxhLG8pO3ZhciB3PW0ucGxvdC5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIgLnBvaW50cywgLmJveGxheWVyIC5wb2ludHMiKTttLnBsb3QuY2FsbChTLnNldFRyYW5zbGF0ZSx4LF8pLmNhbGwoUy5zZXRTY2FsZSwxL2EsMS9vKSx3LnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChTLnNldFBvaW50R3JvdXBTY2FsZSxhLG8pLmNhbGwoUy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLG0pLHcuc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChTLnNldFRleHRQb2ludHNTY2FsZSxhLG8pLmNhbGwoUy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLG0pfX19dmFyIHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LHV0LGN0LGh0LGZ0LGR0PXQuX2Z1bGxMYXlvdXQscHQ9dC5fZnVsbExheW91dC5fem9vbWxheWVyLG10PVUrVj09PSJuc2V3IjtIKCk7dmFyIHZ0PW4oZSxVK1YrImRyYWciLHV0LHIsVCxFLEIpO2lmKCFsdCYmIXN0JiYhbShkdC5kcmFnbW9kZSkpcmV0dXJuIHZ0Lm9ubW91c2Vkb3duPW51bGwsdnQuc3R5bGUucG9pbnRlckV2ZW50cz1tdD8iYWxsIjoibm9uZSIsdnQ7dmFyIGd0PXtlbGVtZW50OnZ0LGdkOnQscGxvdGluZm86ZSxwcmVwRm46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7bXQ/ZS5zaGlmdEtleSYmKGk9InBhbiI9PT1pPyJ6b29tIjoicGFuIik6aT0icGFuIixndC5taW5EcmFnPSJsYXNzbyI9PT1pPzE6dm9pZCAwLCJ6b29tIj09PWk/KGd0Lm1vdmVGbj1HLGd0LmRvbmVGbj1ZLGd0Lm1pbkRyYWc9MSxxKGUscixuKSk6InBhbiI9PT1pPyhndC5tb3ZlRm49WixndC5kb25lRm49WCxmKHB0KSk6bShpKSYmKGd0LnhheGVzPWV0LGd0LnlheGVzPXJ0LFAoZSxyLG4sZ3QsaSkpfX07TC5pbml0KGd0KTt2YXIgeXQsYnQseHQsX3Qsd3QsTXQsa3QsQXQsVHQsU3Q9e30sRXQ9WzAsMCxhdCxvdF0sTHQ9bnVsbCxDdD1SLlJFRFJBV0RFTEFZLHp0PWUubWFpbnBsb3Q/ZHQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7cmV0dXJuIFUubGVuZ3RoKlYubGVuZ3RoIT0xJiYodm9pZCAwIT09dnQub253aGVlbD92dC5vbndoZWVsPVc6dm9pZCAwIT09dnQub25tb3VzZXdoZWVsJiYodnQub25tb3VzZXdoZWVsPVcpKSx2dH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2MjMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzksIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vcGxvdHMiOjgyNywiLi9heGVzIjo3NjQsIi4vYXhpc19pZHMiOjc2NywiLi9jb25zdGFudHMiOjc2OSwiLi9zY2FsZV96b29tIjo3NzksIi4vc2VsZWN0Ijo3ODAsZDM6MTIwLHRpbnljb2xvcjI6NTMyfV0sNzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Iiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9kcmFnYm94Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoKGUuX2hhcygiY2FydGVzaWFuIil8fGUuX2hhcygiZ2wyZCIpKSYmIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7T2JqZWN0LmtleXMoZS5fcGxvdHN8fHt9KS5zb3J0KGZ1bmN0aW9uKHQscil7aWYoKGUuX3Bsb3RzW3RdLm1haW5wbG90JiYhMCk9PT0oZS5fcGxvdHNbcl0ubWFpbnBsb3QmJiEwKSl7dmFyIG49dC5zcGxpdCgieSIpLGk9ci5zcGxpdCgieSIpO3JldHVybiBuWzBdPT09aVswXT9OdW1iZXIoblsxXXx8MSktTnVtYmVyKGlbMV18fDEpOk51bWJlcihuWzBdfHwxKS1OdW1iZXIoaVswXXx8MSl9cmV0dXJuIGUuX3Bsb3RzW3RdLm1haW5wbG90PzE6LTF9KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBsPWUuX3Bsb3RzW3JdLHU9bC54YXhpcyxjPWwueWF4aXMsaD0odS5fbGluZXBvc2l0aW9uc1tyXXx8W10pWzNdLGY9KGMuX2xpbmVwb3NpdGlvbnNbcl18fFtdKVszXSxkPW8uRFJBR0dFUlNJWkU7aWYobihoKSYmInRvcCI9PT11LnNpZGUmJihoLT1kKSxuKGYpJiYicmlnaHQiIT09Yy5zaWRlJiYoZi09ZCksIWwubWFpbnBsb3Qpe3ZhciBwPXModCxsLDAsMCx1Ll9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7cC5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1wLHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSxwLm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHAub25jbGljaz1mdW5jdGlvbihlKXtpLmNsaWNrKHQsZSxyKX0sdC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYocyh0LGwsLWQsLWQsZCxkLCJuIiwidyIpLHModCxsLHUuX2xlbmd0aCwtZCxkLGQsIm4iLCJlIikscyh0LGwsLWQsYy5fbGVuZ3RoLGQsZCwicyIsInciKSxzKHQsbCx1Ll9sZW5ndGgsYy5fbGVuZ3RoLGQsZCwicyIsImUiKSl9dC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYobihoKSYmKCJmcmVlIj09PXUuYW5jaG9yJiYoaC09ZS5fc2l6ZS5oKigxLWMuZG9tYWluWzFdKSkscyh0LGwsLjEqdS5fbGVuZ3RoLGgsLjgqdS5fbGVuZ3RoLGQsIiIsImV3Iikscyh0LGwsMCxoLC4xKnUuX2xlbmd0aCxkLCIiLCJ3Iikscyh0LGwsLjkqdS5fbGVuZ3RoLGgsLjEqdS5fbGVuZ3RoLGQsIiIsImUiKSksbihmKSYmKCJmcmVlIj09PWMuYW5jaG9yJiYoZi09ZS5fc2l6ZS53KnUuZG9tYWluWzBdKSxzKHQsbCxmLC4xKmMuX2xlbmd0aCxkLC44KmMuX2xlbmd0aCwibnMiLCIiKSxzKHQsbCxmLC45KmMuX2xlbmd0aCxkLC4xKmMuX2xlbmd0aCwicyIsIiIpLHModCxsLGYsMCxkLC4xKmMuX2xlbmd0aCwibiIsIiIpKSl9KTt2YXIgcj1lLl9ob3ZlcmxheWVyLm5vZGUoKTtyLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PWUuX2xhc3Rob3ZlcixpLmhvdmVyKHQscixlLl9ob3ZlcnN1YnBsb3QpfSxyLm9uY2xpY2s9ZnVuY3Rpb24ocil7ci50YXJnZXQ9ZS5fbGFzdGhvdmVyLGkuY2xpY2sodCxyKX0sci5vbm1vdXNlZG93bj1mdW5jdGlvbih0KXtlLl9sYXN0aG92ZXIub25tb3VzZWRvd24odCl9fX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjIzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NDMsIi4vY29uc3RhbnRzIjo3NjksIi4vZHJhZ2JveCI6NzcyLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNzc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5fbW9kdWxlcztlLnBsb3QmJmUucGxvdC5zZWxlY3RBbGwoImc6bm90KC5zY2F0dGVybGF5ZXIpIikuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107aWYoImNhcnRlc2lhbiI9PT1sLmJhc2VQbG90TW9kdWxlLm5hbWUpe2Zvcih2YXIgdT1bXSxjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBoPXJbY10sZj1oWzBdLnRyYWNlO2YuX21vZHVsZT09PWwmJiEwPT09Zi52aXNpYmxlJiZ1LnB1c2goaCl9bC5wbG90KHQsZSx1LG4saSl9fX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9T2JqZWN0LmtleXMoZS5fcGxvdHMpLG49W10saT1bXSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1lLl9wbG90c1tvXSxsPXMueGF4aXMsdT1zLnlheGlzLGM9bC5fbWFpbkF4aXMsaD11Ll9tYWluQXhpcyxmPWMuX2lkK2guX2lkO2YhPT1vJiYtMSE9PXIuaW5kZXhPZihmKT8ocy5tYWlucGxvdD1mLHMubWFpbnBsb3RpbmZvPWUuX3Bsb3RzW2ZdLGkucHVzaChvKSk6bi5wdXNoKG8pfXJldHVybiBuPW4uY29uY2F0KGkpfWZ1bmN0aW9uIGEodCl7dmFyIGU9dC5wbG90Z3JvdXAscj10LmlkLG49Zi5sYXllclZhbHVlMmxheWVyQ2xhc3NbdC54YXhpcy5sYXllcl0saT1mLmxheWVyVmFsdWUybGF5ZXJDbGFzc1t0LnlheGlzLmxheWVyXTtpZih0Lm1haW5wbG90KXt2YXIgYT10Lm1haW5wbG90aW5mbyxvPWEucGxvdGdyb3VwLGw9cisiLXgiLHU9cisiLXkiO3QuZ3JpZGxheWVyPXMoYS5vdmVyZ3JpZCwiZyIsciksdC56ZXJvbGluZWxheWVyPXMoYS5vdmVyemVybywiZyIscikscyhhLm92ZXJsaW5lc0JlbG93LCJwYXRoIixsKSxzKGEub3ZlcmxpbmVzQmVsb3csInBhdGgiLHUpLHMoYS5vdmVyYXhlc0JlbG93LCJnIixsKSxzKGEub3ZlcmF4ZXNCZWxvdywiZyIsdSksdC5wbG90PXMoYS5vdmVycGxvdCwiZyIscikscyhhLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixsKSxzKGEub3ZlcmxpbmVzQWJvdmUsInBhdGgiLHUpLHMoYS5vdmVyYXhlc0Fib3ZlLCJnIixsKSxzKGEub3ZlcmF4ZXNBYm92ZSwiZyIsdSksdC54bGluZXM9by5zZWxlY3QoIi5vdmVybGluZXMtIituKS5zZWxlY3QoIi4iK2wpLHQueWxpbmVzPW8uc2VsZWN0KCIub3ZlcmxpbmVzLSIraSkuc2VsZWN0KCIuIit1KSx0LnhheGlzbGF5ZXI9by5zZWxlY3QoIi5vdmVyYXhlcy0iK24pLnNlbGVjdCgiLiIrbCksdC55YXhpc2xheWVyPW8uc2VsZWN0KCIub3ZlcmF4ZXMtIitpKS5zZWxlY3QoIi4iK3UpfWVsc2V7dmFyIGM9cyhlLCJnIiwibGF5ZXItc3VicGxvdCIpO3Quc2hhcGVsYXllcj1zKGMsImciLCJzaGFwZWxheWVyIiksdC5pbWFnZWxheWVyPXMoYywiZyIsImltYWdlbGF5ZXIiKSx0LmdyaWRsYXllcj1zKGUsImciLCJncmlkbGF5ZXIiKSx0Lm92ZXJncmlkPXMoZSwiZyIsIm92ZXJncmlkIiksdC56ZXJvbGluZWxheWVyPXMoZSwiZyIsInplcm9saW5lbGF5ZXIiKSx0Lm92ZXJ6ZXJvPXMoZSwiZyIsIm92ZXJ6ZXJvIikscyhlLCJwYXRoIiwieGxpbmVzLWJlbG93IikscyhlLCJwYXRoIiwieWxpbmVzLWJlbG93IiksdC5vdmVybGluZXNCZWxvdz1zKGUsImciLCJvdmVybGluZXMtYmVsb3ciKSxzKGUsImciLCJ4YXhpc2xheWVyLWJlbG93IikscyhlLCJnIiwieWF4aXNsYXllci1iZWxvdyIpLHQub3ZlcmF4ZXNCZWxvdz1zKGUsImciLCJvdmVyYXhlcy1iZWxvdyIpLHQucGxvdD1zKGUsImciLCJwbG90IiksdC5vdmVycGxvdD1zKGUsImciLCJvdmVycGxvdCIpLHMoZSwicGF0aCIsInhsaW5lcy1hYm92ZSIpLHMoZSwicGF0aCIsInlsaW5lcy1hYm92ZSIpLHQub3ZlcmxpbmVzQWJvdmU9cyhlLCJnIiwib3ZlcmxpbmVzLWFib3ZlIikscyhlLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLHMoZSwiZyIsInlheGlzbGF5ZXItYWJvdmUiKSx0Lm92ZXJheGVzQWJvdmU9cyhlLCJnIiwib3ZlcmF4ZXMtYWJvdmUiKSx0LnhsaW5lcz1lLnNlbGVjdCgiLnhsaW5lcy0iK24pLHQueWxpbmVzPWUuc2VsZWN0KCIueWxpbmVzLSIraSksdC54YXhpc2xheWVyPWUuc2VsZWN0KCIueGF4aXNsYXllci0iK24pLHQueWF4aXNsYXllcj1lLnNlbGVjdCgiLnlheGlzbGF5ZXItIitpKX1mb3IodmFyIGg9MDtoPGYudHJhY2VMYXllckNsYXNzZXMubGVuZ3RoO2grKylzKHQucGxvdCwiZyIsZi50cmFjZUxheWVyQ2xhc3Nlc1toXSk7dC54bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKSx0LnlsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApfWZ1bmN0aW9uIG8odCxlKXtpZih0KXt2YXIgcj17fTt0LmVhY2goZnVuY3Rpb24odCl7dmFyIG49bC5zZWxlY3QodGhpcyksaT0iY2xpcCIrZS5fdWlkK3QrInBsb3QiO24ucmVtb3ZlKCksZS5fZHJhZ2dlcnMuc2VsZWN0QWxsKCJnLiIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoIiMiK2kpLnJlbW92ZSgpLHJbdF09ITB9KTtmb3IodmFyIG49ZS5fcGxvdHMsaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspZm9yKHZhciBvPW5baVthXV0scz1vLm92ZXJsYXlzfHxbXSx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBjPXNbdV07cltjLmlkXSYmYy5wbG90LnNlbGVjdEFsbCgiLnRyYWNlIikucmVtb3ZlKCl9fX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgiLiIrcikuZGF0YShbMF0pO3JldHVybiBuLmVudGVyKCkuYXBwZW5kKGUpLmNsYXNzZWQociwhMCksbn12YXIgbD10KCJkMyIpLHU9dCgiLi4vLi4vbGliIiksYz10KCIuLi9wbG90cyIpLGg9dCgiLi9heGlzX2lkcyIpLGY9dCgiLi9jb25zdGFudHMiKTtyLm5hbWU9ImNhcnRlc2lhbiIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9Zi5pZFJlZ2V4LHIuYXR0clJlZ2V4PWYuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIudHJhbnNpdGlvbkF4ZXM9dCgiLi90cmFuc2l0aW9uX2F4ZXMiKSxyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbz10Ll9mdWxsTGF5b3V0LHM9Yy5nZXRTdWJwbG90SWRzKG8sImNhcnRlc2lhbiIpLGw9dC5jYWxjZGF0YTtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxhPTA7YTxsLmxlbmd0aDthKyspZS5wdXNoKGEpO2ZvcihhPTA7YTxzLmxlbmd0aDthKyspe2Zvcih2YXIgdSxoPXNbYV0sZj1vLl9wbG90c1toXSxkPVtdLHA9MDtwPGwubGVuZ3RoO3ArKyl7dmFyIG09bFtwXSx2PW1bMF0udHJhY2U7di54YXhpcyt2LnlheGlzPT09aCYmKCgtMSE9PWUuaW5kZXhPZih2LmluZGV4KXx8di5jYXJwZXQpJiYodSYmdVswXS50cmFjZS54YXhpcyt1WzBdLnRyYWNlLnlheGlzPT09aCYmLTEhPT1bInRvbmV4dHgiLCJ0b25leHR5IiwidG9uZXh0Il0uaW5kZXhPZih2LmZpbGwpJiYtMT09PWQuaW5kZXhPZih1KSYmZC5wdXNoKHUpLGQucHVzaChtKSksdT1tKX1uKHQsZixkLHIsaSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscyxsPW4uX21vZHVsZXN8fFtdLHU9ZS5fbW9kdWxlc3x8W107Zm9yKHM9MDtzPGwubGVuZ3RoO3MrKylpZigic2NhdHRlciI9PT1sW3NdLm5hbWUpe2k9ITA7YnJlYWt9Zm9yKHM9MDtzPHUubGVuZ3RoO3MrKylpZigic2NhdHRlciI9PT11W3NdLm5hbWUpe2E9ITA7YnJlYWt9aWYoaSYmIWEpe3ZhciBjPW4uX3Bsb3RzLGY9T2JqZWN0LmtleXMoY3x8e30pO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspe3ZhciBkPWNbZltzXV07ZC5wbG90JiZkLnBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfW4uX2luZm9sYXllci5zZWxlY3RBbGwoImcucmFuZ2VzbGlkZXItY29udGFpbmVyIikuc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfXZhciBwPW4uX2hhcyYmbi5faGFzKCJjYXJ0ZXNpYW4iKSxtPWUuX2hhcyYmZS5faGFzKCJjYXJ0ZXNpYW4iKTtpZihwJiYhbSl7dmFyIHY9bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKCIuc3VicGxvdCIpLGc9aC5saXN0SWRzKHtfZnVsbExheW91dDpufSk7Zm9yKHYuY2FsbChvLG4pLG4uX2RlZnMuc2VsZWN0QWxsKCIuYXhlc2NsaXAiKS5yZW1vdmUoKSxzPTA7czxnLmxlbmd0aDtzKyspbi5faW5mb2xheWVyLnNlbGVjdCgiLiIrZ1tzXSsidGl0bGUiKS5yZW1vdmUoKX19LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9aSh0KSxuPWUuX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKS5kYXRhKHIsdS5pZGVudGl0eSk7bi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4ic3VicGxvdCAiK3R9KSxuLm9yZGVyKCksbi5leGl0KCkuY2FsbChvLGUpLG4uZWFjaChmdW5jdGlvbih0KXt2YXIgcj1lLl9wbG90c1t0XTtpZihyLnBsb3Rncm91cD1sLnNlbGVjdCh0aGlzKSxyLm92ZXJsYXlzPVtdLGEociksci5tYWlucGxvdCl7ZS5fcGxvdHNbci5tYWlucGxvdF0ub3ZlcmxheXMucHVzaChyKX1yLmRyYWdsYXllcj1zKGUuX2RyYWdnZXJzLCJnIix0KX0pfSxyLnJhbmdlUGxvdD1mdW5jdGlvbih0LGUscil7YShlKSxuKHQsZSxyKSxjLnN0eWxlKHQpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vcGxvdHMiOjgyNywiLi9hdHRyaWJ1dGVzIjo3NjMsIi4vYXhpc19pZHMiOjc2NywiLi9jb25zdGFudHMiOjc2OSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuL3RyYW5zaXRpb25fYXhlcyI6Nzg1LGQzOjEyMH1dLDc3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lfSx0aXRsZTp7dmFsVHlwZToic3RyaW5nIn0sdGl0bGVmb250Om8oe30sbix7fSksdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdLGRmbHQ6Ii0ifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMH0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHNjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W3MuaWRSZWdleC54LnRvU3RyaW5nKCkscy5pZFJlZ2V4LnkudG9TdHJpbmcoKV19LHNjYWxlcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxjb25zdHJhaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhbmdlIiwiZG9tYWluIl0sZGZsdDoicmFuZ2UifSxjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdfSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxpbmVhciIsImFycmF5Il19LG50aWNrczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowfSx0aWNrMDp7dmFsVHlwZToiYW55In0sZHRpY2s6e3ZhbFR5cGU6ImFueSJ9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0aWNrczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIiJdfSxtaXJyb3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInRpY2tzIiwhMSwiYWxsIiwiYWxsdGlja3MiXSxkZmx0OiExfSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NX0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lfSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozfSxzcGlrZWRhc2g6byh7fSxhLHtkZmx0OiJkYXNoIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIn0sdGlja2ZvbnQ6byh7fSxuLHt9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0saG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sc2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZX0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4ifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lfSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSx6ZXJvbGluZTp7dmFsVHlwZToiYm9vbGVhbiJ9LHplcm9saW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmV9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLHMuaWRSZWdleC54LnRvU3RyaW5nKCkscy5pZFJlZ2V4LnkudG9TdHJpbmcoKV19LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdfSxvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIixzLmlkUmVnZXgueC50b1N0cmluZygpLHMuaWRSZWdleC55LnRvU3RyaW5nKCldfSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWJvdmUgdHJhY2VzIiwiYmVsb3cgdHJhY2VzIl0sZGZsdDoiYWJvdmUgdHJhY2VzIn0sZG9tYWluOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0scG9zaXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowfSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiJ9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MjUsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vZm9udF9hdHRyaWJ1dGVzIjo3ODgsIi4vY29uc3RhbnRzIjo3Njl9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4vY29uc3RhbnRzIiksbD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuL3R5cGVfZGVmYXVsdHMiKSxjPXQoIi4vYXhpc19kZWZhdWx0cyIpLGg9dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIiksZj10KCIuL3Bvc2l0aW9uX2RlZmF1bHRzIiksZD10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBwKHQsZSl7cmV0dXJuIE51bWJlcih0LnN1YnN0cig1KXx8MSktTnVtYmVyKGUuc3Vic3RyKDUpfHwxKX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIGkuY29lcmNlKE4sQixsLHQsZSl9ZnVuY3Rpb24gdih0KXt2YXIgZT17eDpQLHk6RH1bdF07cmV0dXJuIGkuc2ltcGxlTWFwKGUsZC5uYW1lMmlkKX12YXIgZyx5PU9iamVjdC5rZXlzKHQpLGI9W10seD1bXSxfPVtdLHc9W10sTT1bXSxrPVtdLEE9e30sVD17fTtmb3IoZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgUyxFLEw9cltnXTtpZihuLnRyYWNlSXMoTCwiY2FydGVzaWFuIikpUz1iLEU9eDtlbHNle2lmKCFuLnRyYWNlSXMoTCwiZ2wyZCIpKWNvbnRpbnVlO1M9XyxFPXd9dmFyIEM9ZC5pZDJuYW1lKEwueGF4aXMpLHo9ZC5pZDJuYW1lKEwueWF4aXMpO2lmKG4udHJhY2VJcyhMLCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09TC50eXBlfHxMLl9jaGVhdGVyKXx8QyYmaS5wdXNoVW5pcXVlKGssQyksImNhcnBldCI9PT1MLnR5cGUmJkwuX2NoZWF0ZXImJkMmJmkucHVzaFVuaXF1ZShNLEMpLEMmJi0xPT09Uy5pbmRleE9mKEMpJiZTLnB1c2goQykseiYmLTE9PT1FLmluZGV4T2YoeikmJkUucHVzaCh6KSxuLnRyYWNlSXMoTCwiMmRNYXAiKSYmKEFbQ109ITAsQVt6XT0hMCksbi50cmFjZUlzKEwsIm9yaWVudGVkIikpe1RbImgiPT09TC5vcmllbnRhdGlvbj96OkNdPSEwfX1pZighZS5faGFzKCJnbDNkIikmJiFlLl9oYXMoImdlbyIpKWZvcihnPTA7Zzx5Lmxlbmd0aDtnKyspe3ZhciBJPXlbZ107LTE9PT1fLmluZGV4T2YoSSkmJi0xPT09Yi5pbmRleE9mKEkpJiZzLnhBeGlzTWF0Y2gudGVzdChJKT9iLnB1c2goSSk6LTE9PT13LmluZGV4T2YoSSkmJi0xPT09eC5pbmRleE9mKEkpJiZzLnlBeGlzTWF0Y2gudGVzdChJKSYmeC5wdXNoKEkpfWIubGVuZ3RoJiZ4Lmxlbmd0aCYmaS5wdXNoVW5pcXVlKGUuX2Jhc2VQbG90TW9kdWxlcyxuLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuKTt2YXIgRD1iLmNvbmNhdChfKS5zb3J0KHApLFA9eC5jb25jYXQodykuc29ydChwKSxPPUQuY29uY2F0KFApLFI9YS5iYWNrZ3JvdW5kO0QubGVuZ3RoJiZQLmxlbmd0aCYmKFI9aS5jb2VyY2UodCxlLG8sInBsb3RfYmdjb2xvciIpKTt2YXIgRixqLE4sQixVPWEuY29tYmluZShSLGUucGFwZXJfYmdjb2xvciksVj17eDp2KCJ4IikseTp2KCJ5Iil9O2ZvcihnPTA7ZzxPLmxlbmd0aDtnKyspe0Y9T1tnXSxpLmlzUGxhaW5PYmplY3QodFtGXSl8fCh0W0ZdPXt9KSxOPXRbRl0sQj1lW0ZdPXt9LHUoTixCLG0scixGKSxqPUYuY2hhckF0KDApO3ZhciBIPWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXt4OkQseTpQfVtlXSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTtvPT09cnx8KHRbb118fHt9KS5vdmVybGF5aW5nfHxpLnB1c2goZC5uYW1lMmlkKG8pKX1yZXR1cm4gaX0oaixGKSxxPXtsZXR0ZXI6aixmb250OmUuZm9udCxvdXRlclRpY2tzOkFbRl0sc2hvd0dyaWQ6IVRbRl0sZGF0YTpyLGJnQ29sb3I6VSxjYWxlbmRhcjplLmNhbGVuZGFyLGNoZWF0ZXJvbmx5OiJ4Ij09PWomJi0xIT09TS5pbmRleE9mKEYpJiYtMT09PWsuaW5kZXhPZihGKX07YyhOLEIsbSxxLGUpO20oInNob3dzcGlrZXMiKSYmKG0oInNwaWtlY29sb3IiKSxtKCJzcGlrZXRoaWNrbmVzcyIpLG0oInNwaWtlZGFzaCIpLG0oInNwaWtlbW9kZSIpKTt2YXIgRz17bGV0dGVyOmosY291bnRlckF4ZXM6VltqXSxvdmVybGF5YWJsZUF4ZXM6SH07ZihOLEIsbSxHKSxCLl9pbnB1dD1OfXZhciBZPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImhhbmRsZURlZmF1bHRzIiksWD1uLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImhhbmRsZURlZmF1bHRzIik7Zm9yKGc9MDtnPEQubGVuZ3RoO2crKylGPURbZ10sTj10W0ZdLEI9ZVtGXSxZKHQsZSxGKSwiZGF0ZSI9PT1CLnR5cGUmJlgoTixCLGUsUCxCLmNhbGVuZGFyKSxtKCJmaXhlZHJhbmdlIik7Zm9yKGc9MDtnPFAubGVuZ3RoO2crKyl7Rj1QW2ddLE49dFtGXSxCPWVbRl07dmFyIFc9ZVtkLmlkMm5hbWUoQi5hbmNob3IpXTttKCJmaXhlZHJhbmdlIixXJiZXLnJhbmdlc2xpZGVyJiZXLnJhbmdlc2xpZGVyLnZpc2libGUpfWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdO3ZhciBaPVYueC5jb25jYXQoVi55KTtmb3IoZz0wO2c8Ty5sZW5ndGg7ZysrKUY9T1tnXSxqPUYuY2hhckF0KDApLE49dFtGXSxCPWVbRl0saChOLEIsbSxaLGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6ODE4LCIuL2F4aXNfZGVmYXVsdHMiOjc2NiwiLi9heGlzX2lkcyI6NzY3LCIuL2NvbnN0YW50cyI6NzY5LCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjc3MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuL3Bvc2l0aW9uX2RlZmF1bHRzIjo3NzgsIi4vdHlwZV9kZWZhdWx0cyI6Nzg2fV0sNzc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGEsbyxzLGwsdT1bXSxjPXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSksaD1pLmJpc2VjdG9yKGUpLmxlZnQ7Zm9yKG49MDtuPGMubGVuZ3RoO24rKylmb3Iobz1jW25dLGE9MDthPG8ubGVuZ3RoO2ErKyludWxsIT09KHM9b1thXSkmJnZvaWQgMCE9PXMmJigobD1oKHUscykpPHUubGVuZ3RoJiZ1W2xdPT09c3x8dS5zcGxpY2UobCwwLHMpKTtyZXR1cm4gdX12YXIgaT10KCJkMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtzd2l0Y2goZSl7Y2FzZSJhcnJheSI6cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ci5zbGljZSgpOltdO2Nhc2UiY2F0ZWdvcnkgYXNjZW5kaW5nIjpyZXR1cm4gbih0LGkuYXNjZW5kaW5nLGEpO2Nhc2UiY2F0ZWdvcnkgZGVzY2VuZGluZyI6cmV0dXJuIG4odCxpLmRlc2NlbmRpbmcsYSk7Y2FzZSJ0cmFjZSI6ZGVmYXVsdDpyZXR1cm5bXX19fSx7ZDM6MTIwfV0sNzc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89YS5jb3VudGVyQXhlc3x8W10scz1hLm92ZXJsYXlhYmxlQXhlc3x8W10sbD1hLmxldHRlcjsiZnJlZSI9PT1pLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSJdLmNvbmNhdChvKSxkZmx0Om4odC5wb3NpdGlvbik/ImZyZWUiOm9bMF18fCJmcmVlIn19LCJhbmNob3IiKSYmcigicG9zaXRpb24iKSxpLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczoieCI9PT1sP1siYm90dG9tIiwidG9wIl06WyJsZWZ0IiwicmlnaHQiXSxkZmx0OiJ4Ij09PWw/ImJvdHRvbSI6ImxlZnQifX0sInNpZGUiKTt2YXIgdT0hMTtpZihzLmxlbmd0aCYmKHU9aS5jb2VyY2UodCxlLHtvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExXS5jb25jYXQocyksZGZsdDohMX19LCJvdmVybGF5aW5nIikpLCF1KXt2YXIgYz1yKCJkb21haW4iKTtjWzBdPmNbMV0tLjAxJiYoZS5kb21haW49WzAsMV0pLGkubm9uZU9yQWxsKHQuZG9tYWluLGUuZG9tYWluLFswLDFdKX1yZXR1cm4gcigibGF5ZXIiKSxlfX0seyIuLi8uLi9saWIiOjcyNCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDc3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPW5bdC5jb25zdHJhaW50b3dhcmR8fCJjZW50ZXIiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTh9XSw3ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24gaSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPWUuY2RbMF0udHJhY2Usbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuY3VydmVOdW1iZXI9ci5pbmRleCxpLmRhdGE9ci5faW5wdXQsaS5mdWxsRGF0YT1yLHMoaSxyLGkucG9pbnROdW1iZXIpfXJldHVybiB0fXZhciBhPXQoIi4uLy4uL2xpYi9wb2x5Z29uIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUsbD10KCIuL2F4ZXMiKSx1PXQoIi4vY29uc3RhbnRzIiksYz1hLmZpbHRlcixoPWEudGVzdGVyLGY9dS5NSU5TRUxFQ1Q7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyl7ZnVuY3Rpb24gZCh0KXt2YXIgZT0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/MTowO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5wMmQocltlXSl9fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC1lfXZhciBtLHY9YS5nZC5fZnVsbExheW91dC5fem9vbWxheWVyLGc9YS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHk9YS5wbG90aW5mbyxiPXkueGF4aXMuX29mZnNldCx4PXkueWF4aXMuX29mZnNldCxfPWUtZy5sZWZ0LHc9ci1nLnRvcCxNPV8saz13LEE9Ik0iK18rIiwiK3csVD1hLnhheGVzWzBdLl9sZW5ndGgsUz1hLnlheGVzWzBdLl9sZW5ndGgsRT1hLnhheGVzLm1hcChuKSxMPWEueWF4ZXMubWFwKG4pLEM9YS54YXhlcy5jb25jYXQoYS55YXhlcyk7Imxhc3NvIj09PXMmJihtPWMoW1tfLHddXSx1LkJFTkRQWCkpO3ZhciB6PXYuc2VsZWN0QWxsKCJwYXRoLnNlbGVjdC1vdXRsaW5lIikuZGF0YShbMSwyXSk7ei5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4ic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtIit0fSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYisiLCAiK3grIikiKS5hdHRyKCJkIixBKyJaIik7dmFyIEksRCxQLE8sUixGPXYuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpvLmJhY2tncm91bmQsc3Ryb2tlOm8uZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MX0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2IrIiwgIit4KyIpIikuYXR0cigiZCIsIk0wLDBaIiksaj1bXSxOPWEuZ2QsQj1bXTtmb3IoST0wO0k8Ti5jYWxjZGF0YS5sZW5ndGg7SSsrKWlmKEQ9Ti5jYWxjZGF0YVtJXSxQPURbMF0udHJhY2UsUC5fbW9kdWxlJiZQLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKGEuc3VicGxvdCl7CmlmKFAuc3VicGxvdCE9PWEuc3VicGxvdCljb250aW51ZTtqLnB1c2goe3NlbGVjdFBvaW50czpQLl9tb2R1bGUuc2VsZWN0UG9pbnRzLGNkOkQseGF4aXM6YS54YXhlc1swXSx5YXhpczphLnlheGVzWzBdfSl9ZWxzZXtpZigtMT09PUUuaW5kZXhPZihQLnhheGlzKSljb250aW51ZTtpZigtMT09PUwuaW5kZXhPZihQLnlheGlzKSljb250aW51ZTtqLnB1c2goe3NlbGVjdFBvaW50czpQLl9tb2R1bGUuc2VsZWN0UG9pbnRzLGNkOkQseGF4aXM6bC5nZXRGcm9tSWQoTixQLnhheGlzKSx5YXhpczpsLmdldEZyb21JZChOLFAueWF4aXMpfSl9dmFyIFU7VT15LmZpbGxSYW5nZUl0ZW1zP3kuZmlsbFJhbmdlSXRlbXM6InNlbGVjdCI9PT1zP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IoST0wO0k8Qy5sZW5ndGg7SSsrKXt2YXIgbj1DW0ldLGk9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtuLnAyZChlW2krIm1pbiJdKSxuLnAyZChlW2krIm1heCJdKV0uc29ydChwKX19OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lmxhc3NvUG9pbnRzPXt9O2ZvcihJPTA7STxDLmxlbmd0aDtJKyspe3ZhciBpPUNbSV07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoZChpKSl9fSxhLm1vdmVGbj1mdW5jdGlvbih0LGUpe3ZhciByO009TWF0aC5tYXgoMCxNYXRoLm1pbihULHQrXykpLGs9TWF0aC5tYXgoMCxNYXRoLm1pbihTLGUrdykpO3ZhciBuPU1hdGguYWJzKE0tXyksbz1NYXRoLmFicyhrLXcpO2Zvcigic2VsZWN0Ij09PXM/KG88TWF0aC5taW4oLjYqbixmKT8ocj1oKFtbXywwXSxbXyxTXSxbTSxTXSxbTSwwXV0pLEYuYXR0cigiZCIsIk0iK3IueG1pbisiLCIrKHctZikrImgtNHYiKzIqZisiaDRaTSIrKHIueG1heC0xKSsiLCIrKHctZikrImg0diIrMipmKyJoLTRaIikpOm48TWF0aC5taW4oLjYqbyxmKT8ocj1oKFtbMCx3XSxbMCxrXSxbVCxrXSxbVCx3XV0pLEYuYXR0cigiZCIsIk0iKyhfLWYpKyIsIityLnltaW4rInYtNGgiKzIqZisidjRaTSIrKF8tZikrIiwiKyhyLnltYXgtMSkrInY0aCIrMipmKyJ2LTRaIikpOihyPWgoW1tfLHddLFtfLGtdLFtNLGtdLFtNLHddXSksRi5hdHRyKCJkIiwiTTAsMFoiKSksei5hdHRyKCJkIiwiTSIrci54bWluKyIsIityLnltaW4rIkgiKyhyLnhtYXgtMSkrIlYiKyhyLnltYXgtMSkrIkgiK3IueG1pbisiWiIpKToibGFzc28iPT09cyYmKG0uYWRkUHQoW00sa10pLHI9aChtLmZpbHRlcmVkKSx6LmF0dHIoImQiLCJNIittLmZpbHRlcmVkLmpvaW4oIkwiKSsiWiIpKSxCPVtdLEk9MDtJPGoubGVuZ3RoO0krKylPPWpbSV0sW10ucHVzaC5hcHBseShCLGkoTy5zZWxlY3RQb2ludHMoTyxyKSxPKSk7Uj17cG9pbnRzOkJ9LFUoUixyLG0pLGEuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGluZyIsUil9LGEuZG9uZUZuPWZ1bmN0aW9uKHQsZSl7aWYoRi5yZW1vdmUoKSx0fHwyIT09ZSlhLmdkLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsUik7ZWxzZXtmb3Ioei5yZW1vdmUoKSxJPTA7STxqLmxlbmd0aDtJKyspTz1qW0ldLE8uc2VsZWN0UG9pbnRzKE8sITEpO04uZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NjQwLCIuLi8uLi9saWIvcG9seWdvbiI6NzM0LCIuL2F4ZXMiOjc2NCwiLi9jb25zdGFudHMiOjc2OX1dLDc4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdygxMCx0KX12YXIgaT10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5jbGVhbk51bWJlcixsPW8ubXMyRGF0ZVRpbWUsdT1vLmRhdGVUaW1lMm1zLGM9by5lbnN1cmVOdW1iZXIsaD10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksZj1oLkZQX1NBRkUsZD1oLkJBRE5VTSxwPXQoIi4vY29uc3RhbnRzIiksbT10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0zKk0qTWF0aC5hYnMobi1pKSl9cmV0dXJuIGR9ZnVuY3Rpb24gaChlLHIsbil7dmFyIGk9dShlLG58fHQuY2FsZW5kYXIpO2lmKGk9PT1kKXtpZighYShlKSlyZXR1cm4gZDtpPXUobmV3IERhdGUoK2UpKX1yZXR1cm4gaX1mdW5jdGlvbiB2KGUscixuKXtyZXR1cm4gbChlLHIsbnx8dC5jYWxlbmRhcil9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gdC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUpXX1mdW5jdGlvbiB5KGUpe2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1lKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goZSk7dmFyIHI9dC5fY2F0ZWdvcmllcy5sZW5ndGgtMTtyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXT1yLHJ9cmV0dXJuIGR9ZnVuY3Rpb24gYihlKXtpZih0Ll9jYXRlZ29yaWVzTWFwKXt2YXIgcj10Ll9jYXRlZ29yaWVzTWFwW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHJ9aWYoYShlKSlyZXR1cm4rZX1mdW5jdGlvbiB4KGUpe3JldHVybiBhKGUpP2kucm91bmQodC5fYit0Ll9tKmUsMik6ZH1mdW5jdGlvbiBfKGUpe3JldHVybihlLXQuX2IpL3QuX219ZT1lfHx7fTt2YXIgdz0odC5faWR8fCJ4IikuY2hhckF0KDApLE09MTA7dC5jMmw9ImxvZyI9PT10LnR5cGU/cjpjLHQubDJjPSJsb2ciPT09dC50eXBlP246Yyx0LmwycD14LHQucDJsPV8sdC5jMnA9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4geChyKHQsZSkpfTp4LHQucDJjPSJsb2ciPT09dC50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiBuKF8odCkpfTpfLC0xIT09WyJsaW5lYXIiLCItIl0uaW5kZXhPZih0LnR5cGUpPyh0LmQycj10LnIyZD10LmQyYz10LnIyYz10LmQybD10LnIybD1zLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPWMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHMoZSkpfSx0LnAyZD10LnAycj1fLHQuY2xlYW5Qb3M9Yyk6ImxvZyI9PT10LnR5cGU/KHQuZDJyPXQuZDJsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIocyh0KSxlKX0sdC5yMmQ9dC5yMmM9ZnVuY3Rpb24odCl7cmV0dXJuIG4ocyh0KSl9LHQuZDJjPXQucjJsPXMsdC5jMmQ9dC5sMnI9Yyx0LmMycj1yLHQubDJkPW4sdC5kMnA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5sMnAodC5kMnIoZSxyKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBuKF8odCkpfSx0LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAocyhlKSl9LHQucDJyPV8sdC5jbGVhblBvcz1jKToiZGF0ZSI9PT10LnR5cGU/KHQuZDJyPXQucjJkPW8uaWRlbnRpdHksdC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9aCx0LmMyZD10LmMycj10LmwyZD10Lmwycj12LHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5sMnAoaChlLDAsbikpfSx0LnAyZD10LnAycj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHYoXyh0KSxlLHIpfSx0LmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBvLmNsZWFuRGF0ZShlLGQsdC5jYWxlbmRhcil9KToiY2F0ZWdvcnkiPT09dC50eXBlJiYodC5kMmM9dC5kMmw9eSx0LnIyZD10LmMyZD10LmwyZD1nLHQuZDJyPXQuZDJsX25vYWRkPWIsdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9YihlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQubDJyPXQuYzJyPWMsdC5yMmw9Yix0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gZyhfKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Xyx0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10P3Q6Yyh0KX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlKXtlfHwoZT0icmFuZ2UiKTt2YXIgcixuLGk9by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpO2lmKG49ImRhdGUiPT09dC50eXBlP28uZGZsdFJhbmdlKHQuY2FsZW5kYXIpOiJ5Ij09PXc/cC5ERkxUUkFOR0VZOnAuREZMVFJBTkdFWCxuPW4uc2xpY2UoKSwhaXx8MiE9PWkubGVuZ3RoKXJldHVybiB2b2lkIG8ubmVzdGVkUHJvcGVydHkodCxlKS5zZXQobik7Zm9yKCJkYXRlIj09PXQudHlwZSYmKGlbMF09by5jbGVhbkRhdGUoaVswXSxkLHQuY2FsZW5kYXIpLGlbMV09by5jbGVhbkRhdGUoaVsxXSxkLHQuY2FsZW5kYXIpKSxyPTA7cjwyO3IrKylpZigiZGF0ZSI9PT10LnR5cGUpe2lmKCFvLmlzRGF0ZVRpbWUoaVtyXSx0LmNhbGVuZGFyKSl7dFtlXT1uO2JyZWFrfWlmKHQucjJsKGlbMF0pPT09dC5yMmwoaVsxXSkpe3ZhciBzPW8uY29uc3RyYWluKHQucjJsKGlbMF0pLG8uTUlOX01TKzFlMyxvLk1BWF9NUy0xZTMpO2lbMF09dC5sMnIocy0xZTMpLGlbMV09dC5sMnIocysxZTMpO2JyZWFrfX1lbHNle2lmKCFhKGlbcl0pKXtpZighYShpWzEtcl0pKXt0W2VdPW47YnJlYWt9aVtyXT1pWzEtcl0qKHI/MTA6LjEpfWlmKGlbcl08LWY/aVtyXT0tZjppW3JdPmYmJihpW3JdPWYpLGlbMF09PT1pWzFdKXt2YXIgbD1NYXRoLm1heCgxLE1hdGguYWJzKDFlLTYqaVswXSkpO2lbMF0tPWwsaVsxXSs9bH19fSx0LnNldFNjYWxlPWZ1bmN0aW9uKHIpe3ZhciBuPWUuX3NpemU7aWYodC5fY2F0ZWdvcmllc3x8KHQuX2NhdGVnb3JpZXM9W10pLHQuX2NhdGVnb3JpZXNNYXB8fCh0Ll9jYXRlZ29yaWVzTWFwPXt9KSx0Lm92ZXJsYXlpbmcpe3ZhciBpPW0uZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSx0Lm92ZXJsYXlpbmcpO3QuZG9tYWluPWkuZG9tYWlufXZhciBhPXImJnQuX3I/Il9yIjoicmFuZ2UiLHM9dC5jYWxlbmRhcjt0LmNsZWFuUmFuZ2UoYSk7dmFyIGw9dC5yMmwodFthXVswXSxzKSx1PXQucjJsKHRbYV1bMV0scyk7aWYoInkiPT09dz8odC5fb2Zmc2V0PW4udCsoMS10LmRvbWFpblsxXSkqbi5oLHQuX2xlbmd0aD1uLmgqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8obC11KSx0Ll9iPS10Ll9tKnUpOih0Ll9vZmZzZXQ9bi5sK3QuZG9tYWluWzBdKm4udyx0Ll9sZW5ndGg9bi53Kih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKHUtbCksdC5fYj0tdC5fbSpsKSwhaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKSl0aHJvdyBvLm5vdGlmaWVyKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGF4aXMgc2NhbGluZyIsImxvbmciKSxlLl9yZXBsb3R0aW5nPSExLG5ldyBFcnJvcigiYXhpcyBzY2FsaW5nIil9LHQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUscil7dmFyIG4saSxhLG89ImRhdGUiPT09dC50eXBlJiZlW3IrImNhbGVuZGFyIl07aWYociBpbiBlKWZvcihuPWVbcl0saT1uZXcgQXJyYXkobi5sZW5ndGgpLGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPXQuZDJjKG5bYV0sMCxvKTtlbHNle3ZhciBzPXIrIjAiaW4gZT90LmQyYyhlW3IrIjAiXSwwLG8pOjAsbD1lWyJkIityXT9OdW1iZXIoZVsiZCIrcl0pOjE7Zm9yKG49ZVt7eDoieSIseToieCJ9W3JdXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7YSsrKWlbYV09cythKmx9cmV0dXJuIGl9LHQuaXNWYWxpZFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgmJmEodC5yMmwoZVswXSkpJiZhKHQucjJsKGVbMV0pKX0sdC5pc1B0V2l0aGluUmFuZ2U9IngiPT09dz9mdW5jdGlvbihlKXt2YXIgcj1lLng7cmV0dXJuIHI+PXQucmFuZ2VbMF0mJnI8PXQucmFuZ2VbMV19OmZ1bmN0aW9uKGUpe3ZhciByPWUueTtyZXR1cm4gcj49dC5yYW5nZVswXSYmcjw9dC5yYW5nZVsxXX0sdC5fbWluPVtdLHQuX21heD1bXSx0Ll9zZXBhcmF0b3JzPWUuc2VwYXJhdG9ycyxkZWxldGUgdC5fbWluRHRpY2ssZGVsZXRlIHQuX2ZvcmNlVGljazB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vLi4vbGliIjo3MjQsIi4vYXhpc19pZHMiOjc2NywiLi9jb25zdGFudHMiOjc2OSxkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjl9XSw3ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1bInNob3dleHBvbmVudCIsInNob3d0aWNrcHJlZml4Iiwic2hvd3RpY2tzdWZmaXgiXSxyPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSksbj1mdW5jdGlvbihlKXtyZXR1cm4gdFtlXT09PXRbclswXV19O2lmKHIuZXZlcnkobil8fDE9PT1yLmxlbmd0aClyZXR1cm4gdFtyWzBdXX12YXIgaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1uKHQpO2lmKHIoInRpY2twcmVmaXgiKSYmcigic2hvd3RpY2twcmVmaXgiLHMpLHIoInRpY2tzdWZmaXgiKSYmcigic2hvd3RpY2tzdWZmaXgiLHMpLHIoInNob3d0aWNrbGFiZWxzIikpe3ZhciBsPW8uZm9udHx8e30sdT1lLmNvbG9yPT09dC5jb2xvcj9lLmNvbG9yOmwuY29sb3I7aS5jb2VyY2VGb250KHIsInRpY2tmb250Iix7ZmFtaWx5OmwuZmFtaWx5LHNpemU6bC5zaXplLGNvbG9yOnV9KSxyKCJ0aWNrYW5nbGUiKSwiY2F0ZWdvcnkiIT09YSYmKHIoInRpY2tmb3JtYXQiKXx8ImRhdGUiPT09YXx8KHIoInNob3dleHBvbmVudCIscykscigiZXhwb25lbnRmb3JtYXQiKSxyKCJzZXBhcmF0ZXRob3VzYW5kcyIpKSl9ImNhdGVnb3J5Ij09PWF8fG8ubm9Ib3Zlcnx8cigiaG92ZXJmb3JtYXQiKX19LHsiLi4vLi4vbGliIjo3MjR9XSw3ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4uY29lcmNlMih0LGUsaSwidGlja2xlbiIpLHM9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrd2lkdGgiKSxsPW4uY29lcmNlMih0LGUsaSwidGlja2NvbG9yIixlLmNvbG9yKTtyKCJ0aWNrcyIsYS5vdXRlclRpY2tzfHxvfHxzfHxsPyJvdXRzaWRlIjoiIil8fChkZWxldGUgZS50aWNrbGVuLGRlbGV0ZSBlLnRpY2t3aWR0aCxkZWxldGUgZS50aWNrY29sb3IpfX0seyIuLi8uLi9saWIiOjcyNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1fV0sNzg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPSJhdXRvIjsiYXJyYXkiIT09dC50aWNrbW9kZXx8ImxvZyIhPT1vJiYiZGF0ZSIhPT1vfHwodC50aWNrbW9kZT0iYXV0byIpLEFycmF5LmlzQXJyYXkodC50aWNrdmFscyk/cz0iYXJyYXkiOnQuZHRpY2smJihzPSJsaW5lYXIiKTt2YXIgbD1yKCJ0aWNrbW9kZSIscyk7aWYoImF1dG8iPT09bClyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09bCl7dmFyIHU9ImRhdGUiPT09bz9hOjEsYz1yKCJkdGljayIsdSk7aWYobihjKSllLmR0aWNrPWM+MD9OdW1iZXIoYyk6dTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgYyllLmR0aWNrPXU7ZWxzZXt2YXIgaD1jLmNoYXJBdCgwKSxmPWMuc3Vic3RyKDEpO2Y9bihmKT9OdW1iZXIoZik6MCwoZjw9MHx8ISgiZGF0ZSI9PT1vJiYiTSI9PT1oJiZmPT09TWF0aC5yb3VuZChmKXx8ImxvZyI9PT1vJiYiTCI9PT1ofHwibG9nIj09PW8mJiJEIj09PWgmJigxPT09Znx8Mj09PWYpKSkmJihlLmR0aWNrPXUpfXZhciBkPSJkYXRlIj09PW8/aS5kYXRlVGljazAoZS5jYWxlbmRhcik6MCxwPXIoInRpY2swIixkKTsiZGF0ZSI9PT1vP2UudGljazA9aS5jbGVhbkRhdGUocCxkKTpuKHApJiYiRDEiIT09YyYmIkQyIiE9PWM/ZS50aWNrMD1OdW1iZXIocCk6ZS50aWNrMD1kfWVsc2V7dmFyIG09cigidGlja3ZhbHMiKTt2b2lkIDA9PT1tP2UudGlja21vZGU9ImF1dG8iOnIoInRpY2t0ZXh0Iil9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90bHkiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vYXhlcyIpLGw9LygoeHx5KShbMi05XXxbMS05XVswLTldKyk/KWF4aXMkLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gYyhlLHIpe2Z1bmN0aW9uIG4oZSxyLG4pe2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07aWYoLTE9PT1vLmluZGV4T2YoYS54cmVmKSYmLTE9PT1vLmluZGV4T2YoYS55cmVmKXx8cih0LGkpLG4pcmV0dXJufX12YXIgaSxvPVtdO2ZvcihvPVtlLl9pZCxyLl9pZF0saT0wO2k8by5sZW5ndGg7aSsrKXMuZG9UaWNrcyh0LG9baV0sITApO24odi5hbm5vdGF0aW9uc3x8W10sYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKSxuKHYuc2hhcGVzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhd09uZSIpKSxuKHYuaW1hZ2VzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX1mdW5jdGlvbiBoKHQpe3ZhciBlPXQueGF4aXMscj10LnlheGlzO3YuX2RlZnMuc2VsZWN0KCIjIit0LmNsaXBJZCsiPiByZWN0IikuY2FsbChvLnNldFRyYW5zbGF0ZSwwLDApLmNhbGwoby5zZXRTY2FsZSwxLDEpLHQucGxvdC5jYWxsKG8uc2V0VHJhbnNsYXRlLGUuX29mZnNldCxyLl9vZmZzZXQpLmNhbGwoby5zZXRTY2FsZSwxLDEpO3ZhciBuPXQucGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi5wb2ludHMiKTtuLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChvLnNldFBvaW50R3JvdXBTY2FsZSwxLDEpLmNhbGwoby5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpLG4uc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChvLnNldFRleHRQb2ludHNTY2FsZSwxLDEpLmNhbGwoby5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpfWZ1bmN0aW9uIGYoZSxyKXt2YXIgbixpLGEscz15W2UueGF4aXMuX2lkXSxsPXlbZS55YXhpcy5faWRdLHU9W107aWYocyl7bj10Ll9mdWxsTGF5b3V0W3MuYXhpc05hbWVdLGk9bi5fcixhPXMudG8sdVswXT0oaVswXSooMS1yKStyKmFbMF0taVswXSkvKGlbMV0taVswXSkqZS54YXhpcy5fbGVuZ3RoO3ZhciBoPWlbMV0taVswXSxmPWFbMV0tYVswXTtuLnJhbmdlWzBdPWlbMF0qKDEtcikrciphWzBdLG4ucmFuZ2VbMV09aVsxXSooMS1yKStyKmFbMV0sdVsyXT1lLnhheGlzLl9sZW5ndGgqKDEtcityKmYvaCl9ZWxzZSB1WzBdPTAsdVsyXT1lLnhheGlzLl9sZW5ndGg7aWYobCl7bj10Ll9mdWxsTGF5b3V0W2wuYXhpc05hbWVdLGk9bi5fcixhPWwudG8sdVsxXT0oaVsxXSooMS1yKStyKmFbMV0taVsxXSkvKGlbMF0taVsxXSkqZS55YXhpcy5fbGVuZ3RoO3ZhciBkPWlbMV0taVswXSxwPWFbMV0tYVswXTtuLnJhbmdlWzBdPWlbMF0qKDEtcikrciphWzBdLG4ucmFuZ2VbMV09aVsxXSooMS1yKStyKmFbMV0sdVszXT1lLnlheGlzLl9sZW5ndGgqKDEtcityKnAvZCl9ZWxzZSB1WzFdPTAsdVszXT1lLnlheGlzLl9sZW5ndGg7YyhlLnhheGlzLGUueWF4aXMpO3ZhciBtPWUueGF4aXMsZz1lLnlheGlzLGI9ISFzLHg9ISFsLF89Yj9tLl9sZW5ndGgvdVsyXToxLHc9eD9nLl9sZW5ndGgvdVszXToxLE09Yj91WzBdOjAsaz14P3VbMV06MCxBPWI/dVswXS91WzJdKm0uX2xlbmd0aDowLFQ9eD91WzFdL3VbM10qZy5fbGVuZ3RoOjAsUz1tLl9vZmZzZXQtQSxFPWcuX29mZnNldC1UO3YuX2RlZnMuc2VsZWN0KCIjIitlLmNsaXBJZCsiPiByZWN0IikuY2FsbChvLnNldFRyYW5zbGF0ZSxNLGspLmNhbGwoby5zZXRTY2FsZSwxL18sMS93KSxlLnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxTLEUpLmNhbGwoby5zZXRTY2FsZSxfLHcpLnNlbGVjdEFsbCgiLnBvaW50cyIpLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChvLnNldFBvaW50R3JvdXBTY2FsZSwxL18sMS93KSxlLnBsb3Quc2VsZWN0QWxsKCIucG9pbnRzIikuc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChvLnNldFRleHRQb2ludHNTY2FsZSwxL18sMS93KX1mdW5jdGlvbiBkKCl7Zm9yKHZhciBlPXt9LHI9MDtyPGIubGVuZ3RoO3IrKyl7dmFyIG49dC5fZnVsbExheW91dFt5W2Jbcl1dLmF4aXNOYW1lXSxhPXlbYltyXV0udG87ZVtuLl9uYW1lKyIucmFuZ2VbMF0iXT1hWzBdLGVbbi5fbmFtZSsiLnJhbmdlWzFdIl09YVsxXSxuLnJhbmdlPWEuc2xpY2UoKX1yZXR1cm4gXyYmXygpLGkucmVsYXlvdXQodCxlKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx4Lmxlbmd0aDt0KyspaCh4W3RdKX0pfWZ1bmN0aW9uIHAoKXtmb3IodmFyIGU9e30scj0wO3I8Yi5sZW5ndGg7cisrKXt2YXIgbj10Ll9mdWxsTGF5b3V0W2Jbcl0rImF4aXMiXTtlW24uX25hbWUrIi5yYW5nZVswXSJdPW4ucmFuZ2VbMF0sZVtuLl9uYW1lKyIucmFuZ2VbMV0iXT1uLnJhbmdlWzFdLG4ucmFuZ2U9bi5fci5zbGljZSgpfXJldHVybiBpLnJlbGF5b3V0KHQsZSkudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8eC5sZW5ndGg7dCsrKWgoeFt0XSl9KX1mdW5jdGlvbiBtKCl7TT1EYXRlLm5vdygpO2Zvcih2YXIgdD1NYXRoLm1pbigxLChNLXcpL3IuZHVyYXRpb24pLGU9QSh0KSxuPTA7bjx4Lmxlbmd0aDtuKyspZih4W25dLGUpO00tdz5yLmR1cmF0aW9uPyhkKCksaz13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobSkpOms9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShtKX12YXIgdj10Ll9mdWxsTGF5b3V0LGc9W10seT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89e307Zm9yKGUgaW4gdClpZihyPWUuc3BsaXQoIi4iKSxuPXJbMF0ubWF0Y2gobCkpe3ZhciBzPW5bMV0sdT1zKyJheGlzIjtpZihpPXZbdV0sYT17fSxBcnJheS5pc0FycmF5KHRbZV0pP2EudG89dFtlXS5zbGljZSgwKTpBcnJheS5pc0FycmF5KHRbZV0ucmFuZ2UpJiYoYS50bz10W2VdLnJhbmdlLnNsaWNlKDApKSwhYS50byljb250aW51ZTthLmF4aXNOYW1lPXUsYS5sZW5ndGg9aS5fbGVuZ3RoLGcucHVzaChzKSxvW3NdPWF9cmV0dXJuIG99KGUpLGI9T2JqZWN0LmtleXMoeSkseD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC5fcGxvdHMscz1bXTtmb3IobiBpbiBvKXt2YXIgbD1vW25dO2lmKC0xPT09cy5pbmRleE9mKGwpKXt2YXIgdT1sLnhheGlzLl9pZCxjPWwueWF4aXMuX2lkLGg9bC54YXhpcy5yYW5nZSxmPWwueWF4aXMucmFuZ2U7bC54YXhpcy5fcj1sLnhheGlzLnJhbmdlLnNsaWNlKCksbC55YXhpcy5fcj1sLnlheGlzLnJhbmdlLnNsaWNlKCksaT1yW3VdP3JbdV0udG86aCxhPXJbY10/cltjXS50bzpmLGhbMF09PT1pWzBdJiZoWzFdPT09aVsxXSYmZlswXT09PWFbMF0mJmZbMV09PT1hWzFdfHwtMT09PWUuaW5kZXhPZih1KSYmLTE9PT1lLmluZGV4T2YoYyl8fHMucHVzaChsKX19cmV0dXJuIHN9KHYsYix5KTtpZigheC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYocih0LGkpLG4pcmV0dXJufWUodi5hbm5vdGF0aW9uc3x8W10sYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKSxlKHYuc2hhcGVzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhd09uZSIpKSxlKHYuaW1hZ2VzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX0oKSwhMTt2YXIgXzt1JiYoXz11KCkpO3ZhciB3LE0sayxBPW4uZWFzZShyLmVhc2luZyk7cmV0dXJuIHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoayksaz1udWxsLHAoKX0pLHc9RGF0ZS5ub3coKSxrPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobSksUHJvbWlzZS5yZXNvbHZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi9heGVzIjo3NjQsZDM6MTIwfV0sNzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigiLSI9PT10LnR5cGUpe3ZhciByPXQuX2lkLG49ci5jaGFyQXQoMCk7LTEhPT1yLmluZGV4T2YoInNjZW5lIikmJihyPW4pO3ZhciB1PWkoZSxyLG4pO2lmKHUpe2lmKCJoaXN0b2dyYW0iPT09dS50eXBlJiZuPT09e3Y6InkiLGg6IngifVt1Lm9yaWVudGF0aW9ufHwidiJdKXJldHVybiB2b2lkKHQudHlwZT0ibGluZWFyIik7dmFyIGM9bisiY2FsZW5kYXIiLGg9dVtjXTtpZihvKHUsbikpe2Zvcih2YXIgZixkPWEodSkscD1bXSxtPTA7bTxlLmxlbmd0aDttKyspZj1lW21dLHMudHJhY2VJcyhmLCJib3giKSYmKGZbbisiYXhpcyJdfHxuKT09PXImJih2b2lkIDAhPT1mW2RdP3AucHVzaChmW2RdWzBdKTp2b2lkIDAhPT1mLm5hbWU/cC5wdXNoKGYubmFtZSk6cC5wdXNoKCJ0ZXh0IiksZltjXSE9PWgmJihoPXZvaWQgMCkpO3QudHlwZT1sKHAsaCl9ZWxzZSB0LnR5cGU9bCh1W25dfHxbdVtuKyIwIl1dLGgpfX19ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX1mdW5jdGlvbiBhKHQpe3JldHVybnt2OiJ4IixoOiJ5In1bdC5vcmllbnRhdGlvbnx8InYiXX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9YSh0KSxuPXMudHJhY2VJcyh0LCJib3giKSxpPXMudHJhY2VJcyh0Ll9mdWxsSW5wdXR8fHt9LCJjYW5kbGVzdGljayIpO3JldHVybiBuJiYhaSYmZT09PXImJnZvaWQgMD09PXRbcl0mJnZvaWQgMD09PXRbcisiMCJdfXZhciBzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuL2F4aXNfYXV0b3R5cGUiKSx1PXQoIi4vYXhpc19pZHMiKS5uYW1lMmlkO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEpe2EmJihlLl9uYW1lPWEsZS5faWQ9dShhKSksIi0iPT09cigidHlwZSIpJiYobihlLGkpLCItIj09PWUudHlwZT9lLnR5cGU9ImxpbmVhciI6dC50eXBlPWUudHlwZSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vYXhpc19hdXRvdHlwZSI6NzY1LCIuL2F4aXNfaWRzIjo3Njd9XSw3ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4saSxhLG89ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBpPXUubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLGE9cltlLnR5cGVdPXJbZS50eXBlXXx8e30sYS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZhW2UucHJvcF0hPT1pJiYobz0hMCksYVtlLnByb3BdPWkse2NoYW5nZWQ6byx2YWx1ZTppfX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZVswXSkmJjE9PT1lWzBdLmxlbmd0aCYmLTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGVbMF1bMF0pP1t7dHlwZToibGF5b3V0Iixwcm9wOiJfY3VycmVudEZyYW1lIix2YWx1ZTplWzBdWzBdLnRvU3RyaW5nKCl9XTpbXX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9W10sbj1lWzBdLGk9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWlbbl09ZVsxXTtlbHNle2lmKCF1LmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7aT1ufXJldHVybiBzKGksZnVuY3Rpb24odCxlLG4pe3IucHVzaCh7dHlwZToibGF5b3V0Iixwcm9wOnQsdmFsdWU6bn0pfSwiIiwwKSxyfWZ1bmN0aW9uIG8odCxlKXt2YXIgcixuLGksYSxvPVtdO2lmKG49ZVswXSxpPWVbMV0scj1lWzJdLGE9e30sInN0cmluZyI9PXR5cGVvZiBuKWFbbl09aTtlbHNle2lmKCF1LmlzUGxhaW5PYmplY3QobikpcmV0dXJuIG87YT1uLHZvaWQgMD09PXImJihyPWkpfXJldHVybiB2b2lkIDA9PT1yJiYocj1udWxsKSxzKGEsZnVuY3Rpb24oZSxuLGkpe3ZhciBhO2lmKEFycmF5LmlzQXJyYXkoaSkpe3ZhciBzPU1hdGgubWluKGkubGVuZ3RoLHQuZGF0YS5sZW5ndGgpO3ImJihzPU1hdGgubWluKHMsci5sZW5ndGgpKSxhPVtdO2Zvcih2YXIgbD0wO2w8cztsKyspYVtsXT1yP3JbbF06bH1lbHNlIGE9cj9yLnNsaWNlKDApOm51bGw7aWYobnVsbD09PWEpQXJyYXkuaXNBcnJheShpKSYmKGk9aVswXSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXtpZighQXJyYXkuaXNBcnJheShpKSl7dmFyIHU9aTtpPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlbY109dX1pLmxlbmd0aD1NYXRoLm1pbihhLmxlbmd0aCxpLmxlbmd0aCl9by5wdXNoKHt0eXBlOiJkYXRhIixwcm9wOmUsdHJhY2VzOmEsdmFsdWU6aX0pfSwiIiwwKSxvfWZ1bmN0aW9uIHModCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgYT10W2ldO2lmKCJfIiE9PWlbMF0pe3ZhciBvPXIrKG4+MD8iLiI6IiIpK2k7dS5pc1BsYWluT2JqZWN0KGEpP3MoYSxlLG8sbisxKTplKG8saSxhKX19KX12YXIgbD10KCIuLi9wbG90bHkiKSx1PXQoIi4uL2xpYiIpO3IubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBvPXt9LHM9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYobz1lLl9jb21tYW5kT2JzZXJ2ZXIpLG8uY2FjaGV8fChvLmNhY2hlPXt9KSxvLmxvb2t1cFRhYmxlPXt9O3ZhciBsPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsaSxvLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGwpcmV0dXJuIG87aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLG99aWYobCl7bih0LGwsby5jYWNoZSksby5jaGVjaz1mdW5jdGlvbigpe2lmKHMpe3ZhciBlPW4odCxsLG8uY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJmEmJnZvaWQgMCE9PW8ubG9va3VwVGFibGVbZS52YWx1ZV0mJihvLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUoYSh7dmFsdWU6ZS52YWx1ZSx0eXBlOmwudHlwZSxwcm9wOmwucHJvcCx0cmFjZXM6bC50cmFjZXMsaW5kZXg6by5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKG8uZW5hYmxlLG8uZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciBjPVsicGxvdGx5X3JlbGF5b3V0IiwicGxvdGx5X3JlZHJhdyIsInBsb3RseV9yZXN0eWxlIiwicGxvdGx5X3VwZGF0ZSIsInBsb3RseV9hbmltYXRpbmdmcmFtZSIsInBsb3RseV9hZnRlcnBsb3QiXSxoPTA7aDxjLmxlbmd0aDtoKyspdC5faW50ZXJuYWxPbihjW2hdLG8uY2hlY2spO28ucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcihjW2VdLG8uY2hlY2spfX1lbHNlIHUud2FybigiVW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgYmluZCBwbG90IHVwZGF0ZXMgdG8gQVBJIGNvbW1hbmQiKSxvLmxvb2t1cFRhYmxlPXt9LG8ucmVtb3ZlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gby5kaXNhYmxlPWZ1bmN0aW9uKCl7cz0hMX0sby5lbmFibGU9ZnVuY3Rpb24oKXtzPSEwfSxlJiYoZS5fY29tbWFuZE9ic2VydmVyPW8pLG99LHIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG89ZS5sZW5ndGg7Zm9yKGk9MDtpPG87aSsrKXt2YXIgcyxsPWVbaV0sdT1sLm1ldGhvZCxjPWwuYXJncztpZihBcnJheS5pc0FycmF5KGMpfHwoYz1bXSksIXUpcmV0dXJuITE7dmFyIGg9ci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzKHQsdSxjKTtpZigxIT09aC5sZW5ndGgpcmV0dXJuITE7aWYoYSl7aWYocz1oWzBdLHMudHlwZSE9PWEudHlwZSlyZXR1cm4hMTtpZihzLnByb3AhPT1hLnByb3ApcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShhLnRyYWNlcykpe2lmKCFBcnJheS5pc0FycmF5KHMudHJhY2VzKSlyZXR1cm4hMTtzLnRyYWNlcy5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxhLnRyYWNlcy5sZW5ndGg7ZisrKWlmKGEudHJhY2VzW2ZdIT09cy50cmFjZXNbZl0pcmV0dXJuITF9ZWxzZSBpZihzLnByb3AhPT1hLnByb3ApcmV0dXJuITF9ZWxzZSBhPWhbMF0sQXJyYXkuaXNBcnJheShhLnRyYWNlcykmJmEudHJhY2VzLnNvcnQoKTtzPWhbMF07dmFyIGQ9cy52YWx1ZTtpZihBcnJheS5pc0FycmF5KGQpKXtpZigxIT09ZC5sZW5ndGgpcmV0dXJuITE7ZD1kWzBdfW4mJihuW2RdPWkpfXJldHVybiBhfSxyLmV4ZWN1dGVBUElDb21tYW5kPWZ1bmN0aW9uKHQsZSxyKXtpZigic2tpcCI9PT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgbj1sW2VdLGk9W3RdO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKylpLnB1c2goclthXSk7cmV0dXJuIG4uYXBwbHkobnVsbCxpKS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gdS53YXJuKCJBUEkgY2FsbCB0byBQbG90bHkuIitlKyIgcmVqZWN0ZWQuIix0KSxQcm9taXNlLnJlamVjdCh0KX0pfSxyLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3N3aXRjaChBcnJheS5pc0FycmF5KHIpfHwocj1bXSksZSl7Y2FzZSJyZXN0eWxlIjpuPW8odCxyKTticmVhaztjYXNlInJlbGF5b3V0IjpuPWEodCxyKTticmVhaztjYXNlInVwZGF0ZSI6bj1vKHQsW3JbMF0sclsyXV0pLmNvbmNhdChhKHQsW3JbMV1dKSk7YnJlYWs7Y2FzZSJhbmltYXRlIjpuPWkodCxyKTticmVhaztkZWZhdWx0Om49W119cmV0dXJuIG59fSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90bHkiOjc1OX1dLDc4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2ZhbWlseTp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn19fSx7fV0sNzg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiZnJhbWVzX2VudHJ5Iixncm91cDp7dmFsVHlwZToic3RyaW5nIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIn0sdHJhY2VzOnt2YWxUeXBlOiJhbnkifSxiYXNlZnJhbWU6e3ZhbFR5cGU6InN0cmluZyJ9LGRhdGE6e3ZhbFR5cGU6ImFueSJ9LGxheW91dDp7dmFsVHlwZToiYW55In19fSx7fV0sNzkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fTtuLnByb2pOYW1lcz17ZXF1aXJlY3Rhbmd1bGFyOiJlcXVpcmVjdGFuZ3VsYXIiLG1lcmNhdG9yOiJtZXJjYXRvciIsb3J0aG9ncmFwaGljOiJvcnRob2dyYXBoaWMiLCJuYXR1cmFsIGVhcnRoIjoibmF0dXJhbEVhcnRoIixrYXZyYXlza2l5Nzoia2F2cmF5c2tpeTciLG1pbGxlcjoibWlsbGVyIixyb2JpbnNvbjoicm9iaW5zb24iLGVja2VydDQ6ImVja2VydDQiLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6ImF6aW11dGhhbEVxdWFsQXJlYSIsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6ImF6aW11dGhhbEVxdWlkaXN0YW50IiwiY29uaWMgZXF1YWwgYXJlYSI6ImNvbmljRXF1YWxBcmVhIiwiY29uaWMgY29uZm9ybWFsIjoiY29uaWNDb25mb3JtYWwiLCJjb25pYyBlcXVpZGlzdGFudCI6ImNvbmljRXF1aWRpc3RhbnQiLGdub21vbmljOiJnbm9tb25pYyIsc3RlcmVvZ3JhcGhpYzoic3RlcmVvZ3JhcGhpYyIsbW9sbHdlaWRlOiJtb2xsd2VpZGUiLGhhbW1lcjoiaGFtbWVyIiwidHJhbnN2ZXJzZSBtZXJjYXRvciI6InRyYW5zdmVyc2VNZXJjYXRvciIsImFsYmVycyB1c2EiOiJhbGJlcnNVc2EiLCJ3aW5rZWwgdHJpcGVsIjoid2lua2VsMyIsYWl0b2ZmOiJhaXRvZmYiLHNpbnVzb2lkYWw6InNpbnVzb2lkYWwifSxuLmF4ZXNOYW1lcz1bImxvbmF4aXMiLCJsYXRheGlzIl0sbi5sb25heGlzU3Bhbj17b3J0aG9ncmFwaGljOjE4MCwiYXppbXV0aGFsIGVxdWFsIGFyZWEiOjM2MCwiYXppbXV0aGFsIGVxdWlkaXN0YW50IjozNjAsImNvbmljIGNvbmZvcm1hbCI6MTgwLGdub21vbmljOjE2MCxzdGVyZW9ncmFwaGljOjE4MCwidHJhbnN2ZXJzZSBtZXJjYXRvciI6MTgwLCIqIjozNjB9LG4ubGF0YXhpc1NwYW49eyJjb25pYyBjb25mb3JtYWwiOjE1MCxzdGVyZW9ncmFwaGljOjE3OS41LCIqIjoxODB9LG4uc2NvcGVEZWZhdWx0cz17d29ybGQ6e2xvbmF4aXNSYW5nZTpbLTE4MCwxODBdLGxhdGF4aXNSYW5nZTpbLTkwLDkwXSxwcm9qVHlwZToiZXF1aXJlY3Rhbmd1bGFyIixwcm9qUm90YXRlOlswLDAsMF19LHVzYTp7bG9uYXhpc1JhbmdlOlstMTgwLC01MF0sbGF0YXhpc1JhbmdlOlsxNSw4MF0scHJvalR5cGU6ImFsYmVycyB1c2EifSxldXJvcGU6e2xvbmF4aXNSYW5nZTpbLTMwLDYwXSxsYXRheGlzUmFuZ2U6WzMwLDgwXSxwcm9qVHlwZToiY29uaWMgY29uZm9ybWFsIixwcm9qUm90YXRlOlsxNSwwLDBdLHByb2pQYXJhbGxlbHM6WzAsNjBdfSxhc2lhOntsb25heGlzUmFuZ2U6WzIyLDE2MF0sbGF0YXhpc1JhbmdlOlstMTUsNTVdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfSxhZnJpY2E6e2xvbmF4aXNSYW5nZTpbLTMwLDYwXSxsYXRheGlzUmFuZ2U6Wy00MCw0MF0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19LCJub3J0aCBhbWVyaWNhIjp7bG9uYXhpc1JhbmdlOlstMTgwLC00NV0sbGF0YXhpc1JhbmdlOls1LDg1XSxwcm9qVHlwZToiY29uaWMgY29uZm9ybWFsIixwcm9qUm90YXRlOlstMTAwLDAsMF0scHJvalBhcmFsbGVsczpbMjkuNSw0NS41XX0sInNvdXRoIGFtZXJpY2EiOntsb25heGlzUmFuZ2U6Wy0xMDAsLTMwXSxsYXRheGlzUmFuZ2U6Wy02MCwxNV0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19fSxuLmNsaXBQYWQ9LjAwMSxuLnByZWNpc2lvbj0uMSxuLmxhbmRDb2xvcj0iI0YwREM4MiIsbi53YXRlckNvbG9yPSIjMzM5OUZGIixuLmxvY2F0aW9ubW9kZVRvTGF5ZXI9eyJJU08tMyI6ImNvdW50cmllcyIsIlVTQS1zdGF0ZXMiOiJzdWJ1bml0cyIsImNvdW50cnkgbmFtZXMiOiJjb3VudHJpZXMifSxuLnNwaGVyZVNWRz17dHlwZToiU3BoZXJlIn0sbi5maWxsTGF5ZXJzPVsib2NlYW4iLCJsYW5kIiwibGFrZXMiXSxuLmxpbmVMYXllcnM9WyJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJyaXZlcnMiLCJmcmFtZSJdLG4uYmFzZUxheWVycz1bIm9jZWFuIiwibGFuZCIsImxha2VzIiwic3VidW5pdHMiLCJjb3VudHJpZXMiLCJjb2FzdGxpbmVzIiwicml2ZXJzIiwibGF0YXhpcyIsImxvbmF4aXMiLCJmcmFtZSJdLG4ubGF5ZXJOYW1lVG9BZGplY3RpdmU9e29jZWFuOiJvY2VhbiIsbGFuZDoibGFuZCIsbGFrZXM6Imxha2UiLHN1YnVuaXRzOiJzdWJ1bml0Iixjb3VudHJpZXM6ImNvdW50cnkiLGNvYXN0bGluZXM6ImNvYXN0bGluZSIscml2ZXJzOiJyaXZlciIsZnJhbWU6ImZyYW1lIn0sbi5iYXNlTGF5ZXJzT3ZlckNob3JvcGxldGg9WyJyaXZlcnMiLCJsYWtlcyJdfSx7fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uVHlwZT1udWxsLHRoaXMucHJvamVjdGlvbj1udWxsLHRoaXMuY2xpcEFuZ2xlPW51bGwsdGhpcy5zZXRTY2FsZT1udWxsLHRoaXMucGF0aD1udWxsLHRoaXMuem9vbT1udWxsLHRoaXMuem9vbVJlc2V0PW51bGwsdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy50cmFjZUhhc2g9e319ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHUuZ2VvLmdyYXRpY3VsZSgpLmV4dGVudChbW3RbMF0sZVswXV0sW3RbMV0sZVsxXV1dKS5zdGVwKHIpfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPWIubGF5ZXJOYW1lVG9BZGplY3RpdmVbZV07dC5zZWxlY3QoIi4iK2UpLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5jYWxsKGMuZmlsbCxyW24rImNvbG9yIl0pfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPWIubGF5ZXJOYW1lVG9BZGplY3RpdmVbZV07dC5zZWxlY3QoIi4iK2UpLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuY2FsbChjLnN0cm9rZSxyW24rImNvbG9yIl0pLmNhbGwoaC5kYXNoTGluZSwiIixyW24rIndpZHRoIl0pfWZ1bmN0aW9uIHModCxlLHIpe3Quc2VsZWN0KCIuIitlKyJncmF0aWN1bGUiKS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmNhbGwoYy5zdHJva2UscltlXS5ncmlkY29sb3IpLmNhbGwoaC5kYXNoTGluZSwiIixyW2VdLmdyaWR3aWR0aCl9ZnVuY3Rpb24gbCh0KXt2YXIgZT17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6cC5sYXlvdXRBdHRyaWJ1dGVzLmV4cG9uZW50Zm9ybWF0LmRmbHR9O3JldHVybiBwLnNldENvbnZlcnQoZSx0KSxlfXZhciB1PXQoImQzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxkPXQoIi4uL3Bsb3RzIikscD10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLG09dCgiLi9wcm9qZWN0aW9ucyIpLHY9dCgiLi9zZXRfc2NhbGUiKSxnPXQoIi4vem9vbSIpLHk9dCgiLi96b29tX3Jlc2V0IiksYj10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIiksXz10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO20odSksZS5leHBvcnRzPW47dmFyIHc9bi5wcm90b3R5cGU7dy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dGhpcyxvPWVbYS5pZF0scz1lLl9zaXplO2EucHJvamVjdGlvbj1udWxsLGEuc2V0U2NhbGU9dihvLHMpLGEubWFrZVByb2plY3Rpb24obyksYS5tYWtlUGF0aCgpLGEuYWRqdXN0TGF5b3V0KG8scyksYS56b29tPWcoYSxvKSxhLnpvb21SZXNldD15KGEsbyksYS5tb2NrQXhpcz1sKGUpLGEuZnJhbWV3b3JrLmNhbGwoYS56b29tKS5vbigiZGJsY2xpY2suem9vbSIsYS56b29tUmVzZXQpLGEuZnJhbWV3b3JrLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7dmFyIHQ9dS5tb3VzZSh0aGlzKSxlPWEucHJvamVjdGlvbi5pbnZlcnQodCk7aWYoZSYmIWlzTmFOKGVbMF0pJiYhaXNOYU4oZVsxXSkpe3ZhciByPXUuZXZlbnQ7ci54cHg9dFswXSxyLnlweD10WzFdLGEueGF4aXMuYzJwPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMF19LGEueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIGVbMF19LGEueWF4aXMuYzJwPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMV19LGEueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIGVbMV19LGYuaG92ZXIoYS5ncmFwaERpdixyLGEuaWQpfX0pLGEuZnJhbWV3b3JrLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtmLmxvbmVVbmhvdmVyKGUuX3RvcHBhcGVyKX0pLGEuZnJhbWV3b3JrLm9uKCJjbGljayIsZnVuY3Rpb24oKXtmLmNsaWNrKGEuZ3JhcGhEaXYsdS5ldmVudCl9KSxuPXguZ2V0VG9wb2pzb25OYW1lKG8pLG51bGw9PT1hLnRvcG9qc29ufHxuIT09YS50b3BvanNvbk5hbWU/KGEudG9wb2pzb25OYW1lPW4sdm9pZCAwIT09UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW2EudG9wb2pzb25OYW1lXT8oYS50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bYS50b3BvanNvbk5hbWVdLGEub25jZVRvcG9qc29uSXNMb2FkZWQodCxvKSk6KGk9eC5nZXRUb3BvanNvblBhdGgoYS50b3BvanNvblVSTCxhLnRvcG9qc29uTmFtZSksci5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7dS5qc29uKGksZnVuY3Rpb24obixzKXtpZihuKXJldHVybiB2b2lkIHIoNDA0PT09bi5zdGF0dXM/bmV3IEVycm9yKFsicGxvdGx5LmpzIGNvdWxkIG5vdCBmaW5kIHRvcG9qc29uIGZpbGUgYXQiLGksIi4iLCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uIiwiaXMgc2V0IHByb3Blcmx5LiJdLmpvaW4oIiAiKSk6bmV3IEVycm9yKFsidW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0IixpXS5qb2luKCIgIikpKTthLnRvcG9qc29uPXMsUGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW2EudG9wb2pzb25OYW1lXT1zLGEub25jZVRvcG9qc29uSXNMb2FkZWQodCxvKSxlKCl9KX0pKSkpOmEub25jZVRvcG9qc29uSXNMb2FkZWQodCxvKX0sdy5vbmNlVG9wb2pzb25Jc0xvYWRlZD1mdW5jdGlvbih0LGUpe3RoaXMuZHJhd0xheW91dChlKSxkLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLHQsZSksdGhpcy5yZW5kZXIoKX0sdy5tYWtlUHJvamVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxyPXQucHJvamVjdGlvbixuPXIudHlwZSxpPW51bGw9PT10aGlzLnByb2plY3Rpb258fG4hPT10aGlzLnByb2plY3Rpb25UeXBlO2k/KHRoaXMucHJvamVjdGlvblR5cGU9bixlPXRoaXMucHJvamVjdGlvbj11Lmdlb1tiLnByb2pOYW1lc1tuXV0oKSk6ZT10aGlzLnByb2plY3Rpb24sZS50cmFuc2xhdGUoci5fdHJhbnNsYXRlMCkucHJlY2lzaW9uKGIucHJlY2lzaW9uKSx0Ll9pc0FsYmVyc1VzYXx8ZS5yb3RhdGUoci5fcm90YXRlKS5jZW50ZXIoci5fY2VudGVyKSx0Ll9jbGlwQW5nbGU/KHRoaXMuY2xpcEFuZ2xlPXQuX2NsaXBBbmdsZSxlLmNsaXBBbmdsZSh0Ll9jbGlwQW5nbGUtYi5jbGlwUGFkKSk6dGhpcy5jbGlwQW5nbGU9bnVsbCxyLnBhcmFsbGVscyYmZS5wYXJhbGxlbHMoci5wYXJhbGxlbHMpLGkmJnRoaXMuc2V0U2NhbGUoZSksZS50cmFuc2xhdGUoci5fdHJhbnNsYXRlKS5zY2FsZShyLl9zY2FsZSl9LHcubWFrZVBhdGg9ZnVuY3Rpb24oKXt0aGlzLnBhdGg9dS5nZW8ucGF0aCgpLnByb2plY3Rpb24odGhpcy5wcm9qZWN0aW9uKX0sdy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dCxlPSJjbGlwIit0Ll91aWQrdGhpcy5pZCxyPXQuX2RlZnMuc2VsZWN0QWxsKCJnLmNsaXBzIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLCh0aGlzLmNsaXBEZWY9ci5zZWxlY3RBbGwoIiMiK2UpLmRhdGEoWzBdKSkuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGUpLmFwcGVuZCgicmVjdCIpO3ZhciBuPXRoaXMuZnJhbWV3b3JrPXUuc2VsZWN0KHRoaXMuY29udGFpbmVyKS5hcHBlbmQoImciKTtuLmF0dHIoImNsYXNzIiwiZ2VvICIrdGhpcy5pZCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuY2FsbChoLnNldENsaXBVcmwsZSksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJnbGF5ZXIiKS5hcHBlbmQoInJlY3QiKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYmFzZWxheWVyIiksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNob3JvcGxldGhsYXllciIpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJiYXNlbGF5ZXJvdmVyY2hvcm9wbGV0aCIpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzY2F0dGVyZ2VvbGF5ZXIiKSxuLm9uKCJkYmxjbGljay56b29tIixudWxsKSx0aGlzLnhheGlzPXtfaWQ6IngifSx0aGlzLnlheGlzPXtfaWQ6InkifX0sdy5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmRvbWFpbixuPWUubCtlLncqci54WzBdK3QuX21hcmdpblgsaT1lLnQrZS5oKigxLXIueVsxXSkrdC5fbWFyZ2luWTtoLnNldFRyYW5zbGF0ZSh0aGlzLmZyYW1ld29yayxuLGkpO3ZhciBhPXt4OjAseTowLHdpZHRoOnQuX3dpZHRoLGhlaWdodDp0Ll9oZWlnaHR9O3RoaXMuY2xpcERlZi5zZWxlY3QoInJlY3QiKS5hdHRyKGEpLHRoaXMuZnJhbWV3b3JrLnNlbGVjdCgiLmJnbGF5ZXIiKS5zZWxlY3QoInJlY3QiKS5hdHRyKGEpLmNhbGwoYy5maWxsLHQuYmdjb2xvciksdGhpcy54YXhpcy5fb2Zmc2V0PW4sdGhpcy54YXhpcy5fbGVuZ3RoPXQuX3dpZHRoLHRoaXMueWF4aXMuX29mZnNldD1pLHRoaXMueWF4aXMuX2xlbmd0aD10Ll9oZWlnaHR9LHcuZHJhd1RvcG89ZnVuY3Rpb24odCxlLHIpe2lmKCEwPT09clsic2hvdyIrZV0pe3ZhciBuPXRoaXMudG9wb2pzb24saT0iZnJhbWUiPT09ZT9iLnNwaGVyZVNWRzpfKG4sbi5vYmplY3RzW2VdKTt0LmFwcGVuZCgiZyIpLmRhdHVtKGkpLmF0dHIoImNsYXNzIixlKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImJhc2VwYXRoIil9fSx3LmRyYXdHcmF0aWN1bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbZV07aWYoITA9PT1uLnNob3dncmlkKXt2YXIgYT1iLnNjb3BlRGVmYXVsdHNbci5zY29wZV0sbz1hLmxvbmF4aXNSYW5nZSxzPWEubGF0YXhpc1JhbmdlLGw9ImxvbmF4aXMiPT09ZT9bbi5kdGlja106WzAsbi5kdGlja10sdT1pKG8scyxsKTt0LmFwcGVuZCgiZyIpLmRhdHVtKHUpLmF0dHIoImNsYXNzIixlKyJncmF0aWN1bGUiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImdyYXRpY3VsZXBhdGgiKX19LHcuZHJhd0xheW91dD1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZnJhbWV3b3JrLnNlbGVjdCgiZy5iYXNlbGF5ZXIiKSxuPWIuYmFzZUxheWVycyxpPWIuYXhlc05hbWVzO3Iuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspZT1uW2FdLC0xIT09aS5pbmRleE9mKGUpP3RoaXMuZHJhd0dyYXRpY3VsZShyLGUsdCk6dGhpcy5kcmF3VG9wbyhyLGUsdCk7dGhpcy5zdHlsZUxheW91dCh0KX0sdy5zdHlsZUxheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1iLmZpbGxMYXllcnMsaT1iLmxpbmVMYXllcnM7LTEhPT1uLmluZGV4T2YoZSk/YSh0LGUscik6LTEhPT1pLmluZGV4T2YoZSkmJm8odCxlLHIpfSx3LnN0eWxlTGF5b3V0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXRoaXMuZnJhbWV3b3JrLnNlbGVjdCgiZy5iYXNlbGF5ZXIiKSxuPWIuYmFzZUxheWVycyxpPWIuYXhlc05hbWVzLGE9MDthPG4ubGVuZ3RoO2ErKyllPW5bYV0sLTEhPT1pLmluZGV4T2YoZSk/cyhyLGUsdCk6dGhpcy5zdHlsZUxheWVyKHIsZSx0KX0sdy5pc0xvbkxhdE92ZXJFZGdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNsaXBBbmdsZTtpZihudWxsPT09ZSlyZXR1cm4hMTt2YXIgcj10aGlzLnByb2plY3Rpb24ucm90YXRlKCk7cmV0dXJuIHUuZ2VvLmRpc3RhbmNlKHQsWy1yWzBdLC1yWzFdXSk+ZSpNYXRoLlBJLzE4MH0sdy5yZW5kZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXIucHJvamVjdGlvbih0LmxvbmxhdCk7cmV0dXJuIGU/InRyYW5zbGF0ZSgiK2VbMF0rIiwiK2VbMV0rIikiOm51bGx9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gci5pc0xvbkxhdE92ZXJFZGdlcyh0LmxvbmxhdCk/IjAiOiIxLjAifXZhciByPXRoaXMsbj1yLmZyYW1ld29yayxpPW4uc2VsZWN0KCJnLmNob3JvcGxldGhsYXllciIpLGE9bi5zZWxlY3QoImcuc2NhdHRlcmdlb2xheWVyIiksbz1yLnBhdGg7bi5zZWxlY3RBbGwoInBhdGguYmFzZXBhdGgiKS5hdHRyKCJkIixvKSxuLnNlbGVjdEFsbCgicGF0aC5ncmF0aWN1bGVwYXRoIikuYXR0cigiZCIsbyksaS5zZWxlY3RBbGwoInBhdGguY2hvcm9wbGV0aGxvY2F0aW9uIikuYXR0cigiZCIsbyksaS5zZWxlY3RBbGwoInBhdGguYmFzZXBhdGgiKS5hdHRyKCJkIixvKSxhLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuYXR0cigiZCIsbyksbnVsbCE9PXIuY2xpcEFuZ2xlPyhhLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLnN0eWxlKCJvcGFjaXR5IixlKS5hdHRyKCJ0cmFuc2Zvcm0iLHQpLGEuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLGUpLmF0dHIoInRyYW5zZm9ybSIsdCkpOihhLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmF0dHIoInRyYW5zZm9ybSIsdCksYS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLHQpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjc0NSwiLi4vY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vcGxvdHMiOjgyNywiLi9jb25zdGFudHMiOjc5MCwiLi9wcm9qZWN0aW9ucyI6Nzk4LCIuL3NldF9zY2FsZSI6Nzk5LCIuL3pvb20iOjgwMCwiLi96b29tX3Jlc2V0Ijo4MDEsZDM6MTIwLCJ0b3BvanNvbi1jbGllbnQiOjUzNH1dLDc5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2dlbyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9ImdlbyIsci5hdHRyPSJnZW8iLHIuaWRSb290PSJnZW8iLHIuaWRSZWdleD0vXmdlbyhbMi05XXxbMS05XVswLTldKyk/JC8sci5hdHRyUmVnZXg9L15nZW8oWzItOV18WzEtOV1bMC05XSspPyQvLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dC9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWkuZ2V0U3VicGxvdElkcyhlLCJnZW8iKTt2b2lkIDA9PT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzJiYod2luZG93LlBsb3RseUdlb0Fzc2V0cz17dG9wb2pzb246e319KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWkuZ2V0U3VicGxvdENhbGNEYXRhKHIsImdlbyIscyksdT1lW3NdLl9zdWJwbG90O3V8fCh1PW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX2dlb2xheWVyLm5vZGUoKSx0b3BvanNvblVSTDp0Ll9jb250ZXh0LnRvcG9qc29uVVJMfSksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QobCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPWkuZ2V0U3VicGxvdElkcyhuLCJnZW8iKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sbD1uW3NdLl9zdWJwbG90OyFlW3NdJiZsJiYobC5mcmFtZXdvcmsucmVtb3ZlKCksbC5jbGlwRGVmLnJlbW92ZSgpKX19fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4vZ2VvIjo3OTEsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjc5MywiLi9sYXlvdXQvZGVmYXVsdHMiOjc5NiwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjc5N31dLDc5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2dlbzp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJnZW8ifX19LHt9XSw3OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIifSx7dmFsVHlwZToibnVtYmVyIn1dfSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6Im51bWJlciJ9LGR0aWNrOnt2YWxUeXBlOiJudW1iZXIifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4ubGlnaHRMaW5lfSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDF9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliIiksaT10KCIuLi9jb25zdGFudHMiKSxhPXQoIi4vYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBuLmNvZXJjZShvLHMsYSx0LGUpfWZvcih2YXIgbyxzLGw9aS5heGVzTmFtZXMsdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgYz1sW3VdO289dFtjXXx8e30scz17fTt2YXIgaD1mdW5jdGlvbih0KXt2YXIgcixuLGEsbyxzLGwsdT1lLnNjb3BlO3JldHVybiJ3b3JsZCI9PT11PyhyPWUucHJvamVjdGlvbixuPXIudHlwZSxhPXIucm90YXRpb24scz1pW3QrIlNwYW4iXSxsPXZvaWQgMCE9PXNbbl0/c1tuXS8yOnNbIioiXS8yLG89ImxvbmF4aXMiPT09dD9hLmxvbjphLmxhdCxbby1sLG8rbF0pOmkuc2NvcGVEZWZhdWx0c1t1XVt0KyJSYW5nZSJdfShjKSxmPXIoInJhbmdlIixoKTtuLm5vbmVPckFsbChvLnJhbmdlLHMucmFuZ2UsWzAsMV0pLHIoInRpY2swIixmWzBdKSxyKCJkdGljayIsImxvbmF4aXMiPT09Yz8zMDoxMCk7cigic2hvd2dyaWQiKSYmKHIoImdyaWRjb2xvciIpLHIoImdyaWR3aWR0aCIpKSxlW2NdPXMsZVtjXS5fZnVsbFJhbmdlPWh9fX0seyIuLi8uLi8uLi9saWIiOjcyNCwiLi4vY29uc3RhbnRzIjo3OTAsIi4vYXhpc19hdHRyaWJ1dGVzIjo3OTR9XSw3OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4saT1yKCJzY29wZSIpLG89IndvcmxkIiE9PWksbD1hLnNjb3BlRGVmYXVsdHNbaV0sdT1yKCJyZXNvbHV0aW9uIiksYz1yKCJwcm9qZWN0aW9uLnR5cGUiLGwucHJvalR5cGUpLGg9ImFsYmVycyB1c2EiPT09YyxmPS0xIT09Yy5pbmRleE9mKCJjb25pYyIpO2lmKGYpe3IoInByb2plY3Rpb24ucGFyYWxsZWxzIixsLnByb2pQYXJhbGxlbHN8fFswLDYwXSl9aWYoaCllLnNjb3BlPSJ1c2EiO2Vsc2V7dmFyIGQ9bC5wcm9qUm90YXRlfHxbMCwwLDBdO3IoInByb2plY3Rpb24ucm90YXRpb24ubG9uIixkWzBdKSxyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCIsZFsxXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5yb2xsIixkWzJdKSxuPXIoInNob3djb2FzdGxpbmVzIiwhbyksbiYmKHIoImNvYXN0bGluZWNvbG9yIikscigiY29hc3RsaW5ld2lkdGgiKSksbj1yKCJzaG93b2NlYW4iKSxuJiZyKCJvY2VhbmNvbG9yIil9cigicHJvamVjdGlvbi5zY2FsZSIpLG49cigic2hvd2xhbmQiKSxuJiZyKCJsYW5kY29sb3IiKSxuPXIoInNob3dsYWtlcyIpLG4mJnIoImxha2Vjb2xvciIpLG49cigic2hvd3JpdmVycyIpLG4mJihyKCJyaXZlcmNvbG9yIikscigicml2ZXJ3aWR0aCIpKSxuPXIoInNob3djb3VudHJpZXMiLG8mJiJ1c2EiIT09aSksbiYmKHIoImNvdW50cnljb2xvciIpLHIoImNvdW50cnl3aWR0aCIpKSwoInVzYSI9PT1pfHwibm9ydGggYW1lcmljYSI9PT1pJiY1MD09PXUpJiYocigic2hvd3N1YnVuaXRzIiwhMCkscigic3VidW5pdGNvbG9yIikscigic3VidW5pdHdpZHRoIikpLG98fChuPXIoInNob3dmcmFtZSIsITApKSYmKHIoImZyYW1lY29sb3IiKSxyKCJmcmFtZXdpZHRoIikpLHIoImJnY29sb3IiKSxzKHQsZSksZS5faXNIaWdoUmVzPTUwPT09dSxlLl9jbGlwQW5nbGU9YS5sb25heGlzU3BhbltjXS8yLGUuX2lzQWxiZXJzVXNhPWgsZS5faXNDb25pYz1mLGUuX2lzU2NvcGVkPW87dmFyIHA9ZS5wcm9qZWN0aW9uLnJvdGF0aW9ufHx7fTtlLnByb2plY3Rpb24uX3JvdGF0ZT1bLXAubG9ufHwwLC1wLmxhdHx8MCxwLnJvbGx8fDBdfXZhciBpPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2NvbnN0YW50cyIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9heGlzX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpKHQsZSxyLHt0eXBlOiJnZW8iLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpuLHBhcnRpdGlvbjoieSJ9KX19LHsiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyI6ODM0LCIuLi9jb25zdGFudHMiOjc5MCwiLi9heGlzX2RlZmF1bHRzIjo3OTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc5N31dLDc5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbnN0YW50cyIpLGE9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2RvbWFpbjp7eDp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19LHk6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9XSxkZmx0OlswLDFdfX0scmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhpLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGkucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZToibnVtYmVyIn0sbGF0Ont2YWxUeXBlOiJudW1iZXIifSxyb2xsOnt2YWxUeXBlOiJudW1iZXIifX0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjF9fSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Omkud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Omkud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOmEsbGF0YXhpczphfX0sewoiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uL2NvbnN0YW50cyI6NzkwLCIuL2F4aXNfYXR0cmlidXRlcyI6Nzk0fV0sNzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybnt0eXBlOiJGZWF0dXJlIixpZDp0LmlkLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzLGdlb21ldHJ5OnIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gcihlLG4pe2lmKCFlKXJldHVybiBudWxsO2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09ZS50eXBlKXJldHVybnt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6b2JqZWN0Lmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbil9KX07aWYoIVMuaGFzT3duUHJvcGVydHkoZS50eXBlKSlyZXR1cm4gbnVsbDt2YXIgaT1TW2UudHlwZV07cmV0dXJuIHQuZ2VvLnN0cmVhbShlLG4oaSkpLGkucmVzdWx0KCl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiBpKHQpe2lmKChlPXQubGVuZ3RoKTw0KXJldHVybiExO2Zvcih2YXIgZSxyPTAsbj10W2UtMV1bMV0qdFswXVswXS10W2UtMV1bMF0qdFswXVsxXTsrK3I8ZTspbis9dFtyLTFdWzFdKnRbcl1bMF0tdFtyLTFdWzBdKnRbcl1bMV07cmV0dXJuIG48PTB9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxpPSExLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9dFthXSx1PWxbMF0sYz1sWzFdLGg9dFtzXSxmPWhbMF0sZD1oWzFdO2M+bl5kPm4mJnI8KGYtdSkqKG4tYykvKGQtYykrdSYmKGk9IWkpfXJldHVybiBpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ/dC9NYXRoLnNpbih0KToxfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQ+MT96OnQ8LTE/LXo6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/QzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSgyK3opKk1hdGguc2luKGUpO2UvPTI7Zm9yKHZhciBuPTAsaT0xLzA7bjwxMCYmTWF0aC5hYnMoaSk+RTtuKyspe3ZhciBhPU1hdGguY29zKGUpO2UtPWk9KGUrTWF0aC5zaW4oZSkqKGErMiktcikvKDIqYSooMSthKSl9cmV0dXJuWzIvTWF0aC5zcXJ0KEMqKDQrQykpKnQqKDErTWF0aC5jb3MoZSkpLDIqTWF0aC5zcXJ0KEMvKDQrQykpKk1hdGguc2luKGUpXX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPVIoci9lLG4pO3JldHVybiBpWzBdKj10LGl9cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCksMT09PWU/UjplPT09MS8wP2Y6KHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9Ui5pbnZlcnQoci90LG4pO3JldHVybiBpWzBdKj1lLGl9LHIpfWZ1bmN0aW9uIGgoKXt2YXIgdD0yLGU9TyhjKSxyPWUodCk7cmV0dXJuIHIuY29lZmZpY2llbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0PStyKTp0fSxyfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKS9NYXRoLmNvcyhlLz0yKSwyKk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuWzMqdC8oMipDKSpNYXRoLnNxcnQoQypDLzMtZSplKSxlXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuW3QsMS4yNSpNYXRoLmxvZyhNYXRoLnRhbihDLzQrLjQqZSkpXX1mdW5jdGlvbiBtKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixuPXQqTWF0aC5zaW4oZSksaT0zMDtkb3tlLT1yPShlK01hdGguc2luKGUpLW4pLygxK01hdGguY29zKGUpKX13aGlsZShNYXRoLmFicyhyKT5FJiYtLWk+MCk7cmV0dXJuIGUvMn19ZnVuY3Rpb24gdih0LGUpe3ZhciByPWUqZSxuPXIqcjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpyK24qKG4qKC4wMDM5NzEqci0uMDAxNTI5Km4pLS4wMTM3OTEpKSxlKigxLjAwNzIyNityKiguMDE1MDg1K24qKC4wMjg4NzQqci0uMDQ0NDc1LS4wMDU5MTYqbikpKV19ZnVuY3Rpb24gZyh0LGUpe3ZhciByLG49TWF0aC5taW4oMTgsMzYqTWF0aC5hYnMoZSkvQyksaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89KHI9altpXSlbMF0scz1yWzFdLGw9KHI9alsrK2ldKVswXSx1PXJbMV0sYz0ocj1qW01hdGgubWluKDE5LCsraSldKVswXSxoPXJbMV07cmV0dXJuW3QqKGwrYSooYy1vKS8yK2EqYSooYy0yKmwrbykvMiksKGU+MD96Oi16KSoodSthKihoLXMpLzIrYSphKihoLTIqdStzKS8yKV19ZnVuY3Rpb24geSh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLGVdfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1NYXRoLmNvcyhlKSxuPW8obChyKk1hdGguY29zKHQvPTIpKSk7cmV0dXJuWzIqcipNYXRoLnNpbih0KSpuLE1hdGguc2luKGUpKm5dfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1iKHQsZSk7cmV0dXJuWyhyWzBdK3QveikvMiwoclsxXStlKS8yXX10Lmdlby5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdHJlYW07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJub3QgeWV0IHN1cHBvcnRlZCIpO3JldHVybih0JiZfLmhhc093blByb3BlcnR5KHQudHlwZSk/X1t0LnR5cGVdOnIpKHQsbil9O3ZhciBfPXtGZWF0dXJlOmUsRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxyKXtyZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQscil9KX19fSx3PVtdLE09W10saz17cG9pbnQ6ZnVuY3Rpb24odCxlKXt3LnB1c2goW3QsZV0pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD13Lmxlbmd0aD93Lmxlbmd0aDwyP3t0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6d1swXX06e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnd9Om51bGw7cmV0dXJuIHc9W10sdH19LEE9e2xpbmVTdGFydDpuLHBvaW50OmZ1bmN0aW9uKHQsZSl7dy5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3cubGVuZ3RoJiYoTS5wdXNoKHcpLHc9W10pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1NLmxlbmd0aD9NLmxlbmd0aDwyP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpNWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpNfTpudWxsO3JldHVybiBNPVtdLHR9fSxUPXtwb2x5Z29uU3RhcnQ6bixsaW5lU3RhcnQ6bixwb2ludDpmdW5jdGlvbih0LGUpe3cucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD13Lmxlbmd0aDtpZih0KXtkb3t3LnB1c2god1swXS5zbGljZSgpKX13aGlsZSgrK3Q8NCk7TS5wdXNoKHcpLHc9W119fSxwb2x5Z29uRW5kOm4scmVzdWx0OmZ1bmN0aW9uKCl7aWYoIU0ubGVuZ3RoKXJldHVybiBudWxsO3ZhciB0PVtdLGU9W107cmV0dXJuIE0uZm9yRWFjaChmdW5jdGlvbihyKXtpKHIpP3QucHVzaChbcl0pOmUucHVzaChyKX0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3Quc29tZShmdW5jdGlvbih0KXtpZihhKHRbMF0scikpcmV0dXJuIHQucHVzaChlKSwhMH0pfHx0LnB1c2goW2VdKX0pLE09W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19LFM9e1BvaW50OmssTXVsdGlQb2ludDprLExpbmVTdHJpbmc6QSxNdWx0aUxpbmVTdHJpbmc6QSxQb2x5Z29uOlQsTXVsdGlQb2x5Z29uOlQsU3BoZXJlOlR9LEU9MWUtNixMPUUqRSxDPU1hdGguUEksej1DLzIsST0oTWF0aC5zcXJ0KEMpLEMvMTgwKSxEPTE4MC9DLFA9dC5nZW8ucHJvamVjdGlvbixPPXQuZ2VvLnByb2plY3Rpb25NdXRhdG9yO3QuZ2VvLmludGVycnVwdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscil7Zm9yKHZhciBuPXI8MD8tMToxLGk9bFsrKHI8MCldLGE9MCxvPWkubGVuZ3RoLTE7YTxvJiZ0PmlbYV1bMl1bMF07KythKTt2YXIgcz1lKHQtaVthXVsxXVswXSxyKTtyZXR1cm4gc1swXSs9ZShpW2FdWzFdWzBdLG4qcj5uKmlbYV1bMF1bMV0/aVthXVswXVsxXTpyKVswXSxzfWZ1bmN0aW9uIG4oKXtzPWwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgcixuPWUodFswXVswXSx0WzBdWzFdKVswXSxpPWUodFsyXVswXSx0WzJdWzFdKVswXSxhPWUodFsxXVswXSx0WzBdWzFdKVsxXSxvPWUodFsxXVswXSx0WzFdWzFdKVsxXTtyZXR1cm4gYT5vJiYocj1hLGE9byxvPXIpLFtbbixhXSxbaSxvXV19KX0pfWZ1bmN0aW9uIGkoKXtmb3IodmFyIGU9MWUtNixyPVtdLG49MCxpPWxbMF0ubGVuZ3RoO248aTsrK24pe3ZhciBvPWxbMF1bbl0scz0xODAqb1swXVswXS9DLHU9MTgwKm9bMF1bMV0vQyxjPTE4MCpvWzFdWzFdL0MsaD0xODAqb1syXVswXS9DLGY9MTgwKm9bMl1bMV0vQztyLnB1c2goYShbW3MrZSx1K2VdLFtzK2UsYy1lXSxbaC1lLGMtZV0sW2gtZSxmK2VdXSwzMCkpfWZvcih2YXIgbj1sWzFdLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgbz1sWzFdW25dLHM9MTgwKm9bMF1bMF0vQyx1PTE4MCpvWzBdWzFdL0MsYz0xODAqb1sxXVsxXS9DLGg9MTgwKm9bMl1bMF0vQyxmPTE4MCpvWzJdWzFdL0M7ci5wdXNoKGEoW1toLWUsZi1lXSxbaC1lLGMrZV0sW3MrZSxjK2VdLFtzK2UsdS1lXV0sMzApKX1yZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3QubWVyZ2UocildfX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByLG4saSxhPS0xLG89dC5sZW5ndGgscz10WzBdLGw9W107KythPG87KXtyPXRbYV0sbj0oclswXS1zWzBdKS9lLGk9KHJbMV0tc1sxXSkvZTtmb3IodmFyIHU9MDt1PGU7Kyt1KWwucHVzaChbc1swXSt1Km4sc1sxXSt1KmldKTtzPXJ9cmV0dXJuIGwucHVzaChyKSxsfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxFJiZNYXRoLmFicyh0WzFdLWVbMV0pPEV9dmFyIHMsbD1bW1tbLUMsMF0sWzAsel0sW0MsMF1dXSxbW1stQywwXSxbMCwtel0sW0MsMF1dXV07ZS5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbih0LG4pe2Zvcih2YXIgaT1zWysobjwwKV0sYT1sWysobjwwKV0sdT0wLGM9aS5sZW5ndGg7dTxjOysrdSl7dmFyIGg9aVt1XTtpZihoWzBdWzBdPD10JiZ0PGhbMV1bMF0mJmhbMF1bMV08PW4mJm48aFsxXVsxXSl7dmFyIGY9ZS5pbnZlcnQodC1lKGFbdV1bMV1bMF0sMClbMF0sbik7cmV0dXJuIGZbMF0rPWFbdV1bMV1bMF0sbyhyKGZbMF0sZlsxXSksW3Qsbl0pP2Y6bnVsbH19fSk7dmFyIHU9dC5nZW8ucHJvamVjdGlvbihyKSxjPXUuc3RyZWFtO3JldHVybiB1LnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgcj11LnJvdGF0ZSgpLG49YyhlKSxhPSh1LnJvdGF0ZShbMCwwXSksYyhlKSk7cmV0dXJuIHUucm90YXRlKHIpLG4uc3BoZXJlPWZ1bmN0aW9uKCl7dC5nZW8uc3RyZWFtKGkoKSxhKX0sbn0sdS5sb2Jlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKkMvMTgwLHRbMF1bMV0qQy8xODBdLFt0WzFdWzBdKkMvMTgwLHRbMV1bMV0qQy8xODBdLFt0WzJdWzBdKkMvMTgwLHRbMl1bMV0qQy8xODBdXX0pfSksbigpLHUpOmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bWzE4MCp0WzBdWzBdL0MsMTgwKnRbMF1bMV0vQ10sWzE4MCp0WzFdWzBdL0MsMTgwKnRbMV1bMV0vQ10sWzE4MCp0WzJdWzBdL0MsMTgwKnRbMl1bMV0vQ11dfSl9KX0sdX0sdS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0uNSplKk1hdGguc3FydCgoNCtDKS9DKSxuPXMociksaT1NYXRoLmNvcyhuKTtyZXR1cm5bdC8oMi9NYXRoLnNxcnQoQyooNCtDKSkqKDEraSkpLHMoKG4rciooaSsyKSkvKDIreikpXX0sKHQuZ2VvLmVja2VydDQ9ZnVuY3Rpb24oKXtyZXR1cm4gUCh1KX0pLnJhdz11O3ZhciBSPXQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYS5yYXc7Zi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0yKnMoZS8yKTtyZXR1cm5bdCpNYXRoLmNvcyhyLzIpL01hdGguY29zKHIpLHJdfSwodC5nZW8uaGFtbWVyPWgpLnJhdz1jLGQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWzIvMypDKnQvTWF0aC5zcXJ0KEMqQy8zLWUqZSksZV19LCh0Lmdlby5rYXZyYXlza2l5Nz1mdW5jdGlvbigpe3JldHVybiBQKGQpfSkucmF3PWQscC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyLjUqTWF0aC5hdGFuKE1hdGguZXhwKC44KmUpKS0uNjI1KkNdfSwodC5nZW8ubWlsbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIFAocCl9KS5yYXc9cDt2YXIgRj0obShDKSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihyLG4pe3JldHVyblt0KnIqTWF0aC5jb3Mobj1pKG4pKSxlKk1hdGguc2luKG4pXX12YXIgaT1tKHIpO3JldHVybiBuLmludmVydD1mdW5jdGlvbihuLGkpe3ZhciBhPXMoaS9lKTtyZXR1cm5bbi8odCpNYXRoLmNvcyhhKSkscygoMiphK01hdGguc2luKDIqYSkpL3IpXX0sbn0oTWF0aC5TUVJUMi96LE1hdGguU1FSVDIsQykpOyh0Lmdlby5tb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gUChGKX0pLnJhdz1GLHYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9MjU7ZG97dmFyIGE9bipuLG89YSphO24tPXI9KG4qKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZShNYXRoLmFicyhyKT5FJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSwodC5nZW8ubmF0dXJhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIFAodil9KS5yYXc9djt2YXIgaj1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ai5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMV0qPTEuMDE0NH0pLGcuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS96LG49OTAqcixpPU1hdGgubWluKDE4LE1hdGguYWJzKG4vNSkpLGE9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKTtkb3t2YXIgbz1qW2FdWzFdLHM9althKzFdWzFdLGw9altNYXRoLm1pbigxOSxhKzIpXVsxXSx1PWwtbyxjPWwtMipzK28saD0yKihNYXRoLmFicyhyKS1zKS91LGY9Yy91LGQ9aCooMS1mKmgqKDEtMipmKmgpKTtpZihkPj0wfHwxPT09YSl7bj0oZT49MD81Oi01KSooZCtpKTt2YXIgcCxtPTUwO2Rve2k9TWF0aC5taW4oMTgsTWF0aC5hYnMobikvNSksYT1NYXRoLmZsb29yKGkpLGQ9aS1hLG89althXVsxXSxzPWpbYSsxXVsxXSxsPWpbTWF0aC5taW4oMTksYSsyKV1bMV0sbi09KHA9KGU+PTA/ejoteikqKHMrZCoobC1vKS8yK2QqZCoobC0yKnMrbykvMiktZSkqRH13aGlsZShNYXRoLmFicyhwKT5MJiYtLW0+MCk7YnJlYWt9fXdoaWxlKC0tYT49MCk7dmFyIHY9althXVswXSxnPWpbYSsxXVswXSx5PWpbTWF0aC5taW4oMTksYSsyKV1bMF07cmV0dXJuW3QvKGcrZCooeS12KS8yK2QqZCooeS0yKmcrdikvMiksbipJXX0sKHQuZ2VvLnJvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIFAoZyl9KS5yYXc9Zyx5LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L01hdGguY29zKGUpLGVdfSwodC5nZW8uc2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiBQKHkpfSkucmF3PXksYi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT5DKkMrRSkpe3ZhciByPXQsbj1lLGk9MjU7ZG97dmFyIGEsbz1NYXRoLnNpbihyKSxzPU1hdGguc2luKHIvMiksdT1NYXRoLmNvcyhyLzIpLGM9TWF0aC5zaW4obiksaD1NYXRoLmNvcyhuKSxmPU1hdGguc2luKDIqbiksZD1jKmMscD1oKmgsbT1zKnMsdj0xLXAqdSp1LGc9dj9sKGgqdSkqTWF0aC5zcXJ0KGE9MS92KTphPTAseT0yKmcqaCpzLXQsYj1nKmMtZSx4PWEqKHAqbStnKmgqdSpkKSxfPWEqKC41Km8qZi0yKmcqYypzKSx3PS4yNSphKihmKnMtZypjKnAqbyksTT1hKihkKnUrZyptKmgpLGs9Xyp3LU0qeDtpZighaylicmVhazt2YXIgQT0oYipfLXkqTSkvayxUPSh5KnctYip4KS9rO3ItPUEsbi09VH13aGlsZSgoTWF0aC5hYnMoQSk+RXx8TWF0aC5hYnMoVCk+RSkmJi0taT4wKTtyZXR1cm5bcixuXX19LCh0Lmdlby5haXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4gUChiKX0pLnJhdz1iLHguaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksdT1NYXRoLnNpbigyKm4pLGM9cypzLGg9bypvLGY9TWF0aC5zaW4ociksZD1NYXRoLmNvcyhyLzIpLHA9TWF0aC5zaW4oci8yKSxtPXAqcCx2PTEtaCpkKmQsZz12P2wobypkKSpNYXRoLnNxcnQoYT0xL3YpOmE9MCx5PS41KigyKmcqbypwK3IveiktdCxiPS41KihnKnMrbiktZSx4PS41KmEqKGgqbStnKm8qZCpjKSsuNS96LF89YSooZip1LzQtZypzKnApLHc9LjEyNSphKih1KnAtZypzKmgqZiksTT0uNSphKihjKmQrZyptKm8pKy41LGs9Xyp3LU0qeCxBPShiKl8teSpNKS9rLFQ9KHkqdy1iKngpL2s7ci09QSxuLT1UfXdoaWxlKChNYXRoLmFicyhBKT5FfHxNYXRoLmFicyhUKT5FKSYmLS1pPjApO3JldHVybltyLG5dfSwodC5nZW8ud2lua2VsMz1mdW5jdGlvbigpe3JldHVybiBQKHgpfSkucmF3PXh9ZS5leHBvcnRzPW59LHt9XSw3OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQucHJvamVjdGlvbixuPXQubG9uYXhpcyxvPXQubGF0YXhpcyxsPXQuZG9tYWluLHU9dC5mcmFtZXdpZHRofHwwLGM9ZS53KihsLnhbMV0tbC54WzBdKSxoPWUuaCoobC55WzFdLWwueVswXSksZj1uLnJhbmdlWzBdK3MsZD1uLnJhbmdlWzFdLXMscD1vLnJhbmdlWzBdK3MsbT1vLnJhbmdlWzFdLXMsdj1uLl9mdWxsUmFuZ2VbMF0rcyxnPW4uX2Z1bGxSYW5nZVsxXS1zLHk9by5fZnVsbFJhbmdlWzBdK3MsYj1vLl9mdWxsUmFuZ2VbMV0tcztyLl90cmFuc2xhdGUwPVtlLmwrYy8yLGUudCtoLzJdO3ZhciB4PWQtZixfPW0tcCx3PVtmK3gvMixwK18vMl0sTT1yLl9yb3RhdGU7cmV0dXJuIHIuX2NlbnRlcj1bd1swXStNWzBdLHdbMV0rTVsxXV0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5taW4oXypjLyh0WzFdWzBdLXRbMF1bMF0pLF8qaC8odFsxXVsxXS10WzBdWzFdKSl9dmFyIG8scyxsLHgsXz1lLnNjYWxlKCksdz1yLl90cmFuc2xhdGUwLE09aShmLHAsZCxtKSxrPWkodix5LGcsYik7bD1hKGUsTSksbz1uKGwpLHg9YShlLGspLHIuX2Z1bGxTY2FsZT1uKHgpLGUuc2NhbGUobyksbD1hKGUsTSkscz1bd1swXS1sWzBdWzBdK3Usd1sxXS1sWzBdWzFdK3VdLHIuX3RyYW5zbGF0ZT1zLGUudHJhbnNsYXRlKHMpLGw9YShlLE0pLHQuX2lzQWxiZXJzVXNhfHxlLmNsaXBFeHRlbnQobCksbz1yLnNjYWxlKm8sci5fc2NhbGU9byx0Ll93aWR0aD1NYXRoLnJvdW5kKGxbMV1bMF0pK3UsdC5faGVpZ2h0PU1hdGgucm91bmQobFsxXVsxXSkrdSx0Ll9tYXJnaW5YPShjLU1hdGgucm91bmQobFsxXVswXSkpLzIsdC5fbWFyZ2luWT0oaC1NYXRoLnJvdW5kKGxbMV1bMV0pKS8yfX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPShyLXQpLzQ7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltbW3QsZV0sW3Qsbl0sW3QraSxuXSxbdCsyKmksbl0sW3QrMyppLG5dLFtyLG5dLFtyLGVdLFtyLWksZV0sW3ItMippLGVdLFtyLTMqaSxlXSxbdCxlXV1dfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG8uZ2VvLnBhdGgoKS5wcm9qZWN0aW9uKHQpLmJvdW5kcyhlKX12YXIgbz10KCJkMyIpLHM9dCgiLi9jb25zdGFudHMiKS5jbGlwUGFkO2UuZXhwb3J0cz1ufSx7Ii4vY29uc3RhbnRzIjo3OTAsZDM6MTIwfV0sODAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4oZS5faXNTY29wZWQ/YTplLl9jbGlwQW5nbGU/czpvKSh0LGUucHJvamVjdGlvbil9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWUuX2Z1bGxTY2FsZTtyZXR1cm4gXy5iZWhhdmlvci56b29tKCkudHJhbnNsYXRlKHQudHJhbnNsYXRlKCkpLnNjYWxlKHQuc2NhbGUoKSkuc2NhbGVFeHRlbnQoWy41KnIsMTAwKnJdKX1mdW5jdGlvbiBhKHQsZSl7ZnVuY3Rpb24gcigpe18uc2VsZWN0KHRoaXMpLnN0eWxlKGspfWZ1bmN0aW9uIG4oKXtvLnNjYWxlKF8uZXZlbnQuc2NhbGUpLnRyYW5zbGF0ZShfLmV2ZW50LnRyYW5zbGF0ZSksdC5yZW5kZXIoKX1mdW5jdGlvbiBhKCl7Xy5zZWxlY3QodGhpcykuc3R5bGUoQSl9dmFyIG89dC5wcm9qZWN0aW9uLHM9aShvLGUpO3JldHVybiBzLm9uKCJ6b29tc3RhcnQiLHIpLm9uKCJ6b29tIixuKS5vbigiem9vbWVuZCIsYSksc31mdW5jdGlvbiBvKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdi5pbnZlcnQodCl9ZnVuY3Rpb24gbih0KXt2YXIgZT12KHIodCkpO3JldHVybiBNYXRoLmFicyhlWzBdLXRbMF0pPnl8fE1hdGguYWJzKGVbMV0tdFsxXSk+eX1mdW5jdGlvbiBhKCl7Xy5zZWxlY3QodGhpcykuc3R5bGUoayksbD1fLm1vdXNlKHRoaXMpLHU9di5yb3RhdGUoKSxjPXYudHJhbnNsYXRlKCksaD11LGY9cihsKX1mdW5jdGlvbiBvKCl7aWYoZD1fLm1vdXNlKHRoaXMpLG4obCkpcmV0dXJuIGcuc2NhbGUodi5zY2FsZSgpKSx2b2lkIGcudHJhbnNsYXRlKHYudHJhbnNsYXRlKCkpO3Yuc2NhbGUoXy5ldmVudC5zY2FsZSksdi50cmFuc2xhdGUoW2NbMF0sXy5ldmVudC50cmFuc2xhdGVbMV1dKSxmP3IoZCkmJihtPXIoZCkscD1baFswXSsobVswXS1mWzBdKSx1WzFdLHVbMl1dLHYucm90YXRlKHApLGg9cCk6KGw9ZCxmPXIobCkpLHQucmVuZGVyKCl9ZnVuY3Rpb24gcygpe18uc2VsZWN0KHRoaXMpLnN0eWxlKEEpfXZhciBsLHUsYyxoLGYsZCxwLG0sdj10LnByb2plY3Rpb24sZz1pKHYsZSkseT0yO3JldHVybiBnLm9uKCJ6b29tc3RhcnQiLGEpLm9uKCJ6b29tIixvKS5vbigiem9vbWVuZCIscyksZ31mdW5jdGlvbiBzKHQsZSl7ZnVuY3Rpb24gcih0KXtnKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBuKHQpe3Qoe3R5cGU6Inpvb20ifSl9ZnVuY3Rpb24gYSh0KXstLWd8fHQoe3R5cGU6Inpvb21lbmQifSl9dmFyIG8scz10LnByb2plY3Rpb24sZD17cjpzLnJvdGF0ZSgpLGs6cy5zY2FsZSgpfSxwPWkocyxlKSxtPXgocCwiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKSxnPTAseT1wLm9uO3JldHVybiBwLm9uKCJ6b29tc3RhcnQiLGZ1bmN0aW9uKCl7Xy5zZWxlY3QodGhpcykuc3R5bGUoayk7dmFyIHQ9Xy5tb3VzZSh0aGlzKSxlPXMucm90YXRlKCksaT1lLGE9cy50cmFuc2xhdGUoKSxnPXUoZSk7bz1sKHMsdCkseS5jYWxsKHAsInpvb20iLGZ1bmN0aW9uKCl7dmFyIHI9Xy5tb3VzZSh0aGlzKTtpZihzLnNjYWxlKGQuaz1fLmV2ZW50LnNjYWxlKSxvKXtpZihsKHMscikpe3Mucm90YXRlKGUpLnRyYW5zbGF0ZShhKTt2YXIgdT1sKHMscikscD1oKG8sdSkseT12KGMoZyxwKSksYj1kLnI9Zih5LG8saSk7aXNGaW5pdGUoYlswXSkmJmlzRmluaXRlKGJbMV0pJiZpc0Zpbml0ZShiWzJdKXx8KGI9aSkscy5yb3RhdGUoYiksaT1ifX1lbHNlIHQ9cixvPWwocyx0KTtuKG0ub2YodGhpcyxhcmd1bWVudHMpKX0pLHIobS5vZih0aGlzLGFyZ3VtZW50cykpfSkub24oInpvb21lbmQiLGZ1bmN0aW9uKCl7Xy5zZWxlY3QodGhpcykuc3R5bGUoQSkseS5jYWxsKHAsInpvb20iLG51bGwpLGEobS5vZih0aGlzLGFyZ3VtZW50cykpfSkub24oInpvb20ucmVkcmF3IixmdW5jdGlvbigpe3QucmVuZGVyKCl9KSxfLnJlYmluZChwLG0sIm9uIil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXQuaW52ZXJ0KGUpO3JldHVybiByJiZpc0Zpbml0ZShyWzBdKSYmaXNGaW5pdGUoclsxXSkmJmcocil9ZnVuY3Rpb24gdSh0KXt2YXIgZT0uNSp0WzBdKncscj0uNSp0WzFdKncsbj0uNSp0WzJdKncsaT1NYXRoLnNpbihlKSxhPU1hdGguY29zKGUpLG89TWF0aC5zaW4ocikscz1NYXRoLmNvcyhyKSxsPU1hdGguc2luKG4pLHU9TWF0aC5jb3Mobik7cmV0dXJuW2Eqcyp1K2kqbypsLGkqcyp1LWEqbypsLGEqbyp1K2kqcypsLGEqcypsLWkqbyp1XX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXSxvPWVbMF0scz1lWzFdLGw9ZVsyXSx1PWVbM107cmV0dXJuW3Iqby1uKnMtaSpsLWEqdSxyKnMrbipvK2kqdS1hKmwscipsLW4qdStpKm8rYSpzLHIqdStuKmwtaSpzK2Eqb119ZnVuY3Rpb24gaCh0LGUpe2lmKHQmJmUpe3ZhciByPWIodCxlKSxuPU1hdGguc3FydCh5KHIscikpLGk9LjUqTWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEseSh0LGUpKSkpLGE9TWF0aC5zaW4oaSkvbjtyZXR1cm4gbiYmW01hdGguY29zKGkpLHJbMl0qYSwtclsxXSphLHJbMF0qYV19fWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPW0oZSwyLHRbMF0pO249bShuLDEsdFsxXSksbj1tKG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLHM9ZVsxXSxsPWVbMl0sdT1uWzBdLGM9blsxXSxoPW5bMl0sZj1NYXRoLmF0YW4yKHMsbykqTSxwPU1hdGguc3FydChvKm8rcypzKTtNYXRoLmFicyhjKT5wPyhhPShjPjA/OTA6LTkwKS1mLGk9MCk6KGE9TWF0aC5hc2luKGMvcCkqTS1mLGk9TWF0aC5zcXJ0KHAqcC1jKmMpKTt2YXIgdj0xODAtYS0yKmYsZz0oTWF0aC5hdGFuMihoLHUpLU1hdGguYXRhbjIobCxpKSkqTSx5PShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihsLC1pKSkqTTtyZXR1cm4gZChyWzBdLHJbMV0sYSxnKTw9ZChyWzBdLHJbMV0sdix5KT9bYSxnLHJbMl1dOlt2LHksclsyXV19ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1wKHItdCksYT1wKG4tZSk7cmV0dXJuIE1hdGguc3FydChpKmkrYSphKX1mdW5jdGlvbiBwKHQpe3JldHVybih0JTM2MCs1NDApJTM2MC0xODB9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49cip3LGk9dC5zbGljZSgpLGE9MD09PWU/MTowLG89Mj09PWU/MToyLHM9TWF0aC5jb3MobiksbD1NYXRoLnNpbihuKTtyZXR1cm4gaVthXT10W2FdKnMtdFtvXSpsLGlbb109dFtvXSpzK3RbYV0qbCxpfWZ1bmN0aW9uIHYodCl7cmV0dXJuW01hdGguYXRhbjIoMioodFswXSp0WzFdK3RbMl0qdFszXSksMS0yKih0WzFdKnRbMV0rdFsyXSp0WzJdKSkqTSxNYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSwyKih0WzBdKnRbMl0tdFszXSp0WzFdKSkpKSpNLE1hdGguYXRhbjIoMioodFswXSp0WzNdK3RbMV0qdFsyXSksMS0yKih0WzJdKnRbMl0rdFszXSp0WzNdKSkqTV19ZnVuY3Rpb24gZyh0KXt2YXIgZT10WzBdKncscj10WzFdKncsbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX1mdW5jdGlvbiB5KHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilyKz10W25dKmVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsbj1bXTsrK2U8cjspbi5wdXNoKGFyZ3VtZW50c1tlXSk7dmFyIGk9Xy5kaXNwYXRjaC5hcHBseShudWxsLG4pO3JldHVybiBpLm9mPWZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBhO3RyeXthPW4uc291cmNlRXZlbnQ9Xy5ldmVudCxuLnRhcmdldD10LF8uZXZlbnQ9bixpW24udHlwZV0uYXBwbHkoZSxyKX1maW5hbGx5e18uZXZlbnQ9YX19fSxpfXZhciBfPXQoImQzIiksdz1NYXRoLlBJLzE4MCxNPTE4MC9NYXRoLlBJLGs9e2N1cnNvcjoicG9pbnRlciJ9LEE9e2N1cnNvcjoiYXV0byJ9O2UuZXhwb3J0cz1ufSx7ZDM6MTIwfV0sODAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJvamVjdGlvbixuPXQuem9vbTtyZXR1cm4gZnVuY3Rpb24oKXt0Lm1ha2VQcm9qZWN0aW9uKGUpLHQubWFrZVBhdGgoKSxuLnNjYWxlKHIuc2NhbGUoKSksbi50cmFuc2xhdGUoci50cmFuc2xhdGUoKSksdC5yZW5kZXIoKX19fSx7fV0sODAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLnBsb3Q9ZSx0aGlzLm1vdXNlTGlzdGVuZXI9bnVsbCx0aGlzLndoZWVsTGlzdGVuZXI9bnVsbCx0aGlzLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx0aGlzLmxhc3RQb3M9WzAsMF0sdGhpcy5ib3hFbmFibGVkPSExLHRoaXMuYm94SW5pdGVkPSExLHRoaXMuYm94U3RhcnQ9WzAsMF0sdGhpcy5ib3hFbmQ9WzAsMF0sdGhpcy5kcmFnU3RhcnQ9WzAsMF19ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKCl7dC54YXhpcy5hdXRvcmFuZ2U9ITEsdC55YXhpcy5hdXRvcmFuZ2U9ITF9ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT10LmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxyPXQueGF4aXMuX2lkLG49dC55YXhpcy5faWQsaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKC0xIT09ZVtpXVtyXSl7aWYoLTEhPT1lW2ldW25dKXJldHVybiEwO2JyZWFrfXJldHVybiExfWZ1bmN0aW9uIGkobixpLGEpe2Z1bmN0aW9uIG8oZSxyLG4pe3ZhciBpPU1hdGgubWluKHIsbiksYT1NYXRoLm1heChyLG4pO2khPT1hPyhmW2VdPWksZltlKzJdPWEsaC5kYXRhQm94PWYsdC5zZXRSYW5nZXMoZikpOih0LnNlbGVjdEJveC5zZWxlY3RCb3g9WzAsMCwxLDFdLHQuZ2xwbG90LnNldERpcnR5KCkpfXZhciBzLHUsZj10LmNhbGNEYXRhQm94KCksZD1jLnZpZXdCb3gscD1oLmxhc3RQb3NbMF0sbT1oLmxhc3RQb3NbMV0sdj1sLk1JTkRSQUcqYy5waXhlbFJhdGlvLGc9bC5NSU5aT09NKmMucGl4ZWxSYXRpbztzd2l0Y2goaSo9Yy5waXhlbFJhdGlvLGEqPWMucGl4ZWxSYXRpbyxhPWRbM10tZFsxXS1hLHQuZnVsbExheW91dC5kcmFnbW9kZSl7Y2FzZSJ6b29tIjppZihuKXt2YXIgeT1pLyhkWzJdLWRbMF0pKihmWzJdLWZbMF0pK2ZbMF0sYj1hLyhkWzNdLWRbMV0pKihmWzNdLWZbMV0pK2ZbMV07aC5ib3hJbml0ZWR8fChoLmJveFN0YXJ0WzBdPXksaC5ib3hTdGFydFsxXT1iLGguZHJhZ1N0YXJ0WzBdPWksaC5kcmFnU3RhcnRbMV09YSksaC5ib3hFbmRbMF09eSxoLmJveEVuZFsxXT1iLGguYm94SW5pdGVkPSEwLGguYm94RW5hYmxlZHx8aC5ib3hTdGFydFswXT09PWguYm94RW5kWzBdJiZoLmJveFN0YXJ0WzFdPT09aC5ib3hFbmRbMV18fChoLmJveEVuYWJsZWQ9ITApO3ZhciB4PU1hdGguYWJzKGguZHJhZ1N0YXJ0WzBdLWkpPGcsXz1NYXRoLmFicyhoLmRyYWdTdGFydFsxXS1hKTxnO2lmKCFyKCl8fHgmJl8peCYmKGguYm94RW5kWzBdPWguYm94U3RhcnRbMF0pLF8mJihoLmJveEVuZFsxXT1oLmJveFN0YXJ0WzFdKTtlbHNle3M9aC5ib3hFbmRbMF0taC5ib3hTdGFydFswXSx1PWguYm94RW5kWzFdLWguYm94U3RhcnRbMV07dmFyIHc9KGZbM10tZlsxXSkvKGZbMl0tZlswXSk7TWF0aC5hYnMocyp3KT5NYXRoLmFicyh1KT8oaC5ib3hFbmRbMV09aC5ib3hTdGFydFsxXStNYXRoLmFicyhzKSp3Kih1Pj0wPzE6LTEpLGguYm94RW5kWzFdPGZbMV0/KGguYm94RW5kWzFdPWZbMV0saC5ib3hFbmRbMF09aC5ib3hTdGFydFswXSsoZlsxXS1oLmJveFN0YXJ0WzFdKS9NYXRoLmFicyh3KSk6aC5ib3hFbmRbMV0+ZlszXSYmKGguYm94RW5kWzFdPWZbM10saC5ib3hFbmRbMF09aC5ib3hTdGFydFswXSsoZlszXS1oLmJveFN0YXJ0WzFdKS9NYXRoLmFicyh3KSkpOihoLmJveEVuZFswXT1oLmJveFN0YXJ0WzBdK01hdGguYWJzKHUpL3cqKHM+PTA/MTotMSksaC5ib3hFbmRbMF08ZlswXT8oaC5ib3hFbmRbMF09ZlswXSxoLmJveEVuZFsxXT1oLmJveFN0YXJ0WzFdKyhmWzBdLWguYm94U3RhcnRbMF0pKk1hdGguYWJzKHcpKTpoLmJveEVuZFswXT5mWzJdJiYoaC5ib3hFbmRbMF09ZlsyXSxoLmJveEVuZFsxXT1oLmJveFN0YXJ0WzFdKyhmWzJdLWguYm94U3RhcnRbMF0pKk1hdGguYWJzKHcpKSl9fWVsc2UgaC5ib3hFbmFibGVkPyhzPWguYm94U3RhcnRbMF0hPT1oLmJveEVuZFswXSx1PWguYm94U3RhcnRbMV0hPT1oLmJveEVuZFsxXSxzfHx1PyhzJiYobygwLGguYm94U3RhcnRbMF0saC5ib3hFbmRbMF0pLHQueGF4aXMuYXV0b3JhbmdlPSExKSx1JiYobygxLGguYm94U3RhcnRbMV0saC5ib3hFbmRbMV0pLHQueWF4aXMuYXV0b3JhbmdlPSExKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSk6dC5nbHBsb3Quc2V0RGlydHkoKSxoLmJveEVuYWJsZWQ9ITEsaC5ib3hJbml0ZWQ9ITEpOmguYm94SW5pdGVkJiYoaC5ib3hJbml0ZWQ9ITEpO2JyZWFrO2Nhc2UicGFuIjpoLmJveEVuYWJsZWQ9ITEsaC5ib3hJbml0ZWQ9ITEsbj8oaC5wYW5uaW5nfHwoaC5kcmFnU3RhcnRbMF09aSxoLmRyYWdTdGFydFsxXT1hKSxNYXRoLmFicyhoLmRyYWdTdGFydFswXS1pKTx2JiYoaT1oLmRyYWdTdGFydFswXSksTWF0aC5hYnMoaC5kcmFnU3RhcnRbMV0tYSk8diYmKGE9aC5kcmFnU3RhcnRbMV0pLHM9KHAtaSkqKGZbMl0tZlswXSkvKGMudmlld0JveFsyXS1jLnZpZXdCb3hbMF0pLHU9KG0tYSkqKGZbM10tZlsxXSkvKGMudmlld0JveFszXS1jLnZpZXdCb3hbMV0pLGZbMF0rPXMsZlsyXSs9cyxmWzFdKz11LGZbM10rPXUsdC5zZXRSYW5nZXMoZiksaC5wYW5uaW5nPSEwLGgubGFzdElucHV0VGltZT1EYXRlLm5vdygpLGUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCkpOmgucGFubmluZyYmKGgucGFubmluZz0hMSx0LnJlbGF5b3V0Q2FsbGJhY2soKSl9aC5sYXN0UG9zWzBdPWksaC5sYXN0UG9zWzFdPWF9dmFyIHU9dC5tb3VzZUNvbnRhaW5lcixjPXQuZ2xwbG90LGg9bmV3IG4odSxjKTtyZXR1cm4gaC5tb3VzZUxpc3RlbmVyPWEodSxpKSx1LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGZ1bmN0aW9uKHQpe3ZhciBlPXModC5jaGFuZ2VkVG91Y2hlc1swXSx1KTtpKDAsZVswXSxlWzFdKSxpKDEsZVswXSxlWzFdKX0pLHUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIGU9cyh0LmNoYW5nZWRUb3VjaGVzWzBdLHUpO2koMSxlWzBdLGVbMV0pfSksdS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24oKXtpKDAsaC5sYXN0UG9zWzBdLGgubGFzdFBvc1sxXSl9KSxoLndoZWVsTGlzdGVuZXI9byh1LGZ1bmN0aW9uKHIsbil7dmFyIGk9dC5jYWxjRGF0YUJveCgpLGE9Yy52aWV3Qm94LG89aC5sYXN0UG9zWzBdLHM9aC5sYXN0UG9zWzFdO3N3aXRjaCh0LmZ1bGxMYXlvdXQuZHJhZ21vZGUpe2Nhc2Uiem9vbSI6YnJlYWs7Y2FzZSJwYW4iOnZhciBsPU1hdGguZXhwKC4xKm4vKGFbM10tYVsxXSkpLHU9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGY9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO2lbMF09KGlbMF0tdSkqbCt1LGlbMl09KGlbMl0tdSkqbCt1LGlbMV09KGlbMV0tZikqbCtmLGlbM109KGlbM10tZikqbCtmLHQuc2V0UmFuZ2VzKGkpLGgubGFzdElucHV0VGltZT1EYXRlLm5vdygpLGUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCksdC5yZWxheW91dENhbGxiYWNrKCl9cmV0dXJuITB9KSxofXZhciBhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1pfSx7Ii4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc2OSwibW91c2UtY2hhbmdlIjo0NTAsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDUxLCJtb3VzZS13aGVlbCI6NDUzfV0sODAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bIngiLCJ5Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITEsITFdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxTaXplPVsxMiwxMl0sdGhpcy5sYWJlbEZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPSIiLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUNlbnRlcj1bMCwwLDAsMF0sdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLnRpdGxlRm9udD0ic2Fucy1zZXJpZiIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IG4odCl9dmFyIGE9dCgiLi4vcGxvdHMiKSxvPXQoIi4uL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9saWIvaHRtbDJ1bmljb2RlIiksbD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksdT1uLnByb3RvdHlwZSxjPVsieGF4aXMiLCJ5YXhpcyJdO3UubWVyZ2U9ZnVuY3Rpb24odCl7dGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1sKHQucGxvdF9iZ2NvbG9yKTt2YXIgZSxyLG4saSxhLG8sdSxoLGYsZCxwO2ZvcihkPTA7ZDwyOysrZCl7Zm9yKGU9Y1tkXSxyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0sbj0vQ2xpY2sgdG8gZW50ZXIgLisgdGl0bGUvLnRlc3Qoci50aXRsZSk/IiI6ci50aXRsZSxwPTA7cDw9MjtwKz0yKXRoaXMubGFiZWxFbmFibGVbZCtwXT0hMSx0aGlzLmxhYmVsc1tkK3BdPXMobiksdGhpcy5sYWJlbENvbG9yW2QrcF09bChyLnRpdGxlZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbZCtwXT1yLnRpdGxlZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbZCtwXT1yLnRpdGxlZm9udC5zaXplLHRoaXMubGFiZWxQYWRbZCtwXT10aGlzLmdldExhYmVsUGFkKGUsciksdGhpcy50aWNrRW5hYmxlW2QrcF09ITEsdGhpcy50aWNrQ29sb3JbZCtwXT1sKChyLnRpY2tmb250fHx7fSkuY29sb3IpLHRoaXMudGlja0FuZ2xlW2QrcF09ImF1dG8iPT09ci50aWNrYW5nbGU/MDpNYXRoLlBJKi1yLnRpY2thbmdsZS8xODAsdGhpcy50aWNrUGFkW2QrcF09dGhpcy5nZXRUaWNrUGFkKHIpLHRoaXMudGlja01hcmtMZW5ndGhbZCtwXT0wLHRoaXMudGlja01hcmtXaWR0aFtkK3BdPXIudGlja3dpZHRofHwwLHRoaXMudGlja01hcmtDb2xvcltkK3BdPWwoci50aWNrY29sb3IpLHRoaXMuYm9yZGVyTGluZUVuYWJsZVtkK3BdPSExLHRoaXMuYm9yZGVyTGluZUNvbG9yW2QrcF09bChyLmxpbmVjb2xvciksdGhpcy5ib3JkZXJMaW5lV2lkdGhbZCtwXT1yLmxpbmV3aWR0aHx8MDt1PXRoaXMuaGFzU2hhcmVkQXhpcyhyKSxhPXRoaXMuaGFzQXhpc0luRGZsdFBvcyhlLHIpJiYhdSxvPXRoaXMuaGFzQXhpc0luQWx0clBvcyhlLHIpJiYhdSxpPXIubWlycm9yfHwhMSxoPXU/LTEhPT1TdHJpbmcoaSkuaW5kZXhPZigiYWxsIik6ISFpLGY9dT8iYWxsdGlja3MiPT09aTotMSE9PVN0cmluZyhpKS5pbmRleE9mKCJ0aWNrcyIpLGE/dGhpcy5sYWJlbEVuYWJsZVtkXT0hMDpvJiYodGhpcy5sYWJlbEVuYWJsZVtkKzJdPSEwKSxhP3RoaXMudGlja0VuYWJsZVtkXT1yLnNob3d0aWNrbGFiZWxzOm8mJih0aGlzLnRpY2tFbmFibGVbZCsyXT1yLnNob3d0aWNrbGFiZWxzKSwoYXx8aCkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbZF09ci5zaG93bGluZSksKG98fGgpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2QrMl09ci5zaG93bGluZSksKGF8fGYpJiYodGhpcy50aWNrTWFya0xlbmd0aFtkXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSwob3x8ZikmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2QrMl09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksdGhpcy5ncmlkTGluZUVuYWJsZVtkXT1yLnNob3dncmlkLHRoaXMuZ3JpZExpbmVDb2xvcltkXT1sKHIuZ3JpZGNvbG9yKSx0aGlzLmdyaWRMaW5lV2lkdGhbZF09ci5ncmlkd2lkdGgsdGhpcy56ZXJvTGluZUVuYWJsZVtkXT1yLnplcm9saW5lLHRoaXMuemVyb0xpbmVDb2xvcltkXT1sKHIuemVyb2xpbmVjb2xvciksdGhpcy56ZXJvTGluZVdpZHRoW2RdPXIuemVyb2xpbmV3aWR0aH19LHUuaGFzU2hhcmVkQXhpcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9YS5nZXRTdWJwbG90SWRzKGUuZnVsbExheW91dCwiZ2wyZCIpO3JldHVybiAwIT09by5maW5kU3VicGxvdHNXaXRoQXhpcyhyLHQpLmluZGV4T2YoZS5pZCl9LHUuaGFzQXhpc0luRGZsdFBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm4ieGF4aXMiPT09dD8iYm90dG9tIj09PXI6InlheGlzIj09PXQ/ImxlZnQiPT09cjp2b2lkIDB9LHUuaGFzQXhpc0luQWx0clBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PXI6InlheGlzIj09PXQ/InJpZ2h0Ij09PXI6dm9pZCAwfSx1LmdldExhYmVsUGFkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50aXRsZWZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1lLnNpZGU/ciooMS41KyhuPzE6MCkpLTEwOnIqKDEuNSsobj8uNTowKSktMTA6InlheGlzIj09PXQ/InJpZ2h0Ij09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSx1LmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIm91dHNpZGUiPT09dC50aWNrcz8xMCt0LnRpY2tsZW46MTV9LHUuZ2V0VGlja01hcmtMZW5ndGg9ZnVuY3Rpb24odCl7aWYoIXQudGlja3MpcmV0dXJuIDA7dmFyIGU9dC50aWNrbGVuO3JldHVybiJpbnNpZGUiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9aX0seyIuLi8uLi9saWIvaHRtbDJ1bmljb2RlIjo3MjIsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc0MiwiLi4vY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vcGxvdHMiOjgyN31dLDgwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjZW5lMmQiKSxpPXQoIi4uL3Bsb3RzIiksYT10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLG89dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLHM9dCgiLi4vY2FydGVzaWFuIik7ci5uYW1lPSJnbDJkIixyLmF0dHI9WyJ4YXhpcyIsInlheGlzIl0sci5pZFJvb3Q9WyJ4IiwieSJdLHIuaWRSZWdleD1vLmlkUmVnZXgsci5hdHRyUmVnZXg9by5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsYT1pLmdldFN1YnBsb3RJZHMoZSwiZ2wyZCIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWUuX3Bsb3RzW3NdLHU9aS5nZXRTdWJwbG90RGF0YShyLCJnbDJkIixzKSxjPWwuX3NjZW5lMmQ7dm9pZCAwPT09YyYmKGM9bmV3IG4oe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLGwuX3NjZW5lMmQ9YyksYy5wbG90KHUsdC5jYWxjZGF0YSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPWkuZ2V0U3VicGxvdElkcyhuLCJnbDJkIiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgbD1hW29dLHU9bi5fcGxvdHNbbF07aWYodS5fc2NlbmUyZCl7MD09PWkuZ2V0U3VicGxvdERhdGEodCwiZ2wyZCIsbCkubGVuZ3RoJiYodS5fc2NlbmUyZC5kZXN0cm95KCksZGVsZXRlIG4uX3Bsb3RzW2xdKX19cy5jbGVhbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHMuZHJhd0ZyYW1ld29yayh0KX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0U3VicGxvdElkcyhlLCJnbDJkIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgbz1lLl9wbG90c1tyW25dXSxzPW8uX3NjZW5lMmQsbD1zLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6YS5zdmcsInhsaW5rOmhyZWYiOmwseDowLHk6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHMuZGVzdHJveSgpfX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcwNiwiLi4vY2FydGVzaWFuIjo3NzQsIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIjo3NjMsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc2OSwiLi4vcGxvdHMiOjgyNywiLi9zY2VuZTJkIjo4MDV9XSw4MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLnBpeGVsUmF0aW89dC5wbG90R2xQaXhlbFJhdGlvfHx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmlkPXQuaWQsdGhpcy5zdGF0aWNQbG90PSEhdC5zdGF0aWNQbG90LHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLnVwZGF0ZVJlZnMoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy5nbHBsb3RPcHRpb25zPXAodGhpcyksdGhpcy5nbHBsb3RPcHRpb25zLm1lcmdlKGUpLHRoaXMuZ2xwbG90PWModGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmNhbWVyYT1tKHRoaXMpLHRoaXMudHJhY2VzPXt9LHRoaXMuc3Bpa2VzPWgodGhpcy5nbHBsb3QpLHRoaXMuc2VsZWN0Qm94PWYodGhpcy5nbHBsb3Qse2lubmVyRmlsbDohMSxvdXRlckZpbGw6ITB9KSx0aGlzLmxhc3RCdXR0b25TdGF0ZT0wLHRoaXMucGlja1Jlc3VsdD1udWxsLHRoaXMuaXNNb3VzZU92ZXI9ITAsdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnN0b3BwZWQ9ITEsdGhpcy5yZWRyYXc9dGhpcy5kcmF3LmJpbmQodGhpcyksdGhpcy5yZWRyYXcoKX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPTA7cjwyOysrcil7dmFyIG49dFtyXSxpPWVbcl07aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlpZihuW2FdLnghPT1pW2FdLngpcmV0dXJuITB9cmV0dXJuITF9dmFyIGEsbyxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGM9dCgiZ2wtcGxvdDJkIiksaD10KCJnbC1zcGlrZXMyZCIpLGY9dCgiZ2wtc2VsZWN0LWJveCIpLGQ9dCgid2ViZ2wtY29udGV4dCIpLHA9dCgiLi9jb252ZXJ0IiksbT10KCIuL2NhbWVyYSIpLHY9dCgiLi4vLi4vbGliL2h0bWwydW5pY29kZSIpLGc9dCgiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIikseT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSxiPXkuZW5mb3JjZSx4PXkuY2xlYW4sXz1bInhheGlzIiwieWF4aXMiXTtlLmV4cG9ydHM9bjt2YXIgdz1uLnByb3RvdHlwZTt3Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRpY1Bsb3Qpe2lmKCEob3x8KGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbz1kKHtjYW52YXM6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3RoaXMuY2FudmFzPWEsdGhpcy5nbD1vfWVsc2V7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZT1kKHtjYW52YXM6dCxwcmVtdWx0aXBsaWVkQWxwaGE6ITB9KTtlfHxnKHRoaXMpLHRoaXMuY2FudmFzPXQsdGhpcy5nbD1lfXZhciByPXRoaXMuY2FudmFzO3Iuc3R5bGUud2lkdGg9IjEwMCUiLHIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9IjBweCIsci5zdHlsZS5sZWZ0PSIwcHgiLHIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMudXBkYXRlU2l6ZShyKSxyLmNsYXNzTmFtZSs9InVzZXItc2VsZWN0LW5vbmUiO3ZhciBuPXRoaXMuc3ZnQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtuLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbi5zdHlsZS50b3A9bi5zdHlsZS5sZWZ0PSIwcHgiLG4uc3R5bGUud2lkdGg9bi5zdHlsZS5oZWlnaHQ9IjEwMCUiLG4uc3R5bGVbInotaW5kZXgiXT0yMCxuLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIjt2YXIgaT10aGlzLm1vdXNlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIjt2YXIgcz10aGlzLmNvbnRhaW5lcjtzLmFwcGVuZENoaWxkKHIpLHMuYXBwZW5kQ2hpbGQobikscy5hcHBlbmRDaGlsZChpKTt2YXIgbD10aGlzO2kuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITB9KX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChhKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpLHRoaXMuZ2xwbG90LnNldERpcnR5KCksdGhpcy5nbHBsb3QuZHJhdygpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsbj1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgaT1uZXcgVWludDhBcnJheShyKm4qNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLG4sZS5SR0JBLGUuVU5TSUdORURfQllURSxpKTtmb3IodmFyIG89MCxzPW4tMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgdT0wO3U8NDsrK3Upe3ZhciBjPWlbNCoocipvK2wpK3VdO2lbNCoocipvK2wpK3VdPWlbNCoocipzK2wpK3VdLGlbNCoocipzK2wpK3VdPWN9dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7aC53aWR0aD1yLGguaGVpZ2h0PW47dmFyIGY9aC5nZXRDb250ZXh0KCIyZCIpLGQ9Zi5jcmVhdGVJbWFnZURhdGEocixuKTtkLmRhdGEuc2V0KGkpLGYucHV0SW1hZ2VEYXRhKGQsMCwwKTt2YXIgcDtzd2l0Y2godCl7Y2FzZSJqcGVnIjpwPWgudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpwPWgudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpwPWgudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChhKSxwfSx3LnVwZGF0ZVNpemU9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5jYW52YXMpO3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMuZnVsbExheW91dCxuPXIud2lkdGgsaT1yLmhlaWdodCxhPTB8TWF0aC5jZWlsKGUqbiksbz0wfE1hdGguY2VpbChlKmkpO3JldHVybiB0LndpZHRoPT09YSYmdC5oZWlnaHQ9PT1vfHwodC53aWR0aD1hLHQuaGVpZ2h0PW8pLHRoaXMucmVkcmF3JiZ0aGlzLnJlZHJhdygpLHR9LHcuY29tcHV0ZVRpY2tNYXJrcz1mdW5jdGlvbigpe3RoaXMueGF4aXMuc2V0U2NhbGUoKSx0aGlzLnlheGlzLnNldFNjYWxlKCk7Zm9yKHZhciB0PVtsLmNhbGNUaWNrcyh0aGlzLnhheGlzKSxsLmNhbGNUaWNrcyh0aGlzLnlheGlzKV0sZT0wO2U8MjsrK2UpZm9yKHZhciByPTA7cjx0W2VdLmxlbmd0aDsrK3IpdFtlXVtyXS50ZXh0PXYodFtlXVtyXS50ZXh0KyIiKTtyZXR1cm4gdH0sdy51cGRhdGVSZWZzPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbExheW91dD10O3ZhciBlPWwuc3VicGxvdE1hdGNoLHI9InhheGlzIit0aGlzLmlkLm1hdGNoKGUpWzFdLG49InlheGlzIit0aGlzLmlkLm1hdGNoKGUpWzJdO3RoaXMueGF4aXM9dGhpcy5mdWxsTGF5b3V0W3JdLHRoaXMueWF4aXM9dGhpcy5mdWxsTGF5b3V0W25dfSx3LnJlbGF5b3V0Q2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj10LmxheW91dDtuLnhheGlzLmF1dG9yYW5nZT1lLmF1dG9yYW5nZSxuLnhheGlzLnJhbmdlPWUucmFuZ2Uuc2xpY2UoMCksbi55YXhpcy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2Usbi55YXhpcy5yYW5nZT1yLnJhbmdlLnNsaWNlKDApO3ZhciBpPXtsYXN0SW5wdXRUaW1lOnRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWV9O2lbZS5fbmFtZV09ZS5yYW5nZS5zbGljZSgwKSxpW3IuX25hbWVdPXIucmFuZ2Uuc2xpY2UoMCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkpfSx3LmNhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbWVyYTt0aGlzLmdscGxvdC5zZXREYXRhQm94KHRoaXMuY2FsY0RhdGFCb3goKSk7dmFyIGU9dGhpcy5jb21wdXRlVGlja01hcmtzKCk7aShlLHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcykmJih0aGlzLmdscGxvdE9wdGlvbnMudGlja3M9ZSx0aGlzLmdscGxvdE9wdGlvbnMuZGF0YUJveD10LmRhdGFCb3gsdGhpcy5nbHBsb3QudXBkYXRlKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5oYW5kbGVBbm5vdGF0aW9ucygpKX0sdy5oYW5kbGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy5mdWxsTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLnhyZWY9PT10aGlzLnhheGlzLl9pZCYmbi55cmVmPT09dGhpcy55YXhpcy5faWQmJnMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSh0LHIpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFjZXM7dCYmT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3RbZV0uZGlzcG9zZSgpLGRlbGV0ZSB0W2VdfSksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuc3RhdGljUGxvdHx8dGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5jYW52YXMpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuc3ZnQ29udGFpbmVyKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm1vdXNlQ29udGFpbmVyKSx0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy5nbHBsb3Q9bnVsbCx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMubW91c2VDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGx9LHcucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMudXBkYXRlVHJhY2VzKHQsZSksdGhpcy51cGRhdGVGeChyLmRyYWdtb2RlKTt2YXIgaT1yLndpZHRoLGE9ci5oZWlnaHQ7dGhpcy51cGRhdGVTaXplKHRoaXMuY2FudmFzKTt2YXIgbz10aGlzLmdscGxvdE9wdGlvbnM7by5tZXJnZShyKSxvLnNjcmVlbkJveD1bMCwwLGksYV07dmFyIHM9e19mdWxsTGF5b3V0OntfYXhpc0NvbnN0cmFpbnRHcm91cHM6dGhpcy5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfX07eChzLHRoaXMueGF4aXMpLHgocyx0aGlzLnlheGlzKTt2YXIgdT1yLl9zaXplLGM9dGhpcy54YXhpcy5kb21haW4saD10aGlzLnlheGlzLmRvbWFpbjtvLnZpZXdCb3g9W3UubCtjWzBdKnUudyx1LmIraFswXSp1LmgsaS11LnItKDEtY1sxXSkqdS53LGEtdS50LSgxLWhbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGNbMV0tY1swXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGhbMV0taFswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLmhlaWdodD11LmgqKGhbMV0taFswXSksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5sZWZ0PXUubCtjWzBdKnUudysicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1oWzFdKSp1LmgrInB4Ijt2YXIgZj10aGlzLmJvdW5kcztmWzBdPWZbMV09MS8wLGZbMl09ZlszXT0tMS8wO3ZhciBkLHAsbT1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7Zm9yKHA9MDtwPG0ubGVuZ3RoOysrcClmb3IodmFyIHY9dGhpcy50cmFjZXNbbVtwXV0sZz0wO2c8MjsrK2cpZltnXT1NYXRoLm1pbihmW2ddLHYuYm91bmRzW2ddKSxmW2crMl09TWF0aC5tYXgoZltnKzJdLHYuYm91bmRzW2crMl0pO2ZvcihwPTA7cDwyOysrcClmW3BdPmZbcCsyXSYmKGZbcF09LTEsZltwKzJdPTEpLGQ9dGhpc1tfW3BdXSxkLl9sZW5ndGg9by52aWV3Qm94W3ArMl0tby52aWV3Qm94W3BdLGwuZG9BdXRvUmFuZ2UoZCksZC5zZXRTY2FsZSgpO2Iocyksby50aWNrcz10aGlzLmNvbXB1dGVUaWNrTWFya3MoKSxvLmRhdGFCb3g9dGhpcy5jYWxjRGF0YUJveCgpLG8ubWVyZ2Uociksbi51cGRhdGUobyksdGhpcy5nbHBsb3QuZHJhdygpfSx3LmNhbGNEYXRhQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54YXhpcyxlPXRoaXMueWF4aXMscj10LnJhbmdlLG49ZS5yYW5nZSxpPXQucjJsLGE9ZS5yMmw7cmV0dXJuW2koclswXSksYShuWzBdKSxpKHJbMV0pLGEoblsxXSldfSx3LnNldFJhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPWUubDJyLGk9ci5sMnI7ZS5yYW5nZT1bbih0WzBdKSxuKHRbMl0pXSxyLnJhbmdlPVtpKHRbMV0pLGkodFszXSldfSx3LnVwZGF0ZVRyYWNlcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0aGlzLmZ1bGxEYXRhPXQ7dDpmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbz1hW3JdLHM9dGhpcy50cmFjZXNbb107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihpPXRbbl0saS51aWQ9PT1vJiZpLnR5cGU9PT1zLnR5cGUpY29udGludWUgdDtzLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbb119Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aT10W3JdO3ZhciBsPWVbcl0sdT10aGlzLnRyYWNlc1tpLnVpZF07dT91LnVwZGF0ZShpLGwpOih1PWkuX21vZHVsZS5wbG90KHRoaXMsaSxsKSx0aGlzLnRyYWNlc1tpLnVpZF09dSl9dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmluZGV4LWUuX3RyYWNlLmluZGV4fSl9LHcudXBkYXRlRng9ZnVuY3Rpb24odCl7dGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibGFzc28iPT09dHx8InNlbGVjdCI9PT10PyJub25lIjoiYXV0byIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9InBhbiI9PT10PyJtb3ZlIjoiem9vbSI9PT10PyJjcm9zc2hhaXIiOm51bGx9LHcuZW1pdFBvaW50QWN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC50cmFjZS51aWQsaT10LnBvaW50SW5kZXgsYT0wO2E8dGhpcy5mdWxsRGF0YS5sZW5ndGg7YSsrKXRoaXMuZnVsbERhdGFbYV0udWlkPT09biYmKHI9dGhpcy5mdWxsRGF0YVthXSk7dmFyIG89e3g6dC50cmFjZUNvb3JkWzBdLHk6dC50cmFjZUNvb3JkWzFdLGN1cnZlTnVtYmVyOnIuaW5kZXgscG9pbnROdW1iZXI6aSxkYXRhOnIuX2lucHV0LGZ1bGxEYXRhOnRoaXMuZnVsbERhdGEseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfTt1LmFwcGVuZEFycmF5UG9pbnRWYWx1ZShvLHIsaSksdGhpcy5ncmFwaERpdi5lbWl0KGUse3BvaW50czpbb119KX0sdy5kcmF3PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RvcHBlZCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVkcmF3KTt2YXIgdD10aGlzLmdscGxvdCxlPXRoaXMuY2FtZXJhLHI9ZS5tb3VzZUxpc3RlbmVyLG49MT09PXRoaXMubGFzdEJ1dHRvblN0YXRlJiYwPT09ci5idXR0b25zLGk9dGhpcy5mdWxsTGF5b3V0O3RoaXMubGFzdEJ1dHRvblN0YXRlPXIuYnV0dG9ucyx0aGlzLmNhbWVyYUNoYW5nZWQoKTt2YXIgYSxvPXIueCp0LnBpeGVsUmF0aW8scz10aGlzLmNhbnZhcy5oZWlnaHQtdC5waXhlbFJhdGlvKnIueTtpZihlLmJveEVuYWJsZWQmJiJ6b29tIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBsPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLGM9MDtjPDI7YysrKWUuYm94U3RhcnRbY109PT1lLmJveEVuZFtjXSYmKGxbY109dC5kYXRhQm94W2NdLGxbYysyXT10LmRhdGFCb3hbYysyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgaD1pLl9zaXplLGY9dGhpcy54YXhpcy5kb21haW4sZD10aGlzLnlheGlzLmRvbWFpbjthPXQucGljayhvL3QucGl4ZWxSYXRpbytoLmwrZlswXSpoLncscy90LnBpeGVsUmF0aW8tKGgudCsoMS1kWzFdKSpoLmgpKTt2YXIgcD1hJiZhLm9iamVjdC5fdHJhY2UuaGFuZGxlUGljayhhKTtpZihwJiZuJiZ0aGlzLmVtaXRQb2ludEFjdGlvbihwLCJwbG90bHlfY2xpY2siKSxhJiYic2tpcCIhPT1hLm9iamVjdC5fdHJhY2UuaG92ZXJpbmZvJiZpLmhvdmVybW9kZSYmcCYmKCF0aGlzLmxhc3RQaWNrUmVzdWx0fHx0aGlzLmxhc3RQaWNrUmVzdWx0LnRyYWNlVWlkIT09cC50cmFjZS51aWR8fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzBdIT09cC5kYXRhQ29vcmRbMF18fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzFdIT09cC5kYXRhQ29vcmRbMV0pKXt2YXIgbT1wCjt0aGlzLmxhc3RQaWNrUmVzdWx0PXt0cmFjZVVpZDpwLnRyYWNlP3AudHJhY2UudWlkOm51bGwsZGF0YUNvb3JkOnAuZGF0YUNvb3JkLnNsaWNlKCl9LHRoaXMuc3Bpa2VzLnVwZGF0ZSh7Y2VudGVyOmEuZGF0YUNvb3JkfSksbS5zY3JlZW5Db29yZD1bKCh0LnZpZXdCb3hbMl0tdC52aWV3Qm94WzBdKSooYS5kYXRhQ29vcmRbMF0tdC5kYXRhQm94WzBdKS8odC5kYXRhQm94WzJdLXQuZGF0YUJveFswXSkrdC52aWV3Qm94WzBdKS90LnBpeGVsUmF0aW8sKHRoaXMuY2FudmFzLmhlaWdodC0odC52aWV3Qm94WzNdLXQudmlld0JveFsxXSkqKGEuZGF0YUNvb3JkWzFdLXQuZGF0YUJveFsxXSkvKHQuZGF0YUJveFszXS10LmRhdGFCb3hbMV0pLXQudmlld0JveFsxXSkvdC5waXhlbFJhdGlvXSx0aGlzLmVtaXRQb2ludEFjdGlvbihwLCJwbG90bHlfaG92ZXIiKTt2YXIgdj10aGlzLmZ1bGxEYXRhW20udHJhY2UuaW5kZXhdfHx7fSxnPW0ucG9pbnRJbmRleCx5PXUuY2FzdEhvdmVyaW5mbyh2LGksZyk7aWYoeSYmImFsbCIhPT15KXt2YXIgYj15LnNwbGl0KCIrIik7LTE9PT1iLmluZGV4T2YoIngiKSYmKG0udHJhY2VDb29yZFswXT12b2lkIDApLC0xPT09Yi5pbmRleE9mKCJ5IikmJihtLnRyYWNlQ29vcmRbMV09dm9pZCAwKSwtMT09PWIuaW5kZXhPZigieiIpJiYobS50cmFjZUNvb3JkWzJdPXZvaWQgMCksLTE9PT1iLmluZGV4T2YoInRleHQiKSYmKG0udGV4dExhYmVsPXZvaWQgMCksLTE9PT1iLmluZGV4T2YoIm5hbWUiKSYmKG0ubmFtZT12b2lkIDApfXUubG9uZUhvdmVyKHt4Om0uc2NyZWVuQ29vcmRbMF0seTptLnNjcmVlbkNvb3JkWzFdLHhMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKCJ4YXhpcyIsbS50cmFjZUNvb3JkWzBdKSx5TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieWF4aXMiLG0udHJhY2VDb29yZFsxXSksekxhYmVsOm0udHJhY2VDb29yZFsyXSx0ZXh0Om0udGV4dExhYmVsLG5hbWU6bS5uYW1lLGNvbG9yOnUuY2FzdEhvdmVyT3B0aW9uKHYsZywiYmdjb2xvciIpfHxtLmNvbG9yLGJvcmRlckNvbG9yOnUuY2FzdEhvdmVyT3B0aW9uKHYsZywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OnUuY2FzdEhvdmVyT3B0aW9uKHYsZywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTp1LmNhc3RIb3Zlck9wdGlvbih2LGcsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjp1LmNhc3RIb3Zlck9wdGlvbih2LGcsImZvbnQuY29sb3IiKX0se2NvbnRhaW5lcjp0aGlzLnN2Z0NvbnRhaW5lcixnZDp0aGlzLmdyYXBoRGl2fSl9fWF8fHRoaXMudW5ob3ZlcigpLHQuZHJhdygpfX0sdy51bmhvdmVyPWZ1bmN0aW9uKCl7dGhpcy5sYXN0UGlja1Jlc3VsdCYmKHRoaXMuc3Bpa2VzLnVwZGF0ZSh7fSksdGhpcy5sYXN0UGlja1Jlc3VsdD1udWxsLHRoaXMuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiKSx1LmxvbmVVbmhvdmVyKHRoaXMuc3ZnQ29udGFpbmVyKSl9LHcuaG92ZXJGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXt2YXIgcj10aGlzW3RdO3JldHVybiBsLnRpY2tUZXh0KHIsci5jMmwoZSksImhvdmVyIikudGV4dH19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vbGliL2h0bWwydW5pY29kZSI6NzIyLCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciOjc0MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo3NzEsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vY2FtZXJhIjo4MDIsIi4vY29udmVydCI6ODAzLCJnbC1wbG90MmQiOjIxNywiZ2wtc2VsZWN0LWJveCI6MjUxLCJnbC1zcGlrZXMyZCI6MjYwLCJ3ZWJnbC1jb250ZXh0Ijo1NjF9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Z1bmN0aW9uIHIoZSxyLG4sYSl7dmFyIG89cC5rZXlCaW5kaW5nTW9kZTtpZighMSE9PW8pe3ZhciBzPSJyb3RhdGUiPT09byxsPSJwYW4iPT09byxjPSJ6b29tIj09PW8sZj0hIWEuY29udHJvbCxkPSEhYS5hbHQseT0hIWEuc2hpZnQsYj0hISgxJmUpLHg9ISEoMiZlKSxfPSEhKDQmZSksdz0xL3QuY2xpZW50SGVpZ2h0LE09dyooci1tKSxrPXcqKG4tdiksQT1wLmZsaXBYPzE6LTEsVD1wLmZsaXBZPzE6LTEsUz1pKCksRT1NYXRoLlBJKnAucm90YXRlU3BlZWQ7aWYoKHMmJmImJiFmJiYhZCYmIXl8fGImJiFmJiYhZCYmeSkmJnUucm90YXRlKFMsQSpFKk0sLVQqRSprLDApLChsJiZiJiYhZiYmIWQmJiF5fHx4fHxiJiZmJiYhZCYmIXkpJiZ1LnBhbihTLC1wLnRyYW5zbGF0ZVNwZWVkKk0qaCxwLnRyYW5zbGF0ZVNwZWVkKmsqaCwwKSxjJiZiJiYhZiYmIWQmJiF5fHxffHxiJiYhZiYmZCYmIXkpe3ZhciBMPS1wLnpvb21TcGVlZCprL3dpbmRvdy5pbm5lckhlaWdodCooUy11Lmxhc3RUKCkpKjEwMDt1LnBhbihTLDAsMCxoKihNYXRoLmV4cChMKS0xKSl9cmV0dXJuIG09cix2PW4sZz1hLCEwfX10PXR8fGRvY3VtZW50LmJvZHksZT1lfHx7fTt2YXIgbj1bLjAxLDEvMF07ImRpc3RhbmNlTGltaXRzImluIGUmJihuWzBdPWUuZGlzdGFuY2VMaW1pdHNbMF0sblsxXT1lLmRpc3RhbmNlTGltaXRzWzFdKSwiem9vbU1pbiJpbiBlJiYoblswXT1lLnpvb21NaW4pLCJ6b29tTWF4ImluIGUmJihuWzFdPWUuem9vbU1heCk7dmFyIHU9YSh7Y2VudGVyOmUuY2VudGVyfHxbMCwwLDBdLHVwOmUudXB8fFswLDEsMF0sZXllOmUuZXllfHxbMCwwLDEwXSxtb2RlOmUubW9kZXx8Im9yYml0IixkaXN0YW5jZUxpbWl0czpufSksYz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0saD0wLGY9dC5jbGllbnRXaWR0aCxkPXQuY2xpZW50SGVpZ2h0LHA9e2tleUJpbmRpbmdNb2RlOiJyb3RhdGUiLHZpZXc6dSxlbGVtZW50OnQsZGVsYXk6ZS5kZWxheXx8MTYscm90YXRlU3BlZWQ6ZS5yb3RhdGVTcGVlZHx8MSx6b29tU3BlZWQ6ZS56b29tU3BlZWR8fDEsdHJhbnNsYXRlU3BlZWQ6ZS50cmFuc2xhdGVTcGVlZHx8MSxmbGlwWDohIWUuZmxpcFgsZmxpcFk6ISFlLmZsaXBZLG1vZGVzOnUubW9kZXMsdGljazpmdW5jdGlvbigpe3ZhciBlPWkoKSxyPXRoaXMuZGVsYXksbj1lLTIqcjt1LmlkbGUoZS1yKSx1LnJlY2FsY01hdHJpeChuKSx1LmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz11LmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJmNbc109PT1vW3NdLGNbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09ZiYmdC5jbGllbnRIZWlnaHQ9PT1kO3JldHVybiBmPXQuY2xpZW50V2lkdGgsZD10LmNsaWVudEhlaWdodCxhPyFsOihoPU1hdGguZXhwKHUuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXt1Lmxvb2tBdCh1Lmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe3Uucm90YXRlKHUubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7dS5wYW4odS5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXt1LnRyYW5zbGF0ZSh1Lmxhc3RUKCksdCxlLHIpfX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocCx7bWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5jb21wdXRlZE1hdHJpeH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1LnNldE1hdHJpeCh1Lmxhc3RUKCksdCksdS5jb21wdXRlZE1hdHJpeH0sZW51bWVyYWJsZTohMH0sbW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuZ2V0TW9kZSgpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dS5jb21wdXRlZFVwLnNsaWNlKCkscj11LmNvbXB1dGVkRXllLnNsaWNlKCksbj11LmNvbXB1dGVkQ2VudGVyLnNsaWNlKCk7aWYodS5zZXRNb2RlKHQpLCJ0dXJudGFibGUiPT09dCl7dmFyIGE9aSgpO3UuX2FjdGl2ZS5sb29rQXQoYSxyLG4sZSksdS5fYWN0aXZlLmxvb2tBdChhKzUwMCxyLG4sWzAsMCwxXSksdS5fYWN0aXZlLmZsdXNoKGEpfXJldHVybiB1LmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1Lmxvb2tBdCh1Lmxhc3RUKCksbnVsbCx0KSx1LmNvbXB1dGVkQ2VudGVyfSxlbnVtZXJhYmxlOiEwfSxleWU6e2dldDpmdW5jdGlvbigpe3JldHVybiB1LmNvbXB1dGVkRXllfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHUubG9va0F0KHUubGFzdFQoKSx0KSx1LmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1Lmxvb2tBdCh1Lmxhc3RUKCksbnVsbCxudWxsLHQpLHUuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBofSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHUuc2V0RGlzdGFuY2UodS5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5nZXREaXN0YW5jZUxpbWl0cyhuKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1LnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pO3ZhciBtPTAsdj0wLGc9e3NoaWZ0OiExLGNvbnRyb2w6ITEsYWx0OiExLG1ldGE6ITF9O3JldHVybiBwLm1vdXNlTGlzdGVuZXI9byh0LHIpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24oZSl7dmFyIG49bChlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3IoMCxuWzBdLG5bMV0sZykscigxLG5bMF0sblsxXSxnKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbihlKXt2YXIgbj1sKGUuY2hhbmdlZFRvdWNoZXNbMF0sdCk7cigxLG5bMF0sblsxXSxnKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGZ1bmN0aW9uKCl7cigwLG0sdixnKX0pLHAud2hlZWxMaXN0ZW5lcj1zKHQsZnVuY3Rpb24odCxlKXtpZighMSE9PXAua2V5QmluZGluZ01vZGUpe3ZhciByPXAuZmxpcFg/MTotMSxuPXAuZmxpcFk/MTotMSxhPWkoKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSl1LnJvdGF0ZShhLDAsMCwtdCpyKk1hdGguUEkqcC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZXt2YXIgbz0tcC56b29tU3BlZWQqbiplL3dpbmRvdy5pbm5lckhlaWdodCooYS11Lmxhc3RUKCkpLzEwMDt1LnBhbihhLDAsMCxoKihNYXRoLmV4cChvKS0xKSl9fX0sITApLHB9ZS5leHBvcnRzPW47dmFyIGk9dCgicmlnaHQtbm93IiksYT10KCIzZC12aWV3Iiksbz10KCJtb3VzZS1jaGFuZ2UiKSxzPXQoIm1vdXNlLXdoZWVsIiksbD10KCJtb3VzZS1ldmVudC1vZmZzZXQiKX0seyIzZC12aWV3IjozNSwibW91c2UtY2hhbmdlIjo0NTAsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDUxLCJtb3VzZS13aGVlbCI6NDUzLCJyaWdodC1ub3ciOjUwMH1dLDgwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjZW5lIiksaT10KCIuLi9wbG90cyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0iZ2wzZCIsci5hdHRyPSJzY2VuZSIsci5pZFJvb3Q9InNjZW5lIixyLmlkUmVnZXg9L15zY2VuZShbMi05XXxbMS05XVswLTldKyk/JC8sci5hdHRyUmVnZXg9L15zY2VuZShbMi05XXxbMS05XVswLTldKyk/JC8sci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbz1pLmdldFN1YnBsb3RJZHMoZSwiZ2wzZCIpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXSx1PWkuZ2V0U3VicGxvdERhdGEociwiZ2wzZCIsbCksYz1lW2xdLGg9Yy5fc2NlbmU7aHx8KGg9bmV3IG4oe2lkOmwsZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLGMuX3NjZW5lPWgpLGguY2FtZXJhSW5pdGlhbHx8KGguY2FtZXJhSW5pdGlhbD1hLmV4dGVuZERlZXAoe30sYy5jYW1lcmEpKSxoLnBsb3QodSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPWkuZ2V0U3VicGxvdElkcyhuLCJnbDNkIiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dOyFlW3NdJiZuW3NdLl9zY2VuZSYmKG5bc10uX3NjZW5lLmRlc3Ryb3koKSxuLl9pbmZvbGF5ZXImJm4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrcykucmVtb3ZlKCkpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0U3VicGxvdElkcyhlLCJnbDNkIiksbj1lLl9zaXplLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9ZVtyW2FdXSxsPXMuZG9tYWluLHU9cy5fc2NlbmUsYz11LnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOmMseDpuLmwrbi53KmwueFswXSx5Om4udCtuLmgqKDEtbC55WzFdKSx3aWR0aDpuLncqKGwueFsxXS1sLnhbMF0pLGhlaWdodDpuLmgqKGwueVsxXS1sLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksdS5kZXN0cm95KCl9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaCgvXnNjZW5lWzAtOV0qJC8pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksInNjZW5lIitlfX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcwNiwiLi4vLi4vbGliIjo3MjQsIi4uL3Bsb3RzIjo4MjcsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjgwOCwiLi9sYXlvdXQvZGVmYXVsdHMiOjgxMiwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMywiLi9zY2VuZSI6ODE3fV0sODA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoic2NlbmUifX19LHt9XSw4MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3Zpc2libGU6aS52aXNpYmxlLHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Mn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KSJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOmkudGl0bGUsdGl0bGVmb250OmkudGl0bGVmb250LHR5cGU6aS50eXBlLGF1dG9yYW5nZTppLmF1dG9yYW5nZSxyYW5nZW1vZGU6aS5yYW5nZW1vZGUscmFuZ2U6aS5yYW5nZSx0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsbWlycm9yOmkubWlycm9yLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OiJyZ2IoMjA0LCAyMDQsIDIwNCkifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGh9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NX1dLDgxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuL2F4aXNfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksbD1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBpLmNvZXJjZShjLGgsYSx0LGUpfWZvcih2YXIgYyxoLGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGQ9bFtmXTtjPXRbZF18fHt9LGg9ZVtkXT17X2lkOmRbMF0rci5zY2VuZSxfbmFtZTpkfSxvKGMsaCx1LHIuZGF0YSkscyhjLGgsdSx7Zm9udDpyLmZvbnQsbGV0dGVyOmRbMF0sZGF0YTpyLmRhdGEsc2hvd0dyaWQ6ITAsYmdDb2xvcjpyLmJnQ29sb3IsY2FsZW5kYXI6ci5jYWxlbmRhcn0pLHUoImdyaWRjb2xvciIsbihoLmNvbG9yLHIuYmdDb2xvciwxMzYwMC8xODcpLnRvUmdiU3RyaW5nKCkpLHUoInRpdGxlIixkWzBdKSxoLnNldFNjYWxlPWkubm9vcCx1KCJzaG93c3Bpa2VzIikmJih1KCJzcGlrZXNpZGVzIiksdSgic3Bpa2V0aGlja25lc3MiKSx1KCJzcGlrZWNvbG9yIixoLmNvbG9yKSksdSgic2hvd2F4ZXNsYWJlbHMiKSx1KCJzaG93YmFja2dyb3VuZCIpJiZ1KCJiYWNrZ3JvdW5kY29sb3IiKX19fSx7Ii4uLy4uLy4uL2xpYiI6NzI0LCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6NzY2LCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyI6Nzg2LCIuL2F4aXNfYXR0cmlidXRlcyI6ODA5LHRpbnljb2xvcjI6NTMyfV0sODExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxOCwxOCwxOF0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9WyJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiXSx0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxBbmdsZT1bMCwwLDBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzMwLDMwLDMwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVsxMCwxMCwxMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITAsITAsITBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZGVmYXVsdFRpY2tQYWQ9dGhpcy50aWNrUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExhYmVsUGFkPXRoaXMubGFiZWxQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGg9dGhpcy5saW5lVGlja0xlbmd0aC5zbGljZSgpfWZ1bmN0aW9uIGkodCl7dmFyIGU9bmV3IG47cmV0dXJuIGUubWVyZ2UodCksZX12YXIgYT10KCIuLi8uLi8uLi9saWIvaHRtbDJ1bmljb2RlIiksbz10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Iikscz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO24ucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPDM7KytyKXt2YXIgbj10W3Nbcl1dO24udmlzaWJsZT8oZS5sYWJlbHNbcl09YShuLnRpdGxlKSwidGl0bGVmb250ImluIG4mJihuLnRpdGxlZm9udC5jb2xvciYmKGUubGFiZWxDb2xvcltyXT1vKG4udGl0bGVmb250LmNvbG9yKSksbi50aXRsZWZvbnQuZmFtaWx5JiYoZS5sYWJlbEZvbnRbcl09bi50aXRsZWZvbnQuZmFtaWx5KSxuLnRpdGxlZm9udC5zaXplJiYoZS5sYWJlbFNpemVbcl09bi50aXRsZWZvbnQuc2l6ZSkpLCJzaG93bGluZSJpbiBuJiYoZS5saW5lRW5hYmxlW3JdPW4uc2hvd2xpbmUpLCJsaW5lY29sb3IiaW4gbiYmKGUubGluZUNvbG9yW3JdPW8obi5saW5lY29sb3IpKSwibGluZXdpZHRoImluIG4mJihlLmxpbmVXaWR0aFtyXT1uLmxpbmV3aWR0aCksInNob3dncmlkImluIG4mJihlLmdyaWRFbmFibGVbcl09bi5zaG93Z3JpZCksImdyaWRjb2xvciJpbiBuJiYoZS5ncmlkQ29sb3Jbcl09byhuLmdyaWRjb2xvcikpLCJncmlkd2lkdGgiaW4gbiYmKGUuZ3JpZFdpZHRoW3JdPW4uZ3JpZHdpZHRoKSwibG9nIj09PW4udHlwZT9lLnplcm9FbmFibGVbcl09ITE6Inplcm9saW5lImluIG4mJihlLnplcm9FbmFibGVbcl09bi56ZXJvbGluZSksInplcm9saW5lY29sb3IiaW4gbiYmKGUuemVyb0xpbmVDb2xvcltyXT1vKG4uemVyb2xpbmVjb2xvcikpLCJ6ZXJvbGluZXdpZHRoImluIG4mJihlLnplcm9MaW5lV2lkdGhbcl09bi56ZXJvbGluZXdpZHRoKSwidGlja3MiaW4gbiYmbi50aWNrcz9lLmxpbmVUaWNrRW5hYmxlW3JdPSEwOmUubGluZVRpY2tFbmFibGVbcl09ITEsInRpY2tsZW4iaW4gbiYmKGUubGluZVRpY2tMZW5ndGhbcl09ZS5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoW3JdPW4udGlja2xlbiksInRpY2tjb2xvciJpbiBuJiYoZS5saW5lVGlja0NvbG9yW3JdPW8obi50aWNrY29sb3IpKSwidGlja3dpZHRoImluIG4mJihlLmxpbmVUaWNrV2lkdGhbcl09bi50aWNrd2lkdGgpLCJ0aWNrYW5nbGUiaW4gbiYmKGUudGlja0FuZ2xlW3JdPSJhdXRvIj09PW4udGlja2FuZ2xlPzA6TWF0aC5QSSotbi50aWNrYW5nbGUvMTgwKSwic2hvd3RpY2tsYWJlbHMiaW4gbiYmKGUudGlja0VuYWJsZVtyXT1uLnNob3d0aWNrbGFiZWxzKSwidGlja2ZvbnQiaW4gbiYmKG4udGlja2ZvbnQuY29sb3ImJihlLnRpY2tDb2xvcltyXT1vKG4udGlja2ZvbnQuY29sb3IpKSxuLnRpY2tmb250LmZhbWlseSYmKGUudGlja0ZvbnRbcl09bi50aWNrZm9udC5mYW1pbHkpLG4udGlja2ZvbnQuc2l6ZSYmKGUudGlja1NpemVbcl09bi50aWNrZm9udC5zaXplKSksIm1pcnJvciJpbiBuPy0xIT09WyJ0aWNrcyIsImFsbCIsImFsbHRpY2tzIl0uaW5kZXhPZihuLm1pcnJvcik/KGUubGluZVRpY2tNaXJyb3Jbcl09ITAsZS5saW5lTWlycm9yW3JdPSEwKTohMD09PW4ubWlycm9yPyhlLmxpbmVUaWNrTWlycm9yW3JdPSExLGUubGluZU1pcnJvcltyXT0hMCk6KGUubGluZVRpY2tNaXJyb3Jbcl09ITEsZS5saW5lTWlycm9yW3JdPSExKTplLmxpbmVNaXJyb3Jbcl09ITEsInNob3diYWNrZ3JvdW5kImluIG4mJiExIT09bi5zaG93YmFja2dyb3VuZD8oZS5iYWNrZ3JvdW5kRW5hYmxlW3JdPSEwLGUuYmFja2dyb3VuZENvbG9yW3JdPW8obi5iYWNrZ3JvdW5kY29sb3IpKTplLmJhY2tncm91bmRFbmFibGVbcl09ITEpOihlLnRpY2tFbmFibGVbcl09ITEsZS5sYWJlbEVuYWJsZVtyXT0hMSxlLmxpbmVFbmFibGVbcl09ITEsZS5saW5lVGlja0VuYWJsZVtyXT0hMSxlLmdyaWRFbmFibGVbcl09ITEsZS56ZXJvRW5hYmxlW3JdPSExLGUuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSl9fSxlLmV4cG9ydHM9aX0seyIuLi8uLi8uLi9saWIvaHRtbDJ1bmljb2RlIjo3MjIsIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc0Mn1dLDgxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2Zvcih2YXIgaT1yKCJiZ2NvbG9yIikscz1hLmNvbWJpbmUoaSxuLnBhcGVyX2JnY29sb3IpLGM9T2JqZWN0LmtleXModS5jYW1lcmEpLGg9MDtoPGMubGVuZ3RoO2grKylyKCJjYW1lcmEuIitjW2hdKyIueCIpLHIoImNhbWVyYS4iK2NbaF0rIi55IikscigiY2FtZXJhLiIrY1toXSsiLnoiKTt2YXIgZj0hIXIoImFzcGVjdHJhdGlvLngiKSYmISFyKCJhc3BlY3RyYXRpby55IikmJiEhcigiYXNwZWN0cmF0aW8ueiIpLGQ9Zj8ibWFudWFsIjoiYXV0byIscD1yKCJhc3BlY3Rtb2RlIixkKTtmfHwodC5hc3BlY3RyYXRpbz1lLmFzcGVjdHJhdGlvPXt4OjEseToxLHo6MX0sIm1hbnVhbCI9PT1wJiYoZS5hc3BlY3Rtb2RlPSJhdXRvIikpLGwodCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6bi5mdWxsRGF0YSxiZ0NvbG9yOnMsY2FsZW5kYXI6bi5jYWxlbmRhcn0pLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsbikscigiZHJhZ21vZGUiLG4uZ2V0RGZsdEZyb21MYXlvdXQoImRyYWdtb2RlIikpLHIoImhvdmVybW9kZSIsbi5nZXREZmx0RnJvbUxheW91dCgiaG92ZXJtb2RlIikpfXZhciBpPXQoIi4uLy4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxsPXQoIi4vYXhpc19kZWZhdWx0cyIpLHU9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShlKXtpZighbyl7cmV0dXJuIGkudmFsaWRhdGUodFtlXSx1W2VdKT90W2VdOnZvaWQgMH19dmFyIG89ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aD4xO3ModCxlLHIse3R5cGU6ImdsM2QiLGF0dHJpYnV0ZXM6dSxoYW5kbGVEZWZhdWx0czpuLGZ1bGxMYXlvdXQ6ZSxmb250OmUuZm9udCxmdWxsRGF0YTpyLGdldERmbHRGcm9tTGF5b3V0OmEscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsY2FsZW5kYXI6ZS5jYWxlbmRhcn0pfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uLy4uL2xpYiI6NzI0LCIuLi8uLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIjo4MzQsIi4vYXhpc19kZWZhdWx0cyI6ODEwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MTN9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJue3g6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDp0fSx5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6ZX0sejp7dmFsVHlwZToibnVtYmVyIixkZmx0OnJ9fX12YXIgaT10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbL15zY2VuZShbMi05XXxbMS05XVswLTldKyk/XC5hbm5vdGF0aW9ucy9dLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIn0sY2FtZXJhOnt1cDphKG4oMCwwLDEpLHt9KSxjZW50ZXI6YShuKDAsMCwwKSx7fSksZXllOmEobigxLjI1LDEuMjUsMS4yNSkse30pfSxkb21haW46e3g6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9XSxkZmx0OlswLDFdfSx5Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX19LGFzcGVjdG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJjdWJlIiwiZGF0YSIsIm1hbnVhbCJdLGRmbHQ6ImF1dG8ifSxhc3BlY3RyYXRpbzp7eDp7dmFsVHlwZToibnVtYmVyIixtaW46MH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46MH0sejp7dmFsVHlwZToibnVtYmVyIixtaW46MH19LHhheGlzOmkseWF4aXM6aSx6YXhpczppLGRyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcmJpdCIsInR1cm50YWJsZSIsInpvb20iLCJwYW4iLCExXSxkZmx0OiJ0dXJudGFibGUifSxob3Zlcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb3Nlc3QiLCExXSxkZmx0OiJjbG9zZXN0In0sX2RlcHJlY2F0ZWQ6e2NhbWVyYXBvc2l0aW9uOnt2YWxUeXBlOiJpbmZvX2FycmF5In19fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4vYXhpc19hdHRyaWJ1dGVzIjo4MDl9XSw4MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdfWZ1bmN0aW9uIGkodCl7dmFyIGU9bmV3IG47cmV0dXJuIGUubWVyZ2UodCksZX12YXIgYT10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO24ucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MzsrK2Upe3ZhciByPXRbb1tlXV07ci52aXNpYmxlPyh0aGlzLmVuYWJsZWRbZV09ci5zaG93c3Bpa2VzLHRoaXMuY29sb3JzW2VdPWEoci5zcGlrZWNvbG9yKSx0aGlzLmRyYXdTaWRlc1tlXT1yLnNwaWtlc2lkZXMsdGhpcy5saW5lV2lkdGhbZV09ci5zcGlrZXRoaWNrbmVzcyk6KHRoaXMuZW5hYmxlZFtlXT0hMSx0aGlzLmRyYXdTaWRlc1tlXT0hMSl9fSxlLmV4cG9ydHM9aX0seyIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDJ9XSw4MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KDMpLHI9MDtyPDM7KytyKXtmb3IodmFyIG49dFtyXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7KythKWlbYV09blthXS54O2Vbcl09aX1yZXR1cm4gZX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxpPXQuZnVsbFNjZW5lTGF5b3V0LGM9W1tdLFtdLFtdXSxoPTA7aDwzOysraCl7dmFyIGY9aVtsW2hdXTtpZihmLl9sZW5ndGg9KHJbaF0uaGktcltoXS5sbykqcltoXS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVtoXSxNYXRoLmFicyhmLl9sZW5ndGgpPT09MS8wKWNbaF09W107ZWxzZXtmLnJhbmdlWzBdPXJbaF0ubG8vdC5kYXRhU2NhbGVbaF0sZi5yYW5nZVsxXT1yW2hdLmhpL3QuZGF0YVNjYWxlW2hdLGYuX209MS8odC5kYXRhU2NhbGVbaF0qcltoXS5waXhlbHNQZXJEYXRhVW5pdCksZi5yYW5nZVswXT09PWYucmFuZ2VbMV0mJihmLnJhbmdlWzBdLT0xLGYucmFuZ2VbMV0rPTEpO3ZhciBkPWYudGlja21vZGU7aWYoImF1dG8iPT09Zi50aWNrbW9kZSl7Zi50aWNrbW9kZT0ibGluZWFyIjt2YXIgcD1mLm50aWNrc3x8by5jb25zdHJhaW4oZi5fbGVuZ3RoLzQwLDQsOSk7YS5hdXRvVGlja3MoZixNYXRoLmFicyhmLnJhbmdlWzFdLWYucmFuZ2VbMF0pL3ApfWZvcih2YXIgbT1hLmNhbGNUaWNrcyhmKSx2PTA7djxtLmxlbmd0aDsrK3YpbVt2XS54PW1bdl0ueCp0LmRhdGFTY2FsZVtoXSxtW3ZdLnRleHQ9cyhtW3ZdLnRleHQpO2NbaF09bSxmLnRpY2ttb2RlPWR9fWUudGlja3M9Yztmb3IodmFyIGg9MDtoPDM7KytoKXt1W2hdPS41Kih0LmdscGxvdC5ib3VuZHNbMF1baF0rdC5nbHBsb3QuYm91bmRzWzFdW2hdKTtmb3IodmFyIHY9MDt2PDI7Kyt2KWUuYm91bmRzW3ZdW2hdPXQuZ2xwbG90LmJvdW5kc1t2XVtoXX10LmNvbnRvdXJMZXZlbHM9bihjKX1lLmV4cG9ydHM9aTt2YXIgYT10KCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vLi4vbGliIikscz10KCIuLi8uLi8uLi9saWIvaHRtbDJ1bmljb2RlIiksbD1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLHU9WzAsMCwwXX0seyIuLi8uLi8uLi9saWIiOjcyNCwiLi4vLi4vLi4vbGliL2h0bWwydW5pY29kZSI6NzIyLCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyI6NzY0fV0sODE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGk9WzAsMCwwLDBdO2ZvcihyPTA7cjw0Oysrcilmb3Iobj0wO248NDsrK24paVtuXSs9dFs0KnIrbl0qZVtyXTtyZXR1cm4gaX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIG4odC5wcm9qZWN0aW9uLG4odC52aWV3LG4odC5tb2RlbCxbZVswXSxlWzFdLGVbMl0sMV0pKSl9ZS5leHBvcnRzPWl9LHt9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49dC5mdWxsU2NlbmVMYXlvdXRbZV07cmV0dXJuIHYudGlja1RleHQobixuLmQybChyKSwiaG92ZXIiKS50ZXh0fXZhciByLG49dC5zdmdDb250YWluZXIsaT10LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkud2lkdGgsbz1pLmhlaWdodDtuLnNldEF0dHJpYnV0ZU5TKG51bGwsInZpZXdCb3giLCIwIDAgIithKyIgIitvKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixhKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsbyksayh0KSx0LmdscGxvdC5heGVzLnVwZGF0ZSh0LmF4ZXNPcHRpb25zKTtmb3IodmFyIHM9T2JqZWN0LmtleXModC50cmFjZXMpLGw9bnVsbCx1PXQuZ2xwbG90LnNlbGVjdGlvbixjPTA7YzxzLmxlbmd0aDsrK2Mpcj10LnRyYWNlc1tzW2NdXSwic2tpcCIhPT1yLmRhdGEuaG92ZXJpbmZvJiZyLmhhbmRsZVBpY2sodSkmJihsPXIpLHIuc2V0Q29udG91ckxldmVscyYmci5zZXRDb250b3VyTGV2ZWxzKCk7dmFyIGg7aWYobnVsbCE9PWwpe3ZhciBmPV8odC5nbHBsb3QuY2FtZXJhUGFyYW1zLHUuZGF0YUNvb3JkaW5hdGUpO3I9bC5kYXRhO3ZhciBkPXUuaW5kZXgscD1nLmNhc3RIb3ZlcmluZm8ocix0LmZ1bGxMYXlvdXQsZCksbT1lKCJ4YXhpcyIsdS50cmFjZUNvb3JkaW5hdGVbMF0pLHk9ZSgieWF4aXMiLHUudHJhY2VDb29yZGluYXRlWzFdKSxiPWUoInpheGlzIix1LnRyYWNlQ29vcmRpbmF0ZVsyXSk7aWYoImFsbCIhPT1wKXt2YXIgeD1wLnNwbGl0KCIrIik7LTE9PT14LmluZGV4T2YoIngiKSYmKG09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieSIpJiYoeT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ6IikmJihiPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInRleHQiKSYmKHUudGV4dExhYmVsPXZvaWQgMCksLTE9PT14LmluZGV4T2YoIm5hbWUiKSYmKGwubmFtZT12b2lkIDApfXQuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSYmZy5sb25lSG92ZXIoe3g6KC41Ky41KmZbMF0vZlszXSkqYSx5OiguNS0uNSpmWzFdL2ZbM10pKm8seExhYmVsOm0seUxhYmVsOnksekxhYmVsOmIsdGV4dDp1LnRleHRMYWJlbCxuYW1lOmwubmFtZSxjb2xvcjpnLmNhc3RIb3Zlck9wdGlvbihyLGQsImJnY29sb3IiKXx8bC5jb2xvcixib3JkZXJDb2xvcjpnLmNhc3RIb3Zlck9wdGlvbihyLGQsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpnLmNhc3RIb3Zlck9wdGlvbihyLGQsImZvbnQuZmFtaWx5IiksZm9udFNpemU6Zy5jYXN0SG92ZXJPcHRpb24ocixkLCJmb250LnNpemUiKSxmb250Q29sb3I6Zy5jYXN0SG92ZXJPcHRpb24ocixkLCJmb250LmNvbG9yIil9LHtjb250YWluZXI6bixnZDp0LmdyYXBoRGl2fSk7dmFyIHc9e3g6dS50cmFjZUNvb3JkaW5hdGVbMF0seTp1LnRyYWNlQ29vcmRpbmF0ZVsxXSx6OnUudHJhY2VDb29yZGluYXRlWzJdLGRhdGE6ci5faW5wdXQsZnVsbERhdGE6cixjdXJ2ZU51bWJlcjpyLmluZGV4LHBvaW50TnVtYmVyOmR9O2cuYXBwZW5kQXJyYXlQb2ludFZhbHVlKHcscixkKTt2YXIgTT17cG9pbnRzOlt3XX07dS5idXR0b25zJiZ1LmRpc3RhbmNlPDU/dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfY2xpY2siLE0pOnQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2hvdmVyIixNKSxoPU19ZWxzZSBnLmxvbmVVbmhvdmVyKG4pLHQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGgpO3QuZHJhd0Fubm90YXRpb25zKHQpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIGE9e2NhbnZhczpyLGdsOmksY29udGFpbmVyOnQuY29udGFpbmVyLGF4ZXM6dC5heGVzT3B0aW9ucyxzcGlrZXM6dC5zcGlrZU9wdGlvbnMscGlja1JhZGl1czoxMCxzbmFwVG9EYXRhOiEwLGF1dG9TY2FsZTohMCxhdXRvQm91bmRzOiExfTtpZih0LnN0YXRpY01vZGUpe2lmKCEoaHx8KGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksaD1kKHtjYW52YXM6YyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJlcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO2EucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sYS5nbD1oLGEuY2FudmFzPWN9dHJ5e3QuZ2xwbG90PWYoYSl9Y2F0Y2goZSl7Yih0KX12YXIgbz1mdW5jdGlvbih0KXtpZighMSE9PXQuZnVsbFNjZW5lTGF5b3V0LmRyYWdtb2RlKXt2YXIgZT17fTtlW3QuaWQrIi5jYW1lcmEiXT11KHQuY2FtZXJhKSx0LnNhdmVDYW1lcmEodC5ncmFwaERpdi5sYXlvdXQpLHQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixlKX19O2lmKHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixvLmJpbmQobnVsbCx0KSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixvLmJpbmQobnVsbCx0KSksdC5zdGF0aWNNb2RlfHx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsZnVuY3Rpb24odCl7bS53YXJuKCJMb3N0IFdlYkdMIGNvbnRleHQuIiksdC5wcmV2ZW50RGVmYXVsdCgpfSksIXQuY2FtZXJhKXt2YXIgcz10LmZ1bGxTY2VuZUxheW91dC5jYW1lcmE7dC5jYW1lcmE9eCh0LmNvbnRhaW5lcix7Y2VudGVyOltzLmNlbnRlci54LHMuY2VudGVyLnkscy5jZW50ZXIuel0sZXllOltzLmV5ZS54LHMuZXllLnkscy5leWUuel0sdXA6W3MudXAueCxzLnVwLnkscy51cC56XSx6b29tTWluOi4xLHpvb21NYXg6MTAwLG1vZGU6Im9yYml0In0pfXJldHVybiB0LmdscGxvdC5jYW1lcmE9dC5jYW1lcmEsdC5nbHBsb3Qub25jb250ZXh0bG9zcz1mdW5jdGlvbigpe3QucmVjb3ZlckNvbnRleHQoKX0sdC5nbHBsb3Qub25yZW5kZXI9bi5iaW5kKG51bGwsdCksdC50cmFjZXM9e30sITB9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dC5jb250YWluZXI7dGhpcy5ncmFwaERpdj10LmdyYXBoRGl2O3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTthLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9YS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGEuc3R5bGVbInotaW5kZXgiXT0yMCxhLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixyLmFwcGVuZENoaWxkKGEpLHRoaXMuc3ZnQ29udGFpbmVyPWEsci5pZD10LmlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD1yLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZS53aWR0aD1yLnN0eWxlLmhlaWdodD0iMTAwJSIsbi5hcHBlbmRDaGlsZChyKSx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmlkPXQuaWR8fCJzY2VuZSIsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9ZVt0aGlzLmlkXSx0aGlzLnBsb3RBcmdzPVtbXSx7fSx7fV0sdGhpcy5heGVzT3B0aW9ucz13KGVbdGhpcy5pZF0pLHRoaXMuc3Bpa2VPcHRpb25zPU0oZVt0aGlzLmlkXSksdGhpcy5jb250YWluZXI9cix0aGlzLnN0YXRpY01vZGU9ISF0LnN0YXRpY1Bsb3QsdGhpcy5waXhlbFJhdGlvPXQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPXAuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiY29udmVydCIpLHRoaXMuZHJhd0Fubm90YXRpb25zPXAuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiZHJhdyIpLGkodGhpcyxlKX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89MDtvPGUubGVuZ3RoOysrbylpZihBcnJheS5pc0FycmF5KGVbb10pKWZvcih2YXIgcz0wO3M8ZVtvXS5sZW5ndGg7KytzKWE9dC5kMmwoZVtvXVtzXSwwLGkpLCFpc05hTihhKSYmaXNGaW5pdGUoYSkmJihuWzBdW3JdPU1hdGgubWluKG5bMF1bcl0sYSksblsxXVtyXT1NYXRoLm1heChuWzFdW3JdLGEpKTtlbHNlIGE9dC5kMmwoZVtvXSwwLGkpLCFpc05hTihhKSYmaXNGaW5pdGUoYSkmJihuWzBdW3JdPU1hdGgubWluKG5bMF1bcl0sYSksblsxXVtyXT1NYXRoLm1heChuWzFdW3JdLGEpKX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj10LmZ1bGxTY2VuZUxheW91dDtvKG4ueGF4aXMsZS54LDAscixlLnhjYWxlbmRhciksbyhuLnlheGlzLGUueSwxLHIsZS55Y2FsZW5kYXIpLG8obi56YXhpcyxlLnosMixyLGUuemNhbGVuZGFyKX1mdW5jdGlvbiBsKHQpe3JldHVybltbdC5leWUueCx0LmV5ZS55LHQuZXllLnpdLFt0LmNlbnRlci54LHQuY2VudGVyLnksdC5jZW50ZXIuel0sW3QudXAueCx0LnVwLnksdC51cC56XV19ZnVuY3Rpb24gdSh0KXtyZXR1cm57dXA6e3g6dC51cFswXSx5OnQudXBbMV0sejp0LnVwWzJdfSxjZW50ZXI6e3g6dC5jZW50ZXJbMF0seTp0LmNlbnRlclsxXSx6OnQuY2VudGVyWzJdfSxleWU6e3g6dC5leWVbMF0seTp0LmV5ZVsxXSx6OnQuZXllWzJdfX19dmFyIGMsaCxmPXQoImdsLXBsb3QzZCIpLGQ9dCgid2ViZ2wtY29udGV4dCIpLHA9dCgiLi4vLi4vcmVnaXN0cnkiKSxtPXQoIi4uLy4uL2xpYiIpLHY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx5PXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxiPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLHg9dCgiLi9jYW1lcmEiKSxfPXQoIi4vcHJvamVjdCIpLHc9dCgiLi9sYXlvdXQvY29udmVydCIpLE09dCgiLi9sYXlvdXQvc3Bpa2VzIiksaz10KCIuL2xheW91dC90aWNrX21hcmtzIiksQT1hLnByb3RvdHlwZTtBLnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybiByLmlzQ29udGV4dExvc3QoKT92b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KTppKGUsZS5mdWxsTGF5b3V0LG4scik/dm9pZCBlLnBsb3QuYXBwbHkoZSxlLnBsb3RBcmdzKTp2b2lkIG0uZXJyb3IoIkNhdGFzdHJvcGhpYyBhbmQgdW5yZWNvdmVyYWJsZSBXZWJHTCBlcnJvci4gQ29udGV4dCBsb3N0LiIpfXZhciBlPXRoaXMscj10aGlzLmdscGxvdC5nbCxuPXRoaXMuZ2xwbG90LmNhbnZhczt0aGlzLmdscGxvdC5kaXNwb3NlKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTt2YXIgVD1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO0EucGxvdD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5wbG90QXJncz1bdCxlLHJdLCF0aGlzLmdscGxvdC5jb250ZXh0TG9zdCl7dmFyIG4saSxhLG8sbCx1LGM9ZVt0aGlzLmlkXSxoPXJbdGhpcy5pZF07Yy5iZ2NvbG9yP3RoaXMuZ2xwbG90LmNsZWFyQ29sb3I9eShjLmJnY29sb3IpOnRoaXMuZ2xwbG90LmNsZWFyQ29sb3I9WzAsMCwwLDBdLHRoaXMuZ2xwbG90LnNuYXBUb0RhdGE9ITAsdGhpcy5mdWxsTGF5b3V0PWUsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9Yyx0aGlzLmdscGxvdExheW91dD1jLHRoaXMuYXhlc09wdGlvbnMubWVyZ2UoYyksdGhpcy5zcGlrZU9wdGlvbnMubWVyZ2UoYyksdGhpcy5zZXRDYW1lcmEoYy5jYW1lcmEpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5nbHBsb3QudXBkYXRlKHt9KSx0aGlzLnNldENvbnZlcnQobCksdD9BcnJheS5pc0FycmF5KHQpfHwodD1bdF0pOnQ9W107dmFyIGY9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKGE9MDthPHQubGVuZ3RoOysrYSluPXRbYV0sITA9PT1uLnZpc2libGUmJnModGhpcyxuLGYpO3ZhciBkPVsxLDEsMV07Zm9yKG89MDtvPDM7KytvKWZbMF1bb10+ZlsxXVtvXT9kW29dPTE6ZlsxXVtvXT09PWZbMF1bb10/ZFtvXT0xOmRbb109MS8oZlsxXVtvXS1mWzBdW29dKTtmb3IodGhpcy5kYXRhU2NhbGU9ZCx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucyh0aGlzKSxhPTA7YTx0Lmxlbmd0aDsrK2Epbj10W2FdLCEwPT09bi52aXNpYmxlJiYoaT10aGlzLnRyYWNlc1tuLnVpZF0saT9pLnVwZGF0ZShuKTooaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKSxpLm5hbWU9bi5uYW1lKTt2YXIgcD1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dDpmb3IoYT0wO2E8cC5sZW5ndGg7KythKXtmb3Iobz0wO288dC5sZW5ndGg7KytvKWlmKHRbb10udWlkPT09cFthXSYmITA9PT10W29dLnZpc2libGUpY29udGludWUgdDtpPXRoaXMudHJhY2VzW3BbYV1dLGkuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1twW2FdXX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuZGF0YS5pbmRleC1lLl90cmFjZS5kYXRhLmluZGV4fSk7dmFyIG09W1swLDAsMF0sWzAsMCwwXV0sdj1bXSxnPXt9O2ZvcihhPTA7YTwzOysrYSl7aWYobD1jW1RbYV1dLHU9bC50eXBlLHUgaW4gZz8oZ1t1XS5hY2MqPWRbYV0sZ1t1XS5jb3VudCs9MSk6Z1t1XT17YWNjOmRbYV0sY291bnQ6MX0sbC5hdXRvcmFuZ2Upe21bMF1bYV09MS8wLG1bMV1bYV09LTEvMDt2YXIgYj10aGlzLmdscGxvdC5vYmplY3RzLHg9dGhpcy5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnN8fFtdLF89bC5fbmFtZS5jaGFyQXQoMCk7Zm9yKG89MDtvPGIubGVuZ3RoO28rKyl7dmFyIHc9YltvXS5ib3VuZHM7bVswXVthXT1NYXRoLm1pbihtWzBdW2FdLHdbMF1bYV0vZFthXSksbVsxXVthXT1NYXRoLm1heChtWzFdW2FdLHdbMV1bYV0vZFthXSl9Zm9yKG89MDtvPHgubGVuZ3RoO28rKyl7dmFyIE09eFtvXTtpZihNLnZpc2libGUpe3ZhciBrPWwucjJsKE1bX10pO21bMF1bYV09TWF0aC5taW4obVswXVthXSxrKSxtWzFdW2FdPU1hdGgubWF4KG1bMV1bYV0sayl9fWlmKCJyYW5nZW1vZGUiaW4gbCYmInRvemVybyI9PT1sLnJhbmdlbW9kZSYmKG1bMF1bYV09TWF0aC5taW4obVswXVthXSwwKSxtWzFdW2FdPU1hdGgubWF4KG1bMV1bYV0sMCkpLG1bMF1bYV0+bVsxXVthXSltWzBdW2FdPS0xLG1bMV1bYV09MTtlbHNle3ZhciBBPW1bMV1bYV0tbVswXVthXTttWzBdW2FdLT1BLzMyLG1bMV1bYV0rPUEvMzJ9fWVsc2V7dmFyIFM9bC5yYW5nZTttWzBdW2FdPWwucjJsKFNbMF0pLG1bMV1bYV09bC5yMmwoU1sxXSl9bVswXVthXT09PW1bMV1bYV0mJihtWzBdW2FdLT0xLG1bMV1bYV0rPTEpLHZbYV09bVsxXVthXS1tWzBdW2FdLHRoaXMuZ2xwbG90LmJvdW5kc1swXVthXT1tWzBdW2FdKmRbYV0sdGhpcy5nbHBsb3QuYm91bmRzWzFdW2FdPW1bMV1bYV0qZFthXX12YXIgRT1bMSwxLDFdO2ZvcihhPTA7YTwzOysrYSl7bD1jW1RbYV1dLHU9bC50eXBlO3ZhciBMPWdbdV07RVthXT1NYXRoLnBvdyhMLmFjYywxL0wuY291bnQpL2RbYV19dmFyIEM7aWYoImF1dG8iPT09Yy5hc3BlY3Rtb2RlKUM9TWF0aC5tYXguYXBwbHkobnVsbCxFKS9NYXRoLm1pbi5hcHBseShudWxsLEUpPD00P0U6WzEsMSwxXTtlbHNlIGlmKCJjdWJlIj09PWMuYXNwZWN0bW9kZSlDPVsxLDEsMV07ZWxzZSBpZigiZGF0YSI9PT1jLmFzcGVjdG1vZGUpQz1FO2Vsc2V7aWYoIm1hbnVhbCIhPT1jLmFzcGVjdG1vZGUpdGhyb3cgbmV3IEVycm9yKCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlcyIpO3ZhciB6PWMuYXNwZWN0cmF0aW87Qz1bei54LHoueSx6LnpdfWMuYXNwZWN0cmF0aW8ueD1oLmFzcGVjdHJhdGlvLng9Q1swXSxjLmFzcGVjdHJhdGlvLnk9aC5hc3BlY3RyYXRpby55PUNbMV0sYy5hc3BlY3RyYXRpby56PWguYXNwZWN0cmF0aW8uej1DWzJdLHRoaXMuZ2xwbG90LmFzcGVjdD1DO3ZhciBJPWMuZG9tYWlufHxudWxsLEQ9ZS5fc2l6ZXx8bnVsbDtpZihJJiZEKXt2YXIgUD10aGlzLmNvbnRhaW5lci5zdHlsZTtQLnBvc2l0aW9uPSJhYnNvbHV0ZSIsUC5sZWZ0PUQubCtJLnhbMF0qRC53KyJweCIsUC50b3A9RC50KygxLUkueVsxXSkqRC5oKyJweCIsUC53aWR0aD1ELncqKEkueFsxXS1JLnhbMF0pKyJweCIsUC5oZWlnaHQ9RC5oKihJLnlbMV0tSS55WzBdKSsicHgifXRoaXMuZ2xwbG90LnJlZHJhdygpfX0sQS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT10aGlzLmdscGxvdC5jYW1lcmE9bnVsbCx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5nbHBsb3Q9bnVsbH0sQS5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHBsb3QuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSksdSh0aGlzLmdscGxvdC5jYW1lcmEpfSxBLnNldENhbWVyYT1mdW5jdGlvbih0KXt0aGlzLmdscGxvdC5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsbCh0KSl9LEEuc2F2ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENhbWVyYSgpLHI9bS5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSxuPXIuZ2V0KCksaT0hMTtpZih2b2lkIDA9PT1uKWk9ITA7ZWxzZSBmb3IodmFyIGE9MDthPDM7YSsrKWZvcih2YXIgbz0wO288MztvKyspaWYoIWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVsidXAiLCJjZW50ZXIiLCJleWUiXSxhPVsieCIsInkiLCJ6Il07cmV0dXJuIGVbaVtyXV0mJnRbaVtyXV1bYVtuXV09PT1lW2lbcl1dW2Fbbl1dfShlLG4sYSxvKSl7aT0hMDticmVha31yZXR1cm4gaSYmci5zZXQoZSksaX0sQS51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2FtZXJhO3ImJigib3JiaXQiPT09dD8oci5tb2RlPSJvcmJpdCIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIik6InR1cm50YWJsZSI9PT10PyhyLnVwPVswLDAsMV0sci5tb2RlPSJ0dXJudGFibGUiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSIpOnIua2V5QmluZGluZ01vZGU9dCksdGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LEEudG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChjKSx0aGlzLmdscGxvdC5yZWRyYXcoKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLG49ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGk9bmV3IFVpbnQ4QXJyYXkocipuKjQpO2UucmVhZFBpeGVscygwLDAscixuLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsaSk7Zm9yKHZhciBhPTAsbz1uLTE7YTxvOysrYSwtLW8pZm9yKHZhciBzPTA7czxyOysrcylmb3IodmFyIGw9MDtsPDQ7KytsKXt2YXIgdT1pWzQqKHIqYStzKStsXTtpWzQqKHIqYStzKStsXT1pWzQqKHIqbytzKStsXSxpWzQqKHIqbytzKStsXT11fXZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2gud2lkdGg9cixoLmhlaWdodD1uO3ZhciBmPWguZ2V0Q29udGV4dCgiMmQiKSxkPWYuY3JlYXRlSW1hZ2VEYXRhKHIsbik7ZC5kYXRhLnNldChpKSxmLnB1dEltYWdlRGF0YShkLDAsMCk7dmFyIHA7c3dpdGNoKHQpe2Nhc2UianBlZyI6cD1oLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2Uid2VicCI6cD1oLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2RlZmF1bHQ6cD1oLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9cmV0dXJuIHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQoYykscH0sQS5zZXRDb252ZXJ0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzO3QrKyl7dmFyIGU9dGhpcy5mdWxsU2NlbmVMYXlvdXRbVFt0XV07di5zZXRDb252ZXJ0KGUsdGhpcy5mdWxsTGF5b3V0KSxlLnNldFNjYWxlPW0ubm9vcH19LGUuZXhwb3J0cz1hfSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6NzQwLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vY2FtZXJhIjo4MDYsIi4vbGF5b3V0L2NvbnZlcnQiOjgxMSwiLi9sYXlvdXQvc3Bpa2VzIjo4MTQsIi4vbGF5b3V0L3RpY2tfbWFya3MiOjgxNSwiLi9wcm9qZWN0Ijo4MTYsImdsLXBsb3QzZCI6MjE5LCJ3ZWJnbC1jb250ZXh0Ijo1NjF9XSw4MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT1uLmV4dGVuZEZsYXQsYT10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtmb250OntmYW1pbHk6aSh7fSxhLmZhbWlseSx7ZGZsdDonIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJ30pLHNpemU6aSh7fSxhLnNpemUse2RmbHQ6MTJ9KSxjb2xvcjppKHt9LGEuY29sb3Ise2RmbHQ6by5kZWZhdWx0TGluZX0pfSx0aXRsZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJDbGljayB0byBlbnRlciBQbG90IHRpdGxlIn0sdGl0bGVmb250Omkoe30sYSx7fSksYXV0b3NpemU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjcwMH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjQ1MH0sbWFyZ2luOntsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODB9LHI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MH0sdDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwMH0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwfSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowfSxhdXRvZXhwYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0scGFwZXJfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5iYWNrZ3JvdW5kfSxwbG90X2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om8uYmFja2dyb3VuZH0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuLCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzbWl0aDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMV0sZGZsdDohMX0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiJ9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi4vbGliIjo3MjQsIi4vZm9udF9hdHRyaWJ1dGVzIjo3ODh9XSw4MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsY29udHJvbENvbnRhaW5lckNsYXNzTmFtZToibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLG5vQWNjZXNzVG9rZW5FcnJvck1zZzpbIk1pc3NpbmcgTWFwYm94IGFjY2VzcyB0b2tlbi4iLCJNYXBib3ggdHJhY2UgdHlwZSByZXF1aXJlIGEgTWFwYm94IGFjY2VzcyB0b2tlbiB0byBiZSByZWdpc3RlcmVkLiIsIkZvciBleGFtcGxlOiIsIiAgUGxvdGx5LnBsb3QoZ2QsIGRhdGEsIGxheW91dCwgeyBtYXBib3hBY2Nlc3NUb2tlbjogJ215LWFjY2Vzcy10b2tlbicgfSk7IiwiTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9kZWZpbmUtYWNjZXNzLXRva2VuLyJdLmpvaW4oIlxuIiksbWFwT25FcnJvck1zZzoiTWFwYm94IGVycm9yLiJ9fSx7fV0sODIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoIiAiKSxpPXJbMF0sYT1yWzFdLG89QXJyYXkuaXNBcnJheShlKT9uLm1lYW4oZSk6ZSxzPS41K28vMTAwLGw9MS41K28vMTAwLHU9WyIiLCIiXSxjPVswLDBdO3N3aXRjaChpKXtjYXNlInRvcCI6dVswXT0idG9wIixjWzFdPS1sO2JyZWFrO2Nhc2UiYm90dG9tIjp1WzBdPSJib3R0b20iLGNbMV09bH1zd2l0Y2goYSl7Y2FzZSJsZWZ0Ijp1WzFdPSJyaWdodCIsY1swXT0tczticmVhaztjYXNlInJpZ2h0Ijp1WzFdPSJsZWZ0IixjWzBdPXN9dmFyIGg7cmV0dXJuIGg9dVswXSYmdVsxXT91LmpvaW4oIi0iKTp1WzBdP3VbMF06dVsxXT91WzFdOiJjZW50ZXIiLHthbmNob3I6aCxvZmZzZXQ6Y319fSx7Ii4uLy4uL2xpYiI6NzI0fV0sODIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49dC5fY29udGV4dDtpZigiIj09PW4ubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBpPW4ubWFwYm94QWNjZXNzVG9rZW4sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1yW2VbYV1dO2lmKG8uYWNjZXNzdG9rZW4pe2k9by5hY2Nlc3N0b2tlbjticmVha319aWYoIWkpdGhyb3cgbmV3IEVycm9yKHUubm9BY2Nlc3NUb2tlbkVycm9yTXNnKTtyZXR1cm4gaX12YXIgaT10KCJtYXBib3gtZ2wiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGxvdHMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbD10KCIuL21hcGJveCIpLHU9dCgiLi9jb25zdGFudHMiKTtyLm5hbWU9Im1hcGJveCIsci5hdHRyPSJzdWJwbG90IixyLmlkUm9vdD0ibWFwYm94IixyLmlkUmVnZXg9L15tYXBib3goWzItOV18WzEtOV1bMC05XSspPyQvLHIuYXR0clJlZ2V4PS9ebWFwYm94KFsyLTldfFsxLTldWzAtOV0rKT8kLyxyLmF0dHJpYnV0ZXM9e3N1YnBsb3Q6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoibWFwYm94In19LHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxzPW8uZ2V0U3VicGxvdElkcyhlLCJtYXBib3giKSx1PW4odCxzKTtpLmFjY2Vzc1Rva2VuPXU7Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY10sZj1vLmdldFN1YnBsb3RDYWxjRGF0YShyLCJtYXBib3giLGgpLGQ9ZVtoXSxwPWQuX3N1YnBsb3Q7ZC5hY2Nlc3N0b2tlbj11LHB8fChwPWwoe2dkOnQsY29udGFpbmVyOmUuX2dsY29udGFpbmVyLm5vZGUoKSxpZDpoLGZ1bGxMYXlvdXQ6ZSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbaF0uX3N1YnBsb3Q9cCkscC52aWV3SW5pdGlhbHx8KHAudmlld0luaXRpYWw9e2NlbnRlcjphLmV4dGVuZEZsYXQoe30sZC5jZW50ZXIpLHpvb206ZC56b29tLGJlYXJpbmc6ZC5iZWFyaW5nLHBpdGNoOmQucGl0Y2h9KSxwLnBsb3QoZixlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW8uZ2V0U3VicGxvdElkcyhuLCJtYXBib3giKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07IWVbc10mJm5bc10uX3N1YnBsb3QmJm5bc10uX3N1YnBsb3QuZGVzdHJveSgpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPW8uZ2V0U3VicGxvdElkcyhlLCJtYXBib3giKSxuPWUuX3NpemUsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1lW3JbaV1dLGw9YS5kb21haW4sdT1hLl9zdWJwbG90LGM9dS50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOnMuc3ZnLCJ4bGluazpocmVmIjpjLHg6bi5sK24udypsLnhbMF0seTpuLnQrbi5oKigxLWwueVsxXSksd2lkdGg6bi53KihsLnhbMV0tbC54WzBdKSxoZWlnaHQ6bi5oKihsLnlbMV0tbC55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHUuZGVzdHJveSgpfX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcwNiwiLi4vLi4vbGliIjo3MjQsIi4uL3Bsb3RzIjo4MjcsIi4vY29uc3RhbnRzIjo4MTksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgyMywiLi9sYXlvdXRfZGVmYXVsdHMiOjgyNCwiLi9tYXBib3giOjgyNSwibWFwYm94LWdsIjozNDF9XSw4MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMubWFwYm94PXQsdGhpcy5tYXA9dC5tYXAsdGhpcy51aWQ9dC51aWQrIi1sYXllciIrZSx0aGlzLmlkU291cmNlPXRoaXMudWlkKyItc291cmNlIix0aGlzLmlkTGF5ZXI9dGhpcy51aWQrIi1sYXllciIsdGhpcy5zb3VyY2VUeXBlPW51bGwsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLmxheWVyVHlwZT1udWxsLHRoaXMuYmVsb3c9bnVsbCx0aGlzLnZpc2libGU9ITF9ZnVuY3Rpb24gaSh0KXt2YXIgZT10LnNvdXJjZTtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KGUpfHwic3RyaW5nIj09dHlwZW9mIGUmJmUubGVuZ3RoPjB9ZnVuY3Rpb24gYSh0KXt2YXIgZT17fSxyPXt9O3N3aXRjaCh0LnR5cGUpe2Nhc2UiY2lyY2xlIjpzLmV4dGVuZEZsYXQocix7ImNpcmNsZS1yYWRpdXMiOnQuY2lyY2xlLnJhZGl1cywiY2lyY2xlLWNvbG9yIjp0LmNvbG9yLCJjaXJjbGUtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJsaW5lIjpzLmV4dGVuZEZsYXQocix7CiJsaW5lLXdpZHRoIjp0LmxpbmUud2lkdGgsImxpbmUtY29sb3IiOnQuY29sb3IsImxpbmUtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJmaWxsIjpzLmV4dGVuZEZsYXQocix7ImZpbGwtY29sb3IiOnQuY29sb3IsImZpbGwtb3V0bGluZS1jb2xvciI6dC5maWxsLm91dGxpbmVjb2xvciwiZmlsbC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInN5bWJvbCI6dmFyIG49dC5zeW1ib2wsaT1sKG4udGV4dHBvc2l0aW9uLG4uaWNvbnNpemUpO3MuZXh0ZW5kRmxhdChlLHsiaWNvbi1pbWFnZSI6bi5pY29uKyItMTUiLCJpY29uLXNpemUiOm4uaWNvbnNpemUvMTAsInRleHQtZmllbGQiOm4udGV4dCwidGV4dC1zaXplIjpuLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjppLmFuY2hvciwidGV4dC1vZmZzZXQiOmkub2Zmc2V0fSkscy5leHRlbmRGbGF0KHIseyJpY29uLWNvbG9yIjp0LmNvbG9yLCJ0ZXh0LWNvbG9yIjpuLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOnQub3BhY2l0eX0pfXJldHVybntsYXlvdXQ6ZSxwYWludDpyfX1mdW5jdGlvbiBvKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsaT17dHlwZTpyfSxhPSJzdHJpbmciPT10eXBlb2YgbjtyZXR1cm4iZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09ciYmKGU9YT8idXJsIjoidGlsZXMiKSxpW2VdPW4saX12YXIgcz10KCIuLi8uLi9saWIiKSxsPXQoIi4vY29udmVydF90ZXh0X29wdHMiKSx1PW4ucHJvdG90eXBlO3UudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT90aGlzLm5lZWRzTmV3U291cmNlKHQpPyh0aGlzLnVwZGF0ZUxheWVyKHQpLHRoaXMudXBkYXRlU291cmNlKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCkmJnRoaXMudXBkYXRlTGF5ZXIodCk6KHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpLHRoaXMudXBkYXRlU3R5bGUodCksdGhpcy52aXNpYmxlPWkodCl9LHUubmVlZHNOZXdTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlVHlwZSE9PXQuc291cmNldHlwZXx8dGhpcy5zb3VyY2UhPT10LnNvdXJjZXx8dGhpcy5sYXllclR5cGUhPT10LnR5cGV9LHUubmVlZHNOZXdMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclR5cGUhPT10LnR5cGV8fHRoaXMuYmVsb3chPT10LmJlbG93fSx1LnVwZGF0ZVNvdXJjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtpZihlLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmZS5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSksdGhpcy5zb3VyY2VUeXBlPXQuc291cmNldHlwZSx0aGlzLnNvdXJjZT10LnNvdXJjZSxpKHQpKXt2YXIgcj1vKHQpO2UuYWRkU291cmNlKHRoaXMuaWRTb3VyY2Uscil9fSx1LnVwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2lmKGUuZ2V0TGF5ZXIodGhpcy5pZExheWVyKSYmZS5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHRoaXMubGF5ZXJUeXBlPXQudHlwZSxpKHQpKXtlLmFkZExheWVyKHtpZDp0aGlzLmlkTGF5ZXIsc291cmNlOnRoaXMuaWRTb3VyY2UsInNvdXJjZS1sYXllciI6dC5zb3VyY2VsYXllcnx8IiIsdHlwZTp0LnR5cGV9LHQuYmVsb3cpO3ZhciByPXt2aXNpYmlsaXR5OiJ2aXNpYmxlIn07dGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldExheW91dFByb3BlcnR5IixyKX19LHUudXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9YSh0KTtpKHQpJiYodGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldExheW91dFByb3BlcnR5IixlLmxheW91dCksdGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldFBhaW50UHJvcGVydHkiLGUucGFpbnQpKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW5ldyBuKHQsZSk7cmV0dXJuIGkudXBkYXRlKHIpLGl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuL2NvbnZlcnRfdGV4dF9vcHRzIjo4MjB9XSw4MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuZGVmYXVsdExpbmUsYT10KCIuLi9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS50ZXh0cG9zaXRpb247ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbL15tYXBib3goWzItOV18WzEtOV1bMC05XSspP1wubGF5ZXJzL10sZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxhY2Nlc3N0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc3R5bGU6e3ZhbFR5cGU6ImFueSIsdmFsdWVzOlsiYmFzaWMiLCJzdHJlZXRzIiwib3V0ZG9vcnMiLCJsaWdodCIsImRhcmsiLCJzYXRlbGxpdGUiLCJzYXRlbGxpdGUtc3RyZWV0cyJdLGRmbHQ6ImJhc2ljIn0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfX0sem9vbTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGJlYXJpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxheWVyczp7X2lzTGlua2VkVG9BcnJheToibGF5ZXIiLHNvdXJjZXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdlb2pzb24iLCJ2ZWN0b3IiXSxkZmx0OiJnZW9qc29uIn0sc291cmNlOnt2YWxUeXBlOiJhbnkifSxzb3VyY2VsYXllcjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJsaW5lIiwiZmlsbCIsInN5bWJvbCJdLGRmbHQ6ImNpcmNsZSJ9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sY2lyY2xlOntyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxNX19LGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mn19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX19LHN5bWJvbDp7aWNvbjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJtYXJrZXIifSxpY29uc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHRleHRmb250Om4uZXh0ZW5kRGVlcCh7fSxhLHtmYW1pbHk6e2RmbHQ6Ik9wZW4gU2FucyBSZWd1bGFyLCBBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIifX0pLHRleHRwb3NpdGlvbjpuLmV4dGVuZEZsYXQoe30sbyx7YXJyYXlPazohMX0pfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjUsIi4uL2ZvbnRfYXR0cmlidXRlcyI6Nzg4fV0sODI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3IoImFjY2Vzc3Rva2VuIikscigic3R5bGUiKSxyKCJjZW50ZXIubG9uIikscigiY2VudGVyLmxhdCIpLHIoInpvb20iKSxyKCJiZWFyaW5nIikscigicGl0Y2giKSxpKHQsZSksZS5faW5wdXQ9dH1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBhLmNvZXJjZShuLGkscy5sYXllcnMsdCxlKX1mb3IodmFyIG4saSxvPXQubGF5ZXJzfHxbXSxsPWUubGF5ZXJzPVtdLHU9MDt1PG8ubGVuZ3RoO3UrKylpZihuPW9bdV0saT17fSxhLmlzUGxhaW5PYmplY3Qobikpe3ZhciBjPXIoInNvdXJjZXR5cGUiKTtyKCJzb3VyY2UiKSwidmVjdG9yIj09PWMmJnIoInNvdXJjZWxheWVyIik7dmFyIGg9cigidHlwZSIpO3IoImJlbG93IikscigiY29sb3IiKSxyKCJvcGFjaXR5IiksImNpcmNsZSI9PT1oJiZyKCJjaXJjbGUucmFkaXVzIiksImxpbmUiPT09aCYmcigibGluZS53aWR0aCIpLCJmaWxsIj09PWgmJnIoImZpbGwub3V0bGluZWNvbG9yIiksInN5bWJvbCI9PT1oJiYocigic3ltYm9sLmljb24iKSxyKCJzeW1ib2wuaWNvbnNpemUiKSxyKCJzeW1ib2wudGV4dCIpLGEuY29lcmNlRm9udChyLCJzeW1ib2wudGV4dGZvbnQiKSxyKCJzeW1ib2wudGV4dHBvc2l0aW9uIikpLGkuX2luZGV4PXUsbC5wdXNoKGkpfX12YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6Im1hcGJveCIsYXR0cmlidXRlczpzLGhhbmRsZURlZmF1bHRzOm4scGFydGl0aW9uOiJ5In0pfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vc3VicGxvdF9kZWZhdWx0cyI6ODM0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MjN9XSw4MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmlkPXQuaWQsdGhpcy5nZD10LmdkLHRoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuaXNTdGF0aWM9dC5zdGF0aWNQbG90O3ZhciBlPXQuZnVsbExheW91dDt0aGlzLnVpZD1lLl91aWQrIi0iK3RoaXMuaWQsdGhpcy5vcHRzPWVbdGhpcy5pZF0sdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKGUpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXX1mdW5jdGlvbiBpKHQpe3ZhciBlPWQuc3R5bGUudmFsdWVzLHI9ZC5zdHlsZS5kZmx0LG49e307cmV0dXJuIHUuaXNQbGFpbk9iamVjdCh0KT8obi5pZD10LmlkLG4uc3R5bGU9dCk6InN0cmluZyI9PXR5cGVvZiB0PyhuLmlkPXQsbi5zdHlsZT0tMSE9PWUuaW5kZXhPZih0KT9hKHQpOnQpOihuLmlkPXIsbi5zdHlsZT1hKHIpKSxufWZ1bmN0aW9uIGEodCl7cmV0dXJuIGYuc3R5bGVVcmxQcmVmaXgrdCsiLSIrZi5zdHlsZVVybFN1ZmZpeH1mdW5jdGlvbiBvKHQpe3JldHVyblt0Lmxvbix0LmxhdF19dmFyIHM9dCgibWFwYm94LWdsIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksdT10KCIuLi8uLi9saWIiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxoPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKSxmPXQoIi4vY29uc3RhbnRzIiksZD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIikscD10KCIuL2xheWVycyIpLG09bi5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX0sbS5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5vcHRzPWVbdGhpcy5pZF07bi5tYXAmJmkuYWNjZXNzdG9rZW4hPT1uLmFjY2Vzc1Rva2VuJiYobi5tYXAucmVtb3ZlKCksbi5tYXA9bnVsbCxuLnN0eWxlT2JqPW51bGwsbi50cmFjZUhhc2g9W10sbi5sYXllckxpc3Q9e30pO3ZhciBhO2E9bi5tYXA/bmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtuLnVwZGF0ZU1hcCh0LGUscixpKX0pOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsaSl7bi5jcmVhdGVNYXAodCxlLHIsaSl9KSxyLnB1c2goYSl9LG0uY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGEoKXtsLmxvbmVVbmhvdmVyKGUuX3RvcHBhcGVyKX12YXIgYz10aGlzLGg9Yy5nZCxkPWMub3B0cyxwPWMuc3R5bGVPYmo9aShkLnN0eWxlKTtjLmFjY2Vzc1Rva2VuPWQuYWNjZXNzdG9rZW47dmFyIG09Yy5tYXA9bmV3IHMuTWFwKHtjb250YWluZXI6Yy5kaXYsc3R5bGU6cC5zdHlsZSxjZW50ZXI6byhkLmNlbnRlciksem9vbTpkLnpvb20sYmVhcmluZzpkLmJlYXJpbmcscGl0Y2g6ZC5waXRjaCxpbnRlcmFjdGl2ZTohYy5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6Yy5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMX0pLHY9Zi5jb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lLGc9Yy5kaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh2KVswXTtjLmRpdi5yZW1vdmVDaGlsZChnKSxtLl9jYW52YXMuY2FudmFzLnN0eWxlLmxlZnQ9IjBweCIsbS5fY2FudmFzLmNhbnZhcy5zdHlsZS50b3A9IjBweCIsYy5yZWplY3RPbkVycm9yKG4pLG0ub25jZSgibG9hZCIsZnVuY3Rpb24oKXtjLnVwZGF0ZURhdGEodCksYy51cGRhdGVMYXlvdXQoZSksYy5yZXNvbHZlT25SZW5kZXIocil9KSxjLmlzU3RhdGljfHwobS5vbigibW92ZWVuZCIsZnVuY3Rpb24odCl7aWYoYy5tYXApe3ZhciBlPWMuZ2V0VmlldygpO2lmKGQuX2lucHV0LmNlbnRlcj1kLmNlbnRlcj1lLmNlbnRlcixkLl9pbnB1dC56b29tPWQuem9vbT1lLnpvb20sZC5faW5wdXQuYmVhcmluZz1kLmJlYXJpbmc9ZS5iZWFyaW5nLGQuX2lucHV0LnBpdGNoPWQucGl0Y2g9ZS5waXRjaCx0Lm9yaWdpbmFsRXZlbnQpe3ZhciByPXt9O3JbYy5pZF09dS5leHRlbmRGbGF0KHt9LGUpLGguZW1pdCgicGxvdGx5X3JlbGF5b3V0IixyKX19fSksbS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbih0KXt2YXIgZT1jLmRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LmNsaWVudFg9dC5wb2ludC54K2UubGVmdCx0LmNsaWVudFk9dC5wb2ludC55K2UudG9wLHQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbigpe3JldHVybiBlfSxjLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0LmxuZ0xhdC5sbmd9LGMueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxhdH0sbC5ob3ZlcihoLHQsYy5pZCl9KSxtLm9uKCJjbGljayIsZnVuY3Rpb24odCl7bC5jbGljayhoLHQub3JpZ2luYWxFdmVudCl9KSxtLm9uKCJkcmFnc3RhcnQiLGEpLG0ub24oInpvb21zdGFydCIsYSksbS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKCl7dmFyIHQ9Yy52aWV3SW5pdGlhbDttLnNldENlbnRlcihvKHQuY2VudGVyKSksbS5zZXRab29tKHQuem9vbSksbS5zZXRCZWFyaW5nKHQuYmVhcmluZyksbS5zZXRQaXRjaCh0LnBpdGNoKTt2YXIgZT1jLmdldFZpZXcoKTtkLl9pbnB1dC5jZW50ZXI9ZC5jZW50ZXI9ZS5jZW50ZXIsZC5faW5wdXQuem9vbT1kLnpvb209ZS56b29tLGQuX2lucHV0LmJlYXJpbmc9ZC5iZWFyaW5nPWUuYmVhcmluZyxkLl9pbnB1dC5waXRjaD1kLnBpdGNoPWUucGl0Y2gsaC5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpfSkpfSxtLnVwZGF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT10aGlzLG89YS5tYXA7YS5yZWplY3RPbkVycm9yKG4pO3ZhciBzPWkoYS5vcHRzLnN0eWxlKTthLnN0eWxlT2JqLmlkIT09cy5pZD8oYS5zdHlsZU9iaj1zLG8uc2V0U3R5bGUocy5zdHlsZSksby5zdHlsZS5vbmNlKCJsb2FkIixmdW5jdGlvbigpe2EudHJhY2VIYXNoPXt9LGEudXBkYXRlRGF0YSh0KSxhLnVwZGF0ZUxheW91dChlKSxhLnJlc29sdmVPblJlbmRlcihyKX0pKTooYS51cGRhdGVEYXRhKHQpLGEudXBkYXRlTGF5b3V0KGUpLGEucmVzb2x2ZU9uUmVuZGVyKHIpKX0sbS51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcy50cmFjZUhhc2g7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTtyPW9bMF0udHJhY2UsZT1hW3IudWlkXSxlP2UudXBkYXRlKG8pOnIuX21vZHVsZSYmKGFbci51aWRdPXIuX21vZHVsZS5wbG90KHRoaXMsbykpfXZhciBzPU9iamVjdC5rZXlzKGEpO3Q6Zm9yKG49MDtuPHMubGVuZ3RoO24rKyl7dmFyIGw9c1tuXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHI9dFtpXVswXS50cmFjZSxsPT09ci51aWQpY29udGludWUgdDtlPWFbbF0sZS5kaXNwb3NlKCksZGVsZXRlIGFbbF19fSxtLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcCxyPXRoaXMub3B0cztlLnNldENlbnRlcihvKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSx0aGlzLnVwZGF0ZUxheWVycygpLHRoaXMudXBkYXRlRnJhbWV3b3JrKHQpLHRoaXMudXBkYXRlRngodCksdGhpcy5tYXAucmVzaXplKCl9LG0ucmVzb2x2ZU9uUmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Uub24oInJlbmRlciIsZnVuY3Rpb24gcigpe2UubG9hZGVkKCkmJihlLm9mZigicmVuZGVyIixyKSx0KCkpfSl9LG0ucmVqZWN0T25FcnJvcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dChuZXcgRXJyb3IoZi5tYXBPbkVycm9yTXNnKSl9dmFyIHI9dGhpcy5tYXA7ci5vbmNlKCJlcnJvciIsZSksci5vbmNlKCJzdHlsZS5lcnJvciIsZSksci5vbmNlKCJzb3VyY2UuZXJyb3IiLGUpLHIub25jZSgidGlsZS5lcnJvciIsZSksci5vbmNlKCJsYXllci5lcnJvciIsZSl9LG0uY3JlYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmlkPWUudWlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSxlLnhheGlzPXtfaWQ6IngiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnh9fSxlLnlheGlzPXtfaWQ6InkiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnl9fSxlLnVwZGF0ZUZyYW1ld29yayh0KX0sbS51cGRhdGVGeD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPXIubWFwLnVucHJvamVjdCh0KTtyZXR1cm5bZS5sbmcsZS5sYXRdfXZhciByPXRoaXMsbj1yLm1hcCxpPXIuZ2Q7aWYoIXIuaXNTdGF0aWMpe3ZhciBhLG89dC5kcmFnbW9kZTtpZihhPSJzZWxlY3QiPT09bz9mdW5jdGlvbih0LG4peyh0LnJhbmdlPXt9KVtyLmlkXT1bZShbbi54bWluLG4ueW1pbl0pLGUoW24ueG1heCxuLnltYXhdKV19OmZ1bmN0aW9uKHQsbixpKXsodC5sYXNzb1BvaW50cz17fSlbci5pZF09aS5maWx0ZXJlZC5tYXAoZSl9LCJzZWxlY3QiPT09b3x8Imxhc3NvIj09PW8pe24uZHJhZ1Bhbi5kaXNhYmxlKCk7dmFyIHM9e2VsZW1lbnQ6ci5kaXYsZ2Q6aSxwbG90aW5mbzp7eGF4aXM6ci54YXhpcyx5YXhpczpyLnlheGlzLGZpbGxSYW5nZUl0ZW1zOmF9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc10sc3VicGxvdDpyLmlkfTtzLnByZXBGbj1mdW5jdGlvbih0LGUscil7aCh0LGUscixzLG8pfSxzLmRvbmVGbj1mdW5jdGlvbihlLHIpezI9PT1yJiZ0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX0sYy5pbml0KHMpfWVsc2Ugbi5kcmFnUGFuLmVuYWJsZSgpLHIuZGl2Lm9ubW91c2Vkb3duPW51bGx9fSxtLnVwZGF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLmRvbWFpbixyPXQuX3NpemUsbj10aGlzLmRpdi5zdHlsZTtuLndpZHRoPXIudyooZS54WzFdLWUueFswXSkrInB4IixuLmhlaWdodD1yLmgqKGUueVsxXS1lLnlbMF0pKyJweCIsbi5sZWZ0PXIubCtlLnhbMF0qci53KyJweCIsbi50b3A9ci50KygxLWUueVsxXSkqci5oKyJweCIsdGhpcy54YXhpcy5fb2Zmc2V0PXIubCtlLnhbMF0qci53LHRoaXMueGF4aXMuX2xlbmd0aD1yLncqKGUueFsxXS1lLnhbMF0pLHRoaXMueWF4aXMuX29mZnNldD1yLnQrKDEtZS55WzFdKSpyLmgsdGhpcy55YXhpcy5fbGVuZ3RoPXIuaCooZS55WzFdLWUueVswXSl9LG0udXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLm9wdHMscj1lLmxheWVycyxuPXRoaXMubGF5ZXJMaXN0O2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpe2Zvcih0PTA7dDxuLmxlbmd0aDt0Kyspblt0XS5kaXNwb3NlKCk7Zm9yKG49dGhpcy5sYXllckxpc3Q9W10sdD0wO3Q8ci5sZW5ndGg7dCsrKW4ucHVzaChwKHRoaXMsdCxyW3RdKSl9ZWxzZSBmb3IodD0wO3Q8ci5sZW5ndGg7dCsrKW5bdF0udXBkYXRlKHJbdF0pfSxtLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMubWFwLnJlbW92ZSgpLHRoaXMubWFwPW51bGwpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KX0sbS50b0ltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLmdldENhbnZhcygpLnRvRGF0YVVSTCgpfSxtLmluaXRTb3VyY2U9ZnVuY3Rpb24odCl7dmFyIGU9e3R5cGU6Imdlb2pzb24iLGRhdGE6e3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6W119fX07cmV0dXJuIHRoaXMubWFwLmFkZFNvdXJjZSh0LGUpfSxtLnNldFNvdXJjZURhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLm1hcC5nZXRTb3VyY2UodCkuc2V0RGF0YShlKX0sbS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy5tYXAsaT1PYmplY3Qua2V5cyhyKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07bltlXSh0LG8scltvXSl9fSxtLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLnByb2plY3QobmV3IHMuTG5nTGF0KHRbMF0sdFsxXSkpfSxtLmdldFZpZXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcCxlPXQuZ2V0Q2VudGVyKCk7cmV0dXJue2NlbnRlcjp7bG9uOmUubG5nLGxhdDplLmxhdH0sem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYyMywiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIiOjcyNCwiLi4vY2FydGVzaWFuL3NlbGVjdCI6NzgwLCIuL2NvbnN0YW50cyI6ODE5LCIuL2xheWVycyI6ODIyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MjMsIm1hcGJveC1nbCI6MzQxfV0sODI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9fX0se31dLDgyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZS50ZXh0KCIiKTt2YXIgcj1lLmFwcGVuZCgiYSIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjoiIyIsY2xhc3M6ImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3IiwiZm9udC13ZWlnaHQiOiJib2xkIn0pLnRleHQodC5fY29udGV4dC5saW5rVGV4dCsiICIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZih0Ll9jb250ZXh0LnNlbmREYXRhKXIub24oImNsaWNrIixmdW5jdGlvbigpe3Yuc2VuZERhdGFUb0Nsb3VkKHQpfSk7ZWxzZXt2YXIgbj13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoIi8iKSxpPXdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7ci5hdHRyKHsieGxpbms6eGxpbms6c2hvdyI6Im5ldyIsInhsaW5rOnhsaW5rOmhyZWYiOiIvIituWzJdLnNwbGl0KCIuIilbMF0rIi8iK25bMV0raX0pfX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbixpPXQudHJhY2UsYT1pLl9hcnJheUF0dHJzLG89e307Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sb1tuXT1kLm5lc3RlZFByb3BlcnR5KGksbikuZ2V0KCkuc2xpY2UoKTtmb3IodC50cmFjZT1lLHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sZC5uZXN0ZWRQcm9wZXJ0eSh0LnRyYWNlLG4pLnNldChvW25dKX1mdW5jdGlvbiBhKHQsZSxyLG4pe2Zvcih2YXIgaT10LnRyYW5zZm9ybXMsYT1bdF0sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9X1tzLnR5cGVdO2wmJmwudHJhbnNmb3JtJiYoYT1sLnRyYW5zZm9ybShhLHt0cmFuc2Zvcm06cyxmdWxsVHJhY2U6dCxmdWxsRGF0YTplLGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBhfWZ1bmN0aW9uIG8odCl7dmFyIGUscj17bGVmdDowLHJpZ2h0OjAsYm90dG9tOjAsdG9wOjB9O2lmKHQpZm9yKGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiYoci5sZWZ0Kz10W2VdLmxlZnR8fDAsci5yaWdodCs9dFtlXS5yaWdodHx8MCxyLmJvdHRvbSs9dFtlXS5ib3R0b218fDAsci50b3ArPXRbZV0udG9wfHwwKTtyZXR1cm4gcn1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt0W2VdLl9jYXRlZ29yaWVzPXRbZV0uX2luaXRpYWxDYXRlZ29yaWVzLnNsaWNlKCksdFtlXS5fY2F0ZWdvcmllc01hcD17fTtmb3IodmFyIHI9MDtyPHRbZV0uX2NhdGVnb3JpZXMubGVuZ3RoO3IrKyl0W2VdLl9jYXRlZ29yaWVzTWFwW3RbZV0uX2NhdGVnb3JpZXNbcl1dPXJ9fXZhciBsPXQoImQzIiksdT10KCJmYXN0LWlzbnVtZXJpYyIpLGM9dCgiLi4vcGxvdGx5IiksaD10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGY9dCgiLi4vcmVnaXN0cnkiKSxkPXQoIi4uL2xpYiIpLHA9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLG09dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx2PWUuZXhwb3J0cz17fSxnPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSx5PXQoIi4vZnJhbWVfYXR0cmlidXRlcyIpLGI9ZC5yZWxpbmtQcml2YXRlS2V5cztkLmV4dGVuZEZsYXQodixmKSx2LmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksdi5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPXYuYWxsVHlwZXMsdi5mb250QXR0cnM9dCgiLi9mb250X2F0dHJpYnV0ZXMiKSx2LmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHYuZm9udFdlaWdodD0ibm9ybWFsIjt2YXIgeD12LnN1YnBsb3RzUmVnaXN0cnksXz12LnRyYW5zZm9ybXNSZWdpc3RyeSx3PXQoIi4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksTT10KCIuL2NvbW1hbmQiKTt2LmV4ZWN1dGVBUElDb21tYW5kPU0uZXhlY3V0ZUFQSUNvbW1hbmQsdi5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPU0uY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyx2Lm1hbmFnZUNvbW1hbmRPYnNlcnZlcj1NLm1hbmFnZUNvbW1hbmRPYnNlcnZlcix2Lmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1NLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyx2LmZpbmRTdWJwbG90SWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoIXYuc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm4gcjtmb3IodmFyIG49di5zdWJwbG90c1JlZ2lzdHJ5W2VdLmF0dHIsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO3YudHJhY2VJcyhhLGUpJiYtMT09PXIuaW5kZXhPZihhW25dKSYmci5wdXNoKGFbbl0pfXJldHVybiByfSx2LmdldFN1YnBsb3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj12LnN1YnBsb3RzUmVnaXN0cnlbZV07aWYoIXIpcmV0dXJuW107aWYoISgiY2FydGVzaWFuIiE9PWV8fHQuX2hhcyYmdC5faGFzKCJjYXJ0ZXNpYW4iKSkpcmV0dXJuW107aWYoISgiZ2wyZCIhPT1lfHx0Ll9oYXMmJnQuX2hhcygiZ2wyZCIpKSlyZXR1cm5bXTtpZigiY2FydGVzaWFuIj09PWV8fCJnbDJkIj09PWUpcmV0dXJuIE9iamVjdC5rZXlzKHQuX3Bsb3RzfHx7fSk7Zm9yKHZhciBuPXIuaWRSZWdleCxpPU9iamVjdC5rZXlzKHQpLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO24udGVzdChzKSYmYS5wdXNoKHMpfXZhciBsPXIuaWRSb290Lmxlbmd0aDtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuKyh0LnN1YnN0cihsKXx8MSktKyhlLnN1YnN0cihsKXx8MSl9KSxhfSx2LmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighdi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO2Zvcih2YXIgbixpPXYuc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGE9W10sbz0wO288dC5sZW5ndGg7bysrKWlmKG49dFtvXSwiZ2wyZCI9PT1lJiZ2LnRyYWNlSXMobiwiZ2wyZCIpKXt2YXIgcz1jLkF4ZXMuc3VicGxvdE1hdGNoLGw9IngiK3IubWF0Y2gocylbMV0sdT0ieSIrci5tYXRjaChzKVsyXTtuW2lbMF1dPT09bCYmbltpWzFdXT09PXUmJmEucHVzaChuKX1lbHNlIG5baV09PT1yJiZhLnB1c2gobik7cmV0dXJuIGF9LHYuZ2V0U3VicGxvdENhbGNEYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighdi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO2Zvcih2YXIgbj12LnN1YnBsb3RzUmVnaXN0cnlbZV0uYXR0cixpPVtdLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtvWzBdLnRyYWNlW25dPT09ciYmaS5wdXNoKG8pfXJldHVybiBpfSx2LnJlZHJhd1RleHQ9ZnVuY3Rpb24odCl7aWYoISh0LmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnIpKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zi5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGYuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksKHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pLGUodi5wcmV2aW91c1Byb21pc2VzKHQpKX0sMzAwKX0pfSx2LnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXt0JiYibm9uZSIhPT1sLnNlbGVjdCh0KS5zdHlsZSgiZGlzcGxheSIpfHxyKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgcGxvdCBkaXYgZWxlbWVudC4iKSksdC5fcmVkcmF3VGltZXImJmNsZWFyVGltZW91dCh0Ll9yZWRyYXdUaW1lciksdC5fcmVkcmF3VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHQpcmV0dXJuIHZvaWQgZSh0KTtkZWxldGUgdC5sYXlvdXQud2lkdGgsZGVsZXRlIHQubGF5b3V0LmhlaWdodDt2YXIgcj10LmNoYW5nZWQ7dC5hdXRvcGxheT0hMCxjLnJlbGF5b3V0KHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1yLGUodCl9KX0sMTAwKX0pfSx2LnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24odCl7aWYoKHQuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbihmdW5jdGlvbigpe3QuX3Byb21pc2VzPVtdfSl9LHYuYWRkTGlua3M9ZnVuY3Rpb24odCl7aWYodC5fY29udGV4dC5zaG93TGlua3x8dC5fY29udGV4dC5zaG93U291cmNlcyl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3BhcGVyLnNlbGVjdEFsbCgidGV4dC5qcy1wbG90LWxpbmstY29udGFpbmVyIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJqcy1wbG90LWxpbmstY29udGFpbmVyIiwhMCkuc3R5bGUoeyJmb250LWZhbWlseSI6JyJPcGVuIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZicsImZvbnQtc2l6ZSI6IjEycHgiLGZpbGw6cC5kZWZhdWx0TGluZSwicG9pbnRlci1ldmVudHMiOiJhbGwifSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWwuc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pO3ZhciBpPXIubm9kZSgpLGE9e3k6ZS5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhpKSYmaS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49ZS53aWR0aC0yMD8oYVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGEueD01KTooYVsidGV4dC1hbmNob3IiXT0iZW5kIixhLng9ZS5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoYSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxzPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSx1PXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJm4odCxvKSxzLnRleHQoby50ZXh0KCkmJnUudGV4dCgpPyIgLSAiOiIiKX19LHYuc2VuZERhdGFUb0Nsb3VkPWZ1bmN0aW9uKHQpe3QuZW1pdCgicGxvdGx5X2JlZm9yZWV4cG9ydCIpO3ZhciBlPXdpbmRvdy5QTE9UTFlFTlYmJndpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkx8fCJodHRwczovL3Bsb3QubHkiLHI9bC5zZWxlY3QodCkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxuPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOmUrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gbi5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9di5ncmFwaEpzb24odCwhMSwia2VlcGRhdGEiKSxuLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9LHYuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0fHx7fSxuPXQuX2Z1bGxMYXlvdXQ9e30sYT10LmxheW91dHx8e30sbz10Ll9mdWxsRGF0YXx8W10scz10Ll9mdWxsRGF0YT1bXSxsPXQuZGF0YXx8W107aWYodC5fdHJhbnNpdGlvbkRhdGF8fHYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCksci5faW5pdGlhbEF1dG9TaXplSXNEb25lKXt2YXIgdT1yLndpZHRoLGg9ci5oZWlnaHQ7di5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhhLG4pLGEud2lkdGh8fChuLndpZHRoPXUpLGEuaGVpZ2h0fHwobi5oZWlnaHQ9aCl9ZWxzZXt2LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGEsbik7dmFyIGY9IWEud2lkdGh8fCFhLmhlaWdodCxkPW4uYXV0b3NpemUscD10Ll9jb250ZXh0JiZ0Ll9jb250ZXh0LmF1dG9zaXphYmxlO2YmJihkfHxwKT92LnBsb3RBdXRvU2l6ZSh0LGEsbik6ZiYmdi5zYW5pdGl6ZU1hcmdpbnModCksIWQmJmYmJihhLndpZHRoPW4ud2lkdGgsYS5oZWlnaHQ9bi5oZWlnaHQpfW4uX2luaXRpYWxBdXRvU2l6ZUlzRG9uZT0hMCxuLl9kYXRhTGVuZ3RoPWwubGVuZ3RoLG4uX2dsb2JhbFRyYW5zZm9ybXM9KHQuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLHYuc3VwcGx5RGF0YURlZmF1bHRzKGwscyxhLG4pLG4uX2hhcz12Ll9oYXNQbG90VHlwZS5iaW5kKG4pO3ZhciBtPW4uX21vZHVsZXM7Zm9yKGU9MDtlPG0ubGVuZ3RoO2UrKyl7dmFyIGc9bVtlXTtnLmNsZWFuRGF0YSYmZy5jbGVhbkRhdGEocyl9aWYoby5sZW5ndGg9PT1sLmxlbmd0aClmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKWIoc1tlXSxvW2VdKTt2LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzKGEsbixzLHQuX3RyYW5zaXRpb25EYXRhKSxuLl9oYXNDYXJ0ZXNpYW49bi5faGFzKCJjYXJ0ZXNpYW4iKSxuLl9oYXNHZW89bi5faGFzKCJnZW8iKSxuLl9oYXNHTDNEPW4uX2hhcygiZ2wzZCIpLG4uX2hhc0dMMkQ9bi5faGFzKCJnbDJkIiksbi5faGFzVGVybmFyeT1uLl9oYXMoInRlcm5hcnkiKSxuLl9oYXNQaWU9bi5faGFzKCJwaWUiKSx2LmNsZWFuUGxvdChzLG4sbyxyKSx2LmxpbmtTdWJwbG90cyhzLG4sbyxyKSxiKG4sciksdi5kb0F1dG9NYXJnaW4odCk7dmFyIHk9Yy5BeGVzLmxpc3QodCk7Zm9yKGU9MDtlPHkubGVuZ3RoO2UrKyl7eVtlXS5zZXRTY2FsZSgpfWlmKCh0LmNhbGNkYXRhfHxbXSkubGVuZ3RoPT09cy5sZW5ndGgpZm9yKGU9MDtlPHMubGVuZ3RoO2UrKyl7dmFyIHg9c1tlXSxfPXQuY2FsY2RhdGFbZV1bMF07XyYmXy50cmFjZSYmKF8udHJhY2UuX2hhc0NhbGNUcmFuc2Zvcm0/aShfLHgpOl8udHJhY2U9eCl9fSx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHYuX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9iYXNlUGxvdE1vZHVsZXN8fFtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7aWYoZVtyXS5uYW1lPT09dClyZXR1cm4hMH1yZXR1cm4hMX0sdi5jbGVhblBsb3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPW4uX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHM9b1tpXTtzLmNsZWFuJiZzLmNsZWFuKHQsZSxyLG4pfXZhciBsPSEhbi5fcGFwZXIsdT0hIW4uX2luZm9sYXllcjt0OmZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBjPXJbaV0saD1jLnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgZj10W2FdO2lmKGg9PT1mLnVpZCljb250aW51ZSB0fXZhciBkPSIuaG0iK2grIiwuY29udG91ciIraCsiLC5jYXJwZXQiK2grIiwjY2xpcCIraCsiLC50cmFjZSIraDtsJiZuLl9wYXBlci5zZWxlY3RBbGwoZCkucmVtb3ZlKCksdSYmKG4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIraCkucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy5yYW5nZXNsaWRlci1jb250YWluZXIiKS5zZWxlY3RBbGwoZCkucmVtb3ZlKCkpfW4uX3pvb21sYXllciYmbi5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9LHYubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bi5fcGxvdHN8fHt9LG89ZS5fcGxvdHM9e30scz17X2Z1bGxEYXRhOnQsX2Z1bGxMYXlvdXQ6ZX0sbD1jLkF4ZXMuZ2V0U3VicGxvdHMocyk7Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIHUsaD1sW2ldLGY9YVtoXSxkPWMuQXhlcy5nZXRGcm9tSWQocyxoLCJ4IikscD1jLkF4ZXMuZ2V0RnJvbUlkKHMsaCwieSIpO2Y/KHU9b1toXT1mLHUuX3NjZW5lMmQmJnUuX3NjZW5lMmQudXBkYXRlUmVmcyhlKSx1LnhheGlzLmxheWVyIT09ZC5sYXllciYmKHUueGxpbmVzLmF0dHIoImQiLG51bGwpLHUueGF4aXNsYXllci5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSksdS55YXhpcy5sYXllciE9PXAubGF5ZXImJih1LnlsaW5lcy5hdHRyKCJkIixudWxsKSx1LnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpKToodT1vW2hdPXt9LHUuaWQ9aCksdS54YXhpcz1kLHUueWF4aXM9cCx1Ll9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBtPTA7bTx0Lmxlbmd0aDttKyspe3ZhciB2PXRbbV07aWYodi54YXhpcz09PXUueGF4aXMuX2lkJiZ2LnlheGlzPT09dS55YXhpcy5faWQmJiExPT09di5jbGlwb25heGlzKXt1Ll9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fX12YXIgZz1jLkF4ZXMubGlzdChzLG51bGwsITApO2ZvcihpPTA7aTxnLmxlbmd0aDtpKyspe3ZhciB5PWdbaV0sYj1udWxsO3kub3ZlcmxheWluZyYmKGI9Yy5BeGVzLmdldEZyb21JZChzLHkub3ZlcmxheWluZykpJiZiLm92ZXJsYXlpbmcmJih5Lm92ZXJsYXlpbmc9ITEsYj1udWxsKSx5Ll9tYWluQXhpcz1ifHx5LGImJih5LmRvbWFpbj1iLmRvbWFpbi5zbGljZSgpKSx5Ll9hbmNob3JBeGlzPSJmcmVlIj09PXkuYW5jaG9yP251bGw6Yy5BeGVzLmdldEZyb21JZChzLHkuYW5jaG9yKX19LHYuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxpLGEpe25bYV09ZSxuLmxlbmd0aD1hKzEsImNvbG9yIj09PXQudmFsVHlwZSYmdm9pZCAwPT09dC5kZmx0JiZyLnB1c2gobi5qb2luKCIuIikpfXZhciByLG4saTtmb3Iobj1bXSxyPXQuX21vZHVsZS5fY29sb3JBdHRycyxyfHwodC5fbW9kdWxlLl9jb2xvckF0dHJzPXI9W10saC5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxlKSksaT0wO2k8ci5sZW5ndGg7aSsrKXtkLm5lc3RlZFByb3BlcnR5KHQsIl9pbnB1dC4iK3JbaV0pLmdldCgpfHxkLm5lc3RlZFByb3BlcnR5KHQscltpXSkuc2V0KG51bGwpfX0sdi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJihkLnB1c2hVbmlxdWUodSxyKSxkLnB1c2hVbmlxdWUoYyx0Ll9tb2R1bGUuYmFzZVBsb3RNb2R1bGUpLGgrKyl9dmFyIG8scyxsLHU9bi5fbW9kdWxlcz1bXSxjPW4uX2Jhc2VQbG90TW9kdWxlcz1bXSxoPTA7bi5fdHJhbnNmb3JtTW9kdWxlcz1bXTt2YXIgcD17fSxtPVtdO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspe2lmKGw9dFtvXSxzPXYuc3VwcGx5VHJhY2VEZWZhdWx0cyhsLGgsbixvKSxzLmluZGV4PW8scy5faW5wdXQ9bCxzLl9leHBhbmRlZEluZGV4PWgscy50cmFuc2Zvcm1zJiZzLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgZz1hKHMsZSxyLG4pLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIGI9Z1t5XSx4PXYuc3VwcGx5VHJhY2VEZWZhdWx0cyhiLGgsbixvKTtiLnVpZD14LnVpZD1zLnVpZCt5LHguaW5kZXg9byx4Ll9pbnB1dD1sLHguX2Z1bGxJbnB1dD1zLHguX2V4cGFuZGVkSW5kZXg9aCx4Ll9leHBhbmRlZElucHV0PWIsaSh4KX1lbHNlIHMuX2Z1bGxJbnB1dD1zLHMuX2V4cGFuZGVkSW5wdXQ9cyxpKHMpO2YudHJhY2VJcyhzLCJjYXJwZXRBeGlzIikmJihwW3MuY2FycGV0XT1zKSxmLnRyYWNlSXMocywiY2FycGV0RGVwZW5kZW50IikmJm0ucHVzaChvKX1mb3Iobz0wO288bS5sZW5ndGg7bysrKWlmKHM9ZVttW29dXSxzLnZpc2libGUpe3ZhciBfPXBbcy5jYXJwZXRdO3MuX2NhcnBldD1fLF8mJl8udmlzaWJsZT8ocy54YXhpcz1fLnhheGlzLHMueWF4aXM9Xy55YXhpcyk6cy52aXNpYmxlPSExfX0sdi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGQuY29lcmNlKHR8fHt9LG4sZyxlLHIpfXQ9dHx8e307dmFyIHIsbj17fTtpZihlKCJtb2RlIiksZSgiZGlyZWN0aW9uIiksZSgiZnJvbWN1cnJlbnQiKSxBcnJheS5pc0FycmF5KHQuZnJhbWUpKWZvcihuLmZyYW1lPVtdLHI9MDtyPHQuZnJhbWUubGVuZ3RoO3IrKyluLmZyYW1lW3JdPXYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lW3JdfHx7fSk7ZWxzZSBuLmZyYW1lPXYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lfHx7fSk7aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zaXRpb24pKWZvcihuLnRyYW5zaXRpb249W10scj0wO3I8dC50cmFuc2l0aW9uLmxlbmd0aDtyKyspbi50cmFuc2l0aW9uW3JdPXYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbltyXXx8e30pO2Vsc2Ugbi50cmFuc2l0aW9uPXYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbnx8e30pO3JldHVybiBufSx2LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBkLmNvZXJjZSh0fHx7fSxyLGcuZnJhbWUsZSxuKX12YXIgcj17fTtyZXR1cm4gZSgiZHVyYXRpb24iKSxlKCJyZWRyYXciKSxyfSx2LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGQuY29lcmNlKHR8fHt9LHIsZy50cmFuc2l0aW9uLGUsbil9dmFyIHI9e307cmV0dXJuIGUoImR1cmF0aW9uIiksZSgiZWFzaW5nIikscn0sdi5zdXBwbHlGcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZC5jb2VyY2UodCxyLHksZSxuKX12YXIgcj17fTtyZXR1cm4gZSgiZ3JvdXAiKSxlKCJuYW1lIiksZSgidHJhY2VzIiksZSgiYmFzZWZyYW1lIiksZSgiZGF0YSIpLGUoImxheW91dCIpLHJ9LHYuc3VwcGx5VHJhY2VEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBpKGUscil7cmV0dXJuIGQuY29lcmNlKHQsbyx2LmF0dHJpYnV0ZXMsZSxyKX1mdW5jdGlvbiBhKGUscil7aWYodi50cmFjZUlzKG8sZSkpcmV0dXJuIGQuY29lcmNlKHQsbyx2LnN1YnBsb3RzUmVnaXN0cnlbZV0uYXR0cmlidXRlcyxyKX12YXIgbz17fSxzPXAuZGVmYXVsdHNbZSVwLmRlZmF1bHRzLmxlbmd0aF0sbD1pKCJ2aXNpYmxlIik7aSgidHlwZSIpLGkoInVpZCIpLGkoIm5hbWUiLCJ0cmFjZSAiK24pO2Zvcih2YXIgdT1PYmplY3Qua2V5cyh4KSxjPTA7Yzx1Lmxlbmd0aDtjKyspe3ZhciBoPXVbY107aWYoLTE9PT1bImNhcnRlc2lhbiIsImdsMmQiXS5pbmRleE9mKGgpKXt2YXIgbT14W2hdLmF0dHI7bSYmYShoLG0pfX1pZihsKXtpKCJjdXN0b21kYXRhIiksaSgiaWRzIik7dmFyIGc9di5nZXRNb2R1bGUobyk7by5fbW9kdWxlPWcsdi50cmFjZUlzKG8sInNob3dMZWdlbmQiKSYmKGkoInNob3dsZWdlbmQiKSxpKCJsZWdlbmRncm91cCIpKSxmLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlEZWZhdWx0cyIpKHQsbyxzLHIpLGcmJihnLnN1cHBseURlZmF1bHRzKHQsbyxzLHIpLGQuY29lcmNlSG92ZXJpbmZvKHQsbyxyKSksdi50cmFjZUlzKG8sIm5vT3BhY2l0eSIpfHxpKCJvcGFjaXR5IiksYSgiY2FydGVzaWFuIiwieGF4aXMiKSxhKCJjYXJ0ZXNpYW4iLCJ5YXhpcyIpLGEoImdsMmQiLCJ4YXhpcyIpLGEoImdsMmQiLCJ5YXhpcyIpLHYudHJhY2VJcyhvLCJub3RMZWdlbmRJc29sYXRhYmxlIikmJihvLnZpc2libGU9ISFvLnZpc2libGUpLHYuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHModCxvLHIpfXJldHVybiBvfSx2LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLl9nbG9iYWxUcmFuc2Zvcm1zfHxbXSxpPXIuX3RyYW5zZm9ybU1vZHVsZXN8fFtdO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKXx8MCE9PW4ubGVuZ3RoKWZvcih2YXIgYT10LnRyYW5zZm9ybXN8fFtdLG89bi5jb25jYXQoYSkscz1lLnRyYW5zZm9ybXM9W10sbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgdSxjPW9bbF0saD1jLnR5cGUsZj1fW2hdO2Z8fGQud2FybigiVW5yZWNvZ25pemVkIHRyYW5zZm9ybSB0eXBlICIraCsiLiIpLGYmJmYuc3VwcGx5RGVmYXVsdHM/KHU9Zi5zdXBwbHlEZWZhdWx0cyhjLGUscix0KSx1LnR5cGU9aCx1Ll9tb2R1bGU9ZixkLnB1c2hVbmlxdWUoaSxmKSk6dT1kLmV4dGVuZEZsYXQoe30sYykscy5wdXNoKHUpfX0sdi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gZC5jb2VyY2UodCxlLHYubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBuPWQuY29lcmNlRm9udChyLCJmb250Iik7cigidGl0bGUiKSxkLmNvZXJjZUZvbnQociwidGl0bGVmb250Iix7ZmFtaWx5Om4uZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjQqbi5zaXplKSxjb2xvcjpuLmNvbG9yfSkscigiYXV0b3NpemUiLCEodC53aWR0aCYmdC5oZWlnaHQpKSxyKCJ3aWR0aCIpLHIoImhlaWdodCIpLHIoIm1hcmdpbi5sIikscigibWFyZ2luLnIiKSxyKCJtYXJnaW4udCIpLHIoIm1hcmdpbi5iIikscigibWFyZ2luLnBhZCIpLHIoIm1hcmdpbi5hdXRvZXhwYW5kIiksdC53aWR0aCYmdC5oZWlnaHQmJnYuc2FuaXRpemVNYXJnaW5zKGUpLHIoInBhcGVyX2JnY29sb3IiKSxyKCJzZXBhcmF0b3JzIikscigiaGlkZXNvdXJjZXMiKSxyKCJzbWl0aCIpLGYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiKSxmLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyIpKHQsZSxyKX0sdi5wbG90QXV0b1NpemU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10Ll9jb250ZXh0fHx7fSxzPWEuZnJhbWVNYXJnaW5zLGw9ZC5pc1Bsb3REaXYodCk7aWYobCYmdC5lbWl0KCJwbG90bHlfYXV0b3NpemUiKSxhLmZpbGxGcmFtZSluPXdpbmRvdy5pbm5lcldpZHRoLGk9d2luZG93LmlubmVySGVpZ2h0LGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ZWxzZSBpZih1KHMpJiZzPjApe3ZhciBjPW8odC5fYm91bmRpbmdCb3hNYXJnaW5zKSxoPWMubGVmdCtjLnJpZ2h0LGY9Yy5ib3R0b20rYy50b3AscD0xLTIqcyxtPXIuX2NvbnRhaW5lciYmci5fY29udGFpbmVyLm5vZGU/ci5fY29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp7d2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9O249TWF0aC5yb3VuZChwKihtLndpZHRoLWgpKSxpPU1hdGgucm91bmQocCoobS5oZWlnaHQtZikpfWVsc2V7dmFyIGc9bD93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTp7fTtuPXBhcnNlRmxvYXQoZy53aWR0aCl8fHIud2lkdGgsaT1wYXJzZUZsb2F0KGcuaGVpZ2h0KXx8ci5oZWlnaHR9dmFyIHk9di5sYXlvdXRBdHRyaWJ1dGVzLndpZHRoLm1pbixiPXYubGF5b3V0QXR0cmlidXRlcy5oZWlnaHQubWluO248eSYmKG49eSksaTxiJiYoaT1iKTt2YXIgeD0hZS53aWR0aCYmTWF0aC5hYnMoci53aWR0aC1uKT4xLF89IWUuaGVpZ2h0JiZNYXRoLmFicyhyLmhlaWdodC1pKT4xOyhffHx4KSYmKHgmJihyLndpZHRoPW4pLF8mJihyLmhlaWdodD1pKSksdC5faW5pdGlhbEF1dG9TaXplfHwodC5faW5pdGlhbEF1dG9TaXplPXt3aWR0aDpuLGhlaWdodDppfSksdi5zYW5pdGl6ZU1hcmdpbnMocil9LHYuc3VwcGx5TGF5b3V0TW9kdWxlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtjLkF4ZXMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBvPWUuX2Jhc2VQbG90TW9kdWxlcztmb3IoaT0wO2k8by5sZW5ndGg7aSsrKWE9b1tpXSwiY2FydGVzaWFuIiE9PWEubmFtZSYmYS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmYS5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIHM9ZS5fbW9kdWxlcztmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKWE9c1tpXSxhLnN1cHBseUxheW91dERlZmF1bHRzJiZhLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgbD1lLl90cmFuc2Zvcm1Nb2R1bGVzO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspYT1sW2ldLGEuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJmEuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIsbik7dmFyIHU9T2JqZWN0LmtleXMoZi5jb21wb25lbnRzUmVnaXN0cnkpO2ZvcihpPTA7aTx1Lmxlbmd0aDtpKyspYT1mLmNvbXBvbmVudHNSZWdpc3RyeVt1W2ldXSxhLnN1cHBseUxheW91dERlZmF1bHRzJiZhLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sdi5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTt2b2lkIDAhPT1lLl9nbGNvbnRhaW5lciYmZS5fZ2xjb250YWluZXIucmVtb3ZlKCksdm9pZCAwIT09ZS5fZ2VvY29udGFpbmVyJiZlLl9nZW9jb250YWluZXIucmVtb3ZlKCksZS5fbW9kZUJhciYmZS5fbW9kZUJhci5kZXN0cm95KCksdC5fdHJhbnNpdGlvbkRhdGEmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSxkZWxldGUgdC5kYXRhLGRlbGV0ZSB0LmxheW91dCxkZWxldGUgdC5fZnVsbERhdGEsZGVsZXRlIHQuX2Z1bGxMYXlvdXQsZGVsZXRlIHQuY2FsY2RhdGEsZGVsZXRlIHQuZnJhbWV3b3JrLGRlbGV0ZSB0LmVtcHR5LGRlbGV0ZSB0LmZpZCxkZWxldGUgdC51bmRvcXVldWUsZGVsZXRlIHQudW5kb251bSxkZWxldGUgdC5hdXRvcGxheSxkZWxldGUgdC5jaGFuZ2VkLGRlbGV0ZSB0Ll9wcm9taXNlcyxkZWxldGUgdC5fcmVkcmF3VGltZXIsZGVsZXRlIHQuZmlyc3RzY2F0dGVyLGRlbGV0ZSB0LmhtbHVtY291bnQsZGVsZXRlIHQuaG1waXhjb3VudCxkZWxldGUgdC5udW1ib3hlcyxkZWxldGUgdC5faG92ZXJUaW1lcixkZWxldGUgdC5fbGFzdEhvdmVyVGltZSxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sdi5zdHlsZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dC5fbW9kdWxlcyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5zdHlsZSYmbi5zdHlsZSh0KX19LHYuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxpPXQubWFyZ2luLGE9ci0oaS5sK2kuciksbz1uLShpLnQraS5iKTthPDAmJihlPShyLTEpLyhpLmwraS5yKSxpLmw9TWF0aC5mbG9vcihlKmkubCksaS5yPU1hdGguZmxvb3IoZSppLnIpKSxvPDAmJihlPShuLTEpLyhpLnQraS5iKSxpLnQ9TWF0aC5mbG9vcihlKmkudCksaS5iPU1hdGguZmxvb3IoZSppLmIpKX19LHYuYXV0b01hcmdpbj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtpZihuLl9wdXNobWFyZ2lufHwobi5fcHVzaG1hcmdpbj17fSksITEhPT1uLm1hcmdpbi5hdXRvZXhwYW5kKXtpZihyKXt2YXIgaT12b2lkIDA9PT1yLnBhZD8xMjpyLnBhZDtyLmwrci5yPi41Km4ud2lkdGgmJihyLmw9ci5yPTApLHIuYityLnQ+LjUqbi5oZWlnaHQmJihyLmI9ci50PTApLG4uX3B1c2htYXJnaW5bZV09e2w6e3ZhbDpyLngsc2l6ZTpyLmwraX0scjp7dmFsOnIueCxzaXplOnIucitpfSxiOnt2YWw6ci55LHNpemU6ci5iK2l9LHQ6e3ZhbDpyLnksc2l6ZTpyLnQraX19fWVsc2UgZGVsZXRlIG4uX3B1c2htYXJnaW5bZV07bi5fcmVwbG90dGluZ3x8di5kb0F1dG9NYXJnaW4odCl9fSx2LmRvQXV0b01hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3NpemV8fChlLl9zaXplPXt9KSxlLl9wdXNobWFyZ2lufHwoZS5fcHVzaG1hcmdpbj17fSk7dmFyIHI9ZS5fc2l6ZSxuPUpTT04uc3RyaW5naWZ5KHIpLGk9TWF0aC5tYXgoZS5tYXJnaW4ubHx8MCwwKSxhPU1hdGgubWF4KGUubWFyZ2luLnJ8fDAsMCksbz1NYXRoLm1heChlLm1hcmdpbi50fHwwLDApLHM9TWF0aC5tYXgoZS5tYXJnaW4uYnx8MCwwKSxsPWUuX3B1c2htYXJnaW47aWYoITEhPT1lLm1hcmdpbi5hdXRvZXhwYW5kKXtsLmJhc2U9e2w6e3ZhbDowLHNpemU6aX0scjp7dmFsOjEsc2l6ZTphfSx0Ont2YWw6MSxzaXplOm99LGI6e3ZhbDowLHNpemU6c319O2Zvcih2YXIgaD1PYmplY3Qua2V5cyhsKSxmPTA7ZjxoLmxlbmd0aDtmKyspZm9yKHZhciBkPWhbZl0scD1sW2RdLmx8fHt9LG09bFtkXS5ifHx7fSx2PXAudmFsLGc9cC5zaXplLHk9bS52YWwsYj1tLnNpemUseD0wO3g8aC5sZW5ndGg7eCsrKXt2YXIgXz1oW3hdO2lmKHUoZykmJmxbX10ucil7dmFyIHc9bFtfXS5yLnZhbCxNPWxbX10uci5zaXplO2lmKHc+dil7dmFyIGs9KGcqdysoTS1lLndpZHRoKSp2KS8ody12KSxBPShNKigxLXYpKyhnLWUud2lkdGgpKigxLXcpKS8ody12KTtrPj0wJiZBPj0wJiZrK0E+aSthJiYoaT1rLGE9QSl9fWlmKHUoYikmJmxbX10udCl7dmFyIFQ9bFtfXS50LnZhbCxTPWxbX10udC5zaXplO2lmKFQ+eSl7dmFyIEU9KGIqVCsoUy1lLmhlaWdodCkqeSkvKFQteSksTD0oUyooMS15KSsoYi1lLmhlaWdodCkqKDEtVCkpLyhULXkpO0U+PTAmJkw+PTAmJkUrTD5zK28mJihzPUUsbz1MKX19fX1pZihyLmw9TWF0aC5yb3VuZChpKSxyLnI9TWF0aC5yb3VuZChhKSxyLnQ9TWF0aC5yb3VuZChvKSxyLmI9TWF0aC5yb3VuZChzKSxyLnA9TWF0aC5yb3VuZChlLm1hcmdpbi5wYWQpLHIudz1NYXRoLnJvdW5kKGUud2lkdGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQoZS5oZWlnaHQpLXIudC1yLmIsIWUuX3JlcGxvdHRpbmcmJiJ7fSIhPT1uJiZuIT09SlNPTi5zdHJpbmdpZnkoZS5fc2l6ZSkpcmV0dXJuIGMucGxvdCh0KX0sdi5ncmFwaEpzb249ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBudWxsO2lmKGQuaXNQbGFpbk9iamVjdCh0KSl7dmFyIGUsbixpPXt9O2ZvcihlIGluIHQpaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0mJi0xPT09WyJfIiwiWyJdLmluZGV4T2YoZS5jaGFyQXQoMCkpKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1lLnN1YnN0cihlLmxlbmd0aC0zKSljb250aW51ZX1lbHNlIGlmKCJrZWVwc3RyZWFtIj09PXIpe2lmKCJzdHJpbmciPT10eXBlb2Yobj10W2UrInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MCYmIWQuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpY29udGludWV9ZWxzZSBpZigia2VlcGFsbCIhPT1yJiYic3RyaW5nIj09dHlwZW9mKG49dFtlKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjApY29udGludWU7aVtlXT1hKHRbZV0pfXJldHVybiBpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGEpOmQuaXNKU0RhdGUodCk/ZC5tczJEYXRlVGltZUxvY2FsKCt0KTp0fShpJiZlJiYhdC5fZnVsbERhdGF8fGkmJiFlJiYhdC5fZnVsbExheW91dCkmJnYuc3VwcGx5RGVmYXVsdHModCk7dmFyIG89aT90Ll9mdWxsRGF0YTp0LmRhdGEscz1pP3QuX2Z1bGxMYXlvdXQ6dC5sYXlvdXQsbD0odC5fdHJhbnNpdGlvbkRhdGF8fHt9KS5fZnJhbWVzLHU9e2RhdGE6KG98fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9YSh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KX07cmV0dXJuIGV8fCh1LmxheW91dD1hKHMpKSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHU9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLGwmJih1LmZyYW1lcz1hKGwpKSwib2JqZWN0Ij09PW4/dTpKU09OLnN0cmluZ2lmeSh1KX0sdi5tb2RpZnlGcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXN3aXRjaChuPWVbcl0sbi50eXBlKXtjYXNlInJlcGxhY2UiOmk9bi52YWx1ZTt2YXIgcz0oYVtuLmluZGV4XXx8e30pLm5hbWUsbD1pLm5hbWU7YVtuLmluZGV4XT1vW2xdPWksbCE9PXMmJihkZWxldGUgb1tzXSxvW2xdPWkpO2JyZWFrO2Nhc2UiaW5zZXJ0IjppPW4udmFsdWUsb1tpLm5hbWVdPWksYS5zcGxpY2Uobi5pbmRleCwwLGkpO2JyZWFrO2Nhc2UiZGVsZXRlIjppPWFbbi5pbmRleF0sZGVsZXRlIG9baS5uYW1lXSxhLnNwbGljZShuLmluZGV4LDEpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdi5jb21wdXRlRnJhbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lIik7dmFyIHM9b1tlLnRvU3RyaW5nKCldO2lmKCFzKXJldHVybiExO2Zvcih2YXIgbD1bc10sdT1bcy5uYW1lXTtzLmJhc2VmcmFtZSYmKHM9b1tzLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJi0xPT09dS5pbmRleE9mKHMubmFtZSk7KWwucHVzaChzKSx1LnB1c2gocy5uYW1lKTtmb3IodmFyIGM9e307cz1sLnBvcCgpOylpZihzLmxheW91dCYmKGMubGF5b3V0PXYuZXh0ZW5kTGF5b3V0KGMubGF5b3V0LHMubGF5b3V0KSkscy5kYXRhKXtpZihjLmRhdGF8fChjLmRhdGE9W10pLCEobj1zLnRyYWNlcykpZm9yKG49W10scj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2ZvcihjLnRyYWNlc3x8KGMudHJhY2VzPVtdKSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyl2b2lkIDAhPT0oaT1uW3JdKSYmbnVsbCE9PWkmJihhPWMudHJhY2VzLmluZGV4T2YoaSksLTE9PT1hJiYoYT1jLmRhdGEubGVuZ3RoLGMudHJhY2VzW2FdPWkpLGMuZGF0YVthXT12LmV4dGVuZFRyYWNlKGMuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gY30sdi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSx2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsdSxjLGg9ZC5leHRlbmREZWVwTm9BcnJheXMoe30sZXx8e30pLGY9ZC5leHBhbmRPYmplY3RQYXRocyhoKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspbj1kLm5lc3RlZFByb3BlcnR5KGYsclthXSksaT1uLmdldCgpLHZvaWQgMD09PWk/ZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChudWxsKToobi5zZXQobnVsbCksZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChpKSk7aWYodD1kLmV4dGVuZERlZXBOb0FycmF5cyh0fHx7fSxmKSxyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHM9ZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLHU9cy5nZXQoKSl7Zm9yKGw9ZC5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pLGM9bC5nZXQoKSxBcnJheS5pc0FycmF5KGMpfHwoYz1bXSxsLnNldChjKSksbz0wO288dS5sZW5ndGg7bysrKXt2YXIgbT11W29dO2Nbb109bnVsbD09PW0/bnVsbDp2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKGNbb10sbSl9bC5zZXQoYyl9cmV0dXJuIHR9LHYuZGF0YUFycmF5Q29udGFpbmVycz1bInRyYW5zZm9ybXMiXSx2LmxheW91dEFycmF5Q29udGFpbmVycz1mLmxheW91dEFycmF5Q29udGFpbmVycyx2LmV4dGVuZFRyYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYuZGF0YUFycmF5Q29udGFpbmVycyl9LHYuZXh0ZW5kTGF5b3V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYubGF5b3V0QXJyYXlDb250YWluZXJzKX0sdi50cmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKCl7dmFyIG47Zm9yKG49MDtuPHkubGVuZ3RoO24rKyl7dmFyIGk9eVtuXSxhPXQuX2Z1bGxEYXRhW2ldLG89YS5fbW9kdWxlO28mJihvLmFuaW1hdGFibGUmJmIucHVzaChpKSx0LmRhdGFbeVtuXV09di5leHRlbmRUcmFjZSh0LmRhdGFbeVtuXV0sZVtuXSkpfXZhciBzPWQuZXhwYW5kT2JqZWN0UGF0aHMoZC5leHRlbmREZWVwTm9BcnJheXMoe30scikpLGw9L15beHldYXhpc1swLTldKiQvO2Zvcih2YXIgdSBpbiBzKWwudGVzdCh1KSYmZGVsZXRlIHNbdV0ucmFuZ2U7cmV0dXJuIHYuZXh0ZW5kTGF5b3V0KHQubGF5b3V0LHMpLGRlbGV0ZSB0LmNhbGNkYXRhLHYuc3VwcGx5RGVmYXVsdHModCksdi5kb0NhbGNkYXRhKHQpLHcuY2FsYyh0KSxQcm9taXNlLnJlc29sdmUoKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVByb21pc2UucmVzb2x2ZSgpO2lmKCF0KXJldHVybiBlO2Zvcig7dC5sZW5ndGg7KWU9ZS50aGVuKHQuc2hpZnQoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gbCh0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX1mdW5jdGlvbiB1KCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuIGwrKyxmdW5jdGlvbigpe3UrKyx4fHx1IT09bHx8aChlKX19dC5fdHJhbnNpdGlvbmluZz0hMCxhLmR1cmF0aW9uPjAmJih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSEwKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXt4PSEwfSksCmkucmVkcmF3JiZ0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYy5yZWRyYXcodCl9KSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXt0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uaW50ZXJydXB0ZWQiLFtdKX0pO3ZhciBvLHMsbD0wLHU9MCxmPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxwPSExO2lmKHIpZm9yKHM9MDtzPGYubGVuZ3RoO3MrKylpZihmW3NdLnRyYW5zaXRpb25BeGVzKXt2YXIgbT1kLmV4cGFuZE9iamVjdFBhdGhzKHIpO3A9ZltzXS50cmFuc2l0aW9uQXhlcyh0LG0sYSxuKXx8cH1mb3IocD8obz1kLmV4dGVuZEZsYXQoe30sYSksby5kdXJhdGlvbj0wKTpvPWEscz0wO3M8Zi5sZW5ndGg7cysrKWZbc10ucGxvdCh0LGIsbyxuKTtzZXRUaW1lb3V0KG4oKSl9KX1mdW5jdGlvbiBoKGUpe2lmKHQuX3RyYW5zaXRpb25EYXRhKXJldHVybiBsKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpZihpLnJlZHJhdylyZXR1cm4gYy5yZWRyYXcodCl9KS50aGVuKGZ1bmN0aW9uKCl7dC5fdHJhbnNpdGlvbmluZz0hMSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSExLHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25lZCIsW10pfSkudGhlbihlKX1mdW5jdGlvbiBmKCl7aWYodC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuIHQuX3RyYW5zaXRpb25pbmc9ITEscyh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX12YXIgcCxtLGc9QXJyYXkuaXNBcnJheShlKT9lLmxlbmd0aDowLHk9bi5zbGljZSgwLGcpLGI9W10seD0hMTtmb3IocD0wO3A8eS5sZW5ndGg7cCsrKXttPXlbcF07dmFyIF89dC5fZnVsbERhdGFbbV0sTT1fLl9tb2R1bGU7aWYoTSYmIU0uYW5pbWF0YWJsZSl7dmFyIGs9e307Zm9yKHZhciBBIGluIGVbcF0pa1tBXT1bZVtwXVtBXV19fXZhciBUPVt2LnByZXZpb3VzUHJvbWlzZXMsZixvLHYucmVob3Zlcix1XSxTPWQuc3luY09yQXN5bmMoVCx0KTtyZXR1cm4gUyYmUy50aGVufHwoUz1Qcm9taXNlLnJlc29sdmUoKSksUy50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KX0sdi5kb0NhbGNkYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz1jLkF4ZXMubGlzdCh0KSxsPXQuX2Z1bGxEYXRhLHU9dC5fZnVsbExheW91dCxkPW5ldyBBcnJheShsLmxlbmd0aCkscD0odC5jYWxjZGF0YXx8W10pLnNsaWNlKDApO2Zvcih0LmNhbGNkYXRhPWQsdC5maXJzdHNjYXR0ZXI9ITAsdC5udW1ib3hlcz0wLHQuX2htcGl4Y291bnQ9MCx0Ll9obWx1bWNvdW50PTAsdS5fcGllY29sb3JtYXA9e30sdS5fcGllZGVmYXVsdGNvbG9yY291bnQ9MCxpPTA7aTxsLmxlbmd0aDtpKyspQXJyYXkuaXNBcnJheShlKSYmLTE9PT1lLmluZGV4T2YoaSkmJihkW2ldPXBbaV0pO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspcj1sW2ldLHIuX2FycmF5QXR0cnM9aC5maW5kQXJyYXlBdHRyaWJ1dGVzKHIpO3Mobyk7dmFyIHY9ITE7Zm9yKGk9MDtpPGwubGVuZ3RoO2krKylpZihyPWxbaV0sITA9PT1yLnZpc2libGUmJnIudHJhbnNmb3Jtcylmb3Iobj1yLl9tb2R1bGUsbiYmbi5jYWxjJiZuLmNhbGModCxyKSxhPTA7YTxyLnRyYW5zZm9ybXMubGVuZ3RoO2ErKyl7dmFyIGc9ci50cmFuc2Zvcm1zW2FdO249X1tnLnR5cGVdLG4mJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAsdj0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLGcpKX1pZih2KXtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0uX21pbj1bXSxvW2ldLl9tYXg9W10sb1tpXS5fY2F0ZWdvcmllcz1bXSxvW2ldLl9jYXRlZ29yaWVzTWFwPXt9O3Mobyl9Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIHk9W107cj1sW2ldLCEwPT09ci52aXNpYmxlJiYobj1yLl9tb2R1bGUpJiZuLmNhbGMmJih5PW4uY2FsYyh0LHIpKSxBcnJheS5pc0FycmF5KHkpJiZ5WzBdfHwoeT1be3g6bSx5Om19XSkseVswXS50fHwoeVswXS50PXt9KSx5WzBdLnRyYWNlPXIsZFtpXT15fWYuZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsImNhbGMiKSh0KX0sdi5yZWhvdmVyPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXImJnQuX2Z1bGxMYXlvdXQuX3JlaG92ZXIoKX0sdi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dC50cmFjZUhhc2gsYT17fTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbz1lW25dLHM9b1swXS50cmFjZTtzLnZpc2libGUmJihhW3MudHlwZV09YVtzLnR5cGVdfHxbXSxhW3MudHlwZV0ucHVzaChvKSl9dmFyIGw9T2JqZWN0LmtleXMoaSksdT1PYmplY3Qua2V5cyhhKTtmb3Iobj0wO248bC5sZW5ndGg7bisrKXt2YXIgYz1sW25dO2lmKC0xPT09dS5pbmRleE9mKGMpKXt2YXIgaD1pW2NdWzBdO2hbMF0udHJhY2UudmlzaWJsZT0hMSxhW2NdPVtoXX19Zm9yKHU9T2JqZWN0LmtleXMoYSksbj0wO248dS5sZW5ndGg7bisrKXt2YXIgZj1hW3Vbbl1dO2ZbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHQsZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTshMD09PW5bMF0udHJhY2UudmlzaWJsZSYmZS5wdXNoKG4pfXJldHVybiBlfShmKSxyKX10LnRyYWNlSGFzaD1hfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MzIsIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vbGliIjo3MjQsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3NTMsIi4uL3Bsb3RseSI6NzU5LCIuLi9yZWdpc3RyeSI6ODQyLCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3NjAsIi4vYXR0cmlidXRlcyI6NzYyLCIuL2NvbW1hbmQiOjc4NywiLi9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi9mcmFtZV9hdHRyaWJ1dGVzIjo3ODksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxOCxkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjl9XSw4Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9bi5tYXJrZXI7ZS5leHBvcnRzPXtyOm4ucix0Om4udCxtYXJrZXI6e2NvbG9yOmkuY29sb3Isc2l6ZTppLnNpemUsc3ltYm9sOmkuc3ltYm9sLG9wYWNpdHk6aS5vcGFjaXR5fX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDgyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEoe30sZSx7c2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiJ9LHRpY2tvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl19LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjB9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxlbmRwYWRkaW5nOnt2YWxUeXBlOiJudW1iZXIifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn19KX12YXIgaT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89YSh7fSxpLmRvbWFpbix7fSk7ZS5leHBvcnRzPXtyYWRpYWxheGlzOm4oInJhZGlhbCIse3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LGRvbWFpbjpvLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJudW1iZXIifX0pLGFuZ3VsYXJheGlzOm4oImFuZ3VsYXIiLHtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0se3ZhbFR5cGU6Im51bWJlciIsZGZsdDozNjB9XX0sZG9tYWluOm99KSxsYXlvdXQ6e2RpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdfSxvcmllbnRhdGlvbjp7dmFsVHlwZToiYW5nbGUifX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NzV9XSw4MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGUuZXhwb3J0cz10KCIuL21pY3JvcG9sYXIiKSkubWFuYWdlcj10KCIuL21pY3JvcG9sYXJfbWFuYWdlciIpfSx7Ii4vbWljcm9wb2xhciI6ODMxLCIuL21pY3JvcG9sYXJfbWFuYWdlciI6ODMyfV0sODMxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5leHRlbmREZWVwQWxsLG89dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxzPWUuZXhwb3J0cz17dmVyc2lvbjoiMC4yLjIifTtzLkF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3I9dHx8cjt2YXIgYz11LmRhdGEsZj11LmxheW91dDtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiByfHxyLm5vZGVOYW1lKSYmKHI9bi5zZWxlY3QocikpLHIuZGF0dW0oYykuZWFjaChmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbCh0KSUzNjArZi5vcmllbnRhdGlvbn12YXIgYz10LnNsaWNlKCk7aD17ZGF0YTpzLnV0aWwuY2xvbmVKc29uKGMpLGxheW91dDpzLnV0aWwuY2xvbmVKc29uKGYpfTt2YXIgZD0wO2MuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuY29sb3J8fCh0LmNvbG9yPWYuZGVmYXVsdENvbG9yUmFuZ2VbZF0sZD0oZCsxKSVmLmRlZmF1bHRDb2xvclJhbmdlLmxlbmd0aCksdC5zdHJva2VDb2xvcnx8KHQuc3Ryb2tlQ29sb3I9IkxpbmVQbG90Ij09PXQuZ2VvbWV0cnk/dC5jb2xvcjpuLnJnYih0LmNvbG9yKS5kYXJrZXIoKS50b1N0cmluZygpKSxoLmRhdGFbZV0uY29sb3I9dC5jb2xvcixoLmRhdGFbZV0uc3Ryb2tlQ29sb3I9dC5zdHJva2VDb2xvcixoLmRhdGFbZV0uc3Ryb2tlRGFzaD10LnN0cm9rZURhc2gsaC5kYXRhW2VdLnN0cm9rZVNpemU9dC5zdHJva2VTaXplfSk7dmFyIHA9Yy5maWx0ZXIoZnVuY3Rpb24odCxlKXt2YXIgcj10LnZpc2libGU7cmV0dXJuIHZvaWQgMD09PXJ8fCEwPT09cn0pLG09ITEsdj1wLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBtPW18fHZvaWQgMCE9PXQuZ3JvdXBJZCx0fSk7aWYobSl7dmFyIGc9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQuZ3JvdXBJZD90Lmdyb3VwSWQ6InVuc3RhY2tlZCJ9KS5lbnRyaWVzKHYpLHk9W10sYj1nLm1hcChmdW5jdGlvbih0LGUpe2lmKCJ1bnN0YWNrZWQiPT09dC5rZXkpcmV0dXJuIHQudmFsdWVzO3ZhciByPXQudmFsdWVzWzBdLnIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDB9KTtyZXR1cm4gdC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih0LGUsbil7dC55U3RhY2s9W3JdLHkucHVzaChyKSxyPXMudXRpbC5zdW1BcnJheXModC5yLHIpfSksdC52YWx1ZXN9KTtwPW4ubWVyZ2UoYil9cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC50PUFycmF5LmlzQXJyYXkodC50WzBdKT90LnQ6W3QudF0sdC5yPUFycmF5LmlzQXJyYXkodC5yWzBdKT90LnI6W3Qucl19KTt2YXIgeD1NYXRoLm1pbihmLndpZHRoLWYubWFyZ2luLmxlZnQtZi5tYXJnaW4ucmlnaHQsZi5oZWlnaHQtZi5tYXJnaW4udG9wLWYubWFyZ2luLmJvdHRvbSkvMjt4PU1hdGgubWF4KDEwLHgpO3ZhciBfLHc9W2YubWFyZ2luLmxlZnQreCxmLm1hcmdpbi50b3AreF07aWYobSl7Xz1bMCxuLm1heChzLnV0aWwuc3VtQXJyYXlzKHMudXRpbC5hcnJheUxhc3QocCkuclswXSxzLnV0aWwuYXJyYXlMYXN0KHkpKSldfWVsc2UgXz1uLmV4dGVudChzLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucn0pKSk7Zi5yYWRpYWxBeGlzLmRvbWFpbiE9cy5EQVRBRVhURU5UJiYoX1swXT0wKSxpPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKGYucmFkaWFsQXhpcy5kb21haW4hPXMuREFUQUVYVEVOVCYmZi5yYWRpYWxBeGlzLmRvbWFpbj9mLnJhZGlhbEF4aXMuZG9tYWluOl8pLnJhbmdlKFswLHhdKSxoLmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1pLmRvbWFpbigpO3ZhciBNLGs9cy51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR9KSksQT0ic3RyaW5nIj09dHlwZW9mIGtbMF07QSYmKGs9cy51dGlsLmRlZHVwbGljYXRlKGspLE09ay5zbGljZSgpLGs9bi5yYW5nZShrLmxlbmd0aCkscD1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXQ7cmV0dXJuIHQudD1ba10sbSYmKHIueVN0YWNrPXQueVN0YWNrKSxyfSkpO3ZhciBUPXAuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIkxpbmVQbG90Ij09PXQuZ2VvbWV0cnl8fCJEb3RQbG90Ij09PXQuZ2VvbWV0cnl9KS5sZW5ndGg9PT1wLmxlbmd0aCxTPW51bGw9PT1mLm5lZWRzRW5kU3BhY2luZz9BfHwhVDpmLm5lZWRzRW5kU3BhY2luZyxFPWYuYW5ndWxhckF4aXMuZG9tYWluJiZmLmFuZ3VsYXJBeGlzLmRvbWFpbiE9cy5EQVRBRVhURU5UJiYhQSYmZi5hbmd1bGFyQXhpcy5kb21haW5bMF0+PTAsTD1FP2YuYW5ndWxhckF4aXMuZG9tYWluOm4uZXh0ZW50KGspLEM9TWF0aC5hYnMoa1sxXS1rWzBdKTtUJiYhQSYmKEM9MCk7dmFyIHo9TC5zbGljZSgpO1MmJkEmJih6WzFdKz1DKTt2YXIgST1mLmFuZ3VsYXJBeGlzLnRpY2tzQ291bnR8fDQ7ST44JiYoST1JLyhJLzgpK0klOCksZi5hbmd1bGFyQXhpcy50aWNrc1N0ZXAmJihJPSh6WzFdLXpbMF0pL0kpO3ZhciBEPWYuYW5ndWxhckF4aXMudGlja3NTdGVwfHwoelsxXS16WzBdKS8oSSooZi5taW5vclRpY2tzKzEpKTtNJiYoRD1NYXRoLm1heChNYXRoLnJvdW5kKEQpLDEpKSx6WzJdfHwoelsyXT1EKTt2YXIgUD1uLnJhbmdlLmFwcGx5KHRoaXMseik7aWYoUD1QLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KHQudG9QcmVjaXNpb24oMTIpKX0pLGw9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oei5zbGljZSgwLDIpKS5yYW5nZSgiY2xvY2t3aXNlIj09PWYuZGlyZWN0aW9uP1swLDM2MF06WzM2MCwwXSksaC5sYXlvdXQuYW5ndWxhckF4aXMuZG9tYWluPWwuZG9tYWluKCksaC5sYXlvdXQuYW5ndWxhckF4aXMuZW5kUGFkZGluZz1TP0M6MCx2b2lkIDA9PT0oZT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoInN2Zy5jaGFydC1yb290IikpfHxlLmVtcHR5KCkpe3ZhciBPPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+IiwiYXBwbGljYXRpb24veG1sIiksUj10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKE8uZG9jdW1lbnRFbGVtZW50LCEwKSk7ZT1uLnNlbGVjdChSKX1lLnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLGUuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSksZS5zZWxlY3QoIi5yYWRpYWwuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBGLGo9ZS5zZWxlY3QoIi5jaGFydC1ncm91cCIpLE49e2ZpbGw6Im5vbmUiLHN0cm9rZTpmLnRpY2tDb2xvcn0sQj17ImZvbnQtc2l6ZSI6Zi5mb250LnNpemUsImZvbnQtZmFtaWx5IjpmLmZvbnQuZmFtaWx5LGZpbGw6Zi5mb250LmNvbG9yLCJ0ZXh0LXNoYWRvdyI6WyItMXB4IDBweCIsIjFweCAtMXB4IiwiLTFweCAxcHgiLCIxcHggMXB4Il0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiAiK3QrIiAwICIrZi5mb250Lm91dGxpbmVDb2xvcn0pLmpvaW4oIiwiKX07aWYoZi5zaG93TGVnZW5kKXtGPWUuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCxmLm1hcmdpbi50b3BdKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KTt2YXIgVT1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIHIuc3ltYm9sPSJEb3RQbG90Ij09PXQuZ2VvbWV0cnk/dC5kb3RUeXBlfHwiY2lyY2xlIjoiTGluZVBsb3QiIT10Lmdlb21ldHJ5PyJzcXVhcmUiOiJsaW5lIixyLnZpc2libGVJbkxlZ2VuZD12b2lkIDA9PT10LnZpc2libGVJbkxlZ2VuZHx8dC52aXNpYmxlSW5MZWdlbmQsci5jb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LnN0cm9rZUNvbG9yOnQuY29sb3Iscn0pO3MuTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmFtZXx8IkVsZW1lbnQiK2V9KSxsZWdlbmRDb25maWc6YSh7fSxzLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkubGVnZW5kQ29uZmlnLHtjb250YWluZXI6RixlbGVtZW50czpVLHJldmVyc2VPcmRlcjpmLmxlZ2VuZC5yZXZlcnNlT3JkZXJ9KX0pKCk7dmFyIFY9Ri5ub2RlKCkuZ2V0QkJveCgpO3g9TWF0aC5taW4oZi53aWR0aC1WLndpZHRoLWYubWFyZ2luLmxlZnQtZi5tYXJnaW4ucmlnaHQsZi5oZWlnaHQtZi5tYXJnaW4udG9wLWYubWFyZ2luLmJvdHRvbSkvMix4PU1hdGgubWF4KDEwLHgpLHc9W2YubWFyZ2luLmxlZnQreCxmLm1hcmdpbi50b3AreF0saS5yYW5nZShbMCx4XSksaC5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49aS5kb21haW4oKSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1t3WzBdK3gsd1sxXS14XSsiKSIpfWVsc2UgRj1lLnNlbGVjdCgiLmxlZ2VuZC1ncm91cCIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pO2UuYXR0cih7d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHR9KS5zdHlsZSh7b3BhY2l0eTpmLm9wYWNpdHl9KSxqLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIikiKS5zdHlsZSh7Y3Vyc29yOiJjcm9zc2hhaXIifSk7dmFyIEg9WyhmLndpZHRoLShmLm1hcmdpbi5sZWZ0K2YubWFyZ2luLnJpZ2h0KzIqeCsoVj9WLndpZHRoOjApKSkvMiwoZi5oZWlnaHQtKGYubWFyZ2luLnRvcCtmLm1hcmdpbi5ib3R0b20rMip4KSkvMl07aWYoSFswXT1NYXRoLm1heCgwLEhbMF0pLEhbMV09TWF0aC5tYXgoMCxIWzFdKSxlLnNlbGVjdCgiLm91dGVyLWdyb3VwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSCsiKSIpLGYudGl0bGUpe3ZhciBxPWUuc2VsZWN0KCJnLnRpdGxlLWdyb3VwIHRleHQiKS5zdHlsZShCKS50ZXh0KGYudGl0bGUpLEc9cS5ub2RlKCkuZ2V0QkJveCgpO3EuYXR0cih7eDp3WzBdLUcud2lkdGgvMix5OndbMV0teC0yMH0pfXZhciBZPWUuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKTtpZihmLnJhZGlhbEF4aXMuZ3JpZExpbmVzVmlzaWJsZSl7dmFyIFg9WS5zZWxlY3RBbGwoImNpcmNsZS5ncmlkLWNpcmNsZSIpLmRhdGEoaS50aWNrcyg1KSk7WC5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7Y2xhc3M6ImdyaWQtY2lyY2xlIn0pLnN0eWxlKE4pLFguYXR0cigiciIsaSksWC5leGl0KCkucmVtb3ZlKCl9WS5zZWxlY3QoImNpcmNsZS5vdXRzaWRlLWNpcmNsZSIpLmF0dHIoe3I6eH0pLnN0eWxlKE4pO3ZhciBXPWUuc2VsZWN0KCJjaXJjbGUuYmFja2dyb3VuZC1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZSh7ZmlsbDpmLmJhY2tncm91bmRDb2xvcixzdHJva2U6Zi5zdHJva2V9KTtpZihmLnJhZGlhbEF4aXMudmlzaWJsZSl7dmFyIFo9bi5zdmcuYXhpcygpLnNjYWxlKGkpLnRpY2tzKDUpLnRpY2tTaXplKDUpO1kuY2FsbChaKS5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK2YucmFkaWFsQXhpcy5vcmllbnRhdGlvbisiKSJ9KSxZLnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKE4pLFkuc2VsZWN0QWxsKCJnPnRleHQiKS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnQrZi5yYWRpYWxBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQikuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6InN0YXJ0In0pLmF0dHIoe3g6MCx5OjAsZHg6MCxkeTowLHRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJob3Jpem9udGFsIj09PWYucmFkaWFsQXhpcy50aWNrT3JpZW50YXRpb24/InJvdGF0ZSgiKy1mLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikgdHJhbnNsYXRlKCIrWzAsQlsiZm9udC1zaXplIl1dKyIpIjoidHJhbnNsYXRlKCIrWzAsQlsiZm9udC1zaXplIl1dKyIpIn19KSxZLnNlbGVjdEFsbCgiZz5saW5lIikuc3R5bGUoe3N0cm9rZToiYmxhY2sifSl9dmFyIEo9ZS5zZWxlY3QoIi5hbmd1bGFyLmF4aXMtZ3JvdXAiKS5zZWxlY3RBbGwoImcuYW5ndWxhci10aWNrIikuZGF0YShQKSxLPUouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyLXRpY2siLCEwKTtKLmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJyb3RhdGUoIit1KHQsZSkrIikifX0pLnN0eWxlKHtkaXNwbGF5OmYuYW5ndWxhckF4aXMudmlzaWJsZT8iYmxvY2siOiJub25lIn0pLEouZXhpdCgpLnJlbW92ZSgpLEsuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiZ3JpZC1saW5lIiwhMCkuY2xhc3NlZCgibWFqb3IiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKT09MH0pLmNsYXNzZWQoIm1pbm9yIixmdW5jdGlvbih0LGUpe3JldHVybiEoZSUoZi5taW5vclRpY2tzKzEpPT0wKX0pLnN0eWxlKE4pLEsuc2VsZWN0QWxsKCIubWlub3IiKS5zdHlsZSh7c3Ryb2tlOmYubWlub3JUaWNrQ29sb3J9KSxKLnNlbGVjdCgibGluZS5ncmlkLWxpbmUiKS5hdHRyKHt4MTpmLnRpY2tMZW5ndGg/eC1mLnRpY2tMZW5ndGg6MCx4Mjp4fSkuc3R5bGUoe2Rpc3BsYXk6Zi5hbmd1bGFyQXhpcy5ncmlkTGluZXNWaXNpYmxlPyJibG9jayI6Im5vbmUifSksSy5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRleHQiLCEwKS5zdHlsZShCKTt2YXIgUT1KLnNlbGVjdCgidGV4dC5heGlzLXRleHQiKS5hdHRyKHt4OngrZi5sYWJlbE9mZnNldCxkeTpvKyJlbSIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dSh0LGUpLG49eCtmLmxhYmVsT2Zmc2V0LGk9Zi5hbmd1bGFyQXhpcy50aWNrT3JpZW50YXRpb247cmV0dXJuImhvcml6b250YWwiPT1pPyJyb3RhdGUoIistcisiICIrbisiIDApIjoicmFkaWFsIj09aT9yPDI3MCYmcj45MD8icm90YXRlKDE4MCAiK24rIiAwKSI6bnVsbDoicm90YXRlKCIrKHI8PTE4MCYmcj4wPy05MDo5MCkrIiAiK24rIiAwKSJ9fSkuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmxhYmVsc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD8iIjpNP01bdF0rZi5hbmd1bGFyQXhpcy50aWNrc1N1ZmZpeDp0K2YuYW5ndWxhckF4aXMudGlja3NTdWZmaXh9KS5zdHlsZShCKTtmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyYmUS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD8iIjpmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyh0aGlzLnRleHRDb250ZW50LGUpfSk7dmFyICQ9bi5tYXgoai5zZWxlY3RBbGwoIi5hbmd1bGFyLXRpY2sgdGV4dCIpWzBdLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LmdldENUTSgpLmUrdC5nZXRCQm94KCkud2lkdGh9KSk7Ri5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t4KyQsZi5tYXJnaW4udG9wXSsiKSJ9KTt2YXIgdHQ9ZS5zZWxlY3QoImcuZ2VvbWV0cnktZ3JvdXAiKS5zZWxlY3RBbGwoImciKS5zaXplKCk+MCxldD1lLnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZy5nZW9tZXRyeSIpLmRhdGEocCk7aWYoZXQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiJnZW9tZXRyeSBnZW9tZXRyeSIrZX19KSxldC5leGl0KCkucmVtb3ZlKCkscFswXXx8dHQpe3ZhciBydD1bXTtwLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyLnJhZGlhbFNjYWxlPWksci5hbmd1bGFyU2NhbGU9bCxyLmNvbnRhaW5lcj1ldC5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gcj09ZX0pLHIuZ2VvbWV0cnk9dC5nZW9tZXRyeSxyLm9yaWVudGF0aW9uPWYub3JpZW50YXRpb24sci5kaXJlY3Rpb249Zi5kaXJlY3Rpb24sci5pbmRleD1lLHJ0LnB1c2goe2RhdGE6dCxnZW9tZXRyeUNvbmZpZzpyfSl9KTt2YXIgbnQ9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQuZGF0YS5ncm91cElkfHwidW5zdGFja2VkIn0pLmVudHJpZXMocnQpLGl0PVtdO250LmZvckVhY2goZnVuY3Rpb24odCxlKXsidW5zdGFja2VkIj09PXQua2V5P2l0PWl0LmNvbmNhdCh0LnZhbHVlcy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdF19KSk6aXQucHVzaCh0LnZhbHVlcyl9KSxpdC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI7cj1BcnJheS5pc0FycmF5KHQpP3RbMF0uZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk6dC5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTt2YXIgbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBhKHNbcl0uZGVmYXVsdENvbmZpZygpLHQpfSk7c1tyXSgpLmNvbmZpZyhuKSgpfSl9dmFyIGF0LG90LHN0PWUuc2VsZWN0KCIuZ3VpZGVzLWdyb3VwIiksbHQ9ZS5zZWxlY3QoIi50b29sdGlwcy1ncm91cCIpLHV0PXMudG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6bHQsZm9udFNpemU6OH0pKCksY3Q9cy50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpsdCxmb250U2l6ZTo4fSkoKSxodD1zLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOmx0LGhhc1RpY2s6ITB9KSgpO2lmKCFBKXt2YXIgZnQ9c3Quc2VsZWN0KCJsaW5lIikuYXR0cih7eDE6MCx5MTowLHkyOjB9KS5zdHlsZSh7c3Ryb2tlOiJncmV5IiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO2oub24oIm1vdXNlbW92ZS5hbmd1bGFyLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5nZXRNb3VzZVBvcyhXKS5hbmdsZTtmdC5hdHRyKHt4MjoteCx0cmFuc2Zvcm06InJvdGF0ZSgiK3IrIikifSkuc3R5bGUoe29wYWNpdHk6LjV9KTt2YXIgbj0ocisxODArMzYwLWYub3JpZW50YXRpb24pJTM2MDthdD1sLmludmVydChuKTt2YXIgaT1zLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHgrMTIscisxODApO3V0LnRleHQocy51dGlsLnJvdW5kKGF0KSkubW92ZShbaVswXSt3WzBdLGlbMV0rd1sxXV0pfSkub24oIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7c3Quc2VsZWN0KCJsaW5lIikuc3R5bGUoe29wYWNpdHk6MH0pfSl9dmFyIGR0PXN0LnNlbGVjdCgiY2lyY2xlIikuc3R5bGUoe3N0cm9rZToiZ3JleSIsZmlsbDoibm9uZSJ9KTtqLm9uKCJtb3VzZW1vdmUucmFkaWFsLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5nZXRNb3VzZVBvcyhXKS5yYWRpdXM7ZHQuYXR0cih7cjpyfSkuc3R5bGUoe29wYWNpdHk6LjV9KSxvdD1pLmludmVydChzLnV0aWwuZ2V0TW91c2VQb3MoVykucmFkaXVzKTt2YXIgbj1zLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHIsZi5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKTtjdC50ZXh0KHMudXRpbC5yb3VuZChvdCkpLm1vdmUoW25bMF0rd1swXSxuWzFdK3dbMV1dKX0pLm9uKCJtb3VzZW91dC5yYWRpYWwtZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7ZHQuc3R5bGUoe29wYWNpdHk6MH0pLGh0LmhpZGUoKSx1dC5oaWRlKCksY3QuaGlkZSgpfSksZS5zZWxlY3RBbGwoIi5nZW9tZXRyeS1ncm91cCAubWFyayIpLm9uKCJtb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24odCxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWkuc3R5bGUoImZpbGwiKSxvPSJibGFjayIsbD1pLnN0eWxlKCJvcGFjaXR5Iil8fDE7aWYoaS5hdHRyKHsiZGF0YS1vcGFjaXR5IjpsfSksIm5vbmUiIT1hKXtpLmF0dHIoeyJkYXRhLWZpbGwiOmF9KSxvPW4uaHNsKGEpLmRhcmtlcigpLnRvU3RyaW5nKCksaS5zdHlsZSh7ZmlsbDpvLG9wYWNpdHk6MX0pO3ZhciB1PXt0OnMudXRpbC5yb3VuZCh0WzBdKSxyOnMudXRpbC5yb3VuZCh0WzFdKX07QSYmKHUudD1NW3RbMF1dKTt2YXIgYz0idDogIit1LnQrIiwgcjogIit1LnIsaD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1baC5sZWZ0K2gud2lkdGgvMi1IWzBdLWYubGVmdCxoLnRvcCtoLmhlaWdodC8yLUhbMV0tZi50b3BdO2h0LmNvbmZpZyh7Y29sb3I6b30pLnRleHQoYyksaHQubW92ZShkKX1lbHNlIGE9aS5zdHlsZSgic3Ryb2tlIiksaS5hdHRyKHsiZGF0YS1zdHJva2UiOmF9KSxvPW4uaHNsKGEpLmRhcmtlcigpLnRvU3RyaW5nKCksaS5zdHlsZSh7c3Ryb2tlOm8sb3BhY2l0eToxfSl9KS5vbigibW91c2Vtb3ZlLnRvb2x0aXAiLGZ1bmN0aW9uKHQsZSl7aWYoMCE9bi5ldmVudC53aGljaClyZXR1cm4hMTtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkYXRhLWZpbGwiKSYmaHQuc2hvdygpfSkub24oIm1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKHQsZSl7aHQuaGlkZSgpO3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ci5hdHRyKCJkYXRhLWZpbGwiKTtpP3Iuc3R5bGUoe2ZpbGw6aSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KTpyLnN0eWxlKHtzdHJva2U6ci5hdHRyKCJkYXRhLXN0cm9rZSIpLG9wYWNpdHk6ci5hdHRyKCJkYXRhLW9wYWNpdHkiKX0pfSl9KSxkfXZhciBlLHIsaSxsLHU9e2RhdGE6W10sbGF5b3V0Ont9fSxjPXt9LGg9e30sZj1uLmRpc3BhdGNoKCJob3ZlciIpLGQ9e307cmV0dXJuIGQucmVuZGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLHRoaXN9LGQuY29uZmlnPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB1O3ZhciBlPXMudXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIGUuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dS5kYXRhW2VdfHwodS5kYXRhW2VdPXt9KSxhKHUuZGF0YVtlXSxzLkF4aXMuZGVmYXVsdENvbmZpZygpLmRhdGFbMF0pLGEodS5kYXRhW2VdLHQpfSksYSh1LmxheW91dCxzLkF4aXMuZGVmYXVsdENvbmZpZygpLmxheW91dCksYSh1LmxheW91dCxlLmxheW91dCksdGhpc30sZC5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGh9LGQuZ2V0aW5wdXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gY30sZC5yYWRpYWxTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gaX0sZC5hbmd1bGFyU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGx9LGQuc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4ucmViaW5kKGQsZiwib24iKSxkfSxzLkF4aXMuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOlt7dDpbMSwyLDMsNF0scjpbMTAsMTEsMTIsMTNdLG5hbWU6IkxpbmUxIixnZW9tZXRyeToiTGluZVBsb3QiLGNvbG9yOm51bGwsc3Ryb2tlRGFzaDoic29saWQiLHN0cm9rZUNvbG9yOm51bGwsc3Ryb2tlU2l6ZToiMSIsdmlzaWJsZUluTGVnZW5kOiEwLG9wYWNpdHk6MX1dLGxheW91dDp7ZGVmYXVsdENvbG9yUmFuZ2U6bi5zY2FsZS5jYXRlZ29yeTEwKCkucmFuZ2UoKSx0aXRsZTpudWxsLGhlaWdodDo0NTAsd2lkdGg6NTAwLG1hcmdpbjp7dG9wOjQwLHJpZ2h0OjQwLGJvdHRvbTo0MCxsZWZ0OjQwfSxmb250OntzaXplOjEyLGNvbG9yOiJncmF5IixvdXRsaW5lQ29sb3I6IndoaXRlIixmYW1pbHk6IlRhaG9tYSwgc2Fucy1zZXJpZiJ9LGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGxhYmVsT2Zmc2V0OjEwLHJhZGlhbEF4aXM6e2RvbWFpbjpudWxsLG9yaWVudGF0aW9uOi00NSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOiJob3Jpem9udGFsIixyZXdyaXRlVGlja3M6bnVsbH0sYW5ndWxhckF4aXM6e2RvbWFpbjpbMCwzNjBdLHRpY2tzU3VmZml4OiIiLHZpc2libGU6ITAsZ3JpZExpbmVzVmlzaWJsZTohMCxsYWJlbHNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGwsdGlja3NDb3VudDpudWxsLHRpY2tzU3RlcDpudWxsfSxtaW5vclRpY2tzOjAsdGlja0xlbmd0aDpudWxsLHRpY2tDb2xvcjoic2lsdmVyIixtaW5vclRpY2tDb2xvcjoiI2VlZSIsYmFja2dyb3VuZENvbG9yOiJub25lIixuZWVkc0VuZFNwYWNpbmc6bnVsbCxzaG93TGVnZW5kOiEwLGxlZ2VuZDp7cmV2ZXJzZU9yZGVyOiExfSxvcGFjaXR5OjF9fX0scy51dGlsPXt9LHMuREFUQUVYVEVOVD0iZGF0YUV4dGVudCIscy5BUkVBPSJBcmVhQ2hhcnQiLHMuTElORT0iTGluZVBsb3QiLHMuRE9UPSJEb3RQbG90IixzLkJBUj0iQmFyQ2hhcnQiLHMudXRpbC5fb3ZlcnJpZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdClyIGluIGUmJihlW3JdPXRbcl0pfSxzLnV0aWwuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0scy51dGlsLl9ybmRTbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMipNYXRoLnJhbmRvbSgpLTErKDIqTWF0aC5yYW5kb20oKS0xKSsoMipNYXRoLnJhbmRvbSgpLTEpfSxzLnV0aWwuZGF0YUZyb21FcXVhdGlvbjI9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHw2O3JldHVybiBuLnJhbmdlKDAsMzYwK3IscikubWFwKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MDtyZXR1cm5bZSx0KG4pXX0pfSxzLnV0aWwuZGF0YUZyb21FcXVhdGlvbj1mdW5jdGlvbih0LGUscil7dmFyIGk9ZXx8NixhPVtdLG89W107bi5yYW5nZSgwLDM2MCtpLGkpLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwLGk9dChuKTthLnB1c2goZSksby5wdXNoKGkpfSk7dmFyIHM9e3Q6YSxyOm99O3JldHVybiByJiYocy5uYW1lPXIpLHN9LHMudXRpbC5lbnN1cmVBcnJheT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQpcmV0dXJuIG51bGw7dmFyIHI9W10uY29uY2F0KHQpO3JldHVybiBuLnJhbmdlKGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiByW2VdfHxyWzBdfSl9LHMudXRpbC5maWxsQXJyYXlzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dFtlXT1zLnV0aWwuZW5zdXJlQXJyYXkodFtlXSxyKX0pLHR9LHMudXRpbC5jbG9uZUpzb249ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpfSxzLnV0aWwudmFsaWRhdGVLZXlzPWZ1bmN0aW9uKHQsZSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KCIuIikpO3ZhciByPWUuc2hpZnQoKTtyZXR1cm4gdFtyXSYmKCFlLmxlbmd0aHx8b2JqSGFzS2V5cyh0W3JdLGUpKX0scy51dGlsLnN1bUFycmF5cz1mdW5jdGlvbih0LGUpe3JldHVybiBuLnppcCh0LGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBuLnN1bSh0KX0pfSxzLnV0aWwuYXJyYXlMYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfSxzLnV0aWwuYXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCh0Lmxlbmd0aCxlLmxlbmd0aCwxKTtyLS0gPj0wJiZ0W3JdPT09ZVtyXTspO3JldHVybi0yPT09cn0scy51dGlsLmZsYXR0ZW5BcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W107IXMudXRpbC5hcnJheUVxdWFsKGUsdCk7KWU9dCx0PVtdLmNvbmNhdC5hcHBseShbXSx0KTtyZXR1cm4gdH0scy51dGlsLmRlZHVwbGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0LGUscil7cmV0dXJuIHIuaW5kZXhPZih0KT09ZX0pfSxzLnV0aWwuY29udmVydFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpNYXRoLlBJLzE4MDtyZXR1cm5bdCpNYXRoLmNvcyhyKSx0Kk1hdGguc2luKHIpXX0scy51dGlsLnJvdW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8MixuPU1hdGgucG93KDEwLHIpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn0scy51dGlsLmdldE1vdXNlUG9zPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubW91c2UodC5ub2RlKCkpLHI9ZVswXSxpPWVbMV0sYT17fTtyZXR1cm4gYS54PXIsYS55PWksYS5wb3M9ZSxhLmFuZ2xlPTE4MCooTWF0aC5hdGFuMihpLHIpK01hdGguUEkpL01hdGguUEksYS5yYWRpdXM9TWF0aC5zcXJ0KHIqcitpKmkpLGF9LHMudXRpbC5kdXBsaWNhdGVzQ291bnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9e30sbj17fSxpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKWU9dFtpXSxlIGluIHI/KHJbZV0rKyxuW2VdPXJbZV0pOnJbZV09MTtyZXR1cm4gbn0scy51dGlsLmR1cGxpY2F0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHMudXRpbC5kdXBsaWNhdGVzQ291bnQodCkpfSxzLnV0aWwudHJhbnNsYXRvcj1mdW5jdGlvbih0LGUscixuKXtpZihuKXt2YXIgaT1yLnNsaWNlKCk7cj1lLGU9aX12YXIgYT1lLnJlZHVjZShmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXQpcmV0dXJuIHRbZV19LHQpO3ZvaWQgMCE9PWEmJihlLnJlZHVjZShmdW5jdGlvbih0LHIsbil7aWYodm9pZCAwIT09dClyZXR1cm4gbj09PWUubGVuZ3RoLTEmJmRlbGV0ZSB0W3JdLHRbcl19LHQpLHIucmVkdWNlKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09dFtlXSYmKHRbZV09e30pLG49PT1yLmxlbmd0aC0xJiYodFtlXT1hKSx0W2VdfSx0KSl9LHMuUG9seUNoYXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PWVbMF0uZ2VvbWV0cnlDb25maWcscj10LmNvbnRhaW5lcjsic3RyaW5nIj09dHlwZW9mIHImJihyPW4uc2VsZWN0KHIpKSxyLmRhdHVtKGUpLmVhY2goZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBhKGUscil7cmV0dXJue3I6dC5yYWRpYWxTY2FsZShlWzFdKSx0Oih0LmFuZ3VsYXJTY2FsZShlWzBdKSt0Lm9yaWVudGF0aW9uKSpNYXRoLlBJLzE4MH19ZnVuY3Rpb24gbyh0KXtyZXR1cm57eDp0LnIqTWF0aC5jb3ModC50KSx5OnQucipNYXRoLnNpbih0LnQpfX12YXIgcz0hIWVbMF0uZGF0YS55U3RhY2ssbD1lLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBzP24uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdLHQuZGF0YS55U3RhY2tbMF0pOm4uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdKX0pLHU9dC5hbmd1bGFyU2NhbGUsYz10LnJhZGlhbFNjYWxlLmRvbWFpbigpWzBdLGg9e307aC5iYXI9ZnVuY3Rpb24ocixpLGEpe3ZhciBvPWVbYV0uZGF0YSxzPXQucmFkaWFsU2NhbGUoclsxXSktdC5yYWRpYWxTY2FsZSgwKSxsPXQucmFkaWFsU2NhbGUoclsyXXx8MCksYz1vLmJhcldpZHRoO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGJhciIsZDoiTSIrW1tzK2wsLWMvMl0sW3MrbCxjLzJdLFtsLGMvMl0sW2wsLWMvMl1dLmpvaW4oIkwiKSsiWiIsdHJhbnNmb3JtOmZ1bmN0aW9uKGUscil7cmV0dXJuInJvdGF0ZSgiKyh0Lm9yaWVudGF0aW9uK3UoZVswXSkpKyIpIn19KX0saC5kb3Q9ZnVuY3Rpb24odCxyLGkpe3ZhciBzPXRbMl0/W3RbMF0sdFsxXSt0WzJdXTp0LGw9bi5zdmcuc3ltYm9sKCkuc2l6ZShlW2ldLmRhdGEuZG90U2l6ZSkudHlwZShlW2ldLmRhdGEuZG90VHlwZSkodCxyKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBkb3QiLGQ6bCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgcj1vKGEocykpO3JldHVybiJ0cmFuc2xhdGUoIitbci54LHIueV0rIikifX0pfTt2YXIgZj1uLnN2Zy5saW5lLnJhZGlhbCgpLmludGVycG9sYXRlKGVbMF0uZGF0YS5saW5lSW50ZXJwb2xhdGlvbikucmFkaXVzKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJhZGlhbFNjYWxlKGVbMV0pfSkuYW5nbGUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYW5ndWxhclNjYWxlKGVbMF0pKk1hdGguUEkvMTgwfSk7aC5saW5lPWZ1bmN0aW9uKHIsaSxhKXt2YXIgbz1yWzJdP2xbYV0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSt0WzJdXX0pOmxbYV07aWYobi5zZWxlY3QodGhpcykuZWFjaChoLmRvdCkuc3R5bGUoe29wYWNpdHk6ZnVuY3Rpb24odCxyKXtyZXR1cm4rZVthXS5kYXRhLmRvdFZpc2libGV9LGZpbGw6di5zdHJva2UocixpLGEpfSkuYXR0cih7Y2xhc3M6Im1hcmsgZG90In0pLCEoaT4wKSl7dmFyIHM9bi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInBhdGgubGluZSIpLmRhdGEoWzBdKTtzLmVudGVyKCkuaW5zZXJ0KCJwYXRoIikscy5hdHRyKHtjbGFzczoibGluZSIsZDpmKG8pLHRyYW5zZm9ybTpmdW5jdGlvbihlLHIpe3JldHVybiJyb3RhdGUoIisodC5vcmllbnRhdGlvbis5MCkrIikifSwicG9pbnRlci1ldmVudHMiOiJub25lIn0pLnN0eWxlKHtmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZmlsbChyLGksYSl9LCJmaWxsLW9wYWNpdHkiOjAsc3Ryb2tlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuc3Ryb2tlKHIsaSxhKX0sInN0cm9rZS13aWR0aCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdlsic3Ryb2tlLXdpZHRoIl0ocixpLGEpfSwic3Ryb2tlLWRhc2hhcnJheSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdlsic3Ryb2tlLWRhc2hhcnJheSJdKHIsaSxhKX0sb3BhY2l0eTpmdW5jdGlvbih0LGUpe3JldHVybiB2Lm9wYWNpdHkocixpLGEpfSxkaXNwbGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZGlzcGxheShyLGksYSl9fSl9fTt2YXIgZD10LmFuZ3VsYXJTY2FsZS5yYW5nZSgpLHA9TWF0aC5hYnMoZFsxXS1kWzBdKS9sWzBdLmxlbmd0aCpNYXRoLlBJLzE4MCxtPW4uc3ZnLmFyYygpLnN0YXJ0QW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuLXAvMn0pLmVuZEFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBwLzJ9KS5pbm5lclJhZGl1cyhmdW5jdGlvbihlKXtyZXR1cm4gdC5yYWRpYWxTY2FsZShjKyhlWzJdfHwwKSl9KS5vdXRlclJhZGl1cyhmdW5jdGlvbihlKXtyZXR1cm4gdC5yYWRpYWxTY2FsZShjKyhlWzJdfHwwKSkrdC5yYWRpYWxTY2FsZShlWzFdKX0pO2guYXJjPWZ1bmN0aW9uKGUscixpKXtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBhcmMiLGQ6bSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSxyKXtyZXR1cm4icm90YXRlKCIrKHQub3JpZW50YXRpb24rdShlWzBdKSs5MCkrIikifX0pfTt2YXIgdj17ZmlsbDpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGVbbl0uZGF0YS5jb2xvcn0sc3Ryb2tlOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZVtuXS5kYXRhLnN0cm9rZUNvbG9yfSwic3Ryb2tlLXdpZHRoIjpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGVbbl0uZGF0YS5zdHJva2VTaXplKyJweCJ9LCJzdHJva2UtZGFzaGFycmF5IjpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGlbZVtuXS5kYXRhLnN0cm9rZURhc2hdfSxvcGFjaXR5OmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZVtuXS5kYXRhLm9wYWNpdHl9LGRpc3BsYXk6ZnVuY3Rpb24odCxyLG4pe3JldHVybiB2b2lkIDA9PT1lW25dLmRhdGEudmlzaWJsZXx8ZVtuXS5kYXRhLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9fSxnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5sYXllciIpLmRhdGEobCk7Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoe2NsYXNzOiJsYXllciJ9KTt2YXIgeT1nLnNlbGVjdEFsbCgicGF0aC5tYXJrIikuZGF0YShmdW5jdGlvbih0LGUpe3JldHVybiB0fSk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOiJtYXJrIn0pLHkuc3R5bGUodikuZWFjaChoW3QuZ2VvbWV0cnlUeXBlXSkseS5leGl0KCkucmVtb3ZlKCksZy5leGl0KCkucmVtb3ZlKCl9KX12YXIgZT1bcy5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpXSxyPW4uZGlzcGF0Y2goImhvdmVyIiksaT17c29saWQ6Im5vbmUiLGRhc2g6WzUsMl0sZG90OlsyLDVdfTtyZXR1cm4gdC5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZm9yRWFjaChmdW5jdGlvbih0LHIpe2Vbcl18fChlW3JdPXt9KSxhKGVbcl0scy5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpKSxhKGVbcl0sdCl9KSx0aGlzKTplfSx0LmdldENvbG9yU2NhbGU9ZnVuY3Rpb24oKXt9LG4ucmViaW5kKHQsciwib24iKSx0fSxzLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2RhdGE6e25hbWU6Imdlb20xIix0OltbMSwyLDMsNF1dLHI6W1sxLDIsMyw0XV0sZG90VHlwZToiY2lyY2xlIixkb3RTaXplOjY0LGRvdFZpc2libGU6ITEsYmFyV2lkdGg6MjAsY29sb3I6IiNmZmE1MDAiLHN0cm9rZVNpemU6MSxzdHJva2VDb2xvcjoic2lsdmVyIixzdHJva2VEYXNoOiJzb2xpZCIsb3BhY2l0eToxLGluZGV4OjAsdmlzaWJsZTohMCx2aXNpYmxlSW5MZWdlbmQ6ITB9LGdlb21ldHJ5Q29uZmlnOntnZW9tZXRyeToiTGluZVBsb3QiLGdlb21ldHJ5VHlwZToiYXJjIixkaXJlY3Rpb246ImNsb2Nrd2lzZSIsb3JpZW50YXRpb246MCxjb250YWluZXI6ImJvZHkiLHJhZGlhbFNjYWxlOm51bGwsYW5ndWxhclNjYWxlOm51bGwsY29sb3JTY2FsZTpuLnNjYWxlLmNhdGVnb3J5MjAoKX19fSxzLkJhckNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHMuUG9seUNoYXJ0KCl9LHMuQmFyQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJiYXIifX19LHMuQXJlYUNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHMuUG9seUNoYXJ0KCl9LHMuQXJlYUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiYXJjIn19fSxzLkRvdFBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcy5Qb2x5Q2hhcnQoKX0scy5Eb3RQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiZG90Iixkb3RUeXBlOiJjaXJjbGUifX19LHMuTGluZVBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcy5Qb2x5Q2hhcnQoKX0scy5MaW5lUGxvdC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImxpbmUifX19LHMuTGVnZW5kPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciByPWUubGVnZW5kQ29uZmlnLGk9ZS5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybltdLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24odCxuKXt2YXIgaT1hKHt9LHIuZWxlbWVudHNbZV0pO3JldHVybiBpLm5hbWU9dCxpLmNvbG9yPVtdLmNvbmNhdChyLmVsZW1lbnRzW2VdLmNvbG9yKVtuXSxpfSl9KSxvPW4ubWVyZ2UoaSk7bz1vLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiByLmVsZW1lbnRzW2VdJiYoci5lbGVtZW50c1tlXS52aXNpYmxlSW5MZWdlbmR8fHZvaWQgMD09PXIuZWxlbWVudHNbZV0udmlzaWJsZUluTGVnZW5kKX0pLHIucmV2ZXJzZU9yZGVyJiYobz1vLnJldmVyc2UoKSk7dmFyIHM9ci5jb250YWluZXI7KCJzdHJpbmciPT10eXBlb2Ygc3x8cy5ub2RlTmFtZSkmJihzPW4uc2VsZWN0KHMpKTt2YXIgbD1vLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbG9yfSksdT1yLmZvbnRTaXplLGM9bnVsbD09ci5pc0NvbnRpbnVvdXM/Im51bWJlciI9PXR5cGVvZiBvWzBdOnIuaXNDb250aW51b3VzLGg9Yz9yLmhlaWdodDp1Km8ubGVuZ3RoLGY9cy5jbGFzc2VkKCJsZWdlbmQtZ3JvdXAiLCEwKSxkPWYuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFswXSkscD1kLmVudGVyKCkuYXBwZW5kKCJzdmciKS5hdHRyKHt3aWR0aDozMDAsaGVpZ2h0OmgrdSx4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHZlcnNpb246IjEuMSJ9KTtwLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZC1heGlzIiwhMCkscC5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmQtbWFya3MiLCEwKTt2YXIgbT1uLnJhbmdlKG8ubGVuZ3RoKSx2PW4uc2NhbGVbYz8ibGluZWFyIjoib3JkaW5hbCJdKCkuZG9tYWluKG0pLnJhbmdlKGwpLGc9bi5zY2FsZVtjPyJsaW5lYXIiOiJvcmRpbmFsIl0oKS5kb21haW4obSlbYz8icmFuZ2UiOiJyYW5nZVBvaW50cyJdKFswLGhdKSx5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MyplO3JldHVybiJsaW5lIj09PXQ/Ik0iK1tbLWUvMiwtZS8xMl0sW2UvMiwtZS8xMl0sW2UvMixlLzEyXSxbLWUvMixlLzEyXV0rIloiOi0xIT1uLnN2Zy5zeW1ib2xUeXBlcy5pbmRleE9mKHQpP24uc3ZnLnN5bWJvbCgpLnR5cGUodCkuc2l6ZShyKSgpOm4uc3ZnLnN5bWJvbCgpLnR5cGUoInNxdWFyZSIpLnNpemUocikoKX07aWYoYyl7dmFyIGI9ZC5zZWxlY3QoIi5sZWdlbmQtbWFya3MiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cih7aWQ6ImdyYWQxIix4MToiMCUiLHkxOiIwJSIseDI6IjAlIix5MjoiMTAwJSJ9KS5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGwpO2IuZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxiLmF0dHIoe29mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBlLyhsLmxlbmd0aC0xKSoxMDArIiUifX0pLnN0eWxlKHsic3RvcC1jb2xvciI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH19KSxkLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkuYXR0cih7aGVpZ2h0OnIuaGVpZ2h0LHdpZHRoOnIuY29sb3JCYW5kV2lkdGgsZmlsbDoidXJsKCNncmFkMSkifSl9ZWxzZXt2YXIgeD1kLnNlbGVjdCgiLmxlZ2VuZC1tYXJrcyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQtbWFyayIpLmRhdGEobyk7eC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkseC5hdHRyKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKCIrW3UvMixnKGUpK3UvMl0rIikifSxkOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zeW1ib2w7cmV0dXJuIHkocix1KX0sZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiB2KGUpfX0pLHguZXhpdCgpLnJlbW92ZSgpfXZhciBfPW4uc3ZnLmF4aXMoKS5zY2FsZShnKS5vcmllbnQoInJpZ2h0Iiksdz1kLnNlbGVjdCgiZy5sZWdlbmQtYXhpcyIpLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW2M/ci5jb2xvckJhbmRXaWR0aDp1LHUvMl0rIikifSkuY2FsbChfKTtyZXR1cm4gdy5zZWxlY3RBbGwoIi5kb21haW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOiJub25lIn0pLHcuc2VsZWN0QWxsKCJsaW5lIikuc3R5bGUoe2ZpbGw6Im5vbmUiLHN0cm9rZTpjP3IudGV4dENvbG9yOiJub25lIn0pLHcuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoe2ZpbGw6ci50ZXh0Q29sb3IsImZvbnQtc2l6ZSI6ci5mb250U2l6ZX0pLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gb1tlXS5uYW1lfSksdH12YXIgZT1zLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkscj1uLmRpc3BhdGNoKCJob3ZlciIpO3JldHVybiB0LmNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYShlLHQpLHRoaXMpOmV9LG4ucmViaW5kKHQsciwib24iKSx0fSxzLkxlZ2VuZC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6WyJhIiwiYiIsImMiXSxsZWdlbmRDb25maWc6e2VsZW1lbnRzOlt7c3ltYm9sOiJsaW5lIixjb2xvcjoicmVkIn0se3N5bWJvbDoic3F1YXJlIixjb2xvcjoieWVsbG93In0se3N5bWJvbDoiZGlhbW9uZCIsY29sb3I6ImxpbWVncmVlbiJ9XSxoZWlnaHQ6MTUwLGNvbG9yQmFuZFdpZHRoOjMwLGZvbnRTaXplOjEyLGNvbnRhaW5lcjoiYm9keSIsaXNDb250aW51b3VzOm51bGwsdGV4dENvbG9yOiJncmV5IixyZXZlcnNlT3JkZXI6ITF9fX0scy50b29sdGlwUGFuZWw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsaT17Y29udGFpbmVyOm51bGwsaGFzVGljazohMSxmb250U2l6ZToxMixjb2xvcjoid2hpdGUiLHBhZGRpbmc6NX0sbz0idG9vbHRpcC0iK3MudG9vbHRpcFBhbmVsLnVpZCsrLGw9ZnVuY3Rpb24oKXt0PWkuY29udGFpbmVyLnNlbGVjdEFsbCgiZy4iK28pLmRhdGEoWzBdKTt2YXIgbj10LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChvLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsZGlzcGxheToibm9uZSJ9KTtyZXR1cm4gcj1uLmFwcGVuZCgicGF0aCIpLnN0eWxlKHtmaWxsOiJ3aGl0ZSIsImZpbGwtb3BhY2l0eSI6Ljl9KS5hdHRyKHtkOiJNMCAwIn0pLGU9bi5hcHBlbmQoInRleHQiKS5hdHRyKHtkeDppLnBhZGRpbmcrMTAsZHk6LjMqK2kuZm9udFNpemV9KSxsfTtyZXR1cm4gbC50ZXh0PWZ1bmN0aW9uKGEpe3ZhciBvPW4uaHNsKGkuY29sb3IpLmwscz1vPj0uNT8iI2FhYSI6IndoaXRlIix1PW8+PS41PyJibGFjayI6IndoaXRlIixjPWF8fCIiO2Uuc3R5bGUoe2ZpbGw6dSwiZm9udC1zaXplIjppLmZvbnRTaXplKyJweCJ9KS50ZXh0KGMpO3ZhciBoPWkucGFkZGluZyxmPWUubm9kZSgpLmdldEJCb3goKSxkPXtmaWxsOmkuY29sb3Isc3Ryb2tlOnMsInN0cm9rZS13aWR0aCI6IjJweCJ9LHA9Zi53aWR0aCsyKmgrMTAsbT1mLmhlaWdodCsyKmg7cmV0dXJuIHIuYXR0cih7ZDoiTSIrW1sxMCwtbS8yXSxbMTAsLW0vNF0sW2kuaGFzVGljaz8wOjEwLDBdLFsxMCxtLzRdLFsxMCxtLzJdLFtwLG0vMl0sW3AsLW0vMl1dLmpvaW4oIkwiKSsiWiJ9KS5zdHlsZShkKSx0LmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrWzEwLC1tLzIrMipoXSsiKSJ9KSx0LnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxsfSxsLm1vdmU9ZnVuY3Rpb24oZSl7aWYodClyZXR1cm4gdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tlWzBdLGVbMV1dKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxsfSxsLmhpZGU9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLGx9LGwuc2hvdz1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGx9LGwuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBhKGksdCksbH0sbH0scy50b29sdGlwUGFuZWwudWlkPTEscy5hZGFwdGVyPXt9LHMuYWRhcHRlci5wbG90bHk9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdC5jb252ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYodC5kYXRhJiYoci5kYXRhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1hKHt9LHQpO3JldHVybltbbixbIm1hcmtlciIsImNvbG9yIl0sWyJjb2xvciJdXSxbbixbIm1hcmtlciIsIm9wYWNpdHkiXSxbIm9wYWNpdHkiXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwiY29sb3IiXSxbInN0cm9rZUNvbG9yIl1dLFtuLFsibWFya2VyIiwibGluZSIsImRhc2giXSxbInN0cm9rZURhc2giXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwid2lkdGgiXSxbInN0cm9rZVNpemUiXV0sW24sWyJtYXJrZXIiLCJzeW1ib2wiXSxbImRvdFR5cGUiXV0sW24sWyJtYXJrZXIiLCJzaXplIl0sWyJkb3RTaXplIl1dLFtuLFsibWFya2VyIiwiYmFyV2lkdGgiXSxbImJhcldpZHRoIl1dLFtuLFsibGluZSIsImludGVycG9sYXRpb24iXSxbImxpbmVJbnRlcnBvbGF0aW9uIl1dLFtuLFsic2hvd2xlZ2VuZCJdLFsidmlzaWJsZUluTGVnZW5kIl1dXS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7cy51dGlsLnRyYW5zbGF0b3IuYXBwbHkobnVsbCx0LmNvbmNhdChlKSl9KSxlfHxkZWxldGUgbi5tYXJrZXIsZSYmZGVsZXRlIG4uZ3JvdXBJZCxlPygiTGluZVBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIiwhMD09PW4uZG90VmlzaWJsZT8oZGVsZXRlIG4uZG90VmlzaWJsZSxuLm1vZGU9ImxpbmVzK21hcmtlcnMiKTpuLm1vZGU9ImxpbmVzIik6IkRvdFBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIixuLm1vZGU9Im1hcmtlcnMiKToiQXJlYUNoYXJ0Ij09PW4uZ2VvbWV0cnk/bi50eXBlPSJhcmVhIjoiQmFyQ2hhcnQiPT09bi5nZW9tZXRyeSYmKG4udHlwZT0iYmFyIiksZGVsZXRlIG4uZ2VvbWV0cnkpOigic2NhdHRlciI9PT1uLnR5cGU/ImxpbmVzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJMaW5lUGxvdCI6Im1hcmtlcnMiPT09bi5tb2RlP24uZ2VvbWV0cnk9IkRvdFBsb3QiOiJsaW5lcyttYXJrZXJzIj09PW4ubW9kZSYmKG4uZ2VvbWV0cnk9IkxpbmVQbG90IixuLmRvdFZpc2libGU9ITApOiJhcmVhIj09PW4udHlwZT9uLmdlb21ldHJ5PSJBcmVhQ2hhcnQiOiJiYXIiPT09bi50eXBlJiYobi5nZW9tZXRyeT0iQmFyQ2hhcnQiKSxkZWxldGUgbi5tb2RlLGRlbGV0ZSBuLnR5cGUpLG59KSwhZSYmdC5sYXlvdXQmJiJzdGFjayI9PT10LmxheW91dC5iYXJtb2RlKSl7dmFyIGk9cy51dGlsLmR1cGxpY2F0ZXMoci5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmdlb21ldHJ5fSkpO3IuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49aS5pbmRleE9mKHQuZ2VvbWV0cnkpOy0xIT1uJiYoci5kYXRhW2VdLmdyb3VwSWQ9bil9KX1pZih0LmxheW91dCl7dmFyIG89YSh7fSx0LmxheW91dCk7aWYoW1tvLFsicGxvdF9iZ2NvbG9yIl0sWyJiYWNrZ3JvdW5kQ29sb3IiXV0sW28sWyJzaG93bGVnZW5kIl0sWyJzaG93TGVnZW5kIl1dLFtvLFsicmFkaWFsYXhpcyJdLFsicmFkaWFsQXhpcyJdXSxbbyxbImFuZ3VsYXJheGlzIl0sWyJhbmd1bGFyQXhpcyJdXSxbby5hbmd1bGFyYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtvLmFuZ3VsYXJheGlzLFsic2hvd3RpY2tsYWJlbHMiXSxbImxhYmVsc1Zpc2libGUiXV0sW28uYW5ndWxhcmF4aXMsWyJudGlja3MiXSxbInRpY2tzQ291bnQiXV0sW28uYW5ndWxhcmF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbby5hbmd1bGFyYXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtvLmFuZ3VsYXJheGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbby5hbmd1bGFyYXhpcyxbImVuZHBhZGRpbmciXSxbImVuZFBhZGRpbmciXV0sW28ucmFkaWFsYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtvLnJhZGlhbGF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbby5yYWRpYWxheGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW28ucmFkaWFsYXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW28uYW5ndWxhckF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbby5hbmd1bGFyQXhpcyxbInNob3d0aWNrbGFiZWxzIl0sWyJsYWJlbHNWaXNpYmxlIl1dLFtvLmFuZ3VsYXJBeGlzLFsibnRpY2tzIl0sWyJ0aWNrc0NvdW50Il1dLFtvLmFuZ3VsYXJBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW28uYW5ndWxhckF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbby5hbmd1bGFyQXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW28uYW5ndWxhckF4aXMsWyJlbmRwYWRkaW5nIl0sWyJlbmRQYWRkaW5nIl1dLFtvLnJhZGlhbEF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbby5yYWRpYWxBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW28ucmFkaWFsQXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtvLnJhZGlhbEF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtvLmZvbnQsWyJvdXRsaW5lY29sb3IiXSxbIm91dGxpbmVDb2xvciJdXSxbby5sZWdlbmQsWyJ0cmFjZW9yZGVyIl0sWyJyZXZlcnNlT3JkZXIiXV0sW28sWyJsYWJlbG9mZnNldCJdLFsibGFiZWxPZmZzZXQiXV0sW28sWyJkZWZhdWx0Y29sb3JyYW5nZSJdLFsiZGVmYXVsdENvbG9yUmFuZ2UiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtzLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGU/KHZvaWQgMCE9PW8udGlja0xlbmd0aCYmKG8uYW5ndWxhcmF4aXMudGlja2xlbj1vLnRpY2tMZW5ndGgsZGVsZXRlIG8udGlja0xlbmd0aCksby50aWNrQ29sb3ImJihvLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1vLnRpY2tDb2xvcixkZWxldGUgby50aWNrQ29sb3IpKTooby5hbmd1bGFyQXhpcyYmdm9pZCAwIT09by5hbmd1bGFyQXhpcy50aWNrbGVuJiYoby50aWNrTGVuZ3RoPW8uYW5ndWxhckF4aXMudGlja2xlbiksby5hbmd1bGFyQXhpcyYmdm9pZCAwIT09by5hbmd1bGFyQXhpcy50aWNrY29sb3ImJihvLnRpY2tDb2xvcj1vLmFuZ3VsYXJBeGlzLnRpY2tjb2xvcikpLG8ubGVnZW5kJiYiYm9vbGVhbiIhPXR5cGVvZiBvLmxlZ2VuZC5yZXZlcnNlT3JkZXImJihvLmxlZ2VuZC5yZXZlcnNlT3JkZXI9Im5vcm1hbCIhPW8ubGVnZW5kLnJldmVyc2VPcmRlciksby5sZWdlbmQmJiJib29sZWFuIj09dHlwZW9mIG8ubGVnZW5kLnRyYWNlb3JkZXImJihvLmxlZ2VuZC50cmFjZW9yZGVyPW8ubGVnZW5kLnRyYWNlb3JkZXI/InJldmVyc2VkIjoibm9ybWFsIixkZWxldGUgby5sZWdlbmQucmV2ZXJzZU9yZGVyKSxvLm1hcmdpbiYmdm9pZCAwIT09by5tYXJnaW4udCl7dmFyIGw9WyJ0IiwiciIsImIiLCJsIiwicGFkIl0sdT1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInBhZCJdLGM9e307bi5lbnRyaWVzKG8ubWFyZ2luKS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7Y1t1W2wuaW5kZXhPZih0LmtleSldXT10LnZhbHVlfSksby5tYXJnaW49Y31lJiYoZGVsZXRlIG8ubmVlZHNFbmRTcGFjaW5nLGRlbGV0ZSBvLm1pbm9yVGlja0NvbG9yLGRlbGV0ZSBvLm1pbm9yVGlja3MsZGVsZXRlIG8uYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgby5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBvLmFuZ3VsYXJheGlzLnRpY2tzU3RlcCxkZWxldGUgby5hbmd1bGFyYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIG8uYW5ndWxhcmF4aXMubnRpY2tzLGRlbGV0ZSBvLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgby5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIG8ucmFkaWFsYXhpcy50aWNrc1N0ZXAsZGVsZXRlIG8ucmFkaWFsYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIG8ucmFkaWFsYXhpcy5udGlja3MpLHIubGF5b3V0PW99cmV0dXJuIHJ9LHR9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY5OCwiLi4vLi4vbGliIjo3MjQsZDM6MTIwfV0sODMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4vbWljcm9wb2xhciIpLHM9dCgiLi91bmRvX21hbmFnZXIiKSxsPWkuZXh0ZW5kRGVlcEFsbCx1PWUuZXhwb3J0cz17fTt1LmZyYW1ld29yaz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsaSl7cmV0dXJuIGkmJihoPWkpLG4uc2VsZWN0KG4uc2VsZWN0KGgpLm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KSIpLnJlbW92ZSgpLHI9cj9sKHIsZSk6ZSxhfHwoYT1vLkF4aXMoKSksYz1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChyKSxhLmNvbmZpZyhjKS5yZW5kZXIoaCksdC5kYXRhPXIuZGF0YSx0LmxheW91dD1yLmxheW91dCx1LmZpbGxMYXlvdXQodCkscn12YXIgcixpLGEsYyxoLGY9bmV3IHM7cmV0dXJuIGUuaXNQb2xhcj0hMCxlLnN2Zz1mdW5jdGlvbigpewpyZXR1cm4gYS5zdmcoKX0sZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gcn0sZS5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIG8uYWRhcHRlci5wbG90bHkoKS5jb252ZXJ0KGEuZ2V0TGl2ZUNvbmZpZygpLCEwKX0sZS5nZXRMaXZlU2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJue3Q6YS5hbmd1bGFyU2NhbGUoKSxyOmEucmFkaWFsU2NhbGUoKX19LGUuc2V0VW5kb1BvaW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPW8udXRpbC5jbG9uZUpzb24ocik7IWZ1bmN0aW9uKGUscil7Zi5hZGQoe3VuZG86ZnVuY3Rpb24oKXtyJiZ0KHIpfSxyZWRvOmZ1bmN0aW9uKCl7dChlKX19KX0oZSxpKSxpPW8udXRpbC5jbG9uZUpzb24oZSl9LGUudW5kbz1mdW5jdGlvbigpe2YudW5kbygpfSxlLnJlZG89ZnVuY3Rpb24oKXtmLnJlZG8oKX0sZX0sdS5maWxsTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikscj1lLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKSxpPXQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5zdmcmJnQuZnJhbWV3b3JrLnN2ZygpLG89e3dpZHRoOjgwMCxoZWlnaHQ6NjAwLHBhcGVyX2JnY29sb3I6YS5iYWNrZ3JvdW5kLF9jb250YWluZXI6ZSxfcGFwZXJkaXY6cixfcGFwZXI6aX07dC5fZnVsbExheW91dD1sKG8sdC5sYXlvdXQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2xpYiI6NzI0LCIuL21pY3JvcG9sYXIiOjgzMSwiLi91bmRvX21hbmFnZXIiOjgzMyxkMzoxMjB9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiB0PyhpPSEwLHRbZV0oKSxpPSExLHRoaXMpOnRoaXN9dmFyIGUscj1bXSxuPS0xLGk9ITE7cmV0dXJue2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gaT90aGlzOihyLnNwbGljZShuKzEsci5sZW5ndGgtbiksci5wdXNoKHQpLG49ci5sZW5ndGgtMSx0aGlzKX0sc2V0Q2FsbGJhY2s6ZnVuY3Rpb24odCl7ZT10fSx1bmRvOmZ1bmN0aW9uKCl7dmFyIGk9cltuXTtyZXR1cm4gaT8odChpLCJ1bmRvIiksbi09MSxlJiZlKGkudW5kbyksdGhpcyk6dGhpc30scmVkbzpmdW5jdGlvbigpe3ZhciBpPXJbbisxXTtyZXR1cm4gaT8odChpLCJyZWRvIiksbis9MSxlJiZlKGkucmVkbyksdGhpcyk6dGhpc30sY2xlYXI6ZnVuY3Rpb24oKXtyPVtdLG49LTF9LGhhc1VuZG86ZnVuY3Rpb24oKXtyZXR1cm4tMSE9PW59LGhhc1JlZG86ZnVuY3Rpb24oKXtyZXR1cm4gbjxyLmxlbmd0aC0xfSxnZXRDb21tYW5kczpmdW5jdGlvbigpe3JldHVybiByfSxnZXRQcmV2aW91c0NvbW1hbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gcltuLTFdfSxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiBufX19fSx7fV0sODM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi9wbG90cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCxjLHQsZSl9Zm9yKHZhciBzLGwsdT1hLnR5cGUsYz1hLmF0dHJpYnV0ZXMsaD1hLmhhbmRsZURlZmF1bHRzLGY9YS5wYXJ0aXRpb258fCJ4IixkPWkuZmluZFN1YnBsb3RJZHMocix1KSxwPWQubGVuZ3RoLG09MDttPHA7bSsrKXt2YXIgdj1kW21dO3M9dFt2XT90W3ZdOnRbdl09e30sZVt2XT1sPXt9LG8oImRvbWFpbi4iK2YsW20vcCwobSsxKS9wXSksbygiZG9tYWluLiIre3g6InkiLHk6IngifVtmXSksYS5pZD12LGgocyxsLG8sYSl9fX0seyIuLi9saWIiOjcyNCwiLi9wbG90cyI6ODI3fV0sODM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdGVybmFyeSIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InRlcm5hcnkiLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9InRlcm5hcnkiLHIuaWRSZWdleD0vXnRlcm5hcnkoWzItOV18WzEtOV1bMC05XSspPyQvLHIuYXR0clJlZ2V4PS9edGVybmFyeShbMi05XXxbMS05XVswLTldKyk/JC8sci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWkuZ2V0U3VicGxvdElkcyhlLCJ0ZXJuYXJ5Iiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aS5nZXRTdWJwbG90Q2FsY0RhdGEociwidGVybmFyeSIscyksdT1lW3NdLl9zdWJwbG90O3V8fCh1PW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX3Rlcm5hcnlsYXllci5ub2RlKCl9LGUpLGVbc10uX3N1YnBsb3Q9dSksdS5wbG90KGwsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1pLmdldFN1YnBsb3RJZHMobiwidGVybmFyeSIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPW5bc10uX3N1YnBsb3Q7IWVbc10mJmwmJihsLnBsb3RDb250YWluZXIucmVtb3ZlKCksbC5jbGlwRGVmLnJlbW92ZSgpLGwuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpKX19fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjgzNiwiLi9sYXlvdXQvZGVmYXVsdHMiOjgzOSwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MCwiLi90ZXJuYXJ5Ijo4NDF9XSw4MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdWJwbG90Ont2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InRlcm5hcnkifX19LHt9XSw4Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3RpdGxlOm4udGl0bGUsdGl0bGVmb250Om4udGl0bGVmb250LGNvbG9yOm4uY29sb3IsdGlja21vZGU6bi50aWNrbW9kZSxudGlja3M6aSh7fSxuLm50aWNrcyx7ZGZsdDo2LG1pbjoxfSksdGljazA6bi50aWNrMCxkdGljazpuLmR0aWNrLHRpY2t2YWxzOm4udGlja3ZhbHMsdGlja3RleHQ6bi50aWNrdGV4dCx0aWNrczpuLnRpY2tzLHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyxzaG93dGlja3ByZWZpeDpuLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4Om4uc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd2V4cG9uZW50Om4uc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6bi5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDpuLnRpY2tmb250LHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCxob3ZlcmZvcm1hdDpuLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkoe30sbi5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjpuLmxpbmVjb2xvcixsaW5ld2lkdGg6bi5saW5ld2lkdGgsc2hvd2dyaWQ6aSh7fSxuLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOm4uZ3JpZGNvbG9yLGdyaWR3aWR0aDpuLmdyaWR3aWR0aCxtaW46e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowfX19LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NX1dLDgzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuL2F4aXNfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiB1KHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxhLHIsbil9ZS50eXBlPSJsaW5lYXIiO3ZhciBjPXUoImNvbG9yIiksaD1jPT09dC5jb2xvcj9jOnIuZm9udC5jb2xvcixmPWUuX25hbWUsZD1mLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLHA9IkNvbXBvbmVudCAiK2QsbT11KCJ0aXRsZSIscCk7ZS5faG92ZXJ0aXRsZT1tPT09cD9tOmQsaS5jb2VyY2VGb250KHUsInRpdGxlZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqci5mb250LnNpemUpLGNvbG9yOmh9KSx1KCJtaW4iKSxsKHQsZSx1LCJsaW5lYXIiKSxvKHQsZSx1LCJsaW5lYXIiLHtub0hvdmVyOiExfSkscyh0LGUsdSx7b3V0ZXJUaWNrczohMH0pLHUoInNob3d0aWNrbGFiZWxzIikmJihpLmNvZXJjZUZvbnQodSwidGlja2ZvbnQiLHtmYW1pbHk6ci5mb250LmZhbWlseSxzaXplOnIuZm9udC5zaXplLGNvbG9yOmh9KSx1KCJ0aWNrYW5nbGUiKSx1KCJ0aWNrZm9ybWF0IikpLHUoImhvdmVyZm9ybWF0IiksdSgic2hvd2xpbmUiKSYmKHUoImxpbmVjb2xvciIsYyksdSgibGluZXdpZHRoIikpLHUoInNob3dncmlkIikmJih1KCJncmlkY29sb3IiLG4oYyxyLmJnQ29sb3IsNjApLnRvUmdiU3RyaW5nKCkpLHUoImdyaWR3aWR0aCIpKX19LHsiLi4vLi4vLi4vbGliIjo3MjQsIi4uLy4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3ODIsIi4uLy4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjc4MywiLi4vLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc4NCwiLi9heGlzX2F0dHJpYnV0ZXMiOjgzNyx0aW55Y29sb3IyOjUzMn1dLDgzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBhPXIoImJnY29sb3IiKSxvPXIoInN1bSIpO24uYmdDb2xvcj1pLmNvbWJpbmUoYSxuLnBhcGVyX2JnY29sb3IpO2Zvcih2YXIgdSxjLGgsZj0wO2Y8bC5sZW5ndGg7ZisrKXU9bFtmXSxjPXRbdV18fHt9LGg9ZVt1XT17X25hbWU6dSx0eXBlOiJsaW5lYXIifSxzKGMsaCxuKTt2YXIgZD1lLmFheGlzLHA9ZS5iYXhpcyxtPWUuY2F4aXM7ZC5taW4rcC5taW4rbS5taW4+PW8mJihkLm1pbj0wLHAubWluPTAsbS5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9dmFyIGk9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9heGlzX2RlZmF1bHRzIiksbD1bImFheGlzIiwiYmF4aXMiLCJjYXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUscix7dHlwZToidGVybmFyeSIsYXR0cmlidXRlczpvLGhhbmRsZURlZmF1bHRzOm4sZm9udDplLmZvbnQscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3J9KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIjo4MzQsIi4vYXhpc19kZWZhdWx0cyI6ODM4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDB9XSw4NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuL2F4aXNfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17ZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LHN1bTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjB9LGFheGlzOmksYmF4aXM6aSxjYXhpczppfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi9heGlzX2F0dHJpYnV0ZXMiOjgzN31dLDg0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmluaXQoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCl9ZnVuY3Rpb24gaSh0KXthLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfXZhciBhPXQoImQzIiksbz10KCJ0aW55Y29sb3IyIikscz10KCIuLi8uLi9wbG90bHkiKSxsPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaD10KCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGQ9dCgiLi4vcGxvdHMiKSxwPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksbT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Iiksdj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksZz10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLHk9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLGI9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1uO3ZhciB4PW4ucHJvdG90eXBlO3guaW5pdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRhaW5lcj10Ll90ZXJuYXJ5bGF5ZXIsdGhpcy5kZWZzPXQuX2RlZnMsdGhpcy5sYXlvdXRJZD10Ll91aWQsdGhpcy50cmFjZUhhc2g9e319LHgucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1lW3IuaWRdLGk9ZS5fc2l6ZTtyLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe2lmKCExPT09dFthXVswXS50cmFjZS5jbGlwb25heGlzKXtyLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fXIuYWRqdXN0TGF5b3V0KG4saSksZC5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUocix0LG4pLHIubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5jYWxsKHUuZmlsbCxuLmJnY29sb3IpfSx4Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5kZWZzLnNlbGVjdEFsbCgiZy5jbGlwcyIpLmRhdGEoWzBdKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKTt2YXIgcj10LmNsaXBJZD0iY2xpcCIrdC5sYXlvdXRJZCt0LmlkO3QuY2xpcERlZj1lLnNlbGVjdEFsbCgiIyIrcikuZGF0YShbMF0pLHQuY2xpcERlZi5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIscikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIik7dmFyIG49dC5jbGlwSWRSZWxhdGl2ZT0iY2xpcC1yZWxhdGl2ZSIrdC5sYXlvdXRJZCt0LmlkO3QuY2xpcERlZlJlbGF0aXZlPWUuc2VsZWN0QWxsKCIjIituKS5kYXRhKFswXSksdC5jbGlwRGVmUmVsYXRpdmUuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLG4pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpLHQucGxvdENvbnRhaW5lcj10LmNvbnRhaW5lci5zZWxlY3RBbGwoImcuIit0LmlkKS5kYXRhKFswXSksdC5wbG90Q29udGFpbmVyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LmlkLCEwKSx0LmxheWVycz17fTt2YXIgaT1bImRyYWdsYXllciIsInBsb3RiZyIsImJhY2twbG90IiwiZ3JpZHMiLCJmcm9udHBsb3QiLCJhYXhpcyIsImJheGlzIiwiY2F4aXMiLCJheGxpbmVzIl07dC5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiZy50b3BsZXZlbCIpLmRhdGEoaSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInRvcGxldmVsICIrdH0pLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9YS5zZWxlY3QodGhpcyk7dC5sYXllcnNbZV09ciwiZnJvbnRwbG90Ij09PWU/ci5hcHBlbmQoImciKS5jbGFzc2VkKCJzY2F0dGVybGF5ZXIiLCEwKToiYmFja3Bsb3QiPT09ZT9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1hcGxheWVyIiwhMCk6InBsb3RiZyI9PT1lP3IuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIik6ImF4bGluZXMiPT09ZSYmci5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKFsiYWxpbmUiLCJibGluZSIsImNsaW5lIl0pLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuZWFjaChmdW5jdGlvbih0KXthLnNlbGVjdCh0aGlzKS5jbGFzc2VkKHQsITApfSl9KSx0LnBsb3RDb250YWluZXIuc2VsZWN0KCIuZ3JpZHMiKS5zZWxlY3RBbGwoImcuZ3JpZCIpLmRhdGEoWyJhZ3JpZCIsImJncmlkIiwiY2dyaWQiXSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuImdyaWQgIit0fSkuZWFjaChmdW5jdGlvbihlKXt0LmxheWVyc1tlXT1hLnNlbGVjdCh0aGlzKX0pLHQucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5iYWNrcGxvdCwuZ3JpZHMiKS5jYWxsKGMuc2V0Q2xpcFVybCxyKX07dmFyIF89TWF0aC5zcXJ0KDQvMyk7eC5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbD10aGlzLGQ9dC5kb21haW4scD0oZC54WzBdK2QueFsxXSkvMixtPShkLnlbMF0rZC55WzFdKS8yLHY9ZC54WzFdLWQueFswXSxnPWQueVsxXS1kLnlbMF0seT12KmUudyxiPWcqZS5oLHg9dC5zdW0sdz10LmFheGlzLm1pbixNPXQuYmF4aXMubWluLGs9dC5jYXhpcy5taW47eT5fKmI/KGE9YixpPWEqXyk6KGk9eSxhPWkvXyksbz12KmkveSxzPWcqYS9iLHI9ZS5sK2UudypwLWkvMixuPWUudCtlLmgqKDEtbSktYS8yLGwueDA9cixsLnkwPW4sbC53PWksbC5oPWEsbC5zdW09eCxsLnhheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt3KzIqay14LHgtdy0yKk1dLGRvbWFpbjpbcC1vLzIscCtvLzJdLF9pZDoieCJ9LGgobC54YXhpcyxsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxsLnhheGlzLnNldFNjYWxlKCksbC54YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYT49bC5hYXhpcy5yYW5nZVswXSYmdC5hPD1sLmFheGlzLnJhbmdlWzFdJiZ0LmI+PWwuYmF4aXMucmFuZ2VbMV0mJnQuYjw9bC5iYXhpcy5yYW5nZVswXSYmdC5jPj1sLmNheGlzLnJhbmdlWzFdJiZ0LmM8PWwuY2F4aXMucmFuZ2VbMF19LGwueWF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3cseC1NLWtdLGRvbWFpbjpbbS1zLzIsbStzLzJdLF9pZDoieSJ9LGgobC55YXhpcyxsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxsLnlheGlzLnNldFNjYWxlKCksbC55YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIEE9bC55YXhpcy5kb21haW5bMF0sVD1sLmFheGlzPWYoe30sdC5hYXhpcyx7dmlzaWJsZTohMCxyYW5nZTpbdyx4LU0ta10sc2lkZToibGVmdCIsX2NvdW50ZXJhbmdsZTozMCx0aWNrYW5nbGU6KCt0LmFheGlzLnRpY2thbmdsZXx8MCktMzAsZG9tYWluOltBLEErcypfXSxfYXhpc2xheWVyOmwubGF5ZXJzLmFheGlzLF9ncmlkbGF5ZXI6bC5sYXllcnMuYWdyaWQsX3BvczowLF9pZDoieSIsX2xlbmd0aDppLF9ncmlkcGF0aDoiTTAsMGwiK2ErIiwtIitpLzJ9KTtoKFQsbC5ncmFwaERpdi5fZnVsbExheW91dCksVC5zZXRTY2FsZSgpO3ZhciBTPWwuYmF4aXM9Zih7fSx0LmJheGlzLHt2aXNpYmxlOiEwLHJhbmdlOlt4LXctayxNXSxzaWRlOiJib3R0b20iLF9jb3VudGVyYW5nbGU6MzAsZG9tYWluOmwueGF4aXMuZG9tYWluLF9heGlzbGF5ZXI6bC5sYXllcnMuYmF4aXMsX2dyaWRsYXllcjpsLmxheWVycy5iZ3JpZCxfY291bnRlcmF4aXM6bC5hYXhpcyxfcG9zOjAsX2lkOiJ4IixfbGVuZ3RoOmksX2dyaWRwYXRoOiJNMCwwbC0iK2kvMisiLC0iK2F9KTtoKFMsbC5ncmFwaERpdi5fZnVsbExheW91dCksUy5zZXRTY2FsZSgpLFQuX2NvdW50ZXJheGlzPVM7dmFyIEU9bC5jYXhpcz1mKHt9LHQuY2F4aXMse3Zpc2libGU6ITAscmFuZ2U6W3gtdy1NLGtdLHNpZGU6InJpZ2h0IixfY291bnRlcmFuZ2xlOjMwLHRpY2thbmdsZTooK3QuY2F4aXMudGlja2FuZ2xlfHwwKSszMCxkb21haW46W0EsQStzKl9dLF9heGlzbGF5ZXI6bC5sYXllcnMuY2F4aXMsX2dyaWRsYXllcjpsLmxheWVycy5jZ3JpZCxfY291bnRlcmF4aXM6bC5iYXhpcyxfcG9zOjAsX2lkOiJ5IixfbGVuZ3RoOmksX2dyaWRwYXRoOiJNMCwwbC0iK2ErIiwiK2kvMn0pO2goRSxsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxFLnNldFNjYWxlKCk7dmFyIEw9Ik0iK3IrIiwiKyhuK2EpKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7bC5jbGlwRGVmLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwpLGwubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixMKTt2YXIgQz0iTTAsIithKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7bC5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQyk7dmFyIHo9InRyYW5zbGF0ZSgiK3IrIiwiK24rIikiO2wucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyIikuYXR0cigidHJhbnNmb3JtIix6KSxsLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpO3ZhciBJPSJ0cmFuc2xhdGUoIityKyIsIisobithKSsiKSI7bC5sYXllcnMuYmF4aXMuYXR0cigidHJhbnNmb3JtIixJKSxsLmxheWVycy5iZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLEkpO3ZhciBEPSJ0cmFuc2xhdGUoIisocitpLzIpKyIsIituKyIpcm90YXRlKDMwKSI7bC5sYXllcnMuYWF4aXMuYXR0cigidHJhbnNmb3JtIixEKSxsLmxheWVycy5hZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLEQpO3ZhciBQPSJ0cmFuc2xhdGUoIisocitpLzIpKyIsIituKyIpcm90YXRlKC0zMCkiO2wubGF5ZXJzLmNheGlzLmF0dHIoInRyYW5zZm9ybSIsUCksbC5sYXllcnMuY2dyaWQuYXR0cigidHJhbnNmb3JtIixQKSxsLmRyYXdBeGVzKCEwKSxsLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuY3Jpc3AiKS5jbGFzc2VkKCJjcmlzcCIsITEpO3ZhciBPPWwubGF5ZXJzLmF4bGluZXM7Ty5zZWxlY3QoIi5hbGluZSIpLmF0dHIoImQiLFQuc2hvd2xpbmU/Ik0iK3IrIiwiKyhuK2EpKyJsIitpLzIrIiwtIithOiJNMCwwIikuY2FsbCh1LnN0cm9rZSxULmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoVC5saW5ld2lkdGh8fDApKyJweCIpLE8uc2VsZWN0KCIuYmxpbmUiKS5hdHRyKCJkIixTLnNob3dsaW5lPyJNIityKyIsIisobithKSsiaCIraToiTTAsMCIpLmNhbGwodS5zdHJva2UsUy5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKFMubGluZXdpZHRofHwwKSsicHgiKSxPLnNlbGVjdCgiLmNsaW5lIikuYXR0cigiZCIsRS5zaG93bGluZT8iTSIrKHIraS8yKSsiLCIrbisibCIraS8yKyIsIithOiJNMCwwIikuY2FsbCh1LnN0cm9rZSxFLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoRS5saW5ld2lkdGh8fDApKyJweCIpLGwuZ3JhcGhEaXYuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5pbml0SW50ZXJhY3Rpb25zKCksbC5wbG90Q29udGFpbmVyLnNlbGVjdCgiLmZyb250cGxvdCIpLmNhbGwoYy5zZXRDbGlwVXJsLGwuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOmwuY2xpcElkKX0seC5kcmF3QXhlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5ncmFwaERpdixuPWUuaWQuc3Vic3RyKDcpKyJ0aXRsZSIsaT1lLmFheGlzLGE9ZS5iYXhpcyxvPWUuY2F4aXM7aWYocC5kb1RpY2tzKHIsaSwhMCkscC5kb1RpY2tzKHIsYSwhMCkscC5kb1RpY2tzKHIsbywhMCksdCl7dmFyIHM9TWF0aC5tYXgoaS5zaG93dGlja2xhYmVscz9pLnRpY2tmb250LnNpemUvMjowLChvLnNob3d0aWNrbGFiZWxzPy43NSpvLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSk7Zy5kcmF3KHIsImEiK24se3Byb3BDb250YWluZXI6aSxwcm9wTmFtZTplLmlkKyIuYWF4aXMudGl0bGUiLGRmbHROYW1lOiJDb21wb25lbnQgQSIsYXR0cmlidXRlczp7eDplLngwK2Uudy8yLHk6ZS55MC1pLnRpdGxlZm9udC5zaXplLzMtcywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pO3ZhciBsPShhLnNob3d0aWNrbGFiZWxzP2EudGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09YS50aWNrcz9hLnRpY2tsZW46MCkrMztnLmRyYXcociwiYiIrbix7cHJvcENvbnRhaW5lcjphLHByb3BOYW1lOmUuaWQrIi5iYXhpcy50aXRsZSIsZGZsdE5hbWU6IkNvbXBvbmVudCBCIixhdHRyaWJ1dGVzOnt4OmUueDAtbCx5OmUueTArZS5oKy44MyphLnRpdGxlZm9udC5zaXplK2wsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxnLmRyYXcociwiYyIrbix7cHJvcENvbnRhaW5lcjpvLHByb3BOYW1lOmUuaWQrIi5jYXhpcy50aXRsZSIsZGZsdE5hbWU6IkNvbXBvbmVudCBDIixhdHRyaWJ1dGVzOnt4OmUueDArZS53K2wseTplLnkwK2UuaCsuODMqby50aXRsZWZvbnQuc2l6ZStsLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9fTt2YXIgdz1iLk1JTlpPT00vMisuODcsTT0ibS0wLjg3LC41aCIrdysidjNoLSIrKHcrNS4yKSsibCIrKHcvMisyLjYpKyIsLSIrKC44Nyp3KzQuNSkrImwyLjYsMS41bC0iK3cvMisiLCIrLjg3KncrIloiLGs9Im0wLjg3LC41aC0iK3crInYzaCIrKHcrNS4yKSsibC0iKyh3LzIrMi42KSsiLC0iKyguODcqdys0LjUpKyJsLTIuNiwxLjVsIit3LzIrIiwiKy44Nyp3KyJaIixBPSJtMCwxbCIrdy8yKyIsIisuODcqdysibDIuNiwtMS41bC0iKyh3LzIrMi42KSsiLC0iKyguODcqdys0LjUpKyJsLSIrKHcvMisyLjYpKyIsIisoLjg3KncrNC41KSsibDIuNiwxLjVsIit3LzIrIiwtIisuODcqdysiWiIsVD0hMDt4LmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyKXt2YXIgbj1GLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3c9ZS1uLmxlZnQsUz1yLW4udG9wLEU9e2E6Ui5hYXhpcy5yYW5nZVswXSxiOlIuYmF4aXMucmFuZ2VbMV0sYzpSLmNheGlzLnJhbmdlWzFdfSxDPUUsTD1SLmFheGlzLnJhbmdlWzFdLUUuYSx6PW8oUi5ncmFwaERpdi5fZnVsbExheW91dFtSLmlkXS5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSxJPSJNMCwiK1IuaCsiTCIrUi53LzIrIiwgMEwiK1IudysiLCIrUi5oKyJaIixEPSExLFA9Ti5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3giKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitSLngwKyIsICIrUi55MCsiKSIpLnN0eWxlKHtmaWxsOno+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZCIsSSksTz1OLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUi54MCsiLCAiK1IueTArIikiKS5zdHlsZSh7ZmlsbDp1LmJhY2tncm91bmQsc3Ryb2tlOnUuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJkIiwiTTAsMFoiKSxnKCl9ZnVuY3Rpb24gZSh0LGUpe3JldHVybiAxLWUvUi5ofWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gMS0odCsoUi5oLWUpL01hdGguc3FydCgzKSkvUi53fWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4odC0oUi5oLWUpL01hdGguc3FydCgzKSkvUi53fWZ1bmN0aW9uIGEodCxpKXt2YXIgYT13K3Qsbz1TK2kscz1NYXRoLm1heCgwLE1hdGgubWluKDEsZSh3LFMpLGUoYSxvKSkpLGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHIodyxTKSxyKGEsbykpKSx1PU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKHcsUyksbihhLG8pKSksYz0ocy8yK3UpKlIudyxoPSgxLXMvMi1sKSpSLncsZj0oYytoKS8yLGQ9aC1jLHA9KDEtcykqUi5oLG09cC1kL187ZDxiLk1JTlpPT00/KEM9RSxQLmF0dHIoImQiLEkpLE8uYXR0cigiZCIsIk0wLDBaIikpOihDPXthOkUuYStzKkwsYjpFLmIrbCpMLGM6RS5jK3UqTH0sUC5hdHRyKCJkIixJKyJNIitjKyIsIitwKyJIIitoKyJMIitmKyIsIittKyJMIitjKyIsIitwKyJaIiksTy5hdHRyKCJkIiwiTSIrdysiLCIrUysibTAuNSwwLjVoNXYtMmgtNXYtNWgtMnY1aC01djJoNXY1aDJaTSIrYysiLCIrcCtNKyJNIitoKyIsIitwK2srIk0iK2YrIiwiK20rQSkpLER8fChQLnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsej4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxPLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSxEPSEwKX1mdW5jdGlvbiBoKHQsZSl7aWYoQz09PUUpcmV0dXJuIDI9PT1lJiZ4KCksaShqKTtpKGopO3ZhciByPXt9O3JbUi5pZCsiLmFheGlzLm1pbiJdPUMuYSxyW1IuaWQrIi5iYXhpcy5taW4iXT1DLmIscltSLmlkKyIuY2F4aXMubWluIl09Qy5jLHMucmVsYXlvdXQoaixyKSxUJiZqLmRhdGEmJmouX2NvbnRleHQuc2hvd1RpcHMmJihsLm5vdGlmaWVyKCJEb3VibGUtY2xpY2sgdG88YnI+em9vbSBiYWNrIG91dCIsImxvbmciKSxUPSExKX1mdW5jdGlvbiBmKCl7RT17YTpSLmFheGlzLnJhbmdlWzBdLGI6Ui5iYXhpcy5yYW5nZVsxXSxjOlIuY2F4aXMucmFuZ2VbMV19LEM9RX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC9SLnhheGlzLl9tLG49ZS9SLnlheGlzLl9tO0M9e2E6RS5hLW4sYjpFLmIrKHIrbikvMixjOkUuYy0oci1uKS8yfTt2YXIgaT1bQy5hLEMuYixDLmNdLnNvcnQoKSxhPXthOmkuaW5kZXhPZihDLmEpLGI6aS5pbmRleE9mKEMuYiksYzppLmluZGV4T2YoQy5jKX07aVswXTwwJiYoaVsxXStpWzBdLzI8MD8oaVsyXSs9aVswXStpWzFdLGlbMF09aVsxXT0wKTooaVsyXSs9aVswXS8yLGlbMV0rPWlbMF0vMixpWzBdPTApLEM9e2E6aVthLmFdLGI6aVthLmJdLGM6aVthLmNdfSxlPShFLmEtQy5hKSpSLnlheGlzLl9tLHQ9KEUuYy1DLmMtRS5iK0MuYikqUi54YXhpcy5fbSk7dmFyIG89InRyYW5zbGF0ZSgiKyhSLngwK3QpKyIsIisoUi55MCtlKSsiKSI7Ui5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLG8pO3ZhciBzPSJ0cmFuc2xhdGUoIistdCsiLCIrLWUrIikiO2lmKFIuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIscyksUi5hYXhpcy5yYW5nZT1bQy5hLFIuc3VtLUMuYi1DLmNdLFIuYmF4aXMucmFuZ2U9W1Iuc3VtLUMuYS1DLmMsQy5iXSxSLmNheGlzLnJhbmdlPVtSLnN1bS1DLmEtQy5iLEMuY10sUi5kcmF3QXhlcyghMSksUi5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLmNyaXNwIikuY2xhc3NlZCgiY3Jpc3AiLCExKSxSLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciBsPVIucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi5wb2ludHMiKTtsLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChjLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsUiksbC5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKGMuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxSKX19ZnVuY3Rpb24gcCh0LGUpe2lmKHQpe3ZhciByPXt9O3JbUi5pZCsiLmFheGlzLm1pbiJdPUMuYSxyW1IuaWQrIi5iYXhpcy5taW4iXT1DLmIscltSLmlkKyIuY2F4aXMubWluIl09Qy5jLHMucmVsYXlvdXQoaixyKX1lbHNlIDI9PT1lJiZ4KCl9ZnVuY3Rpb24gZygpe04uc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX1mdW5jdGlvbiB4KCl7dmFyIHQ9e307dFtSLmlkKyIuYWF4aXMubWluIl09MCx0W1IuaWQrIi5iYXhpcy5taW4iXT0wLHRbUi5pZCsiLmNheGlzLm1pbiJdPTAsai5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLHMucmVsYXlvdXQoaix0KX12YXIgdyxTLEUsTCxDLHosSSxELFAsTyxSPXRoaXMsRj1SLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikubm9kZSgpLGo9Ui5ncmFwaERpdixOPWouX2Z1bGxMYXlvdXQuX3pvb21sYXllcixCPXtlbGVtZW50OkYsZ2Q6aixwbG90aW5mbzp7eGF4aXM6Ui54YXhpcyx5YXhpczpSLnlheGlzfSxkb3VibGVjbGljazp4LHN1YnBsb3Q6Ui5pZCxwcmVwRm46ZnVuY3Rpb24oZSxyLG4pe0IueGF4ZXM9W1IueGF4aXNdLEIueWF4ZXM9W1IueWF4aXNdO3ZhciBpPWouX2Z1bGxMYXlvdXQuZHJhZ21vZGU7ZS5zaGlmdEtleSYmKGk9InBhbiI9PT1pPyJ6b29tIjoicGFuIiksQi5taW5EcmFnPSJsYXNzbyI9PT1pPzE6dm9pZCAwLCJ6b29tIj09PWk/KEIubW92ZUZuPWEsQi5kb25lRm49aCx0KGUscixuKSk6InBhbiI9PT1pPyhCLm1vdmVGbj1kLEIuZG9uZUZuPXAsZigpLGcoKSk6InNlbGVjdCIhPT1pJiYibGFzc28iIT09aXx8eShlLHIsbixCLGkpfX07Ri5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXt2LmhvdmVyKGosdCxSLmlkKSxqLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9RixqLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9Ui5pZH0sRi5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe2ouX2RyYWdnaW5nfHxtLnVuaG92ZXIoaix0KX0sRi5vbmNsaWNrPWZ1bmN0aW9uKHQpe3YuY2xpY2soaix0LFIuaWQpfSxtLmluaXQoQil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjIzLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NjkxLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NzY5LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3ODAsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzgxLCIuLi9wbG90cyI6ODI3LGQzOjEyMCx0aW55Y29sb3IyOjUzMn1dLDg0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHQubGF5b3V0QXR0cmlidXRlcyl7dmFyIGU9dC5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspcyhyLmxheW91dEFycmF5UmVnZXhlcyxlW25dKX19ZnVuY3Rpb24gaSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJih0PXQudHlwZSksdH12YXIgYT10KCIuL2xpYi9sb2dnZXJzIiksbz10KCIuL2xpYi9ub29wIikscz10KCIuL2xpYi9wdXNoX3VuaXF1ZSIpLGw9dCgiLi9wbG90cy9hdHRyaWJ1dGVzIik7ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSxuLGkpe2lmKHIubW9kdWxlc1tlXSlyZXR1cm4gdm9pZCBhLmxvZygiVHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQiKTtmb3IodmFyIG89e30scz0wO3M8bi5sZW5ndGg7cysrKW9bbltzXV09ITAsci5hbGxDYXRlZ29yaWVzW25bc11dPSEwO3IubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30saSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9aSksci5hbGxUeXBlcy5wdXNoKGUpfSxyLnJlZ2lzdGVyU3VicGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Lm5hbWU7aWYoci5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybiB2b2lkIGEubG9nKCJQbG90IHR5cGUgIitlKyIgYWxyZWFkeSByZWdpc3RlcmVkLiIpO24odCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXR9LHIucmVnaXN0ZXJDb21wb25lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lO3IuY29tcG9uZW50c1JlZ2lzdHJ5W2VdPXQsdC5sYXlvdXRBdHRyaWJ1dGVzJiYodC5sYXlvdXRBdHRyaWJ1dGVzLl9pc0xpbmtlZFRvQXJyYXkmJnMoci5sYXlvdXRBcnJheUNvbnRhaW5lcnMsZSksbih0KSl9LHIuZ2V0TW9kdWxlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQucilyZXR1cm4gYS53YXJuKCJUcmllZCB0byBwdXQgYSBwb2xhciB0cmFjZSBvbiBhbiBpbmNvbXBhdGlibGUgZ3JhcGggb2YgY2FydGVzaWFuIGRhdGEuIElnbm9yaW5nIHRoaXMgZGF0YXNldC4iLHQpLCExO3ZhciBlPXIubW9kdWxlc1tpKHQpXTtyZXR1cm4hIWUmJmUuX21vZHVsZX0sci50cmFjZUlzPWZ1bmN0aW9uKHQsZSl7aWYoInZhcmlvdXMiPT09KHQ9aSh0KSkpcmV0dXJuITE7dmFyIG49ci5tb2R1bGVzW3RdO3JldHVybiBufHwodCYmImFyZWEiIT09dCYmYS5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlICIrdCsiLiIpLG49ci5tb2R1bGVzW2wudHlwZS5kZmx0XSksISFuLmNhdGVnb3JpZXNbZV19LHIuZ2V0Q29tcG9uZW50TWV0aG9kPWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF07cmV0dXJuIG4/bltlXXx8bzpvfX0seyIuL2xpYi9sb2dnZXJzIjo3MjcsIi4vbGliL25vb3AiOjczMSwiLi9saWIvcHVzaF91bmlxdWUiOjczNSwiLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjJ9XSw4NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSJ0aGVtZXNfX3RodW1iIjplPXthdXRvc2l6ZTohMCx3aWR0aDoxNTAsaGVpZ2h0OjE1MCx0aXRsZToiIixzaG93bGVnZW5kOiExLG1hcmdpbjp7bDo1LHI6NSx0OjUsYjo1LHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7Y2FzZSJ0aHVtYm5haWwiOmU9e3RpdGxlOiIiLGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjoiIixtYXJnaW46e2w6MSxyOjEsdDoxLGI6MSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2RlZmF1bHQ6ZT17fX1yZXR1cm4gZX1mdW5jdGlvbiBpKHQpe3JldHVyblsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0uaW5kZXhPZih0LnNsaWNlKDAsNSkpPi0xfXZhciBhPXQoIi4uL2xpYiIpLG89dCgiLi4vcGxvdHMvcGxvdHMiKSxzPWEuZXh0ZW5kRmxhdCxsPWEuZXh0ZW5kRGVlcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHQ9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpO3ZhciByLGE9dC5kYXRhLHU9dC5sYXlvdXQsYz1sKFtdLGEpLGg9bCh7fSx1LG4oZS50aWxlQ2xhc3MpKSxmPXQuX2NvbnRleHR8fHt9O2lmKGUud2lkdGgmJihoLndpZHRoPWUud2lkdGgpLGUuaGVpZ2h0JiYoaC5oZWlnaHQ9ZS5oZWlnaHQpLCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3N8fCJ0aGVtZXNfX3RodW1iIj09PWUudGlsZUNsYXNzKXtoLmFubm90YXRpb25zPVtdO3ZhciBkPU9iamVjdC5rZXlzKGgpO2ZvcihyPTA7cjxkLmxlbmd0aDtyKyspaShkW3JdKSYmKGhbZFtyXV0udGl0bGU9IiIpO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07cC5zaG93c2NhbGU9ITEscC5tYXJrZXImJihwLm1hcmtlci5zaG93c2NhbGU9ITEpLCJwaWUiPT09cC50eXBlJiYocC50ZXh0cG9zaXRpb249Im5vbmUiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWguYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgbT1vLmdldFN1YnBsb3RJZHMoaCwiZ2wzZCIpO2lmKG0ubGVuZ3RoKXt2YXIgdj17fTtmb3IoInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzcyYmKHY9e3RpdGxlOiIiLHNob3dheGVzbGFiZWxzOiExLHNob3d0aWNrbGFiZWxzOiExLGxpbmV0aWNrZW5hYmxlOiExfSkscj0wO3I8bS5sZW5ndGg7cisrKXt2YXIgZz1oW21bcl1dO2cueGF4aXN8fChnLnhheGlzPXt9KSxnLnlheGlzfHwoZy55YXhpcz17fSksZy56YXhpc3x8KGcuemF4aXM9e30pLHMoZy54YXhpcyx2KSxzKGcueWF4aXMsdikscyhnLnpheGlzLHYpLGcuX3NjZW5lPW51bGx9fXZhciB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UudGlsZUNsYXNzJiYoeS5jbGFzc05hbWU9ZS50aWxlQ2xhc3MpO3ZhciBiPXtnZDp5LHRkOnksbGF5b3V0OmgsZGF0YTpjLGNvbmZpZzp7c3RhdGljUGxvdDp2b2lkIDA9PT1lLnN0YXRpY1Bsb3R8fGUuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnZvaWQgMD09PWUucGxvdEdsUGl4ZWxSYXRpbz8yOmUucGxvdEdsUGl4ZWxSYXRpbyxkaXNwbGF5bG9nbzplLmRpc3BsYXlsb2dvfHwhMSxzaG93TGluazplLnNob3dMaW5rfHwhMSxzaG93VGlwczplLnNob3dUaXBzfHwhMSxtYXBib3hBY2Nlc3NUb2tlbjpmLm1hcGJveEFjY2Vzc1Rva2VufX07cmV0dXJuInRyYW5zcGFyZW50IiE9PWUuc2V0QmFja2dyb3VuZCYmKGIuY29uZmlnLnNldEJhY2tncm91bmQ9ZS5zZXRCYWNrZ3JvdW5kfHwib3BhcXVlIiksYi5nZC5kZWZhdWx0TGF5b3V0PW4oZS50aWxlQ2xhc3MpLGJ9fSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90cy9wbG90cyI6ODI3fV0sODQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZT1lfHx7fSxlLmZvcm1hdD1lLmZvcm1hdHx8InBuZyIsbmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXt0Ll9zbmFwc2hvdEluUHJvZ3Jlc3MmJm4obmV3IEVycm9yKCJTbmFwc2hvdHRpbmcgYWxyZWFkeSBpbiBwcm9ncmVzcy4iKSksYS5pc0lFKCkmJiJzdmciIT09ZS5mb3JtYXQmJm4obmV3IEVycm9yKCJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC4iKSksdC5fc25hcHNob3RJblByb2dyZXNzPSEwO3ZhciBzPWkodCxlKSxsPWUuZmlsZW5hbWV8fHQuZm58fCJuZXdwbG90IjtsKz0iLiIrZS5mb3JtYXQscy50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEsbyhlLGwpfSkudGhlbihmdW5jdGlvbih0KXtyKHQpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5fc25hcHNob3RJblByb2dyZXNzPSExLG4oZSl9KX0pfXZhciBpPXQoIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIiksYT10KCIuLi9saWIiKSxvPXQoIi4vZmlsZXNhdmVyIik7ZS5leHBvcnRzPW59LHsiLi4vbGliIjo3MjQsIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIjo3NTcsIi4vZmlsZXNhdmVyIjo4NDV9XSw4NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbj0iZG93bmxvYWQiaW4gcixpPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsbyl7InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9NU0lFIFsxLTldXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJm8obmV3IEVycm9yKCJJRSA8IDEwIHVuc3VwcG9ydGVkIikpLGkmJihkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIrdC5zbGljZSh0LnNlYXJjaCgvWyw7XS8pKSxhKGUpKSxlfHwoZT0iZG93bmxvYWQiKSxuJiYoci5ocmVmPXQsci5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksci5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksYShlKSksInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVCbG9iJiYobmF2aWdhdG9yLm1zU2F2ZUJsb2IobmV3IEJsb2IoW3RdKSxlKSxhKGUpKSxvKG5ldyBFcnJvcigiZG93bmxvYWQgZXJyb3IiKSl9KX07ZS5leHBvcnRzPW59LHt9XSw4NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5nZXREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdC5faGFzJiYodC5faGFzKCJnbDNkIil8fHQuX2hhcygiZ2wyZCIpKT81MDA6MH0sci5nZXRSZWRyYXdGdW5jPWZ1bmN0aW9uKHQpe2lmKCEodC5kYXRhJiZ0LmRhdGFbMF0mJnQuZGF0YVswXS5yKSlyZXR1cm4gZnVuY3Rpb24oKXsodC5jYWxjZGF0YXx8W10pLmZvckVhY2goZnVuY3Rpb24odCl7dFswXSYmdFswXS50JiZ0WzBdLnQuY2ImJnRbMF0udC5jYigpfSl9fX0se31dLDg0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hlbHBlcnMiKSxpPXtnZXREZWxheTpuLmdldERlbGF5LGdldFJlZHJhd0Z1bmM6bi5nZXRSZWRyYXdGdW5jLGNsb25lOnQoIi4vY2xvbmVwbG90IiksdG9TVkc6dCgiLi90b3N2ZyIpLHN2Z1RvSW1nOnQoIi4vc3ZndG9pbWciKSx0b0ltYWdlOnQoIi4vdG9pbWFnZSIpLGRvd25sb2FkSW1hZ2U6dCgiLi9kb3dubG9hZCIpfTtlLmV4cG9ydHM9aX0seyIuL2Nsb25lcGxvdCI6ODQzLCIuL2Rvd25sb2FkIjo4NDQsIi4vaGVscGVycyI6ODQ2LCIuL3N2Z3RvaW1nIjo4NDgsIi4vdG9pbWFnZSI6ODQ5LCIuL3Rvc3ZnIjo4NTB9XSw4NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBhLHI9bmV3IFByb21pc2UoZnVuY3Rpb24obixhKXt2YXIgbz13aW5kb3cuSW1hZ2Uscz10LnN2ZyxsPXQuZm9ybWF0fHwicG5nIjtpZihpLmlzSUUoKSYmKHM9cy5yZXBsYWNlKC8iL2dpLCInIikscz1zLnJlcGxhY2UoLyhcKCcjKShbXiddKikoJ1wpKS9naSwnKCIkMiIpJykscz1zLnJlcGxhY2UoLyhcXCcpL2dpLCciJyksInN2ZyIhPT1sKSl7dmFyIHU9bmV3IEVycm9yKCJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC4iKTtyZXR1cm4gYSh1KSx0LnByb21pc2U/cjplLmVtaXQoImVycm9yIix1KX12YXIgYz10LmNhbnZhcyxoPWMuZ2V0Q29udGV4dCgiMmQiKSxmPW5ldyBvLGQ9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudChzKTtjLmhlaWdodD10LmhlaWdodHx8MTUwLGMud2lkdGg9dC53aWR0aHx8MzAwLGYub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHI7c3dpdGNoKCJzdmciIT09bCYmaC5kcmF3SW1hZ2UoZiwwLDApLGwpe2Nhc2UianBlZyI6cj1jLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2UicG5nIjpyPWMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTticmVhaztjYXNlIndlYnAiOnI9Yy50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztjYXNlInN2ZyI6cj1kO2JyZWFrO2RlZmF1bHQ6aWYoYShuZXcgRXJyb3IoIkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nIG9yIHN2ZyIpKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIiwiSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcgb3Igc3ZnIil9bihyKSx0LnByb21pc2V8fGUuZW1pdCgic3VjY2VzcyIscil9LGYub25lcnJvcj1mdW5jdGlvbihyKXtpZihhKHIpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdCgiZXJyb3IiLHIpfSxmLnNyYz1kfSk7cmV0dXJuIHQucHJvbWlzZT9yOmV9dmFyIGk9dCgiLi4vbGliIiksYT10KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZS5leHBvcnRzPW59LHsiLi4vbGliIjo3MjQsZXZlbnRzOjEyN31dLDg0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcigpe3ZhciB0PXMuZ2V0RGVsYXkoZi5fZnVsbExheW91dCk7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PXUoZikscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyLmlkPW8ucmFuZHN0cigpLG49Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmYuX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmYuX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpyLGVtaXR0ZXI6bixzdmc6dH0pLG4uY2xlYW49ZnVuY3Rpb24oKXtmJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfX0sdCl9dmFyIG49bmV3IGksaD1sKHQse2Zvcm1hdDoicG5nIn0pLGY9aC5nZDtmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO3ZhciBkPXMuZ2V0UmVkcmF3RnVuYyhmKTtyZXR1cm4gYS5wbG90KGYsaC5kYXRhLGgubGF5b3V0LGguY29uZmlnKS50aGVuKGQpLnRoZW4ocikuY2F0Y2goZnVuY3Rpb24odCl7bi5lbWl0KCJlcnJvciIsdCl9KSxufXZhciBpPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixhPXQoIi4uL3Bsb3RseSIpLG89dCgiLi4vbGliIikscz10KCIuL2hlbHBlcnMiKSxsPXQoIi4vY2xvbmVwbG90IiksdT10KCIuL3Rvc3ZnIiksYz10KCIuL3N2Z3RvaW1nIik7ZS5leHBvcnRzPW59LHsiLi4vbGliIjo3MjQsIi4uL3Bsb3RseSI6NzU5LCIuL2Nsb25lcGxvdCI6ODQzLCIuL2hlbHBlcnMiOjg0NiwiLi9zdmd0b2ltZyI6ODQ4LCIuL3Rvc3ZnIjo4NTAsZXZlbnRzOjEyN31dLDg1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWEuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5zdHlsZSh7ZGlzcGxheToibm9uZSJ9KS5odG1sKCIiKSxyPXQucmVwbGFjZSgvKCZbXjtdKjspL2dpLGZ1bmN0aW9uKHQpe3JldHVybiImbHQ7Ij09PXQ/IiYjNjA7IjoiJnJ0OyI9PT10PyImIzYyOyI6LTEhPT10LmluZGV4T2YoIjwiKXx8LTEhPT10LmluZGV4T2YoIj4iKT8iIjplLmh0bWwodCkudGV4dCgpfSk7cmV0dXJuIGUucmVtb3ZlKCkscn1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlcGxhY2UoLyYoPyFcdys7fFwjWzAtOV0rO3wgXCN4WzAtOUEtRl0rOykvZywiJmFtcDsiKX12YXIgYT10KCJkMyIpLG89dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHU9LyIvZyxjPW5ldyBSZWdFeHAoJygiVE9CRVNUUklQUEVEKXwoVE9CRVNUUklQUEVEIiknLCJnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaD10Ll9mdWxsTGF5b3V0LGY9aC5fcGFwZXIsZD1oLl90b3BwYXBlcjtmLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmNhbGwoby5zZXRSZWN0LDAsMCxoLndpZHRoLGguaGVpZ2h0KS5jYWxsKHMuZmlsbCxoLnBhcGVyX2JnY29sb3IpO3ZhciBwPWguX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKyl7dmFyIG09cFtyXTttLnRvU1ZHJiZtLnRvU1ZHKHQpfWlmKGQpe3ZhciB2PWQubm9kZSgpLmNoaWxkTm9kZXMsZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2KTtmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKXt2YXIgeT1nW3JdO3kuY2hpbGROb2Rlcy5sZW5ndGgmJmYubm9kZSgpLmFwcGVuZENoaWxkKHkpfX1oLl9kcmFnZ2VycyYmaC5fZHJhZ2dlcnMucmVtb3ZlKCksZi5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixmLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9YS5zZWxlY3QodGhpcyk7aWYoImhpZGRlbiI9PT10LnN0eWxlKCJ2aXNpYmlsaXR5Iil8fCJub25lIj09PXQuc3R5bGUoImRpc3BsYXkiKSlyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3Quc3R5bGUoe3Zpc2liaWxpdHk6bnVsbCxkaXNwbGF5Om51bGx9KTt2YXIgZT10LnN0eWxlKCJmb250LWZhbWlseSIpO2UmJi0xIT09ZS5pbmRleE9mKCciJykmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlLnJlcGxhY2UodSwiVE9CRVNUUklQUEVEIikpfSksZi5zZWxlY3RBbGwoIi5wb2ludCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1hLnNlbGVjdCh0aGlzKSxlPXQuc3R5bGUoImZpbGwiKTtlJiYtMSE9PWUuaW5kZXhPZigidXJsKCIpJiZ0LnN0eWxlKCJmaWxsIixlLnJlcGxhY2UodSwiVE9CRVNUUklQUEVEIikpfSksInBkZiIhPT1lJiYiZXBzIiE9PWV8fGYuc2VsZWN0QWxsKCIjTWF0aEpheF9TVkdfZ2x5cGhzIHBhdGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDApLGYubm9kZSgpLnNldEF0dHJpYnV0ZU5TKGwueG1sbnMsInhtbG5zIixsLnN2ZyksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMobC54bWxucywieG1sbnM6eGxpbmsiLGwueGxpbmspO3ZhciBiPShuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKGYubm9kZSgpKTtyZXR1cm4gYj1uKGIpLGI9aShiKSxiPWIucmVwbGFjZShjLCInIil9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MjYsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MDYsZDM6MTIwfV0sODUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7bihlLnRleHQsdCwidHgiKSxuKGUuaG92ZXJ0ZXh0LHQsImh0eCIpO3ZhciByPWUubWFya2VyO2lmKHIpe24oci5vcGFjaXR5LHQsIm1vIiksbihyLmNvbG9yLHQsIm1jIik7dmFyIGk9ci5saW5lO2kmJihuKGkuY29sb3IsdCwibWxjIiksbihpLndpZHRoLHQsIm1sdyIpKX19fSx7Ii4uLy4uL2xpYiI6NzI0fV0sODUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwLGM9dSh7fSxzKTtjLmZhbWlseS5hcnJheU9rPSEwLGMuc2l6ZS5hcnJheU9rPSEwLGMuY29sb3IuYXJyYXlPaz0hMDt2YXIgaD1uLm1hcmtlcixmPWgubGluZSxkPWwoe30sZi53aWR0aCx7ZGZsdDowfSkscD1sKHt9LHt3aWR0aDpkfSxpKCJtYXJrZXIubGluZSIpKSxtPWwoe30se2xpbmU6cH0saSgibWFya2VyIikse3Nob3dzY2FsZTpoLnNob3dzY2FsZSxjb2xvcmJhcjpvfSk7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6Im5vbmUiLGFycmF5T2s6ITB9LHRleHRmb250Omwoe30sYyx7fSksaW5zaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSxvdXRzaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXX0sYmFzZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsYXJyYXlPazohMH0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsYXJyYXlPazohMH0sbWFya2VyOm0scjpuLnIsdDpuLnQsZXJyb3JfeTphLGVycm9yX3g6YSxfZGVwcmVjYXRlZDp7YmFyZGlyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjA5LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIjo2MjgsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3ODgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDg1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxzPXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCx1LGMsaCxmPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxwPWUub3JpZW50YXRpb258fChlLngmJiFlLnk/ImgiOiJ2Iik7ImgiPT09cD8ocj1mLHU9Zi5tYWtlQ2FsY2RhdGEoZSwieCIpLGw9ZC5tYWtlQ2FsY2RhdGEoZSwieSIpLGg9ZS54Y2FsZW5kYXIpOihyPWQsdT1kLm1ha2VDYWxjZGF0YShlLCJ5IiksbD1mLm1ha2VDYWxjZGF0YShlLCJ4IiksaD1lLnljYWxlbmRhcik7dmFyIG09TWF0aC5taW4obC5sZW5ndGgsdS5sZW5ndGgpLHY9bmV3IEFycmF5KG0pO2ZvcihjPTA7YzxtO2MrKyl2W2NdPXtwOmxbY10sczp1W2NdfTt2YXIgZyx5PWUuYmFzZTtpZihBcnJheS5pc0FycmF5KHkpKXtmb3IoYz0wO2M8TWF0aC5taW4oeS5sZW5ndGgsdi5sZW5ndGgpO2MrKylnPXIuZDJjKHlbY10sMCxoKSx2W2NdLmI9bihnKT9nOjA7Zm9yKDtjPHYubGVuZ3RoO2MrKyl2W2NdLmI9MH1lbHNlIGZvcihnPXIuZDJjKHksMCxoKSxnPW4oZyk/ZzowLGM9MDtjPHYubGVuZ3RoO2MrKyl2W2NdLmI9ZztyZXR1cm4gYShlLCJtYXJrZXIiKSYmbyhlLGUubWFya2VyLmNvbG9yLCJtYXJrZXIiLCJjIiksYShlLCJtYXJrZXIubGluZSIpJiZvKGUsZS5tYXJrZXIubGluZS5jb2xvciwibWFya2VyLmxpbmUiLCJjIikscyh2LGUpLHZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSI6NjE1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2FycmF5c190b19jYWxjZGF0YSI6ODUxLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sODU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLG89dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgaD1uLmNvZXJjZUZvbnQ7aWYoIWEodCxlLHUsYykpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtjKCJvcmllbnRhdGlvbiIsZS54JiYhZS55PyJoIjoidiIpLGMoImJhc2UiKSxjKCJvZmZzZXQiKSxjKCJ3aWR0aCIpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKTt2YXIgZj1jKCJ0ZXh0cG9zaXRpb24iKSxkPUFycmF5LmlzQXJyYXkoZil8fCJhdXRvIj09PWYscD1kfHwiaW5zaWRlIj09PWYsbT1kfHwib3V0c2lkZSI9PT1mO2lmKHB8fG0pe3ZhciB2PWgoYywidGV4dGZvbnQiLHUuZm9udCk7cCYmaChjLCJpbnNpZGV0ZXh0Zm9udCIsdiksbSYmaChjLCJvdXRzaWRldGV4dGZvbnQiLHYpfW8odCxlLGMscix1KSxzKHQsZSxpLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHModCxlLGkuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjYzMSwiLi4vLi4vbGliIjo3MjQsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6ODYzLCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDQ3LCIuL2F0dHJpYnV0ZXMiOjg1Mn1dLDg1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLHUsYyxoLGYsZCxwPXQuY2QsbT1wWzBdLnRyYWNlLHY9cFswXS50LGc9dC54YSx5PXQueWEsYj1mdW5jdGlvbih0KXtyZXR1cm4gbi5pbmJveChjKHQpLXMsaCh0KS1zKX07ImgiPT09bS5vcmllbnRhdGlvbj8ocz1yLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQueS10LncvMn0sdT1mdW5jdGlvbih0KXtyZXR1cm4gdC55K3Qudy8yfSxmPWZ1bmN0aW9uKHQpe3JldHVybiBuLmluYm94KHQuYi1lLHQueC1lKSsodC54LWUpLyh0LngtdC5iKX0sZD1iKToocz1lLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQueC10LncvMn0sdT1mdW5jdGlvbih0KXtyZXR1cm4gdC54K3Qudy8yfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBuLmluYm94KHQuYi1yLHQueS1yKSsodC55LXIpLyh0LnktdC5iKX0sZj1iKSxjPSJjbG9zZXN0Ij09PW8/bDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4obCh0KSx0LnAtdi5iYXJncm91cHdpZHRoLzIpfSxoPSJjbG9zZXN0Ij09PW8/dTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgodSh0KSx0LnArdi5iYXJncm91cHdpZHRoLzIpfTt2YXIgeD1uLmdldERpc3RhbmNlRnVuY3Rpb24obyxmLGQpO2lmKG4uZ2V0Q2xvc2VzdChwLHgsdCksITEhPT10LmluZGV4KXt2YXIgXz10LmluZGV4LHc9cFtfXSxNPXcubWNjfHxtLm1hcmtlci5jb2xvcixrPXcubWxjY3x8bS5tYXJrZXIubGluZS5jb2xvcixBPXcubWx3fHxtLm1hcmtlci5saW5lLndpZHRoO2Eub3BhY2l0eShNKT90LmNvbG9yPU06YS5vcGFjaXR5KGspJiZBJiYodC5jb2xvcj1rKTt2YXIgVD1tLmJhc2U/dy5iK3cuczp3LnM7cmV0dXJuImgiPT09bS5vcmllbnRhdGlvbj8odC54MD10LngxPWcuYzJwKHcueCwhMCksdC54TGFiZWxWYWw9VCx0LnkwPXkuYzJwKGModyksITApLHQueTE9eS5jMnAoaCh3KSwhMCksdC55TGFiZWxWYWw9dy5wKToodC55MD10LnkxPXkuYzJwKHcueSwhMCksdC55TGFiZWxWYWw9VCx0LngwPWcuYzJwKGModyksITApLHQueDE9Zy5jMnAoaCh3KSwhMCksdC54TGFiZWxWYWw9dy5wKSx3Lmh0eD90LnRleHQ9dy5odHg6bS5ob3ZlcnRleHQ/dC50ZXh0PW0uaG92ZXJ0ZXh0OncudHg/dC50ZXh0PXcudHg6bS50ZXh0JiYodC50ZXh0PW0udGV4dCksaS5ob3ZlckluZm8odyxtLHQpLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjYzMiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzfV0sODU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5zZXRQb3NpdGlvbnM9dCgiLi9zZXRfcG9zaXRpb25zIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5hcnJheXNUb0NhbGNkYXRhPXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iYmFyIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsImJhciIsIm9yaWVudGVkIiwibWFya2VyQ29sb3JzY2FsZSIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwKIi4uL3NjYXR0ZXIvY29sb3JiYXIiOjEwMjgsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4NTEsIi4vYXR0cmlidXRlcyI6ODUyLCIuL2NhbGMiOjg1MywiLi9kZWZhdWx0cyI6ODU0LCIuL2hvdmVyIjo4NTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg1NywiLi9sYXlvdXRfZGVmYXVsdHMiOjg1OCwiLi9wbG90Ijo4NTksIi4vc2V0X3Bvc2l0aW9ucyI6ODYwLCIuL3N0eWxlIjo4NjJ9XSw4NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsImdyb3VwIiwib3ZlcmxheSIsInJlbGF0aXZlIl0sZGZsdDoiZ3JvdXAifSxiYXJub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJmcmFjdGlvbiIsInBlcmNlbnQiXSxkZmx0OiIifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MH19fSx7fV0sODU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxvLHIsbil9Zm9yKHZhciBsPSExLHU9ITEsYz0hMSxoPXt9LGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGQ9cltmXTtpZihuLnRyYWNlSXMoZCwiYmFyIikpe2lmKGw9ITAsIm92ZXJsYXkiIT09dC5iYXJtb2RlJiYic3RhY2siIT09dC5iYXJtb2RlKXt2YXIgcD1kLnhheGlzK2QueWF4aXM7aFtwXSYmKGM9ITApLGhbcF09ITB9aWYoZC52aXNpYmxlJiYiaGlzdG9ncmFtIj09PWQudHlwZSl7ImNhdGVnb3J5IiE9PWkuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSxkWyJ2Ij09PWQub3JpZW50YXRpb24/InhheGlzIjoieWF4aXMiXSkudHlwZSYmKHU9ITApfX19aWYobCl7Im92ZXJsYXkiIT09cygiYmFybW9kZSIpJiZzKCJiYXJub3JtIikscygiYmFyZ2FwIix1JiYhYz8wOi4yKSxzKCJiYXJncm91cGdhcCIpfX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg1N31dLDg1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sbyxmLGQscCl7ZnVuY3Rpb24gbShlLHIsbil7cmV0dXJuIGUuYXBwZW5kKCJ0ZXh0IikudGV4dChyKS5hdHRyKHtjbGFzczoiYmFydGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGsuZm9udCxuKS5jYWxsKHcuY29udmVydFRvVHNwYW5zLHQpfXZhciB2PXJbMF0udHJhY2UsZz12Lm9yaWVudGF0aW9uLHk9cyh2LG4pO2lmKHkpe3ZhciBiPWwodixuKTtpZigibm9uZSIhPT1iKXt2YXIgeCxfLE0sQSxUPXUodixuLHQuX2Z1bGxMYXlvdXQuZm9udCksUz1jKHYsbixUKSxFPWgodixuLFQpLEw9dC5fZnVsbExheW91dC5iYXJtb2RlLEM9InN0YWNrIj09PUwsej0icmVsYXRpdmUiPT09TCxEPUN8fHosUD1yW25dLE89IUR8fFAuX291dG1vc3QsUj1NYXRoLmFicyhmLW8pLTIqSSxGPU1hdGguYWJzKHAtZCktMipJO2lmKCJvdXRzaWRlIj09PWImJihPfHwoYj0iaW5zaWRlIikpLCJhdXRvIj09PWIpaWYoTyl7eD1tKGUseSxTKSxfPWsuYkJveCh4Lm5vZGUoKSksTT1fLndpZHRoLEE9Xy5oZWlnaHQ7dmFyIGo9TT4wJiZBPjAsTj1NPD1SJiZBPD1GLEI9TTw9RiYmQTw9UixVPSJoIj09PWc/Uj49TSooRi9BKTpGPj1BKihSL00pO2omJihOfHxCfHxVKT9iPSJpbnNpZGUiOihiPSJvdXRzaWRlIix4LnJlbW92ZSgpLHg9bnVsbCl9ZWxzZSBiPSJpbnNpZGUiO2lmKCF4JiYoeD1tKGUseSwib3V0c2lkZSI9PT1iP0U6UyksXz1rLmJCb3goeC5ub2RlKCkpLE09Xy53aWR0aCxBPV8uaGVpZ2h0LE08PTB8fEE8PTApKXJldHVybiB2b2lkIHgucmVtb3ZlKCk7dmFyIFY7Vj0ib3V0c2lkZSI9PT1iP2EobyxmLGQscCxfLGcpOmkobyxmLGQscCxfLGcpLHguYXR0cigidHJhbnNmb3JtIixWKX19fWZ1bmN0aW9uIGkodCxlLHIsbixpLGEpe3ZhciBzLGwsdSxjLGgsZj1pLndpZHRoLGQ9aS5oZWlnaHQscD0oaS5sZWZ0K2kucmlnaHQpLzIsbT0oaS50b3AraS5ib3R0b20pLzIsdj1NYXRoLmFicyhlLXQpLGc9TWF0aC5hYnMobi1yKTt2PjIqSSYmZz4yKkk/KGg9SSx2LT0yKmgsZy09MipoKTpoPTA7dmFyIHksYjtyZXR1cm4gZjw9diYmZDw9Zz8oeT0hMSxiPTEpOmY8PWcmJmQ8PXY/KHk9ITAsYj0xKTpmPGQ9PXY8Zz8oeT0hMSxiPU1hdGgubWluKHYvZixnL2QpKTooeT0hMCxiPU1hdGgubWluKGcvZix2L2QpKSx5JiYoeT05MCkseT8ocz1iKmQsbD1iKmYpOihzPWIqZixsPWIqZCksImgiPT09YT9lPHQ/KHU9ZStoK3MvMixjPShyK24pLzIpOih1PWUtaC1zLzIsYz0ocituKS8yKTpuPnI/KHU9KHQrZSkvMixjPW4taC1sLzIpOih1PSh0K2UpLzIsYz1uK2grbC8yKSxvKHAsbSx1LGMsYix5KX1mdW5jdGlvbiBhKHQsZSxyLG4saSxhKXt2YXIgcyxsPSJoIj09PWE/TWF0aC5hYnMobi1yKTpNYXRoLmFicyhlLXQpO2w+MipJJiYocz1JLGwtPTIqcyk7dmFyIHUsYyxoLGYsZD0iaCI9PT1hP01hdGgubWluKDEsbC9pLmhlaWdodCk6TWF0aC5taW4oMSxsL2kud2lkdGgpLHA9KGkubGVmdCtpLnJpZ2h0KS8yLG09KGkudG9wK2kuYm90dG9tKS8yO3JldHVybiB1PWQqaS53aWR0aCxjPWQqaS5oZWlnaHQsImgiPT09YT9lPHQ/KGg9ZS1zLXUvMixmPShyK24pLzIpOihoPWUrcyt1LzIsZj0ocituKS8yKTpuPnI/KGg9KHQrZSkvMixmPW4rcytjLzIpOihoPSh0K2UpLzIsZj1uLXMtYy8yKSxvKHAsbSxoLGYsZCwhMSl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dmFyIG8scztyZXR1cm4gaTwxP289InNjYWxlKCIraSsiKSAiOihpPTEsbz0iIikscz1hPyJyb3RhdGUoIithKyIgIit0KyIgIitlKyIpICI6IiIsInRyYW5zbGF0ZSgiKyhyLWkqdCkrIiAiKyhuLWkqZSkrIikiK28rc31mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZCh0LnRleHQsZSk7cmV0dXJuIHAoUyxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZCh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gbShFLHIpfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiBmKEwsdC50ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIGModCxlLHIpe3JldHVybiBmKEMsdC5pbnNpZGV0ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiBmKHosdC5vdXRzaWRldGV4dGZvbnQsZSxyKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2U9ZXx8e307dmFyIGk9ZChlLmZhbWlseSxyKSxhPWQoZS5zaXplLHIpLG89ZChlLmNvbG9yLHIpO3JldHVybntmYW1pbHk6cCh0LmZhbWlseSxpLG4uZmFtaWx5KSxzaXplOnYodC5zaXplLGEsbi5zaXplKSxjb2xvcjpnKHQuY29sb3IsbyxuLmNvbG9yKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfWZ1bmN0aW9uIHAodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoZXx8IXQubm9CbGFuaylyZXR1cm4gZX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH1mdW5jdGlvbiB2KHQsZSxyKXtpZihiKGUpKXtlPStlO3ZhciBuPXQubWluLGk9dC5tYXg7aWYoISh2b2lkIDAhPT1uJiZlPG58fHZvaWQgMCE9PWkmJmU+aSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9ZnVuY3Rpb24gZyh0LGUscil7cmV0dXJuIHgoZSkuaXNWYWxpZCgpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH12YXIgeT10KCJkMyIpLGI9dCgiZmFzdC1pc251bWVyaWMiKSx4PXQoInRpbnljb2xvcjIiKSxfPXQoIi4uLy4uL2xpYiIpLHc9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksTT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxBPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksVD10KCIuL2F0dHJpYnV0ZXMiKSxTPVQudGV4dCxFPVQudGV4dHBvc2l0aW9uLEw9VC50ZXh0Zm9udCxDPVQuaW5zaWRldGV4dGZvbnQsej1ULm91dHNpZGV0ZXh0Zm9udCxJPTM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnhheGlzLGE9ZS55YXhpcyxvPXQuX2Z1bGxMYXlvdXQscz1lLnBsb3Quc2VsZWN0KCIuYmFybGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UuYmFycyIpLmRhdGEocik7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgYmFycyIpLHMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0udCxzPWVbMF0udHJhY2UsbD1yLnBvZmZzZXQsdT1BcnJheS5pc0FycmF5KGwpO3kuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoXy5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludCIsITApLmVhY2goZnVuY3Rpb24ocixjKXtmdW5jdGlvbiBoKHQpe3JldHVybiAwPT09by5iYXJnYXAmJjA9PT1vLmJhcmdyb3VwZ2FwP3kucm91bmQoTWF0aC5yb3VuZCh0KS1BLDIpOnR9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPj0yP2godCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfXZhciBkLHAsbSx2LGc9ci5wKyh1P2xbY106bCkseD1nK3IudyxfPXIuYix3PV8rci5zO2lmKCJoIj09PXMub3JpZW50YXRpb24/KG09YS5jMnAoZywhMCksdj1hLmMycCh4LCEwKSxkPWkuYzJwKF8sITApLHA9aS5jMnAodywhMCkpOihkPWkuYzJwKGcsITApLHA9aS5jMnAoeCwhMCksbT1hLmMycChfLCEwKSx2PWEuYzJwKHcsITApKSwhKGIoZCkmJmIocCkmJmIobSkmJmIodikmJmQhPT1wJiZtIT09dikpcmV0dXJuIHZvaWQgeS5zZWxlY3QodGhpcykucmVtb3ZlKCk7dmFyIGs9KHIubWx3KzF8fHMubWFya2VyLmxpbmUud2lkdGgrMXx8KHIudHJhY2U/ci50cmFjZS5tYXJrZXIubGluZS53aWR0aDowKSsxKS0xLEE9eS5yb3VuZChrLzIlMSwyKTtpZighdC5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgVD1NLm9wYWNpdHkoci5tY3x8cy5tYXJrZXIuY29sb3IpLFM9VDwxfHxrPi4wMT9oOmY7ZD1TKGQscCkscD1TKHAsZCksbT1TKG0sdiksdj1TKHYsbSl9dmFyIEU9eS5zZWxlY3QodGhpcyk7RS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImQiLCJNIitkKyIsIittKyJWIit2KyJIIitwKyJWIittKyJaIiksbih0LEUsZSxjLGQscCxtLHYpfSl9KSxzLmNhbGwoQS5wbG90LGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjMyLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDMsIi4vYXR0cmlidXRlcyI6ODUyLGQzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOSx0aW55Y29sb3IyOjUzMn1dLDg2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2lmKG4ubGVuZ3RoKXt2YXIgcyxsLHUsYyxoLGY9dC5fZnVsbExheW91dC5iYXJtb2RlLGQ9Im92ZXJsYXkiPT09ZixwPSJncm91cCI9PT1mO2lmKGQpaSh0LGUscixuKTtlbHNlIGlmKHApe2ZvcihzPVtdLGw9W10sdT0wO3U8bi5sZW5ndGg7dSsrKWM9blt1XSxoPWNbMF0udHJhY2Usdm9pZCAwPT09aC5vZmZzZXQ/bC5wdXNoKGMpOnMucHVzaChjKTtsLmxlbmd0aCYmYSh0LGUscixsKSxzLmxlbmd0aCYmaSh0LGUscixzKX1lbHNle2ZvcihzPVtdLGw9W10sdT0wO3U8bi5sZW5ndGg7dSsrKWM9blt1XSxoPWNbMF0udHJhY2Usdm9pZCAwPT09aC5iYXNlP2wucHVzaChjKTpzLnB1c2goYyk7bC5sZW5ndGgmJm8odCxlLHIsbCkscy5sZW5ndGgmJmkodCxlLHIscyl9fX1mdW5jdGlvbiBpKHQsZSxyLG4pe2Zvcih2YXIgaT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0sYT0haSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBsPW5bb10sdT1uZXcgdyhbbF0sITEsYSk7cyh0LGUsdSksaT8obSh0LHIsdSksdih0LHIsdSkpOmQodCxyLHUpfX1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLmJhcm5vcm0sbz0hYSxzPW5ldyB3KG4sITEsbyk7bCh0LGUscyksYT8obSh0LHIscyksdih0LHIscykpOmQodCxyLHMpfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dCxhPWkuYmFybW9kZSxvPSJzdGFjayI9PT1hLGw9InJlbGF0aXZlIj09PWEsdT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0sYz1sLGg9ISh1fHxvfHxsKSxmPW5ldyB3KG4sYyxoKTtzKHQsZSxmKSxwKHQscixmKTtmb3IodmFyIGQ9MDtkPG4ubGVuZ3RoO2QrKylmb3IodmFyIG09bltkXSxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ107aWYoeS5zIT09Yil7dmFyIHg9eS5iK3kucz09PWYuZ2V0KHkucCx5LnMpO3gmJih5Ll9vdXRtb3N0PSEwKX19dSYmdih0LHIsZil9ZnVuY3Rpb24gcyh0LGUscil7dmFyIG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5iYXJnYXAsZj1zLmJhcmdyb3VwZ2FwLGQ9ci5taW5EaWZmLHA9ci50cmFjZXMsbT1kKigxLWwpLHY9bSxnPXYqKDEtZikseT0tZy8yO2ZvcihuPTA7bjxwLmxlbmd0aDtuKyspaT1wW25dLGE9aVswXSxvPWEudCxvLmJhcndpZHRoPWcsby5wb2Zmc2V0PXksby5iYXJncm91cHdpZHRoPW07ci5iaW5XaWR0aD1wWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHUociksYyh0LGUsciksaCh0LGUscil9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5iYXJnYXAsZj1zLmJhcmdyb3VwZ2FwLGQ9ci5wb3NpdGlvbnMscD1yLmRpc3RpbmN0UG9zaXRpb25zLG09ci5taW5EaWZmLHY9ci50cmFjZXMsZz1kLmxlbmd0aCE9PXAubGVuZ3RoLHk9di5sZW5ndGgsYj1tKigxLWwpLHg9Zz9iL3k6YixfPXgqKDEtZik7Zm9yKG49MDtuPHk7bisrKXtpPXZbbl0sYT1pWzBdO3ZhciB3PWc/KCgyKm4rMS15KSp4LV8pLzI6LV8vMjtvPWEudCxvLmJhcndpZHRoPV8sby5wb2Zmc2V0PXcsby5iYXJncm91cHdpZHRoPWJ9ci5iaW5XaWR0aD12WzBdWzBdLnQuYmFyd2lkdGgvMTAwLHUociksYyh0LGUsciksaCh0LGUscixnKX1mdW5jdGlvbiB1KHQpe3ZhciBlLHIsbixpLGEsbyxzPXQudHJhY2VzO2ZvcihlPTA7ZTxzLmxlbmd0aDtlKyspe3I9c1tlXSxuPXJbMF0saT1uLnRyYWNlLG89bi50O3ZhciBsLHU9aS5vZmZzZXQsYz1vLnBvZmZzZXQ7aWYoQXJyYXkuaXNBcnJheSh1KSl7Zm9yKGw9dS5zbGljZSgwLHIubGVuZ3RoKSxhPTA7YTxsLmxlbmd0aDthKyspeShsW2FdKXx8KGxbYV09Yyk7Zm9yKGE9bC5sZW5ndGg7YTxyLmxlbmd0aDthKyspbC5wdXNoKGMpO28ucG9mZnNldD1sfWVsc2Ugdm9pZCAwIT09dSYmKG8ucG9mZnNldD11KTt2YXIgaD1pLndpZHRoLGY9by5iYXJ3aWR0aDtpZihBcnJheS5pc0FycmF5KGgpKXt2YXIgZD1oLnNsaWNlKDAsci5sZW5ndGgpO2ZvcihhPTA7YTxkLmxlbmd0aDthKyspeShkW2FdKXx8KGRbYV09Zik7Zm9yKGE9ZC5sZW5ndGg7YTxyLmxlbmd0aDthKyspZC5wdXNoKGYpO2lmKG8uYmFyd2lkdGg9ZCx2b2lkIDA9PT11KXtmb3IobD1bXSxhPTA7YTxyLmxlbmd0aDthKyspbC5wdXNoKGMrKGYtZFthXSkvMik7by5wb2Zmc2V0PWx9fWVsc2Ugdm9pZCAwIT09aCYmKG8uYmFyd2lkdGg9aCx2b2lkIDA9PT11JiYoby5wb2Zmc2V0PWMrKGYtaCkvMikpfX1mdW5jdGlvbiBjKHQsZSxyKXtmb3IodmFyIG49ci50cmFjZXMsaT1nKGUpLGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89blthXSxzPW9bMF0udCxsPXMucG9mZnNldCx1PUFycmF5LmlzQXJyYXkobCksYz1zLmJhcndpZHRoLGg9QXJyYXkuaXNBcnJheShjKSxmPTA7ZjxvLmxlbmd0aDtmKyspe3ZhciBkPW9bZl0scD1kLnc9aD9jW2ZdOmM7ZFtpXT1kLnArKHU/bFtmXTpsKStwLzJ9fWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIGk9ci50cmFjZXMsYT1yLmRpc3RpbmN0UG9zaXRpb25zLG89YVswXSxzPXIubWluRGlmZixsPXMvMjtfLm1pbkR0aWNrKGUscyxvLG4pO2Zvcih2YXIgdT1NYXRoLm1pbi5hcHBseShNYXRoLGEpLWwsYz1NYXRoLm1heC5hcHBseShNYXRoLGEpK2wsaD0wO2g8aS5sZW5ndGg7aCsrKXt2YXIgZj1pW2hdLGQ9ZlswXSxwPWQudHJhY2U7aWYodm9pZCAwIT09cC53aWR0aHx8dm9pZCAwIT09cC5vZmZzZXQpZm9yKHZhciBtPWQudCx2PW0ucG9mZnNldCxnPW0uYmFyd2lkdGgseT1BcnJheS5pc0FycmF5KHYpLGI9QXJyYXkuaXNBcnJheShnKSx4PTA7eDxmLmxlbmd0aDt4Kyspe3ZhciB3PWZbeF0sTT15P3ZbeF06dixrPWI/Z1t4XTpnLEE9dy5wLFQ9QStNLFM9VCtrO3U9TWF0aC5taW4odSxUKSxjPU1hdGgubWF4KGMsUyl9fV8uZXhwYW5kKGUsW3UsY10se3BhZGRlZDohMX0pfWZ1bmN0aW9uIGYodCxlKXt5KHRbMF0pP3RbMF09TWF0aC5taW4odFswXSxlKTp0WzBdPWUseSh0WzFdKT90WzFdPU1hdGgubWF4KHRbMV0sZSk6dFsxXT1lfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPWcoZSksYT1lLmwyYyhlLmMybCgwKSksbz1bYSxhXSxzPTA7czxuLmxlbmd0aDtzKyspZm9yKHZhciBsPW5bc10sdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgYz1sW3VdLGg9Yy5iLGQ9aCtjLnM7Y1tpXT1kLHkoZS5jMmwoZCkpJiZmKG8sZCkseShlLmMybChoKSkmJmYobyxoKX1fLmV4cGFuZChlLG8se3RvemVybzohMCxwYWRkZWQ6ITB9KX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbixpLGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLmJhcm5vcm0sdT1nKGUpLGM9ci50cmFjZXMsaD1lLmwyYyhlLmMybCgwKSksZD1baCxoXTtmb3Iobj0wO248Yy5sZW5ndGg7bisrKWZvcihpPWNbbl0sYT0wO2E8aS5sZW5ndGg7YSsrKWlmKG89aVthXSxvLnMhPT1iKXt2YXIgcD1yLnB1dChvLnAsby5iK28ucyksbT1wK28uYitvLnM7by5iPXAsb1t1XT1tLGx8fCh5KGUuYzJsKG0pKSYmZihkLG0pLHkoZS5jMmwocCkpJiZmKGQscCkpfWx8fF8uZXhwYW5kKGUsZCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pfWZ1bmN0aW9uIG0odCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPTA7aTxuLmxlbmd0aDtpKyspZm9yKHZhciBhPW5baV0sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3MucyE9PWImJnIucHV0KHMucCxzLmIrcy5zKX19ZnVuY3Rpb24gdih0LGUscil7ZnVuY3Rpb24gbih0KXt5KGUuYzJsKHQpKSYmKHQ8bC1zfHx0PnUrc3x8IXkobCkpJiYoaD0hMCxmKGMsdCkpfWZvcih2YXIgaT1yLnRyYWNlcyxhPWcoZSksbz0iZnJhY3Rpb24iPT09dC5fZnVsbExheW91dC5iYXJub3JtPzE6MTAwLHM9by8xZTksbD1lLmwyYyhlLmMybCgwKSksdT0ic3RhY2siPT09dC5fZnVsbExheW91dC5iYXJtb2RlP286bCxjPVtsLHVdLGg9ITEsZD0wO2Q8aS5sZW5ndGg7ZCsrKWZvcih2YXIgcD1pW2RdLG09MDttPHAubGVuZ3RoO20rKyl7dmFyIHY9cFttXTtpZih2LnMhPT1iKXt2YXIgeD1NYXRoLmFicyhvL3IuZ2V0KHYucCx2LnMpKTt2LmIqPXgsdi5zKj14O3ZhciB3PXYuYixNPXcrdi5zO3ZbYV09TSxuKE0pLG4odyl9fV8uZXhwYW5kKGUsYyx7dG96ZXJvOiEwLHBhZGRlZDpofSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5faWQuY2hhckF0KDApfXZhciB5PXQoImZhc3QtaXNudW1lcmljIiksYj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHg9dCgiLi4vLi4vcmVnaXN0cnkiKSxfPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksdz10KCIuL3NpZXZlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1lLnhheGlzLGE9ZS55YXhpcyxvPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPVtdLHU9W107Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGM9b1tyXTshMD09PWMudmlzaWJsZSYmeC50cmFjZUlzKGMsImJhciIpJiZjLnhheGlzPT09aS5faWQmJmMueWF4aXM9PT1hLl9pZCYmKCJoIj09PWMub3JpZW50YXRpb24/bC5wdXNoKHNbcl0pOnUucHVzaChzW3JdKSl9bih0LGksYSx1KSxuKHQsYSxpLGwpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vc2lldmUuanMiOjg2MSwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDg2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnRyYWNlcz10LHRoaXMuc2VwYXJhdGVOZWdhdGl2ZVZhbHVlcz1lLHRoaXMuZG9udE1lcmdlT3ZlcmxhcHBpbmdEYXRhPXI7Zm9yKHZhciBuPVtdLG89MDtvPHQubGVuZ3RoO28rKylmb3IodmFyIHM9dFtvXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF07dS5wIT09YSYmbi5wdXNoKHUucCl9dGhpcy5wb3NpdGlvbnM9bjt2YXIgYz1pLmRpc3RpbmN0VmFscyh0aGlzLnBvc2l0aW9ucyk7dGhpcy5kaXN0aW5jdFBvc2l0aW9ucz1jLnZhbHMsdGhpcy5taW5EaWZmPWMubWluRGlmZix0aGlzLmJpbldpZHRoPXRoaXMubWluRGlmZix0aGlzLmJpbnM9e319ZS5leHBvcnRzPW47dmFyIGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO24ucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sbi5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcGFyYXRlTmVnYXRpdmVWYWx1ZXM/InYiOiJeIikrKHRoaXMuZG9udE1lcmdlT3ZlcmxhcHBpbmdEYXRhP3Q6TWF0aC5yb3VuZCh0L3RoaXMuYmluV2lkdGgpKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi8uLi9saWIiOjcyNH1dLDg2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYmFycyIpLHI9ZS5zaXplKCkscz10Ll9mdWxsTGF5b3V0O2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KS5lYWNoKGZ1bmN0aW9uKHQpeygic3RhY2siPT09cy5iYXJtb2RlJiZyPjF8fDA9PT1zLmJhcmdhcCYmMD09PXMuYmFyZ3JvdXBnYXAmJiF0WzBdLnRyYWNlLm1hcmtlci5saW5lLndpZHRoKSYmbi5zZWxlY3QodGhpcykuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSksZS5zZWxlY3RBbGwoImcucG9pbnRzIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5tYXJrZXIsbz1yLmxpbmUscz1hLnRyeUNvbG9yc2NhbGUociwiIiksbD1hLnRyeUNvbG9yc2NhbGUociwibGluZSIpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGUsYSx1PSh0Lm1sdysxfHxvLndpZHRoKzEpLTEsYz1uLnNlbGVjdCh0aGlzKTtlPSJtYyJpbiB0P3QubWNjPXModC5tYyk6QXJyYXkuaXNBcnJheShyLmNvbG9yKT9pLmRlZmF1bHRMaW5lOnIuY29sb3IsYy5zdHlsZSgic3Ryb2tlLXdpZHRoIix1KyJweCIpLmNhbGwoaS5maWxsLGUpLHUmJihhPSJtbGMiaW4gdD90Lm1sY2M9bCh0Lm1sYyk6QXJyYXkuaXNBcnJheShvLmNvbG9yKT9pLmRlZmF1bHRMaW5lOm8uY29sb3IsYy5jYWxsKGkuc3Ryb2tlLGEpKX0pfSksZS5jYWxsKG8uc3R5bGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjMyLGQzOjEyMH1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3IoIm1hcmtlci5jb2xvciIsbyksaSh0LCJtYXJrZXIiKSYmYSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjExLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYxNX1dLDg2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz1uLm1hcmtlcixzPW8ubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seDA6e3ZhbFR5cGU6ImFueSJ9LHkwOnt2YWxUeXBlOiJhbnkifSx4Y2FsZW5kYXI6bi54Y2FsZW5kYXIseWNhbGVuZGFyOm4ueWNhbGVuZGFyLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41fSxib3hwb2ludHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm91dGxpZXJzIiwic3VzcGVjdGVkb3V0bGllcnMiLCExXSxkZmx0OiJvdXRsaWVycyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZGZsdDohMX0saml0dGVyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSxwb2ludHBvczp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdfSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwgMCwgMCwgMCkifSxzeW1ib2w6YSh7fSxvLnN5bWJvbCx7YXJyYXlPazohMX0pLG9wYWNpdHk6YSh7fSxvLm9wYWNpdHkse2FycmF5T2s6ITEsZGZsdDoxfSksc2l6ZTphKHt9LG8uc2l6ZSx7YXJyYXlPazohMX0pLGNvbG9yOmEoe30sby5jb2xvcix7YXJyYXlPazohMX0pLGxpbmU6e2NvbG9yOmEoe30scy5jb2xvcix7YXJyYXlPazohMSxkZmx0OmkuZGVmYXVsdExpbmV9KSx3aWR0aDphKHt9LHMud2lkdGgse2FycmF5T2s6ITEsZGZsdDowfSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LG91dGxpZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9fX0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfX0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjV9XSw4NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvLHMsbCx1LGMsaCxmLGQscD1hLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksbT1hLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iiksdj1lLm9yaWVudGF0aW9uLGc9W107ImgiPT09dj8ocj1wLG89IngiLHU9bSxjPSJ5Iik6KHI9bSxvPSJ5Iix1PXAsYz0ieCIpLHM9ci5tYWtlQ2FsY2RhdGEoZSxvKSxhLmV4cGFuZChyLHMse3BhZGRlZDohMH0pLGg9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcztyZXR1cm4gciBpbiBlP2g9YS5tYWtlQ2FsY2RhdGEoZSxyKToocz1yKyIwImluIGU/ZVtyKyIwIl06Im5hbWUiaW4gZSYmKCJjYXRlZ29yeSI9PT1hLnR5cGV8fG4oZS5uYW1lKSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2YoYS50eXBlKXx8aS5pc0RhdGVUaW1lKGUubmFtZSkmJiJkYXRlIj09PWEudHlwZSk/ZS5uYW1lOnQubnVtYm94ZXMscz1hLmQyYyhzLDAsZVtyKyJjYWxlbmRhciJdKSxoPW8ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksaH0odCxlLGMsdSxzKTt2YXIgeT1pLmRpc3RpbmN0VmFscyhoKTtyZXR1cm4gZj15LnZhbHMsZD15Lm1pbkRpZmYvMixsPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHMsbCx1LGMsaD1hLmxlbmd0aCxmPWUubGVuZ3RoLGQ9W10scD1bXTtmb3Iocz0wO3M8aDsrK3MpbD1hW3NdLHRbc109e3BvczpsfSxwW3NdPWwtbyxkW3NdPVtdO2ZvcihwLnB1c2goYVtoLTFdK28pLHM9MDtzPGY7KytzKWM9ZVtzXSxuKGMpJiYodT1pLmZpbmRCaW4ocltzXSxwKSk+PTAmJnU8ZiYmZFt1XS5wdXNoKGMpO3JldHVybiBkfShnLHMsaCxmLGQpLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLG87Zm9yKG89MDtvPGUubGVuZ3RoOysrbylyPWVbb10uc29ydChpLnNvcnRlckFzYyksbj1yLmxlbmd0aCxhPXRbb10sYS52YWw9cixhLm1pbj1yWzBdLGEubWF4PXJbbi0xXSxhLm1lYW49aS5tZWFuKHIsbiksYS5zZD1pLnN0ZGV2KHIsbixhLm1lYW4pLGEucTE9aS5pbnRlcnAociwuMjUpLGEubWVkPWkuaW50ZXJwKHIsLjUpLGEucTM9aS5pbnRlcnAociwuNzUpLGEubGY9TWF0aC5taW4oYS5xMSxyW01hdGgubWluKGkuZmluZEJpbigyLjUqYS5xMS0xLjUqYS5xMyxyLCEwKSsxLG4tMSldKSxhLnVmPU1hdGgubWF4KGEucTMscltNYXRoLm1heChpLmZpbmRCaW4oMi41KmEucTMtMS41KmEucTEsciksMCldKSxhLmxvPTQqYS5xMS0zKmEucTMsYS51bz00KmEucTMtMyphLnExfShnLGwpLGc9Zy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsJiZ0LnZhbC5sZW5ndGh9KSxnLmxlbmd0aD8oZ1swXS50PXtib3hudW06dC5udW1ib3hlcyxkUG9zOmR9LHQubnVtYm94ZXMrKyxnKTpbe3Q6e2VtcHR5Ym94OiEwfX1dfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDg2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfXZhciB1LGM9bCgieSIpLGg9bCgieCIpO2lmKGMmJmMubGVuZ3RoKXU9InYiLGh8fGwoIngwIik7ZWxzZXtpZighaHx8IWgubGVuZ3RoKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dT0iaCIsbCgieTAiKX1pLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0scyksbCgib3JpZW50YXRpb24iLHUpLGwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxsKCJsaW5lLndpZHRoIiwyKSxsKCJmaWxsY29sb3IiLGEuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKSxsKCJ3aGlza2Vyd2lkdGgiKSxsKCJib3htZWFuIik7dmFyIGY9bi5jb2VyY2UyKHQsZSxvLCJtYXJrZXIub3V0bGllcmNvbG9yIiksZD1sKCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3IiKSxwPWZ8fGQ/bCgiYm94cG9pbnRzIiwic3VzcGVjdGVkb3V0bGllcnMiKTpsKCJib3hwb2ludHMiKTtwJiYobCgiaml0dGVyIiwiYWxsIj09PXA/LjM6MCksbCgicG9pbnRwb3MiLCJhbGwiPT09cD8tMS41OjApLGwoIm1hcmtlci5zeW1ib2wiKSxsKCJtYXJrZXIub3BhY2l0eSIpLGwoIm1hcmtlci5zaXplIiksbCgibWFya2VyLmNvbG9yIixlLmxpbmUuY29sb3IpLGwoIm1hcmtlci5saW5lLmNvbG9yIiksbCgibWFya2VyLmxpbmUud2lkdGgiKSwic3VzcGVjdGVkb3V0bGllcnMiPT09cCYmKGwoIm1hcmtlci5saW5lLm91dGxpZXJjb2xvciIsZS5tYXJrZXIuY29sb3IpLGwoIm1hcmtlci5saW5lLm91dGxpZXJ3aWR0aCIpKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vYXR0cmlidXRlcyI6ODY0fV0sODY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGwsdSxjLGgsZixkLHAsbSx2LGc9dC5jZCx5PWdbMF0udHJhY2UsYj1nWzBdLnQseD10LnhhLF89dC55YSx3PVtdO2lmKGg9ImNsb3Nlc3QiPT09cz8yLjUqYi5iZFBvczpiLmJkUG9zLCJoIj09PXkub3JpZW50YXRpb24/KGw9ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4tZSx0Lm1heC1lKX0sdT1mdW5jdGlvbih0KXt2YXIgZT10LnBvcytiLmJQb3MtcjtyZXR1cm4gYS5pbmJveChlLWgsZStoKX0sZj0ieSIsZD1fLG09IngiLHY9eCk6KGw9ZnVuY3Rpb24odCl7dmFyIHI9dC5wb3MrYi5iUG9zLWU7cmV0dXJuIGEuaW5ib3goci1oLHIraCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4tcix0Lm1heC1yKX0sZj0ieCIsZD14LG09InkiLHY9XyksYz1hLmdldERpc3RhbmNlRnVuY3Rpb24ocyxsLHUpLGEuZ2V0Q2xvc2VzdChnLGMsdCksITEhPT10LmluZGV4KXt2YXIgTT1nW3QuaW5kZXhdLGs9eS5saW5lLmNvbG9yLEE9KHkubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KGspJiZ5LmxpbmUud2lkdGg/dC5jb2xvcj1rOm8ub3BhY2l0eShBKSYmeS5ib3hwb2ludHM/dC5jb2xvcj1BOnQuY29sb3I9eS5maWxsY29sb3IsdFtmKyIwIl09ZC5jMnAoTS5wb3MrYi5iUG9zLWIuYmRQb3MsITApLHRbZisiMSJdPWQuYzJwKE0ucG9zK2IuYlBvcytiLmJkUG9zLCEwKSxuLnRpY2tUZXh0KGQsZC5jMmwoTS5wb3MpLCJob3ZlciIpLnRleHQsdFtmKyJMYWJlbFZhbCJdPU0ucG9zO3ZhciBULFMsRT17fSxMPVsibWVkIiwibWluIiwicTEiLCJxMyIsIm1heCJdO3kuYm94bWVhbiYmTC5wdXNoKCJtZWFuIikseS5ib3hwb2ludHMmJltdLnB1c2guYXBwbHkoTCxbImxmIiwidWYiXSk7Zm9yKHZhciBDPTA7QzxMLmxlbmd0aDtDKyspKFQ9TFtDXSlpbiBNJiYhKE1bVF1pbiBFKSYmKEVbTVtUXV09ITAscD12LmMycChNW1RdLCEwKSxTPWkuZXh0ZW5kRmxhdCh7fSx0KSxTW20rIjAiXT1TW20rIjEiXT1wLFNbbSsiTGFiZWxWYWwiXT1NW1RdLFMuYXR0cj1ULCJtZWFuIj09PVQmJiJzZCJpbiBNJiYic2QiPT09eS5ib3htZWFuJiYoU1ttKyJlcnIiXT1NLnNkKSx0Lm5hbWU9IiIsdy5wdXNoKFMpKTtyZXR1cm4gd319fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NH1dLDg2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4uc2V0UG9zaXRpb25zPXQoIi4vc2V0X3Bvc2l0aW9ucyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJveCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3giLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc0LCIuL2F0dHJpYnV0ZXMiOjg2NCwiLi9jYWxjIjo4NjUsIi4vZGVmYXVsdHMiOjg2NiwiLi9ob3ZlciI6ODY3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjksIi4vbGF5b3V0X2RlZmF1bHRzIjo4NzAsIi4vcGxvdCI6ODcxLCIuL3NldF9wb3NpdGlvbnMiOjg3MiwiLi9zdHlsZSI6ODczfV0sODY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoib3ZlcmxheSJ9LGJveGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zfSxib3hncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zfX19LHt9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfWZvcih2YXIgcyxsPTA7bDxyLmxlbmd0aDtsKyspaWYobi50cmFjZUlzKHJbbF0sImJveCIpKXtzPSEwO2JyZWFrfXMmJihvKCJib3htb2RlIiksbygiYm94Z2FwIiksbygiYm94Z3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4Njl9XSw4NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2w9MmU5fWZ1bmN0aW9uIGkoKXt2YXIgdD1sO3JldHVybiBsPSg2OTA2OSpsKzEpJTQyOTQ5NjcyOTYsTWF0aC5hYnMobC10KTw0Mjk0OTY3Mjk/aSgpOmwvNDI5NDk2NzI5Nn12YXIgYT10KCJkMyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPTJlOTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsLHUsYz10Ll9mdWxsTGF5b3V0LGg9ZS54YXhpcyxmPWUueWF4aXM7ZS5wbG90LnNlbGVjdCgiLmJveGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlLmJveGVzIikuZGF0YShyKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgYm94ZXMiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0udCxkPWVbMF0udHJhY2UscD0iZ3JvdXAiPT09Yy5ib3htb2RlJiZ0Lm51bWJveGVzPjEsbT1yLmRQb3MqKDEtYy5ib3hnYXApKigxLWMuYm94Z3JvdXBnYXApLyhwP3QubnVtYm94ZXM6MSksdj1wPzIqci5kUG9zKigoci5ib3hudW0rLjUpL3QubnVtYm94ZXMtLjUpKigxLWMuYm94Z2FwKTowLGc9bSpkLndoaXNrZXJ3aWR0aDtpZighMCE9PWQudmlzaWJsZXx8ci5lbXB0eWJveClyZXR1cm4gdm9pZCBhLnNlbGVjdCh0aGlzKS5yZW1vdmUoKTsiaCI9PT1kLm9yaWVudGF0aW9uPyhsPWYsdT1oKToobD1oLHU9Ziksci5iUG9zPXYsci5iZFBvcz1tLG4oKSxhLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YShvLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiY2xhc3MiLCJib3giKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWwuYzJwKHQucG9zK3YsITApLHI9bC5jMnAodC5wb3Mrdi1tLCEwKSxuPWwuYzJwKHQucG9zK3YrbSwhMCksaT1sLmMycCh0LnBvcyt2LWcsITApLHM9bC5jMnAodC5wb3MrditnLCEwKSxjPXUuYzJwKHQucTEsITApLGg9dS5jMnAodC5xMywhMCksZj1vLmNvbnN0cmFpbih1LmMycCh0Lm1lZCwhMCksTWF0aC5taW4oYyxoKSsxLE1hdGgubWF4KGMsaCktMSkscD11LmMycCghMT09PWQuYm94cG9pbnRzP3QubWluOnQubGYsITApLHk9dS5jMnAoITE9PT1kLmJveHBvaW50cz90Lm1heDp0LnVmLCEwKTsiaCI9PT1kLm9yaWVudGF0aW9uP2Euc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitmKyIsIityKyJWIituKyJNIitjKyIsIityKyJWIituKyJIIitoKyJWIityKyJaTSIrYysiLCIrZSsiSCIrcCsiTSIraCsiLCIrZSsiSCIreSsoMD09PWQud2hpc2tlcndpZHRoPyIiOiJNIitwKyIsIitpKyJWIitzKyJNIit5KyIsIitpKyJWIitzKSk6YS5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK3IrIiwiK2YrIkgiK24rIk0iK3IrIiwiK2MrIkgiK24rIlYiK2grIkgiK3IrIlpNIitlKyIsIitjKyJWIitwKyJNIitlKyIsIitoKyJWIit5KygwPT09ZC53aGlza2Vyd2lkdGg/IiI6Ik0iK2krIiwiK3ArIkgiK3MrIk0iK2krIiwiK3krIkgiK3MpKX0pLGQuYm94cG9pbnRzJiZhLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcucG9pbnRzIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudD1yLHQudHJhY2U9ZH0pLHR9KS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxzLGwsdSxjPSJhbGwiPT09ZC5ib3hwb2ludHM/dC52YWw6dC52YWwuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlPHQubGZ8fGU+dC51Zn0pLGg9TWF0aC5tYXgoKHQubWF4LXQubWluKS8xMCx0LnEzLXQucTEpLGY9MWUtOSpoLHA9LjAxKmgsZz1bXSx5PTA7aWYoZC5qaXR0ZXIpe2lmKDA9PT1oKWZvcih5PTEsZz1uZXcgQXJyYXkoYy5sZW5ndGgpLGU9MDtlPGMubGVuZ3RoO2UrKylnW2VdPTE7ZWxzZSBmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKXI9TWF0aC5tYXgoMCxlLTUpLGE9Y1tyXSxuPU1hdGgubWluKGMubGVuZ3RoLTEsZSs1KSxzPWNbbl0sImFsbCIhPT1kLmJveHBvaW50cyYmKGNbZV08dC5sZj9zPU1hdGgubWluKHMsdC5sZik6YT1NYXRoLm1heChhLHQudWYpKSxsPU1hdGguc3FydChwKihuLXIpLyhzLWErZikpfHwwLGw9by5jb25zdHJhaW4oTWF0aC5hYnMobCksMCwxKSxnLnB1c2gobCkseT1NYXRoLm1heChsLHkpO3U9MipkLmppdHRlci95fXJldHVybiBjLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuLGE9ZC5wb2ludHBvcztyZXR1cm4gZC5qaXR0ZXImJihhKz11Kmdbcl0qKGkoKS0uNSkpLG49ImgiPT09ZC5vcmllbnRhdGlvbj97eTp0LnBvcythKm0rdix4OmV9Ont4OnQucG9zK2EqbSt2LHk6ZX0sInN1c3BlY3RlZG91dGxpZXJzIj09PWQuYm94cG9pbnRzJiZlPHQudW8mJmU+dC5sbyYmKG4uc289ITApLG59KX0pLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKS5jYWxsKHMudHJhbnNsYXRlUG9pbnRzLGgsZiksZC5ib3htZWFuJiZhLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgubWVhbiIpLmRhdGEoby5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1lYW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsInZlY3Rvci1lZmZlY3QiOiJub24tc2NhbGluZy1zdHJva2UifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1sLmMycCh0LnBvcyt2LCEwKSxyPWwuYzJwKHQucG9zK3YtbSwhMCksbj1sLmMycCh0LnBvcyt2K20sITApLGk9dS5jMnAodC5tZWFuLCEwKSxvPXUuYzJwKHQubWVhbi10LnNkLCEwKSxzPXUuYzJwKHQubWVhbit0LnNkLCEwKTsiaCI9PT1kLm9yaWVudGF0aW9uP2Euc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitpKyIsIityKyJWIituKygic2QiIT09ZC5ib3htZWFuPyIiOiJtMCwwTCIrbysiLCIrZSsiTCIraSsiLCIrcisiTCIrcysiLCIrZSsiWiIpKTphLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrcisiLCIraSsiSCIrbisoInNkIiE9PWQuYm94bWVhbj8iIjoibTAsMEwiK2UrIiwiK28rIkwiK3IrIiwiK2krIkwiK2UrIiwiK3MrIloiKSl9KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vbGliIjo3MjQsZDM6MTIwfV0sODcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGwsdT10Ll9mdWxsTGF5b3V0LGM9ZS54YXhpcyxoPWUueWF4aXMsZj1bInYiLCJoIl07Zm9yKG89MDtvPGYubGVuZ3RoOysrbyl7dmFyIGQscCxtLHY9ZltvXSxnPVtdLHk9W10sYj0wLHg9MDtmb3Iocj0iaCI9PT12P2g6YyxzPTA7czx0LmNhbGNkYXRhLmxlbmd0aDsrK3MpZD10LmNhbGNkYXRhW3NdLHA9ZFswXS50LG09ZFswXS50cmFjZSwhMD09PW0udmlzaWJsZSYmbi50cmFjZUlzKG0sImJveCIpJiYhcC5lbXB0eWJveCYmbS5vcmllbnRhdGlvbj09PXYmJm0ueGF4aXM9PT1jLl9pZCYmbS55YXhpcz09PWguX2lkJiYoZy5wdXNoKHMpLCExIT09bS5ib3hwb2ludHMmJihiPU1hdGgubWF4KGIsbS5qaXR0ZXItbS5wb2ludHBvcy0xKSx4PU1hdGgubWF4KHgsbS5qaXR0ZXIrbS5wb2ludHBvcy0xKSkpO2ZvcihzPTA7czxnLmxlbmd0aDtzKyspZm9yKGQ9dC5jYWxjZGF0YVtnW3NdXSxsPTA7bDxkLmxlbmd0aDtsKyspeS5wdXNoKGRbbF0ucG9zKTtpZih5Lmxlbmd0aCl7dmFyIF89YS5kaXN0aW5jdFZhbHMoeSksdz1fLm1pbkRpZmYvMjtmb3IoeS5sZW5ndGg9PT1fLnZhbHMubGVuZ3RoJiYodC5udW1ib3hlcz0xKSxpLm1pbkR0aWNrKHIsXy5taW5EaWZmLF8udmFsc1swXSwhMCksbz0wO288Zy5sZW5ndGg7bysrKXt2YXIgTT1nW29dO3QuY2FsY2RhdGFbTV1bMF0udC5kUG9zPXd9dmFyIGs9KDEtdS5ib3hnYXApKigxLXUuYm94Z3JvdXBnYXApKncvdC5udW1ib3hlcztpLmV4cGFuZChyLF8udmFscyx7dnBhZG1pbnVzOncrYiprLHZwYWRwbHVzOncreCprfSl9fX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDJ9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYm94ZXMiKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPXIubGluZS53aWR0aDtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguYm94Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsbysicHgiKS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChpLmZpbGwsci5maWxsY29sb3IpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aC5tZWFuIikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOm8sInN0cm9rZS1kYXNoYXJyYXkiOjIqbysicHgsIitvKyJweCJ9KS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvciksbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBvaW50cyBwYXRoIikuY2FsbChhLnBvaW50U3R5bGUscix0KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LGQzOjEyMH1dLDg3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL29obGMvYXR0cmlidXRlcyIpLGE9dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxvPXtuYW1lOmkuaW5jcmVhc2luZy5uYW1lLHNob3dsZWdlbmQ6aS5pbmNyZWFzaW5nLnNob3dsZWdlbmQsbGluZTp7Y29sb3I6bi5leHRlbmRGbGF0KHt9LGEubGluZS5jb2xvciksd2lkdGg6bi5leHRlbmRGbGF0KHt9LGEubGluZS53aWR0aCl9LGZpbGxjb2xvcjpuLmV4dGVuZEZsYXQoe30sYS5maWxsY29sb3IpfTtlLmV4cG9ydHM9e3g6aS54LG9wZW46aS5vcGVuLGhpZ2g6aS5oaWdoLGxvdzppLmxvdyxjbG9zZTppLmNsb3NlLGxpbmU6e3dpZHRoOm4uZXh0ZW5kRmxhdCh7fSxhLmxpbmUud2lkdGgse30pfSxpbmNyZWFzaW5nOm4uZXh0ZW5kRGVlcCh7fSxvLHtsaW5lOntjb2xvcjp7ZGZsdDppLmluY3JlYXNpbmcubGluZS5jb2xvci5kZmx0fX19KSxkZWNyZWFzaW5nOm4uZXh0ZW5kRGVlcCh7fSxvLHtsaW5lOntjb2xvcjp7ZGZsdDppLmRlY3JlYXNpbmcubGluZS5jb2xvci5kZmx0fX19KSx0ZXh0OmkudGV4dCx3aGlza2Vyd2lkdGg6bi5leHRlbmRGbGF0KHt9LGEud2hpc2tlcndpZHRoLHtkZmx0OjB9KX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL2JveC9hdHRyaWJ1dGVzIjo4NjQsIi4uL29obGMvYXR0cmlidXRlcyI6OTg0fV0sODc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7byh0LGUscixuKSxyKG4rIi5saW5lLmNvbG9yIikscihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiKX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL29obGMvb2hsY19kZWZhdWx0cyIpLG89dCgiLi4vb2hsYy9kaXJlY3Rpb25fZGVmYXVsdHMiKSxzPXQoIi4uL29obGMvaGVscGVycyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHUocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGwscixuKX1pZihzLnB1c2hEdW1teVRyYW5zZm9ybU9wdHModCxlKSwwPT09YSh0LGUsdSxvKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoImxpbmUud2lkdGgiKSxuKHQsZSx1LCJpbmNyZWFzaW5nIiksbih0LGUsdSwiZGVjcmVhc2luZyIpLHUoInRleHQiKSx1KCJ3aGlza2Vyd2lkdGgiKX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL29obGMvZGlyZWN0aW9uX2RlZmF1bHRzIjo5ODYsIi4uL29obGMvaGVscGVycyI6OTg3LCIuLi9vaGxjL29obGNfZGVmYXVsdHMiOjk4OSwiLi9hdHRyaWJ1dGVzIjo4NzR9XSw4NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvcmVnaXN0ZXIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjYW5kbGVzdGljayIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInNob3dMZWdlbmQiLCJjYW5kbGVzdGljayJdLG1ldGE6e30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIil9LG4odCgiLi4vYm94IikpLG4odCgiLi90cmFuc2Zvcm0iKSl9LHsiLi4vLi4vcGxvdF9hcGkvcmVnaXN0ZXIiOjc1NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4uL2JveCI6ODY4LCIuL2F0dHJpYnV0ZXMiOjg3NCwiLi9kZWZhdWx0cyI6ODc1LCIuL3RyYW5zZm9ybSI6ODc3fV0sODc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXt0eXBlOiJib3giLGJveHBvaW50czohMSx2aXNpYmxlOnQudmlzaWJsZSxob3ZlcmluZm86dC5ob3ZlcmluZm8sb3BhY2l0eTp0Lm9wYWNpdHkseGF4aXM6dC54YXhpcyx5YXhpczp0LnlheGlzLHRyYW5zZm9ybXM6by5tYWtlVHJhbnNmb3JtKHQsZSxyKX0saT10W3JdO3JldHVybiBpJiZhLmV4dGVuZEZsYXQobix7eDp0Lnh8fFswXSx4Y2FsZW5kYXI6dC54Y2FsZW5kYXIseTpbXS5jb25jYXQodC5sb3cpLmNvbmNhdCh0LmhpZ2gpLHdoaXNrZXJ3aWR0aDp0LndoaXNrZXJ3aWR0aCx0ZXh0OnQudGV4dCxuYW1lOmkubmFtZSxzaG93bGVnZW5kOmkuc2hvd2xlZ2VuZCxsaW5lOmkubGluZSxmaWxsY29sb3I6aS5maWxsY29sb3J9KSxufXZhciBpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL29obGMvaGVscGVycyIpO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImNhbmRsZXN0aWNrIixyLmF0dHJpYnV0ZXM9e30sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gby5jbGVhckVwaGVtZXJhbFRyYW5zZm9ybU9wdHMobiksby5jb3B5T0hMQyh0LGUpLHR9LHIudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsiY2FuZGxlc3RpY2siPT09YS50eXBlP3IucHVzaChuKGEsZSwiaW5jcmVhc2luZyIpLG4oYSxlLCJkZWNyZWFzaW5nIikpOnIucHVzaChhKX1yZXR1cm4gby5hZGRSYW5nZVNsaWRlcihyLGUubGF5b3V0KSxyfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yLmRpcmVjdGlvbixhPW8uZ2V0RmlsdGVyRm4obikscz1lLm9wZW4sbD1lLmhpZ2gsdT1lLmxvdyxjPWUuY2xvc2UsaD1zLmxlbmd0aCxmPVtdLGQ9W10scD1lLl9mdWxsSW5wdXQueD9mdW5jdGlvbih0KXt2YXIgcj1lLnhbdF07Zi5wdXNoKHIscixyLHIscixyKX06ZnVuY3Rpb24odCl7Zi5wdXNoKHQsdCx0LHQsdCx0KX0sbT0wO208aDttKyspYShzW21dLGNbbV0pJiZpKGxbbV0pJiZpKHVbbV0pJiYocChtKSxmdW5jdGlvbih0LGUscixuKXtkLnB1c2gocix0LG4sbixuLGUpfShzW21dLGxbbV0sdVttXSxjW21dKSk7ZS54PWYsZS55PWR9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9vaGxjL2hlbHBlcnMiOjk4NywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDg3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe1siYWF4aXMiLCJiYXhpcyJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG89YS5jaGFyQXQoMCkscz10W2FdfHx7fSxsPXt9LHU9e3RpY2tmb250OiJ4IixpZDpvKyJheGlzIixsZXR0ZXI6byxmb250OmUuZm9udCxuYW1lOmEsZGF0YTp0W29dLGNhbGVuZGFyOmUuY2FsZW5kYXIsZGZsdENvbG9yOm4sYmdDb2xvcjpyLnBhcGVyX2JnY29sb3IsZnVsbExheW91dDpyfTtpKHMsbCx1KSxsLl9jYXRlZ29yaWVzPWwuX2NhdGVnb3JpZXN8fFtdLGVbYV09bCx0W2FdfHwiLSI9PT1zLnR5cGV8fCh0W2FdPXt0eXBlOnMudHlwZX0pfSl9dmFyIGk9dCgiLi9heGlzX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7aSgiYSIpfHwoaSgiZGEiKSxpKCJhMCIpKSxpKCJiIil8fChpKCJkYiIpLGkoImIwIikpLG4odCxlLHIsYSl9fSx7Ii4vYXhpc19kZWZhdWx0cyI6ODgzfV0sODc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KXx8ZT49MTApcmV0dXJuIG51bGw7Zm9yKHZhciByPTEvMCxpPS0xLzAsYT10Lmxlbmd0aCxvPTA7bzxhO28rKyl7dmFyIHM9dFtvXTtpZihBcnJheS5pc0FycmF5KHMpKXt2YXIgbD1uKHMsZSsxKTtsJiYocj1NYXRoLm1pbihsWzBdLHIpLGk9TWF0aC5tYXgobFsxXSxpKSl9ZWxzZSByPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLGkpfXJldHVybltyLGldfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0LDApfX0se31dLDg4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmcifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxhMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGRhOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MX0sYjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGIwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sZGI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxjaGVhdGVyc2xvcGU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxhYXhpczpuKHt9LGEpLGJheGlzOm4oe30sYSksZm9udDp7ZmFtaWx5Om4oe30saS5mYW1pbHkse2RmbHQ6JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZid9KSxzaXplOm4oe30saS5zaXplLHtkZmx0OjEyfSksY29sb3I6bih7fSxpLmNvbG9yLHtkZmx0Om8uZGVmYXVsdExpbmV9KX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om8uZGVmYXVsdExpbmV9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi9heGlzX2F0dHJpYnV0ZXMiOjg4Mn1dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCx1LGMsaCxmLGQscCxtLHYsZz1BcnJheS5pc0FycmF5KHIpPyJhIjoiYiIseT0iYSI9PT1nP3QuYWF4aXM6dC5iYXhpcyxiPXkuc21vb3RoaW5nLHg9ImEiPT09Zz90LmEyaTp0LmIyaixfPSJhIj09PWc/cjpuLHc9ImEiPT09Zz9uOnIsTT0iYSI9PT1nP2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxrPSJhIj09PWc/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLEE9TWF0aC5mbG9vcigiYSI9PT1nP3QuYjJqKHcpOnQuYTJpKHcpKSxUPSJhIj09PWc/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsQSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxBLGUpfTtiJiYobz1NYXRoLm1heCgwLE1hdGgubWluKGstMixBKSkscz1BLW8sYT0iYSI9PT1nP2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sbyxlLHMscil9KTt2YXIgUz14KF9bMF0pLEU9eChfWzFdKSxMPVM8RT8xOi0xLEM9MWUtOCooRS1TKSx6PUw+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxJPUw+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixEPUw+MD9NYXRoLm1pbjpNYXRoLm1heCxQPUw+MD9NYXRoLm1heDpNYXRoLm1pbixPPXooUytDKSxSPUkoRS1DKTtjPVQoUyk7dmFyIEY9W1tjXV07Zm9yKGk9TztpKkw8UipMO2krPUwpbD1bXSxwPVAoUyxpKSxtPUQoRSxpK0wpLHY9bS1wLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNLTIsTWF0aC5mbG9vciguNSoocCttKSkpKSxoPVQobSksYiYmKGY9YSh1LHAtdSksZD1hKHUsbS11KSxsLnB1c2goW2NbMF0rZlswXS8zKnYsY1sxXStmWzFdLzMqdl0pLGwucHVzaChbaFswXS1kWzBdLzMqdixoWzFdLWRbMV0vMyp2XSkpLGwucHVzaChoKSxGLnB1c2gobCksYz1oO3JldHVybiBGfX0se31dLDg4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZToiY29sb3IifSxzbW9vdGhpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowLG1heDoxLjN9LHRpdGxlOnt2YWxUeXBlOiJzdHJpbmcifSx0aXRsZWZvbnQ6bih7fSxpLHt9KSx0aXRsZW9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiZGF0ZSIsImNhdGVnb3J5Il0sZGZsdDoiLSJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwfSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGV4IiwidmFsdWUiXSxkZmx0OiJ2YWx1ZSJ9LHRpY2ttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJhcnJheSJdLGRmbHQ6ImFycmF5In0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJlbmQiLCJib3RoIiwibm9uZSJdLGRmbHQ6InN0YXJ0In0sdGlja2ZvbnQ6bih7fSxpLHt9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYWJlbHBhZGRpbmc6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MTB9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmcifSxsYWJlbHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lfSxsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LG1pbm9yZ3JpZGNvdW50Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3JncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGlnaHRMaW5lfSxzdGFydGxpbmU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IifSxzdGFydGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGVuZGxpbmU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxlbmRsaW5ld2lkdGg6ewp2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MX0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHRpY2swOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LGFycmF5ZHRpY2s6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGRmbHQ6MX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjAxLCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4fV0sODgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigiLSI9PT10LnR5cGUpe3ZhciByPXQuX2lkLG49ci5jaGFyQXQoMCksaT1uKyJjYWxlbmRhciIsYT10W2ldO3QudHlwZT1kKGUsYSl9fXZhciBpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmFkZE9wYWNpdHksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0IiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vb3JkZXJlZF9jYXRlZ29yaWVzIiksZD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gZChyLG4pe3JldHVybiBzLmNvZXJjZSh0LGUsZyxyLG4pfWZ1bmN0aW9uIHAocixuKXtyZXR1cm4gcy5jb2VyY2UyKHQsZSxnLHIsbil9dmFyIG09ci5sZXR0ZXIsdj1yLmZvbnR8fHt9LGc9aVttKyJheGlzIl07ci5ub0hvdmVyPSEwLHIubmFtZSYmKGUuX25hbWU9ci5uYW1lLGUuX2lkPXIubmFtZSk7dmFyIHk9ZCgidHlwZSIpO2lmKCItIj09PXkmJihyLmRhdGEmJm4oZSxyLmRhdGEpLCItIj09PWUudHlwZT9lLnR5cGU9ImxpbmVhciI6eT10LnR5cGU9ZS50eXBlKSxkKCJzbW9vdGhpbmciKSxkKCJjaGVhdGVydHlwZSIpLGQoInNob3d0aWNrbGFiZWxzIiksZCgibGFiZWxwcmVmaXgiLG0rIiA9ICIpLGQoImxhYmVsc3VmZml4IiksZCgic2hvd3RpY2twcmVmaXgiKSxkKCJzaG93dGlja3N1ZmZpeCIpLGQoInNlcGFyYXRldGhvdXNhbmRzIiksZCgidGlja2Zvcm1hdCIpLGQoImV4cG9uZW50Zm9ybWF0IiksZCgic2hvd2V4cG9uZW50IiksZCgiY2F0ZWdvcnlvcmRlciIpLGQoInRpY2ttb2RlIiksZCgidGlja3ZhbHMiKSxkKCJ0aWNrdGV4dCIpLGQoInRpY2swIiksZCgiZHRpY2siKSwiYXJyYXkiPT09ZS50aWNrbW9kZSYmKGQoImFycmF5dGljazAiKSxkKCJhcnJheWR0aWNrIikpLGQoImxhYmVscGFkZGluZyIpLGUuX2hvdmVydGl0bGU9bSwiZGF0ZSI9PT15KXtvLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIixyLmNhbGVuZGFyKX1oKGUsci5mdWxsTGF5b3V0KTt2YXIgYj1kKCJjb2xvciIsci5kZmx0Q29sb3IpLHg9Yj09PXQuY29sb3I/Yjp2LmNvbG9yO2QoInRpdGxlIikscy5jb2VyY2VGb250KGQsInRpdGxlZm9udCIse2ZhbWlseTp2LmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnYuc2l6ZSksY29sb3I6eH0pLGQoInRpdGxlb2Zmc2V0IiksZCgidGlja2FuZ2xlIiksZCgiYXV0b3JhbmdlIiwhZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSkpJiZkKCJyYW5nZW1vZGUiKSxkKCJyYW5nZSIpLGUuY2xlYW5SYW5nZSgpLGQoImZpeGVkcmFuZ2UiKSxsKHQsZSxkLHkpLHUodCxlLGQseSxyKSxjKHQsZSxkKTt2YXIgXz1wKCJncmlkY29sb3IiLGEoYiwuMykpLHc9cCgiZ3JpZHdpZHRoIiksTT1kKCJzaG93Z3JpZCIpO018fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz1wKCJzdGFydGxpbmVjb2xvciIsYiksQT1wKCJzdGFydGxpbmV3aWR0aCIsdyk7ZCgic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIWt8fCEhQSl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIFQ9cCgiZW5kbGluZWNvbG9yIixiKSxTPXAoImVuZGxpbmV3aWR0aCIsdyk7cmV0dXJuIGQoImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhVHx8ISFTKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLE0/KGQoIm1pbm9yZ3JpZGNvdW50IiksZCgibWlub3Jncmlkd2lkdGgiLHcpLGQoIm1pbm9yZ3JpZGNvbG9yIixhKF8sLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLGUuX3NlcGFyYXRvcnM9ci5mdWxsTGF5b3V0LnNlcGFyYXRvcnMsZS5faW5pdGlhbENhdGVnb3JpZXM9ImNhdGVnb3J5Ij09PXk/ZihtLGUuY2F0ZWdvcnlvcmRlcixlLmNhdGVnb3J5YXJyYXksci5kYXRhKTpbXSwibm9uZSI9PT1lLnNob3d0aWNrbGFiZWxzJiYoZGVsZXRlIGUudGlja2ZvbnQsZGVsZXRlIGUudGlja2FuZ2xlLGRlbGV0ZSBlLnNob3dleHBvbmVudCxkZWxldGUgZS5leHBvbmVudGZvcm1hdCxkZWxldGUgZS50aWNrZm9ybWF0LGRlbGV0ZSBlLnNob3d0aWNrc3VmZml4LGRlbGV0ZSBlLnNob3d0aWNrcHJlZml4KSxlLnNob3d0aWNrc3VmZml4fHxkZWxldGUgZS50aWNrc3VmZml4LGUuc2hvd3RpY2twcmVmaXh8fGRlbGV0ZSBlLnRpY2twcmVmaXgsZCgidGlja21vZGUiKSwoIWUudGl0bGV8fGUudGl0bGUmJjA9PT1lLnRpdGxlLmxlbmd0aCkmJihkZWxldGUgZS50aXRsZWZvbnQsZGVsZXRlIGUudGl0bGVvZmZzZXQpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo3NjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NzY4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vb3JkZXJlZF9jYXRlZ29yaWVzIjo3NzcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzgxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6NzgyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6Nzg0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2F0dHJpYnV0ZXMiOjg4MH1dLDg4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi9jaGVhdGVyX2Jhc2lzIiksYT10KCIuL2FycmF5X21pbm1heCIpLG89dCgiLi9tYXBfMmRfYXJyYXkiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSx1PXQoIi4vY2FsY19jbGlwcGF0aCIpLGM9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGg9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGY9bi5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLHA9ZS5hYXhpcyxtPWUuYmF4aXMsdj1lLl9hPWUuYSxnPWUuX2I9ZS5iLHk9e30sYj1lLnk7aWYoZS5fY2hlYXRlcil7dmFyIHg9ImluZGV4Ij09PXAuY2hlYXRlcnR5cGU/di5sZW5ndGg6dixfPSJpbmRleCI9PT1tLmNoZWF0ZXJ0eXBlP2cubGVuZ3RoOmc7ZS54PXI9aSh4LF8sZS5jaGVhdGVyc2xvcGUpfWVsc2Ugcj1lLng7ZS5feD1lLng9cj1jKHIpLGUuX3k9ZS55PWI9YyhiKSxoKHIsdixnKSxoKGIsdixnKSxlLnNldFNjYWxlKCkseS54cD1lLnhwPW8oZS54cCxyLGYuYzJwKSx5LnlwPWUueXA9byhlLnlwLGIsZC5jMnApO3ZhciB3PWEociksTT1hKGIpLGs9LjUqKHdbMV0td1swXSksQT0uNSood1sxXSt3WzBdKSxUPS41KihNWzFdLU1bMF0pLFM9LjUqKE1bMV0rTVswXSk7cmV0dXJuIHc9W0EtMS4zKmssQSsxLjMqa10sTT1bUy0xLjMqVCxTKzEuMypUXSxuLmV4cGFuZChmLHcse3BhZGRlZDohMH0pLG4uZXhwYW5kKGQsTSx7cGFkZGVkOiEwfSkscyhlLHksImEiLCJiIikscyhlLHksImIiLCJhIiksbChlLHApLGwoZSxtKSx5LmNsaXBzZWdtZW50cz11KGUueGN0cmwsZS55Y3RybCxwLG0pLHkueD1yLHkueT1iLHkuYT12LHkuYj1nLFt5XX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSI6OTQ0LCIuL2FycmF5X21pbm1heCI6ODc5LCIuL2NhbGNfY2xpcHBhdGgiOjg4NSwiLi9jYWxjX2dyaWRsaW5lcyI6ODg2LCIuL2NhbGNfbGFiZWxzIjo4ODcsIi4vY2hlYXRlcl9iYXNpcyI6ODg5LCIuL21hcF8yZF9hcnJheSI6OTAxLCIuL3Ntb290aF9maWxsXzJkX2FycmF5Ijo5MDV9XSw4ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyx1PSEhbi5zbW9vdGhpbmcsYz10WzBdLmxlbmd0aC0xLGg9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD1jO2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1oO2krKylhW2ldPXRbaV1bY10sb1tpXT1lW2ldW2NdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzp1fSksaT1jLGE9W10sbz1bXTtpPj0wO2ktLSlhW2MtaV09dFtoXVtpXSxvW2MtaV09ZVtoXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9aCxhPVtdLG89W107aT49MDtpLS0pYVtoLWldPXRbaV1bMF0sb1toLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOnV9KSxzfX0se31dLDg4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2Z1bmN0aW9uIG8oZSl7dmFyIG4saSxvLHMsbCx1LGMsaCxmLGQscCx2LGc9W10seT1bXSxiPXt9O2lmKCJiIj09PXIpZm9yKGk9dC5iMmooZSksbz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oUC0yLGkpKSkscz1pLW8sYi5sZW5ndGg9UCxiLmNyb3NzTGVuZ3RoPUQsYi54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxpKX0sYi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixzKX0sbj0wO248RDtuKyspdT1NYXRoLm1pbihELTIsbiksYz1uLXUsaD10LmV2YWx4eShbXSxuLGkpLEUuc21vb3RoaW5nJiZuPjAmJihmPXQuZHh5ZGkoW10sbi0xLG8sMCxzKSxnLnB1c2gobFswXStmWzBdLzMpLHkucHVzaChsWzFdK2ZbMV0vMyksZD10LmR4eWRpKFtdLG4tMSxvLDEscyksZy5wdXNoKGhbMF0tZFswXS8zKSx5LnB1c2goaFsxXS1kWzFdLzMpKSxnLnB1c2goaFswXSkseS5wdXNoKGhbMV0pLGw9aDtlbHNlIGZvcihuPXQuYTJpKGUpLHU9TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKEQtMixuKSkpLGM9bi11LGIubGVuZ3RoPUQsYi5jcm9zc0xlbmd0aD1QLGIueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLG4sZSl9LGIuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sdSxlLGMscil9LGk9MDtpPFA7aSsrKW89TWF0aC5taW4oUC0yLGkpLHM9aS1vLGg9dC5ldmFseHkoW10sbixpKSxFLnNtb290aGluZyYmaT4wJiYocD10LmR4eWRqKFtdLHUsaS0xLGMsMCksZy5wdXNoKGxbMF0rcFswXS8zKSx5LnB1c2gobFsxXStwWzFdLzMpLHY9dC5keHlkaihbXSx1LGktMSxjLDEpLGcucHVzaChoWzBdLXZbMF0vMykseS5wdXNoKGhbMV0tdlsxXS8zKSksZy5wdXNoKGhbMF0pLHkucHVzaChoWzFdKSxsPWg7cmV0dXJuIGIuYXhpc0xldHRlcj1yLGIuYXhpcz1NLGIuY3Jvc3NBeGlzPUUsYi52YWx1ZT1lLGIuY29uc3R2YXI9YSxiLmluZGV4PW0sYi54PWcsYi55PXksYi5zbW9vdGhpbmc9RS5zbW9vdGhpbmcsYn1mdW5jdGlvbiBzKGUpe3ZhciBuLGksbyxzLGwsdT1bXSxjPVtdLGg9e307aWYoaC5sZW5ndGg9dy5sZW5ndGgsaC5jcm9zc0xlbmd0aD1TLmxlbmd0aCwiYiI9PT1yKWZvcihvPU1hdGgubWF4KDAsTWF0aC5taW4oUC0yLGUpKSxsPU1hdGgubWluKDEsTWF0aC5tYXgoMCxlLW8pKSxoLnh5PWZ1bmN0aW9uKHIpe3JldHVybiB0LmV2YWx4eShbXSxyLGUpfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLGwpfSxuPTA7bjx6O24rKyl1W25dPUxbZSpPXVtuXSxjW25dPUNbZSpPXVtuXTtlbHNlIGZvcihpPU1hdGgubWF4KDAsTWF0aC5taW4oRC0yLGUpKSxzPU1hdGgubWluKDEsTWF0aC5tYXgoMCxlLWkpKSxoLnh5PWZ1bmN0aW9uKHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGksZSxzLHIpfSxuPTA7bjxJO24rKyl1W25dPUxbbl1bZSpPXSxjW25dPUNbbl1bZSpPXTtyZXR1cm4gaC5heGlzTGV0dGVyPXIsaC5heGlzPU0saC5jcm9zc0F4aXM9RSxoLnZhbHVlPXdbZV0saC5jb25zdHZhcj1hLGguaW5kZXg9ZSxoLng9dSxoLnk9YyxoLnNtb290aGluZz1FLnNtb290aGluZyxofXZhciBsLHUsYyxoLGYsZCxwLG0sdixnLHksYix4LF8sdz10W3JdLE09dFtyKyJheGlzIl0saz1NLl9ncmlkbGluZXM9W10sQT1NLl9taW5vcmdyaWRsaW5lcz1bXSxUPU0uX2JvdW5kYXJ5bGluZXM9W10sUz10W2FdLEU9dFthKyJheGlzIl07aWYoImFycmF5Ij09PU0udGlja21vZGUpZm9yKE0udGlja3ZhbHM9W10sbD0wO2w8dy5sZW5ndGg7bCsrKU0udGlja3ZhbHMucHVzaCh3W2xdKTt2YXIgTD10LnhjdHJsLEM9dC55Y3RybCx6PUxbMF0ubGVuZ3RoLEk9TC5sZW5ndGgsRD10LmEubGVuZ3RoLFA9dC5iLmxlbmd0aDtuLmNhbGNUaWNrcyhNKTt2YXIgTz1NLnNtb290aGluZz8zOjE7aWYoImFycmF5Ij09PU0udGlja21vZGUpe2ZvcihoPTVlLTE1LGY9W01hdGguZmxvb3IoKHcubGVuZ3RoLTEtTS5hcnJheXRpY2swKS9NLmFycmF5ZHRpY2sqKDEraCkpLE1hdGguY2VpbCgtTS5hcnJheXRpY2swL00uYXJyYXlkdGljay8oMStoKSldLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksZD1mWzBdLTEscD1mWzFdKzEsbT1kO208cDttKyspKHU9TS5hcnJheXRpY2swK00uYXJyYXlkdGljayptKTwwfHx1PncubGVuZ3RoLTF8fGsucHVzaChpKHModSkse2NvbG9yOk0uZ3JpZGNvbG9yLHdpZHRoOk0uZ3JpZHdpZHRofSkpO2ZvcihtPWQ7bTxwO20rKylpZihjPU0uYXJyYXl0aWNrMCtNLmFycmF5ZHRpY2sqbSx5PU1hdGgubWluKGMrTS5hcnJheWR0aWNrLHcubGVuZ3RoLTEpLCEoYzwwfHxjPncubGVuZ3RoLTF8fHk8MHx8eT53Lmxlbmd0aC0xKSlmb3IoYj13W2NdLHg9d1t5XSxsPTA7bDxNLm1pbm9yZ3JpZGNvdW50O2wrKykoXz15LWMpPD0wfHwoZz1iKyh4LWIpKihsKzEpLyhNLm1pbm9yZ3JpZGNvdW50KzEpKihNLmFycmF5ZHRpY2svXykpPHdbMF18fGc+d1t3Lmxlbmd0aC0xXXx8QS5wdXNoKGkobyhnKSx7Y29sb3I6TS5taW5vcmdyaWRjb2xvcix3aWR0aDpNLm1pbm9yZ3JpZHdpZHRofSkpO00uc3RhcnRsaW5lJiZULnB1c2goaShzKDApLHtjb2xvcjpNLnN0YXJ0bGluZWNvbG9yLHdpZHRoOk0uc3RhcnRsaW5ld2lkdGh9KSksTS5lbmRsaW5lJiZULnB1c2goaShzKHcubGVuZ3RoLTEpLHtjb2xvcjpNLmVuZGxpbmVjb2xvcix3aWR0aDpNLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihoPTVlLTE1LGY9W01hdGguZmxvb3IoKHdbdy5sZW5ndGgtMV0tTS50aWNrMCkvTS5kdGljayooMStoKSksTWF0aC5jZWlsKCh3WzBdLU0udGljazApL00uZHRpY2svKDEraCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGQ9ZlswXSxwPWZbMV0sbT1kO208PXA7bSsrKXY9TS50aWNrMCtNLmR0aWNrKm0say5wdXNoKGkobyh2KSx7Y29sb3I6TS5ncmlkY29sb3Isd2lkdGg6TS5ncmlkd2lkdGh9KSk7Zm9yKG09ZC0xO208cCsxO20rKylmb3Iodj1NLnRpY2swK00uZHRpY2sqbSxsPTA7bDxNLm1pbm9yZ3JpZGNvdW50O2wrKykoZz12K00uZHRpY2sqKGwrMSkvKE0ubWlub3JncmlkY291bnQrMSkpPHdbMF18fGc+d1t3Lmxlbmd0aC0xXXx8QS5wdXNoKGkobyhnKSx7Y29sb3I6TS5taW5vcmdyaWRjb2xvcix3aWR0aDpNLm1pbm9yZ3JpZHdpZHRofSkpO00uc3RhcnRsaW5lJiZULnB1c2goaShvKHdbMF0pLHtjb2xvcjpNLnN0YXJ0bGluZWNvbG9yLHdpZHRoOk0uc3RhcnRsaW5ld2lkdGh9KSksTS5lbmRsaW5lJiZULnB1c2goaShvKHdbdy5sZW5ndGgtMV0pLHtjb2xvcjpNLmVuZGxpbmVjb2xvcix3aWR0aDpNLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NH1dLDg4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NH1dLDg4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLHU9TWF0aC5wb3cobypvK3MqcywuMjUpLGM9KHUqdSppLWwqbCpvKSpuLGg9KHUqdSphLWwqbCpzKSpuLGY9dSoobCt1KSozLGQ9bCoobCt1KSozO3JldHVybltbZVswXSsoZiYmYy9mKSxlWzFdKyhmJiZoL2YpXSxbZVswXS0oZCYmYy9kKSxlWzFdLShkJiZoL2QpXV19fSx7fV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLHUsYz1bXSxoPW4odCk/dC5sZW5ndGg6dCxmPW4oZSk/ZS5sZW5ndGg6ZSxkPW4odCk/dDpudWxsLHA9bihlKT9lOm51bGw7ZCYmKG89KGQubGVuZ3RoLTEpLyhkW2QubGVuZ3RoLTFdLWRbMF0pLyhoLTEpKSxwJiYocz0ocC5sZW5ndGgtMSkvKHBbcC5sZW5ndGgtMV0tcFswXSkvKGYtMSkpO3ZhciBtLHY9MS8wLGc9LTEvMDtmb3IoYT0wO2E8ZjthKyspZm9yKGNbYV09W10sdT1wPyhwW2FdLXBbMF0pKnM6YS8oZi0xKSxpPTA7aTxoO2krKylsPWQ/KGRbaV0tZFswXSkqbzppLyhoLTEpLG09bC11KnIsdj1NYXRoLm1pbihtLHYpLGc9TWF0aC5tYXgobSxnKSxjW2FdW2ldPW07dmFyIHk9MS8oZy12KSxiPS12Knk7Zm9yKGE9MDthPGY7YSsrKWZvcihpPTA7aTxoO2krKyljW2FdW2ldPXkqY1thXVtpXStiO3JldHVybiBjfX0seyIuLi8uLi9saWIiOjcyNH1dLDg5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj0tLjUqclswXSsxLjUqZVswXSxpPS0uNSpyWzFdKzEuNSplWzFdO3JldHVyblsoMipuK3RbMF0pLzMsKDIqaSt0WzFdKS8zXX12YXIgaT10KCIuL2NhdG11bGxfcm9tIiksYT10KCIuLi8uLi9saWIiKS5lbnN1cmVBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciB1LGMsaCxmLGQscCxtLHYsZyx5LGI9clswXS5sZW5ndGgseD1yLmxlbmd0aCxfPXM/MypiLTI6Yix3PWw/Myp4LTI6eDtmb3IodD1hKHQsdyksZT1hKGUsdyksaD0wO2g8dztoKyspdFtoXT1hKHRbaF0sXyksZVtoXT1hKGVbaF0sXyk7Zm9yKGM9MCxmPTA7Yzx4O2MrKyxmKz1sPzM6MSlmb3IoZD10W2ZdLHA9ZVtmXSxtPXJbY10sdj1vW2NdLHU9MCxoPTA7dTxiO3UrKyxoKz1zPzM6MSlkW2hdPW1bdV0scFtoXT12W3VdO2lmKHMpZm9yKGM9MCxmPTA7Yzx4O2MrKyxmKz1sPzM6MSl7Zm9yKHU9MSxoPTM7dTxiLTE7dSsrLGgrPTMpZz1pKFtyW2NdW3UtMV0sb1tjXVt1LTFdXSxbcltjXVt1XSxvW2NdW3VdXSxbcltjXVt1KzFdLG9bY11bdSsxXV0scyksdFtmXVtoLTFdPWdbMF1bMF0sZVtmXVtoLTFdPWdbMF1bMV0sdFtmXVtoKzFdPWdbMV1bMF0sZVtmXVtoKzFdPWdbMV1bMV07eT1uKFt0W2ZdWzBdLGVbZl1bMF1dLFt0W2ZdWzJdLGVbZl1bMl1dLFt0W2ZdWzNdLGVbZl1bM11dKSx0W2ZdWzFdPXlbMF0sZVtmXVsxXT15WzFdLHk9bihbdFtmXVtfLTFdLGVbZl1bXy0xXV0sW3RbZl1bXy0zXSxlW2ZdW18tM11dLFt0W2ZdW18tNF0sZVtmXVtfLTRdXSksdFtmXVtfLTJdPXlbMF0sZVtmXVtfLTJdPXlbMV19aWYobClmb3IoaD0wO2g8XztoKyspe2ZvcihmPTM7Zjx3LTM7Zis9MylnPWkoW3RbZi0zXVtoXSxlW2YtM11baF1dLFt0W2ZdW2hdLGVbZl1baF1dLFt0W2YrM11baF0sZVtmKzNdW2hdXSxsKSx0W2YtMV1baF09Z1swXVswXSxlW2YtMV1baF09Z1swXVsxXSx0W2YrMV1baF09Z1sxXVswXSxlW2YrMV1baF09Z1sxXVsxXTt5PW4oW3RbMF1baF0sZVswXVtoXV0sW3RbMl1baF0sZVsyXVtoXV0sW3RbM11baF0sZVszXVtoXV0pLHRbMV1baF09eVswXSxlWzFdW2hdPXlbMV0seT1uKFt0W3ctMV1baF0sZVt3LTFdW2hdXSxbdFt3LTNdW2hdLGVbdy0zXVtoXV0sW3Rbdy00XVtoXSxlW3ctNF1baF1dKSx0W3ctMl1baF09eVswXSxlW3ctMl1baF09eVsxXX1pZihzJiZsKWZvcihmPTE7Zjx3O2YrPShmKzEpJTM9PTA/MjoxKXtmb3IoaD0zO2g8Xy0zO2grPTMpZz1pKFt0W2ZdW2gtM10sZVtmXVtoLTNdXSxbdFtmXVtoXSxlW2ZdW2hdXSxbdFtmXVtoKzNdLGVbZl1baCszXV0scyksdFtmXVtoLTFdPS41Kih0W2ZdW2gtMV0rZ1swXVswXSksZVtmXVtoLTFdPS41KihlW2ZdW2gtMV0rZ1swXVsxXSksdFtmXVtoKzFdPS41Kih0W2ZdW2grMV0rZ1sxXVswXSksZVtmXVtoKzFdPS41KihlW2ZdW2grMV0rZ1sxXVsxXSk7eT1uKFt0W2ZdWzBdLGVbZl1bMF1dLFt0W2ZdWzJdLGVbZl1bMl1dLFt0W2ZdWzNdLGVbZl1bM11dKSx0W2ZdWzFdPS41Kih0W2ZdWzFdK3lbMF0pLGVbZl1bMV09LjUqKGVbZl1bMV0reVsxXSkseT1uKFt0W2ZdW18tMV0sZVtmXVtfLTFdXSxbdFtmXVtfLTNdLGVbZl1bXy0zXV0sW3RbZl1bXy00XSxlW2ZdW18tNF1dKSx0W2ZdW18tMl09LjUqKHRbZl1bXy0yXSt5WzBdKSxlW2ZdW18tMl09LjUqKGVbZl1bXy0yXSt5WzFdKX1yZXR1cm5bdCxlXX19LHsiLi4vLi4vbGliIjo3MjQsIi4vY2F0bXVsbF9yb20iOjg4OH1dLDg5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1JFTEFUSVZFX0NVTExfVE9MRVJBTkNFOjFlLTZ9fSx7fV0sODkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnI/ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLHUsYyxoO3IqPTMsbio9Mzt2YXIgZj1pKmksZD0xLWkscD1kKmQsbT1kKmkqMix2PS0zKnAsZz0zKihwLW0pLHk9MyoobS1mKSxiPTMqZix4PWEqYSxfPXgqYSx3PTEtYSxNPXcqdyxrPU0qdztmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKWM9dFtoXSxvPXYqY1tuXVtyXStnKmNbbl1bcisxXSt5KmNbbl1bcisyXStiKmNbbl1bciszXSxzPXYqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0reSpjW24rMV1bcisyXStiKmNbbisxXVtyKzNdLGw9dipjW24rMl1bcl0rZypjW24rMl1bcisxXSt5KmNbbisyXVtyKzJdK2IqY1tuKzJdW3IrM10sdT12KmNbbiszXVtyXStnKmNbbiszXVtyKzFdK3kqY1tuKzNdW3IrMl0rYipjW24rM11bciszXSxlW2hdPWsqbyszKihNKmEqcyt3KngqbCkrXyp1O3JldHVybiBlfTplP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCx1O3IqPTM7dmFyIGM9aSppLGg9MS1pLGY9aCpoLGQ9aCppKjIscD0tMypmLG09MyooZi1kKSx2PTMqKGQtYyksZz0zKmMseT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyl1PXRbbF0sbz1wKnVbbl1bcl0rbSp1W25dW3IrMV0rdip1W25dW3IrMl0rZyp1W25dW3IrM10scz1wKnVbbisxXVtyXSttKnVbbisxXVtyKzFdK3YqdVtuKzFdW3IrMl0rZyp1W24rMV1bciszXSxlW2xdPXkqbythKnM7cmV0dXJuIGV9OnI/ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLHUsYyxoO24qPTM7dmFyIGY9YSphLGQ9ZiphLHA9MS1hLG09cCpwLHY9bSpwO2ZvcihjPTA7Yzx0Lmxlbmd0aDtjKyspaD10W2NdLG89aFtuXVtyKzFdLWhbbl1bcl0scz1oW24rMV1bcisxXS1oW24rMV1bcl0sbD1oW24rMl1bcisxXS1oW24rMl1bcl0sdT1oW24rM11bcisxXS1oW24rM11bcl0sZVtjXT12Km8rMyoobSphKnMrcCpmKmwpK2QqdTtyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLHUsYz0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyl1PXRbbF0sbz11W25dW3IrMV0tdVtuXVtyXSxzPXVbbisxXVtyKzFdLXVbbisxXVtyXSxlW2xdPWMqbythKnM7cmV0dXJuIGV9fX0se31dLDg5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCx1LGMsaDtyKj0zLG4qPTM7dmFyIGY9aSppLGQ9ZippLHA9MS1pLG09cCpwLHY9bSpwLGc9YSphLHk9MS1hLGI9eSp5LHg9eSphKjIsXz0tMypiLHc9MyooYi14KSxNPTMqKHgtZyksaz0zKmc7Zm9yKGg9MDtoPHQubGVuZ3RoO2grKyljPXRbaF0sbz1fKmNbbl1bcl0rdypjW24rMV1bcl0rTSpjW24rMl1bcl0raypjW24rM11bcl0scz1fKmNbbl1bcisxXSt3KmNbbisxXVtyKzFdK00qY1tuKzJdW3IrMV0raypjW24rM11bcisxXSxsPV8qY1tuXVtyKzJdK3cqY1tuKzFdW3IrMl0rTSpjW24rMl1bcisyXStrKmNbbiszXVtyKzJdLHU9XypjW25dW3IrM10rdypjW24rMV1bciszXStNKmNbbisyXVtyKzNdK2sqY1tuKzNdW3IrM10sZVtoXT12Km8rMyoobSppKnMrcCpmKmwpK2QqdTtyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe2V8fChlPVtdKTt2YXIgbyxzLGwsdSxjLGg7cio9Mzt2YXIgZj1hKmEsZD1mKmEscD0xLWEsbT1wKnAsdj1tKnA7Zm9yKGM9MDtjPHQubGVuZ3RoO2MrKyloPXRbY10sbz1oW24rMV1bcl0taFtuXVtyXSxzPWhbbisxXVtyKzFdLWhbbl1bcisxXSxsPWhbbisxXVtyKzJdLWhbbl1bcisyXSx1PWhbbisxXVtyKzNdLWhbbl1bciszXSxlW2NdPXYqbyszKihtKmEqcytwKmYqbCkrZCp1O3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCx1O24qPTM7dmFyIGM9MS1pLGg9YSphLGY9MS1hLGQ9ZipmLHA9ZiphKjIsbT0tMypkLHY9MyooZC1wKSxnPTMqKHAtaCkseT0zKmg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyl1PXRbbF0sbz1tKnVbbl1bcl0rdip1W24rMV1bcl0rZyp1W24rMl1bcl0reSp1W24rM11bcl0scz1tKnVbbl1bcisxXSt2KnVbbisxXVtyKzFdK2cqdVtuKzJdW3IrMV0reSp1W24rM11bcisxXSxlW2xdPWMqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCx1LGM9MS1pO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspdT10W2xdLG89dVtuKzFdW3JdLXVbbl1bcl0scz11W24rMV1bcisxXS11W25dW3IrMV0sZVtsXT1jKm8raSpzO3JldHVybiBlfX19LHt9XSw4OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ZS0yLG89ci0yO3JldHVybiBuJiZpP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLHUsYyxoLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1kKSk7Zio9MyxkKj0zO3ZhciB2PXAqcCxnPXYqcCx5PTEtcCxiPXkqeSx4PWIqeSxfPW0qbSx3PV8qbSxNPTEtbSxrPU0qTSxBPWsqTTtmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKWM9dFtoXSxpPXgqY1tkXVtmXSszKihiKnAqY1tkXVtmKzFdK3kqdipjW2RdW2YrMl0pK2cqY1tkXVtmKzNdLHM9eCpjW2QrMV1bZl0rMyooYipwKmNbZCsxXVtmKzFdK3kqdipjW2QrMV1bZisyXSkrZypjW2QrMV1bZiszXSxsPXgqY1tkKzJdW2ZdKzMqKGIqcCpjW2QrMl1bZisxXSt5KnYqY1tkKzJdW2YrMl0pK2cqY1tkKzJdW2YrM10sdT14KmNbZCszXVtmXSszKihiKnAqY1tkKzNdW2YrMV0reSp2KmNbZCszXVtmKzJdKStnKmNbZCszXVtmKzNdLGVbaF09QSppKzMqKGsqbSpzK00qXypsKSt3KnU7cmV0dXJuIGV9Om4/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsdSxjLGgsZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLWQpKTtmKj0zO3ZhciB2PXAqcCxnPXYqcCx5PTEtcCxiPXkqeSx4PWIqeSxfPTEtbTtmb3IoYz0wO2M8dC5sZW5ndGg7YysrKWg9dFtjXSxpPV8qaFtkXVtmXSttKmhbZCsxXVtmXSxzPV8qaFtkXVtmKzFdK20qaFtkKzFdW2YrMV0sbD1fKmhbZF1bZisyXSttKmhbZCsxXVtmKzFdLHU9XypoW2RdW2YrM10rbSpoW2QrMV1bZisxXSxlW2NdPXgqaSszKihiKnAqcyt5KnYqbCkrZyp1O3JldHVybiBlfTppP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLHUsYyxoLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1kKSk7ZCo9Mzt2YXIgdj1tKm0sZz12Km0seT0xLW0sYj15KnkseD1iKnksXz0xLXA7Zm9yKGM9MDtjPHQubGVuZ3RoO2MrKyloPXRbY10saT1fKmhbZF1bZl0rcCpoW2RdW2YrMV0scz1fKmhbZCsxXVtmXStwKmhbZCsxXVtmKzFdLGw9XypoW2QrMl1bZl0rcCpoW2QrMl1bZisxXSx1PV8qaFtkKzNdW2ZdK3AqaFtkKzNdW2YrMV0sZVtjXT14KmkrMyooYiptKnMreSp2KmwpK2cqdTtyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsdSxjPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSksaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItYykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4taCkpLHA9MS1kLG09MS1mO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspdT10W2xdLGk9bSp1W2hdW2NdK2YqdVtoXVtjKzFdLHM9bSp1W2grMV1bY10rZip1W2grMV1bYysxXSxlW2xdPXAqaStkKnM7cmV0dXJuIGV9fX0se31dLDg5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4veHlfZGVmYXVsdHMiKSxhPXQoIi4vYWJfZGVmYXVsdHMiKSxvPXQoIi4vc2V0X2NvbnZlcnQiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1lLl9jbGlwUGF0aElkPSJjbGlwIitlLnVpZCsiY2FycGV0Ijt2YXIgaD1jKCJjb2xvciIsbC5kZWZhdWx0TGluZSk7aWYobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxhKHQsZSx1LGMsaCksIWUuYXx8IWUuYilyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2UuYS5sZW5ndGg8MyYmKGUuYWF4aXMuc21vb3RoaW5nPTApLGUuYi5sZW5ndGg8MyYmKGUuYmF4aXMuc21vb3RoaW5nPTApO3ZhciBmPWkodCxlLGMpO28oZSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIiksZnx8KGUudmlzaWJsZT0hMSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjAxLCIuLi8uLi9saWIiOjcyNCwiLi9hYl9kZWZhdWx0cyI6ODc4LCIuL2F0dHJpYnV0ZXMiOjg4MCwiLi9zZXRfY29udmVydCI6OTA0LCIuL3h5X2RlZmF1bHRzIjo5MDZ9XSw4OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHRbMF0pfX0se31dLDg5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmFuaW1hdGFibGU9ITAsbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4vYXR0cmlidXRlcyI6ODgwLCIuL2NhbGMiOjg4NCwiLi9kZWZhdWx0cyI6ODk1LCIuL3Bsb3QiOjkwM31dLDg5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoImNhcnBldCI9PT1hLnR5cGUmJihyfHwocj1hKSxhLmNhcnBldD09PWUuY2FycGV0KSkpcmV0dXJuIGF9cmV0dXJuIHJ9fSx7fV0sODk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVybiIiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXSsiLCIrZVtuXSksciYmbjx0Lmxlbmd0aC1hJiYoaS5wdXNoKCJDIiksaS5wdXNoKFt0W24rMV0rIiwiK2VbbisxXSx0W24rMl0rIiwiK2VbbisyXSsiICJdLmpvaW4oIiAiKSkpO3JldHVybiBpLmpvaW4ocj8iIjoiTCIpfX0se31dLDkwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2ZvcihBcnJheS5pc0FycmF5KHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl0W25dPXIoZVtuXSk7cmV0dXJuIHR9fSx7fV0sOTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saTtmb3IoQXJyYXkuaXNBcnJheSh0KT90Lmxlbmd0aD5lLmxlbmd0aCYmKHQ9dC5zbGljZSgwLGUubGVuZ3RoKSk6dD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspZm9yKEFycmF5LmlzQXJyYXkodFtuXSk/dFtuXS5sZW5ndGg+ZS5sZW5ndGgmJih0W25dPXRbbl0uc2xpY2UoMCxlLmxlbmd0aCkpOnRbbl09W10saT0wO2k8ZVswXS5sZW5ndGg7aSsrKXRbbl1baV09cihlW25dW2ldKTtyZXR1cm4gdH19LHt9XSw5MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pWzBdKnQuZHBkeChlKSxzPWlbMV0qdC5kcGR5KHIpLGw9MSx1PTE7aWYoYSl7dmFyIGM9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLGg9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGY9KGlbMF0qYVswXStpWzFdKmFbMV0pL2MvaDt1PU1hdGgubWF4KDAsZil9dmFyIGQ9MTgwKk1hdGguYXRhbjIocyxvKS9NYXRoLlBJO3JldHVybiBkPC05MD8oZCs9MTgwLGw9LWwpOmQ+OTAmJihkLT0xODAsbD0tbCkse2FuZ2xlOmQsZmxpcDpsLHA6dC5jMnAobixlLHIpLG9mZnNldE11bHRwbGllcjp1fX19LHt9XSw5MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49dC5zZWxlY3RBbGwoZSsiLiIrcikuZGF0YShbMF0pO3JldHVybiBuLmVudGVyKCkuYXBwZW5kKGUpLmNsYXNzZWQociwhMCksbn1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgaT1yWzBdLHU9clswXS50cmFjZSxjPWUueGF4aXMsaD1lLnlheGlzLGY9dS5hYXhpcyxkPXUuYmF4aXMscD10Ll9mdWxsTGF5b3V0LG09ZS5wbG90LnNlbGVjdEFsbCgiLmNhcnBldGxheWVyIiksdj1uKHAuX2RlZnMsImciLCJjbGlwcyIpLGc9bihtLCJnIiwiY2FycGV0Iit1LnVpZCkuY2xhc3NlZCgidHJhY2UiLCEwKSx5PW4oZywiZyIsIm1pbm9ybGF5ZXIiKSxiPW4oZywiZyIsIm1ham9ybGF5ZXIiKSx4PW4oZywiZyIsImJvdW5kYXJ5bGF5ZXIiKSxfPW4oZywiZyIsImxhYmVsbGF5ZXIiKTtnLnN0eWxlKCJvcGFjaXR5Iix1Lm9wYWNpdHkpLG8oYyxoLGIsZiwiYSIsZi5fZ3JpZGxpbmVzKSxvKGMsaCxiLGQsImIiLGQuX2dyaWRsaW5lcyksbyhjLGgseSxmLCJhIixmLl9taW5vcmdyaWRsaW5lcyksbyhjLGgseSxkLCJiIixkLl9taW5vcmdyaWRsaW5lcyksbyhjLGgseCxmLCJhLWJvdW5kYXJ5IixmLl9ib3VuZGFyeWxpbmVzKSxvKGMsaCx4LGQsImItYm91bmRhcnkiLGQuX2JvdW5kYXJ5bGluZXMpLGwodCxfLHUsaSxjLGgscyh0LGMsaCx1LGksXyxmLl9sYWJlbHMsImEtbGFiZWwiKSxzKHQsYyxoLHUsaSxfLGQuX2xhYmVscywiYi1sYWJlbCIpKSxhKHUsaSx2LGMsaCl9ZnVuY3Rpb24gYSh0LGUscixpLGEpe3ZhciBvLHMsbCx1LGM9ci5zZWxlY3QoIiMiK3QuX2NsaXBQYXRoSWQpO2Muc2l6ZSgpfHwoYz1yLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjYXJwZXRjbGlwIiwhMCkpO3ZhciBoPW4oYywicGF0aCIsImNhcnBldGJvdW5kYXJ5IikscD1lLmNsaXBzZWdtZW50cyxtPVtdO2Zvcih1PTA7dTxwLmxlbmd0aDt1Kyspbz1wW3VdLHM9ZihbXSxvLngsaS5jMnApLGw9ZihbXSxvLnksYS5jMnApLG0ucHVzaChkKHMsbCxvLmJpY3ViaWMpKTt2YXIgdj0iTSIrbS5qb2luKCJMIikrIloiO2MuYXR0cigiaWQiLHQuX2NsaXBQYXRoSWQpLGguYXR0cigiZCIsdil9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dmFyIG89ImNvbnN0LSIraSsiLWxpbmVzIixzPXIuc2VsZWN0QWxsKCIuIitvKS5kYXRhKGEpO3MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG8sITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikscy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXIsaT1uLngsYT1uLnksbz1mKFtdLGksdC5jMnApLHM9ZihbXSxhLGUuYzJwKSxsPSJNIitkKG8scyxuLnNtb290aGluZyk7Yy5zZWxlY3QodGhpcykuYXR0cigiZCIsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsbi53aWR0aCkuc3R5bGUoInN0cm9rZSIsbi5jb2xvcikuc3R5bGUoImZpbGwiLCJub25lIil9KSxzLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9YS5zZWxlY3RBbGwoInRleHQuIitzKS5kYXRhKG8pO2wuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHMsITApO3ZhciB1PTA7cmV0dXJuIGwuZWFjaChmdW5jdGlvbihpKXt2YXIgYTtpZigiYXV0byI9PT1pLmF4aXMudGlja2FuZ2xlKWE9cChuLGUscixpLnh5LGkuZHh5KTtlbHNle3ZhciBvPShpLmF4aXMudGlja2FuZ2xlKzE4MCkqTWF0aC5QSS8xODA7YT1wKG4sZSxyLGkueHksW01hdGguY29zKG8pLE1hdGguc2luKG8pXSl9dmFyIHM9KGkuZW5kQW5jaG9yPy0xOjEpKmEuZmxpcCxsPWMuc2VsZWN0KHRoaXMpLmF0dHIoeyJ0ZXh0LWFuY2hvciI6cz4wPyJzdGFydCI6ImVuZCIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGguZm9udCxpLmZvbnQpLnRleHQoaS50ZXh0KS5jYWxsKG0uY29udmVydFRvVHNwYW5zLHQpLGY9aC5iQm94KHRoaXMpO2wuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5wWzBdKyIsIithLnBbMV0rIikgcm90YXRlKCIrYS5hbmdsZSsiKXRyYW5zbGF0ZSgiK2kuYXhpcy5sYWJlbHBhZGRpbmcqcysiLCIrLjMqZi5oZWlnaHQrIikiKSx1PU1hdGgubWF4KHUsZi53aWR0aCtpLmF4aXMubGFiZWxwYWRkaW5nKX0pLGwuZXhpdCgpLnJlbW92ZSgpLHV9ZnVuY3Rpb24gbCh0LGUscixuLGksYSxvLHMpe3ZhciBsLGMsaCxmO2w9LjUqKHIuYVswXStyLmFbci5hLmxlbmd0aC0xXSksYz1yLmJbMF0saD1yLmFiMnh5KGwsYywhMCksZj1yLmR4eWRhX3JvdWdoKGwsYyksdSh0LGUscixuLGgsZixyLmFheGlzLGksYSxvLCJhLXRpdGxlIiksbD1yLmFbMF0sYz0uNSooci5iWzBdK3IuYltyLmIubGVuZ3RoLTFdKSxoPXIuYWIyeHkobCxjLCEwKSxmPXIuZHh5ZGJfcm91Z2gobCxjKSx1KHQsZSxyLG4saCxmLHIuYmF4aXMsaSxhLHMsImItdGl0bGUiKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxhLG8scyxsLHUsZil7dmFyIGQ9W107by50aXRsZSYmZC5wdXNoKG8udGl0bGUpO3ZhciB2PWUuc2VsZWN0QWxsKCJ0ZXh0LiIrZikuZGF0YShkKTt2LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChmLCEwKSx2LmVhY2goZnVuY3Rpb24oKXt2YXIgZT1wKHIscyxsLGksYSk7LTE9PT1bInN0YXJ0IiwiYm90aCJdLmluZGV4T2Yoby5zaG93dGlja2xhYmVscykmJih1PTApLHUrPW8udGl0bGVmb250LnNpemUrby50aXRsZW9mZnNldCxjLnNlbGVjdCh0aGlzKS50ZXh0KG8udGl0bGV8fCIiKS5jYWxsKG0uY29udmVydFRvVHNwYW5zLHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UucFswXSsiLCIrZS5wWzFdKyIpIHJvdGF0ZSgiK2UuYW5nbGUrIikgdHJhbnNsYXRlKDAsIit1KyIpIikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChoLmZvbnQsby50aXRsZWZvbnQpfSksdi5leGl0KCkucmVtb3ZlKCl9dmFyIGM9dCgiZDMiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi9tYXBfMWRfYXJyYXkiKSxkPXQoIi4vbWFrZXBhdGgiKSxwPXQoIi4vb3JpZW50X3RleHQiKSxtPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspaSh0LGUscltuXSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi9tYWtlcGF0aCI6ODk5LCIuL21hcF8xZF9hcnJheSI6OTAwLCIuL29yaWVudF90ZXh0Ijo5MDIsZDM6MTIwfV0sOTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvc2VhcmNoIikuZmluZEJpbixhPXQoIi4vY29tcHV0ZV9jb250cm9sX3BvaW50cyIpLG89dCgiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvciIpLHM9dCgiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciIpLGw9dCgiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmEscj10LmIsdT10LmEubGVuZ3RoLGM9dC5iLmxlbmd0aCxoPXQuYWF4aXMsZj10LmJheGlzLGQ9ZVswXSxwPWVbdS0xXSxtPXJbMF0sdj1yW2MtMV0sZz1lW2UubGVuZ3RoLTFdLWVbMF0seT1yW3IubGVuZ3RoLTFdLXJbMF0sYj1nKm4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0UseD15Km4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U7ZC09YixwKz1iLG0tPXgsdis9eCx0LmlzVmlzaWJsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PmQmJnQ8cCYmZT5tJiZlPHZ9LHQuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe3JldHVybiB0PGR8fHQ+cHx8ZTxtfHxlPnZ9LGguYzJwPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxmLmMycD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQueCxyPXQueSxuPWEodC54Y3RybCx0LnljdHJsLGUscixoLnNtb290aGluZyxmLnNtb290aGluZyk7dC54Y3RybD1uWzBdLHQueWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0LnhjdHJsLHQueWN0cmxdLHUsYyxoLnNtb290aGluZyxmLnNtb290aGluZyksdC5keHlkaT1zKFt0LnhjdHJsLHQueWN0cmxdLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKSx0LmR4eWRqPWwoW3QueGN0cmwsdC55Y3RybF0saC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksdS0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksdS0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLHUtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih1LTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSxjLTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oYy0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW3UtMV18aTxyWzBdfHxpPnJbYy0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgaCxmLGQscCxtPTAsdj0wLGc9W107bjxlWzBdPyhoPTAsZj0wLG09KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVt1LTFdPyhoPXUtMixmPTEsbT0obi1lW3UtMV0pLyhlW3UtMV0tZVt1LTJdKSk6KGg9TWF0aC5tYXgoMCxNYXRoLm1pbih1LTIsTWF0aC5mbG9vcihvKSkpLGY9by1oKSxpPHJbMF0/KGQ9MCxwPTAsdj0oaS1yWzBdKS8oclsxXS1yWzBdKSk6aT5yW2MtMV0/KGQ9Yy0yLHA9MSx2PShpLXJbYy0xXSkvKHJbYy0xXS1yW2MtMl0pKTooZD1NYXRoLm1heCgwLE1hdGgubWluKGMtMixNYXRoLmZsb29yKHMpKSkscD1zLWQpLG0mJih0LmR4eWRpKGcsaCxkLGYscCksbFswXSs9Z1swXSptLGxbMV0rPWdbMV0qbSksdiYmKHQuZHh5ZGooZyxoLGQsZixwKSxsWzBdKz1nWzBdKnYsbFsxXSs9Z1sxXSp2KX1yZXR1cm4gbH0sdC5jMnA9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmMycCh0WzBdKSxyLmMycCh0WzFdKV19LHQucDJ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5wMmModFswXSksci5wMmModFsxXSldfSx0LmRhZGk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihlLmxlbmd0aC0yLHQpKTtyZXR1cm4gZVtyKzFdLWVbcl19LHQuZGJkaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHIubGVuZ3RoLTIsdCkpO3JldHVybiByW2UrMV0tcltlXX0sdC5keHlkYT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRpKG51bGwsZSxyLG4saSksbz10LmRhZGkoZSxuKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGI9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5keHlkaihudWxsLGUscixuLGkpLG89dC5kYmRqKHIsaSk7cmV0dXJuW2FbMF0vbyxhWzFdL29dfSx0LmR4eWRhX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1nKihufHwuMSksYT10LmFiMnh5KGUraSxyLCEwKSxvPXQuYWIyeHkoZS1pLHIsITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmR4eWRiX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT15KihufHwuMSksYT10LmFiMnh5KGUscitpLCEwKSxvPXQuYWIyeHkoZSxyLWksITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmRwZHg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219LHQuZHBkeT1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX19fSx7Ii4uLy4uL2xpYi9zZWFyY2giOjczOCwiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzIjo4OTAsIi4vY29uc3RhbnRzIjo4OTEsIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiOjg5MiwiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciI6ODkzLCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yIjo4OTR9XSw5MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scz1bXSxsPVtdLHU9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCxoPTA7Zm9yKGk9MDtpPHU7aSsrKWZvcihhPTA7YTxjO2ErKyl2b2lkIDA9PT10W2FdW2ldJiYocy5wdXNoKGkpLGwucHVzaChhKSx0W2FdW2ldPWZ1bmN0aW9uKGUscil7dmFyIG4saT0wLGE9MDtyZXR1cm4gZT4wJiZ2b2lkIDAhPT0obj10W3JdW2UtMV0pJiYoYSsrLGkrPW4pLGU8dS0xJiZ2b2lkIDAhPT0obj10W3JdW2UrMV0pJiYoYSsrLGkrPW4pLHI+MCYmdm9pZCAwIT09KG49dFtyLTFdW2VdKSYmKGErKyxpKz1uKSxyPGMtMSYmdm9pZCAwIT09KG49dFtyKzFdW2VdKSYmKGErKyxpKz1uKSxpL01hdGgubWF4KDEsYSl9KGksYSkpLGg9TWF0aC5tYXgoaCxNYXRoLmFicyh0W2FdW2ldKSk7aWYoIXMubGVuZ3RoKXJldHVybiB0O3ZhciBmLGQscCxtLHYsZyx5LGIseCxfLHcsTT0wLGs9MCxBPXMubGVuZ3RoO2Rve2ZvcihNPTAsbz0wO288QTtvKyspe2k9c1tvXSxhPWxbb107dmFyIFQsUyxFLEwsQyx6LEk9MCxEPTA7MD09PWk/KEM9TWF0aC5taW4odS0xLDIpLEU9ZVtDXSxMPWVbMV0sVD10W2FdW0NdLFM9dFthXVsxXSxEKz1TKyhTLVQpKihlWzBdLUwpLyhMLUUpLEkrKyk6aT09PXUtMSYmKEM9TWF0aC5tYXgoMCx1LTMpLEU9ZVtDXSxMPWVbdS0yXSxUPXRbYV1bQ10sUz10W2FdW3UtMl0sRCs9UysoUy1UKSooZVt1LTFdLUwpLyhMLUUpLEkrKyksKDA9PT1pfHxpPT09dS0xKSYmYT4wJiZhPGMtMSYmKGY9clthKzFdLXJbYV0sZD1yW2FdLXJbYS0xXSxEKz0oZCp0W2ErMV1baV0rZip0W2EtMV1baV0pLyhkK2YpLEkrKyksMD09PWE/KHo9TWF0aC5taW4oYy0xLDIpLEU9clt6XSxMPXJbMV0sVD10W3pdW2ldLFM9dFsxXVtpXSxEKz1TKyhTLVQpKihyWzBdLUwpLyhMLUUpLEkrKyk6YT09PWMtMSYmKHo9TWF0aC5tYXgoMCxjLTMpLEU9clt6XSxMPXJbYy0yXSxUPXRbel1baV0sUz10W2MtMl1baV0sRCs9UysoUy1UKSoocltjLTFdLUwpLyhMLUUpLEkrKyksKDA9PT1hfHxhPT09Yy0xKSYmaT4wJiZpPHUtMSYmKGY9ZVtpKzFdLWVbaV0sZD1lW2ldLWVbaS0xXSxEKz0oZCp0W2FdW2krMV0rZip0W2FdW2ktMV0pLyhkK2YpLEkrKyksST9ELz1JOihwPWVbaSsxXS1lW2ldLG09ZVtpXS1lW2ktMV0sdj1yW2ErMV0tclthXSxnPXJbYV0tclthLTFdLHk9cCptKihwK20pLGI9dipnKih2K2cpLEQ9KHkqKGcqdFthKzFdW2ldK3YqdFthLTFdW2ldKStiKihtKnRbYV1baSsxXStwKnRbYV1baS0xXSkpLyhiKihtK3ApK3kqKGcrdikpKSx4PUQtdFthXVtpXSxfPXgvaCxNKz1fKl8sdz1JPzA6Ljg1LHRbYV1baV0rPXgqKDErdyl9TT1NYXRoLnNxcnQoTSl9d2hpbGUoaysrPDEwMCYmTT4xZS01KTtyZXR1cm4gbi5sb2coIlNtb290aGVyIGNvbnZlcmdlZCB0byIsTSwiYWZ0ZXIiLGssIml0ZXJhdGlvbnMiKSx0fX0seyIuLi8uLi9saWIiOjcyNH1dLDkwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hhc19jb2x1bW5zIiksaT10KCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9W10sbz1yKCJ4Iik7byYmIW4obykmJmEucHVzaCgieCIpLGUuX2NoZWF0ZXI9IW87dmFyIHM9cigieSIpO2lmKHMmJiFuKHMpJiZhLnB1c2goInkiKSxvfHxzKXJldHVybiBhLmxlbmd0aCYmaShlLGUuYWF4aXMsZS5iYXhpcywiYSIsImIiLGEpLCEwfX0seyIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiI6OTQ2LCIuL2hhc19jb2x1bW5zIjo4OTZ9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPW4ubWFya2VyLmxpbmU7ZS5leHBvcnRzPXMoe30se2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxvY2F0aW9ubW9kZTpuLmxvY2F0aW9ubW9kZSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LG1hcmtlcjp7bGluZTp7Y29sb3I6bC5jb2xvcix3aWR0aDpzKHt9LGwud2lkdGgse2RmbHQ6MX0pfX0saG92ZXJpbmZvOnMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsibG9jYXRpb24iLCJ6IiwidGV4dCIsIm5hbWUiXX0pfSxpLHtjb2xvcmJhcjphfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MDcsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwNjJ9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuKGUsZS56LCIiLCJ6Iil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDh9XSw5MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGwsdT1zKCJsb2NhdGlvbnMiKTtpZih1JiYobD11Lmxlbmd0aCksIXV8fCFsKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dmFyIGM9cygieiIpO2lmKCFBcnJheS5pc0FycmF5KGMpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7Yy5sZW5ndGg+bCYmKGUuej1jLnNsaWNlKDAsbCkpLHMoImxvY2F0aW9ubW9kZSIpLHMoInRleHQiKSxzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5saW5lLndpZHRoIiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MTEsIi4uLy4uL2xpYiI6NzI0LCIuL2F0dHJpYnV0ZXMiOjkwN31dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLnosdH19LHt9XSw5MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgbz1lLmhvdmVyaW5mbyxzPSJhbGwiPT09bz9hLmhvdmVyaW5mby5mbGFnczpvLnNwbGl0KCIrIiksbD0tMSE9PXMuaW5kZXhPZigibmFtZSIpLHU9LTEhPT1zLmluZGV4T2YoImxvY2F0aW9uIiksYz0tMSE9PXMuaW5kZXhPZigieiIpLGg9LTEhPT1zLmluZGV4T2YoInRleHQiKSxmPSFsJiZ1LGQ9W107Zj90Lm5hbWVPdmVycmlkZT1yLmlkOihsJiYodC5uYW1lT3ZlcnJpZGU9ZS5uYW1lKSx1JiZkLnB1c2goci5pZCkpLGMmJmQucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gaS50aWNrVGV4dChuLG4uYzJsKHQpLCJob3ZlciIpLnRleHR9KHIueikpLGgmJmQucHVzaChyLnR4KSx0LmV4dHJhVGV4dD1kLmpvaW4oIjxicj4iKX12YXIgaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2Qscj1lWzBdLnRyYWNlLGk9dC5zdWJwbG90LGE9aS5jaG9yb3BsZXRoSG92ZXJQdDtpZihhKXt2YXIgbz1pLnByb2plY3Rpb24oYS5wcm9wZXJ0aWVzLmN0KTtyZXR1cm4gdC54MD10LngxPW9bMF0sdC55MD10LnkxPW9bMV0sdC5pbmRleD1hLmluZGV4LHQubG9jYXRpb249YS5pZCx0Lno9YS56LG4odCxyLGEsaS5tb2NrQXhpcyksW3RdfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi9hdHRyaWJ1dGVzIjo5MDd9XSw5MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjaG9yb3BsZXRoIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dlbyIpLG4uY2F0ZWdvcmllcz1bImdlbyIsIm5vT3BhY2l0eSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nZW8iOjc5MiwiLi4vaGVhdG1hcC9jb2xvcmJhciI6OTQ1LCIuL2F0dHJpYnV0ZXMiOjkwNywiLi9jYWxjIjo5MDgsIi4vZGVmYXVsdHMiOjkwOSwiLi9ldmVudF9kYXRhIjo5MTAsIi4vaG92ZXIiOjkxMSwiLi9wbG90Ijo5MTN9XSw5MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcixuPVtdLGk9dC5sb2NhdGlvbnMsYT1pLmxlbmd0aCxvPXUodCxlKSxzPSh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9LGw9MDtsPGE7bCsrKShyPWModC5sb2NhdGlvbm1vZGUsaVtsXSxvKSkmJihyLno9dC56W2xdLHZvaWQgMCE9PXQudGV4dCYmKHIudHg9dC50ZXh0W2xdKSxoKHMuY29sb3IsciwibWxjIixsKSxoKHMud2lkdGgsciwibWx3IixsKSxyLmluZGV4PWwsbi5wdXNoKHIpKTtyZXR1cm4gbi5sZW5ndGg+MCYmKG5bMF0udHJhY2U9dCksbn1mdW5jdGlvbiBpKHQpe3QuZnJhbWV3b3JrLnNlbGVjdEFsbCgiZy50cmFjZS5jaG9yb3BsZXRoIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9YS5zZWxlY3QodGhpcyksbj1lLm1hcmtlcnx8e30saT1uLmxpbmV8fHt9LHU9bC5tYWtlQ29sb3JTY2FsZUZ1bmMobC5leHRyYWN0U2NhbGUoZS5jb2xvcnNjYWxlLGUuem1pbixlLnptYXgpKTtyLnNlbGVjdEFsbCgicGF0aC5jaG9yb3BsZXRobG9jYXRpb24iKS5lYWNoKGZ1bmN0aW9uKHQpe2Euc2VsZWN0KHRoaXMpLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB1KHQueil9KS5jYWxsKG8uc3Ryb2tlLHQubWxjfHxpLmNvbG9yKS5jYWxsKHMuZGFzaExpbmUsIiIsdC5tbHd8fGkud2lkdGh8fDApfSl9KX12YXIgYT10KCJkMyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx1PXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMsYz10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIikubG9jYXRpb25Ub0ZlYXR1cmUsaD10KCIuLi8uLi9saWIvYXJyYXlfdG9fY2FsY19pdGVtIiksZj10KCIuLi8uLi9wbG90cy9nZW8vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH12YXIgcyxsPXQuZnJhbWV3b3JrLHU9bC5zZWxlY3QoImcuY2hvcm9wbGV0aGxheWVyIiksYz1sLnNlbGVjdCgiZy5iYXNlbGF5ZXIiKSxoPWwuc2VsZWN0KCJnLmJhc2VsYXllcm92ZXJjaG9yb3BsZXRoIiksZD1mLmJhc2VMYXllcnNPdmVyQ2hvcm9wbGV0aCxwPXUuc2VsZWN0QWxsKCJnLnRyYWNlLmNob3JvcGxldGgiKS5kYXRhKGUsbyk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgY2hvcm9wbGV0aCIpLHAuZXhpdCgpLnJlbW92ZSgpLHAuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLGk9bihyLHQudG9wb2pzb24pLG89YS5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmNob3JvcGxldGhsb2NhdGlvbiIpLmRhdGEoaSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNob3JvcGxldGhsb2NhdGlvbiIsITApLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe3QuY2hvcm9wbGV0aEhvdmVyUHQ9ZX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0LmNob3JvcGxldGhIb3ZlclB0PW51bGx9KSxvLmV4aXQoKS5yZW1vdmUoKX0pLGguc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspcz1kW21dLGMuc2VsZWN0KCJnLiIrcykucmVtb3ZlKCksdC5kcmF3VG9wbyhoLHMsciksdC5zdHlsZUxheWVyKGgscyxyKTtpKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vbGliL2FycmF5X3RvX2NhbGNfaXRlbSI6NzA5LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3MTgsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NzQ1LCIuLi8uLi9wbG90cy9nZW8vY29uc3RhbnRzIjo3OTAsZDM6MTIwfV0sOTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9aS5saW5lO2UuZXhwb3J0cz11KHt9LHt6Om4ueix4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6bi50ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSx4dHlwZTpuLnh0eXBlLHl0eXBlOm4ueXR5cGUsCmNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsYXV0b2NvbnRvdXI6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImRvY2FsYyJ9LG5jb250b3Vyczp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxNSxtaW46MSxlZGl0VHlwZToiZG9jYWxjIn0sY29udG91cnM6e3N0YXJ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToiZG9wbG90In0sZW5kOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToiZG9wbG90In0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6ImRvcGxvdCJ9LGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiaGVhdG1hcCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJkb2NhbGMifSxzaG93bGluZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImRvcGxvdCJ9LHNob3dsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImRvcGxvdCJ9LGxhYmVsZm9udDp1KHt9LGwse2ZhbWlseTp1KHt9LGwuZmFtaWx5LHtlZGl0VHlwZToiZG9wbG90In0pLHNpemU6dSh7fSxsLnNpemUse2VkaXRUeXBlOiJkb3Bsb3QifSksY29sb3I6dSh7fSxsLmNvbG9yLHtlZGl0VHlwZToiZG9zdHlsZSJ9KX0pLGxhYmVsZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImRvcGxvdCJ9fSxsaW5lOntjb2xvcjp1KHt9LGMuY29sb3Ise30pLHdpZHRoOmMud2lkdGgsZGFzaDpzLHNtb290aGluZzp1KHt9LGMuc21vb3RoaW5nLHt9KX19LGEse2F1dG9jb2xvcnNjYWxlOnUoe30sYS5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pLHptaW46dSh7fSxhLnptaW4se2VkaXRUeXBlOiJkb2NhbGMifSksem1heDp1KHt9LGEuem1heCx7ZWRpdFR5cGU6ImRvY2FsYyJ9KX0se2NvbG9yYmFyOm99KX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYwMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYyNSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5NDIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDkxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj17dHlwZToibGluZWFyIixyYW5nZTpbdCxlXX07cmV0dXJuIGkuYXV0b1RpY2tzKG4sKGUtdCkvKHJ8fDE1KSksbn12YXIgaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxvPXQoIi4uL2hlYXRtYXAvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW8odCxlKSxzPWUuY29udG91cnM7aWYoITEhPT1lLmF1dG9jb250b3VyKXt2YXIgbD1uKGUuem1pbixlLnptYXgsZS5uY29udG91cnMpO3Muc2l6ZT1sLmR0aWNrLHMuc3RhcnQ9aS50aWNrRmlyc3QobCksbC5yYW5nZS5yZXZlcnNlKCkscy5lbmQ9aS50aWNrRmlyc3QobCkscy5zdGFydD09PWUuem1pbiYmKHMuc3RhcnQrPXMuc2l6ZSkscy5lbmQ9PT1lLnptYXgmJihzLmVuZC09cy5zaXplKSxzLnN0YXJ0PnMuZW5kJiYocy5zdGFydD1zLmVuZD0ocy5zdGFydCtzLmVuZCkvMiksZS5faW5wdXQuY29udG91cnN8fChlLl9pbnB1dC5jb250b3Vycz17fSksYShlLl9pbnB1dC5jb250b3Vycyx7c3RhcnQ6cy5zdGFydCxlbmQ6cy5lbmQsc2l6ZTpzLnNpemV9KSxlLl9pbnB1dC5hdXRvY29udG91cj0hMH1lbHNle3ZhciB1PXMuc3RhcnQsYz1zLmVuZCxoPWUuX2lucHV0LmNvbnRvdXJzO2lmKHU+YyYmKHMuc3RhcnQ9aC5zdGFydD1jLGM9cy5lbmQ9aC5lbmQ9dSx1PXMuc3RhcnQpLCEocy5zaXplPjApKXt2YXIgZjtmPXU9PT1jPzE6bih1LGMsZS5uY29udG91cnMpLmR0aWNrLGguc2l6ZT1zLnNpemU9Zn19cmV0dXJuIHJ9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9oZWF0bWFwL2NhbGMiOjk0M31dLDkxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3IiksYT10KCIuL21ha2VfY29sb3JfbWFwIiksbz10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxzPSJjYiIrci51aWQ7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrcykucmVtb3ZlKCksIXIuc2hvd3NjYWxlKXJldHVybiB2b2lkIG4uYXV0b01hcmdpbih0LHMpO3ZhciBsPWkodCxzKTtlWzBdLnQuY2I9bDt2YXIgdT1yLmNvbnRvdXJzLGM9ci5saW5lLGg9dS5zaXplfHwxLGY9dS5jb2xvcmluZyxkPWEocix7aXNDb2xvcmJhcjohMH0pOyJoZWF0bWFwIj09PWYmJmwuZmlsbGxldmVscyh7c3RhcnQ6ci56bWluLGVuZDpyLnptYXgsc2l6ZTooci56bWF4LXIuem1pbikvMjU0fSksbC5maWxsY29sb3IoImZpbGwiPT09Znx8ImhlYXRtYXAiPT09Zj9kOiIiKS5saW5lKHtjb2xvcjoibGluZXMiPT09Zj9kOmMuY29sb3Isd2lkdGg6ITEhPT11LnNob3dsaW5lcz9jLndpZHRoOjAsZGFzaDpjLmRhc2h9KS5sZXZlbHMoe3N0YXJ0OnUuc3RhcnQsZW5kOm8odSksc2l6ZTpofSkub3B0aW9ucyhyLmNvbG9yYmFyKSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciOjYwNSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi9lbmRfcGx1cyI6OTIwLCIuL21ha2VfY29sb3JfbWFwIjo5MjR9XSw5MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCT1RUT01TVEFSVDpbMSw5LDEzLDEwNCw3MTNdLFRPUFNUQVJUOls0LDYsNywxMDQsNzEzXSxMRUZUU1RBUlQ6WzgsMTIsMTQsMjA4LDExMTRdLFJJR0hUU1RBUlQ6WzIsMywxMSwyMDgsMTExNF0sTkVXREVMVEE6W251bGwsWy0xLDBdLFswLC0xXSxbLTEsMF0sWzEsMF0sbnVsbCxbMCwtMV0sWy0xLDBdLFswLDFdLFswLDFdLG51bGwsWzAsMV0sWzEsMF0sWzEsMF0sWzAsLTFdXSxDSE9PU0VTQURETEU6ezEwNDpbNCwxXSwyMDg6WzIsOF0sNzEzOls3LDEzXSwxMTE0OlsxMSwxNF19LFNBRERMRVJFTUFJTkRFUjp7MTo0LDI6OCw0OjEsNzoxMyw4OjIsMTE6MTQsMTM6NywxNDoxMX0sTEFCRUxESVNUQU5DRToyLExBQkVMSU5DUkVBU0U6MTAsTEFCRUxNSU46MyxMQUJFTE1BWDoxMCxMQUJFTE9QVElNSVpFUjp7RURHRUNPU1Q6MSxBTkdMRUNPU1Q6MSxORUlHSEJPUkNPU1Q6NSxTQU1FTEVWRUxGQUNUT1I6MTAsU0FNRUxFVkVMRElTVEFOQ0U6NSxNQVhDT1NUOjEwMCxJTklUSUFMU0VBUkNIUE9JTlRTOjEwLElURVJBVElPTlM6NX19fSx7fV0sOTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPW4uY29lcmNlMih0LGUsaSwiY29udG91cnMuc3RhcnQiKSxzPW4uY29lcmNlMih0LGUsaSwiY29udG91cnMuZW5kIiksbD0hMT09PW98fCExPT09cyx1PXIoImNvbnRvdXJzLnNpemUiKTshKGE9bD9lLmF1dG9jb250b3VyPSEwOnIoImF1dG9jb250b3VyIiwhMSkpJiZ1fHxyKCJuY29udG91cnMiKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6OTE0fV0sOTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC9oYXNfY29sdW1ucyIpLGE9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxvPXQoIi4vY29udG91cnNfZGVmYXVsdHMiKSxzPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9aWYoIWEodCxlLGMsdSkpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtjKCJ0ZXh0IiksYygiY29ubmVjdGdhcHMiLGkoZSkpLG8odCxlLGMpLHModCxlLGMsdSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9oZWF0bWFwL2hhc19jb2x1bW5zIjo5NDksIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjo5NTcsIi4vYXR0cmlidXRlcyI6OTE0LCIuL2NvbnRvdXJzX2RlZmF1bHRzIjo5MTgsIi4vc3R5bGVfZGVmYXVsdHMiOjkyOH1dLDkyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5kK3Quc2l6ZS8xZTZ9fSx7fV0sOTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ciYmTWF0aC5hYnModFsxXS1lWzFdKTxufWZ1bmN0aW9uIGkodCxlKXt2YXIgcj10WzJdLWVbMl0sbj10WzNdLWVbM107cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX1mdW5jdGlvbiBhKHQsZSxyLGEsYyl7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZ1t0JWcubGVuZ3RoXX12YXIgZixkPWUuam9pbigiLCIpLHA9ZCxtPXQuY3Jvc3NpbmdzW3BdLHY9byhtLHIsZSksZz1bcyh0LGUsWy12WzBdLC12WzFdXSldLHk9di5qb2luKCIsIiksYj10LnoubGVuZ3RoLHg9dC56WzBdLmxlbmd0aDtmb3IoZj0wO2Y8MWU0O2YrKyl7aWYobT4yMD8obT11LkNIT09TRVNBRERMRVttXVsodlswXXx8dlsxXSk8MD8wOjFdLHQuY3Jvc3NpbmdzW3BdPXUuU0FERExFUkVNQUlOREVSW21dKTpkZWxldGUgdC5jcm9zc2luZ3NbcF0sISh2PXUuTkVXREVMVEFbbV0pKXtsLmxvZygiRm91bmQgYmFkIG1hcmNoaW5nIGluZGV4OiIsbSxlLHQubGV2ZWwpO2JyZWFrfWcucHVzaChzKHQsZSx2KSksZVswXSs9dlswXSxlWzFdKz12WzFdLG4oZ1tnLmxlbmd0aC0xXSxnW2cubGVuZ3RoLTJdLGEsYykmJmcucG9wKCkscD1lLmpvaW4oIiwiKTt2YXIgXz12WzBdJiYoZVswXTwwfHxlWzBdPngtMil8fHZbMV0mJihlWzFdPDB8fGVbMV0+Yi0yKTtpZihwPT09ZCYmdi5qb2luKCIsIik9PT15fHxyJiZfKWJyZWFrO209dC5jcm9zc2luZ3NbcF19MWU0PT09ZiYmbC5sb2coIkluZmluaXRlIGxvb3AgaW4gY29udG91cj8iKTt2YXIgdyxNLGssQSxULFMsRSxMPW4oZ1swXSxnW2cubGVuZ3RoLTFdLGEsYyksQz0wLHo9LjIqdC5zbW9vdGhpbmcsST1bXSxEPTA7Zm9yKGY9MTtmPGcubGVuZ3RoO2YrKylFPWkoZ1tmXSxnW2YtMV0pLEMrPUUsSS5wdXNoKEUpO3ZhciBQPUMvSS5sZW5ndGgqejtmb3IoZj1nLmxlbmd0aC0yO2Y+PUQ7Zi0tKWlmKCh3PUlbZl0pPFApe2ZvcihrPTAsTT1mLTE7TT49RCYmdytJW01dPFA7TS0tKXcrPUlbTV07aWYoTCYmZj09PWcubGVuZ3RoLTIpZm9yKGs9MDtrPE0mJncrSVtrXTxQO2srKyl3Kz1JW2tdO1Q9Zi1NK2srMSxTPU1hdGguZmxvb3IoKGYrTStrKzIpLzIpLEE9THx8ZiE9PWcubGVuZ3RoLTI/THx8LTEhPT1NP1QlMj9oKFMpOlsoaChTKVswXStoKFMrMSlbMF0pLzIsKGgoUylbMV0raChTKzEpWzFdKS8yXTpnWzBdOmdbZy5sZW5ndGgtMV0sZy5zcGxpY2UoTSsxLGYtTSsxLEEpLGY9TSsxLGsmJihEPWspLEwmJihmPT09Zy5sZW5ndGgtMj9nW2tdPWdbZy5sZW5ndGgtMV06MD09PWYmJihnW2cubGVuZ3RoLTFdPWdbMF0pKX1mb3IoZy5zcGxpY2UoMCxEKSxmPTA7ZjxnLmxlbmd0aDtmKyspZ1tmXS5sZW5ndGg9MjtpZighKGcubGVuZ3RoPDIpKWlmKEwpZy5wb3AoKSx0LnBhdGhzLnB1c2goZyk7ZWxzZXtyfHxsLmxvZygiVW5jbG9zZWQgaW50ZXJpb3IgY29udG91cj8iLHQubGV2ZWwsZCxnLmpvaW4oIkwiKSk7dmFyIE89ITE7dC5lZGdlcGF0aHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKCFPJiZuKGVbMF0sZ1tnLmxlbmd0aC0xXSxhLGMpKXtnLnBvcCgpLE89ITA7dmFyIGk9ITE7dC5lZGdlcGF0aHMuZm9yRWFjaChmdW5jdGlvbihlLG8peyFpJiZuKGVbZS5sZW5ndGgtMV0sZ1swXSxhLGMpJiYoaT0hMCxnLnNwbGljZSgwLDEpLHQuZWRnZXBhdGhzLnNwbGljZShyLDEpLG89PT1yP3QucGF0aHMucHVzaChnLmNvbmNhdChlKSk6dC5lZGdlcGF0aHNbb109dC5lZGdlcGF0aHNbb10uY29uY2F0KGcsZSkpfSksaXx8KHQuZWRnZXBhdGhzW3JdPWcuY29uY2F0KGUpKX19KSx0LmVkZ2VwYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7IU8mJm4oZVtlLmxlbmd0aC0xXSxnWzBdLGEsYykmJihnLnNwbGljZSgwLDEpLHQuZWRnZXBhdGhzW3JdPWUuY29uY2F0KGcpLE89ITApfSksT3x8dC5lZGdlcGF0aHMucHVzaChnKX19ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49MCxpPTA7cmV0dXJuIHQ+MjAmJmU/MjA4PT09dHx8MTExND09PXQ/bj0wPT09clswXT8xOi0xOmk9MD09PXJbMV0/MTotMTotMSE9PXUuQk9UVE9NU1RBUlQuaW5kZXhPZih0KT9pPTE6LTEhPT11LkxFRlRTVEFSVC5pbmRleE9mKHQpP249MTotMSE9PXUuVE9QU1RBUlQuaW5kZXhPZih0KT9pPS0xOm49LTEsW24saV19ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZVswXStNYXRoLm1heChyWzBdLDApLGk9ZVsxXStNYXRoLm1heChyWzFdLDApLGE9dC56W2ldW25dLG89dC54YXhpcyxzPXQueWF4aXM7aWYoclsxXSl7dmFyIGw9KHQubGV2ZWwtYSkvKHQueltpXVtuKzFdLWEpO3JldHVybltvLmMycCgoMS1sKSp0Lnhbbl0rbCp0LnhbbisxXSwhMCkscy5jMnAodC55W2ldLCEwKSxuK2wsaV19dmFyIHU9KHQubGV2ZWwtYSkvKHQueltpKzFdW25dLWEpO3JldHVybltvLmMycCh0Lnhbbl0sITApLHMuYzJwKCgxLXUpKnQueVtpXSt1KnQueVtpKzFdLCEwKSxuLGkrdV19dmFyIGw9dCgiLi4vLi4vbGliIiksdT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHMsdTtmb3IoZT1lfHwuMDEscj1yfHwuMDEsbz0wO288dC5sZW5ndGg7bysrKXtmb3Iocz10W29dLHU9MDt1PHMuc3RhcnRzLmxlbmd0aDt1KyspaT1zLnN0YXJ0c1t1XSxhKHMsaSwiZWRnZSIsZSxyKTtmb3Iobj0wO09iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKS5sZW5ndGgmJm48MWU0OyluKyssaT1PYmplY3Qua2V5cyhzLmNyb3NzaW5ncylbMF0uc3BsaXQoIiwiKS5tYXAoTnVtYmVyKSxhKHMsaSx2b2lkIDAsZSxyKTsxZTQ9PT1uJiZsLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpfX19LHsiLi4vLi4vbGliIjo3MjQsIi4vY29uc3RhbnRzIjo5MTd9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbih0LGUscixpLCEwKX19LHsiLi4vaGVhdG1hcC9ob3ZlciI6OTUwfV0sOTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLnBsb3Qsbi5zdHlsZT10KCIuL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsIjJkTWFwIiwiY29udG91ciJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwiLi9hdHRyaWJ1dGVzIjo5MTQsIi4vY2FsYyI6OTE1LCIuL2NvbG9yYmFyIjo5MTYsIi4vZGVmYXVsdHMiOjkxOSwiLi9ob3ZlciI6OTIyLCIuL3Bsb3QiOjkyNiwiLi9zdHlsZSI6OTI3fV0sOTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycyxyPWUuc3RhcnQsbz1hKGUpLHM9ZS5zaXplfHwxLGw9TWF0aC5mbG9vcigoby1yKS9zKSsxLHU9ImxpbmVzIj09PWUuY29sb3Jpbmc/MDoxO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIGMsaCxmPXQuY29sb3JzY2FsZSxkPWYubGVuZ3RoLHA9bmV3IEFycmF5KGQpLG09bmV3IEFycmF5KGQpO2lmKCJoZWF0bWFwIj09PWUuY29sb3Jpbmcpe2Zvcih0LnphdXRvJiYhMT09PXQuYXV0b2NvbnRvdXImJih0LnptaW49ci1zLzIsdC56bWF4PXQuem1pbitsKnMpLGg9MDtoPGQ7aCsrKWM9ZltoXSxwW2hdPWNbMF0qKHQuem1heC10LnptaW4pK3Quem1pbixtW2hdPWNbMV07dmFyIHY9bi5leHRlbnQoW3Quem1pbix0LnptYXgsZS5zdGFydCxlLnN0YXJ0K3MqKGwtMSldKSxnPXZbdC56bWluPHQuem1heD8wOjFdLHk9dlt0LnptaW48dC56bWF4PzE6MF07ZyE9PXQuem1pbiYmKHAuc3BsaWNlKDAsMCxnKSxtLnNwbGljZSgwLDAsUmFuZ2VbMF0pKSx5IT09dC56bWF4JiYocC5wdXNoKHkpLG0ucHVzaChtW20ubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoaD0wO2g8ZDtoKyspYz1mW2hdLHBbaF09KGNbMF0qKGwrdS0xKS11LzIpKnMrcixtW2hdPWNbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46cCxyYW5nZTptfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MTYsIi4vZW5kX3BsdXMiOjkyMCxkMzoxMjB9XSw5MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPShlWzBdWzBdPnQ/MDoxKSsoZVswXVsxXT50PzA6MikrKGVbMV1bMV0+dD8wOjQpKyhlWzFdWzBdPnQ/MDo4KTtpZig1PT09cnx8MTA9PT1yKXtyZXR1cm4gdD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4fXJldHVybiAxNT09PXI/MDpyfXZhciBpPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCx1LGMsaCxmPXRbMF0ueixkPWYubGVuZ3RoLHA9ZlswXS5sZW5ndGgsbT0yPT09ZHx8Mj09PXA7Zm9yKHI9MDtyPGQtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KGkuQk9UVE9NU1RBUlQpKSxyPT09ZC0yJiYobz1vLmNvbmNhdChpLlRPUFNUQVJUKSksZT0wO2U8cC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KGkuTEVGVFNUQVJUKSksZT09PXAtMiYmKGE9YS5jb25jYXQoaS5SSUdIVFNUQVJUKSkscz1lKyIsIityLGw9W1tmW3JdW2VdLGZbcl1bZSsxXV0sW2ZbcisxXVtlXSxmW3IrMV1bZSsxXV1dLGg9MDtoPHQubGVuZ3RoO2grKyljPXRbaF0sKHU9bihjLmxldmVsLGwpKSYmKGMuY3Jvc3NpbmdzW3NdPXUsLTEhPT1hLmluZGV4T2YodSkmJihjLnN0YXJ0cy5wdXNoKFtlLHJdKSxtJiYtMSE9PWEuaW5kZXhPZih1LGEuaW5kZXhPZih1KSsxKSYmYy5zdGFydHMucHVzaChbZSxyXSkpKX19LHsiLi9jb25zdGFudHMiOjkxN31dLDkyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxuKXt2YXIgcz1uWzBdLnRyYWNlLHU9blswXS54LGg9blswXS55LGY9cy5jb250b3VycyxkPXMudWlkLHA9ZS54YXhpcyxtPWUueWF4aXMsdj10Ll9mdWxsTGF5b3V0LGc9ImNvbnRvdXIiK2QsXz1pKGYsZSxuWzBdKTtpZighMCE9PXMudmlzaWJsZSlyZXR1cm4gdi5fcGFwZXIuc2VsZWN0QWxsKCIuIitnKyIsLmhtIitkKS5yZW1vdmUoKSx2b2lkIHYuX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIrZCkucmVtb3ZlKCk7ImhlYXRtYXAiPT09Zi5jb2xvcmluZz8ocy56YXV0byYmITE9PT1zLmF1dG9jb250b3VyJiYocy5faW5wdXQuem1pbj1zLnptaW49Zi5zdGFydC1mLnNpemUvMixzLl9pbnB1dC56bWF4PXMuem1heD1zLnptaW4rXy5sZW5ndGgqZi5zaXplKSx5KHQsZSxbbl0pKToodi5fcGFwZXIuc2VsZWN0QWxsKCIuaG0iK2QpLnJlbW92ZSgpLHYuX2luZm9sYXllci5zZWxlY3RBbGwoImcucmFuZ2VzbGlkZXItY29udGFpbmVyIikuc2VsZWN0QWxsKCIuaG0iK2QpLnJlbW92ZSgpKSxiKF8pLHgoXyk7dmFyIHc9cC5jMnAodVswXSwhMCksTT1wLmMycCh1W3UubGVuZ3RoLTFdLCEwKSxrPW0uYzJwKGhbMF0sITApLEE9bS5jMnAoaFtoLmxlbmd0aC0xXSwhMCksVD1bW3csQV0sW00sQV0sW00sa10sW3csa11dLFM9ci5tYWtlQ29udG91ckdyb3VwKGUsbixnKTthKFMsVCxmKSxvKFMsXyxULGYpLGwoUyxfLHQsblswXSxmLFQpLGMoUyxlLHYuX2RlZnMsblswXSxUKX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49dC5zaXplLGk9W10sYT1fKHQpLG89dC5zdGFydDtvPGE7bys9bilpZihpLnB1c2goe2xldmVsOm8sY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6ci54LHk6ci55LHo6ci56LHNtb290aGluZzpyLnRyYWNlLmxpbmUuc21vb3RoaW5nfSksaS5sZW5ndGg+MWUzKXtkLndhcm4oIlRvbyBtYW55IGNvbnRvdXJzLCBjbGlwcGluZyBhdCAxMDAwIix0KTticmVha31yZXR1cm4gaX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgiZy5jb250b3VyYmciKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJiZyIsITApO3ZhciBpPW4uc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7aS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLGkuZXhpdCgpLnJlbW92ZSgpLGkuYXR0cigiZCIsIk0iK2Uuam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX1mdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIikuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VyZmlsbCIsITApO3ZhciBhPWkuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1uLmNvbG9yaW5nP2U6W10pO2EuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9cyh0LHIpO2U/Zi5zZWxlY3QodGhpcykuYXR0cigiZCIsZSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpmLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfWZ1bmN0aW9uIHModCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMl1bMF0pPC4wMX1mb3IodmFyIG4saSxhLG8scyxsLHU9TWF0aC5taW4odC56WzBdWzBdLHQuelswXVsxXSksYz10LmVkZ2VwYXRocy5sZW5ndGh8fHU8PXQubGV2ZWw/IiI6Ik0iK2Uuam9pbigiTCIpKyJaIixoPTAsZj10LmVkZ2VwYXRocy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pLG09ITA7Zi5sZW5ndGg7KXtmb3IobD1wLnNtb290aG9wZW4odC5lZGdlcGF0aHNbaF0sdC5zbW9vdGhpbmcpLGMrPW0/bDpsLnJlcGxhY2UoL15NLywiTCIpLGYuc3BsaWNlKGYuaW5kZXhPZihoKSwxKSxuPXQuZWRnZXBhdGhzW2hdW3QuZWRnZXBhdGhzW2hdLmxlbmd0aC0xXSxvPS0xLGE9MDthPDQ7YSsrKXtpZighbil7ZC5sb2coIk1pc3NpbmcgZW5kPyIsaCx0KTticmVha31mb3IoIWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMF1bMV0pPC4wMX0obil8fHIobik/IWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX0obik/IWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX0obik/cihuKSYmKGk9ZVsyXSk6aT1lWzNdOmk9ZVswXTppPWVbMV0scz0wO3M8dC5lZGdlcGF0aHMubGVuZ3RoO3MrKyl7dmFyIHY9dC5lZGdlcGF0aHNbc11bMF07TWF0aC5hYnMoblswXS1pWzBdKTwuMDE/TWF0aC5hYnMoblswXS12WzBdKTwuMDEmJih2WzFdLW5bMV0pKihpWzFdLXZbMV0pPj0wJiYoaT12LG89cyk6TWF0aC5hYnMoblsxXS1pWzFdKTwuMDE/TWF0aC5hYnMoblsxXS12WzFdKTwuMDEmJih2WzBdLW5bMF0pKihpWzBdLXZbMF0pPj0wJiYoaT12LG89cyk6ZC5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsbixpLHYpfWlmKG49aSxvPj0wKWJyZWFrO2MrPSJMIitpfWlmKG89PT10LmVkZ2VwYXRocy5sZW5ndGgpe2QubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfWg9byxtPS0xPT09Zi5pbmRleE9mKGgpLG0mJihoPWZbMF0sYys9IloiKX1mb3IoaD0wO2g8dC5wYXRocy5sZW5ndGg7aCsrKWMrPXAuc21vb3RoY2xvc2VkKHQucGF0aHNbaF0sdC5zbW9vdGhpbmcpO3JldHVybiBjfWZ1bmN0aW9uIGwodCxlLG4saSxhLG8pe3ZhciBzPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsaW5lcyIpLmRhdGEoWzBdKTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxpbmVzIiwhMCk7dmFyIGw9ITEhPT1hLnNob3dsaW5lcyx1PWEuc2hvd2xhYmVscyxjPWwmJnUsaD1yLmNyZWF0ZUxpbmVzKHMsbHx8dSxlKSxtPXIuY3JlYXRlTGluZUNsaXAocyxjLG4uX2Z1bGxMYXlvdXQuX2RlZnMsaS50cmFjZS51aWQpLHY9dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEodT9bMF06W10pO2lmKHYuZXhpdCgpLnJlbW92ZSgpLHYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksdSl7dmFyIGc9W29dLHk9W107ZC5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgYj1yLmxhYmVsRm9ybWF0dGVyKGEsaS50LmNiLG4uX2Z1bGxMYXlvdXQpLHg9cC50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChwLmZvbnQsYS5sYWJlbGZvbnQpLF89ZVswXS54YXhpcy5fbGVuZ3RoLE09ZVswXS55YXhpcy5fbGVuZ3RoLGs9e2xlZnQ6TWF0aC5tYXgob1swXVswXSwwKSxyaWdodDpNYXRoLm1pbihvWzJdWzBdLF8pLHRvcDpNYXRoLm1heChvWzBdWzFdLDApLGJvdHRvbTpNYXRoLm1pbihvWzJdWzFdLE0pfTtrLm1pZGRsZT0oay50b3Aray5ib3R0b20pLzIsay5jZW50ZXI9KGsubGVmdCtrLnJpZ2h0KS8yO3ZhciBBPU1hdGguc3FydChfKl8rTSpNKSxUPXcuTEFCRUxESVNUQU5DRSpBL01hdGgubWF4KDEsZS5sZW5ndGgvdy5MQUJFTElOQ1JFQVNFKTtoLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCxiLHgsbik7Zi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1kLmdldFZpc2libGVTZWdtZW50KHQsayxlLmhlaWdodC8yKTtpZihuJiYhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSp3LkxBQkVMTUlOKSlmb3IodmFyIGk9TWF0aC5taW4oTWF0aC5jZWlsKG4ubGVuL1QpLHcuTEFCRUxNQVgpLGE9MDthPGk7YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHQsbixlLHksayk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHksZyl9fSl9KSx4LnJlbW92ZSgpLHIuZHJhd0xhYmVscyh2LHksbixtLGM/ZzpudWxsKX11JiYhbCYmaC5yZW1vdmUoKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lngscz10LnksbD10LnRoZXRhLHU9TWF0aC5jb3MobCkqaSxjPU1hdGguc2luKGwpKmksaD0obz5uLmNlbnRlcj9uLnJpZ2h0LW86by1uLmxlZnQpLyh1K01hdGguYWJzKE1hdGguc2luKGwpKmEpKSxmPShzPm4ubWlkZGxlP24uYm90dG9tLXM6cy1uLnRvcCkvKE1hdGguYWJzKGMpK01hdGguY29zKGwpKmEpO2lmKGg8MXx8ZjwxKXJldHVybiAxLzA7dmFyIHA9TS5FREdFQ09TVCooMS8oaC0xKSsxLyhmLTEpKTtwKz1NLkFOR0xFQ09TVCpsKmw7Zm9yKHZhciBtPW8tdSx2PXMtYyxnPW8rdSx5PXMrYyxiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciB4PXJbYl0sXz1NYXRoLmNvcyh4LnRoZXRhKSp4LndpZHRoLzIsdz1NYXRoLnNpbih4LnRoZXRhKSp4LndpZHRoLzIsaz0yKmQuc2VnbWVudERpc3RhbmNlKG0sdixnLHkseC54LV8seC55LXcseC54K18seC55K3cpLyhlLmhlaWdodCt4LmhlaWdodCksQT14LmxldmVsPT09ZS5sZXZlbCxUPUE/TS5TQU1FTEVWRUxESVNUQU5DRToxO2lmKGs8PVQpcmV0dXJuIDEvMDtwKz1NLk5FSUdIQk9SQ09TVCooQT9NLlNBTUVMRVZFTEZBQ1RPUjoxKS8oay1UKX1yZXR1cm4gcH1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dmFyIGE9ImNsaXAiK24udHJhY2UudWlkLG89ci5zZWxlY3QoIi5jbGlwcyIpLnNlbGVjdEFsbCgiIyIrYSkuZGF0YShuLnRyYWNlLmNvbm5lY3RnYXBzP1tdOlswXSk7aWYoby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VyY2xpcCIsITApLmF0dHIoImlkIixhKSxvLmV4aXQoKS5yZW1vdmUoKSwhMT09PW4udHJhY2UuY29ubmVjdGdhcHMpe3ZhciBsPXtsZXZlbDouOSxjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMseDpuLngseTpuLnksejpoKG4pLHNtb290aGluZzowfTtiKFtsXSkseChbbF0pO3ZhciB1PXMobCxpKSxjPW8uc2VsZWN0QWxsKCJwYXRoIikuZGF0YShbMF0pO2MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxjLmF0dHIoImQiLHUpfWVsc2UgYT1udWxsO3QuY2FsbChwLnNldENsaXBVcmwsYSksZS5wbG90LnNlbGVjdEFsbCgiLmhtIituLnRyYWNlLnVpZCkuY2FsbChwLnNldENsaXBVcmwsYSl9ZnVuY3Rpb24gaCh0KXt2YXIgZSxyLG49dC50cmFjZS5fZW1wdHlwb2ludHMsaT1bXSxhPXQuei5sZW5ndGgsbz10LnpbMF0ubGVuZ3RoLHM9W107Zm9yKGU9MDtlPG87ZSsrKXMucHVzaCgxKTtmb3IoZT0wO2U8YTtlKyspaS5wdXNoKHMuc2xpY2UoKSk7Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKylyPW5bZV0saVtyWzBdXVtyWzFdXT0wO3JldHVybiB0LnptYXNrPWksaX12YXIgZj10KCJkMyIpLGQ9dCgiLi4vLi4vbGliIikscD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxtPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLHk9dCgiLi4vaGVhdG1hcC9wbG90IiksYj10KCIuL21ha2VfY3Jvc3NpbmdzIikseD10KCIuL2ZpbmRfYWxsX3BhdGhzIiksXz10KCIuL2VuZF9wbHVzIiksdz10KCIuL2NvbnN0YW50cyIpLE09dy5MQUJFTE9QVElNSVpFUjtyLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKW4odCxlLHJbaV0pfSxyLm1ha2VDb250b3VyR3JvdXA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQucGxvdC5zZWxlY3QoIi5tYXBsYXllciIpLnNlbGVjdEFsbCgiZy5jb250b3VyLiIrcikuZGF0YShlKTtyZXR1cm4gbi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXIiLCEwKS5jbGFzc2VkKHIsITApLG4uZXhpdCgpLnJlbW92ZSgpLG59LHIuY3JlYXRlTGluZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0uc21vb3RoaW5nLGk9dC5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZGF0YShlP3I6W10pO2lmKGkuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGV2ZWwiLCEwKSxlKXt2YXIgYT1pLnNlbGVjdEFsbCgicGF0aC5vcGVubGluZSIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucGVkZ2VwYXRoc3x8dC5lZGdlcGF0aHN9KTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgib3BlbmxpbmUiLCEwKSxhLmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiBwLnNtb290aG9wZW4odCxuKX0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKTt2YXIgbz1pLnNlbGVjdEFsbCgicGF0aC5jbG9zZWRsaW5lIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wcGF0aHN8fHQucGF0aHN9KTtvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2xvc2VkbGluZSIsITApLG8uYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIHAuc21vb3RoY2xvc2VkKHQsbil9KS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIil9cmV0dXJuIGl9LHIuY3JlYXRlTGluZUNsaXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZT8iY2xpcGxpbmUiK246bnVsbCxhPXIuc2VsZWN0KCIuY2xpcHMiKS5zZWxlY3RBbGwoIiMiK2kpLmRhdGEoZT9bMF06W10pO3JldHVybiBhLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNvbnRvdXJsaW5lY2xpcCIsITApLmF0dHIoImlkIixpKSxwLnNldENsaXBVcmwodCxpKSxhfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmxhYmVsZm9ybWF0KXJldHVybiBmLmZvcm1hdCh0LmxhYmVsZm9ybWF0KTt2YXIgbjtyZXR1cm4gZT9uPWUuYXhpczoobj17dHlwZToibGluZWFyIixfc2VwYXJhdG9yczoiLiwiLF9pZDoieWNvbnRvdXIiLG50aWNrczoodC5lbmQtdC5zdGFydCkvdC5zaXplLHNob3dleHBvbmVudDoiYWxsIixyYW5nZTpbdC5zdGFydCx0LmVuZF19LGcobixyKSx2LmNhbGNUaWNrcyhuKSxuLl90bWluPW51bGwsbi5fdG1heD1udWxsKSxmdW5jdGlvbih0KXtyZXR1cm4gdi50aWNrVGV4dChuLHQpLnRleHR9fSxyLmNhbGNUZXh0T3B0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lKHQpO3IudGV4dChpKS5jYWxsKG0uY29udmVydFRvVHNwYW5zLG4pO3ZhciBhPXAuYkJveChyLm5vZGUoKSwhMCk7cmV0dXJue3RleHQ6aSx3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodCxsZXZlbDp0LGR5OihhLnRvcCthLmJvdHRvbSkvMn19LHIuZmluZEJlc3RUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjLGg9ci53aWR0aDtlLmlzQ2xvc2VkPyhvPWUubGVuL00uSU5JVElBTFNFQVJDSFBPSU5UUyxhPWUubWluK28vMixzPWUubWF4KToobz0oZS5sZW4taCkvKE0uSU5JVElBTFNFQVJDSFBPSU5UUysxKSxhPWUubWluK28raC8yLHM9ZS5tYXgtKG8raCkvMik7Zm9yKHZhciBmPTEvMCxwPTA7cDxNLklURVJBVElPTlM7cCsrKXtmb3IodmFyIG09YTttPHM7bSs9byl7dmFyIHY9ZC5nZXRUZXh0TG9jYXRpb24odCxlLnRvdGFsLG0saCksZz11KHYscixuLGkpO2c8ZiYmKGY9ZyxjPXYsbD1tKX1pZihmPjIqTS5NQVhDT1NUKWJyZWFrO3AmJihvLz0yKSxhPWwtby8yLHM9YSsxLjUqb31pZihmPD1NLk1BWENPU1QpcmV0dXJuIGN9LHIuYWRkTGFiZWxEYXRhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lngscz10LnksbD10LnRoZXRhLHU9TWF0aC5zaW4obCksYz1NYXRoLmNvcyhsKSxoPWkqYyxmPWEqdSxkPWkqdSxwPS1hKmMsbT1bW28taC1mLHMtZC1wXSxbbytoLWYscytkLXBdLFtvK2grZixzK2QrcF0sW28taCtmLHMtZCtwXV07ci5wdXNoKHt0ZXh0OmUudGV4dCx4Om8seTpzLGR5OmUuZHksdGhldGE6bCxsZXZlbDplLmxldmVsLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fSksbi5wdXNoKG0pfSxyLmRyYXdMYWJlbHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0KyIsIit0LngrIiwiK3QueSsiLCIrdC50aGV0YX0pO2lmKGEuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKHsiZGF0YS1ub3RleCI6MSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LngrTWF0aC5zaW4odC50aGV0YSkqdC5keSxuPXQueS1NYXRoLmNvcyh0LnRoZXRhKSp0LmR5O2Yuc2VsZWN0KHRoaXMpLnRleHQodC50ZXh0KS5hdHRyKHt4OmUseTpuLHRyYW5zZm9ybToicm90YXRlKCIrMTgwKnQudGhldGEvTWF0aC5QSSsiICIrZSsiICIrbisiKSJ9KS5jYWxsKG0uY29udmVydFRvVHNwYW5zLHIpfSksaSl7Zm9yKHZhciBvPSIiLHM9MDtzPGkubGVuZ3RoO3MrKylvKz0iTSIraVtzXS5qb2luKCJMIikrIloiO3ZhciBsPW4uc2VsZWN0QWxsKCJwYXRoIikuZGF0YShbMF0pO2wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxsLmF0dHIoImQiLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MjYsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo3ODEsIi4uL2hlYXRtYXAvcGxvdCI6OTU1LCIuL2NvbnN0YW50cyI6OTE3LCIuL2VuZF9wbHVzIjo5MjAsIi4vZmluZF9hbGxfcGF0aHMiOjkyMSwiLi9tYWtlX2Nyb3NzaW5ncyI6OTI1LGQzOjEyMH1dLDkyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi9oZWF0bWFwL3N0eWxlIiksbz10KCIuL21ha2VfY29sb3JfbWFwIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy5jb250b3VyIik7ZS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhY2Uub3BhY2l0eX0pLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2UsYT1yLmNvbnRvdXJzLHM9ci5saW5lLGw9YS5zaXplfHwxLHU9YS5zdGFydCxjPSJjb25zdHJhaW50Ij09PWEudHlwZSxoPSFjJiYibGluZXMiPT09YS5jb2xvcmluZyxmPSFjJiYiZmlsbCI9PT1hLmNvbG9yaW5nLGQ9aHx8Zj9vKHIpOm51bGw7ZS5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxoP2QodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSk7dmFyIHA9YS5sYWJlbGZvbnQ7aWYoZS5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyB0ZXh0IikuZWFjaChmdW5jdGlvbih0KXtpLmZvbnQobi5zZWxlY3QodGhpcykse2ZhbWlseTpwLmZhbWlseSxzaXplOnAuc2l6ZSxjb2xvcjpwLmNvbG9yfHwoaD9kKHQubGV2ZWwpOnMuY29sb3IpfSl9KSxjKWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoZil7dmFyIG07ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09bSYmKG09dC5sZXZlbCksZCh0LmxldmVsKy41KmwpfSksdm9pZCAwPT09bSYmKG09dSksZS5zZWxlY3RBbGwoImcuY29udG91cmJnIHBhdGgiKS5zdHlsZSgiZmlsbCIsZChtLS41KmwpKX19KSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vaGVhdG1hcC9zdHlsZSI6OTU2LCIuL21ha2VfY29sb3JfbWFwIjo5MjQsZDM6MTIwfV0sOTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbCx1PXIoImNvbnRvdXJzLmNvbG9yaW5nIiksYz0iIjtpZigiZmlsbCI9PT11JiYobD1yKCJjb250b3Vycy5zaG93bGluZXMiKSksITEhPT1sJiYoImxpbmVzIiE9PXUmJihjPXIoImxpbmUuY29sb3IiLG98fCIjMDAwIikpLHIoImxpbmUud2lkdGgiLHZvaWQgMD09PXM/LjU6cykscigibGluZS5kYXNoIikpLHIoImxpbmUuc21vb3RoaW5nIiksIm5vbmUiIT09dSYmbih0LGUsYSxyLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxyKCJjb250b3Vycy5zaG93bGFiZWxzIikpe3ZhciBoPWEuZm9udDtpLmNvZXJjZUZvbnQociwiY29udG91cnMubGFiZWxmb250Iix7ZmFtaWx5OmguZmFtaWx5LHNpemU6aC5zaXplLGNvbG9yOmN9KSxyKCJjb250b3Vycy5sYWJlbGZvcm1hdCIpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MTEsIi4uLy4uL2xpYiI6NzI0fV0sOTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT1pLmNvbnRvdXJzLG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW8ubGluZSxoPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXUoe30se2NhcnBldDp7dmFsVHlwZToic3RyaW5nIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UsYXR5cGU6bi54dHlwZSxidHlwZTpuLnl0eXBlLG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwiZmlsbCJdLGV4dHJhczpbIm5vbmUiXX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxldmVscyIsImNvbnN0cmFpbnQiXSxkZmx0OiJsZXZlbHMiLGVkaXRUeXBlOiJkb2NhbGMifSxzdGFydDphLnN0YXJ0LGVuZDphLmVuZCxzaXplOmEuc2l6ZSxjb2xvcmluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJkb2NhbGMifSxzaG93bGluZXM6YS5zaG93bGluZXMsc2hvd2xhYmVsczphLnNob3dsYWJlbHMsbGFiZWxmb250OmEubGFiZWxmb250LGxhYmVsZm9ybWF0OmEubGFiZWxmb3JtYXQsb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KGguSU5FUVVBTElUWV9PUFMpLmNvbmNhdChoLklOVEVSVkFMX09QUykuY29uY2F0KGguU0VUX09QUyksZGZsdDoiPSIsZWRpdFR5cGU6ImRvY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiZG9jYWxjIn19LGxpbmU6e2NvbG9yOnUoe30sYy5jb2xvcix7fSksd2lkdGg6Yy53aWR0aCxkYXNoOmMuZGFzaCxzbW9vdGhpbmc6dSh7fSxjLnNtb290aGluZyx7fSl9fSxzLHthdXRvY29sb3JzY2FsZTp1KHt9LHMuYXV0b2NvbG9yc2NhbGUse2RmbHQ6ITF9KX0se2NvbG9yYmFyOmx9KX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYwMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiOjkxNCwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5NDIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNSwiLi9jb25zdGFudHMiOjkzMn1dLDkzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj17dHlwZToibGluZWFyIixyYW5nZTpbdCxlXX07cmV0dXJuIG8uYXV0b1RpY2tzKG4sKGUtdCkvKHJ8fDE1KSksbn1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0KXtBPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGEubm90aWZpZXIoImNhbm5vdCBmYXN0LXpzbW9vdGg6ICIrdCl9dmFyIG4saSxvLHMsZyx5LGIseCxfPWUuY2FycGV0VHJhY2Usdz1fLmFheGlzLE09Xy5iYXhpcyxrPWwudHJhY2VJcyhlLCJjb250b3VyIiksQT1rPyJiZXN0IjplLnpzbW9vdGg7aWYody5fbWluRHRpY2s9MCxNLl9taW5EdGljaz0wLGMoZSkmJmgoZSx3LE0sImEiLCJiIixbInoiXSksbj1lLmE/dy5tYWtlQ2FsY2RhdGEoZSwiYSIpOltdLHM9ZS5iP00ubWFrZUNhbGNkYXRhKGUsImIiKTpbXSxpPWUuYTB8fDAsbz1lLmRhfHwxLGc9ZS5iMHx8MCx5PWUuZGJ8fDEsYj1mKGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bShiKSxlLl9pbnRlcnB6PXAoYixlLl9lbXB0eXBvaW50cyxlLl9pbnRlcnB6KSwiZmFzdCI9PT1BKWlmKCJsb2ciPT09dy50eXBlfHwibG9nIj09PU0udHlwZSlyKCJsb2cgYXhpcyBmb3VuZCIpO2Vsc2V7aWYobi5sZW5ndGgpe3ZhciBUPShuW24ubGVuZ3RoLTFdLW5bMF0pLyhuLmxlbmd0aC0xKSxTPU1hdGguYWJzKFQvMTAwKTtmb3IoeD0wO3g8bi5sZW5ndGgtMTt4KyspaWYoTWF0aC5hYnMoblt4KzFdLW5beF0tVCk+Uyl7cigiYSBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fWlmKHMubGVuZ3RoJiYiZmFzdCI9PT1BKXt2YXIgRT0oc1tzLmxlbmd0aC0xXS1zWzBdKS8ocy5sZW5ndGgtMSksTD1NYXRoLmFicyhFLzEwMCk7Zm9yKHg9MDt4PHMubGVuZ3RoLTE7eCsrKWlmKE1hdGguYWJzKHNbeCsxXS1zW3hdLUUpPkwpe3IoImIgc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX19dmFyIEM9ZChiKSx6PSJzY2FsZWQiPT09ZS54dHlwZT8iIjpuLEk9dihlLHosaSxvLEMsdyksRD0ic2NhbGVkIj09PWUueXR5cGU/IiI6cyxQPXYoZSxELGcseSxiLmxlbmd0aCxNKSxPPXthOkksYjpQLHo6Yn07cmV0dXJuImxldmVscyI9PT1lLmNvbnRvdXJzLnR5cGUmJnUoZSxiLCIiLCJ6IiksW09dfXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsbD10KCIuLi8uLi9yZWdpc3RyeSIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxjPXQoIi4uL2hlYXRtYXAvaGFzX2NvbHVtbnMiKSxoPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IiksZj10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5IiksZD10KCIuLi9oZWF0bWFwL21heF9yb3dfbGVuZ3RoIikscD10KCIuLi9oZWF0bWFwL2ludGVycDJkIiksbT10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLHY9dCgiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IiksZz10KCIuL2RlZmF1bHRzIikseT10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jYXJwZXRUcmFjZT15KHQsZSk7aWYociYmci52aXNpYmxlJiYibGVnZW5kb25seSIhPT1yLnZpc2libGUpe2lmKCFlLmF8fCFlLmIpe3ZhciBhPXQuZGF0YVtyLmluZGV4XSxsPXQuZGF0YVtlLmluZGV4XTtsLmF8fChsLmE9YS5hKSxsLmJ8fChsLmI9YS5iKSxnKGwsZSxlLl9kZWZhdWx0Q29sb3IsdC5fZnVsbExheW91dCl9dmFyIHU9aSh0LGUpLGM9ZS5jb250b3VycztpZighMD09PWUuYXV0b2NvbnRvdXIpe3ZhciBoPW4oZS56bWluLGUuem1heCxlLm5jb250b3Vycyk7Yy5zaXplPWguZHRpY2ssYy5zdGFydD1vLnRpY2tGaXJzdChoKSxoLnJhbmdlLnJldmVyc2UoKSxjLmVuZD1vLnRpY2tGaXJzdChoKSxjLnN0YXJ0PT09ZS56bWluJiYoYy5zdGFydCs9Yy5zaXplKSxjLmVuZD09PWUuem1heCYmKGMuZW5kLT1jLnNpemUpLGMuc3RhcnQ+Yy5lbmQmJihjLnN0YXJ0PWMuZW5kPShjLnN0YXJ0K2MuZW5kKS8yKSxlLl9pbnB1dC5jb250b3Vycz1zKHt9LGMpfWVsc2V7dmFyIGY9Yy5zdGFydCxkPWMuZW5kLHA9ZS5faW5wdXQuY29udG91cnM7aWYoZj5kJiYoYy5zdGFydD1wLnN0YXJ0PWQsZD1jLmVuZD1wLmVuZD1mLGY9Yy5zdGFydCksIShjLnNpemU+MCkpe3ZhciBtO209Zj09PWQ/MTpuKGYsZCxlLm5jb250b3VycykuZHRpY2sscC5zaXplPWMuc2l6ZT1tfX1yZXR1cm4gdX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDgsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo4OTgsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjk0NCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjk0NiwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiOjk0OCwiLi4vaGVhdG1hcC9oYXNfY29sdW1ucyI6OTQ5LCIuLi9oZWF0bWFwL2ludGVycDJkIjo5NTIsIi4uL2hlYXRtYXAvbWFrZV9ib3VuZF9hcnJheSI6OTUzLCIuLi9oZWF0bWFwL21heF9yb3dfbGVuZ3RoIjo5NTQsIi4vZGVmYXVsdHMiOjkzNn1dLDkzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9bi5hLmxlbmd0aCxsPW4uYi5sZW5ndGgsdT1uLnosYz0tMS8wLGg9MS8wO2ZvcihpPTA7aTxsO2krKyloPU1hdGgubWluKGgsdVtpXVswXSksaD1NYXRoLm1pbihoLHVbaV1bcy0xXSksYz1NYXRoLm1heChjLHVbaV1bMF0pLGM9TWF0aC5tYXgoYyx1W2ldW3MtMV0pO2ZvcihpPTE7aTxzLTE7aSsrKWg9TWF0aC5taW4oaCx1WzBdW2ldKSxoPU1hdGgubWluKGgsdVtsLTFdW2ldKSxjPU1hdGgubWF4KGMsdVswXVtpXSksYz1NYXRoLm1heChjLHVbbC0xXVtpXSk7c3dpdGNoKGUpe2Nhc2UiPiI6Y2FzZSI+PSI6bi5jb250b3Vycy52YWx1ZT5jJiYodFswXS5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSI8IjpjYXNlIjw9IjpuLmNvbnRvdXJzLnZhbHVlPGgmJih0WzBdLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIltdIjpjYXNlIigpIjphPU1hdGgubWluLmFwcGx5KG51bGwsbi5jb250b3Vycy52YWx1ZSksbz1NYXRoLm1heC5hcHBseShudWxsLG4uY29udG91cnMudmFsdWUpLG88aCYmKHRbMF0ucHJlZml4Qm91bmRhcnk9ITApLGE+YyYmKHRbMF0ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiXVsiOmNhc2UiKSgiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxuLmNvbnRvdXJzLnZhbHVlKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsbi5jb250b3Vycy52YWx1ZSksYTxoJiZvPmMmJih0WzBdLnByZWZpeEJvdW5kYXJ5PSEwKX19fSx7fV0sOTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17SU5FUVVBTElUWV9PUFM6WyI9IiwiPCIsIj49IiwiPiIsIjw9Il0sSU5URVJWQUxfT1BTOlsiW10iLCIoKSIsIlspIiwiKF0iLCJdWyIsIikoIiwiXSgiLCIpWyJdLFNFVF9PUFM6WyJ7fSIsIn17Il19fSx7fV0sOTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBzKHQpPyt0Om51bGx9dmFyIG4saT1BcnJheS5pc0FycmF5KGUpO3JldHVybi0xIT09by5JTkVRVUFMSVRZX09QUy5pbmRleE9mKHQpP249cihpP2VbMF06ZSk6LTEhPT1vLklOVEVSVkFMX09QUy5pbmRleE9mKHQpP249aT9bcihlWzBdKSxyKGVbMV0pXTpbcihlKSxyKGUpXTotMSE9PW8uU0VUX09QUy5pbmRleE9mKHQpJiYobj1pP2UubWFwKHIpOltyKGUpXSksbn1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlKXtlPW4odCxlKTt2YXIgcj1NYXRoLm1pbihlWzBdLGVbMV0pLGk9TWF0aC5tYXgoZVswXSxlWzFdKTtyZXR1cm57c3RhcnQ6cixlbmQ6aSxzaXplOmktcn19fWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPW4odCxlKSx7c3RhcnQ6ZSxlbmQ6MS8wLHNpemU6MS8wfX19dmFyIG89dCgiLi9jb25zdGFudHMiKSxzPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzWyJbXSJdPWkoIltdIiksZS5leHBvcnRzWyIoKSJdPWkoIigpIiksZS5leHBvcnRzWyJbKSJdPWkoIlspIiksZS5leHBvcnRzWyIoXSJdPWkoIihdIiksZS5leHBvcnRzWyJdWyJdPWkoIl1bIiksZS5leHBvcnRzWyIpKCJdPWkoIikoIiksZS5leHBvcnRzWyIpWyJdPWkoIilbIiksZS5leHBvcnRzWyJdKCJdPWkoIl0oIiksZS5leHBvcnRzWyI+Il09YSgiPiIpLGUuZXhwb3J0c1siPj0iXT1hKCI+PSIpLGUuZXhwb3J0c1siPCJdPWEoIjwiKSxlLmV4cG9ydHNbIjw9Il09YSgiPD0iKSxlLmV4cG9ydHNbIj0iXT1hKCI9Iil9LHsiLi9jb25zdGFudHMiOjkzMiwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDkzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0cmFpbnRfbWFwcGluZyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjstMT09PVsiPSIsIjwiLCI8PSIsIj4iLCI+PSJdLmluZGV4T2YoZS5vcGVyYXRpb24pPyh0KCJjb250b3Vycy52YWx1ZSIsWzAsMV0pLEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZS5sZW5ndGg+Mj9lLnZhbHVlPWUudmFsdWUuc2xpY2UoMik6MD09PWUubGVuZ3RoP2UudmFsdWU9WzAsMV06ZS5sZW5ndGg8Mj8ocj1wYXJzZUZsb2F0KGUudmFsdWVbMF0pLGUudmFsdWU9W3IscisxXSk6ZS52YWx1ZT1bcGFyc2VGbG9hdChlLnZhbHVlWzBdKSxwYXJzZUZsb2F0KGUudmFsdWVbMV0pXTppKGUudmFsdWUpJiYocj1wYXJzZUZsb2F0KGUudmFsdWUpLGUudmFsdWU9W3IscisxXSkpOih0KCJjb250b3Vycy52YWx1ZSIsMCksaShlLnZhbHVlKXx8KEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZT1wYXJzZUZsb2F0KGUudmFsdWVbMF0pOmUudmFsdWU9MCkpO3ZhciBhPW5bZS5vcGVyYXRpb25dKGUudmFsdWUpO2Uuc3RhcnQ9YS5zdGFydCxlLmVuZD1hLmVuZCxlLnNpemU9YS5zaXplfX0seyIuL2NvbnN0cmFpbnRfbWFwcGluZyI6OTMzLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sOTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJldmVyc2UoKX0scz1mdW5jdGlvbih0KXtyZXR1cm4gdH07c3dpdGNoKGUpe2Nhc2UiXVsiOmNhc2UiKVsiOmNhc2UiXSgiOmNhc2UiKSgiOnZhciBsPW87bz1zLHM9bDtjYXNlIltdIjpjYXNlIlspIjpjYXNlIihdIjpjYXNlIigpIjppZigyIT09dC5sZW5ndGgpcmV0dXJuIHZvaWQgbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IHJhbmdlIG9wZXJhdGlvbi4iKTtmb3IoaT10WzBdLGE9dFsxXSxyPTA7cjxpLmVkZ2VwYXRocy5sZW5ndGg7cisrKWkuZWRnZXBhdGhzW3JdPW8oaS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxpLnBhdGhzLmxlbmd0aDtyKyspaS5wYXRoc1tyXT1vKGkucGF0aHNbcl0pO2Zvcig7YS5lZGdlcGF0aHMubGVuZ3RoOylpLmVkZ2VwYXRocy5wdXNoKHMoYS5lZGdlcGF0aHMuc2hpZnQoKSkpO2Zvcig7YS5wYXRocy5sZW5ndGg7KWkucGF0aHMucHVzaChzKGEucGF0aHMuc2hpZnQoKSkpO3QucG9wKCk7YnJlYWs7Y2FzZSI+PSI6Y2FzZSI+IjppZigxIT09dC5sZW5ndGgpcmV0dXJuIHZvaWQgbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IG9wZXJhdGlvbi4iKTtmb3IoaT10WzBdLHI9MDtyPGkuZWRnZXBhdGhzLmxlbmd0aDtyKyspaS5lZGdlcGF0aHNbcl09byhpLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGkucGF0aHMubGVuZ3RoO3IrKylpLnBhdGhzW3JdPW8oaS5wYXRoc1tyXSl9fX0seyIuLi8uLi9saWIiOjcyNH1dLDkzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksbD10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksdT10KCIuL2NvbnN0cmFpbnRfdmFsdWVfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aWYoZigiY2FycGV0IiksdC5hJiZ0LmIpe3ZhciBkLHAsbSx2LGc7aWYoIWkodCxlLGYsaCwiYSIsImIiKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2YoInRleHQiKSxmKCJjb250b3Vycy50eXBlIik7dmFyIHk9ZS5jb250b3VycztpZigiY29uc3RyYWludCI9PT15LnR5cGUpe2YoImNvbnRvdXJzLm9wZXJhdGlvbiIpLHUoZix5KSxuLmNvZXJjZSh0LGUsbCwic2hvd2xlZ2VuZCIsITApLGYoImNvbnRvdXJzLmNvbG9yaW5nIiwiPSI9PT15Lm9wZXJhdGlvbj8ibGluZXMiOiJmaWxsIiksZigiY29udG91cnMuc2hvd2xpbmVzIiwhMCksIj0iPT09eS5vcGVyYXRpb24mJih5LmNvbG9yaW5nPSJsaW5lcyIpLHModCxlLHIsZik7dmFyIGI9ZS5maWxsY29sb3I/YyhlLmZpbGxjb2xvciwxKTpyO28odCxlLGYsaCxiLDIpLCI9Ij09PXkub3BlcmF0aW9uJiYoZigibGluZS5jb2xvciIsciksImZpbGwiPT09eS5jb2xvcmluZyYmKHkuY29sb3Jpbmc9ImxpbmVzIiksImxpbmVzIj09PXkuY29sb3JpbmcmJmRlbGV0ZSBlLmZpbGxjb2xvciksZGVsZXRlIGUuc2hvd3NjYWxlLGRlbGV0ZSBlLmF1dG9jb250b3VyLGRlbGV0ZSBlLmF1dG9jb2xvcnNjYWxlLGRlbGV0ZSBlLmNvbG9yc2NhbGUsZGVsZXRlIGUubmNvbnRvdXJzLGRlbGV0ZSBlLmNvbG9yYmFyLGUubGluZSYmKGRlbGV0ZSBlLmxpbmUuYXV0b2NvbG9yc2NhbGUsZGVsZXRlIGUubGluZS5jb2xvcnNjYWxlLGRlbGV0ZSBlLmxpbmUubWluY29sb3IsZGVsZXRlIGUubGluZS5tYXhjb2xvcil9ZWxzZSBuLmNvZXJjZSh0LGUsbCwic2hvd2xlZ2VuZCIsITEpLHA9bi5jb2VyY2UyKHQsZSxhLCJjb250b3Vycy5zdGFydCIpLG09bi5jb2VyY2UyKHQsZSxhLCJjb250b3Vycy5lbmQiKSxkPWYoImNvbnRvdXJzLnNpemUiKSxmKCJjb250b3Vycy5jb2xvcmluZyIpLHY9ITE9PT1wfHwhMT09PW0sZz12P2UuYXV0b2NvbnRvdXI9ITA6ZigiYXV0b2NvbnRvdXIiLCExKSwhZyYmZHx8ZigibmNvbnRvdXJzIiksbyh0LGUsZixoKSxkZWxldGUgZS52YWx1ZSxkZWxldGUgZS5vcGVyYXRpb259ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIjo5MjgsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjo5NTcsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDMyLCIuL2F0dHJpYnV0ZXMiOjkyOSwiLi9jb25zdHJhaW50X3ZhbHVlX2RlZmF1bHRzIjo5MzR9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGk9dC5zaXplLGE9W10sbz1yLnRyYWNlLmNhcnBldFRyYWNlLHM9dC5zdGFydDtzPHQuZW5kK2kvMTA7cys9aSlpZihhLnB1c2goe2xldmVsOnMsY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6by5hYXhpcyx5YXhpczpvLmJheGlzLHg6ci5hLHk6ci5iLHo6ci56LHNtb290aGluZzpyLnRyYWNlLmxpbmUuc21vb3RoaW5nfSksYS5sZW5ndGg+MWUzKXtuLndhcm4oIlRvbyBtYW55IGNvbnRvdXJzLCBjbGlwcGluZyBhdCAxMDAwIix0KTticmVha31yZXR1cm4gYX19LHsiLi4vLi4vbGliIjo3MjR9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vY29udG91ci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyY2FycGV0IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsImNhcnBldCIsImNvbnRvdXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImhhc0xpbmVzIiwiY2FycGV0RGVwZW5kZW50Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc0LCIuLi9jb250b3VyL2NvbG9yYmFyIjo5MTYsIi4uL2NvbnRvdXIvc3R5bGUiOjkyNywiLi9hdHRyaWJ1dGVzIjo5MjksIi4vY2FsYyI6OTMwLCIuL2RlZmF1bHRzIjo5MzYsIi4vcGxvdCI6OTQxfV0sOTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lIiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwsdSxjKXtmdW5jdGlvbiBoKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMF1bMV0pPFN9ZnVuY3Rpb24gZih0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzJdWzFdKTxTfWZ1bmN0aW9uIGQodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclswXVswXSk8VH1mdW5jdGlvbiBwKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMl1bMF0pPFR9ZnVuY3Rpb24gbSh0LGUpe3ZhciByLG4sYSxvLG09IiI7Zm9yKGgodCkmJiFwKHQpfHxmKHQpJiYhZCh0KT8obz1zLmFheGlzLGE9aShzLGwsW3RbMF0sZVswXV0sLjUqKHRbMV0rZVsxXSkpKToobz1zLmJheGlzLGE9aShzLGwsLjUqKHRbMF0rZVswXSksW3RbMV0sZVsxXV0pKSxyPTE7cjxhLmxlbmd0aDtyKyspZm9yKG0rPW8uc21vb3RoaW5nPyJDIjoiTCIsbj0wO248YVtyXS5sZW5ndGg7bisrKXt2YXIgdj1hW3JdW25dO20rPVt1LmMycCh2WzBdKSxjLmMycCh2WzFdKV0rIiAifXJldHVybiBtfXZhciB2LGcseSxiLHgsXyx3LE09IiIsaz1lLmVkZ2VwYXRocy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pLEE9ITAsVD0xZS00Kk1hdGguYWJzKHJbMF1bMF0tclsyXVswXSksUz0xZS00Kk1hdGguYWJzKHJbMF1bMV0tclsyXVsxXSk7Zm9yKHY9MCxnPW51bGw7ay5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1t2XVswXTtmb3IoZyYmKE0rPW0oZyxFKSksdz1uLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbdl0ubWFwKG8pLGUuc21vb3RoaW5nKSxNKz1BP3c6dy5yZXBsYWNlKC9eTS8sIkwiKSxrLnNwbGljZShrLmluZGV4T2YodiksMSksZz1lLmVkZ2VwYXRoc1t2XVtlLmVkZ2VwYXRoc1t2XS5sZW5ndGgtMV0seD0tMSxiPTA7Yjw0O2IrKyl7aWYoIWcpe2EubG9nKCJNaXNzaW5nIGVuZD8iLHYsZSk7YnJlYWt9Zm9yKGgoZykmJiFwKGcpP3k9clsxXTpkKGcpP3k9clswXTpmKGcpP3k9clszXTpwKGcpJiYoeT1yWzJdKSxfPTA7XzxlLmVkZ2VwYXRocy5sZW5ndGg7XysrKXt2YXIgTD1lLmVkZ2VwYXRoc1tfXVswXTtNYXRoLmFicyhnWzBdLXlbMF0pPFQ/TWF0aC5hYnMoZ1swXS1MWzBdKTxUJiYoTFsxXS1nWzFdKSooeVsxXS1MWzFdKT49MCYmKHk9TCx4PV8pOk1hdGguYWJzKGdbMV0teVsxXSk8Uz9NYXRoLmFicyhnWzFdLUxbMV0pPFMmJihMWzBdLWdbMF0pKih5WzBdLUxbMF0pPj0wJiYoeT1MLHg9Xyk6YS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsZyx5LEwpfWlmKHg+PTApYnJlYWs7TSs9bShnLHkpLGc9eX1pZih4PT09ZS5lZGdlcGF0aHMubGVuZ3RoKXthLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha312PXgsQT0tMT09PWsuaW5kZXhPZih2KSxBJiYodj1rWzBdLE0rPW0oZyx5KSsiWiIsZz1udWxsKX1mb3Iodj0wO3Y8ZS5wYXRocy5sZW5ndGg7disrKU0rPW4uc21vb3RoY2xvc2VkKGUucGF0aHNbdl0ubWFwKG8pLGUuc21vb3RoaW5nKTtyZXR1cm4gTX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MjYsIi4uLy4uL2xpYiI6NzI0LCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjg4MX1dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsKdmFyIHIsbixpLGEsbyxzLGwsdSxjO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihhPXRbcl0sbz1hLnBlZGdlcGF0aHM9W10scz1hLnBwYXRocz1bXSxuPTA7bjxhLmVkZ2VwYXRocy5sZW5ndGg7bisrKXtmb3IoYz1hLmVkZ2VwYXRoc1tuXSxsPVtdLGk9MDtpPGMubGVuZ3RoO2krKylsW2ldPWUoY1tpXSk7by5wdXNoKGwpfWZvcihuPTA7bjxhLnBhdGhzLmxlbmd0aDtuKyspe2ZvcihjPWEucGF0aHNbbl0sdT1bXSxpPTA7aTxjLmxlbmd0aDtpKyspdVtpXT1lKGNbaV0pO3MucHVzaCh1KX19fX0se31dLDk0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPW8uYWIyeHkodFswXSx0WzFdLCEwKTtyZXR1cm5bXy5jMnAoZVswXSksVC5jMnAoZVsxXSldfXZhciBhPXJbMF0udHJhY2Usbz1hLmNhcnBldFRyYWNlPWsodCxhKSxzPXQuY2FsY2RhdGFbby5pbmRleF1bMF07aWYoby52aXNpYmxlJiYibGVnZW5kb25seSIhPT1vLnZpc2libGUpe3ZhciBsPXJbMF0uYSxoPXJbMF0uYixtPWEuY29udG91cnMsYj1hLnVpZCxfPWUueGF4aXMsVD1lLnlheGlzLFM9dC5fZnVsbExheW91dCxFPSJjb250b3VyIitiLEw9dyhtLGUsclswXSksQz0iY29uc3RyYWludCI9PT1hLmNvbnRvdXJzLnR5cGU7aWYoITAhPT1hLnZpc2libGUpcmV0dXJuIHZvaWQgUy5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmNiIitiKS5yZW1vdmUoKTt2YXIgej1bW2xbMF0saFtoLmxlbmd0aC0xXV0sW2xbbC5sZW5ndGgtMV0saFtoLmxlbmd0aC0xXV0sW2xbbC5sZW5ndGgtMV0saFswXV0sW2xbMF0saFswXV1dO3YoTCk7dmFyIEk9MWUtOCoobFtsLmxlbmd0aC0xXS1sWzBdKSxEPTFlLTgqKGhbaC5sZW5ndGgtMV0taFswXSk7ZyhMLEksRCksImNvbnN0cmFpbnQiPT09YS5jb250b3Vycy50eXBlJiYoeChMLGEuY29udG91cnMub3BlcmF0aW9uKSxBKEwsYS5jb250b3Vycy5vcGVyYXRpb24seixhKSksTShMLG4pO3ZhciBQLE8sUixGLGo9eS5tYWtlQ29udG91ckdyb3VwKGUscixFKSxOPVtdO2ZvcihGPXMuY2xpcHNlZ21lbnRzLmxlbmd0aC0xO0Y+PTA7Ri0tKVA9cy5jbGlwc2VnbWVudHNbRl0sTz1mKFtdLFAueCxfLmMycCksUj1mKFtdLFAueSxULmMycCksTy5yZXZlcnNlKCksUi5yZXZlcnNlKCksTi5wdXNoKGQoTyxSLFAuYmljdWJpYykpO3ZhciBCPSJNIitOLmpvaW4oIkwiKSsiWiI7dShqLHMuY2xpcHNlZ21lbnRzLF8sVCxDLG0uY29sb3JpbmcpLGMoYSxqLF8sVCxMLHosbixvLHMsbS5jb2xvcmluZyxCKSxpKGosTCx0LHJbMF0sbSxlLG8pLHAuc2V0Q2xpcFVybChqLG8uX2NsaXBQYXRoSWQpfX1mdW5jdGlvbiBpKHQsZSxyLG4saSxvLHMpe3ZhciBsPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsaW5lcyIpLmRhdGEoWzBdKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxpbmVzIiwhMCk7dmFyIHU9ITEhPT1pLnNob3dsaW5lcyxjPWkuc2hvd2xhYmVscyxmPXUmJmMsZD15LmNyZWF0ZUxpbmVzKGwsdXx8YyxlKSx2PXkuY3JlYXRlTGluZUNsaXAobCxmLHIuX2Z1bGxMYXlvdXQuX2RlZnMsbi50cmFjZS51aWQpLGc9dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoYz9bMF06W10pO2lmKGcuZXhpdCgpLnJlbW92ZSgpLGcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksYyl7dmFyIHg9by54YXhpcyxfPW8ueWF4aXMsdz14Ll9sZW5ndGgsTT1fLl9sZW5ndGgsaz1bW1swLDBdLFt3LDBdLFt3LE1dLFswLE1dXV0sQT1bXTttLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBUPXkubGFiZWxGb3JtYXR0ZXIoaSxuLnQuY2Isci5fZnVsbExheW91dCksUz1wLnRlc3Rlci5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKHAuZm9udCxpLmxhYmVsZm9udCksRT17bGVmdDowLHJpZ2h0OncsY2VudGVyOncvMix0b3A6MCxib3R0b206TSxtaWRkbGU6TS8yfSxMPU1hdGguc3FydCh3KncrTSpNKSxDPWIuTEFCRUxESVNUQU5DRSpML01hdGgubWF4KDEsZS5sZW5ndGgvYi5MQUJFTElOQ1JFQVNFKTtkLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9eS5jYWxjVGV4dE9wdHModC5sZXZlbCxULFMscik7aC5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaChmdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9bS5nZXRWaXNpYmxlU2VnbWVudChuLEUsZS5oZWlnaHQvMik7aWYoaSYmKGEobixyLHQsaSxzLGUuaGVpZ2h0KSwhKGkubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpiLkxBQkVMTUlOKSkpZm9yKHZhciBvPU1hdGgubWluKE1hdGguY2VpbChpLmxlbi9DKSxiLkxBQkVMTUFYKSxsPTA7bDxvO2wrKyl7dmFyIHU9eS5maW5kQmVzdFRleHRMb2NhdGlvbihuLGksZSxBLEUpO2lmKCF1KWJyZWFrO3kuYWRkTGFiZWxEYXRhKHUsZSxBLGspfX0pfSksUy5yZW1vdmUoKSx5LmRyYXdMYWJlbHMoZyxBLHIsdixmP2s6bnVsbCl9YyYmIXUmJmQucmVtb3ZlKCl9ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7ZnVuY3Rpb24gdSh0LGUpe3ZhciByLG49MDtyZXR1cm4oTWF0aC5hYnModFswXS1mKTwuMXx8TWF0aC5hYnModFswXS1kKTwuMSkmJihyPXMoaS5keHlkYl9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpsKGUscikvMikpLChNYXRoLmFicyh0WzFdLXApPC4xfHxNYXRoLmFicyh0WzFdLW0pPC4xKSYmKHI9cyhpLmR4eWRhX3JvdWdoKHRbMF0sdFsxXSwuMSkpLG49TWF0aC5tYXgobixhKmwoZSxyKS8yKSksbn1mb3IodmFyIGMsaD0wO2g8ci5wZWRnZXBhdGhzLmxlbmd0aDtoKyspZT09PXIucGVkZ2VwYXRoc1toXSYmKGM9ci5lZGdlcGF0aHNbaF0pO2lmKGMpe3ZhciBmPWkuYVswXSxkPWkuYVtpLmEubGVuZ3RoLTFdLHA9aS5iWzBdLG09aS5iW2kuYi5sZW5ndGgtMV0sdj1vKHQsMCwxKSxnPW8odCxuLnRvdGFsLG4udG90YWwtMSkseT11KGNbMF0sdiksYj1uLnRvdGFsLXUoY1tjLmxlbmd0aC0xXSxnKTtuLm1pbjx5JiYobi5taW49eSksbi5tYXg+YiYmKG4ubWF4PWIpLG4ubGVuPW4ubWF4LW4ubWlufX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24gcyh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWZ1bmN0aW9uIHUodCxlLHIsbixpLGEpe3ZhciBvLHMsbCx1LGM9dC5zZWxlY3RBbGwoImcuY29udG91cmJnIikuZGF0YShbMF0pO2MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VyYmciLCEwKTt2YXIgaD1jLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiIT09YXx8aT9bXTpbMF0pO2guZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxoLmV4aXQoKS5yZW1vdmUoKTt2YXIgcD1bXTtmb3IodT0wO3U8ZS5sZW5ndGg7dSsrKW89ZVt1XSxzPWYoW10sby54LHIuYzJwKSxsPWYoW10sby55LG4uYzJwKSxwLnB1c2goZChzLGwsby5iaWN1YmljKSk7aC5hdHRyKCJkIiwiTSIrcC5qb2luKCJMIikrIloiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfWZ1bmN0aW9uIGModCxlLHIsbixpLGEsbyxzLGwsdSxjKXt2YXIgZj1lLnNlbGVjdEFsbCgiZy5jb250b3VyZmlsbCIpLmRhdGEoWzBdKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmZpbGwiLCEwKTt2YXIgZD1mLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09dT9pOltdKTtkLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPV8odCxlLGEsbyxzLGwscixuKTtlLnByZWZpeEJvdW5kYXJ5JiYoaT1jK2kpLGk/aC5zZWxlY3QodGhpcykuYXR0cigiZCIsaSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpoLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfXZhciBoPXQoImQzIiksZj10KCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5IiksZD10KCIuLi9jYXJwZXQvbWFrZXBhdGgiKSxwPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG09dCgiLi4vLi4vbGliIiksdj10KCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIiksZz10KCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIikseT10KCIuLi9jb250b3VyL3Bsb3QiKSxiPXQoIi4uL2NvbnRvdXIvY29uc3RhbnRzIikseD10KCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxfPXQoIi4vam9pbl9hbGxfcGF0aHMiKSx3PXQoIi4vZW1wdHlfcGF0aGluZm8iKSxNPXQoIi4vbWFwX3BhdGhpbmZvIiksaz10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksQT10KCIuL2Nsb3NlX2JvdW5kYXJpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKW4odCxlLHJbaV0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vbGliIjo3MjQsIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjg5OCwiLi4vY2FycGV0L21ha2VwYXRoIjo4OTksIi4uL2NhcnBldC9tYXBfMWRfYXJyYXkiOjkwMCwiLi4vY29udG91ci9jb25zdGFudHMiOjkxNywiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyI6OTIxLCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIjo5MjUsIi4uL2NvbnRvdXIvcGxvdCI6OTI2LCIuL2Nsb3NlX2JvdW5kYXJpZXMiOjkzMSwiLi9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIjo5MzUsIi4vZW1wdHlfcGF0aGluZm8iOjkzNywiLi9qb2luX2FsbF9wYXRocyI6OTM5LCIuL21hcF9wYXRoaW5mbyI6OTQwLGQzOjEyMH1dLDk0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1vKHt9LHt6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdHJhbnNwb3NlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx4dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXX0seXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl19LHpzbW9vdGg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZhc3QiLCJiZXN0IiwhMV0sZGZsdDohMX0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowfSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH19LGkse2F1dG9jb2xvcnNjYWxlOm8oe30saS5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pfSx7Y29sb3JiYXI6YX0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjA3LCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDk0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vaGlzdG9ncmFtMmQvY2FsYyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxsPXQoIi4vaGFzX2NvbHVtbnMiKSx1PXQoIi4vY29udmVydF9jb2x1bW5feHl6IiksYz10KCIuL21heF9yb3dfbGVuZ3RoIiksaD10KCIuL2NsZWFuXzJkX2FycmF5IiksZj10KCIuL2ludGVycDJkIiksZD10KCIuL2ZpbmRfZW1wdGllcyIpLHA9dCgiLi9tYWtlX2JvdW5kX2FycmF5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtFPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGkubm90aWZpZXIoImNhbm5vdCBmYXN0LXpzbW9vdGg6ICIrdCl9dmFyIG0sdixnLHksYix4LF8sdyxNPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxrPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxBPW4udHJhY2VJcyhlLCJjb250b3VyIiksVD1uLnRyYWNlSXMoZSwiaGlzdG9ncmFtIiksUz1uLnRyYWNlSXMoZSwiZ2wyZCIpLEU9QT8iYmVzdCI6ZS56c21vb3RoO2lmKE0uX21pbkR0aWNrPTAsay5fbWluRHRpY2s9MCxUKXt2YXIgTD1vKHQsZSk7bT1MLngsdj1MLngwLGc9TC5keCx5PUwueSxiPUwueTAseD1MLmR5LF89TC56fWVsc2UgbChlKT8odShlLE0saywieCIsInkiLFsieiJdKSxtPWUueCx5PWUueSk6KG09ZS54P00ubWFrZUNhbGNkYXRhKGUsIngiKTpbXSx5PWUueT9rLm1ha2VDYWxjZGF0YShlLCJ5Iik6W10pLHY9ZS54MHx8MCxnPWUuZHh8fDEsYj1lLnkwfHwwLHg9ZS5keXx8MSxfPWgoZS56LGUudHJhbnNwb3NlKSwoQXx8ZS5jb25uZWN0Z2FwcykmJihlLl9lbXB0eXBvaW50cz1kKF8pLGUuX2ludGVycHo9ZihfLGUuX2VtcHR5cG9pbnRzLGUuX2ludGVycHopKTtpZigiZmFzdCI9PT1FKWlmKCJsb2ciPT09TS50eXBlfHwibG9nIj09PWsudHlwZSlyKCJsb2cgYXhpcyBmb3VuZCIpO2Vsc2UgaWYoIVQpe2lmKG0ubGVuZ3RoKXt2YXIgQz0obVttLmxlbmd0aC0xXS1tWzBdKS8obS5sZW5ndGgtMSksej1NYXRoLmFicyhDLzEwMCk7Zm9yKHc9MDt3PG0ubGVuZ3RoLTE7dysrKWlmKE1hdGguYWJzKG1bdysxXS1tW3ddLUMpPnope3IoInggc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX1pZih5Lmxlbmd0aCYmImZhc3QiPT09RSl7dmFyIEk9KHlbeS5sZW5ndGgtMV0teVswXSkvKHkubGVuZ3RoLTEpLEQ9TWF0aC5hYnMoSS8xMDApO2Zvcih3PTA7dzx5Lmxlbmd0aC0xO3crKylpZihNYXRoLmFicyh5W3crMV0teVt3XS1JKT5EKXtyKCJ5IHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319fXZhciBQPWMoXyksTz0ic2NhbGVkIj09PWUueHR5cGU/IiI6bSxSPXAoZSxPLHYsZyxQLE0pLEY9InNjYWxlZCI9PT1lLnl0eXBlPyIiOnksaj1wKGUsRixiLHgsXy5sZW5ndGgsayk7U3x8KGEuZXhwYW5kKE0sUiksYS5leHBhbmQoayxqKSk7dmFyIE49e3g6Uix5OmosejpfLHRleHQ6ZS50ZXh0fTtpZihzKGUsXywiIiwieiIpLEEmJmUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBCPXt0eXBlOiJjb250b3VyIj09PWUudHlwZT8iaGVhdG1hcCI6Imhpc3RvZ3JhbTJkIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtOLnhmaWxsPXAoQixPLHYsZyxQLE0pLE4ueWZpbGw9cChCLEYsYix4LF8ubGVuZ3RoLGspfXJldHVybltOXX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwOCwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4uL2hpc3RvZ3JhbTJkL2NhbGMiOjk3MSwiLi9jbGVhbl8yZF9hcnJheSI6OTQ0LCIuL2NvbnZlcnRfY29sdW1uX3h5eiI6OTQ2LCIuL2ZpbmRfZW1wdGllcyI6OTQ4LCIuL2hhc19jb2x1bW5zIjo5NDksIi4vaW50ZXJwMmQiOjk1MiwiLi9tYWtlX2JvdW5kX2FycmF5Ijo5NTMsIi4vbWF4X3Jvd19sZW5ndGgiOjk1NH1dLDk0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHMsbDtpZihlKXtmb3Iocj0wLHM9MDtzPHQubGVuZ3RoO3MrKylyPU1hdGgubWF4KHIsdFtzXS5sZW5ndGgpO2lmKDA9PT1yKXJldHVybiExO2E9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSxvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtyXVtlXX19ZWxzZSByPXQubGVuZ3RoLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXS5sZW5ndGh9LG89ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdW3JdfTt2YXIgdT1uZXcgQXJyYXkocik7Zm9yKHM9MDtzPHI7cysrKWZvcihpPWEodCxzKSx1W3NdPW5ldyBBcnJheShpKSxsPTA7bDxpO2wrKyl1W3NdW2xdPWZ1bmN0aW9uKHQpe2lmKG4odCkpcmV0dXJuK3R9KG8odCxzLGwpKTtyZXR1cm4gdX19LHsiZmFzdC1pc251bWVyaWMiOjEyOX1dLDk0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLGw9ImNiIityLnVpZCx1PXIuem1pbixjPXIuem1heDtpZihuKHUpfHwodT1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLnopKSxuKGMpfHwoYz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxyLnopKSx0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIitsKS5yZW1vdmUoKSwhci5zaG93c2NhbGUpcmV0dXJuIHZvaWQgYS5hdXRvTWFyZ2luKHQsbCk7dmFyIGg9ZVswXS50LmNiPXModCxsKSxmPW8ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKHIuY29sb3JzY2FsZSx1LGMpLHtub051bWVyaWNDaGVjazohMH0pO2guZmlsbGNvbG9yKGYpLmZpbGxsZXZlbHMoe3N0YXJ0OnUsZW5kOmMsc2l6ZTooYy11KS8yNTR9KS5vcHRpb25zKHIuY29sb3JiYXIpKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyI6NjA1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYxNiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsImZhc3QtaXNudW1lcmljIjoxMjl9XSw5NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7YT1hfHwieCIsbz1vfHwieSIscz1zfHxbInoiXTt2YXIgbCx1LGMsaCxmLGQ9dFthXS5zbGljZSgpLHA9dFtvXS5zbGljZSgpLG09dC50ZXh0LHY9TWF0aC5taW4oZC5sZW5ndGgscC5sZW5ndGgpLGc9dm9pZCAwIT09bSYmIUFycmF5LmlzQXJyYXkobVswXSkseT10W2ErImNhbGVuZGFyIl0sYj10W28rImNhbGVuZGFyIl07Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKykoYz10W3NbbF1dKSYmKHY9TWF0aC5taW4odixjLmxlbmd0aCkpO2Zvcih2PGQubGVuZ3RoJiYoZD1kLnNsaWNlKDAsdikpLHY8cC5sZW5ndGgmJihwPXAuc2xpY2UoMCx2KSksbD0wO2w8djtsKyspZFtsXT1lLmQyYyhkW2xdLDAseSkscFtsXT1yLmQyYyhwW2xdLDAsYik7dmFyIHg9bi5kaXN0aW5jdFZhbHMoZCksXz14LnZhbHMsdz1uLmRpc3RpbmN0VmFscyhwKSxNPXcudmFscyxrPVtdO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspa1tsXT1uLmluaXQyZEFycmF5KE0ubGVuZ3RoLF8ubGVuZ3RoKTt2YXIgQSxULFM7Zm9yKGcmJihTPW4uaW5pdDJkQXJyYXkoTS5sZW5ndGgsXy5sZW5ndGgpKSxsPTA7bDx2O2wrKylpZihkW2xdIT09aSYmcFtsXSE9PWkpe2ZvcihBPW4uZmluZEJpbihkW2xdK3gubWluRGlmZi8yLF8pLFQ9bi5maW5kQmluKHBbbF0rdy5taW5EaWZmLzIsTSksdT0wO3U8cy5sZW5ndGg7dSsrKWY9c1t1XSxjPXRbZl0saD1rW3VdLGhbVF1bQV09Y1tsXTtnJiYoU1tUXVtBXT1tW2xdKX1mb3IodFthXT1fLHRbb109TSx1PTA7dTxzLmxlbmd0aDt1KyspdFtzW3VdXT1rW3VdO2cmJih0LnRleHQ9Uyl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vLi4vbGliIjo3MjR9XSw5NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hhc19jb2x1bW5zIiksYT10KCIuL3h5el9kZWZhdWx0cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWlmKCFhKHQsZSx1LGwpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dSgidGV4dCIpLCExPT09dSgienNtb290aCIpJiYodSgieGdhcCIpLHUoInlnYXAiKSksdSgiY29ubmVjdGdhcHMiLGkoZSkmJiExIT09ZS56c21vb3RoKSxvKHQsZSxsLHUse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYxMSwiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6OTQyLCIuL2hhc19jb2x1bW5zIjo5NDksIi4veHl6X2RlZmF1bHRzIjo5NTd9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXhfcm93X2xlbmd0aCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGksYSxvLHMsbCx1LGM9W10saD17fSxmPVtdLGQ9dFswXSxwPVtdLG09WzAsMCwwXSx2PW4odCk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoZT1wLHA9ZCxkPXRbcisxXXx8W10saT0wO2k8djtpKyspdm9pZCAwPT09cFtpXSYmKHM9KHZvaWQgMCE9PXBbaS0xXT8xOjApKyh2b2lkIDAhPT1wW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1kW2ldPzE6MCkscz8oMD09PXImJnMrKywwPT09aSYmcysrLHI9PT10Lmxlbmd0aC0xJiZzKyssaT09PXAubGVuZ3RoLTEmJnMrKyxzPDQmJihoW1tyLGldXT1bcixpLHNdKSxjLnB1c2goW3IsaSxzXSkpOmYucHVzaChbcixpXSkpO2Zvcig7Zi5sZW5ndGg7KXtmb3IobD17fSx1PSExLG89Zi5sZW5ndGgtMTtvPj0wO28tLSlhPWZbb10scj1hWzBdLGk9YVsxXSwocz0oKGhbW3ItMSxpXV18fG0pWzJdKyhoW1tyKzEsaV1dfHxtKVsyXSsoaFtbcixpLTFdXXx8bSlbMl0rKGhbW3IsaSsxXV18fG0pWzJdKS8yMCkmJihsW2FdPVtyLGksc10sZi5zcGxpY2UobywxKSx1PSEwKTtpZighdSl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihhIGluIGwpaFthXT1sW2FdLGMucHVzaChsW2FdKX1yZXR1cm4gYy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMl0tdFsyXX0pfX0seyIuL21heF9yb3dfbGVuZ3RoIjo5NTR9XSw5NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQuelswXSl9fSx7fV0sOTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9bi5jb25zdGFudHMuTUFYRElTVDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtpZighKHQuZGlzdGFuY2U8YSkpe3ZhciBsLHUsYyxoLGY9dC5jZFswXSxkPWYudHJhY2UscD10LnhhLG09dC55YSx2PWYueCxnPWYueSx5PWYueixiPWYuem1hc2sseD12LF89ZztpZighMSE9PXQuaW5kZXgpe3RyeXtjPU1hdGgucm91bmQodC5pbmRleFsxXSksaD1NYXRoLnJvdW5kKHQuaW5kZXhbMF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIGkuZXJyb3IoIkVycm9yIGhvdmVyaW5nIG9uIGhlYXRtYXAsIHBvaW50TnVtYmVyIG11c3QgYmUgW3Jvdyxjb2xdLCBmb3VuZDoiLHQuaW5kZXgpfWlmKGM8MHx8Yz49eVswXS5sZW5ndGh8fGg8MHx8aD55Lmxlbmd0aClyZXR1cm59ZWxzZXtpZihuLmluYm94KGUtdlswXSxlLXZbdi5sZW5ndGgtMV0pPmF8fG4uaW5ib3goci1nWzBdLHItZ1tnLmxlbmd0aC0xXSk+YSlyZXR1cm47aWYocyl7dmFyIHc7Zm9yKHg9WzIqdlswXS12WzFdXSx3PTE7dzx2Lmxlbmd0aDt3KyspeC5wdXNoKCh2W3ddK3Zbdy0xXSkvMik7Zm9yKHgucHVzaChbMip2W3YubGVuZ3RoLTFdLXZbdi5sZW5ndGgtMl1dKSxfPVsyKmdbMF0tZ1sxXV0sdz0xO3c8Zy5sZW5ndGg7dysrKV8ucHVzaCgoZ1t3XStnW3ctMV0pLzIpO18ucHVzaChbMipnW2cubGVuZ3RoLTFdLWdbZy5sZW5ndGgtMl1dKX1jPU1hdGgubWF4KDAsTWF0aC5taW4oeC5sZW5ndGgtMixpLmZpbmRCaW4oZSx4KSkpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihfLmxlbmd0aC0yLGkuZmluZEJpbihyLF8pKSl9dmFyIE09cC5jMnAodltjXSksaz1wLmMycCh2W2MrMV0pLEE9bS5jMnAoZ1toXSksVD1tLmMycChnW2grMV0pO3M/KGs9TSxsPXZbY10sVD1BLHU9Z1toXSk6KGw9KHZbY10rdltjKzFdKS8yLHU9KGdbaF0rZ1toKzFdKS8yLGQuenNtb290aCYmKE09az0oTStrKS8yLEE9VD0oQStUKS8yKSk7dmFyIFM9eVtoXVtjXTtiJiYhYltoXVtjXSYmKFM9dm9pZCAwKTt2YXIgRTtyZXR1cm4gQXJyYXkuaXNBcnJheShmLnRleHQpJiZBcnJheS5pc0FycmF5KGYudGV4dFtoXSkmJihFPWYudGV4dFtoXVtjXSksW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDpbaCxjXSxkaXN0YW5jZTphKzEwLHgwOk0seDE6ayx5MDpBLHkxOlQseExhYmVsVmFsOmwseUxhYmVsVmFsOnUsekxhYmVsVmFsOlMsdGV4dDpFfSldfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIiOjcyNH1dLDk1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImhlYXRtYXAiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4vYXR0cmlidXRlcyI6OTQyLCIuL2NhbGMiOjk0MywiLi9jb2xvcmJhciI6OTQ1LCIuL2RlZmF1bHRzIjo5NDcsIi4vaG92ZXIiOjk1MCwiLi9wbG90Ijo5NTUsIi4vc3R5bGUiOjk1Nn1dLDk1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxjLGgsZixkLHAsbSx2LGc9MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3Iobj1lW3NdLGk9blswXSxhPW5bMV0scD10W2ldW2FdLGQ9MCxmPTAsbD0wO2w8NDtsKyspdT1vW2xdLChjPXRbaSt1WzBdXSkmJnZvaWQgMCE9PShoPWNbYSt1WzFdXSkmJigwPT09ZD9tPXY9aDoobT1NYXRoLm1pbihtLGgpLHY9TWF0aC5tYXgodixoKSksZisrLGQrPWgpO2lmKDA9PT1mKXRocm93Iml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnMiO3RbaV1bYV09ZC9mLHZvaWQgMD09PXA/Zjw0JiYoZz0xKToodFtpXVthXT0oMStyKSp0W2ldW2FdLXIqcCx2Pm0mJihnPU1hdGgubWF4KGcsTWF0aC5hYnModFtpXVthXS1wKS8odi1tKSkpKX1yZXR1cm4gZ312YXIgYT10KCIuLi8uLi9saWIiKSxvPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbD0xO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKG89MDtvPGUubGVuZ3RoO28rKylzPWVbb10sdFtzWzBdXVtzWzFdXT1yW3NbMF1dW3NbMV1dO2Vsc2UgaSh0LGUpO2ZvcihvPTA7bzxlLmxlbmd0aCYmIShlW29dWzJdPDQpO28rKyk7Zm9yKGU9ZS5zbGljZShvKSxvPTA7bzwxMDAmJmw+LjAxO28rKylsPWkodCxlLG4obCkpO3JldHVybiBsPi4wMSYmYS5sb2coImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5IixsKSx0fX0seyIuLi8uLi9saWIiOjcyNH1dLDk1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsbyl7dmFyIHMsbCx1LGM9W10saD1uLnRyYWNlSXModCwiY29udG91ciIpLGY9bi50cmFjZUlzKHQsImhpc3RvZ3JhbSIpLGQ9bi50cmFjZUlzKHQsImdsMmQiKTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4xJiYhZiYmImNhdGVnb3J5IiE9PW8udHlwZSl7dmFyIHA9ZS5sZW5ndGg7aWYoIShwPD1hKSlyZXR1cm4gaD9lLnNsaWNlKDAsYSk6ZS5zbGljZSgwLGErMSk7aWYoaHx8ZCljPWUuc2xpY2UoMCxhKTtlbHNlIGlmKDE9PT1hKWM9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoYz1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8cDt1KyspYy5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2MucHVzaCgxLjUqZVtwLTFdLS41KmVbcC0yXSl9aWYocDxhKXt2YXIgbT1jW2MubGVuZ3RoLTFdLHY9bS1jW2MubGVuZ3RoLTJdO2Zvcih1PXA7dTxhO3UrKyltKz12LGMucHVzaChtKX19ZWxzZXtsPWl8fDE7dmFyIGc9dFtvLl9pZC5jaGFyQXQoMCkrImNhbGVuZGFyIl07Zm9yKHM9Znx8ImNhdGVnb3J5Ij09PW8udHlwZT9vLnIyYyhyLDAsZyl8fDA6QXJyYXkuaXNBcnJheShlKSYmMT09PWUubGVuZ3RoP2VbMF06dm9pZCAwPT09cj8wOm8uZDJjKHIsMCxnKSx1PWh8fGQ/MDotLjU7dTxhO3UrKyljLnB1c2gocytsKnUpfXJldHVybiBjfX0seyIuLi8uLi9yZWdpc3RyeSI6ODQyfV0sOTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLHRbcl0ubGVuZ3RoKTtyZXR1cm4gZX19LHt9XSw5NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWUubGVuZ3RoLTIsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPWVbbisxXSxzPW8uY29uc3RyYWluKG4rKHQtaSkvKGEtaSktLjUsMCxyKSxsPU1hdGgucm91bmQocyksdT1NYXRoLmFicyhzLWwpO3JldHVybiBzJiZzIT09ciYmdT97YmluMDpsLGZyYWM6dSxiaW4xOk1hdGgucm91bmQobCt1LyhzLWwpKX06e2JpbjA6bCxiaW4xOmwsZnJhYzowfX1mdW5jdGlvbiBjKHQsZSl7aWYodm9pZCAwIT09dCl7dmFyIHI9cSh0KTtyZXR1cm4gclswXT1NYXRoLnJvdW5kKHJbMF0pLHJbMV09TWF0aC5yb3VuZChyWzFdKSxyWzJdPU1hdGgucm91bmQoclsyXSkscnQrPWUsbnQrPXJbMF0qZSxpdCs9clsxXSplLGF0Kz1yWzJdKmUscn1yZXR1cm5bMCwwLDAsMF19ZnVuY3Rpb24gaCh0LGUscil7dFtlXT1yWzBdLHRbZSsxXT1yWzFdLHRbZSsyXT1yWzJdLHRbZSszXT1NYXRoLnJvdW5kKDI1NSpyWzNdKX12YXIgZj1yWzBdLnRyYWNlLGQ9Zi51aWQscD1lLnhheGlzLG09ZS55YXhpcyx2PXQuX2Z1bGxMYXlvdXQsZz0iaG0iK2Q7aWYodi5fcGFwZXIuc2VsZWN0QWxsKCIuY29udG91ciIrZCkucmVtb3ZlKCksdi5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy5yYW5nZXNsaWRlci1jb250YWluZXIiKS5zZWxlY3RBbGwoIi5jb250b3VyIitkKS5yZW1vdmUoKSwhMCE9PWYudmlzaWJsZSlyZXR1cm4gdi5fcGFwZXIuc2VsZWN0QWxsKCIuIitnKS5yZW1vdmUoKSx2b2lkIHYuX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIrZCkucmVtb3ZlKCk7dmFyIHksYix4LF8sdyxNLGs9clswXS56LEE9clswXS54LFQ9clswXS55LFM9YS50cmFjZUlzKGYsImNvbnRvdXIiKSxFPVM/ImJlc3QiOmYuenNtb290aCxMPWsubGVuZ3RoLEM9dShrKSx6PSExLEk9ITE7Zm9yKE09MDt2b2lkIDA9PT15JiZNPEEubGVuZ3RoLTE7KXk9cC5jMnAoQVtNXSksTSsrO2ZvcihNPUEubGVuZ3RoLTE7dm9pZCAwPT09YiYmTT4wOyliPXAuYzJwKEFbTV0pLE0tLTtmb3IoYjx5JiYoeD1iLGI9eSx5PXgsej0hMCksTT0wO3ZvaWQgMD09PV8mJk08VC5sZW5ndGgtMTspXz1tLmMycChUW01dKSxNKys7Zm9yKE09VC5sZW5ndGgtMTt2b2lkIDA9PT13JiZNPjA7KXc9bS5jMnAoVFtNXSksTS0tO2lmKHc8XyYmKHg9XyxfPXcsdz14LEk9ITApLFMmJihBPXJbMF0ueGZpbGwsVD1yWzBdLnlmaWxsKSwiZmFzdCIhPT1FKXt2YXIgRD0iYmVzdCI9PT1FPzA6LjU7eT1NYXRoLm1heCgtRCpwLl9sZW5ndGgseSksYj1NYXRoLm1pbigoMStEKSpwLl9sZW5ndGgsYiksXz1NYXRoLm1heCgtRCptLl9sZW5ndGgsXyksdz1NYXRoLm1pbigoMStEKSptLl9sZW5ndGgsdyl9dmFyIFA9TWF0aC5yb3VuZChiLXkpLE89TWF0aC5yb3VuZCh3LV8pLFI9UDw9MHx8Tzw9MCxGPWUucGxvdC5zZWxlY3QoIi5pbWFnZWxheWVyIikuc2VsZWN0QWxsKCJnLmhtLiIrZykuZGF0YShSP1tdOlswXSk7aWYoRi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhtIiwhMCkuY2xhc3NlZChnLCEwKSxGLmV4aXQoKS5yZW1vdmUoKSwhUil7dmFyIGosTjsiZmFzdCI9PT1FPyhqPUMsTj1MKTooaj1QLE49Tyk7dmFyIEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Qi53aWR0aD1qLEIuaGVpZ2h0PU47dmFyIFUsVixIPUIuZ2V0Q29udGV4dCgiMmQiKSxxPXMubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKGYuY29sb3JzY2FsZSxmLnptaW4sZi56bWF4KSx7bm9OdW1lcmljQ2hlY2s6ITAscmV0dXJuQXJyYXk6ITB9KTsiZmFzdCI9PT1FPyhVPXo/ZnVuY3Rpb24odCl7cmV0dXJuIEMtMS10fTpvLmlkZW50aXR5LFY9ST9mdW5jdGlvbih0KXtyZXR1cm4gTC0xLXR9Om8uaWRlbnRpdHkpOihVPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKHAuYzJwKEFbdF0pLXkpLDAsUCl9LFY9ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQobS5jMnAoVFt0XSktXyksMCxPKX0pO3ZhciBHLFksWCxXLFosSixLLFE9VigwKSwkPVtRLFFdLHR0PXo/MDoxLGV0PUk/MDoxLHJ0PTAsbnQ9MCxpdD0wLGF0PTA7aWYoRSl7dmFyIG90LHN0PTA7dHJ5e290PW5ldyBVaW50OEFycmF5KFAqTyo0KX1jYXRjaCh0KXtvdD1uZXcgQXJyYXkoUCpPKjQpfWlmKCJiZXN0Ij09PUUpe3ZhciBsdCx1dCxjdCxodD1uZXcgQXJyYXkoQS5sZW5ndGgpLGZ0PW5ldyBBcnJheShULmxlbmd0aCksZHQ9bmV3IEFycmF5KFApO2ZvcihNPTA7TTxBLmxlbmd0aDtNKyspaHRbTV09TWF0aC5yb3VuZChwLmMycChBW01dKS15KTtmb3IoTT0wO008VC5sZW5ndGg7TSsrKWZ0W01dPU1hdGgucm91bmQobS5jMnAoVFtNXSktXyk7Zm9yKE09MDtNPFA7TSsrKWR0W01dPW4oTSxodCk7Zm9yKFg9MDtYPE87WCsrKWZvcihsdD1uKFgsZnQpLHV0PWtbbHQuYmluMF0sY3Q9a1tsdC5iaW4xXSxNPTA7TTxQO00rKyxzdCs9NClLPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbci5iaW4wXTtpZih2b2lkIDA9PT1pKXJldHVybiBjKHZvaWQgMCwxKTt2YXIgYSxvPXRbci5iaW4xXSxzPWVbci5iaW4wXSxsPWVbci5iaW4xXSx1PW8taXx8MCxoPXMtaXx8MDtyZXR1cm4gYT12b2lkIDA9PT1vP3ZvaWQgMD09PWw/MDp2b2lkIDA9PT1zPzIqKGwtaSk6MiooMipsLXMtaSkvMzp2b2lkIDA9PT1sP3ZvaWQgMD09PXM/MDoyKigyKmktby1zKS8zOnZvaWQgMD09PXM/MiooMipsLW8taSkvMzpsK2ktby1zLGMoaStyLmZyYWMqdStuLmZyYWMqKGgrci5mcmFjKmEpKX0odXQsY3QsZHRbTV0sbHQpLGgob3Qsc3QsSyl9ZWxzZSBmb3IoWD0wO1g8TDtYKyspZm9yKEo9a1tYXSwkPVYoWCksTT0wO008UDtNKyspSz1jKEpbTV0sMSksc3Q9NCooJCpQK1UoTSkpLGgob3Qsc3QsSyk7dmFyIHB0PUguY3JlYXRlSW1hZ2VEYXRhKFAsTyk7dHJ5e3B0LmRhdGEuc2V0KG90KX1jYXRjaCh0KXt2YXIgbXQ9cHQuZGF0YSx2dD1tdC5sZW5ndGg7Zm9yKFg9MDtYPHZ0O1grKyltdFtYXT1vdFtYXX1ILnB1dEltYWdlRGF0YShwdCwwLDApfWVsc2UgZm9yKFg9MDtYPEw7WCsrKWlmKEo9a1tYXSwkLnJldmVyc2UoKSwkW2V0XT1WKFgrMSksJFswXSE9PSRbMV0mJnZvaWQgMCE9PSRbMF0mJnZvaWQgMCE9PSRbMV0pZm9yKFc9VSgwKSxZPVtXLFddLE09MDtNPEM7TSsrKVkucmV2ZXJzZSgpLFlbdHRdPVUoTSsxKSxZWzBdIT09WVsxXSYmdm9pZCAwIT09WVswXSYmdm9pZCAwIT09WVsxXSYmKFo9SltNXSxLPWMoWiwoWVsxXS1ZWzBdKSooJFsxXS0kWzBdKSksSC5maWxsU3R5bGU9InJnYmEoIitLLmpvaW4oIiwiKSsiKSIsRz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7dmFyIHU9e3gwOmUseDE6cix5MDpuLHkxOml9LGM9Mip0LnhnYXAvMyxoPTIqdC55Z2FwLzMsZj10LnhnYXAvMyxkPXQueWdhcC8zO3JldHVybiBzPT09bC0xJiYodS55MT1pLWgpLGE9PT1vLTEmJih1LngwPWUrYyksMD09PXMmJih1LnkwPW4raCksMD09PWEmJih1LngxPXItYyksYT4wJiZhPG8tMSYmKHUueDA9ZStmLHUueDE9ci1mKSxzPjAmJnM8bC0xJiYodS55MD1uK2QsdS55MT1pLWQpLHV9KGYsWVswXSxZWzFdLCRbMF0sJFsxXSxNLEMsWCxMKSxILmZpbGxSZWN0KEcueDAsRy55MCxHLngxLUcueDAsRy55MS1HLnkwKSk7bnQ9TWF0aC5yb3VuZChudC9ydCksaXQ9TWF0aC5yb3VuZChpdC9ydCksYXQ9TWF0aC5yb3VuZChhdC9ydCk7dmFyIGd0PWkoInJnYigiK250KyIsIitpdCsiLCIrYXQrIikiKTt0Ll9obXBpeGNvdW50PSh0Ll9obXBpeGNvdW50fHwwKStydCx0Ll9obWx1bWNvdW50PSh0Ll9obWx1bWNvdW50fHwwKStydCpndC5nZXRMdW1pbmFuY2UoKTt2YXIgeXQ9Ri5zZWxlY3RBbGwoImltYWdlIikuZGF0YShyKTt5dC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSx5dC5hdHRyKHtoZWlnaHQ6Tyx3aWR0aDpQLHg6eSx5Ol8sInhsaW5rOmhyZWYiOkIudG9EYXRhVVJMKCJpbWFnZS9wbmciKX0pLHl0LmV4aXQoKS5yZW1vdmUoKX19dmFyIGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHU9dCgiLi9tYXhfcm93X2xlbmd0aCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspbih0LGUscltpXSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzA2LCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi9tYXhfcm93X2xlbmd0aCI6OTU0LHRpbnljb2xvcjI6NTMyfV0sOTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmhtIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KX19LHtkMzoxMjB9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWUodCk7cmV0dXJuInNjYWxlZCI9PT0ocj9lKHQrInR5cGUiLCJhcnJheSIpOiJzY2FsZWQiKSYmKGUodCsiMCIpLGUoImQiK3QpKSxyfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlLHI9ITAsbj0hMSxpPSExLG89MDtvPHQubGVuZ3RoO28rKyl7aWYoZT10W29dLCFBcnJheS5pc0FycmF5KGUpKXtyPSExO2JyZWFrfWUubGVuZ3RoPjAmJihuPSEwKTtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKylpZihhKGVbc10pKXtpPSEwO2JyZWFrfX1yZXR1cm4gciYmbiYmaX12YXIgYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4vaGFzX2NvbHVtbnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxsLHUpe3ZhciBjPXIoInoiKTtsPWx8fCJ4Iix1PXV8fCJ5Ijt2YXIgaCxmO2lmKHZvaWQgMD09PWN8fCFjLmxlbmd0aClyZXR1cm4gMDtpZihzKHQpKXtpZihoPXIobCksZj1yKHUpLCFofHwhZilyZXR1cm4gMH1lbHNle2lmKGg9bihsLHIpLGY9bih1LHIpLCFpKGMpKXJldHVybiAwO3IoInRyYW5zcG9zZSIpfXJldHVybiBvLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbbCx1XSxhKSxlLnoubGVuZ3RofX0seyIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2hhc19jb2x1bW5zIjo5NDksImZhc3QtaXNudW1lcmljIjoxMjl9XSw5NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7Zm9yKHZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz1bInoiLCJ4IiwieDAiLCJkeCIsInkiLCJ5MCIsImR5IiwidGV4dCIsInRyYW5zcG9zZSIsInh0eXBlIiwieXR5cGUiXSxsPXt9LHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGM9c1t1XTtsW2NdPW5bY119byhsLGkse2F1dG9jb2xvcnNjYWxlOm8oe30saS5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pfSx7Y29sb3JiYXI6YX0pLGUuZXhwb3J0cz1sfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjA3LCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6OTQyfV0sOTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9ImhlYXRtYXBnbCIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnpEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5vcHRpb25zPXt6OltdLHg6W10seTpbXSxzaGFwZTpbMCwwXSxjb2xvckxldmVsczpbMF0sY29sb3JWYWx1ZXM6WzAsMCwwLDFdfSx0aGlzLmhlYXRtYXA9byh0LmdscGxvdCx0aGlzLm9wdGlvbnMpLHRoaXMuaGVhdG1hcC5fdHJhY2U9dGhpc31mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10LmNvbG9yc2NhbGUscj10LnptaW4sbj10LnptYXgsaT1lLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheSg0KmkpLHM9MDtzPGk7cysrKXt2YXIgdT1lW3NdLGM9bCh1WzFdKTthW3NdPXIrdVswXSoobi1yKTtmb3IodmFyIGg9MDtoPDQ7aCsrKW9bNCpzK2hdPWNbaF19cmV0dXJue2NvbG9yTGV2ZWxzOmEsY29sb3JWYWx1ZXM6b319ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9bmV3IG4odCxlLnVpZCk7cmV0dXJuIGkudXBkYXRlKGUsciksaX12YXIgbz10KCJnbC1oZWF0bWFwMmQiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksdT1uLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5zaGFwZSxuPXQucG9pbnRJZCxpPW4lclswXSxhPU1hdGguZmxvb3Iobi9yWzBdKSxvPW47cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2UueFtpXSxlLnlbYV0sZS56W29dXSx0ZXh0TGFiZWw6dGhpcy50ZXh0TGFiZWxzW25dLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6W2EsaV0saG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0sdS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvO3ZhciBuPXIuejt0aGlzLm9wdGlvbnMuej1bXS5jb25jYXQuYXBwbHkoW10sbik7dmFyIGE9blswXS5sZW5ndGgsbz1uLmxlbmd0aDt0aGlzLm9wdGlvbnMuc2hhcGU9W2Esb10sdGhpcy5vcHRpb25zLng9ci54LHRoaXMub3B0aW9ucy55PXIueTt2YXIgbD1pKHQpO3RoaXMub3B0aW9ucy5jb2xvckxldmVscz1sLmNvbG9yTGV2ZWxzLHRoaXMub3B0aW9ucy5jb2xvclZhbHVlcz1sLmNvbG9yVmFsdWVzLHRoaXMudGV4dExhYmVscz1bXS5jb25jYXQuYXBwbHkoW10sdC50ZXh0KSx0aGlzLmhlYXRtYXAudXBkYXRlKHRoaXMub3B0aW9ucykscy5leHBhbmQodGhpcy5zY2VuZS54YXhpcyxyLngpLHMuZXhwYW5kKHRoaXMuc2NlbmUueWF4aXMsci55KX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWF9LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCJnbC1oZWF0bWFwMmQiOjE2NH1dLDk2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuLi9oZWF0bWFwL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4uL2hlYXRtYXAvY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImhlYXRtYXBnbCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDJkIiksbi5jYXRlZ29yaWVzPVsiZ2wyZCIsIjJkTWFwIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjgwNCwiLi4vaGVhdG1hcC9jYWxjIjo5NDMsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjk0NSwiLi4vaGVhdG1hcC9kZWZhdWx0cyI6OTQ3LCIuL2F0dHJpYnV0ZXMiOjk1OCwiLi9jb252ZXJ0Ijo5NTl9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpudWxsfSxlbmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpudWxsfSxzaXplOnt2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbH19fXZhciBpPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6aS50ZXh0LG9yaWVudGF0aW9uOmkub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWluIiwibWF4Il0sZGZsdDoiY291bnQifSxoaXN0bm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwicGVyY2VudCIsInByb2JhYmlsaXR5IiwiZGVuc2l0eSIsInByb2JhYmlsaXR5IGRlbnNpdHkiXSxkZmx0OiIifSxjdW11bGF0aXZlOntlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY3JlYXNpbmciLCJkZWNyZWFzaW5nIl0sZGZsdDoiaW5jcmVhc2luZyJ9LGN1cnJlbnRiaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY2x1ZGUiLCJleGNsdWRlIiwiaGFsZiJdLGRmbHQ6ImluY2x1ZGUifX0sYXV0b2Jpbng6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbH0sbmJpbnN4Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LHhiaW5zOm4oIngiKSxhdXRvYmlueTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsfSxuYmluc3k6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MH0seWJpbnM6bigieSIpLG1hcmtlcjppLm1hcmtlcixlcnJvcl95OmkuZXJyb3JfeSxlcnJvcl94OmkuZXJyb3JfeCxfZGVwcmVjYXRlZDp7YmFyZGlyOmkuX2RlcHJlY2F0ZWQuYmFyZGlyfX19LHsiLi4vYmFyL2F0dHJpYnV0ZXMiOjg1Mn1dLDk2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wLGk9MDtpPHI7aSsrKWVbaV0/KHRbaV0vPWVbaV0sbis9dFtpXSk6dFtpXT1udWxsO3JldHVybiBufX0se31dLDk2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHIoImhpc3Rub3JtIiksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IodCsiYmlucy5zdGFydCIpLHIodCsiYmlucy5lbmQiKSxyKHQrImJpbnMuc2l6ZSIpLHIoImF1dG9iaW4iK3QpLHIoIm5iaW5zIit0KX0pLGV9fSx7fV0sOTY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPXtjb3VudDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHJbdF0rKywxfSxzdW06ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtyZXR1cm4gbihhKT8oYT1OdW1iZXIoYSksclt0XSs9YSxhKTowfSxhdmc6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz1pW2VdO3JldHVybiBuKG8pJiYobz1OdW1iZXIobyksclt0XSs9byxhW3RdKyspLDB9LG1pbjpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPmEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfSxtYXg6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtpZihuKGEpKXtpZihhPU51bWJlcihhKSwhbihyW3RdKSlyZXR1cm4gclt0XT1hLGE7aWYoclt0XTxhKXt2YXIgbz1hLXJbdF07cmV0dXJuIHJbdF09YSxvfX1yZXR1cm4gMH19fSx7ImZhc3QtaXNudW1lcmljIjoxMjl9XSw5NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbihlKXtzPXRbZV0sdFtlXS89Mn1mdW5jdGlvbiBpKGUpe289dFtlXSx0W2VdPXMrby8yLHMrPW99dmFyIGEsbyxzO2lmKCJoYWxmIj09PXIpaWYoImluY3JlYXNpbmciPT09ZSlmb3IobigwKSxhPTE7YTx0Lmxlbmd0aDthKyspaShhKTtlbHNlIGZvcihuKHQubGVuZ3RoLTEpLGE9dC5sZW5ndGgtMjthPj0wO2EtLSlpKGEpO2Vsc2UgaWYoImluY3JlYXNpbmciPT09ZSl7Zm9yKGE9MTthPHQubGVuZ3RoO2ErKyl0W2FdKz10W2EtMV07ImV4Y2x1ZGUiPT09ciYmKHQudW5zaGlmdCgwKSx0LnBvcCgpKX1lbHNle2ZvcihhPXQubGVuZ3RoLTI7YT49MDthLS0pdFthXSs9dFthKzFdOyJleGNsdWRlIj09PXImJih0LnB1c2goMCksdC5zaGlmdCgpKX19dmFyIGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4vYmluX2Z1bmN0aW9ucyIpLHU9dCgiLi9ub3JtX2Z1bmN0aW9ucyIpLGM9dCgiLi9hdmVyYWdlIiksaD10KCIuL2NsZWFuX2JpbnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighMD09PWUudmlzaWJsZSl7dmFyIHIsZj1bXSxkPVtdLHA9by5nZXRGcm9tSWQodCwiaCI9PT1lLm9yaWVudGF0aW9uP2UueWF4aXN8fCJ5IjplLnhheGlzfHwieCIpLG09ImgiPT09ZS5vcmllbnRhdGlvbj8ieSI6IngiLHY9e3g6InkiLHk6IngifVttXSxnPWVbbSsiY2FsZW5kYXIiXSx5PWUuY3VtdWxhdGl2ZTtoKGUscCxtKTt2YXIgYj1wLm1ha2VDYWxjZGF0YShlLG0pLHg9bSsiYmlucyIsXz0iYXV0b2JpbiIrbSx3PWVbeF07ITE9PT1lW19dJiZ3JiZudWxsIT09dy5zdGFydCYmbnVsbCE9PXcuZW5kfHwodz1vLmF1dG9CaW4oYixwLGVbIm5iaW5zIittXSwhMSxnKSx5LmVuYWJsZWQmJiJpbmNsdWRlIiE9PXkuY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PXkuZGlyZWN0aW9uP3cuc3RhcnQ9cC5jMnIocC5yMmMody5zdGFydCktdy5zaXplKTp3LmVuZD1wLmMycihwLnIyYyh3LmVuZCkrdy5zaXplKSksZS5faW5wdXRbeF09ZVt4XT13LGUuX2lucHV0W19dPWVbX10pO3ZhciBNLGssQSxUPSJzdHJpbmciPT10eXBlb2Ygdy5zaXplLFM9VD9bXTp3LEU9W10sTD1bXSxDPTAsej1lLmhpc3Rub3JtLEk9ZS5oaXN0ZnVuYyxEPS0xIT09ei5pbmRleE9mKCJkZW5zaXR5Iik7eS5lbmFibGVkJiZEJiYoej16LnJlcGxhY2UoLyA/ZGVuc2l0eSQvLCIiKSxEPSExKTt2YXIgUCxPPSJtYXgiPT09SXx8Im1pbiI9PT1JLFI9Tz9udWxsOjAsRj1sLmNvdW50LGo9dVt6XSxOPSExLEI9ZnVuY3Rpb24odCl7cmV0dXJuIHAucjJjKHQsMCxnKX07Zm9yKEFycmF5LmlzQXJyYXkoZVt2XSkmJiJjb3VudCIhPT1JJiYoUD1lW3ZdLE49ImF2ZyI9PT1JLEY9bFtJXSkscj1CKHcuc3RhcnQpLGs9Qih3LmVuZCkrKHItby50aWNrSW5jcmVtZW50KHIsdy5zaXplLCExLGcpKS8xZTY7cjxrJiZmLmxlbmd0aDwxZTYmJihNPW8udGlja0luY3JlbWVudChyLHcuc2l6ZSwhMSxnKSxmLnB1c2goKHIrTSkvMiksZC5wdXNoKFIpLFQmJlMucHVzaChyKSxEJiZFLnB1c2goMS8oTS1yKSksTiYmTC5wdXNoKDApLCEoTTw9cikpOylyPU07VHx8ImRhdGUiIT09cC50eXBlfHwoUz17c3RhcnQ6QihTLnN0YXJ0KSxlbmQ6QihTLmVuZCksc2l6ZTpTLnNpemV9KTt2YXIgVT1kLmxlbmd0aDtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKShBPWEuZmluZEJpbihiW3JdLFMpKT49MCYmQTxVJiYoQys9RihBLHIsZCxQLEwpKTtOJiYoQz1jKGQsTCkpLGomJmooZCxDLEUpLHkuZW5hYmxlZCYmbihkLHkuZGlyZWN0aW9uLHkuY3VycmVudGJpbik7dmFyIFY9TWF0aC5taW4oZi5sZW5ndGgsZC5sZW5ndGgpLEg9W10scT0wLEc9Vi0xO2ZvcihyPTA7cjxWO3IrKylpZihkW3JdKXtxPXI7YnJlYWt9Zm9yKHI9Vi0xO3I+cTtyLS0paWYoZFtyXSl7Rz1yO2JyZWFrfWZvcihyPXE7cjw9RztyKyspaShmW3JdKSYmaShkW3JdKSYmSC5wdXNoKHtwOmZbcl0sczpkW3JdLGI6MH0pO3JldHVybiBzKEgsZSksSH19fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo4NTEsIi4vYXZlcmFnZSI6OTYyLCIuL2Jpbl9mdW5jdGlvbnMiOjk2NCwiLi9jbGVhbl9iaW5zIjo5NjYsIi4vbm9ybV9mdW5jdGlvbnMiOjk2OSwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDk2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIikuY2xlYW5EYXRlLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5PTkVEQVkscz1hLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUudHlwZSxsPXIrImJpbnMiLHU9dFtsXTt1fHwodT10W2xdPXt9KTt2YXIgYz0iZGF0ZSI9PT1hP2Z1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD9pKHQscyx1LmNhbGVuZGFyKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07dS5zdGFydD1jKHUuc3RhcnQpLHUuZW5kPWModS5lbmQpO3ZhciBoPSJkYXRlIj09PWE/bzoxLGY9dS5zaXplO2lmKG4oZikpdS5zaXplPWY+MD9OdW1iZXIoZik6aDtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZil1LnNpemU9aDtlbHNle3ZhciBkPWYuY2hhckF0KDApLHA9Zi5zdWJzdHIoMSk7cD1uKHApP051bWJlcihwKTowLChwPD0wfHwiZGF0ZSIhPT1hfHwiTSIhPT1kfHxwIT09TWF0aC5yb3VuZChwKSkmJih1LnNpemU9aCl9dmFyIG09ImF1dG9iaW4iK3I7ImJvb2xlYW4iIT10eXBlb2YgdFttXSYmKHRbbV09ISgodS5zdGFydHx8MD09PXUuc3RhcnQpJiYodS5lbmR8fDA9PT11LmVuZCkpKSx0W21dfHxkZWxldGUgdFsibmJpbnMiK3JdfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sOTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4vYmluX2RlZmF1bHRzIikscz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2RlZmF1bHRzIiksdT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsdSxyLG4pfXZhciBmPWgoIngiKSxkPWgoInkiKTtoKCJjdW11bGF0aXZlLmVuYWJsZWQiKSYmKGgoImN1bXVsYXRpdmUuZGlyZWN0aW9uIiksaCgiY3VtdWxhdGl2ZS5jdXJyZW50YmluIikpLGgoInRleHQiKTt2YXIgcD1oKCJvcmllbnRhdGlvbiIsZCYmIWY/ImgiOiJ2IiksbT1lWyJ2Ij09PXA/IngiOiJ5Il07aWYoIW18fCFtLmxlbmd0aClyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO24uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxjKSxlWyJoIj09PXA/IngiOiJ5Il0mJmgoImhpc3RmdW5jIiksbyh0LGUsaCwiaCI9PT1wP1sieSJdOlsieCJdKSxzKHQsZSxoLHIsYyksbCh0LGUsYS5kZWZhdWx0TGluZSx7YXhpczoieSJ9KSxsKHQsZSxhLmRlZmF1bHRMaW5lLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2RlZmF1bHRzIjo2MzEsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjg2MywiLi9hdHRyaWJ1dGVzIjo5NjEsIi4vYmluX2RlZmF1bHRzIjo5NjN9XSw5Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubGF5b3V0QXR0cmlidXRlcz10KCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5zZXRQb3NpdGlvbnM9dCgiLi4vYmFyL3NldF9wb3NpdGlvbnMiKSxuLnBsb3Q9dCgiLi4vYmFyL3Bsb3QiKSxuLnN0eWxlPXQoIi4uL2Jhci9zdHlsZSIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uaG92ZXJQb2ludHM9dCgiLi4vYmFyL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiYmFyIiwiaGlzdG9ncmFtIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4uL2Jhci9ob3ZlciI6ODU1LCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiOjg1NywiLi4vYmFyL2xheW91dF9kZWZhdWx0cyI6ODU4LCIuLi9iYXIvcGxvdCI6ODU5LCIuLi9iYXIvc2V0X3Bvc2l0aW9ucyI6ODYwLCIuLi9iYXIvc3R5bGUiOjg2MiwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTAyOCwiLi9hdHRyaWJ1dGVzIjo5NjEsIi4vY2FsYyI6OTY1LCIuL2RlZmF1bHRzIjo5Njd9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwZXJjZW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MTAwL2UsaT0wO2k8cjtpKyspdFtpXSo9bn0scHJvYmFiaWxpdHk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspdFtuXS89ZX0sZGVuc2l0eTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuPW58fDE7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdKm59LCJwcm9iYWJpbGl0eSBkZW5zaXR5IjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuJiYoZS89bik7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdL2V9fX0se31dLDk3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0vYXR0cmlidXRlcyIpLGk9dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7fSx7eDpuLngseTpuLnksejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifX0saGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLGF1dG9iaW54Om4uYXV0b2JpbngsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOm4ueGJpbnMsYXV0b2Jpbnk6bi5hdXRvYmlueSxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55Ymlucyx4Z2FwOmkueGdhcCx5Z2FwOmkueWdhcCx6c21vb3RoOmkuenNtb290aH0sYSx7YXV0b2NvbG9yc2NhbGU6cyh7fSxhLmF1dG9jb2xvcnNjYWxlLHtkZmx0OiExfSl9LHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MDcsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5NDIsIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIjo5NjF9XSw5NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiKSxvPXQoIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyIpLHM9dCgiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiKSxsPXQoIi4uL2hpc3RvZ3JhbS9jbGVhbl9iaW5zIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxjLGgsZixkLHA9aS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLG09ZS54P3AubWFrZUNhbGNkYXRhKGUsIngiKTpbXSx2PWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxnPWUueT92Lm1ha2VDYWxjZGF0YShlLCJ5Iik6W10seT1lLnhjYWxlbmRhcixiPWUueWNhbGVuZGFyLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHAucjJjKHQsMCx5KX0sXz1mdW5jdGlvbih0KXtyZXR1cm4gdi5yMmModCwwLGIpfSx3PWZ1bmN0aW9uKHQpe3JldHVybiBwLmMycih0LDAseSl9LE09ZnVuY3Rpb24odCl7cmV0dXJuIHYuYzJyKHQsMCxiKX07bChlLHAsIngiKSxsKGUsdiwieSIpO3ZhciBrPU1hdGgubWluKG0ubGVuZ3RoLGcubGVuZ3RoKTttLmxlbmd0aD5rJiZtLnNwbGljZShrLG0ubGVuZ3RoLWspLGcubGVuZ3RoPmsmJmcuc3BsaWNlKGssZy5sZW5ndGgtayksIWUuYXV0b2JpbngmJmUueGJpbnMmJm51bGwhPT1lLnhiaW5zLnN0YXJ0JiZudWxsIT09ZS54Ymlucy5lbmR8fChlLnhiaW5zPWkuYXV0b0JpbihtLHAsZS5uYmluc3gsIjJkIix5KSwiaGlzdG9ncmFtMmRjb250b3VyIj09PWUudHlwZSYmKGUueGJpbnMuc3RhcnQ9dyhpLnRpY2tJbmNyZW1lbnQoeChlLnhiaW5zLnN0YXJ0KSxlLnhiaW5zLnNpemUsITAseSkpLGUueGJpbnMuZW5kPXcoaS50aWNrSW5jcmVtZW50KHgoZS54Ymlucy5lbmQpLGUueGJpbnMuc2l6ZSwhMSx5KSkpLGUuX2lucHV0LnhiaW5zPWUueGJpbnMsZS5faW5wdXQuYXV0b2Jpbng9ZS5hdXRvYmlueCksIWUuYXV0b2JpbnkmJmUueWJpbnMmJm51bGwhPT1lLnliaW5zLnN0YXJ0JiZudWxsIT09ZS55Ymlucy5lbmR8fChlLnliaW5zPWkuYXV0b0JpbihnLHYsZS5uYmluc3ksIjJkIixiKSwiaGlzdG9ncmFtMmRjb250b3VyIj09PWUudHlwZSYmKGUueWJpbnMuc3RhcnQ9TShpLnRpY2tJbmNyZW1lbnQoXyhlLnliaW5zLnN0YXJ0KSxlLnliaW5zLnNpemUsITAsYikpLGUueWJpbnMuZW5kPU0oaS50aWNrSW5jcmVtZW50KF8oZS55Ymlucy5lbmQpLGUueWJpbnMuc2l6ZSwhMSxiKSkpLGUuX2lucHV0LnliaW5zPWUueWJpbnMsCmUuX2lucHV0LmF1dG9iaW55PWUuYXV0b2JpbnkpLGY9W107dmFyIEEsVCxTPVtdLEU9W10sTD0ic3RyaW5nIj09dHlwZW9mIGUueGJpbnMuc2l6ZSxDPSJzdHJpbmciPT10eXBlb2YgZS55Ymlucy5zaXplLHo9TD9bXTplLnhiaW5zLEk9Qz9bXTplLnliaW5zLEQ9MCxQPVtdLE89ZS5oaXN0bm9ybSxSPWUuaGlzdGZ1bmMsRj0tMSE9PU8uaW5kZXhPZigiZGVuc2l0eSIpLGo9Im1heCI9PT1SfHwibWluIj09PVIsTj1qP251bGw6MCxCPWEuY291bnQsVT1vW09dLFY9ITEsSD1bXSxxPVtdLEc9InoiaW4gZT9lLno6Im1hcmtlciJpbiBlJiZBcnJheS5pc0FycmF5KGUubWFya2VyLmNvbG9yKT9lLm1hcmtlci5jb2xvcjoiIjtHJiYiY291bnQiIT09UiYmKFY9ImF2ZyI9PT1SLEI9YVtSXSk7dmFyIFk9ZS54YmlucyxYPXgoWS5zdGFydCksVz14KFkuZW5kKSsoWC1pLnRpY2tJbmNyZW1lbnQoWCxZLnNpemUsITEseSkpLzFlNjtmb3IoZD1YO2Q8VztkPWkudGlja0luY3JlbWVudChkLFkuc2l6ZSwhMSx5KSlTLnB1c2goTiksTCYmei5wdXNoKGQpLFYmJkUucHVzaCgwKTtMJiZ6LnB1c2goZCk7dmFyIFo9Uy5sZW5ndGg7cj1lLnhiaW5zLnN0YXJ0O3ZhciBKPXgocik7Zm9yKHU9KGQtSikvWixyPXcoSit1LzIpLFk9ZS55YmlucyxYPV8oWS5zdGFydCksVz1fKFkuZW5kKSsoWC1pLnRpY2tJbmNyZW1lbnQoWCxZLnNpemUsITEsYikpLzFlNixkPVg7ZDxXO2Q9aS50aWNrSW5jcmVtZW50KGQsWS5zaXplLCExLGIpKWYucHVzaChTLmNvbmNhdCgpKSxDJiZJLnB1c2goZCksViYmUC5wdXNoKEUuY29uY2F0KCkpO0MmJkkucHVzaChkKTt2YXIgSz1mLmxlbmd0aDtjPWUueWJpbnMuc3RhcnQ7dmFyIFE9XyhjKTtmb3IoaD0oZC1RKS9LLGM9TShRK2gvMiksRiYmKEg9Uy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gTD8xLyh6W2UrMV0teltlXSk6MS91fSkscT1mLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBDPzEvKElbZSsxXS1JW2VdKToxL2h9KSksTHx8ImRhdGUiIT09cC50eXBlfHwoej17c3RhcnQ6eCh6LnN0YXJ0KSxlbmQ6eCh6LmVuZCksc2l6ZTp6LnNpemV9KSxDfHwiZGF0ZSIhPT12LnR5cGV8fChJPXtzdGFydDpfKEkuc3RhcnQpLGVuZDpfKEkuZW5kKSxzaXplOkkuc2l6ZX0pLGQ9MDtkPGs7ZCsrKUE9bi5maW5kQmluKG1bZF0seiksVD1uLmZpbmRCaW4oZ1tkXSxJKSxBPj0wJiZBPFomJlQ+PTAmJlQ8SyYmKEQrPUIoQSxkLGZbVF0sRyxQW1RdKSk7aWYoVilmb3IoVD0wO1Q8SztUKyspRCs9cyhmW1RdLFBbVF0pO2lmKFUpZm9yKFQ9MDtUPEs7VCsrKVUoZltUXSxELEgscVtUXSk7cmV0dXJue3g6bSx4MDpyLGR4OnUseTpnLHkwOmMsZHk6aCx6OmZ9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiOjk2MiwiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiOjk2NCwiLi4vaGlzdG9ncmFtL2NsZWFuX2JpbnMiOjk2NiwiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIjo5Njl9XSw5NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLGwscyksITE9PT1sKCJ6c21vb3RoIikmJihsKCJ4Z2FwIiksbCgieWdhcCIpKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYxMSwiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6OTcwLCIuL3NhbXBsZV9kZWZhdWx0cyI6OTc0fV0sOTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi4vaGVhdG1hcC9jYWxjIiksbi5wbG90PXQoIi4uL2hlYXRtYXAvcGxvdCIpLG4uY29sb3JiYXI9dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLG4uc3R5bGU9dCgiLi4vaGVhdG1hcC9zdHlsZSIpLG4uaG92ZXJQb2ludHM9dCgiLi4vaGVhdG1hcC9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGlzdG9ncmFtMmQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiLCJoaXN0b2dyYW0iXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4uL2hlYXRtYXAvY2FsYyI6OTQzLCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo5NDUsIi4uL2hlYXRtYXAvaG92ZXIiOjk1MCwiLi4vaGVhdG1hcC9wbG90Ijo5NTUsIi4uL2hlYXRtYXAvc3R5bGUiOjk1NiwiLi9hdHRyaWJ1dGVzIjo5NzAsIi4vZGVmYXVsdHMiOjk3Mn1dLDk3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vaGlzdG9ncmFtL2Jpbl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJ5Iik7aWYoIShvJiZvLmxlbmd0aCYmcyYmcy5sZW5ndGgpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLChyKCJ6Iil8fHIoIm1hcmtlci5jb2xvciIpKSYmcigiaGlzdGZ1bmMiKSxpKHQsZSxyLFsieCIsInkiXSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4uL2hpc3RvZ3JhbS9iaW5fZGVmYXVsdHMiOjk2M31dLDk3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt9LHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLGF1dG9iaW54Om4uYXV0b2JpbngsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOm4ueGJpbnMsYXV0b2Jpbnk6bi5hdXRvYmlueSxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55YmlucyxhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3VyczppLmNvbnRvdXJzLGxpbmU6aS5saW5lfSxhLHt6bWluOnMoe30sYS56bWluLHtlZGl0VHlwZToiZG9jYWxjIn0pLHptYXg6cyh7fSxhLnptYXgse2VkaXRUeXBlOiJkb2NhbGMifSl9LHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MDcsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjo5MTQsIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiOjk3MH1dLDk3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSx1LGwpLGEodCxlLHUpLG8odCxlLHUsbCl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo5MTgsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjkyOCwiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzIjo5NzQsIi4vYXR0cmlidXRlcyI6OTc1fV0sOTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi4vY29udG91ci9jYWxjIiksbi5wbG90PXQoIi4uL2NvbnRvdXIvcGxvdCIpLnBsb3Qsbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuLi9jb250b3VyL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuLi9jb250b3VyL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0yZGNvbnRvdXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiLCJjb250b3VyIiwiaGlzdG9ncmFtIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc0LCIuLi9jb250b3VyL2NhbGMiOjkxNSwiLi4vY29udG91ci9jb2xvcmJhciI6OTE2LCIuLi9jb250b3VyL2hvdmVyIjo5MjIsIi4uL2NvbnRvdXIvcGxvdCI6OTI2LCIuLi9jb250b3VyL3N0eWxlIjo5MjcsIi4vYXR0cmlidXRlcyI6OTc1LCIuL2RlZmF1bHRzIjo5NzZ9XSw5Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxqOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sazp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGRlbGF1bmF5YXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJ6Il0sZGZsdDoieiJ9LGFscGhhaHVsbDp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi0xfSxpbnRlbnNpdHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxjb2xvcjp7dmFsVHlwZToiY29sb3IifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGZhY2Vjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LG9wYWNpdHk6byh7fSxhLm9wYWNpdHkpLGZsYXRzaGFkaW5nOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb250b3VyOntzaG93Om8oe30sYS5jb250b3Vycy54LnNob3cse30pLGNvbG9yOm8oe30sYS5jb250b3Vycy54LmNvbG9yKSx3aWR0aDpvKHt9LGEuY29udG91cnMueC53aWR0aCl9LGNhdXRvOm4uemF1dG8sY21pbjpuLnptaW4sY21heDpuLnptYXgsY29sb3JzY2FsZTpuLmNvbG9yc2NhbGUscmV2ZXJzZXNjYWxlOm4ucmV2ZXJzZXNjYWxlLGF1dG9jb2xvcnNjYWxlOm8oe30sbi5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pLHNob3dzY2FsZTpuLnNob3dzY2FsZSxjb2xvcmJhcjppLGxpZ2h0cG9zaXRpb246e3g6byh7fSxhLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Om8oe30sYS5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpvKHt9LGEubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KX0sbGlnaHRpbmc6byh7fSx7dmVydGV4bm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS0xMn0sZmFjZW5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtNn19LGEubGlnaHRpbmcpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYwMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiOjEwOTF9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLmludGVuc2l0eSYmbihlLGUuaW50ZW5zaXR5LCIiLCJjIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDh9XSw5ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxsPSJjYiIrci51aWQsdT1yLmNtaW4sYz1yLmNtYXgsaD1yLmludGVuc2l0eXx8W107aWYobih1KXx8KHU9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsaCkpLG4oYyl8fChjPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGgpKSx0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIitsKS5yZW1vdmUoKSwhci5zaG93c2NhbGUpcmV0dXJuIHZvaWQgYS5hdXRvTWFyZ2luKHQsbCk7dmFyIGY9ZVswXS50LmNiPXModCxsKSxkPW8ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKHIuY29sb3JzY2FsZSx1LGMpLHtub051bWVyaWNDaGVjazohMH0pO2YuZmlsbGNvbG9yKGQpLmZpbGxsZXZlbHMoe3N0YXJ0OnUsZW5kOmMsc2l6ZTooYy11KS8yNTR9KS5vcHRpb25zKHIuY29sb3JiYXIpKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyI6NjA1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYxNiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsImZhc3QtaXNudW1lcmljIjoxMjl9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9IiNmZmYiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXUodFsxXSksbj1yLnRvUmdiKCk7cmV0dXJue2luZGV4OmUscmdiOltuLnIsbi5nLG4uYiwxXX19KX1mdW5jdGlvbiBhKHQpe3JldHVybiB0Lm1hcChkKX1mdW5jdGlvbiBvKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDsrK2kpbltpXT1bdFtpXSxlW2ldLHJbaV1dO3JldHVybiBufWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPWwoe2dsOnJ9KSxhPW5ldyBuKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9dmFyIGw9dCgiZ2wtbWVzaDNkIiksdT10KCJ0aW55Y29sb3IyIiksYz10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGg9dCgiYWxwaGEtc2hhcGUiKSxmPXQoImNvbnZleC1odWxsIiksZD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IikscD1uLnByb3RvdHlwZTtwLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dLCEwfX0scC51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUscixuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSl9dmFyIHI9dGhpcy5zY2VuZSxuPXIuZnVsbFNjZW5lTGF5b3V0O3RoaXMuZGF0YT10O3ZhciBzLGw9byhlKG4ueGF4aXMsdC54LHIuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxlKG4ueWF4aXMsdC55LHIuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxlKG4uemF4aXMsdC56LHIuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSk7aWYodC5pJiZ0LmomJnQuaylzPW8odC5pLHQuaix0LmspO2Vsc2UgaWYoMD09PXQuYWxwaGFodWxsKXM9ZihsKTtlbHNlIGlmKHQuYWxwaGFodWxsPjApcz1oKHQuYWxwaGFodWxsLGwpO2Vsc2V7dmFyIHU9WyJ4IiwieSIsInoiXS5pbmRleE9mKHQuZGVsYXVuYXlheGlzKTtzPWMobC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbKHUrMSklM10sdFsodSsyKSUzXV19KSl9dmFyIHA9e3Bvc2l0aW9uczpsLGNlbGxzOnMsbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmQodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O3QuaW50ZW5zaXR5Pyh0aGlzLmNvbG9yPSIjZmZmIixwLnZlcnRleEludGVuc2l0eT10LmludGVuc2l0eSxwLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0scC5jb2xvcm1hcD1pKHQuY29sb3JzY2FsZSkpOnQudmVydGV4Y29sb3I/KHRoaXMuY29sb3I9dC52ZXJ0ZXhjb2xvclswXSxwLnZlcnRleENvbG9ycz1hKHQudmVydGV4Y29sb3IpKTp0LmZhY2Vjb2xvcj8odGhpcy5jb2xvcj10LmZhY2Vjb2xvclswXSxwLmNlbGxDb2xvcnM9YSh0LmZhY2Vjb2xvcikpOih0aGlzLmNvbG9yPXQuY29sb3IscC5tZXNoQ29sb3I9ZCh0LmNvbG9yKSksdGhpcy5tZXNoLnVwZGF0ZShwKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPXN9LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQyLCJhbHBoYS1zaGFwZSI6NDEsImNvbnZleC1odWxsIjoxMDEsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxMjEsImdsLW1lc2gzZCI6MjAzLHRpbnljb2xvcjI6NTMyfV0sOTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJkFycmF5LmlzQXJyYXkoZSk/ZTpudWxsfSk7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoPT09ZVswXS5sZW5ndGh9KSYmZX12YXIgYz11KFsieCIsInkiLCJ6Il0pLGg9dShbImkiLCJqIiwiayJdKTtpZighYylyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2gmJmguZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdfD0wfSksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJjb250b3VyLnNob3ciLCJjb250b3VyLmNvbG9yIiwiY29udG91ci53aWR0aCIsImNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJmbGF0c2hhZGluZyIsImFscGhhaHVsbCIsImRlbGF1bmF5YXhpcyIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGEodCxlLHMsbCx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkpOihlLnNob3dzY2FsZT0hMSwiZmFjZWNvbG9yImluIHQ/bCgiZmFjZWNvbG9yIik6InZlcnRleGNvbG9yImluIHQ/bCgidmVydGV4Y29sb3IiKTpsKCJjb2xvciIscikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYxMSwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vYXR0cmlidXRlcyI6OTc4fV0sOTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5jb2xvcmJhcj10KCIuL2NvbG9yYmFyIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ibWVzaDNkIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxuLmNhdGVnb3JpZXM9WyJnbDNkIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjgwNywiLi9hdHRyaWJ1dGVzIjo5NzgsIi4vY2FsYyI6OTc5LCIuL2NvbG9yYmFyIjo5ODAsIi4vY29udmVydCI6OTgxLCIuL2RlZmF1bHRzIjo5ODJ9XSw5ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPWkubGluZSxzPXtuYW1lOnt2YWxUeXBlOiJzdHJpbmcifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxsaW5lOntjb2xvcjpvLmNvbG9yLHdpZHRoOm8ud2lkdGgsZGFzaDphfX07ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sb3Blbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0saGlnaDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sbG93Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxjbG9zZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sbGluZTp7d2lkdGg6bi5leHRlbmRGbGF0KHt9LG8ud2lkdGgse30pLGRhc2g6bi5leHRlbmRGbGF0KHt9LGEse30pfSxpbmNyZWFzaW5nOm4uZXh0ZW5kRGVlcCh7fSxzLHtsaW5lOntjb2xvcjp7ZGZsdDoiIzNEOTk3MCJ9fX0pLGRlY3JlYXNpbmc6bi5leHRlbmREZWVwKHt9LHMse2xpbmU6e2NvbG9yOntkZmx0OiIjRkY0MTM2In19fSksdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6LjUsZGZsdDouM319fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MjUsIi4uLy4uL2xpYiI6NzI0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjV9XSw5ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtvKHQsZSxyLG4pLHIobisiLmxpbmUuY29sb3IiKSxyKG4rIi5saW5lLndpZHRoIixlLmxpbmUud2lkdGgpLHIobisiLmxpbmUuZGFzaCIsZS5saW5lLmRhc2gpfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9vaGxjX2RlZmF1bHRzIiksbz10KCIuL2RpcmVjdGlvbl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gdShyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUscyxyLG4pfWlmKGwucHVzaER1bW15VHJhbnNmb3JtT3B0cyh0LGUpLDA9PT1hKHQsZSx1LG8pKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dSgibGluZS53aWR0aCIpLHUoImxpbmUuZGFzaCIpLG4odCxlLHUsImluY3JlYXNpbmciKSxuKHQsZSx1LCJkZWNyZWFzaW5nIiksdSgidGV4dCIpLHUoInRpY2t3aWR0aCIpfX0seyIuLi8uLi9saWIiOjcyNCwiLi9hdHRyaWJ1dGVzIjo5ODQsIi4vZGlyZWN0aW9uX2RlZmF1bHRzIjo5ODYsIi4vaGVscGVycyI6OTg3LCIuL29obGNfZGVmYXVsdHMiOjk4OX1dLDk4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cihuKyIuc2hvd2xlZ2VuZCIpLCExPT09dC5zaG93bGVnZW5kJiYoZVtuXS5zaG93bGVnZW5kPSExKSxyKG4rIi5uYW1lIixlLm5hbWUrIiAtICIrbil9fSx7fV0sOTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PT09ZT9lPm8/YT0hMDplPG8mJihhPSExKTphPXQ8ZSxvPWUsYX1mdW5jdGlvbiByKHQscil7cmV0dXJuIGkodCkmJmkocikmJmUoK3QsK3IpfWZ1bmN0aW9uIG4odCxyKXtyZXR1cm4gaSh0KSYmaShyKSYmIWUoK3QsK3IpfXZhciBhPSEwLG89bnVsbDtyZXR1cm4iaW5jcmVhc2luZyI9PT10P3I6bn12YXIgaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIik7ci5wdXNoRHVtbXlUcmFuc2Zvcm1PcHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e3R5cGU6ZS50eXBlLF9lcGhlbWVyYWw6ITB9O0FycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKT90LnRyYW5zZm9ybXMucHVzaChyKTp0LnRyYW5zZm9ybXM9W3JdfSxyLmNsZWFyRXBoZW1lcmFsVHJhbnNmb3JtT3B0cz1mdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXS5fZXBoZW1lcmFsJiZlLnNwbGljZShyLDEpOzA9PT1lLmxlbmd0aCYmZGVsZXRlIHQudHJhbnNmb3Jtc319LHIuY29weU9ITEM9ZnVuY3Rpb24odCxlKXt0Lm9wZW4mJihlLm9wZW49dC5vcGVuKSx0LmhpZ2gmJihlLmhpZ2g9dC5oaWdoKSx0LmxvdyYmKGUubG93PXQubG93KSx0LmNsb3NlJiYoZS5jbG9zZT10LmNsb3NlKX0sci5tYWtlVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hLmV4dGVuZEZsYXQoW10sdC50cmFuc2Zvcm1zKTtyZXR1cm4gbltlLnRyYW5zZm9ybUluZGV4XT17dHlwZTp0LnR5cGUsZGlyZWN0aW9uOnIsb3Blbjp0Lm9wZW4saGlnaDp0LmhpZ2gsbG93OnQubG93LGNsb3NlOnQuY2xvc2V9LG59LHIuZ2V0RmlsdGVyRm49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfSxyLmFkZFJhbmdlU2xpZGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPSExLG49MDtuPHQubGVuZ3RoO24rKylpZighMD09PXRbbl0udmlzaWJsZSl7cj0hMDticmVha31yJiYoZS54YXhpc3x8KGUueGF4aXM9e30pLGUueGF4aXMucmFuZ2VzbGlkZXJ8fChlLnhheGlzLnJhbmdlc2xpZGVyPXt9KSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sOTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RfYXBpL3JlZ2lzdGVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToib2hsYyIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInNob3dMZWdlbmQiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpfSxuKHQoIi4uL3NjYXR0ZXIiKSksbih0KCIuL3RyYW5zZm9ybSIpKX0seyIuLi8uLi9wbG90X2FwaS9yZWdpc3RlciI6NzU0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwiLi4vc2NhdHRlciI6MTAzNSwiLi9hdHRyaWJ1dGVzIjo5ODQsIi4vZGVmYXVsdHMiOjk4NSwiLi90cmFuc2Zvcm0iOjk5MH1dLDk4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvPXIoIngiKSxzPXIoIm9wZW4iKSxsPXIoImhpZ2giKSx1PXIoImxvdyIpLGM9cigiY2xvc2UiKTtyZXR1cm4gbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4Il0saSksYT1NYXRoLm1pbihzLmxlbmd0aCxsLmxlbmd0aCx1Lmxlbmd0aCxjLmxlbmd0aCksbyYmKGE9TWF0aC5taW4oYSxvLmxlbmd0aCkpPG8ubGVuZ3RoJiYoZS54PW8uc2xpY2UoMCxhKSksYTxzLmxlbmd0aCYmKGUub3Blbj1zLnNsaWNlKDAsYSkpLGE8bC5sZW5ndGgmJihlLmhpZ2g9bC5zbGljZSgwLGEpKSxhPHUubGVuZ3RoJiYoZS5sb3c9dS5zbGljZSgwLGEpKSxhPGMubGVuZ3RoJiYoZS5jbG9zZT1jLnNsaWNlKDAsYSkpLGF9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDJ9XSw5OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49e3R5cGU6InNjYXR0ZXIiLG1vZGU6ImxpbmVzIixjb25uZWN0Z2FwczohMSx2aXNpYmxlOnQudmlzaWJsZSxvcGFjaXR5OnQub3BhY2l0eSx4YXhpczp0LnhheGlzLHlheGlzOnQueWF4aXMsaG92ZXJpbmZvOmkodCksdHJhbnNmb3JtczpsLm1ha2VUcmFuc2Zvcm0odCxlLHIpfSxhPXRbcl07cmV0dXJuIGEmJnMuZXh0ZW5kRmxhdChuLHt4OnQueHx8WzBdLHhjYWxlbmRhcjp0LnhjYWxlbmRhcix5OltdLmNvbmNhdCh0LmxvdykuY29uY2F0KHQuaGlnaCksdGV4dDp0LnRleHQsbmFtZTphLm5hbWUsc2hvd2xlZ2VuZDphLnNob3dsZWdlbmQsbGluZTphLmxpbmV9KSxufWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5ob3ZlcmluZm87aWYoImFsbCI9PT1lKXJldHVybiJ4K3RleHQrbmFtZSI7dmFyIHI9ZS5zcGxpdCgiKyIpLG49ci5pbmRleE9mKCJ5IiksaT1yLmluZGV4T2YoInRleHQiKTtyZXR1cm4tMSE9PW4mJihyLnNwbGljZShuLDEpLC0xPT09aSYmci5wdXNoKCJ0ZXh0IikpLHIuam9pbigiKyIpfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPXIuX2Z1bGxJbnB1dCxpPW4udGlja3dpZHRoLGE9bi5fbWluRGlmZjtpZighYSl7dmFyIG89dC5fZnVsbERhdGEsbD1bXTthPTEvMDt2YXIgdTtmb3IodT0wO3U8by5sZW5ndGg7dSsrKXt2YXIgYz1vW3VdLl9mdWxsSW5wdXQ7aWYoIm9obGMiPT09Yy50eXBlJiYhMD09PWMudmlzaWJsZSYmYy54YXhpcz09PWUuX2lkJiYobC5wdXNoKGMpLGMueCYmYy54Lmxlbmd0aD4xKSl7dmFyIGg9cy5zaW1wbGVNYXAoYy54LGUuZDJjLDAsci54Y2FsZW5kYXIpLGY9cy5kaXN0aW5jdFZhbHMoaCkubWluRGlmZjthPU1hdGgubWluKGEsZil9fWZvcihhPT09MS8wJiYoYT0xKSx1PTA7dTxsLmxlbmd0aDt1KyspbFt1XS5fbWluRGlmZj1hfXJldHVybiBhKml9dmFyIG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi9oZWxwZXJzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIik7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0ib2hsYyIsci5hdHRyaWJ1dGVzPXt9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGwuY2xlYXJFcGhlbWVyYWxUcmFuc2Zvcm1PcHRzKG4pLGwuY29weU9ITEModCxlKSx0fSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07Im9obGMiPT09YS50eXBlP3IucHVzaChuKGEsZSwiaW5jcmVhc2luZyIpLG4oYSxlLCJkZWNyZWFzaW5nIikpOnIucHVzaChhKX1yZXR1cm4gbC5hZGRSYW5nZVNsaWRlcihyLGUubGF5b3V0KSxyfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9ci5kaXJlY3Rpb24scz1sLmdldEZpbHRlckZuKGkpLGg9Yy5nZXRGcm9tVHJhY2UodCxlLCJ4IiksZj1jLmdldEZyb21UcmFjZSh0LGUsInkiKSxkPWEodCxoLGUpLHA9ZS5vcGVuLG09ZS5oaWdoLHY9ZS5sb3csZz1lLmNsb3NlLHk9ZS50ZXh0LGI9cC5sZW5ndGgseD1bXSxfPVtdLHc9W107bj1lLl9mdWxsSW5wdXQueD9mdW5jdGlvbih0KXt2YXIgcj1lLnhbdF0sbj1lLnhjYWxlbmRhcixpPWguZDJjKHIsMCxuKTt4LnB1c2goaC5jMmQoaS1kLDAsbikscixyLHIscixoLmMyZChpK2QsMCxuKSxudWxsKX06ZnVuY3Rpb24odCl7eC5wdXNoKHQtZCx0LHQsdCx0LHQrZCxudWxsKX07Zm9yKHZhciBNPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUudGlja1RleHQodCx0LmMybChlKSwiaG92ZXIiKS50ZXh0fSxrPWUuX2Z1bGxJbnB1dC5ob3ZlcmluZm8sQT1rLnNwbGl0KCIrIiksVD0iYWxsIj09PWssUz1UfHwtMSE9PUEuaW5kZXhPZigieSIpLEU9VHx8LTEhPT1BLmluZGV4T2YoInRleHQiKSxMPUFycmF5LmlzQXJyYXkoeSk/ZnVuY3Rpb24odCl7cmV0dXJuIHlbdF18fCIifTpmdW5jdGlvbigpe3JldHVybiB5fSxDPTA7QzxiO0MrKylzKHBbQ10sZ1tDXSkmJm8obVtDXSkmJm8odltDXSkmJihuKEMpLGZ1bmN0aW9uKHQsZSxyLG4pe18ucHVzaCh0LHQsZSxyLG4sbixudWxsKX0ocFtDXSxtW0NdLHZbQ10sZ1tDXSksZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1bXTtTJiYoYS5wdXNoKCJPcGVuOiAiK00oZixlKSksYS5wdXNoKCJIaWdoOiAiK00oZixyKSksYS5wdXNoKCJMb3c6ICIrTShmLG4pKSxhLnB1c2goIkNsb3NlOiAiK00oZixpKSkpLEUmJmEucHVzaChMKHQpKTt2YXIgbz1hLmpvaW4oIjxicj4iKTt3LnB1c2gobyxvLG8sbyxvLG8sbnVsbCl9KEMscFtDXSxtW0NdLHZbQ10sZ1tDXSkpO2UueD14LGUueT1fLGUudGV4dD13fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjcsIi4vaGVscGVycyI6OTg3LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sOTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcCx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17ZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxsYWJlbGZvbnQ6dSh7fSxzLHt9KSx0aWNrZm9udDp1KHt9LHMse30pLHJhbmdlZm9udDp1KHt9LHMse30pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHRpY2t2YWxzOm8udGlja3ZhbHMsdGlja3RleHQ6by50aWNrdGV4dCx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IjNzIn0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX19LGxpbmU6dSh7fSxsKHt9LG4oImxpbmUiKSx7Y29sb3JzY2FsZTpsKHt9LG4oImxpbmUiKS5jb2xvcnNjYWxlLHtkZmx0OmEuVmlyaWRpc30pLGF1dG9jb2xvcnNjYWxlOmwoe30sbigibGluZSIpLmF1dG9jb2xvcnNjYWxlLHtkZmx0OiExfSl9KSx7c2hvd3NjYWxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhcjppfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjA5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIjo2MjAsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NzUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4fV0sOTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi9wbG90Iiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi9jb25zdGFudHMiKTtyLm5hbWU9InBhcmNvb3JkcyIsci5hdHRyPSJ0eXBlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aS5nZXRTdWJwbG90Q2FsY0RhdGEodC5jYWxjZGF0YSwicGFyY29vcmRzIiwicGFyY29vcmRzIik7ZS5sZW5ndGgmJmEodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygicGFyY29vcmRzIiksYT1lLl9oYXMmJmUuX2hhcygicGFyY29vcmRzIik7aSYmIWEmJihuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMtbGluZS1sYXllcnMiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMtbGluZS1sYXllcnMiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMiKS5yZW1vdmUoKSxuLl9nbGltYWdlcy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSl9LHIudG9TVkc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10aGlzLGk9bi50b0RhdGFVUkwoImltYWdlL3BuZyIpLGE9ci5hcHBlbmQoInN2ZzppbWFnZSIpLGw9dC5fZnVsbExheW91dC5fc2l6ZSx1PXQuX2Z1bGxEYXRhW2UubW9kZWwua2V5XS5kb21haW47YS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6aSx4OmwubCtsLncqdS54WzBdLXMub3ZlcmRyYWcseTpsLnQrbC5oKigxLXUueVsxXSksd2lkdGg6KHUueFsxXS11LnhbMF0pKmwudysyKnMub3ZlcmRyYWcsaGVpZ2h0Oih1LnlbMV0tdS55WzBdKSpsLmgscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KX12YXIgcj10Ll9mdWxsTGF5b3V0Ll9nbGltYWdlcyxpPW4uc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO2kuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1pLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIucGFyY29vcmRzLWxpbmVzLmNvbnRleHQsIC5wYXJjb29yZHMtbGluZXMuZm9jdXMiKS5lYWNoKGUpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5zZWxlY3RBbGwoIiNmaWx0ZXJCYXJQYXR0ZXJuIikuYXR0cigiaWQiLCJmaWx0ZXJCYXJQYXR0ZXJuIil9LDYwKX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcwNiwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi9jb25zdGFudHMiOjk5NSwiLi9wbG90IjoxZTMsZDM6MTIwfV0sOTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSEhZS5saW5lLmNvbG9yc2NhbGUmJmEuaXNBcnJheShlLmxpbmUuY29sb3IpLG89cj9lLmxpbmUuY29sb3I6QXJyYXkuYXBwbHkoMCxBcnJheShlLmRpbWVuc2lvbnMucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS52YWx1ZXMubGVuZ3RoKX0sMCkpKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4uNX0pLHM9cj9lLmxpbmUuY29sb3JzY2FsZTpbWzAsZS5saW5lLmNvbG9yXSxbMSxlLmxpbmUuY29sb3JdXTtyZXR1cm4gbihlLCJsaW5lIikmJmkoZSxlLmxpbmUuY29sb3IsImxpbmUiLCJjIiksW3tsaW5lQ29sb3I6byxjc2NhbGU6c31dfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjA4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYxNSwiLi4vLi4vbGliIjo3MjR9XSw5OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxsPXIubGluZSx1PSJjYiIrci51aWQ7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrdSkucmVtb3ZlKCksdm9pZCAwPT09bHx8IWwuc2hvd3NjYWxlKXJldHVybiB2b2lkIGEuYXV0b01hcmdpbih0LHUpO3ZhciBjPWwuY29sb3IsaD1sLmNtaW4sZj1sLmNtYXg7bihoKXx8KGg9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsYykpLG4oZil8fChmPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGMpKTt2YXIgZD1lWzBdLnQuY2I9cyh0LHUpLHA9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUobC5jb2xvcnNjYWxlLGgsZikse25vTnVtZXJpY0NoZWNrOiEwfSk7ZC5maWxsY29sb3IocCkuZmlsbGxldmVscyh7c3RhcnQ6aCxlbmQ6ZixzaXplOihmLWgpLzI1NH0pLm9wdGlvbnMobC5jb2xvcmJhcikoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Ijo2MDUsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDk5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21heERpbWVuc2lvbkNvdW50OjYwLG92ZXJkcmFnOjQ1LHZlcnRpY2FsUGFkZGluZzoyLHRpY2tEaXN0YW5jZTo1MCxjYW52YXNQaXhlbFJhdGlvOjEsYmxvY2tMaW5lQ291bnQ6NWUzLHNjYXR0ZXI6ITEsbGF5ZXJzOlsiY29udGV4dExpbmVMYXllciIsImZvY3VzTGluZUxheWVyIiwicGlja0xpbmVMYXllciJdLGF4aXNUaXRsZU9mZnNldDoyOCxheGlzRXh0ZW50T2Zmc2V0OjEwLGJhcjp7d2lkdGg6NCxjYXB0dXJld2lkdGg6MTAsZmlsbGNvbG9yOiJtYWdlbnRhIixmaWxsb3BhY2l0eToxLHN0cm9rZWNvbG9yOiJ3aGl0ZSIsc3Ryb2tlb3BhY2l0eToxLHN0cm9rZXdpZHRoOjEsaGFuZGxlaGVpZ2h0OjE2LGhhbmRsZW9wYWNpdHk6MSxoYW5kbGVvdmVybGFwOjB9fX0se31dLDk5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7aSgibGluZS5jb2xvciIscikscyh0LCJsaW5lIikmJmEuaXNBcnJheSh0LmxpbmUuY29sb3IpPyhpKCJsaW5lLmNvbG9yc2NhbGUiKSxsKHQsZSxuLGkse3ByZWZpeDoibGluZS4iLGNMZXR0ZXI6ImMifSkpOmkoImxpbmUuY29sb3IiLHIpfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHQsZSl7cmV0dXJuIGEuY29lcmNlKG4saSxvLmRpbWVuc2lvbnMsdCxlKX12YXIgbixpLHMsbD10LmRpbWVuc2lvbnN8fFtdLGM9ZS5kaW1lbnNpb25zPVtdLGg9MS8wO2ZvcihsLmxlbmd0aD51JiYoYS5sb2coInBhcmNvb3JkcyB0cmFjZXMgc3VwcG9ydCB1cCB0byAiK3UrIiBkaW1lbnNpb25zIGF0IHRoZSBtb21lbnQiKSxsLnNwbGljZSh1KSkscz0wO3M8bC5sZW5ndGg7cysrKWlmKG49bFtzXSxpPXt9LGEuaXNQbGFpbk9iamVjdChuKSl7dmFyIGY9cigidmFsdWVzIiksZD1yKCJ2aXNpYmxlIixmLmxlbmd0aD4wKTtkJiYocigibGFiZWwiKSxyKCJ0aWNrdmFscyIpLHIoInRpY2t0ZXh0IikscigidGlja2Zvcm1hdCIpLHIoInJhbmdlIikscigiY29uc3RyYWludHJhbmdlIiksaD1NYXRoLm1pbihoLGkudmFsdWVzLmxlbmd0aCkpLGkuX2luZGV4PXMsYy5wdXNoKGkpfWlmKGlzRmluaXRlKGgpKWZvcihzPTA7czxjLmxlbmd0aDtzKyspaT1jW3NdLGkudmlzaWJsZSYmaS52YWx1ZXMubGVuZ3RoPmgmJihpLnZhbHVlcz1pLnZhbHVlcy5zbGljZSgwLGgpKTtyZXR1cm4gY312YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSx1PXQoIi4vY29uc3RhbnRzIikubWF4RGltZW5zaW9uQ291bnQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLG8scixuKX12YXIgdT1pKHQsZSk7bih0LGUscixzLGwpLGwoImRvbWFpbi54IiksbCgiZG9tYWluLnkiKSxBcnJheS5pc0FycmF5KHUpJiZ1Lmxlbmd0aHx8KGUudmlzaWJsZT0hMSk7dmFyIGM9e2ZhbWlseTpzLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChzLmZvbnQuc2l6ZSooMTAvMTIpKSxjb2xvcjpzLmZvbnQuY29sb3J9O2EuY29lcmNlRm9udChsLCJsYWJlbGZvbnQiLGMpLGEuY29lcmNlRm9udChsLCJ0aWNrZm9udCIsYyksYS5jb2VyY2VGb250KGwsInJhbmdlZm9udCIsYyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjExLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYxNSwiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6OTkxLCIuL2NvbnN0YW50cyI6OTk1fV0sOTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY29sb3JiYXI9dCgiLi9jb2xvcmJhciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0icGFyY29vcmRzIixuLmJhc2VQbG90TW9kdWxlPXQoIi4vYmFzZV9wbG90Iiksbi5jYXRlZ29yaWVzPVsiZ2wiLCJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjo5OTEsIi4vYmFzZV9wbG90Ijo5OTIsIi4vY2FsYyI6OTkzLCIuL2NvbG9yYmFyIjo5OTQsIi4vZGVmYXVsdHMiOjk5NiwiLi9wbG90IjoxZTN9XSw5OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0LnJlYWQoe3g6MCx5OjAsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnh9KX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGE9dC5fZ2w7YS5lbmFibGUoYS5TQ0lTU09SX1RFU1QpLGEuc2Npc3NvcihlLHIsbixpKSx0LmNsZWFyKHtjb2xvcjpbMCwwLDAsMF0sZGVwdGg6MX0pfWZ1bmN0aW9uIGEodCxlLHIsYSxvLHMpe2Z1bmN0aW9uIGwobil7dmFyIGM7Yz1NYXRoLm1pbihhLG8tbiphKSxzLm9mZnNldD1nKm4qYSxzLmNvdW50PWcqYywwPT09biYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyLmN1cnJlbnRSYWZzW3VdKSxkZWxldGUgci5jdXJyZW50UmFmc1t1XSxpKHQscy5zY2lzc29yWCxzLnNjaXNzb3JZLHMuc2Npc3NvcldpZHRoLHMudmlld0JveFNpemVbMV0pKSxyLmNsZWFyT25seXx8KGUocyksbiphK2M8byYmKHIuY3VycmVudFJhZnNbdV09d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2wobisxKX0pKSxyLmRyYXdDb21wbGV0ZWQ9ITEpfXZhciB1PXMua2V5O3IuZHJhd0NvbXBsZXRlZHx8KG4odCksci5kcmF3Q29tcGxldGVkPSEwKSxsKDApfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE1hdGgubWF4KG0sTWF0aC5taW4oMS1tLHQpKX1mdW5jdGlvbiBzKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8MjU2O2krKyl7dmFyIGE9dChpLzI1NSk7bi5wdXNoKChlP2I6YSkuY29uY2F0KHIpKX1yZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuKHQ+Pj44KmUpJTI1Ni8yNTV9ZnVuY3Rpb24gdSh0LGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8dDthKyspZm9yKHZhciBzPTA7czx2O3MrKylpLnB1c2goczxlP3Jbc10ucGFkZGVkVW5pdFZhbHVlc1thXTpzPT09di0xP28oblthXSk6cz49di00P2woYSx2LTItcyk6LjUpO3JldHVybiBpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuLGksYSxvPVtdO2ZvcihpPTA7aTx0O2krKylmb3IoYT0wO2E8ZzthKyspZm9yKG49MDtuPHk7bisrKW8ucHVzaChlW2kqdityKnkrbl0pLHIqeStuPT09di0xJiZhJTI9PTAmJihvW28ubGVuZ3RoLTFdKj0tMSk7cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe3ZhciByPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1XSxuPXIubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBjKHQsZSxyKX0pLGk9e307cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0LGUpe2lbInAiK2UudG9TdHJpbmcoMTYpXT10fSksaX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gdCtlPD1yfXZhciBkPXQoInJlZ2wiKSxwPXQoIi4vY29uc3RhbnRzIikudmVydGljYWxQYWRkaW5nLG09MWUtNix2PTY0LGc9Mix5PTQsYj1bMTE5LDExOSwxMTldLHg9bmV3IFVpbnQ4QXJyYXkoNCksXz1uZXcgVWludDhBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixvLGwsYyxtLHYsZyl7ZnVuY3Rpb24geSh0KXtqWzBdPXRbMF0salsxXT10WzFdfWZ1bmN0aW9uIGIodCxlLGksYSxvLHMsbCx1LGMsaCxkKXt2YXIgdixnLHksYix4PVt0LGVdLF89cC9zLHc9WzAsMV0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuWzAsMSwyLDNdLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KDE2KX0pfSksTT1bMCwxXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bMCwxLDIsM10ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMTYpfSl9KTtmb3Iodj0wO3Y8Mjt2KyspZm9yKGI9eFt2XSxnPTA7Zzw0O2crKylmb3IoeT0wO3k8MTY7eSsrKXt2YXIgaz15KzE2Kmc7d1t2XVtnXVt5XT15KzE2Kmc9PT1iPzE6MCxNW3ZdW2ddW3ldPSghbSYmZih5LDE2KmcsSSk/QVswPT09az8wOjErKGstMSklKEEubGVuZ3RoLTEpXS5maWx0ZXJbdl06dikrKDIqdi0xKSpffXJldHVybntrZXk6bCxyZXNvbHV0aW9uOltyLG5dLHZpZXdCb3hQb3NpdGlvbjpbaSt6LGFdLHZpZXdCb3hTaXplOltvLHNdLGk6dCxpaTplLGRpbTFBOndbMF1bMF0sZGltMUI6d1swXVsxXSxkaW0xQzp3WzBdWzJdLGRpbTFEOndbMF1bM10sZGltMkE6d1sxXVswXSxkaW0yQjp3WzFdWzFdLGRpbTJDOndbMV1bMl0sZGltMkQ6d1sxXVszXSxsb0E6TVswXVswXSxsb0I6TVswXVsxXSxsb0M6TVswXVsyXSxsb0Q6TVswXVszXSxoaUE6TVsxXVswXSxoaUI6TVsxXVsxXSxoaUM6TVsxXVsyXSxoaUQ6TVsxXVszXSxjb2xvckNsYW1wOmosc2NhdHRlcjp1fHwwLHNjaXNzb3JYOmM9PT1oPzA6aSt6LHNjaXNzb3JXaWR0aDooYz09PWQ/ci1pK3o6bysuNSkrKGM9PT1oP2krejowKSxzY2lzc29yWTphLHNjaXNzb3JIZWlnaHQ6c319ZnVuY3Rpb24geCh0LG8scyl7dmFyIGwsdSxjLGg9MS8wLGY9LTEvMDtmb3IobD0wO2w8STtsKyspdFtsXS5kaW0yLmNhbnZhc1g+ZiYmKGY9dFtsXS5kaW0yLmNhbnZhc1gsYz1sKSx0W2xdLmRpbTEuY2FudmFzWDxoJiYoaD10W2xdLmRpbTEuY2FudmFzWCx1PWwpO2ZvcigwPT09SSYmaShPLDAsMCxyLG4pLGw9MDtsPEk7bCsrKXt2YXIgZD10W2xdLHA9ZC5kaW0xLG09cC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LHY9ZC5jYW52YXNYLHk9ZC5jYW52YXNZLHg9ZC5kaW0yLF89eC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LHc9ZC5wYW5lbFNpemVYLE09ZC5wYW5lbFNpemVZLEE9dit3O2lmKG98fCFOW21dfHxOW21dWzBdIT09dnx8TlttXVsxXSE9PUEpe05bbV09W3YsQV07dmFyIFQ9YihtLF8sdix5LHcsTSxwLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsZ3x8cC5zY2F0dGVyPzE6MCxsLHUsYyk7ay5jbGVhck9ubHk9cyxhKE8sRixrLG8/ZS5ibG9ja0xpbmVDb3VudDpTLFMsVCl9fX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIE8ucmVhZCh7eDp0LHk6ZSx3aWR0aDoxLGhlaWdodDoxLGRhdGE6X30pLF99ZnVuY3Rpb24gTSh0LGUscixuKXt2YXIgaT1uZXcgVWludDhBcnJheSg0KnIqbik7cmV0dXJuIE8ucmVhZCh7eDp0LHk6ZSx3aWR0aDpyLGhlaWdodDpuLGRhdGE6aX0pLGl9dmFyIGs9e2N1cnJlbnRSYWZzOnt9LGRyYXdDb21wbGV0ZWQ6ITAsY2xlYXJPbmx5OiExfSxBPW8uc2xpY2UoKSxUPUEubGVuZ3RoLFM9QVswXT9BWzBdLnZhbHVlcy5sZW5ndGg6MCxFPW0sTD12P2UuY29sb3IubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KTplLmNvbG9yLEM9TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS9MLmxlbmd0aCwxLzMpKSx6PWUuY2FudmFzT3ZlcmRyYWcsST1sLmxlbmd0aCxEPXUoUyxULEEsTCksUD1oKFMsRCksTz1kKHtjYW52YXM6dCxhdHRyaWJ1dGVzOntwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAsYW50aWFsaWFzOiF2fX0pLFI9Ty50ZXh0dXJlKHtzaGFwZTpbMjU2LDFdLGZvcm1hdDoicmdiYSIsdHlwZToidWludDgiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0IixkYXRhOnMoYyxtLE1hdGgucm91bmQoMjU1KihtP0M6MSkpKX0pLEY9Tyh7cHJvZmlsZTohMSxibGVuZDp7ZW5hYmxlOkUsZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6MSxkc3RBbHBoYToxfSxlcXVhdGlvbjp7cmdiOiJhZGQiLGFscGhhOiJhZGQifSxjb2xvcjpbMCwwLDAsMF19LGRlcHRoOntlbmFibGU6IUUsbWFzazohMCxmdW5jOiJsZXNzIixyYW5nZTpbMCwxXX0sY3VsbDp7ZW5hYmxlOiEwLGZhY2U6ImJhY2sifSxzY2lzc29yOntlbmFibGU6ITAsYm94Ont4Ok8ucHJvcCgic2Npc3NvclgiKSx5Ok8ucHJvcCgic2Npc3NvclkiKSx3aWR0aDpPLnByb3AoInNjaXNzb3JXaWR0aCIpLGhlaWdodDpPLnByb3AoInNjaXNzb3JIZWlnaHQiKX19LGRpdGhlcjohMSx2ZXJ0OnY/InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxuICAgICAgICAgICAgICAgcDQsIHA1LCBwNiwgcDcsXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XG5cbmF0dHJpYnV0ZSB2ZWM0IHBmO1xuXG51bmlmb3JtIG1hdDQgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xuXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XG5cbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xuXG51bmlmb3JtIGZsb2F0IHNjYXR0ZXI7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgemVybyA9IHZlYzQoMCwgMCwgMCwgMCk7XG52ZWM0IHVuaXQgPSB2ZWM0KDEsIDEsIDEsIDEpO1xudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xuXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcbn1cblxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcbn1cblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXQsIHVuaXQpO1xufVxuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbihwZlszXSkgKyAwLjU7XG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XG4gICAgZmxvYXQgZGVwdGggPSAxLjAgLSBwcm9taW5lbmNlO1xuXG4gICAgbWF0NCBwQSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xuICAgIG1hdDQgcEIgPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcbiAgICBtYXQ0IHBDID0gbWF0NChwOCwgcDksIHBhLCBwYik7XG4gICAgbWF0NCBwRCA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XG5cbiAgICBmbG9hdCBzaG93ID0gZmxvYXQobXNob3cocEEsIGxvQSwgaGlBKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICBtc2hvdyhwQiwgbG9CLCBoaUIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIG1zaG93KHBDLCBsb0MsIGhpQykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgbXNob3cocEQsIGxvRCwgaGlEKSk7XG5cbiAgICB2ZWMyIHl5ID0gc2hvdyAqIHZlYzIodmFsKHBBLCBkaW0yQSkgKyB2YWwocEIsIGRpbTJCKSArIHZhbChwQywgZGltMkMpICsgdmFsKHBELCBkaW0yRCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbChwQSwgZGltMUEpICsgdmFsKHBCLCBkaW0xQikgKyB2YWwocEMsIGRpbTFDKSArIHZhbChwRCwgZGltMUQpKTtcblxuICAgIHZlYzIgZGltZW5zaW9uVG9nZ2xlID0gdmVjMih4LCAxLjAgLSB4KTtcblxuICAgIHZlYzIgc2NhdHRlclRvZ2dsZSA9IHZlYzIoc2NhdHRlciwgMS4wIC0gc2NhdHRlcik7XG5cbiAgICBmbG9hdCB5ID0gZG90KHl5LCBkaW1lbnNpb25Ub2dnbGUpO1xuICAgIG1hdDIgeHkgPSBtYXQyKHZpZXdCb3hTaXplICogeXkgKyBkaW1lbnNpb25Ub2dnbGUsIHZpZXdCb3hTaXplICogdmVjMih4LCB5KSk7XG5cbiAgICB2ZWMyIHZpZXdCb3hYWSA9IHZpZXdCb3hQb3NpdGlvbiArIHh5ICogc2NhdHRlclRvZ2dsZTtcblxuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoXG4gICAgICAgIHh5UHJvamVjdGlvbiAqICgyLjAgKiB2aWV3Qm94WFkgLyByZXNvbHV0aW9uIC0gMS4wKSxcbiAgICAgICAgZGVwdGhPckhpZGUsXG4gICAgICAgIDEuMFxuICAgICk7XG5cbiAgICAvLyBwaWNrIGNvbG9yaW5nXG4gICAgZnJhZ0NvbG9yID0gdmVjNChwZi5yZ2IsIDEuMCk7XG59XG4iOiJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxuICAgICAgICAgICAgICAgcDgsIHA5LCBwYSwgcGIsXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xuXG5hdHRyaWJ1dGUgdmVjNCBwZjtcblxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcbiAgICAgICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRDtcblxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFBvc2l0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hTaXplO1xuXG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xuXG51bmlmb3JtIHZlYzIgY29sb3JDbGFtcDtcblxudW5pZm9ybSBmbG9hdCBzY2F0dGVyO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52ZWM0IHplcm8gPSB2ZWM0KDAsIDAsIDAsIDApO1xudmVjNCB1bml0ID0gdmVjNCgxLCAxLCAxLCAxKTtcbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcblxubWF0NCBtY2xhbXAobWF0NCBtLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XG4gICAgcmV0dXJuIG1hdDQoY2xhbXAobVswXSwgbG9bMF0sIGhpWzBdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzFdLCBsb1sxXSwgaGlbMV0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMl0sIGxvWzJdLCBoaVsyXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVszXSwgbG9bM10sIGhpWzNdKSk7XG59XG5cbmJvb2wgbXNob3cobWF0NCBwLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XG4gICAgcmV0dXJuIG1jbGFtcChwLCBsbywgaGkpID09IHA7XG59XG5cbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0LCB1bml0KTtcbn1cblxudm9pZCBtYWluKCkge1xuXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ24ocGZbM10pICsgMC41O1xuICAgIGZsb2F0IHByb21pbmVuY2UgPSBhYnMocGZbM10pO1xuICAgIGZsb2F0IGRlcHRoID0gMS4wIC0gcHJvbWluZW5jZTtcblxuICAgIG1hdDQgcEEgPSBtYXQ0KHAwLCBwMSwgcDIsIHAzKTtcbiAgICBtYXQ0IHBCID0gbWF0NChwNCwgcDUsIHA2LCBwNyk7XG4gICAgbWF0NCBwQyA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xuICAgIG1hdDQgcEQgPSBtYXQ0KHBjLCBwZCwgcGUsIGFicyhwZikpO1xuXG4gICAgZmxvYXQgc2hvdyA9IGZsb2F0KG1zaG93KHBBLCBsb0EsIGhpQSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgbXNob3cocEIsIGxvQiwgaGlCKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICBtc2hvdyhwQywgbG9DLCBoaUMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIG1zaG93KHBELCBsb0QsIGhpRCkpO1xuXG4gICAgdmVjMiB5eSA9IHNob3cgKiB2ZWMyKHZhbChwQSwgZGltMkEpICsgdmFsKHBCLCBkaW0yQikgKyB2YWwocEMsIGRpbTJDKSArIHZhbChwRCwgZGltMkQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwocEEsIGRpbTFBKSArIHZhbChwQiwgZGltMUIpICsgdmFsKHBDLCBkaW0xQykgKyB2YWwocEQsIGRpbTFEKSk7XG5cbiAgICB2ZWMyIGRpbWVuc2lvblRvZ2dsZSA9IHZlYzIoeCwgMS4wIC0geCk7XG5cbiAgICB2ZWMyIHNjYXR0ZXJUb2dnbGUgPSB2ZWMyKHNjYXR0ZXIsIDEuMCAtIHNjYXR0ZXIpO1xuXG4gICAgZmxvYXQgeSA9IGRvdCh5eSwgZGltZW5zaW9uVG9nZ2xlKTtcbiAgICBtYXQyIHh5ID0gbWF0Mih2aWV3Qm94U2l6ZSAqIHl5ICsgZGltZW5zaW9uVG9nZ2xlLCB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSkpO1xuXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB4eSAqIHNjYXR0ZXJUb2dnbGU7XG5cbiAgICBmbG9hdCBkZXB0aE9ySGlkZSA9IGRlcHRoICsgMi4wICogKDEuMCAtIHNob3cpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXG4gICAgICAgIGRlcHRoT3JIaWRlLFxuICAgICAgICAxLjBcbiAgICApO1xuXG4gICAgLy8gdmlzaWJsZSBjb2xvcmluZ1xuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XG59XG4iLApmcmFnOiJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iLHByaW1pdGl2ZToibGluZXMiLGxpbmVXaWR0aDoxLGF0dHJpYnV0ZXM6UCx1bmlmb3Jtczp7cmVzb2x1dGlvbjpPLnByb3AoInJlc29sdXRpb24iKSx2aWV3Qm94UG9zaXRpb246Ty5wcm9wKCJ2aWV3Qm94UG9zaXRpb24iKSx2aWV3Qm94U2l6ZTpPLnByb3AoInZpZXdCb3hTaXplIiksZGltMUE6Ty5wcm9wKCJkaW0xQSIpLGRpbTJBOk8ucHJvcCgiZGltMkEiKSxkaW0xQjpPLnByb3AoImRpbTFCIiksZGltMkI6Ty5wcm9wKCJkaW0yQiIpLGRpbTFDOk8ucHJvcCgiZGltMUMiKSxkaW0yQzpPLnByb3AoImRpbTJDIiksZGltMUQ6Ty5wcm9wKCJkaW0xRCIpLGRpbTJEOk8ucHJvcCgiZGltMkQiKSxsb0E6Ty5wcm9wKCJsb0EiKSxoaUE6Ty5wcm9wKCJoaUEiKSxsb0I6Ty5wcm9wKCJsb0IiKSxoaUI6Ty5wcm9wKCJoaUIiKSxsb0M6Ty5wcm9wKCJsb0MiKSxoaUM6Ty5wcm9wKCJoaUMiKSxsb0Q6Ty5wcm9wKCJsb0QiKSxoaUQ6Ty5wcm9wKCJoaUQiKSxwYWxldHRlOlIsY29sb3JDbGFtcDpPLnByb3AoImNvbG9yQ2xhbXAiKSxzY2F0dGVyOk8ucHJvcCgic2NhdHRlciIpfSxvZmZzZXQ6Ty5wcm9wKCJvZmZzZXQiKSxjb3VudDpPLnByb3AoImNvdW50Iil9KSxqPVswLDFdLE49W107cmV0dXJue3NldENvbG9yRG9tYWluOnkscmVuZGVyOngscmVhZFBpeGVsOncscmVhZFBpeGVsczpNLGRlc3Ryb3k6Ty5kZXN0cm95fX19LHsiLi9jb25zdGFudHMiOjk5NSxyZWdsOjQ5N31dLDk5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LmtleX1mdW5jdGlvbiBpKHQpe3JldHVyblt0XX1mdW5jdGlvbiBhKHQpe3JldHVybiEoInZpc2libGUiaW4gdCl8fHQudmlzaWJsZX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQucmFuZ2U/dC5yYW5nZVswXTpfLm1pbih0LnZhbHVlcykscj10LnJhbmdlP3QucmFuZ2VbMV06Xy5tYXgodC52YWx1ZXMpO3JldHVybiFpc05hTihlKSYmaXNGaW5pdGUoZSl8fChlPTApLCFpc05hTihyKSYmaXNGaW5pdGUocil8fChyPTApLGU9PT1yJiYodm9pZCAwPT09ZT8oZT0wLHI9MSk6MD09PWU/KGUtPTEscis9MSk6KGUqPS45LHIqPTEuMSkpLFtlLHJdfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGksYSxvO2ZvcihyPTAsbj10LnJhbmdlKCksaT0xLzAsYT1uWzBdLG87cjxuLmxlbmd0aDtyKyspe2lmKChvPU1hdGguYWJzKG5bcl0tZSkpPmkpcmV0dXJuIGE7aT1vLGE9bltyXX1yZXR1cm4gbltuLmxlbmd0aC0xXX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1vKHIpO3JldHVybiByLnRpY2t2YWxzP18uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihyLnRpY2t2YWxzKS5yYW5nZShyLnRpY2t2YWxzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1uWzBdKS8oblsxXS1uWzBdKX0pLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gdC1lK3IqKGUtKHQtZSkpfSkpOl8uc2NhbGUubGluZWFyKCkuZG9tYWluKG4pLnJhbmdlKFt0LWUsZV0pfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gXy5zY2FsZS5saW5lYXIoKS5yYW5nZShbdC1lLGVdKX1mdW5jdGlvbiBjKHQpe3JldHVybiBfLnNjYWxlLmxpbmVhcigpLmRvbWFpbihvKHQpKX1mdW5jdGlvbiBoKHQpe3ZhciBlPW8odCk7cmV0dXJuIHQudGlja3ZhbHMmJl8uc2NhbGUub3JkaW5hbCgpLmRvbWFpbih0LnRpY2t2YWxzKS5yYW5nZSh0LnRpY2t2YWxzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1lWzBdKS8oZVsxXS1lWzBdKX0pKX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkscj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFsxXX0pLG49ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIF8ucmdiKHQpfSksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF19fSxhPSJyZ2IiLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIF8uc2NhbGUubGluZWFyKCkuY2xhbXAoITApLmRvbWFpbihlKS5yYW5nZShuLm1hcChpKHQpKSl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49ZChlKSxpPW4udHJhY2Usbz1uLmxpbmVDb2xvcixzPW4uY3NjYWxlLGw9aS5saW5lLHU9aS5kb21haW4saD1pLmRpbWVuc2lvbnMscD10LndpZHRoLG09aS5sYWJlbGZvbnQsdj1pLnRpY2tmb250LGc9aS5yYW5nZWZvbnQseT14LmV4dGVuZERlZXAoe30sbCx7Y29sb3I6by5tYXAoYyh7dmFsdWVzOm8scmFuZ2U6W2wuY21pbixsLmNtYXhdfSkpLGJsb2NrTGluZUNvdW50OmIuYmxvY2tMaW5lQ291bnQsY2FudmFzT3ZlcmRyYWc6Yi5vdmVyZHJhZypiLmNhbnZhc1BpeGVsUmF0aW99KSxfPU1hdGguZmxvb3IocCoodS54WzFdLXUueFswXSkpLHc9TWF0aC5mbG9vcih0LmhlaWdodCoodS55WzFdLXUueVswXSkpLE09dC5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0saz1fLEE9dztyZXR1cm57a2V5OnIsY29sQ291bnQ6aC5maWx0ZXIoYSkubGVuZ3RoLGRpbWVuc2lvbnM6aCx0aWNrRGlzdGFuY2U6Yi50aWNrRGlzdGFuY2UsdW5pdFRvQ29sb3I6ZihzKSxsaW5lczp5LGxhYmVsRm9udDptLHRpY2tGb250OnYscmFuZ2VGb250OmcsdHJhbnNsYXRlWDp1LnhbMF0qcCx0cmFuc2xhdGVZOnQuaGVpZ2h0LXUueVsxXSp0LmhlaWdodCxwYWQ6TSxjYW52YXNXaWR0aDprKmIuY2FudmFzUGl4ZWxSYXRpbysyKnkuY2FudmFzT3ZlcmRyYWcsY2FudmFzSGVpZ2h0OkEqYi5jYW52YXNQaXhlbFJhdGlvLHdpZHRoOmssaGVpZ2h0OkEsY2FudmFzUGl4ZWxSYXRpbzpiLmNhbnZhc1BpeGVsUmF0aW99fWZ1bmN0aW9uIG0odCl7dmFyIGU9dC53aWR0aCxyPXQuaGVpZ2h0LG49dC5kaW1lbnNpb25zLGk9dC5jYW52YXNQaXhlbFJhdGlvLG89ZnVuY3Rpb24ocil7cmV0dXJuIGUqci9NYXRoLm1heCgxLHQuY29sQ291bnQtMSl9LHM9Yi52ZXJ0aWNhbFBhZGRpbmcvKHIqaSksZj0xLTIqcyxkPWZ1bmN0aW9uKHQpe3JldHVybiBzK2YqdH0scD17a2V5OnQua2V5LHhTY2FsZTpvLG1vZGVsOnR9LG09e307cmV0dXJuIHAuZGltZW5zaW9ucz1uLmZpbHRlcihhKS5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgYT1jKGUpLHM9bVtlLmxhYmVsXTtyZXR1cm4gbVtlLmxhYmVsXT0oc3x8MCkrMSx7a2V5OmUubGFiZWwrKHM/Il9fIitzOiIiKSxsYWJlbDplLmxhYmVsLHRpY2tGb3JtYXQ6ZS50aWNrZm9ybWF0LHRpY2t2YWxzOmUudGlja3ZhbHMsdGlja3RleHQ6ZS50aWNrdGV4dCxvcmRpbmFsOiEhZS50aWNrdmFscyxzY2F0dGVyOmIuc2NhdHRlcnx8ZS5zY2F0dGVyLHhJbmRleDpuLGNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXg6bix2aXNpYmxlSW5kZXg6ZS5faW5kZXgsaGVpZ2h0OnIsdmFsdWVzOmUudmFsdWVzLHBhZGRlZFVuaXRWYWx1ZXM6ZS52YWx1ZXMubWFwKGEpLm1hcChkKSx4U2NhbGU6byx4Om8obiksY2FudmFzWDpvKG4pKmksdW5pdFNjYWxlOnUocixiLnZlcnRpY2FsUGFkZGluZyksZG9tYWluU2NhbGU6bChyLGIudmVydGljYWxQYWRkaW5nLGUpLG9yZGluYWxTY2FsZTpoKGUpLGRvbWFpblRvVW5pdFNjYWxlOmEsZmlsdGVyOmUuY29uc3RyYWludHJhbmdlP2UuY29uc3RyYWludHJhbmdlLm1hcChhKTpbMCwxXSxwYXJlbnQ6cCxtb2RlbDp0fX0pLHB9ZnVuY3Rpb24gdih0KXtyZXR1cm4gYi5sYXllcnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybntrZXk6ZSxjb250ZXh0OiJjb250ZXh0TGluZUxheWVyIj09PWUscGljazoicGlja0xpbmVMYXllciI9PT1lLHZpZXdNb2RlbDp0LG1vZGVsOnQubW9kZWx9fSl9ZnVuY3Rpb24gZyh0KXt0LmNsYXNzZWQoImF4aXNFeHRlbnRUZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKX12YXIgeT10KCIuL2xpbmVzIiksYj10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi4vLi4vbGliIiksXz10KCJkMyIpLHc9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7ZnVuY3Rpb24gbCh0KXt2YXIgZT10LnNlbGVjdEFsbCgiZGVmcyIpLmRhdGEoaSxuKTtlLmVudGVyKCkuYXBwZW5kKCJkZWZzIik7dmFyIHI9ZS5zZWxlY3RBbGwoIiNmaWx0ZXJCYXJQYXR0ZXJuIikuZGF0YShpLG4pO3IuZW50ZXIoKS5hcHBlbmQoInBhdHRlcm4iKS5hdHRyKCJpZCIsImZpbHRlckJhclBhdHRlcm4iKS5hdHRyKCJwYXR0ZXJuVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLHIuYXR0cigieCIsLWIuYmFyLndpZHRoKS5hdHRyKCJ3aWR0aCIsYi5iYXIuY2FwdHVyZXdpZHRoKS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmhlaWdodH0pO3ZhciBhPXIuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShpLG4pO2EuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksYS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmhlaWdodH0pLmF0dHIoIndpZHRoIixiLmJhci53aWR0aCkuYXR0cigieCIsYi5iYXIud2lkdGgvMikuYXR0cigiZmlsbCIsYi5iYXIuZmlsbGNvbG9yKS5hdHRyKCJmaWxsLW9wYWNpdHkiLGIuYmFyLmZpbGxvcGFjaXR5KS5hdHRyKCJzdHJva2UiLGIuYmFyLnN0cm9rZWNvbG9yKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsYi5iYXIuc3Ryb2tlb3BhY2l0eSkuYXR0cigic3Ryb2tlLXdpZHRoIixiLmJhci5zdHJva2V3aWR0aCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5kaW1lbnNpb25zLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmZpbHRlclswXXx8MSE9PXQuZmlsdGVyWzFdfSl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj1lLnBhbmVsc3x8KGUucGFuZWxzPVtdKSxuPXQuZWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdH0pW2Uua2V5XS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX19kYXRhX199KSxpPW4ubGVuZ3RoLTEsYT0wO2E8MTthKyspZm9yKHZhciBvPTA7bzxpO28rKyl7dmFyIHM9cltvK2EqaV18fChyW28rYSppXT17fSksbD1uW29dLHU9bltvKzFdO3MuZGltMT1sLHMuZGltMj11LHMuY2FudmFzWD1sLmNhbnZhc1gscy5wYW5lbFNpemVYPXUuY2FudmFzWC1sLmNhbnZhc1gscy5wYW5lbFNpemVZPWUubW9kZWwuY2FudmFzSGVpZ2h0LzEscy55PWEqcy5wYW5lbFNpemVZLHMuY2FudmFzWT1lLm1vZGVsLmNhbnZhc0hlaWdodC1zLnktcy5wYW5lbFNpemVZfX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPWUucGFuZWxzfHwoZS5wYW5lbHM9W10pLG49dC5lYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSlbZS5rZXldLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fX2RhdGFfX30pLGk9bi5sZW5ndGgtMSxhPWksbz0wO288aTtvKyspZm9yKHZhciBzPTA7czxpO3MrKyl7dmFyIGw9cltzK28qaV18fChyW3MrbyppXT17fSksdT1uW3NdLGM9bltzKzFdO2wuZGltMT1uW28rMV0sbC5kaW0yPWMsbC5jYW52YXNYPXUuY2FudmFzWCxsLnBhbmVsU2l6ZVg9Yy5jYW52YXNYLXUuY2FudmFzWCxsLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQvYSxsLnk9bypsLnBhbmVsU2l6ZVksbC5jYW52YXNZPWUubW9kZWwuY2FudmFzSGVpZ2h0LWwueS1sLnBhbmVsU2l6ZVl9fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4oYi5zY2F0dGVyP2g6YykodCxlKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0Lm9yZGluYWw/ZnVuY3Rpb24oKXtyZXR1cm4iIn06Xy5mb3JtYXQodC50aWNrRm9ybWF0KX1mdW5jdGlvbiBNKCl7WD0hMCxUPSEwfWZ1bmN0aW9uIGsodCl7Uz0hMTt2YXIgZT10LnBhcmVudCxyPXQuYnJ1c2guZXh0ZW50KCksbj1lLmRpbWVuc2lvbnMsaT1uW3QueEluZGV4XS5maWx0ZXIsYT1YJiZyWzBdPT09clsxXTthJiYodC5icnVzaC5jbGVhcigpLF8uc2VsZWN0KHRoaXMpLnNlbGVjdCgicmVjdC5leHRlbnQiKS5hdHRyKCJ5IiwtMTAwKSk7dmFyIG89YT9bMCwxXTpyLnNsaWNlKCk7aWYob1swXSE9PWlbMF18fG9bMV0hPT1pWzFdKXtuW3QueEluZGV4XS5maWx0ZXI9byxlLmZvY3VzTGluZUxheWVyJiZlLmZvY3VzTGluZUxheWVyLnJlbmRlcihlLnBhbmVscywhMCk7dmFyIHM9dShlKTshVyYmcz8oZS5jb250ZXh0TGluZUxheWVyJiZlLmNvbnRleHRMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSxXPSEwKTpXJiYhcyYmKGUuY29udGV4dExpbmVMYXllciYmZS5jb250ZXh0TGluZUxheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksVz0hMSl9WD0hMX1mdW5jdGlvbiBBKHQpe3ZhciBlPXQucGFyZW50LHI9dC5icnVzaC5leHRlbnQoKSxuPXJbMF09PT1yWzFdLGk9ZS5kaW1lbnNpb25zLGE9aVt0LnhJbmRleF0uZmlsdGVyO2lmKCFuJiZ0Lm9yZGluYWwmJihhWzBdPXModC5vcmRpbmFsU2NhbGUsYVswXSksYVsxXT1zKHQub3JkaW5hbFNjYWxlLGFbMV0pLGFbMF09PT1hWzFdJiYoYVswXT1NYXRoLm1heCgwLGFbMF0tLjA1KSxhWzFdPU1hdGgubWluKDEsYVsxXSsuMDUpKSxfLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTUwKS5jYWxsKHQuYnJ1c2guZXh0ZW50KGEpKSxlLmZvY3VzTGluZUxheWVyLnJlbmRlcihlLnBhbmVscywhMCkpLGUucGlja0xpbmVMYXllciYmZS5waWNrTGluZUxheWVyLnJlbmRlcihlLnBhbmVscywhMCksUz0hMCxUPSJlbmRpbmciLG8mJm8uZmlsdGVyQ2hhbmdlZCl7dmFyIGw9dC5kb21haW5Ub1VuaXRTY2FsZS5pbnZlcnQsdT1hLm1hcChsKTtvLmZpbHRlckNoYW5nZWQoZS5rZXksdC52aXNpYmxlSW5kZXgsdSl9fXZhciBUPSExLFM9ITAsRT1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZCh0KS50cmFjZS52aXNpYmxlfSkubWFwKHAuYmluZCgwLGEpKS5tYXAobSk7dC5zZWxlY3RBbGwoIi5wYXJjb29yZHMtbGluZS1sYXllcnMiKS5yZW1vdmUoKTt2YXIgTD10LnNlbGVjdEFsbCgiLnBhcmNvb3Jkcy1saW5lLWxheWVycyIpLmRhdGEoRSxuKTtMLmVudGVyKCkuaW5zZXJ0KCJkaXYiLCIuIitlLmF0dHIoImNsYXNzIikuc3BsaXQoIiAiKS5qb2luKCIgLiIpKS5jbGFzc2VkKCJwYXJjb29yZHMtbGluZS1sYXllcnMiLCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94IiksTC5zdHlsZSgidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQubW9kZWwudHJhbnNsYXRlWC1iLm92ZXJkcmFnKSsicHgsIit0Lm1vZGVsLnRyYW5zbGF0ZVkrInB4KSJ9KTt2YXIgQz1MLnNlbGVjdEFsbCgiLnBhcmNvb3Jkcy1saW5lcyIpLmRhdGEodixuKSx6PXtyZW5kZXJlcnM6W10sZGltZW5zaW9uczpbXX0sST1udWxsO0MuZW50ZXIoKS5hcHBlbmQoImNhbnZhcyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4icGFyY29vcmRzLWxpbmVzICIrKHQuY29udGV4dD8iY29udGV4dCI6dC5waWNrPyJwaWNrIjoiZm9jdXMiKX0pLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgiZmxvYXQiLCJsZWZ0Iikuc3R5bGUoImNsZWFyIiwiYm90aCIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoInBvc2l0aW9uIixmdW5jdGlvbih0LGUpe3JldHVybiJhYnNvbHV0ZSJ9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlja30pLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHQpe2lmKFMmJnQubGluZUxheWVyJiZvJiZvLmhvdmVyKXt2YXIgZT1fLmV2ZW50LHI9dGhpcy53aWR0aCxuPXRoaXMuaGVpZ2h0LGk9Xy5tb3VzZSh0aGlzKSxhPWlbMF0scz1pWzFdO2lmKGE8MHx8czwwfHxhPj1yfHxzPj1uKXJldHVybjt2YXIgbD10LmxpbmVMYXllci5yZWFkUGl4ZWwoYSxuLTEtcyksdT0wIT09bFszXSxjPXU/bFsyXSsyNTYqKGxbMV0rMjU2KmxbMF0pOm51bGwsaD17eDphLHk6cyxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WSxkYXRhSW5kZXg6dC5tb2RlbC5rZXksY3VydmVOdW1iZXI6Y307YyE9PUkmJih1P28uaG92ZXIoaCk6by51bmhvdmVyJiZvLnVuaG92ZXIoaCksST1jKX19KSxDLnN0eWxlKCJtYXJnaW4iLGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwucGFkO3JldHVybiBlLnQrInB4ICIrZS5yKyJweCAiK2UuYisicHggIitlLmwrInB4In0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jYW52YXNXaWR0aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY2FudmFzSGVpZ2h0fSkuc3R5bGUoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC53aWR0aCsyKmIub3ZlcmRyYWcrInB4In0pLnN0eWxlKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmhlaWdodCsicHgifSkuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2s/LjAxOjF9KSxlLnN0eWxlKCJiYWNrZ3JvdW5kIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKSIpO3ZhciBEPWUuc2VsZWN0QWxsKCIucGFyY29vcmRzIikuZGF0YShFLG4pO0QuZXhpdCgpLnJlbW92ZSgpLEQuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwYXJjb29yZHMiLCEwKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLmNhbGwobCksRC5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwud2lkdGgrdC5tb2RlbC5wYWQubCt0Lm1vZGVsLnBhZC5yfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5oZWlnaHQrdC5tb2RlbC5wYWQudCt0Lm1vZGVsLnBhZC5ifSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5tb2RlbC50cmFuc2xhdGVYKyIsIit0Lm1vZGVsLnRyYW5zbGF0ZVkrIikifSk7dmFyIFA9RC5zZWxlY3RBbGwoIi5wYXJjb29yZHNDb250cm9sVmlldyIpLmRhdGEoaSxuKTtQLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicGFyY29vcmRzQ29udHJvbFZpZXciLCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94IiksUC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0Lm1vZGVsLnBhZC5sKyIsIit0Lm1vZGVsLnBhZC50KyIpIn0pO3ZhciBPPVAuc2VsZWN0QWxsKCIueUF4aXMiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9LG4pO08uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5QXhpcyIsITApLmVhY2goZnVuY3Rpb24odCl7ei5kaW1lbnNpb25zLnB1c2godCl9KSxQLmVhY2goZnVuY3Rpb24odCl7ZihPLHQpfSksQy5lYWNoKGZ1bmN0aW9uKHQpe3QubGluZUxheWVyPXkodGhpcyx0Lm1vZGVsLmxpbmVzLHQubW9kZWwuY2FudmFzV2lkdGgsdC5tb2RlbC5jYW52YXNIZWlnaHQsdC52aWV3TW9kZWwuZGltZW5zaW9ucyx0LnZpZXdNb2RlbC5wYW5lbHMsdC5tb2RlbC51bml0VG9Db2xvcix0LmNvbnRleHQsdC5waWNrLGIuc2NhdHRlciksdC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyLHoucmVuZGVyZXJzLnB1c2goZnVuY3Rpb24oKXt0LmxpbmVMYXllci5yZW5kZXIodC52aWV3TW9kZWwucGFuZWxzLCEwKX0pLHQubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsIXQuY29udGV4dCl9KSxPLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueFNjYWxlKHQueEluZGV4KSsiLCAwKSJ9KSxPLmNhbGwoXy5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkub24oImRyYWciLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O1M9ITEsVHx8KHQueD1NYXRoLm1heCgtYi5vdmVyZHJhZyxNYXRoLm1pbih0Lm1vZGVsLndpZHRoK2Iub3ZlcmRyYWcsXy5ldmVudC54KSksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sTy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KS5lYWNoKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUueEluZGV4KSxlLmNhbnZhc1g9ZS54KmUubW9kZWwuY2FudmFzUGl4ZWxSYXRpb30pLGYoTyxlKSxPLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueFNjYWxlKHQueEluZGV4KSsiLCAwKSJ9KSxfLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiwgMCkiKSxPLmVhY2goZnVuY3Rpb24ocixuLGkpe2k9PT10LnBhcmVudC5rZXkmJihlLmRpbWVuc2lvbnNbbl09cil9KSxlLmNvbnRleHRMaW5lTGF5ZXImJmUuY29udGV4dExpbmVMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXUoZSkpLGUuZm9jdXNMaW5lTGF5ZXIucmVuZGVyJiZlLmZvY3VzTGluZUxheWVyLnJlbmRlcihlLnBhbmVscykpfSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O2lmKFQpcmV0dXJuIHZvaWQoImVuZGluZyI9PT1UJiYoVD0hMSkpO3QueD10LnhTY2FsZSh0LnhJbmRleCksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sZihPLGUpLF8uc2VsZWN0KHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSxlLmNvbnRleHRMaW5lTGF5ZXImJmUuY29udGV4dExpbmVMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXUoZSkpLGUuZm9jdXNMaW5lTGF5ZXImJmUuZm9jdXNMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzKSxlLnBpY2tMaW5lTGF5ZXImJmUucGlja0xpbmVMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLFM9ITAsbyYmby5heGVzTW92ZWQmJm8uYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKX0pKSxPLmV4aXQoKS5yZW1vdmUoKTt2YXIgUj1PLnNlbGVjdEFsbCgiLmF4aXNPdmVybGF5cyIpLmRhdGEoaSxuKTtSLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpc092ZXJsYXlzIiwhMCksUi5zZWxlY3RBbGwoIi5heGlzIikucmVtb3ZlKCk7dmFyIEY9Ui5zZWxlY3RBbGwoIi5heGlzIikuZGF0YShpLG4pO0YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzIiwhMCksRi5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwuaGVpZ2h0L3QubW9kZWwudGlja0Rpc3RhbmNlLHI9dC5kb21haW5TY2FsZSxuPXIuZG9tYWluKCksaT10LnRpY2t0ZXh0O18uc2VsZWN0KHRoaXMpLmNhbGwoXy5zdmcuYXhpcygpLm9yaWVudCgibGVmdCIpLnRpY2tTaXplKDQpLm91dGVyVGlja1NpemUoMikudGlja3MoZSx0LnRpY2tGb3JtYXQpLnRpY2tWYWx1ZXModC5vcmRpbmFsP24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkmJmlbZV18fHR9KTpudWxsKS50aWNrRm9ybWF0KHQub3JkaW5hbD9mdW5jdGlvbih0KXtyZXR1cm4gdH06bnVsbCkuc2NhbGUocikpLHcuZm9udChGLnNlbGVjdEFsbCgidGV4dCIpLHQubW9kZWwudGlja0ZvbnQpfSksRi5zZWxlY3RBbGwoIi5kb21haW4sIC50aWNrPmxpbmUiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC4yNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksRi5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1zaGFkb3ciLCIxcHggMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IDFweCAxcHggI2ZmZiIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iikuc3R5bGUoInVzZXItc2VsZWN0Iiwibm9uZSIpO3ZhciBqPVIuc2VsZWN0QWxsKCIuYXhpc0hlYWRpbmciKS5kYXRhKGksbik7ai5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXNIZWFkaW5nIiwhMCk7dmFyIE49ai5zZWxlY3RBbGwoIi5heGlzVGl0bGUiKS5kYXRhKGksbik7Ti5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXNUaXRsZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKy1iLmF4aXNUaXRsZU9mZnNldCsiKSIpLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQubGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe3cuZm9udChOLHQubW9kZWwubGFiZWxGb250KX0pO3ZhciBCPVIuc2VsZWN0QWxsKCIuYXhpc0V4dGVudCIpLmRhdGEoaSxuKTtCLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpc0V4dGVudCIsITApO3ZhciBVPUIuc2VsZWN0QWxsKCIuYXhpc0V4dGVudFRvcCIpLmRhdGEoaSxuKTtVLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpc0V4dGVudFRvcCIsITApLFUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIistYi5heGlzRXh0ZW50T2Zmc2V0KyIpIik7dmFyIFY9VS5zZWxlY3RBbGwoIi5heGlzRXh0ZW50VG9wVGV4dCIpLmRhdGEoaSxuKTtWLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpc0V4dGVudFRvcFRleHQiLCEwKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhZnRlci1lZGdlIikuY2FsbChnKSxWLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHgodCkodC5kb21haW5TY2FsZS5kb21haW4oKS5zbGljZSgtMSlbMF0pfSkuZWFjaChmdW5jdGlvbih0KXt3LmZvbnQoVix0Lm1vZGVsLnJhbmdlRm9udCl9KTt2YXIgSD1CLnNlbGVjdEFsbCgiLmF4aXNFeHRlbnRCb3R0b20iKS5kYXRhKGksbik7SC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXNFeHRlbnRCb3R0b20iLCEwKSxILmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQubW9kZWwuaGVpZ2h0K2IuYXhpc0V4dGVudE9mZnNldCkrIikifSk7dmFyIHE9SC5zZWxlY3RBbGwoIi5heGlzRXh0ZW50Qm90dG9tVGV4dCIpLmRhdGEoaSxuKTtxLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpc0V4dGVudEJvdHRvbVRleHQiLCEwKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJiZWZvcmUtZWRnZSIpLmNhbGwoZykscS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB4KHQpKHQuZG9tYWluU2NhbGUuZG9tYWluKClbMF0pfSkuZWFjaChmdW5jdGlvbih0KXt3LmZvbnQocSx0Lm1vZGVsLnJhbmdlRm9udCl9KTt2YXIgRz1SLnNlbGVjdEFsbCgiLmF4aXNCcnVzaCIpLmRhdGEoaSxuKSxZPUcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzQnJ1c2giLCEwKTtHLmVhY2goZnVuY3Rpb24odCl7dC5icnVzaHx8KHQuYnJ1c2g9Xy5zdmcuYnJ1c2goKS55KHQudW5pdFNjYWxlKS5vbigiYnJ1c2hzdGFydCIsTSkub24oImJydXNoIixrKS5vbigiYnJ1c2hlbmQiLEEpLDA9PT10LmZpbHRlclswXSYmMT09PXQuZmlsdGVyWzFdfHx0LmJydXNoLmV4dGVudCh0LmZpbHRlciksXy5zZWxlY3QodGhpcykuY2FsbCh0LmJydXNoKSl9KSxZLnNlbGVjdEFsbCgicmVjdCIpLmF0dHIoIngiLC1iLmJhci5jYXB0dXJld2lkdGgvMikuYXR0cigid2lkdGgiLGIuYmFyLmNhcHR1cmV3aWR0aCksWS5zZWxlY3RBbGwoInJlY3QuZXh0ZW50IikuYXR0cigiZmlsbCIsInVybCgjZmlsdGVyQmFyUGF0dGVybikiKS5zdHlsZSgiY3Vyc29yIiwibnMtcmVzaXplIikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5maWx0ZXJbMF0mJjE9PT10LmZpbHRlclsxXX0pLmF0dHIoInkiLC0xMDApLFkuc2VsZWN0QWxsKCIucmVzaXplIHJlY3QiKS5hdHRyKCJoZWlnaHQiLGIuYmFyLmhhbmRsZWhlaWdodCkuYXR0cigib3BhY2l0eSIsMCkuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIiksWS5zZWxlY3RBbGwoIi5yZXNpemUubiByZWN0Iikuc3R5bGUoImN1cnNvciIsIm4tcmVzaXplIikuYXR0cigieSIsYi5iYXIuaGFuZGxlb3ZlcmxhcC1iLmJhci5oYW5kbGVoZWlnaHQpLFkuc2VsZWN0QWxsKCIucmVzaXplLnMgcmVjdCIpLnN0eWxlKCJjdXJzb3IiLCJzLXJlc2l6ZSIpLmF0dHIoInkiLGIuYmFyLmhhbmRsZW92ZXJsYXApO3ZhciBYPSExLFc9ITE7cmV0dXJuIHp9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9saWIiOjcyNCwiLi9jb25zdGFudHMiOjk5NSwiLi9saW5lcyI6OTk4LGQzOjEyMH1dLDFlMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9wYXBlcixhPXIuX3BhcGVyZGl2LG89e30scz17fSxsPXIuX3NpemU7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7b1tyXT10LmRhdGFbcl0uZGltZW5zaW9ucyxzW3JdPXQuZGF0YVtyXS5kaW1lbnNpb25zLnNsaWNlKCl9KTt2YXIgdT1mdW5jdGlvbihlLHIsbil7dmFyIGk9c1tlXVtyXSxhPWkuY29uc3RyYWludHJhbmdlO2EmJjI9PT1hLmxlbmd0aHx8KGE9aS5jb25zdHJhaW50cmFuZ2U9W10pLGFbMF09blswXSxhWzFdPW5bMV0sdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIpfSxjPWZ1bmN0aW9uKGUpe3QuZW1pdCgicGxvdGx5X2hvdmVyIixlKX0saD1mdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV91bmhvdmVyIixlKX0sZj1mdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISgidmlzaWJsZSJpbiB0KXx8dC52aXNpYmxlfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX12YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShyLHQsZSktaShyLHQsbil9fShzW2VdLmZpbHRlcihuKSk7b1tlXS5zb3J0KGEpLHNbZV0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFuKHQpfSkuc29ydChmdW5jdGlvbih0KXtyZXR1cm4gc1tlXS5pbmRleE9mKHQpfSkuZm9yRWFjaChmdW5jdGlvbih0KXtvW2VdLnNwbGljZShvW2VdLmluZGV4T2YodCksMSksb1tlXS5zcGxpY2Uoc1tlXS5pbmRleE9mKHQpLDAsdCl9KSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIil9O24oYSxpLGUse3dpZHRoOmwudyxoZWlnaHQ6bC5oLG1hcmdpbjp7dDpsLnQscjpsLnIsYjpsLmIsbDpsLmx9fSx7ZmlsdGVyQ2hhbmdlZDp1LGhvdmVyOmMsdW5ob3ZlcjpoLGF4ZXNNb3ZlZDpmfSl9fSx7Ii4vcGFyY29vcmRzIjo5OTl9XSwxMDAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGRsYWJlbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmUsYXJyYXlPazohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITB9fX0sdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LHNjYWxlZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdLGV4dHJhczpbIm5vbmUiXX0saG92ZXJpbmZvOm8oe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYXV0byIsIm5vbmUiXSxkZmx0OiJhdXRvIixhcnJheU9rOiEwfSx0ZXh0Zm9udDpvKHt9LGkse30pLGluc2lkZXRleHRmb250Om8oe30saSx7fSksb3V0c2lkZXRleHRmb250Om8oe30saSx7fSksZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxob2xlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MH0sc29ydDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSJ9LHJvdGF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMzYwLG1heDozNjAsZGZsdDowfSxwdWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OH1dLDEwMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EuX21vZHVsZT09PWUmJiEwPT09YS52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9dmFyIGk9dCgiLi4vLi4vcmVnaXN0cnkiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ2V0TW9kdWxlKCJwaWUiKSxyPW4odC5jYWxjZGF0YSxlKTtyLmxlbmd0aCYmZS5wbG90KHQscil9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBpZSIpLGE9ZS5faGFzJiZlLl9oYXMoInBpZSIpO2kmJiFhJiZuLl9waWVsYXllci5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKX19LHsiLi4vLi4vcmVnaXN0cnkiOjg0Mn1dLDEwMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZighbCl7dmFyIGU9by5kZWZhdWx0cztsPWUuc2xpY2UoKTt2YXIgcjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWwucHVzaChhKGVbcl0pLmxpZ2h0ZW4oMjApLnRvSGV4U3RyaW5nKCkpO2ZvcihyPTA7cjxvLmRlZmF1bHRzLmxlbmd0aDtyKyspbC5wdXNoKGEoZVtyXSkuZGFya2VuKDIwKS50b0hleFN0cmluZygpKX1yZXR1cm4gbFt0JWwubGVuZ3RoXX12YXIgaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCx1LGMsaCxmLGQ9ZS52YWx1ZXMscD1lLmxhYmVscyxtPVtdLHY9dC5fZnVsbExheW91dCxnPXYuX3BpZWNvbG9ybWFwLHk9e30sYj0hMSx4PTAsXz12LmhpZGRlbmxhYmVsc3x8W107aWYoZS5kbGFiZWwpZm9yKHA9bmV3IEFycmF5KGQubGVuZ3RoKSxyPTA7cjxkLmxlbmd0aDtyKyspcFtyXT1TdHJpbmcoZS5sYWJlbDArciplLmRsYWJlbCk7Zm9yKHI9MDtyPGQubGVuZ3RoO3IrKylsPWRbcl0saShsKSYmKChsPStsKTwwfHwodT1wW3JdLHZvaWQgMCE9PXUmJiIiIT09dXx8KHU9ciksdT1TdHJpbmcodSksdm9pZCAwPT09eVt1XSYmKHlbdV09ITAsYz1hKGUubWFya2VyLmNvbG9yc1tyXSksYy5pc1ZhbGlkKCk/KGM9by5hZGRPcGFjaXR5KGMsYy5nZXRBbHBoYSgpKSxnW3VdfHwoZ1t1XT1jKSk6Z1t1XT9jPWdbdV06KGM9ITEsYj0hMCksaD0tMSE9PV8uaW5kZXhPZih1KSxofHwoeCs9bCksbS5wdXNoKHt2OmwsbGFiZWw6dSxjb2xvcjpjLGk6cixoaWRkZW46aH0pKSkpO2lmKGUuc29ydCYmbS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudi10LnZ9KSxiKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspZj1tW3JdLCExPT09Zi5jb2xvciYmKGdbZi5sYWJlbF09Zi5jb2xvcj1uKHYuX3BpZWRlZmF1bHRjb2xvcmNvdW50KSx2Ll9waWVkZWZhdWx0Y29sb3Jjb3VudCsrKTtpZihtWzBdJiYobVswXS52VG90YWw9eCksZS50ZXh0aW5mbyYmIm5vbmUiIT09ZS50ZXh0aW5mbyl7dmFyIHcsTT0tMSE9PWUudGV4dGluZm8uaW5kZXhPZigibGFiZWwiKSxrPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKCJ0ZXh0IiksQT0tMSE9PWUudGV4dGluZm8uaW5kZXhPZigidmFsdWUiKSxUPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKCJwZXJjZW50IiksUz12LnNlcGFyYXRvcnM7Zm9yKHI9MDtyPG0ubGVuZ3RoO3IrKylmPW1bcl0sdz1NP1tmLmxhYmVsXTpbXSxrJiZlLnRleHRbZi5pXSYmdy5wdXNoKGUudGV4dFtmLmldKSxBJiZ3LnB1c2gocy5mb3JtYXRQaWVWYWx1ZShmLnYsUykpLFQmJncucHVzaChzLmZvcm1hdFBpZVBlcmNlbnQoZi52L3gsUykpLGYudGV4dD13LmpvaW4oIjxicj4iKX1yZXR1cm4gbX07dmFyIGx9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuL2hlbHBlcnMiOjEwMDUsImZhc3QtaXNudW1lcmljIjoxMjksdGlueWNvbG9yMjo1MzJ9XSwxMDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgcz1uLmNvZXJjZUZvbnQsbD1vKCJ2YWx1ZXMiKTtpZighQXJyYXkuaXNBcnJheShsKXx8IWwubGVuZ3RoKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dmFyIHU9bygibGFiZWxzIik7QXJyYXkuaXNBcnJheSh1KXx8KG8oImxhYmVsMCIpLG8oImRsYWJlbCIpKSxvKCJtYXJrZXIubGluZS53aWR0aCIpJiZvKCJtYXJrZXIubGluZS5jb2xvciIpO3ZhciBjPW8oIm1hcmtlci5jb2xvcnMiKTtBcnJheS5pc0FycmF5KGMpfHwoZS5tYXJrZXIuY29sb3JzPVtdKSxvKCJzY2FsZWdyb3VwIik7dmFyIGg9bygidGV4dCIpLGY9bygidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoaCk/InRleHQrcGVyY2VudCI6InBlcmNlbnQiKTtpZihvKCJob3ZlcnRleHQiKSxmJiYibm9uZSIhPT1mKXt2YXIgZD1vKCJ0ZXh0cG9zaXRpb24iKSxwPUFycmF5LmlzQXJyYXkoZCl8fCJhdXRvIj09PWQsbT1wfHwiaW5zaWRlIj09PWQsdj1wfHwib3V0c2lkZSI9PT1kO2lmKG18fHYpe3ZhciBnPXMobywidGV4dGZvbnQiLGEuZm9udCk7bSYmcyhvLCJpbnNpZGV0ZXh0Zm9udCIsZyksdiYmcyhvLCJvdXRzaWRldGV4dGZvbnQiLGcpfX1vKCJkb21haW4ueCIpLG8oImRvbWFpbi55IiksbygiaG9sZSIpLG8oInNvcnQiKSxvKCJkaXJlY3Rpb24iKSxvKCJyb3RhdGlvbiIpLG8oInB1bGwiKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6MTAwMX1dLDEwMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KDEwMCp0KS50b1ByZWNpc2lvbigzKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKSsiJSJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvUHJlY2lzaW9uKDEwKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKX19LHsiLi4vLi4vbGliIjo3MjR9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uc3R5bGVPbmU9dCgiLi9zdHlsZV9vbmUiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBpZSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuL2Jhc2VfcGxvdCIpLG4uY2F0ZWdvcmllcz1bInBpZSIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDAxLCIuL2Jhc2VfcGxvdCI6MTAwMiwiLi9jYWxjIjoxMDAzLCIuL2RlZmF1bHRzIjoxMDA0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDA3LCIuL2xheW91dF9kZWZhdWx0cyI6MTAwOCwiLi9wbG90IjoxMDA5LCIuL3N0eWxlIjoxMDEwLCIuL3N0eWxlX29uZSI6MTAxMX1dLDEwMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifX19LHt9XSwxMDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyFmdW5jdGlvbihyLGEpe24uY29lcmNlKHQsZSxpLHIsYSl9KCJoaWRkZW5sYWJlbHMiKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEwMDd9XSwxMDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpLGE9dC53aWR0aC90LmhlaWdodCxvPU1hdGguUEkqTWF0aC5taW4oZS52L3IudlRvdGFsLC41KSxzPTEtci50cmFjZS5ob2xlLGw9aShlLHIpLHU9e3NjYWxlOmwqci5yKjIvbixyQ2VudGVyOjEtbCxyb3RhdGU6MH07aWYodS5zY2FsZT49MSlyZXR1cm4gdTt2YXIgYz1hKzEvKDIqTWF0aC50YW4obykpLGg9ci5yKk1hdGgubWluKDEvKE1hdGguc3FydChjKmMrLjUpK2MpLHMvKE1hdGguc3FydChhKmErcy8yKSthKSksZj17c2NhbGU6MipoL3QuaGVpZ2h0LHJDZW50ZXI6TWF0aC5jb3MoaC9yLnIpLWgqYS9yLnIscm90YXRlOigxODAvTWF0aC5QSSplLm1pZGFuZ2xlKzcyMCklMTgwLTkwfSxkPTEvYSxwPWQrMS8oMipNYXRoLnRhbihvKSksbT1yLnIqTWF0aC5taW4oMS8oTWF0aC5zcXJ0KHAqcCsuNSkrcCkscy8oTWF0aC5zcXJ0KGQqZCtzLzIpK2QpKSx2PXtzY2FsZToyKm0vdC53aWR0aCxyQ2VudGVyOk1hdGguY29zKG0vci5yKS1tL2Evci5yLHJvdGF0ZTooMTgwL01hdGguUEkqZS5taWRhbmdsZSs4MTApJTE4MC05MH0sZz12LnNjYWxlPmYuc2NhbGU/djpmO3JldHVybiB1LnNjYWxlPDEmJmcuc2NhbGU+dS5zY2FsZT9nOnV9ZnVuY3Rpb24gaSh0LGUpe2lmKHQudj09PWUudlRvdGFsJiYhZS50cmFjZS5ob2xlKXJldHVybiAxO3ZhciByPU1hdGguUEkqTWF0aC5taW4odC52L2UudlRvdGFsLC41KTtyZXR1cm4gTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHIpKSwoMS1lLnRyYWNlLmhvbGUpLzIpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1lLnB4bWlkWzBdLG49ZS5weG1pZFsxXSxpPXQud2lkdGgvMixhPXQuaGVpZ2h0LzI7cmV0dXJuIHI8MCYmKGkqPS0xKSxuPDAmJihhKj0tMSkse3NjYWxlOjEsckNlbnRlcjoxLHJvdGF0ZTowLHg6aStNYXRoLmFicyhhKSooaT4wPzE6LTEpLzIseTphLygxK3Iqci8obipuKSksb3V0c2lkZTohMH19ZnVuY3Rpb24gbyh0LGUpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfXZhciBpLGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2O2ZvcihhPTA7YTwyO2ErKylmb3Iobz1hP3I6bixsPWE/TWF0aC5tYXg6TWF0aC5taW4sYz1hPzE6LTEsaT0wO2k8MjtpKyspe2ZvcihzPWk/TWF0aC5tYXg6TWF0aC5taW4sdT1pPzE6LTEsaD10W2FdW2ldLGguc29ydChvKSxmPXRbMS1hXVtpXSxkPWYuY29uY2F0KGgpLG09W10scD0wO3A8aC5sZW5ndGg7cCsrKXZvaWQgMCE9PWhbcF0ueUxhYmVsTWlkJiZtLnB1c2goaFtwXSk7Zm9yKHY9ITEscD0wO2EmJnA8Zi5sZW5ndGg7cCsrKWlmKHZvaWQgMCE9PWZbcF0ueUxhYmVsTWlkKXt2PWZbcF07YnJlYWt9Zm9yKHA9MDtwPG0ubGVuZ3RoO3ArKyl7dmFyIGc9cCYmbVtwLTFdO3YmJiFwJiYoZz12KSxmdW5jdGlvbih0LHIpe3J8fChyPXt9KTt2YXIgbixpLG8saCxmLHAsbT1yLmxhYmVsRXh0cmFZKyhhP3IueUxhYmVsTWF4OnIueUxhYmVsTWluKSx2PWE/dC55TGFiZWxNaW46dC55TGFiZWxNYXgsZz1hP3QueUxhYmVsTWF4OnQueUxhYmVsTWluLHk9dC5jeUZpbmFsK2wodC5weDBbMV0sdC5weDFbMV0pLGI9bS12O2lmKGIqYz4wJiYodC5sYWJlbEV4dHJhWT1iKSxBcnJheS5pc0FycmF5KGUucHVsbCkpZm9yKGk9MDtpPGQubGVuZ3RoO2krKykobz1kW2ldKT09PXR8fChlLnB1bGxbdC5pXXx8MCk+PWUucHVsbFtvLmldfHwoKHQucHhtaWRbMV0tby5weG1pZFsxXSkqYz4wPyhoPW8uY3lGaW5hbCtsKG8ucHgwWzFdLG8ucHgxWzFdKSwoYj1oLXYtdC5sYWJlbEV4dHJhWSkqYz4wJiYodC5sYWJlbEV4dHJhWSs9YikpOihnK3QubGFiZWxFeHRyYVkteSkqYz4wJiYobj0zKnUqTWF0aC5hYnMoaS1kLmluZGV4T2YodCkpLGY9by5jeEZpbmFsK3Moby5weDBbMF0sby5weDFbMF0pLChwPWYrbi0odC5jeEZpbmFsK3QucHhtaWRbMF0pLXQubGFiZWxFeHRyYVgpKnU+MCYmKHQubGFiZWxFeHRyYVgrPXApKSl9KG1bcF0sZyl9fX1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyxoLGYsZD1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXtpZihvPXRbaV1bMF0scz1vLnRyYWNlLHI9ZS53KihzLmRvbWFpbi54WzFdLXMuZG9tYWluLnhbMF0pLG49ZS5oKihzLmRvbWFpbi55WzFdLXMuZG9tYWluLnlbMF0pLGw9cy50aWx0YXhpcypNYXRoLlBJLzE4MCxjPXMucHVsbCxBcnJheS5pc0FycmF5KGMpKWZvcihjPTAsYT0wO2E8cy5wdWxsLmxlbmd0aDthKyspcy5wdWxsW2FdPmMmJihjPXMucHVsbFthXSk7by5yPU1hdGgubWluKHIvdShzLnRpbHQsTWF0aC5zaW4obCkscy5kZXB0aCksbi91KHMudGlsdCxNYXRoLmNvcyhsKSxzLmRlcHRoKSkvKDIrMipjKSxvLmN4PWUubCtlLncqKHMuZG9tYWluLnhbMV0rcy5kb21haW4ueFswXSkvMixvLmN5PWUudCtlLmgqKDItcy5kb21haW4ueVsxXS1zLmRvbWFpbi55WzBdKS8yLHMuc2NhbGVncm91cCYmLTE9PT1kLmluZGV4T2Yocy5zY2FsZWdyb3VwKSYmZC5wdXNoKHMuc2NhbGVncm91cCl9Zm9yKGE9MDthPGQubGVuZ3RoO2ErKyl7Zm9yKGY9MS8wLGg9ZFthXSxpPTA7aTx0Lmxlbmd0aDtpKyspbz10W2ldWzBdLG8udHJhY2Uuc2NhbGVncm91cD09PWgmJihmPU1hdGgubWluKGYsby5yKm8uci9vLnZUb3RhbCkpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspbz10W2ldWzBdLG8udHJhY2Uuc2NhbGVncm91cD09PWgmJihvLnI9TWF0aC5zcXJ0KGYqby52VG90YWwpKX19ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPWgucipNYXRoLnNpbih0KSxyPS1oLnIqTWF0aC5jb3ModCk7cmV0dXJuIGQ/W2UqKDEtcypuKm4pK3IqbypzLGUqbypzK3IqKDEtcyppKmkpLE1hdGguc2luKGEpKihyKmktZSpuKV06W2Uscl19dmFyIHIsbixpLGEsbyxzLGwsdSxjLGg9dFswXSxmPWgudHJhY2UsZD1mLnRpbHQscD1mLnJvdGF0aW9uKk1hdGguUEkvMTgwLG09MipNYXRoLlBJL2gudlRvdGFsLHY9InB4MCIsZz0icHgxIjtpZigiY291bnRlcmNsb2Nrd2lzZSI9PT1mLmRpcmVjdGlvbil7Zm9yKGw9MDtsPHQubGVuZ3RoJiZ0W2xdLmhpZGRlbjtsKyspO2lmKGw9PT10Lmxlbmd0aClyZXR1cm47cCs9bSp0W2xdLnYsbSo9LTEsdj0icHgxIixnPSJweDAifWZvcihkJiYoYT1kKk1hdGguUEkvMTgwLHI9Zi50aWx0YXhpcypNYXRoLlBJLzE4MCxvPU1hdGguc2luKHIpKk1hdGguY29zKHIpLHM9MS1NYXRoLmNvcyhhKSxuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MocikpLGM9ZShwKSxsPTA7bDx0Lmxlbmd0aDtsKyspdT10W2xdLHUuaGlkZGVufHwodVt2XT1jLHArPW0qdS52LzIsdS5weG1pZD1lKHApLHUubWlkYW5nbGU9cCxwKz1tKnUudi8yLGM9ZShwKSx1W2ddPWMsdS5sYXJnZUFyYz11LnY+aC52VG90YWwvMj8xOjApfWZ1bmN0aW9uIHUodCxlLHIpe2lmKCF0KXJldHVybiAxO3ZhciBuPU1hdGguc2luKHQqTWF0aC5QSS8xODApO3JldHVybiBNYXRoLm1heCguMDEscipuKk1hdGguYWJzKGUpKzIqTWF0aC5zcXJ0KDEtbipuKmUqZSkpfXZhciBjPXQoImQzIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLG09dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtzKGUsci5fc2l6ZSk7dmFyIHU9ci5fcGllbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikuZGF0YShlKTt1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cih7InN0cm9rZS1saW5lam9pbiI6InJvdW5kIixjbGFzczoidHJhY2UifSksdS5leGl0KCkucmVtb3ZlKCksdS5vcmRlcigpLHUuZWFjaChmdW5jdGlvbihlKXt2YXIgcz1jLnNlbGVjdCh0aGlzKSx1PWVbMF0sdj11LnRyYWNlLGc9KHYuZGVwdGh8fDApKnUucipNYXRoLnNpbigwKS8yLHk9di50aWx0YXhpc3x8MCxiPXkqTWF0aC5QSS8xODAseD1bZypNYXRoLnNpbihiKSxnKk1hdGguY29zKGIpXSxfPXUucipNYXRoLmNvcygwKSx3PXMuc2VsZWN0QWxsKCJnLnBhcnQiKS5kYXRhKHYudGlsdD9bInRvcCIsInNpZGVzIl06WyJ0b3AiXSk7dy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4gdCsiIHBhcnQifSksdy5leGl0KCkucmVtb3ZlKCksdy5vcmRlcigpLGwoZSkscy5zZWxlY3RBbGwoIi50b3AiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9Yy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnNsaWNlIikuZGF0YShlKTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSxzLmV4aXQoKS5yZW1vdmUoKTt2YXIgbD1bW1tdLFtdXSxbW10sW11dXSxnPSExO3MuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiBvKG4pe24ub3JpZ2luYWxFdmVudD1jLmV2ZW50O3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YVt2LmluZGV4XSxzPWguY2FzdEhvdmVyaW5mbyhvLGEsZS5pKTtpZigiYWxsIj09PXMmJihzPSJsYWJlbCt0ZXh0K3ZhbHVlK3BlcmNlbnQrbmFtZSIpLHQuX2RyYWdnaW5nfHwhMT09PWEuaG92ZXJtb2RlfHwibm9uZSI9PT1zfHwic2tpcCI9PT1zfHwhcylyZXR1cm4gdm9pZCBoLmhvdmVyKHQsbiwicGllIik7dmFyIGw9aShlLHUpLGY9dytlLnB4bWlkWzBdKigxLWwpLGQ9TStlLnB4bWlkWzFdKigxLWwpLHA9ci5zZXBhcmF0b3JzLGc9W107LTEhPT1zLmluZGV4T2YoImxhYmVsIikmJmcucHVzaChlLmxhYmVsKSwtMSE9PXMuaW5kZXhPZigidGV4dCIpJiYoby5ob3ZlcnRleHQ/Zy5wdXNoKEFycmF5LmlzQXJyYXkoby5ob3ZlcnRleHQpP28uaG92ZXJ0ZXh0W2UuaV06by5ob3ZlcnRleHQpOm8udGV4dCYmby50ZXh0W2UuaV0mJmcucHVzaChvLnRleHRbZS5pXSkpLC0xIT09cy5pbmRleE9mKCJ2YWx1ZSIpJiZnLnB1c2gobS5mb3JtYXRQaWVWYWx1ZShlLnYscCkpLC0xIT09cy5pbmRleE9mKCJwZXJjZW50IikmJmcucHVzaChtLmZvcm1hdFBpZVBlcmNlbnQoZS52L3UudlRvdGFsLHApKSxoLmxvbmVIb3Zlcih7eDA6Zi1sKnUucix4MTpmK2wqdS5yLHk6ZCx0ZXh0Omcuam9pbigiPGJyPiIpLG5hbWU6LTEhPT1zLmluZGV4T2YoIm5hbWUiKT9vLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246ZS5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiLGNvbG9yOmguY2FzdEhvdmVyT3B0aW9uKHYsZS5pLCJiZ2NvbG9yIil8fGUuY29sb3IsYm9yZGVyQ29sb3I6aC5jYXN0SG92ZXJPcHRpb24odixlLmksImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpoLmNhc3RIb3Zlck9wdGlvbih2LGUuaSwiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpoLmNhc3RIb3Zlck9wdGlvbih2LGUuaSwiZm9udC5zaXplIiksZm9udENvbG9yOmguY2FzdEhvdmVyT3B0aW9uKHYsZS5pLCJmb250LmNvbG9yIil9LHtjb250YWluZXI6YS5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6YS5fcGFwZXIubm9kZSgpLGdkOnR9KSxoLmhvdmVyKHQsbiwicGllIiksVD0hMH1mdW5jdGlvbiBzKGUpe2Uub3JpZ2luYWxFdmVudD1jLmV2ZW50LHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpjLmV2ZW50LHBvaW50czpbZV19KSxUJiYoaC5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSksVD0hMSl9ZnVuY3Rpb24gZigpe3QuX2hvdmVyZGF0YT1bZV0sdC5faG92ZXJkYXRhLnRyYWNlPXUudHJhY2UsaC5jbGljayh0LGMuZXZlbnQpfWZ1bmN0aW9uIGIodCxyLG4saSl7cmV0dXJuImEiK2kqdS5yKyIsIitpKl8rIiAiK3krIiAiK2UubGFyZ2VBcmMrKG4/IiAxICI6IiAwICIpK2kqKHJbMF0tdFswXSkrIiwiK2kqKHJbMV0tdFsxXSl9aWYoZS5oaWRkZW4pcmV0dXJuIHZvaWQgYy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlLnBvaW50TnVtYmVyPWUuaSxlLmN1cnZlTnVtYmVyPXYuaW5kZXgsbFtlLnB4bWlkWzFdPDA/MDoxXVtlLnB4bWlkWzBdPDA/MDoxXS5wdXNoKGUpO3ZhciB3PXUuY3greFswXSxNPXUuY3kreFsxXSxrPWMuc2VsZWN0KHRoaXMpLEE9ay5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmRhdGEoW2VdKSxUPSExO2lmKEEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJzdXJmYWNlIiwhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSxrLnNlbGVjdCgicGF0aC50ZXh0bGluZSIpLnJlbW92ZSgpLGsub24oIm1vdXNlb3ZlciIsbykub24oIm1vdXNlb3V0IixzKS5vbigiY2xpY2siLGYpLHYucHVsbCl7dmFyIFM9KyhBcnJheS5pc0FycmF5KHYucHVsbCk/di5wdWxsW2UuaV06di5wdWxsKXx8MDtTPjAmJih3Kz1TKmUucHhtaWRbMF0sTSs9UyplLnB4bWlkWzFdKX1lLmN4RmluYWw9dyxlLmN5RmluYWw9TTt2YXIgRT12LmhvbGU7aWYoZS52PT09dS52VG90YWwpe3ZhciBMPSJNIisodytlLnB4MFswXSkrIiwiKyhNK2UucHgwWzFdKStiKGUucHgwLGUucHhtaWQsITAsMSkrYihlLnB4bWlkLGUucHgwLCEwLDEpKyJaIjtFP0EuYXR0cigiZCIsIk0iKyh3K0UqZS5weDBbMF0pKyIsIisoTStFKmUucHgwWzFdKStiKGUucHgwLGUucHhtaWQsITEsRSkrYihlLnB4bWlkLGUucHgwLCExLEUpKyJaIitMKTpBLmF0dHIoImQiLEwpfWVsc2V7dmFyIEM9YihlLnB4MCxlLnB4MSwhMCwxKTtpZihFKXt2YXIgej0xLUU7QS5hdHRyKCJkIiwiTSIrKHcrRSplLnB4MVswXSkrIiwiKyhNK0UqZS5weDFbMV0pK2IoZS5weDEsZS5weDAsITEsRSkrImwiK3oqZS5weDBbMF0rIiwiK3oqZS5weDBbMV0rQysiWiIpfWVsc2UgQS5hdHRyKCJkIiwiTSIrdysiLCIrTSsibCIrZS5weDBbMF0rIiwiK2UucHgwWzFdK0MrIloiKX12YXIgST1BcnJheS5pc0FycmF5KHYudGV4dHBvc2l0aW9uKT92LnRleHRwb3NpdGlvbltlLmldOnYudGV4dHBvc2l0aW9uLEQ9ay5zZWxlY3RBbGwoImcuc2xpY2V0ZXh0IikuZGF0YShlLnRleHQmJiJub25lIiE9PUk/WzBdOltdKTtELmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCksRC5leGl0KCkucmVtb3ZlKCksRC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9Yy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLnRleHQoZS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwoZC5mb250LCJvdXRzaWRlIj09PUk/di5vdXRzaWRldGV4dGZvbnQ6di5pbnNpZGV0ZXh0Zm9udCkuY2FsbChwLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgaSxvPWQuYkJveChyLm5vZGUoKSk7Im91dHNpZGUiPT09ST9pPWEobyxlKTooaT1uKG8sZSx1KSwiYXV0byI9PT1JJiZpLnNjYWxlPDEmJihyLmNhbGwoZC5mb250LHYub3V0c2lkZXRleHRmb250KSx2Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHk9PT12Lmluc2lkZXRleHRmb250LmZhbWlseSYmdi5vdXRzaWRldGV4dGZvbnQuc2l6ZT09PXYuaW5zaWRldGV4dGZvbnQuc2l6ZXx8KG89ZC5iQm94KHIubm9kZSgpKSksaT1hKG8sZSkpKTt2YXIgcz13K2UucHhtaWRbMF0qaS5yQ2VudGVyKyhpLnh8fDApLGw9TStlLnB4bWlkWzFdKmkuckNlbnRlcisoaS55fHwwKTtpLm91dHNpZGUmJihlLnlMYWJlbE1pbj1sLW8uaGVpZ2h0LzIsZS55TGFiZWxNaWQ9bCxlLnlMYWJlbE1heD1sK28uaGVpZ2h0LzIsZS5sYWJlbEV4dHJhWD0wLGUubGFiZWxFeHRyYVk9MCxnPSEwKSxyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3MrIiwiK2wrIikiKyhpLnNjYWxlPDE/InNjYWxlKCIraS5zY2FsZSsiKSI6IiIpKyhpLnJvdGF0ZT8icm90YXRlKCIraS5yb3RhdGUrIikiOiIiKSsidHJhbnNsYXRlKCIrLShvLmxlZnQrby5yaWdodCkvMisiLCIrLShvLnRvcCtvLmJvdHRvbSkvMisiKSIpfSl9KSxnJiZvKGwsdikscy5lYWNoKGZ1bmN0aW9uKHQpe2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBlPWMuc2VsZWN0KHRoaXMpLHI9ZS5zZWxlY3QoImcuc2xpY2V0ZXh0IHRleHQiKTtyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGFiZWxFeHRyYVgrIiwiK3QubGFiZWxFeHRyYVkrIikiK3IuYXR0cigidHJhbnNmb3JtIikpO3ZhciBuPXQuY3hGaW5hbCt0LnB4bWlkWzBdLGk9dC5jeUZpbmFsK3QucHhtaWRbMV0sYT0iTSIrbisiLCIraSxvPSh0LnlMYWJlbE1heC10LnlMYWJlbE1pbikqKHQucHhtaWRbMF08MD8tMToxKS80O2lmKHQubGFiZWxFeHRyYVgpe3ZhciBzPXQubGFiZWxFeHRyYVgqdC5weG1pZFsxXS90LnB4bWlkWzBdLGw9dC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWS0odC5jeUZpbmFsK3QucHhtaWRbMV0pO01hdGguYWJzKHMpPk1hdGguYWJzKGwpP2ErPSJsIitsKnQucHhtaWRbMF0vdC5weG1pZFsxXSsiLCIrbCsiSCIrKG4rdC5sYWJlbEV4dHJhWCtvKTphKz0ibCIrdC5sYWJlbEV4dHJhWCsiLCIrcysidiIrKGwtcykrImgiK299ZWxzZSBhKz0iViIrKHQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVkpKyJoIitvO2UuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgidGV4dGxpbmUiLCEwKS5jYWxsKGYuc3Ryb2tlLHYub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHsic3Ryb2tlLXdpZHRoIjpNYXRoLm1pbigyLHYub3V0c2lkZXRleHRmb250LnNpemUvOCksZDphLGZpbGw6Im5vbmUifSl9fSl9KX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt1LnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Yy5zZWxlY3QodGhpcyk7dC5hdHRyKCJkeSIpJiZ0LmF0dHIoImR5Iix0LmF0dHIoImR5IikpfSl9LDApfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuL2hlbHBlcnMiOjEwMDUsZDM6MTIwfV0sMTAxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi9zdHlsZV9vbmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1lLnRyYWNlLGE9bi5zZWxlY3QodGhpcyk7YS5zdHlsZSh7b3BhY2l0eTpyLm9wYWNpdHl9KSxhLnNlbGVjdEFsbCgiLnRvcCBwYXRoLnN1cmZhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoaSx0LHIpfSl9KX19LHsiLi9zdHlsZV9vbmUiOjEwMTEsZDM6MTIwfV0sMTAxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLm1hcmtlci5saW5lLmNvbG9yO0FycmF5LmlzQXJyYXkoaSkmJihpPWlbZS5pXXx8bi5kZWZhdWx0TGluZSk7dmFyIGE9ci5tYXJrZXIubGluZS53aWR0aHx8MDtBcnJheS5pc0FycmF5KGEpJiYoYT1hW2UuaV18fDApLHQuc3R5bGUoeyJzdHJva2Utd2lkdGgiOmF9KS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLGkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDJ9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt4Om4ueCx5Om4ueSx4eTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGluZGljZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx4Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0seWJvdW5kczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6bi50ZXh0LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxhcnJheU9rOiExfSxibGVuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsfSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxtYXg6MixkZmx0Oi41fSxzaXplbWF4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxkZmx0OjIwfSxib3JkZXI6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMX0sYXJlYXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MH19fX19LHsiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjEwNjl9XSwxMDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9InBvaW50Y2xvdWQiLHRoaXMucGlja1hEYXRhPVtdLHRoaXMucGlja1lEYXRhPVtdLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnRleHRMYWJlbHM9W10sdGhpcy5jb2xvcj0icmdiKDAsIDAsIDApIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy5pZFRvSW5kZXg9bmV3IEludDMyQXJyYXkoMCksdGhpcy5ib3VuZHM9WzAsMCwwLDBdLHRoaXMucG9pbnRjbG91ZE9wdGlvbnM9e3Bvc2l0aW9uczpuZXcgRmxvYXQzMkFycmF5KDApLGlkVG9JbmRleDp0aGlzLmlkVG9JbmRleCxzaXplbWluOi41LHNpemVtYXg6MTIsY29sb3I6WzAsMCwwLDFdLGFyZWFSYXRpbzoxLGJvcmRlckNvbG9yOlswLDAsMCwxXX0sdGhpcy5wb2ludGNsb3VkPWEodC5nbHBsb3QsdGhpcy5wb2ludGNsb3VkT3B0aW9ucyksdGhpcy5wb2ludGNsb3VkLl90cmFjZT10aGlzfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1uZXcgbih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn0KdmFyIGE9dCgiZ2wtcG9pbnRjbG91ZDJkIiksbz10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iikscz10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLGw9WyJ4YXhpcyIsInlheGlzIl0sdT1uLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDp0aGlzLnBpY2tYWURhdGE/W3RoaXMucGlja1hZRGF0YVsyKmVdLHRoaXMucGlja1hZRGF0YVsyKmUrMV1dOlt0aGlzLnBpY2tYRGF0YVtlXSx0aGlzLnBpY2tZRGF0YVtlXV0sdGV4dExhYmVsOkFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT90aGlzLnRleHRMYWJlbHNbZV06dGhpcy50ZXh0TGFiZWxzLGNvbG9yOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnRleHRMYWJlbHM9dC50ZXh0LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm8sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1zKHQse30pfSx1LnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxzLGw9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsdT10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSxjPXRoaXMucGlja1hZRGF0YT10Lnh5LGg9dC54Ym91bmRzJiZ0Lnlib3VuZHMsZj10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZihjKXtpZihuPWMsZT1jLmxlbmd0aD4+PjEsaClkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihzPTA7czxlO3MrKylpPW5bMipzXSxhPW5bMipzKzFdLGk8ZFswXSYmKGRbMF09aSksaT5kWzJdJiYoZFsyXT1pKSxhPGRbMV0mJihkWzFdPWEpLGE+ZFszXSYmKGRbM109YSk7aWYoZilyPWY7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxzPTA7czxlO3MrKylyW3NdPXN9ZWxzZSBmb3IoZT1sLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLHM9MDtzPGU7cysrKWk9bFtzXSxhPXVbc10scltzXT1zLG5bMipzXT1pLG5bMipzKzFdPWEsaTxkWzBdJiYoZFswXT1pKSxpPmRbMl0mJihkWzJdPWkpLGE8ZFsxXSYmKGRbMV09YSksYT5kWzNdJiYoZFszXT1hKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgcD1vKHQubWFya2VyLmNvbG9yKSxtPW8odC5tYXJrZXIuYm9yZGVyLmNvbG9yKSx2PXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O3BbM10qPXYsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1wO3ZhciBnPXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT1nKXtnPWwubGVuZ3RoPDEwMHx8dS5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9ZyxtWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9bTt2YXIgeT10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyksdGhpcy5leHBhbmRBeGVzRmFzdChkLGIvMil9LHUuZXhwYW5kQXhlc0Zhc3Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9ZXx8LjUsbz0wO288MjtvKyspcj10aGlzLnNjZW5lW2xbb11dLG49ci5fbWluLG58fChuPVtdKSxuLnB1c2goe3ZhbDp0W29dLHBhZDphfSksaT1yLl9tYXgsaXx8KGk9W10pLGkucHVzaCh7dmFsOnRbbysyXSxwYWQ6YX0pfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9aX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDIsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDMzLCJnbC1wb2ludGNsb3VkMmQiOjIyOH1dLDEwMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKCJ4IiksYSgieSIpLGEoInhib3VuZHMiKSxhKCJ5Ym91bmRzIiksdC54eSYmdC54eSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmKGUueHk9dC54eSksdC5pbmRpY2VzJiZ0LmluZGljZXMgaW5zdGFuY2VvZiBJbnQzMkFycmF5JiYoZS5pbmRpY2VzPXQuaW5kaWNlcyksYSgidGV4dCIpLGEoIm1hcmtlci5jb2xvciIsciksYSgibWFya2VyLm9wYWNpdHkiKSxhKCJtYXJrZXIuYmxlbmQiKSxhKCJtYXJrZXIuc2l6ZW1pbiIpLGEoIm1hcmtlci5zaXplbWF4IiksYSgibWFya2VyLmJvcmRlci5jb2xvciIsciksYSgibWFya2VyLmJvcmRlci5hcmVhcmF0aW8iKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6MTAxMn1dLDEwMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuLi9zY2F0dGVyM2QvY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBvaW50Y2xvdWQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLG4uY2F0ZWdvcmllcz1bImdsMmQiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjgwNCwiLi4vc2NhdHRlcjNkL2NhbGMiOjEwNDksIi4vYXR0cmlidXRlcyI6MTAxMiwiLi9jb252ZXJ0IjoxMDEzLCIuL2RlZmF1bHRzIjoxMDE0fV0sMTAxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtob3ZlcmluZm86cyh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiLCJuYW1lIl19KSxkb21haW46e3g6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9XSxkZmx0OlswLDFdfSx5Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX19LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgifSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuM3MifSx2YWx1ZXN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxhcnJhbmdlbWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic25hcCIsInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoic25hcCJ9LHRleHRmb250Omksbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnMoe30sbi5maWxsY29sb3Ise2FycmF5T2s6ITB9KSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0Oi41LGFycmF5T2s6ITB9fSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnMoe30sbi5maWxsY29sb3Ise2FycmF5T2s6ITB9KSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdGFyZ2V0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvYXR0cmlidXRlcyI6Njc4LCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3ODh9XSwxMDE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT10KCIuL3Bsb3QiKTtyLm5hbWU9InNhbmtleSIsci5hdHRyPSJ0eXBlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bi5nZXRTdWJwbG90Q2FsY0RhdGEodC5jYWxjZGF0YSwic2Fua2V5Iiwic2Fua2V5Iik7ZS5sZW5ndGgmJmkodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygic2Fua2V5IiksYT1lLl9oYXMmJmUuX2hhcygic2Fua2V5Iik7aSYmIWEmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnNhbmtleSIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODI3LCIuL3Bsb3QiOjEwMjJ9XSwxMDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj10Lm1hcChmdW5jdGlvbigpe3JldHVybltdfSksYT0wO2E8TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO2ErKyl7aWYoZVthXT09PXJbYV0pcmV0dXJuITA7bltlW2FdXS5wdXNoKHJbYV0pfXJldHVybiBpKG4pLmNvbXBvbmVudHMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pfXZhciBpPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlLm5vZGUubGFiZWwsZS5saW5rLnNvdXJjZSxlLmxpbmsudGFyZ2V0KSYmKGEuZXJyb3IoIkNpcmN1bGFyaXR5IGlzIHByZXNlbnQgaW4gdGhlIFNhbmtleSBkYXRhLiBSZW1vdmluZyBhbGwgbm9kZXMgYW5kIGxpbmtzLiIpLGUubGluay5sYWJlbD1bXSxlLmxpbmsuc291cmNlPVtdLGUubGluay50YXJnZXQ9W10sZS5saW5rLnZhbHVlPVtdLGUubGluay5jb2xvcj1bXSxlLm5vZGUubGFiZWw9W10sZS5ub2RlLmNvbG9yPVtdKSxbe2xpbms6ZS5saW5rLG5vZGU6ZS5ub2RlfV19fSx7Ii4uLy4uL2xpYiI6NzI0LCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyI6NTI2fV0sMTAxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDo0LG5vZGVUZXh0T2Zmc2V0VmVydGljYWw6Myxub2RlUGFkQWNyb3NzOjEwLHNhbmtleUl0ZXJhdGlvbnM6NTAsZm9yY2VJdGVyYXRpb25zOjUsZm9yY2VUaWNrc1BlckZyYW1lOjEwLGR1cmF0aW9uOjUwMCxlYXNlOiJjdWJpYy1pbi1vdXQifX0se31dLDEwMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgidGlueWNvbG9yMiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dSgibm9kZS5sYWJlbCIpLHUoIm5vZGUucGFkIiksdSgibm9kZS50aGlja25lc3MiKSx1KCJub2RlLmxpbmUuY29sb3IiKSx1KCJub2RlLmxpbmUud2lkdGgiKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm4gYVt0JWEubGVuZ3RoXX07dSgibm9kZS5jb2xvciIsZS5ub2RlLmxhYmVsLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBvLmFkZE9wYWNpdHkoYyhlKSwuOCl9KSksdSgibGluay5sYWJlbCIpLHUoImxpbmsuc291cmNlIiksdSgibGluay50YXJnZXQiKSx1KCJsaW5rLnZhbHVlIiksdSgibGluay5saW5lLmNvbG9yIiksdSgibGluay5saW5lLndpZHRoIiksdSgibGluay5jb2xvciIsZS5saW5rLnZhbHVlLm1hcChmdW5jdGlvbigpe3JldHVybiBzKGwucGFwZXJfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCk8LjMzMz8icmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjoicmdiYSgwLCAwLCAwLCAwLjIpIn0pKSx1KCJkb21haW4ueCIpLHUoImRvbWFpbi55IiksdSgib3JpZW50YXRpb24iKSx1KCJ2YWx1ZWZvcm1hdCIpLHUoInZhbHVlc3VmZml4IiksdSgiYXJyYW5nZW1lbnQiKSxuLmNvZXJjZUZvbnQodSwidGV4dGZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxsLmZvbnQpKTt2YXIgaD1mdW5jdGlvbih0LHIpe3JldHVybi0xPT09ZS5saW5rLnNvdXJjZS5pbmRleE9mKHIpJiYtMT09PWUubGluay50YXJnZXQuaW5kZXhPZihyKX07ZS5ub2RlLmxhYmVsLnNvbWUoaCkmJm4ud2FybigiU29tZSBvZiB0aGUgbm9kZXMgYXJlIG5laXRoZXIgc291cmNlcyBub3IgdGFyZ2V0cywgdGhleSB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL2xpYiI6NzI0LCIuL2F0dHJpYnV0ZXMiOjEwMTYsdGlueWNvbG9yMjo1MzJ9XSwxMDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2Fua2V5IixuLmJhc2VQbG90TW9kdWxlPXQoIi4vYmFzZV9wbG90Iiksbi5jYXRlZ29yaWVzPVsibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4vYXR0cmlidXRlcyI6MTAxNiwiLi9iYXNlX3Bsb3QiOjEwMTcsIi4vY2FsYyI6MTAxOCwiLi9kZWZhdWx0cyI6MTAyMCwiLi9wbG90IjoxMDIyfV0sMTAyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiIiIT09dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWUudHJhY2VJZH0pfWZ1bmN0aW9uIGEodCxlKXtwLnNlbGVjdCh0KS5zZWxlY3QoInBhdGgiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKSxwLnNlbGVjdCh0KS5zZWxlY3QoInJlY3QiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKX1mdW5jdGlvbiBvKHQpe3Auc2VsZWN0KHQpLnNlbGVjdCgidGV4dC5uYW1lIikuc3R5bGUoImZpbGwiLCJibGFjayIpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YoZS5saW5rKXx8LTEhPT10Lm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZihlLmxpbmspfX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluayl8fC0xIT09ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKX19ZnVuY3Rpb24gdSh0LGUscil7ZSYmciYmaShyLGUpLnNlbGVjdEFsbCgiLnNhbmtleUxpbmsiKS5maWx0ZXIocyhlKSkuY2FsbChoLmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiBjKHQsZSxyKXtlJiZyJiZpKHIsZSkuc2VsZWN0QWxsKCIuc2Fua2V5TGluayIpLmZpbHRlcihzKGUpKS5jYWxsKGYuYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIGE9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNCksYSYmaShlLHQpLnNlbGVjdEFsbCgiLnNhbmtleUxpbmsiKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluay5sYWJlbD09PWF9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNCksciYmaShlLHQpLnNlbGVjdEFsbCgiLnNhbmtleU5vZGUiKS5maWx0ZXIobCh0KSkuY2FsbCh1KX1mdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBhPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxhJiZpKGUsdCkuc2VsZWN0QWxsKCIuc2Fua2V5TGluayIpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09YX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksciYmaShlLHQpLnNlbGVjdEFsbCgiLnNhbmtleU5vZGUiKS5maWx0ZXIobCh0KSkuY2FsbChjKX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5ob3ZlcmxhYmVsfHx7fSxuPXkubmVzdGVkUHJvcGVydHkocixlKS5nZXQoKTtyZXR1cm4hQXJyYXkuaXNBcnJheShuKSYmbn12YXIgcD10KCJkMyIpLG09dCgiLi9yZW5kZXIiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx5PXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9wYXBlcixzPXIuX3NpemUsbD1mdW5jdGlvbihlLHIpe3ZhciBuPXIubGluaztuLm9yaWdpbmFsRXZlbnQ9cC5ldmVudCx0Ll9ob3ZlcmRhdGE9W25dLHYuY2xpY2sodCx7dGFyZ2V0OiEwfSl9LHk9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9cC5ldmVudCxwLnNlbGVjdChlKS5jYWxsKGguYmluZCgwLHIsbiwhMCkpLHYuaG92ZXIodCxpLCJzYW5rZXkiKX0sYj1mdW5jdGlvbihlLGkpe3ZhciBzPWkubGluay50cmFjZSxsPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9dS5sZWZ0K3Uud2lkdGgvMixoPXUudG9wK3UuaGVpZ2h0LzIsZj12LmxvbmVIb3Zlcih7eDpjLWwubGVmdCx5OmgtbC50b3AsbmFtZTpwLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLmxpbmsudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5saW5rLmxhYmVsLFsiU291cmNlOiIsaS5saW5rLnNvdXJjZS5sYWJlbF0uam9pbigiICIpLFsiVGFyZ2V0OiIsaS5saW5rLnRhcmdldC5sYWJlbF0uam9pbigiICIpXS5maWx0ZXIobikuam9pbigiPGJyPiIpLGNvbG9yOmQocywiYmdjb2xvciIpfHxnLmFkZE9wYWNpdHkoaS50aW55Q29sb3JIdWUsMSksYm9yZGVyQ29sb3I6ZChzLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6ZChzLCJmb250LmZhbWlseSIpLGZvbnRTaXplOmQocywiZm9udC5zaXplIiksZm9udENvbG9yOmQocywiZm9udC5jb2xvciIpLGlkZWFsQWxpZ246cC5ldmVudC54PGM/InJpZ2h0IjoibGVmdCJ9LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOnR9KTthKGYsLjY1KSxvKGYpfSx4PWZ1bmN0aW9uKGUsbixpKXtwLnNlbGVjdChlKS5jYWxsKGYuYmluZCgwLG4saSwhMCkpLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpwLmV2ZW50LHBvaW50czpbbi5saW5rXX0pLHYubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpfSxfPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLm5vZGU7aS5vcmlnaW5hbEV2ZW50PXAuZXZlbnQsdC5faG92ZXJkYXRhPVtpXSxwLnNlbGVjdChlKS5jYWxsKGMscixuKSx2LmNsaWNrKHQse3RhcmdldDohMH0pfSx3PWZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLm5vZGU7aS5vcmlnaW5hbEV2ZW50PXAuZXZlbnQscC5zZWxlY3QoZSkuY2FsbCh1LHIsbiksdi5ob3Zlcih0LGksInNhbmtleSIpfSxNPWZ1bmN0aW9uKGUsaSl7dmFyIHM9aS5ub2RlLnRyYWNlLGw9cC5zZWxlY3QoZSkuc2VsZWN0KCIubm9kZVJlY3QiKSx1PXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1sLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWMubGVmdC0yLXUubGVmdCxmPWMucmlnaHQrMi11LmxlZnQsbT1jLnRvcCtjLmhlaWdodC80LXUudG9wLGc9di5sb25lSG92ZXIoe3gwOmgseDE6Zix5Om0sbmFtZTpwLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5ub2RlLmxhYmVsLFsiSW5jb21pbmcgZmxvdyBjb3VudDoiLGkubm9kZS50YXJnZXRMaW5rcy5sZW5ndGhdLmpvaW4oIiAiKSxbIk91dGdvaW5nIGZsb3cgY291bnQ6IixpLm5vZGUuc291cmNlTGlua3MubGVuZ3RoXS5qb2luKCIgIildLmZpbHRlcihuKS5qb2luKCI8YnI+IiksY29sb3I6ZChzLCJiZ2NvbG9yIil8fGkudGlueUNvbG9ySHVlLGJvcmRlckNvbG9yOmQocywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmQocywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpkKHMsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpkKHMsImZvbnQuY29sb3IiKSxpZGVhbEFsaWduOiJsZWZ0In0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dH0pO2EoZywuODUpLG8oZyl9LGs9ZnVuY3Rpb24oZSxuLGkpe3Auc2VsZWN0KGUpLmNhbGwoYyxuLGkpLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpwLmV2ZW50LHBvaW50czpbbi5ub2RlXX0pLHYubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpfTttKGksZSx7d2lkdGg6cy53LGhlaWdodDpzLmgsbWFyZ2luOnt0OnMudCxyOnMucixiOnMuYixsOnMubH19LHtsaW5rRXZlbnRzOntob3Zlcjp5LGZvbGxvdzpiLHVuaG92ZXI6eCxzZWxlY3Q6bH0sbm9kZUV2ZW50czp7aG92ZXI6dyxmb2xsb3c6TSx1bmhvdmVyOmssc2VsZWN0Ol99fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIiOjcyNCwiLi9yZW5kZXIiOjEwMjMsZDM6MTIwfV0sMTAyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LmtleX1mdW5jdGlvbiBpKHQpe3JldHVyblt0XX1mdW5jdGlvbiBhKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG8odCl7dmFyIGUscj1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxYPXRbZV0ueCx0W2VdLm9yaWdpbmFsWT10W2VdLnksLTE9PT1yLmluZGV4T2YodFtlXS54KSYmci5wdXNoKHRbZV0ueCk7Zm9yKHIuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbExheWVySW5kZXg9ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSx0W2VdLm9yaWdpbmFsTGF5ZXI9dFtlXS5vcmlnaW5hbExheWVySW5kZXgvKHIubGVuZ3RoLTEpfWZ1bmN0aW9uIHModCl7dC5sYXN0RHJhZ2dlZFg9dC54LHQubGFzdERyYWdnZWRZPXQueX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLm9yaWdpbmFsWD09PXQubm9kZS5vcmlnaW5hbFh9fWZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55PXRbZV0ueSt0W2VdLmR5LzJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLnk9dFtlXS55LXRbZV0uZHkvMn1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG4saT1hKGUpLnRyYWNlLG89aS5kb21haW4scz1pLm5vZGUsbD1pLmxpbmssYz1pLmFycmFuZ2VtZW50LGg9ImgiPT09aS5vcmllbnRhdGlvbixmPWkubm9kZS5wYWQsZD1pLm5vZGUudGhpY2tuZXNzLHA9aS5ub2RlLmxpbmUuY29sb3IsbT1pLm5vZGUubGluZS53aWR0aCx2PWkubGluay5saW5lLmNvbG9yLGc9aS5saW5rLmxpbmUud2lkdGgseT1pLnZhbHVlZm9ybWF0LGI9aS52YWx1ZXN1ZmZpeCx4PWkudGV4dGZvbnQsXz10LndpZHRoKihvLnhbMV0tby54WzBdKSx3PXQuaGVpZ2h0KihvLnlbMV0tby55WzBdKSxNPXMubGFiZWwubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BvaW50TnVtYmVyOmUsbGFiZWw6dCxjb2xvcjpCLmlzQXJyYXkocy5jb2xvcik/cy5jb2xvcltlXTpzLmNvbG9yfX0pLGs9bC52YWx1ZS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57cG9pbnROdW1iZXI6ZSxsYWJlbDpsLmxhYmVsW2VdLGNvbG9yOkIuaXNBcnJheShsLmNvbG9yKT9sLmNvbG9yW2VdOmwuY29sb3Isc291cmNlOmwuc291cmNlW2VdLHRhcmdldDpsLnRhcmdldFtlXSx2YWx1ZTp0fX0pLEE9aigpLnNpemUoaD9bXyx3XTpbdyxfXSkubm9kZVdpZHRoKGQpLm5vZGVQYWRkaW5nKGYpLm5vZGVzKE0pLmxpbmtzKGspLmxheW91dChELnNhbmtleUl0ZXJhdGlvbnMpLFQ9QS5ub2RlcygpLFM9MDtTPFQubGVuZ3RoO1MrKyluPVRbU10sbi53aWR0aD1fLG4uaGVpZ2h0PXc7cmV0dXJuIHUoTSkse2tleTpyLHRyYWNlOmksZ3VpZDpNYXRoLmZsb29yKDFlMTIqKDErTWF0aC5yYW5kb20oKSkpLGhvcml6b250YWw6aCx3aWR0aDpfLGhlaWdodDp3LG5vZGVQYWQ6Zixub2RlTGluZUNvbG9yOnAsbm9kZUxpbmVXaWR0aDptLGxpbmtMaW5lQ29sb3I6dixsaW5rTGluZVdpZHRoOmcsdmFsdWVGb3JtYXQ6eSx2YWx1ZVN1ZmZpeDpiLHRleHRGb250OngsdHJhbnNsYXRlWDpvLnhbMF0qXyt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtby55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOmg/dzpfLGRyYWdQZXJwZW5kaWN1bGFyOmg/Xzp3LG5vZGVzOk0sbGlua3M6ayxhcnJhbmdlbWVudDpjLHNhbmtleTpBLGZvcmNlTGF5b3V0czp7fSxpbnRlcmFjdGlvblN0YXRlOntkcmFnSW5Qcm9ncmVzczohMSxob3ZlcmVkOiExfX19ZnVuY3Rpb24gZih0LGUscil7dmFyIG49TyhyLmNvbG9yKSxpPXIuc291cmNlLmxhYmVsKyJ8IityLnRhcmdldC5sYWJlbCxhPXRbaV07dFtpXT0odm9pZCAwPT09YT9hOjApKzE7dmFyIG89aSsodm9pZCAwPT09YT8iIjoiX18iK2EpO3JldHVybiByLnRyYWNlPWUudHJhY2Usci5jdXJ2ZU51bWJlcj1lLnRyYWNlLmluZGV4LHtrZXk6byx0cmFjZUlkOmUua2V5LGxpbms6cix0aW55Q29sb3JIdWU6Ui50aW55UkdCKG4pLHRpbnlDb2xvckFscGhhOm4uZ2V0QWxwaGEoKSxsaW5rTGluZUNvbG9yOmUubGlua0xpbmVDb2xvcixsaW5rTGluZVdpZHRoOmUubGlua0xpbmVXaWR0aCx2YWx1ZUZvcm1hdDplLnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OmUudmFsdWVTdWZmaXgsc2Fua2V5OmUuc2Fua2V5LGludGVyYWN0aW9uU3RhdGU6ZS5pbnRlcmFjdGlvblN0YXRlfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj1PKHIuY29sb3IpLGk9RC5ub2RlUGFkQWNyb3NzLGE9ZS5ub2RlUGFkLzIsbz1yLmR4Ky41LHM9ci5keS0uNSxsPXIubGFiZWwsdT10W2xdO3RbbF09KHZvaWQgMD09PXU/dTowKSsxO3ZhciBjPWwrKHZvaWQgMD09PXU/IiI6Il9fIit1KTtyZXR1cm4gci50cmFjZT1lLnRyYWNlLHIuY3VydmVOdW1iZXI9ZS50cmFjZS5pbmRleCx7a2V5OmMsdHJhY2VJZDplLmtleSxub2RlOnIsbm9kZVBhZDplLm5vZGVQYWQsbm9kZUxpbmVDb2xvcjplLm5vZGVMaW5lQ29sb3Isbm9kZUxpbmVXaWR0aDplLm5vZGVMaW5lV2lkdGgsdGV4dEZvbnQ6ZS50ZXh0Rm9udCxzaXplOmUuaG9yaXpvbnRhbD9lLmhlaWdodDplLndpZHRoLHZpc2libGVXaWR0aDpNYXRoLmNlaWwobyksdmlzaWJsZUhlaWdodDpNYXRoLmNlaWwocyksem9uZVg6LWksem9uZVk6LWEsem9uZVdpZHRoOm8rMippLHpvbmVIZWlnaHQ6cysyKmEsbGFiZWxZOmUuaG9yaXpvbnRhbD9yLmR5LzIrMTpyLmR4LzIrMSxsZWZ0OjE9PT1yLm9yaWdpbmFsTGF5ZXIsc2l6ZUFjcm9zczplLndpZHRoLGZvcmNlTGF5b3V0czplLmZvcmNlTGF5b3V0cyxob3Jpem9udGFsOmUuaG9yaXpvbnRhbCxkYXJrQmFja2dyb3VuZDpuLmdldEJyaWdodG5lc3MoKTw9MTI4LHRpbnlDb2xvckh1ZTpSLnRpbnlSR0IobiksdGlueUNvbG9yQWxwaGE6bi5nZXRBbHBoYSgpLHZhbHVlRm9ybWF0OmUudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6ZS52YWx1ZVN1ZmZpeCxzYW5rZXk6ZS5zYW5rZXksYXJyYW5nZW1lbnQ6ZS5hcnJhbmdlbWVudCx1bmlxdWVOb2RlTGFiZWxQYXRoSWQ6W2UuZ3VpZCxlLmtleSxjXS5qb2luKCIgIiksaW50ZXJhY3Rpb25TdGF0ZTplLmludGVyYWN0aW9uU3RhdGV9fWZ1bmN0aW9uIHAodCl7UC5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX1mdW5jdGlvbiBtKHQpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQubm9kZS54LS41KSsiLCAiKyh0Lm5vZGUueS10Lm5vZGUuZHkvMisuNSkrIikifSl9ZnVuY3Rpb24gdih0KXt2YXIgZT10LnNhbmtleS5ub2RlcygpO2MoZSk7dmFyIHI9dC5zYW5rZXkubGluaygpKHQubGluayk7cmV0dXJuIHUoZSkscn1mdW5jdGlvbiBnKHQpe1Auc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJvcHRpbWl6ZVNwZWVkIiksdC5jYWxsKG0pfWZ1bmN0aW9uIHkodCxlKXt0LmNhbGwoZyksZS5hdHRyKCJkIix2KX1mdW5jdGlvbiBiKHQpe3QuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGVXaWR0aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZUhlaWdodH0pfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQubGluay5keT4xfHx0LmxpbmtMaW5lV2lkdGg+MH1mdW5jdGlvbiBfKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnRyYW5zbGF0ZVgrIiwiK3QudHJhbnNsYXRlWSsiKSIrKHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkiKX1mdW5jdGlvbiB3KHQpe3JldHVybiJ0cmFuc2xhdGUoIisodC5ob3Jpem9udGFsPzA6dC5sYWJlbFkpKyIgIisodC5ob3Jpem9udGFsP3QubGFiZWxZOjApKyIpIn1mdW5jdGlvbiBNKHQpe3JldHVybiBQLnN2Zy5saW5lKCkoW1t0Lmhvcml6b250YWw/dC5sZWZ0Py10LnNpemVBY3Jvc3M6dC52aXNpYmxlV2lkdGgrRC5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6RC5ub2RlVGV4dE9mZnNldEhvcml6b250YWwsMF0sW3QuaG9yaXpvbnRhbD90LmxlZnQ/LUQubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOnQuc2l6ZUFjcm9zczp0LnZpc2libGVIZWlnaHQtRC5ub2RlVGV4dE9mZnNldEhvcml6b250YWwsMF1dKX1mdW5jdGlvbiBrKHQpe3JldHVybiB0Lmhvcml6b250YWw/Im1hdHJpeCgxIDAgMCAxIDAgMCkiOiJtYXRyaXgoMCAxIDEgMCAwIDApIn1mdW5jdGlvbiBBKHQpe3JldHVybiB0Lmhvcml6b250YWw/InNjYWxlKDEgMSkiOiJzY2FsZSgtMSAxKSJ9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gdC5kYXJrQmFja2dyb3VuZCYmIXQuaG9yaXpvbnRhbD8icmdiKDI1NSwyNTUsMjU1KSI6InJnYigwLDAsMCkifWZ1bmN0aW9uIFModCl7cmV0dXJuIHQuaG9yaXpvbnRhbCYmdC5sZWZ0PyIxMDAlIjoiMCUifWZ1bmN0aW9uIEUodCxlLHIpe3Qub24oIi5iYXNpYyIsbnVsbCkub24oIm1vdXNlb3Zlci5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHwoci5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkub24oIm1vdXNlbW92ZS5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHwoci5mb2xsb3codGhpcyx0KSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KS5vbigibW91c2VvdXQuYmFzaWMiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8KHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpfSkub24oImNsaWNrLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLHQuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8ci5zZWxlY3QodGhpcyx0LGUpfSl9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49UC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGV9KS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbihuKXtpZigiZml4ZWQiIT09bi5hcnJhbmdlbWVudCYmKHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKSxuLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9bi5ub2RlLHMobi5ub2RlKSxuLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIubm9kZUV2ZW50cy51bmhvdmVyLmFwcGx5KDAsbi5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQpLG4uaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKSwic25hcCI9PT1uLmFycmFuZ2VtZW50KSl7dmFyIGk9bi50cmFjZUlkKyJ8IitNYXRoLmZsb29yKG4ubm9kZS5vcmlnaW5hbFgpO24uZm9yY2VMYXlvdXRzW2ldP24uZm9yY2VMYXlvdXRzW2ldLmFscGhhKDEpOkModCxpLG4pLHoodCxlLG4saSl9fSkub24oImRyYWciLGZ1bmN0aW9uKHIpe2lmKCJmaXhlZCIhPT1yLmFycmFuZ2VtZW50KXt2YXIgbj1QLmV2ZW50LngsaT1QLmV2ZW50Lnk7InNuYXAiPT09ci5hcnJhbmdlbWVudD8oci5ub2RlLng9bixyLm5vZGUueT1pKTooImZyZWVmb3JtIj09PXIuYXJyYW5nZW1lbnQmJihyLm5vZGUueD1uKSxyLm5vZGUueT1NYXRoLm1heChyLm5vZGUuZHkvMixNYXRoLm1pbihyLnNpemUtci5ub2RlLmR5LzIsaSkpKSxzKHIubm9kZSksInNuYXAiIT09ci5hcnJhbmdlbWVudCYmKHIuc2Fua2V5LnJlbGF5b3V0KCkseSh0LmZpbHRlcihsKHIpKSxlKSx0LmNhbGwocCkpfX0pLm9uKCJkcmFnZW5kIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9ITF9KTt0Lm9uKCIuZHJhZyIsbnVsbCkuY2FsbChuKX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbj1yLnNhbmtleS5ub2RlcygpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5vcmlnaW5hbFg9PT1yLm5vZGUub3JpZ2luYWxYfSk7ci5mb3JjZUxheW91dHNbZV09Ti5mb3JjZVNpbXVsYXRpb24obikuYWxwaGFEZWNheSgwKS5mb3JjZSgiY29sbGlkZSIsTi5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMoRC5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixJKHQsZSxuLHIpKS5zdG9wKCl9ZnVuY3Rpb24geih0LGUscixuKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGkoKXtmb3IodmFyIGE9MDthPEQuZm9yY2VUaWNrc1BlckZyYW1lO2ErKylyLmZvcmNlTGF5b3V0c1tuXS50aWNrKCk7ci5zYW5rZXkucmVsYXlvdXQoKSx5KHQuZmlsdGVyKGwocikpLGUpLHIuZm9yY2VMYXlvdXRzW25dLmFscGhhKCk+MCYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX0pfWZ1bmN0aW9uIEkodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdO289PT1uLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M/KG8ueD1vLmxhc3REcmFnZ2VkWCxvLnk9by5sYXN0RHJhZ2dlZFkpOihvLnZ4PShvLm9yaWdpbmFsWC1vLngpL0QuZm9yY2VUaWNrc1BlckZyYW1lLG8ueT1NYXRoLm1pbihuLnNpemUtby5keS8yLE1hdGgubWF4KG8uZHkvMixvLnkpKSksaT1NYXRoLm1heChpLE1hdGguYWJzKG8udngpLE1hdGguYWJzKG8udnkpKX0hbi5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzJiZpPC4xJiZuLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgpPjAmJihuLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgwKSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3QuY2FsbChwKX0sMzApKX19dmFyIEQ9dCgiLi9jb25zdGFudHMiKSxQPXQoImQzIiksTz10KCJ0aW55Y29sb3IyIiksUj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksRj10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxqPXQoIkBwbG90bHkvZDMtc2Fua2V5Iikuc2Fua2V5LE49dCgiZDMtZm9yY2UiKSxCPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXt2YXIgbD10LnNlbGVjdEFsbCgiLnNhbmtleSIpLmRhdGEoZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGEodCkudHJhY2UudmlzaWJsZX0pLm1hcChoLmJpbmQobnVsbCxyKSksbik7bC5leGl0KCkucmVtb3ZlKCksbC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNhbmtleSIsITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLGwudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pO3ZhciB1PWwuc2VsZWN0QWxsKCIuc2Fua2V5TGlua3MiKS5kYXRhKGksbik7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNhbmtleUxpbmtzIiwhMCkuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGM9dS5zZWxlY3RBbGwoIi5zYW5rZXlMaW5rIikuZGF0YShmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdC5zYW5rZXkubGlua3MoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KS5tYXAoZi5iaW5kKG51bGwsZSx0KSl9LG4pO2MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJzYW5rZXlMaW5rIiwhMCkuYXR0cigiZCIsdikuY2FsbChFLGwscy5saW5rRXZlbnRzKSxjLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKHQpe3JldHVybiB4KHQpP1IudGlueVJHQihPKHQubGlua0xpbmVDb2xvcikpOnQudGlueUNvbG9ySHVlfSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4geCh0KT9SLm9wYWNpdHkodC5saW5rTGluZUNvbG9yKTp0LnRpbnlDb2xvckFscGhhfSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHgodCk/dC5saW5rTGluZVdpZHRoOjF9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxjLnRyYW5zaXRpb24oKS5lYXNlKEQuZWFzZSkuZHVyYXRpb24oRC5kdXJhdGlvbikuYXR0cigiZCIsdiksYy5leGl0KCkudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIHA9bC5zZWxlY3RBbGwoIi5zYW5rZXlOb2RlU2V0IikuZGF0YShpLG4pO3AuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIikuY2xhc3NlZCgic2Fua2V5Tm9kZVNldCIsITApLHAuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24odCl7c3dpdGNoKHQuYXJyYW5nZW1lbnQpe2Nhc2UiZml4ZWQiOnJldHVybiJkZWZhdWx0IjtjYXNlInBlcnBlbmRpY3VsYXIiOnJldHVybiJucy1yZXNpemUiO2RlZmF1bHQ6cmV0dXJuIm1vdmUifX0pO3ZhciBnPXAuc2VsZWN0QWxsKCIuc2Fua2V5Tm9kZSIpLmRhdGEoZnVuY3Rpb24odCl7dmFyIGU9dC5zYW5rZXkubm9kZXMoKSxyPXt9O3JldHVybiBvKGUpLGUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkubWFwKGQuYmluZChudWxsLHIsdCkpfSxuKTtnLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2Fua2V5Tm9kZSIsITApLmNhbGwobSkuY2FsbChFLGwscy5ub2RlRXZlbnRzKSxnLmNhbGwoTCxjLHMpLGcudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5jYWxsKG0pLGcuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKEQuZWFzZSkuZHVyYXRpb24oRC5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciB5PWcuc2VsZWN0QWxsKCIubm9kZVJlY3QiKS5kYXRhKGkpO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJub2RlUmVjdCIsITApLmNhbGwoYikseS5zdHlsZSgic3Ryb2tlLXdpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTGluZVdpZHRofSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIFIudGlueVJHQihPKHQubm9kZUxpbmVDb2xvcikpfSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gUi5vcGFjaXR5KHQubm9kZUxpbmVDb2xvcil9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSx5LnRyYW5zaXRpb24oKS5lYXNlKEQuZWFzZSkuZHVyYXRpb24oRC5kdXJhdGlvbikuY2FsbChiKTt2YXIgQz1nLnNlbGVjdEFsbCgiLm5vZGVDYXB0dXJlIikuZGF0YShpKTtDLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgibm9kZUNhcHR1cmUiLCEwKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwwKSxDLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVYfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVl9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVdpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lSGVpZ2h0fSk7dmFyIHo9Zy5zZWxlY3RBbGwoIi5ub2RlQ2VudGVyZWQiKS5kYXRhKGkpO3ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJub2RlQ2VudGVyZWQiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLHcpLHoudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLHcpO3ZhciBJPXouc2VsZWN0QWxsKCIubm9kZUxhYmVsR3VpZGUiKS5kYXRhKGkpO0kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJub2RlTGFiZWxHdWlkZSIsITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4gdC51bmlxdWVOb2RlTGFiZWxQYXRoSWR9KS5hdHRyKCJkIixNKS5hdHRyKCJ0cmFuc2Zvcm0iLGspLEkudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5hdHRyKCJkIixNKS5hdHRyKCJ0cmFuc2Zvcm0iLGspO3ZhciBQPXouc2VsZWN0QWxsKCIubm9kZUxhYmVsIikuZGF0YShpKTtQLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgibm9kZUxhYmVsIiwhMCkuYXR0cigidHJhbnNmb3JtIixBKS5zdHlsZSgidXNlci1zZWxlY3QiLCJub25lIikuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKS5zdHlsZSgiZmlsbCIsImJsYWNrIiksUC5zdHlsZSgidGV4dC1zaGFkb3ciLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWw/Ii0xcHggMXB4IDFweCAjZmZmLCAxcHggMXB4IDFweCAjZmZmLCAxcHggLTFweCAxcHggI2ZmZiwgLTFweCAtMXB4IDFweCAjZmZmIjoibm9uZSJ9KS5lYWNoKGZ1bmN0aW9uKHQpe0YuZm9udChQLHQudGV4dEZvbnQpfSksUC50cmFuc2l0aW9uKCkuZWFzZShELmVhc2UpLmR1cmF0aW9uKEQuZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsQSk7dmFyIGo9UC5zZWxlY3RBbGwoIi5ub2RlTGFiZWxUZXh0UGF0aCIpLmRhdGEoaSk7ai5lbnRlcigpLmFwcGVuZCgidGV4dFBhdGgiKS5jbGFzc2VkKCJub2RlTGFiZWxUZXh0UGF0aCIsITApLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInhsaW5rOmhyZWYiLGZ1bmN0aW9uKHQpe3JldHVybiIjIit0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoInN0YXJ0T2Zmc2V0IixTKS5zdHlsZSgiZmlsbCIsVCksai50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWx8fHQubm9kZS5keT41P3Qubm9kZS5sYWJlbDoiIn0pLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/ImVuZCI6InN0YXJ0In0pLGoudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5hdHRyKCJzdGFydE9mZnNldCIsUykuc3R5bGUoImZpbGwiLFQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9saWIiOjcyNCwiLi9jb25zdGFudHMiOjEwMTksIkBwbG90bHkvZDMtc2Fua2V5IjozNixkMzoxMjAsImQzLWZvcmNlIjoxMTYsdGlueWNvbG9yMjo1MzJ9XSwxMDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LCJkYXRhIiksbi5tZXJnZUFycmF5KGUudGV4dHBvc2l0aW9uLHQsInRwIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheShlLnRleHRmb250LnNpemUsdCwidHMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LCJ0YyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmZhbWlseSx0LCJ0ZiIpKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXkoaS5zaXplLHQsIm1zIiksbi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLnN5bWJvbCx0LCJteCIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2kubGluZSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheShhLndpZHRoLHQsIm1sdyIpKTt2YXIgbz1pLmdyYWRpZW50O28mJiJub25lIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCwibWd0Iiksbi5tZXJnZUFycmF5KG8uY29sb3IsdCwibWdjIikpfX19LHsiLi4vLi4vbGliIjo3MjR9XSwxMDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9KHQoIi4vY29uc3RhbnRzIiksdCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQpO2UuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHgwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MH0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowfSxkeTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdfSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJwb2ludHMiLCJmaWxscyJdfSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjJ9LHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIn0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLjMsZGZsdDoxfSxkYXNoOm8sc2ltcGxpZnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY2xpcG9uYXhpczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiZG9wbG90In0sZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvemVyb3kiLCJ0b3plcm94IiwidG9uZXh0eSIsInRvbmV4dHgiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LG1hcmtlcjpsKHt9LHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLnN5bWJvbExpc3QsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGFycmF5T2s6ITB9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITB9LG1heGRpc3BsYXllZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sc2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRpYW1ldGVyIiwiYXJlYSJdLGRmbHQ6ImRpYW1ldGVyIn0sc2hvd3NjYWxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhcjphLGxpbmU6bCh7fSx7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsYXJyYXlPazohMH19LG4oIm1hcmtlci5saW5lIikpLGdyYWRpZW50Ont0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYWwiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJub25lIl0sYXJyYXlPazohMCxkZmx0OiJub25lIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfX19LG4oIm1hcmtlciIpKSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBsZWZ0IiwibWlkZGxlIGNlbnRlciIsIm1pZGRsZSByaWdodCIsImJvdHRvbSBsZWZ0IiwiYm90dG9tIGNlbnRlciIsImJvdHRvbSByaWdodCJdLGRmbHQ6Im1pZGRsZSBjZW50ZXIiLGFycmF5T2s6ITB9LHRleHRmb250OntmYW1pbHk6e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsYXJyYXlPazohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MSxhcnJheU9rOiEwfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITB9fSxyOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sdDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGVycm9yX3k6aSxlcnJvcl94Oml9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjA5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYyNSwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvYXR0cmlidXRlcyI6NjI4LCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4vY29uc3RhbnRzIjoxMDMwfV0sMTAyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuL3N1YnR5cGVzIikscz10KCIuL2NvbG9yc2NhbGVfY2FsYyIpLGw9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGMsaD1pLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZj1pLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksZD1oLm1ha2VDYWxjZGF0YShlLCJ4IikscD1mLm1ha2VDYWxjZGF0YShlLCJ5IiksbT1NYXRoLm1pbihkLmxlbmd0aCxwLmxlbmd0aCk7aC5fbWluRHRpY2s9MCxmLl9taW5EdGljaz0wLGQubGVuZ3RoPm0mJmQuc3BsaWNlKG0sZC5sZW5ndGgtbSkscC5sZW5ndGg+bSYmcC5zcGxpY2UobSxwLmxlbmd0aC1tKTt2YXIgdj17cGFkZGVkOiEwfSxnPXtwYWRkZWQ6ITB9O2lmKG8uaGFzTWFya2VycyhlKSl7aWYocj1lLm1hcmtlcix1PXIuc2l6ZSxBcnJheS5pc0FycmF5KHUpKXt2YXIgeT17dHlwZToibGluZWFyIn07aS5zZXRDb252ZXJ0KHkpLHU9eS5tYWtlQ2FsY2RhdGEoZS5tYXJrZXIsInNpemUiKSx1Lmxlbmd0aD5tJiZ1LnNwbGljZShtLHUubGVuZ3RoLW0pfXZhciBiLHg9MS42KihlLm1hcmtlci5zaXplcmVmfHwxKTtiPSJhcmVhIj09PWUubWFya2VyLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQoKHR8fDApL3gpLDMpfTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoKHR8fDApL3gsMyl9LHYucHBhZD1nLnBwYWQ9QXJyYXkuaXNBcnJheSh1KT91Lm1hcChiKTpiKHUpfXMoZSksISgidG96ZXJveCI9PT1lLmZpbGx8fCJ0b25leHR4Ij09PWUuZmlsbCYmdC5maXJzdHNjYXR0ZXIpfHxkWzBdPT09ZFttLTFdJiZwWzBdPT09cFttLTFdP2UuZXJyb3JfeS52aXNpYmxlfHwtMT09PVsidG9uZXh0eSIsInRvemVyb3kiXS5pbmRleE9mKGUuZmlsbCkmJihvLmhhc01hcmtlcnMoZSl8fG8uaGFzVGV4dChlKSl8fCh2LnBhZGRlZD0hMSx2LnBwYWQ9MCk6di50b3plcm89ITAsISgidG96ZXJveSI9PT1lLmZpbGx8fCJ0b25leHR5Ij09PWUuZmlsbCYmdC5maXJzdHNjYXR0ZXIpfHxkWzBdPT09ZFttLTFdJiZwWzBdPT09cFttLTFdPy0xIT09WyJ0b25leHR4IiwidG96ZXJveCJdLmluZGV4T2YoZS5maWxsKSYmKGcucGFkZGVkPSExKTpnLnRvemVybz0hMCxpLmV4cGFuZChoLGQsdiksaS5leHBhbmQoZixwLGcpO3ZhciBfPW5ldyBBcnJheShtKTtmb3IoYz0wO2M8bTtjKyspX1tjXT1uKGRbY10pJiZuKHBbY10pP3t4OmRbY10seTpwW2NdfTp7eDphLHk6YX0sZS5pZHMmJihfW2NdLmlkPVN0cmluZyhlLmlkc1tjXSkpO3JldHVybiBsKF8sZSksdC5maXJzdHNjYXR0ZXI9ITEsX319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2FycmF5c190b19jYWxjZGF0YSI6MTAyNCwiLi9jb2xvcnNjYWxlX2NhbGMiOjEwMjksIi4vc3VidHlwZXMiOjEwNDUsImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTtpZigic2NhdHRlciI9PT1yLnR5cGUpe3ZhciBuPXIuZmlsbDtpZigibm9uZSIhPT1uJiYidG9zZWxmIiE9PW4mJihyLm9wYWNpdHk9dm9pZCAwLCJ0b25leHR5Ij09PW58fCJ0b25leHR4Ij09PW4pKWZvcih2YXIgaT1lLTE7aT49MDtpLS0pe3ZhciBhPXRbaV07aWYoInNjYXR0ZXIiPT09YS50eXBlJiZhLnhheGlzPT09ci54YXhpcyYmYS55YXhpcz09PXIueWF4aXMpe2Eub3BhY2l0eT12b2lkIDA7YnJlYWt9fX19fX0se31dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxsPXIubWFya2VyLHU9ImNiIityLnVpZDtpZih0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIit1KS5yZW1vdmUoKSx2b2lkIDA9PT1sfHwhbC5zaG93c2NhbGUpcmV0dXJuIHZvaWQgYS5hdXRvTWFyZ2luKHQsdSk7dmFyIGM9bC5jb2xvcixoPWwuY21pbixmPWwuY21heDtuKGgpfHwoaD1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxjKSksbihmKXx8KGY9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsYykpO3ZhciBkPWVbMF0udC5jYj1zKHQsdSkscD1vLm1ha2VDb2xvclNjYWxlRnVuYyhvLmV4dHJhY3RTY2FsZShsLmNvbG9yc2NhbGUsaCxmKSx7bm9OdW1lcmljQ2hlY2s6ITB9KTtkLmZpbGxjb2xvcihwKS5maWxsbGV2ZWxzKHtzdGFydDpoLGVuZDpmLHNpemU6KGYtaCkvMjU0fSkub3B0aW9ucyhsLmNvbG9yYmFyKSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciOjYwNSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MTYsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9wbG90cyI6ODI3LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sMTAyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2EuaGFzTGluZXModCkmJm4odCwibGluZSIpJiZpKHQsdC5saW5lLmNvbG9yLCJsaW5lIiwiYyIpLGEuaGFzTWFya2Vycyh0KSYmKG4odCwibWFya2VyIikmJmkodCx0Lm1hcmtlci5jb2xvciwibWFya2VyIiwiYyIpLG4odCwibWFya2VyLmxpbmUiKSYmaSh0LHQubWFya2VyLmxpbmUuY29sb3IsIm1hcmtlci5saW5lIiwiYyIpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwOCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo2MTUsIi4vc3VidHlwZXMiOjEwNDV9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UFRTX0xJTkVTT05MWToyMH19LHt9XSwxMDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi9zdWJ0eXBlcyIpLHM9dCgiLi94eV9kZWZhdWx0cyIpLGw9dCgiLi9tYXJrZXJfZGVmYXVsdHMiKSx1PXQoIi4vbGluZV9kZWZhdWx0cyIpLGM9dCgiLi9saW5lX3NoYXBlX2RlZmF1bHRzIiksaD10KCIuL3RleHRfZGVmYXVsdHMiKSxmPXQoIi4vZmlsbGNvbG9yX2RlZmF1bHRzIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixwKXtmdW5jdGlvbiBtKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIHY9cyh0LGUscCxtKSxnPXY8YS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiO2lmKCF2KXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bSgidGV4dCIpLG0oImhvdmVydGV4dCIpLG0oIm1vZGUiLGcpLG8uaGFzTGluZXMoZSkmJih1KHQsZSxyLHAsbSksYyh0LGUsbSksbSgiY29ubmVjdGdhcHMiKSxtKCJsaW5lLnNpbXBsaWZ5IikpLG8uaGFzTWFya2VycyhlKSYmbCh0LGUscixwLG0se2dyYWRpZW50OiEwfSksby5oYXNUZXh0KGUpJiZoKHQsZSxwLG0pO3ZhciB5PVtdOyhvLmhhc01hcmtlcnMoZSl8fG8uaGFzVGV4dChlKSkmJihtKCJtYXJrZXIubWF4ZGlzcGxheWVkIikseS5wdXNoKCJwb2ludHMiKSksbSgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGYodCxlLHIsbSksby5oYXNMaW5lcyhlKXx8Yyh0LGUsbSkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8eS5wdXNoKCJmaWxscyIpLG0oImhvdmVyb24iLHkuam9pbigiKyIpfHwicG9pbnRzIiksZCh0LGUscix7YXhpczoieSJ9KSxkKHQsZSxyLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pLG0oImNsaXBvbmF4aXMiKX19LHsiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjYzMSwiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6MTAyNSwiLi9jb25zdGFudHMiOjEwMzAsIi4vZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDMyLCIuL2xpbmVfZGVmYXVsdHMiOjEwMzYsIi4vbGluZV9zaGFwZV9kZWZhdWx0cyI6MTAzOCwiLi9tYXJrZXJfZGVmYXVsdHMiOjEwNDEsIi4vc3VidHlwZXMiOjEwNDUsIi4vdGV4dF9kZWZhdWx0cyI6MTA0NiwiLi94eV9kZWZhdWx0cyI6MTA0N31dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT0hMTtpZihlLm1hcmtlcil7dmFyIG89ZS5tYXJrZXIuY29sb3Iscz0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO28mJiFBcnJheS5pc0FycmF5KG8pP2E9bzpzJiYhQXJyYXkuaXNBcnJheShzKSYmKGE9cyl9aSgiZmlsbGNvbG9yIixuLmFkZE9wYWNpdHkoKGUubGluZXx8e30pLmNvbG9yfHxhfHxyLC41KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMn1dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGE7aWYoImxpbmVzIj09PXQubW9kZSlyZXR1cm4gcj10LmxpbmUuY29sb3IsciYmbi5vcGFjaXR5KHIpP3I6dC5maWxsY29sb3I7aWYoIm5vbmUiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6IiI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybiBhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOiIiLGE/bi5vcGFjaXR5KGEpPC4zP24uYWRkT3BhY2l0eShhLC4zKTphOihyPSh0LmxpbmV8fHt9KS5jb2xvcixyJiZuLm9wYWNpdHkocikmJmkuaGFzTGluZXModCkmJnQubGluZS53aWR0aD9yOnQuZmlsbGNvbG9yKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuL3N1YnR5cGVzIjoxMDQ1fV0sMTAzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksbz10KCIuL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9aS5jb25zdGFudHMuTUFYRElTVDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIGM9dC5jZCxoPWNbMF0udHJhY2UsZj10LnhhLGQ9dC55YSxwPWYuYzJwKGUpLG09ZC5jMnAociksdj1bcCxtXSxnPWguaG92ZXJvbnx8IiI7aWYoLTEhPT1nLmluZGV4T2YoInBvaW50cyIpKXt2YXIgeT1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZi5jMnAodC54KS1wKS1lLDEtMy9lKX0sYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZC5jMnAodC55KS1tKS1lLDEtMy9lKX0seD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKSxyPWYuYzJwKHQueCktcCxuPWQuYzJwKHQueSktbTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHIqcituKm4pLWUsMS0zL2UpfSxfPWkuZ2V0RGlzdGFuY2VGdW5jdGlvbih1LHksYix4KQo7aWYoaS5nZXRDbG9zZXN0KGMsXyx0KSwhMSE9PXQuaW5kZXgpe3ZhciB3PWNbdC5pbmRleF0sTT1mLmMycCh3LngsITApLGs9ZC5jMnAody55LCEwKSxBPXcubXJjfHwxO3JldHVybiBuLmV4dGVuZEZsYXQodCx7Y29sb3I6byhoLHcpLHgwOk0tQSx4MTpNK0EseExhYmVsVmFsOncueCx5MDprLUEseTE6aytBLHlMYWJlbFZhbDp3Lnl9KSx3Lmh0eD90LnRleHQ9dy5odHg6aC5ob3ZlcnRleHQ/dC50ZXh0PWguaG92ZXJ0ZXh0OncudHg/dC50ZXh0PXcudHg6aC50ZXh0JiYodC50ZXh0PWgudGV4dCksYS5ob3ZlckluZm8odyxoLHQpLFt0XX19aWYoLTEhPT1nLmluZGV4T2YoImZpbGxzIikmJmguX3BvbHlnb25zKXt2YXIgVCxTLEUsTCxDLHosSSxELFAsTz1oLl9wb2x5Z29ucyxSPVtdLEY9ITEsaj0xLzAsTj0tMS8wLEI9MS8wLFU9LTEvMDtmb3IoVD0wO1Q8Ty5sZW5ndGg7VCsrKUU9T1tUXSxFLmNvbnRhaW5zKHYpJiYoRj0hRixSLnB1c2goRSksQj1NYXRoLm1pbihCLEUueW1pbiksVT1NYXRoLm1heChVLEUueW1heCkpO2lmKEYpe0I9TWF0aC5tYXgoQiwwKSxVPU1hdGgubWluKFUsZC5fbGVuZ3RoKTt2YXIgVj0oQitVKS8yO2ZvcihUPTA7VDxSLmxlbmd0aDtUKyspZm9yKEw9UltUXS5wdHMsUz0xO1M8TC5sZW5ndGg7UysrKUQ9TFtTLTFdWzFdLFA9TFtTXVsxXSxEPlYhPVA+PVYmJih6PUxbUy0xXVswXSxJPUxbU11bMF0sQz16KyhJLXopKihWLUQpLyhQLUQpLGo9TWF0aC5taW4oaixDKSxOPU1hdGgubWF4KE4sQykpO2o9TWF0aC5tYXgoaiwwKSxOPU1hdGgubWluKE4sZi5fbGVuZ3RoKTt2YXIgSD1zLmRlZmF1bHRMaW5lO3JldHVybiBzLm9wYWNpdHkoaC5maWxsY29sb3IpP0g9aC5maWxsY29sb3I6cy5vcGFjaXR5KChoLmxpbmV8fHt9KS5jb2xvcikmJihIPWgubGluZS5jb2xvciksbi5leHRlbmRGbGF0KHQse2Rpc3RhbmNlOmwrMTAseDA6aix4MTpOLHkwOlYseTE6Vixjb2xvcjpIfSksZGVsZXRlIHQuaW5kZXgsaC50ZXh0JiYhQXJyYXkuaXNBcnJheShoLnRleHQpP3QudGV4dD1TdHJpbmcoaC50ZXh0KTp0LnRleHQ9aC5uYW1lLFt0XX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MzIsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vbGliIjo3MjQsIi4vZ2V0X3RyYWNlX2NvbG9yIjoxMDMzfV0sMTAzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fSxpPXQoIi4vc3VidHlwZXMiKTtuLmhhc0xpbmVzPWkuaGFzTGluZXMsbi5oYXNNYXJrZXJzPWkuaGFzTWFya2VycyxuLmhhc1RleHQ9aS5oYXNUZXh0LG4uaXNCdWJibGU9aS5pc0J1YmJsZSxuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jbGVhbkRhdGE9dCgiLi9jbGVhbl9kYXRhIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uYW5pbWF0YWJsZT0hMCxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDI0LCIuL2F0dHJpYnV0ZXMiOjEwMjUsIi4vY2FsYyI6MTAyNiwiLi9jbGVhbl9kYXRhIjoxMDI3LCIuL2NvbG9yYmFyIjoxMDI4LCIuL2RlZmF1bHRzIjoxMDMxLCIuL2hvdmVyIjoxMDM0LCIuL3Bsb3QiOjEwNDIsIi4vc2VsZWN0IjoxMDQzLCIuL3N0eWxlIjoxMDQ0LCIuL3N1YnR5cGVzIjoxMDQ1fV0sMTAzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9KHQubWFya2VyfHx7fSkuY29sb3I7aWYobygibGluZS5jb2xvciIsciksbih0LCJsaW5lIikpaSh0LGUsYSxvLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pO2Vsc2V7bygibGluZS5jb2xvciIsIUFycmF5LmlzQXJyYXkobCkmJmx8fHIpfW8oImxpbmUud2lkdGgiKSwoc3x8e30pLm5vRGFzaHx8bygibGluZS5kYXNoIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjExLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYxNX1dLDEwMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3ZhciByPV8uYzJwKHRbZV0ueCksaT13LmMycCh0W2VdLnkpO3JldHVybiByIT09biYmaSE9PW4mJltyLGldfWZ1bmN0aW9uIGkodCl7dmFyIGU9dFswXS9fLl9sZW5ndGgscj10WzFdL3cuX2xlbmd0aDtyZXR1cm4oMSsxMCpNYXRoLm1heCgwLC1lLGUtMSwtcixyLTEpKSpBfXZhciBhLG8scyxsLHUsYyxoLGYsZCxwLG0sdixnLHksYix4LF89ZS54YXhpcyx3PWUueWF4aXMsTT1lLnNpbXBsaWZ5LGs9ZS5jb25uZWN0R2FwcyxBPWUuYmFzZVRvbGVyYW5jZSxUPWUubGluZWFyLFM9W10sRT0uMixMPW5ldyBBcnJheSh0Lmxlbmd0aCksQz0wO2ZvcihNfHwoQT1FPS0xKSxhPTA7YTx0Lmxlbmd0aDthKyspaWYobz1yKGEpKXtmb3IoQz0wLExbQysrXT1vLGErKzthPHQubGVuZ3RoO2ErKyl7aWYoIShsPXIoYSkpKXtpZihrKWNvbnRpbnVlO2JyZWFrfWlmKFQpe2lmKCEoKGg9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLWVbMF0sbj10WzFdLWVbMV07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX0obCxvKSk8aShsKSpFKSl7Zm9yKGQ9WyhsWzBdLW9bMF0pL2gsKGxbMV0tb1sxXSkvaF0sdT1vLG09aCx2PXk9Yj0wLGY9ITEscz1sLGErKzthPHQubGVuZ3RoO2ErKyl7aWYoIShjPXIoYSkpKXtpZihrKWNvbnRpbnVlO2JyZWFrfWlmKHA9W2NbMF0tb1swXSxjWzFdLW9bMV1dLHg9cFswXSpkWzFdLXBbMV0qZFswXSx5PU1hdGgubWluKHkseCksKGI9TWF0aC5tYXgoYix4KSkteT5pKGMpKWJyZWFrO3M9YyxnPXBbMF0qZFswXStwWzFdKmRbMV0sZz5tPyhtPWcsbD1jLGY9ITEpOmc8diYmKHY9Zyx1PWMsZj0hMCl9aWYoZj8oTFtDKytdPWwscyE9PXUmJihMW0MrK109dSkpOih1IT09byYmKExbQysrXT11KSxzIT09bCYmKExbQysrXT1sKSksTFtDKytdPXMsYT49dC5sZW5ndGh8fCFjKWJyZWFrO0xbQysrXT1jLG89Y319ZWxzZSBMW0MrK109bH1TLnB1c2goTC5zbGljZSgwLEMpKX1yZXR1cm4gU319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0fV0sMTAzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJzcGxpbmUiPT09cigibGluZS5zaGFwZSIpJiZyKCJsaW5lLnNtb290aGluZyIpfX0se31dLDEwMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPW51bGwsbz0wO288ci5sZW5ndGg7KytvKW49cltvXSxpPW5bMF0udHJhY2UsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLC0xIT09WyJ0b25leHR4IiwidG9uZXh0eSIsInRvbmV4dCJdLmluZGV4T2YoaS5maWxsKSYmKGkuX3ByZXZ0cmFjZT1hLGEmJihhLl9uZXh0dHJhY2U9aSkpLGE9aSk6aS5fcHJldnRyYWNlPWkuX25leHR0cmFjZT1udWxsfX0se31dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXJrZXIscj1lLnNpemVyZWZ8fDEsaT1lLnNpemVtaW58fDAsYT0iYXJlYSI9PT1lLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9yKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWEodC8yKTtyZXR1cm4gbihlKSYmZT4wP01hdGgubWF4KGUsaSk6MH19fSx7ImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCx1KXt2YXIgYyxoPW8uaXNCdWJibGUodCksZj0odC5saW5lfHx7fSkuY29sb3I7aWYodT11fHx7fSxmJiYocj1mKSxsKCJtYXJrZXIuc3ltYm9sIiksbCgibWFya2VyLm9wYWNpdHkiLGg/Ljc6MSksbCgibWFya2VyLnNpemUiKSxsKCJtYXJrZXIuY29sb3IiLHIpLGkodCwibWFya2VyIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHUubm9MaW5lfHwoYz1mJiYhQXJyYXkuaXNBcnJheShmKSYmZS5tYXJrZXIuY29sb3IhPT1mP2Y6aD9uLmJhY2tncm91bmQ6bi5kZWZhdWx0TGluZSxsKCJtYXJrZXIubGluZS5jb2xvciIsYyksaSh0LCJtYXJrZXIubGluZSIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLGwoIm1hcmtlci5saW5lLndpZHRoIixoPzE6MCkpLGgmJihsKCJtYXJrZXIuc2l6ZXJlZiIpLGwoIm1hcmtlci5zaXplbWluIiksbCgibWFya2VyLnNpemVtb2RlIikpLHUuZ3JhZGllbnQpeyJub25lIiE9PWwoIm1hcmtlci5ncmFkaWVudC50eXBlIikmJmwoIm1hcmtlci5ncmFkaWVudC5jb2xvciIpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo2MTUsIi4vc3VidHlwZXMiOjEwNDV9XSwxMDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuO2Uuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1vLnNlbGVjdCh0aGlzKTtpZihuPXRbMF0udHJhY2Usbi5fbmV4dHRyYWNlKXtpZihuLl9uZXh0RmlsbD1lLnNlbGVjdCgiLmpzLWZpbGwuanMtdG9uZXh0IiksIW4uX25leHRGaWxsLnNpemUoKSl7dmFyIGk9IjpmaXJzdC1jaGlsZCI7ZS5zZWxlY3QoIi5qcy1maWxsLmpzLXRvemVybyIpLnNpemUoKSYmKGkrPSIgKyAqIiksbi5fbmV4dEZpbGw9ZS5pbnNlcnQoInBhdGgiLGkpLmF0dHIoImNsYXNzIiwianMtZmlsbCBqcy10b25leHQiKX19ZWxzZSBlLnNlbGVjdEFsbCgiLmpzLWZpbGwuanMtdG9uZXh0IikucmVtb3ZlKCksbi5fbmV4dEZpbGw9bnVsbDtuLmZpbGwmJigidG96ZXJvIj09PW4uZmlsbC5zdWJzdHIoMCw2KXx8InRvc2VsZiI9PT1uLmZpbGx8fCJ0byI9PT1uLmZpbGwuc3Vic3RyKDAsMikmJiFuLl9wcmV2dHJhY2UpPyhuLl9vd25GaWxsPWUuc2VsZWN0KCIuanMtZmlsbC5qcy10b3plcm8iKSxuLl9vd25GaWxsLnNpemUoKXx8KG4uX293bkZpbGw9ZS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImpzLWZpbGwganMtdG96ZXJvIikpKTooZS5zZWxlY3RBbGwoIi5qcy1maWxsLmpzLXRvemVybyIpLnJlbW92ZSgpLG4uX293bkZpbGw9bnVsbCksZS5zZWxlY3RBbGwoIi5qcy1maWxsIikuY2FsbChsLnNldENsaXBVcmwsci5sYXllckNsaXBJZCl9KX1mdW5jdGlvbiBpKHQsZSxyLG4saSxmLHApe2Z1bmN0aW9uIG0odCl7cmV0dXJuIE0/dC50cmFuc2l0aW9uKCk6dH1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHkodCl7aWYodC5pZHMpcmV0dXJuIGd9ZnVuY3Rpb24gYigpe3JldHVybiExfWZ1bmN0aW9uIHgoZSl7dmFyIG4saSxhLHU9ZVswXS50cmFjZSxoPW8uc2VsZWN0KHRoaXMpLGY9Yy5oYXNNYXJrZXJzKHUpLGQ9Yy5oYXNUZXh0KHUpLHA9eSh1KSxnPWIseD1iO2YmJihnPXUubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP3Y6cy5pZGVudGl0eSksZCYmKHg9dS5tYXJrZXIubWF4ZGlzcGxheWVkfHx1Ll9uZWVkc0N1bGw/djpzLmlkZW50aXR5KSxpPWguc2VsZWN0QWxsKCJwYXRoLnBvaW50Iiksbj1pLmRhdGEoZyxwKTt2YXIgXz1uLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKTtNJiZfLmNhbGwobC5wb2ludFN0eWxlLHUsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyxrLEEpLnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciB3PWYmJmwudHJ5Q29sb3JzY2FsZSh1Lm1hcmtlciwiIiksVD1mJiZsLnRyeUNvbG9yc2NhbGUodS5tYXJrZXIsImxpbmUiKTtuLm9yZGVyKCksbi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPW8uc2VsZWN0KHRoaXMpLGk9bShuKTthPWwudHJhbnNsYXRlUG9pbnQoZSxpLGssQSksYT8obC5zaW5nbGVQb2ludFN0eWxlKGUsaSx1LHcsVCx0KSxyLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGksayxBKSx1LmN1c3RvbWRhdGEmJm4uY2xhc3NlZCgicGxvdGx5LWN1c3RvbWRhdGEiLG51bGwhPT1lLmRhdGEmJnZvaWQgMCE9PWUuZGF0YSkpOmkucmVtb3ZlKCl9KSxNP24uZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk6bi5leGl0KCkucmVtb3ZlKCksaT1oLnNlbGVjdEFsbCgiZyIpLG49aS5kYXRhKHgscCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG4ub3JkZXIoKSxuLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5zZWxlY3QodGhpcyksbj1tKGUuc2VsZWN0KCJ0ZXh0IikpO2E9bC50cmFuc2xhdGVQb2ludCh0LG4sayxBKSxhP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSxrLEEpOmUucmVtb3ZlKCl9KSxuLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwobC50ZXh0UG9pbnRTdHlsZSx1LHQpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9ay5jMnAodC54KSxyPUEuYzJwKHQueSk7by5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaChmdW5jdGlvbigpe20oby5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pfSksbi5leGl0KCkucmVtb3ZlKCl9dmFyIF8sdzthKHQsZSxyLG4saSk7dmFyIE09ISFwJiZwLmR1cmF0aW9uPjAsaz1yLnhheGlzLEE9ci55YXhpcyxUPW5bMF0udHJhY2UsUz1ULmxpbmUsRT1vLnNlbGVjdChmKTtpZihFLmNhbGwodS5wbG90LHIscCksITA9PT1ULnZpc2libGUpe20oRSkuc3R5bGUoIm9wYWNpdHkiLFQub3BhY2l0eSk7dmFyIEwsQyx6PVQuZmlsbC5jaGFyQXQoVC5maWxsLmxlbmd0aC0xKTsieCIhPT16JiYieSIhPT16JiYoej0iIiksblswXS5ub2RlMz1FO3ZhciBJPSIiLEQ9W10sUD1ULl9wcmV2dHJhY2U7UCYmKEk9UC5fcHJldlJldnBhdGh8fCIiLEM9UC5fbmV4dEZpbGwsRD1QLl9wb2x5Z29ucyk7dmFyIE8sUixGLGosTixCLFUsVixILHE9IiIsRz0iIixZPVtdLFg9W10sVz1zLm5vb3A7aWYoTD1ULl9vd25GaWxsLGMuaGFzTGluZXMoVCl8fCJub25lIiE9PVQuZmlsbCl7Zm9yKEMmJkMuZGF0dW0obiksLTEhPT1bImh2IiwidmgiLCJodmgiLCJ2aHYiXS5pbmRleE9mKFMuc2hhcGUpPyhGPWwuc3RlcHMoUy5zaGFwZSksaj1sLnN0ZXBzKFMuc2hhcGUuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSkpOkY9aj0ic3BsaW5lIj09PVMuc2hhcGU/ZnVuY3Rpb24odCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdFswXVswXT09PWVbMF0mJnRbMF1bMV09PT1lWzFdP2wuc21vb3RoY2xvc2VkKHQuc2xpY2UoMSksUy5zbW9vdGhpbmcpOmwuc21vb3Rob3Blbih0LFMuc21vb3RoaW5nKX06ZnVuY3Rpb24odCl7cmV0dXJuIk0iK3Quam9pbigiTCIpfSxOPWZ1bmN0aW9uKHQpe3JldHVybiBqKHQucmV2ZXJzZSgpKX0sWT1oKG4se3hheGlzOmsseWF4aXM6QSxjb25uZWN0R2FwczpULmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgoUy53aWR0aHx8MSwzKS80LGxpbmVhcjoibGluZWFyIj09PVMuc2hhcGUsc2ltcGxpZnk6Uy5zaW1wbGlmeX0pLEg9VC5fcG9seWdvbnM9bmV3IEFycmF5KFkubGVuZ3RoKSx3PTA7dzxZLmxlbmd0aDt3KyspVC5fcG9seWdvbnNbd109ZChZW3ddKTtZLmxlbmd0aCYmKEI9WVswXVswXSxVPVlbWS5sZW5ndGgtMV0sVj1VW1UubGVuZ3RoLTFdKSxYPVkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSksVz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoTz1GKGUpLFI9TihlKSxxP3o/KHErPSJMIitPLnN1YnN0cigxKSxHPVIrIkwiK0cuc3Vic3RyKDEpKToocSs9IloiK08sRz1SKyJaIitHKToocT1PLEc9UiksYy5oYXNMaW5lcyhUKSYmZS5sZW5ndGg+MSl7dmFyIHI9by5zZWxlY3QodGhpcyk7aWYoci5kYXR1bShuKSx0KW0oci5zdHlsZSgib3BhY2l0eSIsMCkuYXR0cigiZCIsTykuY2FsbChsLmxpbmVHcm91cFN0eWxlKSkuc3R5bGUoIm9wYWNpdHkiLDEpO2Vsc2V7dmFyIGk9bShyKTtpLmF0dHIoImQiLE8pLGwuc2luZ2xlTGluZVN0eWxlKG4saSl9fX19fXZhciBaPUUuc2VsZWN0QWxsKCIuanMtbGluZSIpLmRhdGEoWCk7bShaLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLFouZWFjaChXKCExKSksWi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNhbGwobC5saW5lR3JvdXBTdHlsZSkuZWFjaChXKCEwKSksbC5zZXRDbGlwVXJsKFosci5sYXllckNsaXBJZCksWS5sZW5ndGgmJihMP0ImJlYmJih6PygieSI9PT16P0JbMV09VlsxXT1BLmMycCgwLCEwKToieCI9PT16JiYoQlswXT1WWzBdPWsuYzJwKDAsITApKSxtKEwpLmF0dHIoImQiLCJNIitWKyJMIitCKyJMIitxLnN1YnN0cigxKSkuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpOm0oTCkuYXR0cigiZCIscSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKToidG9uZXh0Ij09PVQuZmlsbC5zdWJzdHIoMCw2KSYmcSYmSSYmKCJ0b25leHQiPT09VC5maWxsP20oQykuYXR0cigiZCIscSsiWiIrSSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpOm0oQykuYXR0cigiZCIscSsiTCIrSS5zdWJzdHIoMSkrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSxULl9wb2x5Z29ucz1ULl9wb2x5Z29ucy5jb25jYXQoRCkpLFQuX3ByZXZSZXZwYXRoPUcsVC5fcHJldlBvbHlnb25zPUgpO3ZhciBKPUUuc2VsZWN0QWxsKCIucG9pbnRzIik7Xz1KLmRhdGEoW25dKSxKLmVhY2goeCksXy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50cyIsITApLmVhY2goeCksXy5leGl0KCkucmVtb3ZlKCksXy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSExPT09dFswXS50cmFjZS5jbGlwb25heGlzO2wuc2V0Q2xpcFVybChvLnNlbGVjdCh0aGlzKSxlP251bGw6ci5sYXllckNsaXBJZCl9KX19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3ZhciBhPXIueGF4aXMsbD1yLnlheGlzLHU9by5leHRlbnQocy5zaW1wbGVNYXAoYS5yYW5nZSxhLnIyYykpLGg9by5leHRlbnQocy5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGY9blswXS50cmFjZTtpZihjLmhhc01hcmtlcnMoZikpe3ZhciBkPWYubWFya2VyLm1heGRpc3BsYXllZDtpZigwIT09ZCl7dmFyIHA9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueD49dVswXSYmdC54PD11WzFdJiZ0Lnk+PWhbMF0mJnQueTw9aFsxXX0pLG09TWF0aC5jZWlsKHAubGVuZ3RoL2QpLHY9MDtpLmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj10WzBdLnRyYWNlO2MuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8ZSYmdisrfSk7dmFyIGc9TWF0aC5yb3VuZCh2Km0vMytNYXRoLmZsb29yKHYvMykqbS83LjEpO24uZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSxwLmZvckVhY2goZnVuY3Rpb24odCxlKXswPT09TWF0aC5yb3VuZCgoZStnKSVtKSYmKHQudmlzPSEwKX0pfX19dmFyIG89dCgiZDMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLGM9dCgiLi9zdWJ0eXBlcyIpLGg9dCgiLi9saW5lX3BvaW50cyIpLGY9dCgiLi9saW5rX3RyYWNlcyIpLGQ9dCgiLi4vLi4vbGliL3BvbHlnb24iKS50ZXN0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyl7dmFyIGwsdSxjLGgsZCxwPWUucGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbT0hYSx2PSEhYSYmYS5kdXJhdGlvbj4wO2ZvcihjPXAuc2VsZWN0QWxsKCJnLnRyYWNlIiksaD1jLmRhdGEocixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSxoLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMiksZih0LGUsciksbih0LHAsZSksbD0wLHU9e307bDxyLmxlbmd0aDtsKyspdVtyW2xdWzBdLnRyYWNlLnVpZF09bDtpZihwLnNlbGVjdEFsbCgiZy50cmFjZSIpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdVt0WzBdLnRyYWNlLnVpZF0+dVtlWzBdLnRyYWNlLnVpZF0/MTotMX0pLHYpe3MmJihkPXMoKSk7by50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS5kdXJhdGlvbikuZWFzZShhLmVhc2luZykuZWFjaCgiZW5kIixmdW5jdGlvbigpe2QmJmQoKX0pLmVhY2goImludGVycnVwdCIsZnVuY3Rpb24oKXtkJiZkKCl9KS5lYWNoKGZ1bmN0aW9uKCl7cC5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKG4sbyl7aSh0LG8sZSxuLHIsdGhpcyxhKX0pfSl9ZWxzZSBwLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goZnVuY3Rpb24obixvKXtpKHQsbyxlLG4scix0aGlzLGEpfSk7bSYmaC5leGl0KCkucmVtb3ZlKCkscC5zZWxlY3RBbGwoInBhdGg6bm90KFtkXSkiKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MjYsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MzIsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvcG9seWdvbiI6NzM0LCIuL2xpbmVfcG9pbnRzIjoxMDM3LCIuL2xpbmtfdHJhY2VzIjoxMDM5LCIuL3N1YnR5cGVzIjoxMDQ1LGQzOjEyMH1dLDEwNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zdWJ0eXBlcyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzLGw9dC5jZCx1PXQueGF4aXMsYz10LnlheGlzLGg9W10sZj1sWzBdLnRyYWNlLGQ9Zi5tYXJrZXIscD0hbi5oYXNNYXJrZXJzKGYpJiYhbi5oYXNUZXh0KGYpO2lmKCEwPT09Zi52aXNpYmxlJiYhcCl7dmFyIG09QXJyYXkuaXNBcnJheShkLm9wYWNpdHkpPzE6ZC5vcGFjaXR5O2lmKCExPT09ZSlmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWxbcl0uZGltPTA7ZWxzZSBmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWE9bFtyXSxvPXUuYzJwKGEueCkscz1jLmMycChhLnkpLGUuY29udGFpbnMoW28sc10pPyhoLnB1c2goe3BvaW50TnVtYmVyOnIseDphLngseTphLnl9KSxhLmRpbT0wKTphLmRpbT0xO3JldHVybiBsWzBdLm5vZGUzLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4oKHQubW8rMXx8bSsxKS0xKSoodC5kaW0/aToxKX0pLGxbMF0ubm9kZTMuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbT9pOjF9KSxofX19LHsiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzAzLCIuL3N1YnR5cGVzIjoxMDQ1fV0sMTA0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2Uuc2NhdHRlciIpO2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxvPWUudHJhY2V8fGVbMF0udHJhY2U7YS5jYWxsKGkucG9pbnRTdHlsZSxvLHQpLHIuc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChpLnRleHRQb2ludFN0eWxlLG8sdCl9KSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoaS5maWxsR3JvdXBTdHlsZSksZS5jYWxsKGEuc3R5bGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjYzMixkMzoxMjB9XSwxMDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJsaW5lcyIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigibWFya2VycyIpfSxoYXNUZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigidGV4dCIpfSxpc0J1YmJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQubWFya2VyKSYmQXJyYXkuaXNBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7Ii4uLy4uL2xpYiI6NzI0fV0sMTA0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aSgidGV4dHBvc2l0aW9uIiksbi5jb2VyY2VGb250KGksInRleHRmb250IixyLmZvbnQpfX0seyIuLi8uLi9saWIiOjcyNH1dLDEwNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbz1pKCJ4Iikscz1pKCJ5Iik7aWYobi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLHIpLG8pcz8oYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCksYTxvLmxlbmd0aCYmKGUueD1vLnNsaWNlKDAsYSkpLGE8cy5sZW5ndGgmJihlLnk9cy5zbGljZSgwLGEpKSk6KGE9by5sZW5ndGgsaSgieTAiKSxpKCJkeSIpKTtlbHNle2lmKCFzKXJldHVybiAwO2E9ZS55Lmxlbmd0aCxpKCJ4MCIpLGkoImR4Iil9cmV0dXJuIGF9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDJ9XSwxMDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJue3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX12YXIgaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9aS5saW5lLGg9aS5tYXJrZXIsZj1oLmxpbmU7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0ZXh0OnUoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6dSh7fSxpLmhvdmVydGV4dCx7fSksbW9kZTp1KHt9LGkubW9kZSx7ZGZsdDoibGluZXMrbWFya2VycyJ9KSxzdXJmYWNlYXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlstMSwwLDEsMl0sZGZsdDotMX0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHByb2plY3Rpb246e3g6bigieCIpLHk6bigieSIpLHo6bigieiIpfSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGxpbmU6dSh7fSx7d2lkdGg6Yy53aWR0aCxkYXNoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMocyksZGZsdDoic29saWQifSxzaG93c2NhbGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxhKCJsaW5lIikpLG1hcmtlcjp1KHt9LHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhsKSxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LHNpemU6dSh7fSxoLnNpemUse2RmbHQ6OH0pLHNpemVyZWY6aC5zaXplcmVmLHNpemVtaW46aC5zaXplbWluLHNpemVtb2RlOmguc2l6ZW1vZGUsb3BhY2l0eTp1KHt9LGgub3BhY2l0eSx7YXJyYXlPazohMX0pLHNob3dzY2FsZTpoLnNob3dzY2FsZSxjb2xvcmJhcjpoLmNvbG9yYmFyLGxpbmU6dSh7fSx7d2lkdGg6dSh7fSxmLndpZHRoLHthcnJheU9rOiExfSl9LGEoIm1hcmtlci5saW5lIikpfSxhKCJtYXJrZXIiKSksdGV4dHBvc2l0aW9uOnUoe30saS50ZXh0cG9zaXRpb24se2RmbHQ6InRvcCBjZW50ZXIifSksdGV4dGZvbnQ6aS50ZXh0Zm9udCxlcnJvcl94Om8sZXJyb3JfeTpvLGVycm9yX3o6b319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYwOSwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvYXR0cmlidXRlcyI6NjI4LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiOjcwMSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NzAyLCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDEwNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3t4OiExLHk6ITEsdHJhY2U6ZSx0Ont9fV07cmV0dXJuIG4ocixlKSxpKGUpLHJ9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDI0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTAyOX1dLDEwNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYoIWV8fCFlLnZpc2libGUpcmV0dXJuIG51bGw7Zm9yKHZhciBuPW8oZSksaT1uZXcgQXJyYXkodC5sZW5ndGgpLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9bigrdFthXSxhKTtpW2FdPVstc1swXSpyLHNbMV0qcl19cmV0dXJuIGl9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdKXJldHVybiB0W2VdLmxlbmd0aDtyZXR1cm4gMH1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9W24odC54LHQuZXJyb3JfeCxlWzBdKSxuKHQueSx0LmVycm9yX3ksZVsxXSksbih0LnosdC5lcnJvcl96LGVbMl0pXSxhPWkocik7aWYoMD09PWEpcmV0dXJuIG51bGw7Zm9yKHZhciBvPW5ldyBBcnJheShhKSxzPTA7czxhO3MrKyl7Zm9yKHZhciBsPVtbMCwwLDBdLFswLDAsMF1dLHU9MDt1PDM7dSsrKWlmKHJbdV0pZm9yKHZhciBjPTA7YzwyO2MrKylsW2NdW3VdPXJbdV1bc11bY107b1tzXT1sfXJldHVybiBvfXZhciBvPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2NvbXB1dGVfZXJyb3IiKTtlLmV4cG9ydHM9YX0seyIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9jb21wdXRlX2Vycm9yIjo2MzB9XSwxMDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLmxpbmVQbG90PW51bGwsdGhpcy5zY2F0dGVyUGxvdD1udWxsLHRoaXMuZXJyb3JCYXJzPW51bGwsdGhpcy50ZXh0TWFya2Vycz1udWxsLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwsdGhpcy5jb2xvcj1udWxsLHRoaXMubW9kZT0iIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGk9KHIrMSklMyxhPShyKzIpJTMsbz1bXSxzPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBsPXRbbl07IWlzTmFOKGxbaV0pJiZpc0Zpbml0ZShsW2ldKSYmIWlzTmFOKGxbYV0pJiZpc0Zpbml0ZShsW2FdKSYmKG8ucHVzaChbbFtpXSxsW2FdXSkscy5wdXNoKG4pKX12YXIgdT1nKG8pO2ZvcihuPTA7bjx1Lmxlbmd0aDsrK24pZm9yKHZhciBjPXVbbl0saD0wO2g8Yy5sZW5ndGg7KytoKWNbaF09c1tjW2hdXTtyZXR1cm57cG9zaXRpb25zOnQsY2VsbHM6dSxtZXNoQ29sb3I6ZX19ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9WzAsMCwwXSxyPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sbj1bMCwwLDBdLGk9MDtpPDM7aSsrKXt2YXIgYT10W2ldO2EmJiExIT09YS5jb3B5X3pzdHlsZSYmKGE9dFsyXSksYSYmKGVbaV09YS53aWR0aC8yLHJbaV09YihhLmNvbG9yKSxuPWEudGhpY2tuZXNzKX1yZXR1cm57Y2FwU2l6ZTplLGNvbG9yOnIsbGluZVdpZHRoOm59fWZ1bmN0aW9uIG8odCl7dmFyIGU9WzAsMF07cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/WzAsLTFdOih0LmluZGV4T2YoImJvdHRvbSIpPj0wJiYoZVsxXSs9MSksdC5pbmRleE9mKCJ0b3AiKT49MCYmKGVbMV0tPTEpLHQuaW5kZXhPZigibGVmdCIpPj0wJiYoZVswXS09MSksdC5pbmRleE9mKCJyaWdodCIpPj0wJiYoZVswXSs9MSksZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBlKDQqdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gTVt0XX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIGE9bnVsbDtpZihBcnJheS5pc0FycmF5KHQpKXthPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9hW29dPW46YVtvXT1yKHRbb10saSl9ZWxzZSBhPXIodCx5LmlkZW50aXR5KTtyZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSl7dmFyIHIsbixpLGMsaCxmLGQ9W10scD10LmZ1bGxTY2VuZUxheW91dCxtPXQuZGF0YVNjYWxlLHY9cC54YXhpcyxnPXAueWF4aXMsdz1wLnpheGlzLE09ZS5tYXJrZXIsQT1lLmxpbmUsVD1lLnh8fFtdLFM9ZS55fHxbXSxFPWUuenx8W10sTD1ULmxlbmd0aCxDPWUueGNhbGVuZGFyLHo9ZS55Y2FsZW5kYXIsST1lLnpjYWxlbmRhcjtmb3Iobj0wO248TDtuKyspaT12LmQybChUW25dLDAsQykqbVswXSxjPWcuZDJsKFNbbl0sMCx6KSptWzFdLGg9dy5kMmwoRVtuXSwwLEkpKm1bMl0sZFtuXT1baSxjLGhdO2lmKEFycmF5LmlzQXJyYXkoZS50ZXh0KSlmPWUudGV4dDtlbHNlIGlmKHZvaWQgMCE9PWUudGV4dClmb3IoZj1uZXcgQXJyYXkoTCksbj0wO248TDtuKyspZltuXT1lLnRleHQ7aWYocj17cG9zaXRpb246ZCxtb2RlOmUubW9kZSx0ZXh0OmZ9LCJsaW5lImluIGUmJihyLmxpbmVDb2xvcj14KEEsMSxMKSxyLmxpbmVXaWR0aD1BLndpZHRoLHIubGluZURhc2hlcz1BLmRhc2gpLCJtYXJrZXIiaW4gZSl7dmFyIEQ9XyhlKTtyLnNjYXR0ZXJDb2xvcj14KE0sMSxMKSxyLnNjYXR0ZXJTaXplPXUoTS5zaXplLEwscywyMCxEKSxyLnNjYXR0ZXJNYXJrZXI9dShNLnN5bWJvbCxMLGwsIlx1MjVjZiIpLHIuc2NhdHRlckxpbmVXaWR0aD1NLmxpbmUud2lkdGgsci5zY2F0dGVyTGluZUNvbG9yPXgoTS5saW5lLDEsTCksci5zY2F0dGVyQW5nbGU9MH0idGV4dHBvc2l0aW9uImluIGUmJihyLnRleHRPZmZzZXQ9byhlLnRleHRwb3NpdGlvbiksci50ZXh0Q29sb3I9eChlLnRleHRmb250LDEsTCksci50ZXh0U2l6ZT11KGUudGV4dGZvbnQuc2l6ZSxMLHkuaWRlbnRpdHksMTIpLHIudGV4dEZvbnQ9ZS50ZXh0Zm9udC5mYW1pbHksci50ZXh0QW5nbGU9MCk7dmFyIFA9WyJ4IiwieSIsInoiXTtmb3Ioci5wcm9qZWN0PVshMSwhMSwhMV0sci5wcm9qZWN0U2NhbGU9WzEsMSwxXSxyLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sbj0wO248MzsrK24pe3ZhciBPPWUucHJvamVjdGlvbltQW25dXTsoci5wcm9qZWN0W25dPU8uc2hvdykmJihyLnByb2plY3RPcGFjaXR5W25dPU8ub3BhY2l0eSxyLnByb2plY3RTY2FsZVtuXT1PLnNjYWxlKX1yLmVycm9yQm91bmRzPWsoZSxtKTt2YXIgUj1hKFtlLmVycm9yX3gsZS5lcnJvcl95LGUuZXJyb3Jfel0pO3JldHVybiByLmVycm9yQ29sb3I9Ui5jb2xvcixyLmVycm9yTGluZVdpZHRoPVIubGluZVdpZHRoLHIuZXJyb3JDYXBTaXplPVIuY2FwU2l6ZSxyLmRlbGF1bmF5QXhpcz1lLnN1cmZhY2VheGlzLHIuZGVsYXVuYXlDb2xvcj1iKGUuc3VyZmFjZWNvbG9yKSxyfWZ1bmN0aW9uIGgodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGU9dFswXTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmKHQ9ZSksInJnYigiK3Quc2xpY2UoMCwzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KnQpfSkrIikifXJldHVybiBudWxsfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1uZXcgbih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn12YXIgZD10KCJnbC1saW5lM2QiKSxwPXQoImdsLXNjYXR0ZXIzZCIpLG09dCgiZ2wtZXJyb3IzZCIpLHY9dCgiZ2wtbWVzaDNkIiksZz10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLHk9dCgiLi4vLi4vbGliIiksYj10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IikseD10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIiksXz10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHc9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIiksTT10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksaz10KCIuL2NhbGNfZXJyb3JzIiksQT1uLnByb3RvdHlwZTtBLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3QmJih0Lm9iamVjdD09PXRoaXMubGluZVBsb3R8fHQub2JqZWN0PT09dGhpcy5kZWxhdW5heU1lc2h8fHQub2JqZWN0PT09dGhpcy50ZXh0TWFya2Vyc3x8dC5vYmplY3Q9PT10aGlzLnNjYXR0ZXJQbG90KSl7dC5vYmplY3QuaGlnaGxpZ2h0JiZ0Lm9iamVjdC5oaWdobGlnaHQobnVsbCksdGhpcy5zY2F0dGVyUGxvdCYmKHQub2JqZWN0PXRoaXMuc2NhdHRlclBsb3QsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHQodC5kYXRhKSksdGhpcy50ZXh0TGFiZWxzP3ZvaWQgMCE9PXRoaXMudGV4dExhYmVsc1t0LmRhdGEuaW5kZXhdP3QudGV4dExhYmVsPXRoaXMudGV4dExhYmVsc1t0LmRhdGEuaW5kZXhdOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVsczp0LnRleHRMYWJlbD0iIjt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDtyZXR1cm4gdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LEEudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLG89dGhpcy5zY2VuZS5nbHBsb3QuZ2wscz13LnNvbGlkO3RoaXMuZGF0YT10O3ZhciBsPWModGhpcy5zY2VuZSx0KTsibW9kZSJpbiBsJiYodGhpcy5tb2RlPWwubW9kZSksImxpbmVEYXNoZXMiaW4gbCYmbC5saW5lRGFzaGVzIGluIHcmJihzPXdbbC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1oKGwuc2NhdHRlckNvbG9yKXx8aChsLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPWwucG9zaXRpb24sZT17Z2w6byxwb3NpdGlvbjpsLnBvc2l0aW9uLGNvbG9yOmwubGluZUNvbG9yLGxpbmVXaWR0aDpsLmxpbmVXaWR0aHx8MSxkYXNoZXM6c1swXSxkYXNoU2NhbGU6c1sxXSxvcGFjaXR5OnQub3BhY2l0eSxjb25uZWN0R2Fwczp0LmNvbm5lY3RnYXBzfSwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJsaW5lcyIpP3RoaXMubGluZVBsb3Q/dGhpcy5saW5lUGxvdC51cGRhdGUoZSk6KHRoaXMubGluZVBsb3Q9ZChlKSx0aGlzLmxpbmVQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmxpbmVQbG90KSk6dGhpcy5saW5lUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmxpbmVQbG90KSx0aGlzLmxpbmVQbG90LmRpc3Bvc2UoKSx0aGlzLmxpbmVQbG90PW51bGwpO3ZhciB1PXQub3BhY2l0eTtpZih0Lm1hcmtlciYmdC5tYXJrZXIub3BhY2l0eSYmKHUqPXQubWFya2VyLm9wYWNpdHkpLHI9e2dsOm8scG9zaXRpb246bC5wb3NpdGlvbixjb2xvcjpsLnNjYXR0ZXJDb2xvcixzaXplOmwuc2NhdHRlclNpemUsZ2x5cGg6bC5zY2F0dGVyTWFya2VyLG9wYWNpdHk6dSxvcnRob2dyYXBoaWM6ITAsbGluZVdpZHRoOmwuc2NhdHRlckxpbmVXaWR0aCxsaW5lQ29sb3I6bC5zY2F0dGVyTGluZUNvbG9yLHByb2plY3Q6bC5wcm9qZWN0LHByb2plY3RTY2FsZTpsLnByb2plY3RTY2FsZSxwcm9qZWN0T3BhY2l0eTpsLnByb2plY3RPcGFjaXR5fSwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJtYXJrZXJzIik/dGhpcy5zY2F0dGVyUGxvdD90aGlzLnNjYXR0ZXJQbG90LnVwZGF0ZShyKToodGhpcy5zY2F0dGVyUGxvdD1wKHIpLHRoaXMuc2NhdHRlclBsb3QuX3RyYWNlPXRoaXMsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnNjYXR0ZXJQbG90KSk6dGhpcy5zY2F0dGVyUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnNjYXR0ZXJQbG90KSx0aGlzLnNjYXR0ZXJQbG90LmRpc3Bvc2UoKSx0aGlzLnNjYXR0ZXJQbG90PW51bGwpLGE9e2dsOm8scG9zaXRpb246bC5wb3NpdGlvbixnbHlwaDpsLnRleHQsY29sb3I6bC50ZXh0Q29sb3Isc2l6ZTpsLnRleHRTaXplLGFuZ2xlOmwudGV4dEFuZ2xlLGFsaWdubWVudDpsLnRleHRPZmZzZXQsZm9udDpsLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShhKToodGhpcy50ZXh0TWFya2Vycz1wKGEpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLG49e2dsOm8scG9zaXRpb246bC5wb3NpdGlvbixjb2xvcjpsLmVycm9yQ29sb3IsZXJyb3I6bC5lcnJvckJvdW5kcyxsaW5lV2lkdGg6bC5lcnJvckxpbmVXaWR0aCxjYXBTaXplOmwuZXJyb3JDYXBTaXplLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLmVycm9yQmFycz9sLmVycm9yQm91bmRzP3RoaXMuZXJyb3JCYXJzLnVwZGF0ZShuKToodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCksdGhpcy5lcnJvckJhcnM9bnVsbCk6bC5lcnJvckJvdW5kcyYmKHRoaXMuZXJyb3JCYXJzPW0obiksdGhpcy5lcnJvckJhcnMuX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuZXJyb3JCYXJzKSksbC5kZWxhdW5heUF4aXM+PTApe3ZhciBmPWkobC5wb3NpdGlvbixsLmRlbGF1bmF5Q29sb3IsbC5kZWxhdW5heUF4aXMpO2Yub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKGYpOihmLmdsPW8sdGhpcy5kZWxhdW5heU1lc2g9dihmKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LEEuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9Zn0seyIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiOjcwMSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NzAyLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzIxLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDIsIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDQwLCIuL2NhbGNfZXJyb3JzIjoxMDUwLCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6MTIxLCJnbC1lcnJvcjNkIjoxNTksImdsLWxpbmUzZCI6MTcwLCJnbC1tZXNoM2QiOjIwMywiZ2wtc2NhdHRlcjNkIjoyNDl9XSwxMDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGE9MCxvPXIoIngiKSxzPXIoInkiKSxsPXIoInoiKTtyZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxuKSxvJiZzJiZsJiYoYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCksYTxvLmxlbmd0aCYmKGUueD1vLnNsaWNlKDAsYSkpLGE8cy5sZW5ndGgmJihlLnk9cy5zbGljZSgwLGEpKSxhPGwubGVuZ3RoJiYoZS56PWwuc2xpY2UoMCxhKSkpLGF9dmFyIGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHM9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9kZWZhdWx0cyIpLGg9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGYocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGgscixuKX1pZighbih0LGUsZixpKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2YoInRleHQiKSxmKCJob3ZlcnRleHQiKSxmKCJtb2RlIiksby5oYXNMaW5lcyhlKSYmKGYoImNvbm5lY3RnYXBzIiksbCh0LGUscixpLGYpKSxvLmhhc01hcmtlcnMoZSkmJnModCxlLHIsaSxmKSxvLmhhc1RleHQoZSkmJnUodCxlLGksZik7dmFyIGQ9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7Zigic3VyZmFjZWF4aXMiKT49MCYmZigic3VyZmFjZWNvbG9yIixkfHxwKTtmb3IodmFyIG09WyJ4IiwieSIsInoiXSx2PTA7djwzOysrdil7dmFyIGc9InByb2plY3Rpb24uIittW3ZdO2YoZysiLnNob3ciKSYmKGYoZysiLm9wYWNpdHkiKSxmKGcrIi5zY2FsZSIpKX1jKHQsZSxyLHtheGlzOiJ6In0pLGModCxlLHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksYyh0LGUscix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjYzMSwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTAzNiwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNDEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA0NiwiLi9hdHRyaWJ1dGVzIjoxMDQ4fV0sMTA1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubWFya2VyU3ltYm9scz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2NhdHRlcjNkIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxuLmNhdGVnb3JpZXM9WyJnbDNkIiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjcwMiwiLi4vLi4vcGxvdHMvZ2wzZCI6ODA3LCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDI4LCIuL2F0dHJpYnV0ZXMiOjEwNDgsIi4vY2FsYyI6MTA0OSwiLi9jb252ZXJ0IjoxMDUxLCIuL2RlZmF1bHRzIjoxMDUyfV0sMTA1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9bi5tYXJrZXIsdT1uLmxpbmUsYz1sLmxpbmU7ZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyJ9LGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sbW9kZTpzKHt9LG4ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0OnMoe30sbi50ZXh0LHt9KSxsaW5lOntjb2xvcjp1LmNvbG9yLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc2hhcGU6cyh7fSx1LnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzp1LnNtb290aGluZ30sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsOnMoe30sbi5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il19KSxmaWxsY29sb3I6bi5maWxsY29sb3IsbWFya2VyOnMoe30se3N5bWJvbDpsLnN5bWJvbCxvcGFjaXR5Omwub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6bC5tYXhkaXNwbGF5ZWQsc2l6ZTpsLnNpemUsc2l6ZXJlZjpsLnNpemVyZWYsc2l6ZW1pbjpsLnNpemVtaW4sc2l6ZW1vZGU6bC5zaXplbW9kZSxsaW5lOnMoe30se3dpZHRoOmMud2lkdGh9LGEoIm1hcmtlciIubGluZSkpLGdyYWRpZW50OmwuZ3JhZGllbnR9LGEoIm1hcmtlciIpLHtzaG93c2NhbGU6bC5zaG93c2NhbGUsY29sb3JiYXI6b30pLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGhvdmVyaW5mbzpzKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246bi5ob3Zlcm9ufX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYwMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYwOSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDEwNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7dmFyIHU7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgYyxoLGY9ZS5hLmxlbmd0aCxkPW5ldyBBcnJheShmKSxwPSExO2Zvcih1PTA7dTxmO3UrKylpZihjPWUuYVt1XSxoPWUuYlt1XSxuKGMpJiZuKGgpKXt2YXIgbT1yLmFiMnh5KCtjLCtoLCEwKSx2PXIuaXNWaXNpYmxlKCtjLCtoKTt2fHwocD0hMCksZFt1XT17eDptWzBdLHk6bVsxXSxhOmMsYjpoLHZpczp2fX1lbHNlIGRbdV09e3g6ITEseTohMX07ZS5fbmVlZHNDdWxsPXAsZFswXS5jYXJwZXQ9cixkWzBdLnRyYWNlPWU7dmFyIGcseTtpZihhLmhhc01hcmtlcnMoZSkmJihnPWUubWFya2VyLHk9Zy5zaXplLEFycmF5LmlzQXJyYXkoeSkpKXt2YXIgYj17dHlwZToibGluZWFyIn07aS5zZXRDb252ZXJ0KGIpLHk9Yi5tYWtlQ2FsY2RhdGEoZS5tYXJrZXIsInNpemUiKSx5Lmxlbmd0aD5mJiZ5LnNwbGljZShmLHkubGVuZ3RoLWYpfXJldHVybiBvKGUpLHMoZCxlKSxkfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCI6ODk4LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTAyNCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwMjksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGg9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX1kKCJjYXJwZXQiKSxlLnhheGlzPSJ4IixlLnlheGlzPSJ5Ijt2YXIgcCxtPWQoImEiKSx2PWQoImIiKTtpZighKHA9TWF0aC5taW4obS5sZW5ndGgsdi5sZW5ndGgpKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO20mJnA8bS5sZW5ndGgmJihlLmE9bS5zbGljZSgwLHApKSx2JiZwPHYubGVuZ3RoJiYoZS5iPXYuc2xpY2UoMCxwKSksZCgic3VtIiksZCgidGV4dCIpLGQoIm1vZGUiLHA8aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixmLGQpLGwodCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLGQse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZ1KHQsZSxmLGQpO3ZhciBnPVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihkKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksZy5wdXNoKCJwb2ludHMiKSksZCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGModCxlLHIsZCksYS5oYXNMaW5lcyhlKXx8bCh0LGUsZCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8Zy5wdXNoKCJmaWxscyIpLGQoImhvdmVyb24iLGcuam9pbigiKyIpfHwicG9pbnRzIil9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTAzMCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwMzIsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTAzNiwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMDM4LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA0MSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDQ2LCIuL2F0dHJpYnV0ZXMiOjEwNTR9XSwxMDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gYSh0LGUpe3YucHVzaCgodC5sYWJlbHByZWZpeCYmdC5sYWJlbHByZWZpeC5sZW5ndGg+MD90LmxhYmVscHJlZml4OnQuX2hvdmVydGl0bGUrIjogIikrZS50b0ZpeGVkKDMpK3QubGFiZWxzdWZmaXgpfXZhciBvPW4odCxlLHIsaSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsdT10LnhhLl9sZW5ndGgsYz11KmwvMixoPXUtYztyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGgpLGMpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxoKSxjKSxvfXZhciBmPXMuY2Rbcy5pbmRleF07cy5hPWYuYSxzLmI9Zi5iLHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDA7dmFyIGQ9cy50cmFjZSxwPWQuX2NhcnBldCxtPWQuaG92ZXJpbmZvLnNwbGl0KCIrIiksdj1bXTstMSE9PW0uaW5kZXhPZigiYWxsIikmJihtPVsiYSIsImIiXSksLTEhPT1tLmluZGV4T2YoImEiKSYmYShwLmFheGlzLGYuYSksLTEhPT1tLmluZGV4T2YoImIiKSYmYShwLmJheGlzLGYuYik7dmFyIGc9cC5hYjJpaihbZi5hLGYuYl0pLHk9TWF0aC5mbG9vcihnWzBdKSxiPWdbMF0teSx4PU1hdGguZmxvb3IoZ1sxXSksXz1nWzFdLXgsdz1wLmV2YWx4eShbXSx5LHgsYixfKTtyZXR1cm4gdi5wdXNoKCJ5OiAiK3dbMV0udG9GaXhlZCgzKSkscy5leHRyYVRleHQ9di5qb2luKCI8YnI+Iiksb319fSx7Ii4uL3NjYXR0ZXIvaG92ZXIiOjEwMzR9XSwxMDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvY29sb3JiYXIiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4uc2VsZWN0UG9pbnRzPXQoIi4vc2VsZWN0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVyY2FycGV0IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnBldCIsInN5bWJvbHMiLCJtYXJrZXJDb2xvcnNjYWxlIiwic2hvd0xlZ2VuZCIsImNhcnBldERlcGVuZGVudCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTAyOCwiLi9hdHRyaWJ1dGVzIjoxMDU0LCIuL2NhbGMiOjEwNTUsIi4vZGVmYXVsdHMiOjEwNTYsIi4vaG92ZXIiOjEwNTcsIi4vcGxvdCI6MTA1OSwiLi9zZWxlY3QiOjEwNjAsIi4vc3R5bGUiOjEwNjF9XSwxMDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLHU9clswXVswXS5jYXJwZXQsYz17eGF4aXM6aS5nZXRGcm9tSWQodCx1LnhheGlzfHwieCIpLHlheGlzOmkuZ2V0RnJvbUlkKHQsdS55YXhpc3x8InkiKSxwbG90OmUucGxvdH07Zm9yKG4odCxjLHIpLG89MDtvPHIubGVuZ3RoO28rKylzPXJbb11bMF0udHJhY2UsbD1jLnBsb3Quc2VsZWN0QWxsKCJnLnRyYWNlIitzLnVpZCsiIC5qcy1saW5lIiksYS5zZXRDbGlwVXJsKGwsdS5fY2xpcFBhdGhJZCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9zY2F0dGVyL3Bsb3QiOjEwNDJ9XSwxMDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc2VsZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0LGUpO2lmKHIpe3ZhciBpLGEsbyxzPXQuY2Q7Zm9yKG89MDtvPHIubGVuZ3RoO28rKylpPXJbb10sYT1zW2kucG9pbnROdW1iZXJdLGkuYT1hLmEsaS5iPWEuYixpLmM9YS5jLGRlbGV0ZSBpLngsZGVsZXRlIGkueTtyZXR1cm4gcn19fSx7Ii4uL3NjYXR0ZXIvc2VsZWN0IjoxMDQzfV0sMTA2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3N0eWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzLHI9MDtyPGUubGVuZ3RoO3IrKylpZigic2NhdHRlciI9PT1lW3JdLm5hbWUpcmV0dXJuO24odCl9fSx7Ii4uL3NjYXR0ZXIvc3R5bGUiOjEwNDR9XSwxMDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9bi5tYXJrZXIsdT1uLmxpbmUsYz1sLmxpbmU7ZS5leHBvcnRzPXtsb246e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIklTTy0zIiwiVVNBLXN0YXRlcyIsImNvdW50cnkgbmFtZXMiXSxkZmx0OiJJU08tMyJ9LG1vZGU6cyh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOm99LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsbWFya2VyOnMoe30se3N5bWJvbDpsLnN5bWJvbCxvcGFjaXR5Omwub3BhY2l0eSxzaXplOmwuc2l6ZSxzaXplcmVmOmwuc2l6ZXJlZixzaXplbWluOmwuc2l6ZW1pbixzaXplbW9kZTpsLnNpemVtb2RlLHNob3dzY2FsZTpsLnNob3dzY2FsZSxjb2xvcmJhcjpsLmNvbG9yYmFyLGxpbmU6cyh7fSx7d2lkdGg6Yy53aWR0aH0sYSgibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6bC5ncmFkaWVudH0sYSgibWFya2VyIikpLGZpbGw6ewp2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG9zZWxmIl0sZGZsdDoibm9uZSJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcixob3ZlcmluZm86cyh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJsb2NhdGlvbiIsInRleHQiLCJuYW1lIl19KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYwOSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYyNSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDEwNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLG89dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9QXJyYXkuaXNBcnJheShlLmxvY2F0aW9ucykscz1yP2UubG9jYXRpb25zLmxlbmd0aDplLmxvbi5sZW5ndGgsbD1uZXcgQXJyYXkocyksdT0wO3U8czt1Kyspe3ZhciBjPWxbdV09e307aWYocil7dmFyIGg9ZS5sb2NhdGlvbnNbdV07Yy5sb2M9InN0cmluZyI9PXR5cGVvZiBoP2g6bnVsbH1lbHNle3ZhciBmPWUubG9uW3VdLGQ9ZS5sYXRbdV07bihmKSYmbihkKT9jLmxvbmxhdD1bK2YsK2RdOmMubG9ubGF0PVtpLGldfX1yZXR1cm4gbyhsLGUpLGEoZSksbH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTAyNCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwMjksImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGksYT0wLG89cigibG9jYXRpb25zIik7cmV0dXJuIG8/KHIoImxvY2F0aW9ubW9kZSIpLGE9by5sZW5ndGgpOihuPXIoImxvbiIpfHxbXSxpPXIoImxhdCIpfHxbXSxhPU1hdGgubWluKG4ubGVuZ3RoLGkubGVuZ3RoKSxhPG4ubGVuZ3RoJiYoZS5sb249bi5zbGljZSgwLGEpKSxhPGkubGVuZ3RoJiYoZS5sYXQ9aS5zbGljZSgwLGEpKSxhKX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxjLHIsbil9aWYoIW4odCxlLGYpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7ZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLGYpLGYoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixoLGYse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZsKHQsZSxoLGYpLGYoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJnUodCxlLHIsZil9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTAzMiwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDM2LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA0MSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDQ2LCIuL2F0dHJpYnV0ZXMiOjEwNjJ9XSwxMDY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGwsdH19LHt9XSwxMDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGEudGlja1RleHQocixyLmMybCh0KSwiaG92ZXIiKS50ZXh0KyJceGIwIn12YXIgaT10LmhvdmVyaW5mbyxvPSJhbGwiPT09aT9sLmhvdmVyaW5mby5mbGFnczppLnNwbGl0KCIrIikscz0tMSE9PW8uaW5kZXhPZigibG9jYXRpb24iKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksdT0tMSE9PW8uaW5kZXhPZigibG9uIiksYz0tMSE9PW8uaW5kZXhPZigibGF0IiksaD0tMSE9PW8uaW5kZXhPZigidGV4dCIpLGY9W107aWYocz9mLnB1c2goZS5sb2MpOnUmJmM/Zi5wdXNoKCIoIituKGUubG9ubGF0WzBdKSsiLCAiK24oZS5sb25sYXRbMV0pKyIpIik6dT9mLnB1c2goImxvbjogIituKGUubG9ubGF0WzBdKSk6YyYmZi5wdXNoKCJsYXQ6ICIrbihlLmxvbmxhdFsxXSkpLGgpe3ZhciBkO2UuaHR4P2Q9ZS5odHg6dC5ob3ZlcnRleHQ/ZD10LmhvdmVydGV4dDplLnR4P2Q9ZS50eDp0LnRleHQmJihkPXQudGV4dCksQXJyYXkuaXNBcnJheShkKXx8Zi5wdXNoKGQpfXJldHVybiBmLmpvaW4oIjxicj4iKX12YXIgaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxzPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gaC5wcm9qZWN0aW9uKHQpfWZ1bmN0aW9uIHIodCl7dmFyIHI9dC5sb25sYXQ7aWYoclswXT09PW8pcmV0dXJuIDEvMDtpZihoLmlzTG9uTGF0T3ZlckVkZ2VzKHIpKXJldHVybiAxLzA7dmFyIG49ZShyKSxpPXUuYzJwKCksYT1jLmMycCgpLHM9TWF0aC5hYnMoaS1uWzBdKSxsPU1hdGguYWJzKGEtblsxXSksZj1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHMqcytsKmwpLWYsMS0zL2YpfXZhciBhPXQuY2QsbD1hWzBdLnRyYWNlLHU9dC54YSxjPXQueWEsaD10LnN1YnBsb3Q7aWYoaS5nZXRDbG9zZXN0KGEscix0KSwhMSE9PXQuaW5kZXgpe3ZhciBmPWFbdC5pbmRleF0sZD1mLmxvbmxhdCxwPWUoZCksbT1mLm1yY3x8MTtyZXR1cm4gdC54MD1wWzBdLW0sdC54MT1wWzBdK20sdC55MD1wWzFdLW0sdC55MT1wWzFdK20sdC5sb2M9Zi5sb2MsdC5sb249ZFswXSx0LmxhdD1kWzFdLHQuY29sb3I9cyhsLGYpLHQuZXh0cmFUZXh0PW4obCxmLGgubW9ja0F4aXMpLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTAzMywiLi9hdHRyaWJ1dGVzIjoxMDYyfV0sMTA2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJnZW8iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2VvIiksbi5jYXRlZ29yaWVzPVsiZ2VvIiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dlbyI6NzkyLCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDI4LCIuL2F0dHJpYnV0ZXMiOjEwNjIsIi4vY2FsYyI6MTA2MywiLi9kZWZhdWx0cyI6MTA2NCwiLi9ldmVudF9kYXRhIjoxMDY1LCIuL2hvdmVyIjoxMDY2LCIuL3Bsb3QiOjEwNjh9XSwxMDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10WzBdLnRyYWNlO2lmKEFycmF5LmlzQXJyYXkoci5sb2NhdGlvbnMpKWZvcih2YXIgbj1jKHIsZSksaT1yLmxvY2F0aW9ubW9kZSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV0scz1oKGksby5sb2Msbik7by5sb25sYXQ9cz9zLnByb3BlcnRpZXMuY3Q6W3UsdV19fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5mcmFtZXdvcmsuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXJnZW8iKTtlLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0udHJhY2Usbj1hLnNlbGVjdCh0aGlzKTtuLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmNhbGwoby5wb2ludFN0eWxlLHIsdC5ncmFwaERpdiksbi5zZWxlY3RBbGwoInRleHQiKS5jYWxsKG8udGV4dFBvaW50U3R5bGUscix0LmdyYXBoRGl2KX0pLGUuc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWEuc2VsZWN0KHRoaXMpLHI9dC50cmFjZSxuPXIubGluZXx8e307ZS5jYWxsKHMuc3Ryb2tlLG4uY29sb3IpLmNhbGwoby5kYXNoTGluZSxuLmRhc2h8fCIiLG4ud2lkdGh8fDApLCJub25lIiE9PXIuZmlsbCYmZS5jYWxsKHMuZmlsbCxyLmZpbGxjb2xvcil9KX12YXIgYT10KCJkMyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9saWIiKSx1PXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYz10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKS5nZXRUb3BvanNvbkZlYXR1cmVzLGg9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLmxvY2F0aW9uVG9GZWF0dXJlLGY9dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxkPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH1mdW5jdGlvbiBvKHQsZSl7dC5sb25sYXRbMF09PT11JiZhLnNlbGVjdChlKS5yZW1vdmUoKX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyluKGVbc10sdC50b3BvanNvbik7dmFyIGM9dC5mcmFtZXdvcmsuc2VsZWN0KCIuc2NhdHRlcmdlb2xheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXJnZW8iKS5kYXRhKGUscik7Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2Ugc2NhdHRlcmdlbyIpLGMuZXhpdCgpLnJlbW92ZSgpLGMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksYy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWEuc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtpZihkLmhhc0xpbmVzKHIpfHwibm9uZSIhPT1yLmZpbGwpe3ZhciBuPWYuY2FsY1RyYWNlVG9MaW5lQ29vcmRzKHQpLGk9Im5vbmUiIT09ci5maWxsP2YubWFrZVBvbHlnb24obixyKTpmLm1ha2VMaW5lKG4scik7ZS5zZWxlY3RBbGwoInBhdGguanMtbGluZSIpLmRhdGEoW2ldKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKX1kLmhhc01hcmtlcnMocikmJmUuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShsLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCkuZWFjaChmdW5jdGlvbih0KXtvKHQsdGhpcyl9KSxkLmhhc1RleHQocikmJmUuc2VsZWN0QWxsKCJnIikuZGF0YShsLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmVhY2goZnVuY3Rpb24odCl7byh0LHRoaXMpfSl9KSxpKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3MTgsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3MTksIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NzQ1LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1LGQzOjEyMH1dLDEwNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL2dsMmRfZGFzaGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMvZ2wyZF9tYXJrZXJzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwLHU9bi5saW5lLGM9bi5tYXJrZXIsaD1jLmxpbmU7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6cyh7fSxuLnRleHQse30pLG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyJdLGV4dHJhczpbIm5vbmUiXX0sbGluZTp7Y29sb3I6dS5jb2xvcix3aWR0aDp1LndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhhKSxkZmx0OiJzb2xpZCJ9fSxtYXJrZXI6bCh7fSxpKCJtYXJrZXIiKSx7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMobyksZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxzaXplOmMuc2l6ZSxzaXplcmVmOmMuc2l6ZXJlZixzaXplbWluOmMuc2l6ZW1pbixzaXplbW9kZTpjLnNpemVtb2RlLG9wYWNpdHk6Yy5vcGFjaXR5LHNob3dzY2FsZTpjLnNob3dzY2FsZSxjb2xvcmJhcjpjLmNvbG9yYmFyLGxpbmU6bCh7fSxpKCJtYXJrZXIubGluZSIpLHt3aWR0aDpoLndpZHRofSl9KSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGw6cyh7fSxuLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCJdfSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLGVycm9yX3k6bi5lcnJvcl95LGVycm9yX3g6bi5lcnJvcl94fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjA5LCIuLi8uLi9jb25zdGFudHMvZ2wyZF9kYXNoZXMiOjY5OSwiLi4vLi4vY29uc3RhbnRzL2dsMmRfbWFya2VycyI6NzAwLCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDEwNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksYT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG89dC5fZnVsbExheW91dC5kcmFnbW9kZTtpZigibGFzc28iPT09b3x8InNlbGVjdCI9PT1vKXt2YXIgcyxsPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx1PW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxjPWwubWFrZUNhbGNkYXRhKGUsIngiKSxoPXUubWFrZUNhbGNkYXRhKGUsInkiKSxmPU1hdGgubWluKGMubGVuZ3RoLGgubGVuZ3RoKTtmb3Iocj1uZXcgQXJyYXkoZikscz0wO3M8ZjtzKyspcltzXT17eDpjW3NdLHk6aFtzXX19ZWxzZSByPVt7eDohMSx5OiExLHRyYWNlOmUsdDp7fX1dLGkocixlKTtyZXR1cm4gYShlKSxyfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTAyNCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwMjl9XSwxMDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9InNjYXR0ZXJnbCIsdGhpcy5waWNrWERhdGE9W10sdGhpcy5waWNrWURhdGE9W10sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmNvbG9yPSJyZ2IoMCwgMCwgMCkiLHRoaXMubmFtZT0iIix0aGlzLmhvdmVyaW5mbz0iYWxsIix0aGlzLmNvbm5lY3RnYXBzPSEwLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5pc1Zpc2libGU9ITEsdGhpcy5oYXNMaW5lcz0hMSx0aGlzLmhhc0Vycm9yWD0hMSx0aGlzLmhhc0Vycm9yWT0hMSx0aGlzLmhhc01hcmtlcnM9ITEsdGhpcy5saW5lPXRoaXMuaW5pdE9iamVjdChtLHtwb3NpdGlvbnM6bmV3IEZsb2F0NjRBcnJheSgwKSxjb2xvcjpbMCwwLDAsMV0sd2lkdGg6MSxmaWxsOlshMSwhMSwhMSwhMV0sZmlsbENvbG9yOltbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLGRhc2hlczpbMV19LDApLHRoaXMuZXJyb3JYPXRoaXMuaW5pdE9iamVjdCh2LHtwb3NpdGlvbnM6bmV3IEZsb2F0NjRBcnJheSgwKSxlcnJvcnM6bmV3IEZsb2F0NjRBcnJheSgwKSxsaW5lV2lkdGg6MSxjYXBTaXplOjAsY29sb3I6WzAsMCwwLDFdfSwxKSx0aGlzLmVycm9yWT10aGlzLmluaXRPYmplY3Qodix7cG9zaXRpb25zOm5ldyBGbG9hdDY0QXJyYXkoMCksZXJyb3JzOm5ldyBGbG9hdDY0QXJyYXkoMCksbGluZVdpZHRoOjEsY2FwU2l6ZTowLGNvbG9yOlswLDAsMCwxXX0sMik7dmFyIHI9e3Bvc2l0aW9uczpuZXcgRmxvYXQ2NEFycmF5KDApLHNpemVzOltdLGNvbG9yczpbXSxnbHlwaHM6W10sYm9yZGVyV2lkdGhzOltdLGJvcmRlckNvbG9yczpbXSxzaXplOjEyLGNvbG9yOlswLDAsMCwxXSxib3JkZXJTaXplOjEsYm9yZGVyQ29sb3I6WzAsMCwwLDFdLHNuYXBQb2ludHM6ITB9LG49eS5leHRlbmRGbGF0KHt9LHIse3NuYXBQb2ludHM6ITF9KTt0aGlzLnNjYXR0ZXI9dGhpcy5pbml0T2JqZWN0KGQsciwzKSx0aGlzLmZhbmN5U2NhdHRlcj10aGlzLmluaXRPYmplY3QocCxyLDQpLHRoaXMuc2VsZWN0U2NhdHRlcj10aGlzLmluaXRPYmplY3QoZCxuLDUpfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLGEodCxlLHIpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkociksaT1lWzBdLGE9MDthPHI7KythKW5bYV09dChhPj1lLmxlbmd0aD9pOmVbYV0pO3JldHVybiBufWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBsKE8odCxyKSxQKGUscikscil9ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT1rKHQsZSxuKTtyZXR1cm4gaT1BcnJheS5pc0FycmF5KGlbMF0pP2k6YSh5LmlkZW50aXR5LFtpXSxuKSxsKGksUChyLG4pLG4pfWZ1bmN0aW9uIGwodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoNCpyKSxpPTA7aTxyOysraSl7Zm9yKHZhciBhPTA7YTwzOysrYSluWzQqaSthXT10W2ldW2FdO25bNCppKzNdPXRbaV1bM10qZVtpXX1yZXR1cm4gbn1mdW5jdGlvbiB1KHQpe3JldHVybiIiPT09dC5zcGxpdCgiLW9wZW4iKVsxXX1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dmFyIGEsbz1pP0M6MTtmb3IoYT0wO2E8MzthKyspdFs0KnIrYV09ZVs0Km4rYV07dFs0KnIrYV09byplWzQqbithXX1mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49TWF0aC5tYXgoMSwoci0xKS9NYXRoLm1pbihNYXRoLm1heChyLDEpLDFlMykpLGk9MDtpPHI7aSs9bilpZihlPXRbTWF0aC5mbG9vcihpKV0sIShnKGUpfHxlIGluc3RhbmNlb2YgRGF0ZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZih0LGUscil7dmFyIGk9bmV3IG4odCxlLnVpZCk7cmV0dXJuIGkudXBkYXRlKGUsciksaX12YXIgZD10KCJnbC1zY2F0dGVyMmQiKSxwPXQoImdsLXNjYXR0ZXIyZC1zZGYiKSxtPXQoImdsLWxpbmUyZCIpLHY9dCgiZ2wtZXJyb3IyZCIpLGc9dCgiZmFzdC1pc251bWVyaWMiKSx5PXQoIi4uLy4uL2xpYiIpLGI9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIiksXz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLHc9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLE09dCgiLi4vLi4vbGliL3R5cGVkX2FycmF5X3RydW5jYXRlIiksaz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIiksQT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksVD10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLFM9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxFPXQoIi4uLy4uL2NvbnN0YW50cy9nbDJkX21hcmtlcnMiKSxMPXQoIi4uLy4uL2NvbnN0YW50cy9nbDJkX2Rhc2hlcyIpLEM9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLHo9WyJ4YXhpcyIsInlheGlzIl0sST1bMCwwLDAsMF0sRD1uLnByb3RvdHlwZTtELmluaXRPYmplY3Q9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt1fHwodT10KHMsZSksdS5fdHJhY2U9byx1Ll9pbmRleD1yKSx1LnVwZGF0ZShlKX1mdW5jdGlvbiBpKCl7dSYmdS51cGRhdGUobCl9ZnVuY3Rpb24gYSgpe3UmJnUuZGlzcG9zZSgpfXZhciBvPXRoaXMscz1vLnNjZW5lLmdscGxvdCxsPXkuZXh0ZW5kRmxhdCh7fSxlKSx1PW51bGw7cmV0dXJue29wdGlvbnM6ZSx1cGRhdGU6bixjbGVhcjppLGRpc3Bvc2U6YX19LEQuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10LnBvaW50SWQ7KHQub2JqZWN0IT09dGhpcy5saW5lfHx0aGlzLmNvbm5lY3RnYXBzKSYmKGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXSk7dmFyIHI9dGhpcy5waWNrWERhdGFbZV07cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2cocil8fCF5LmlzRGF0ZVRpbWUocik/cjp5LmRhdGVUaW1lMm1zKHIpLHRoaXMucGlja1lEYXRhW2VdXSx0ZXh0TGFiZWw6QXJyYXkuaXNBcnJheSh0aGlzLnRleHRMYWJlbHMpP3RoaXMudGV4dExhYmVsc1tlXTp0aGlzLnRleHRMYWJlbHMsY29sb3I6QXJyYXkuaXNBcnJheSh0aGlzLmNvbG9yKT90aGlzLmNvbG9yW2VdOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LEQuaXNGYW5jeT1mdW5jdGlvbih0KXtpZigibGluZWFyIiE9PXRoaXMuc2NlbmUueGF4aXMudHlwZSYmImRhdGUiIT09dGhpcy5zY2VuZS54YXhpcy50eXBlKXJldHVybiEwO2lmKCJsaW5lYXIiIT09dGhpcy5zY2VuZS55YXhpcy50eXBlKXJldHVybiEwO2lmKCF0Lnh8fCF0LnkpcmV0dXJuITA7aWYodGhpcy5oYXNNYXJrZXJzKXt2YXIgZT10Lm1hcmtlcnx8e307aWYoQXJyYXkuaXNBcnJheShlLnN5bWJvbCl8fCJjaXJjbGUiIT09ZS5zeW1ib2x8fEFycmF5LmlzQXJyYXkoZS5zaXplKXx8QXJyYXkuaXNBcnJheShlLmNvbG9yKXx8QXJyYXkuaXNBcnJheShlLmxpbmUud2lkdGgpfHxBcnJheS5pc0FycmF5KGUubGluZS5jb2xvcil8fEFycmF5LmlzQXJyYXkoZS5vcGFjaXR5KSlyZXR1cm4hMH1yZXR1cm4hKCF0aGlzLmhhc0xpbmVzfHx0aGlzLmNvbm5lY3RnYXBzKXx8KCEhdGhpcy5oYXNFcnJvclh8fCEhdGhpcy5oYXNFcnJvclkpfTt2YXIgUD1pLmJpbmQobnVsbCxmdW5jdGlvbih0KXtyZXR1cm4rdH0pLE89aS5iaW5kKG51bGwsdyksUj1pLmJpbmQobnVsbCxmdW5jdGlvbih0KXtyZXR1cm4gRVt0XT90OiJjaXJjbGUifSk7RC51cGRhdGU9ZnVuY3Rpb24odCxlKXshMCE9PXQudmlzaWJsZT8odGhpcy5pc1Zpc2libGU9ITEsdGhpcy5oYXNMaW5lcz0hMSx0aGlzLmhhc0Vycm9yWD0hMSx0aGlzLmhhc0Vycm9yWT0hMSx0aGlzLmhhc01hcmtlcnM9ITEpOih0aGlzLmlzVmlzaWJsZT0hMCx0aGlzLmhhc0xpbmVzPUEuaGFzTGluZXModCksdGhpcy5oYXNFcnJvclg9ITA9PT10LmVycm9yX3gudmlzaWJsZSx0aGlzLmhhc0Vycm9yWT0hMD09PXQuZXJyb3JfeS52aXNpYmxlLHRoaXMuaGFzTWFya2Vycz1BLmhhc01hcmtlcnModCkpLHRoaXMudGV4dExhYmVscz10LnRleHQsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmhvdmVyaW5mbz10LmhvdmVyaW5mbyx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuY29ubmVjdGdhcHM9ISF0LmNvbm5lY3RnYXBzLHRoaXMuaXNWaXNpYmxlP3RoaXMuaXNGYW5jeSh0KT90aGlzLnVwZGF0ZUZhbmN5KHQpOnRoaXMudXBkYXRlRmFzdCh0KToodGhpcy5saW5lLmNsZWFyKCksdGhpcy5lcnJvclguY2xlYXIoKSx0aGlzLmVycm9yWS5jbGVhcigpLHRoaXMuc2NhdHRlci5jbGVhcigpLHRoaXMuZmFuY3lTY2F0dGVyLmNsZWFyKCkpLHRoaXMuc2NlbmUuZ2xwbG90Lm9iamVjdHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9pbmRleC1lLl9pbmRleH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmNvbG9yPVModCx7fSksZSYmZVswXSYmIWVbMF0uX2dsVHJhY2UmJihlWzBdLl9nbFRyYWNlPXRoaXMpfSxELnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LHM9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksbD1vLmxlbmd0aCx1PW5ldyBBcnJheShsKSxjPW5ldyBGbG9hdDY0QXJyYXkoMipsKSxmPXRoaXMuYm91bmRzLGQ9MCxwPTAsbT10LnNlbGVjdGlvbix2PXQueGNhbGVuZGFyLGI9aChvKSxfPSFiJiYiZGF0ZSI9PT14KG8sdik7aWYoYnx8Xylmb3IoZT0wO2U8bDsrK2UpaT1vW2VdLGE9c1tlXSxnKGEpJiYoYnx8KGk9eS5kYXRlVGltZTJtcyhpLHYpKSxjW3ArK109aSxjW3ArK109YSx1W2QrK109ZSxmWzBdPU1hdGgubWluKGZbMF0saSksZlsxXT1NYXRoLm1pbihmWzFdLGEpLGZbMl09TWF0aC5tYXgoZlsyXSxpKSxmWzNdPU1hdGgubWF4KGZbM10sYSkpO2lmKGM9TShjLHApLHRoaXMuaWRUb0luZGV4PXUsbSYmbS5sZW5ndGgpZm9yKHI9bmV3IEZsb2F0NjRBcnJheSgyKm0ubGVuZ3RoKSxlPTAsbj1tLmxlbmd0aDtlPG47ZSsrKXJbMiplKzBdPW1bZV0ueCxyWzIqZSsxXT1tW2VdLnk7dGhpcy51cGRhdGVMaW5lcyh0LGMpLHRoaXMudXBkYXRlRXJyb3IoIlgiLHQpLHRoaXMudXBkYXRlRXJyb3IoIlkiLHQpO3ZhciBrO2lmKHRoaXMuaGFzTWFya2Vycyl7dmFyIEEsVCxTO3I/KHRoaXMuc2NhdHRlci5vcHRpb25zLnBvc2l0aW9ucz1udWxsLEE9dyh0Lm1hcmtlci5jb2xvciksVD13KHQubWFya2VyLmxpbmUuY29sb3IpLFM9dC5vcGFjaXR5KnQubWFya2VyLm9wYWNpdHkqQyxBWzNdKj1TLHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9yPUEsVFszXSo9Uyx0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcj1ULGs9dC5tYXJrZXIuc2l6ZSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5zaXplPWssdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyU2l6ZT10Lm1hcmtlci5saW5lLndpZHRoLHRoaXMuc2NhdHRlci51cGRhdGUoKSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5wb3NpdGlvbnM9Yyx0aGlzLnNlbGVjdFNjYXR0ZXIub3B0aW9ucy5wb3NpdGlvbnM9cixBPXcodC5tYXJrZXIuY29sb3IpLFQ9dyh0Lm1hcmtlci5saW5lLmNvbG9yKSxTPXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5LEFbM10qPVMsdGhpcy5zZWxlY3RTY2F0dGVyLm9wdGlvbnMuY29sb3I9QSxUWzNdKj1TLHRoaXMuc2VsZWN0U2NhdHRlci5vcHRpb25zLmJvcmRlckNvbG9yPVQsaz10Lm1hcmtlci5zaXplLHRoaXMuc2VsZWN0U2NhdHRlci5vcHRpb25zLnNpemU9ayx0aGlzLnNlbGVjdFNjYXR0ZXIub3B0aW9ucy5ib3JkZXJTaXplPXQubWFya2VyLmxpbmUud2lkdGgsdGhpcy5zZWxlY3RTY2F0dGVyLnVwZGF0ZSgpKToodGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPWMsQT13KHQubWFya2VyLmNvbG9yKSxUPXcodC5tYXJrZXIubGluZS5jb2xvciksUz10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eSxBWzNdKj1TLHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9yPUEsVFszXSo9Uyx0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcj1ULGs9dC5tYXJrZXIuc2l6ZSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5zaXplPWssdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyU2l6ZT10Lm1hcmtlci5saW5lLndpZHRoLHRoaXMuc2NhdHRlci51cGRhdGUoKSl9ZWxzZSB0aGlzLnNjYXR0ZXIuY2xlYXIoKTt0aGlzLmZhbmN5U2NhdHRlci5jbGVhcigpLHRoaXMuZXhwYW5kQXhlc0Zhc3QoZixrKX0sRC51cGRhdGVGYW5jeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS54YXhpcyxuPWUueWF4aXMsYT10aGlzLmJvdW5kcyxvPXQuc2VsZWN0aW9uLGw9dGhpcy5waWNrWERhdGE9ci5tYWtlQ2FsY2RhdGEodCwieCIpLnNsaWNlKCksaD10aGlzLnBpY2tZRGF0YT1uLm1ha2VDYWxjZGF0YSh0LCJ5Iikuc2xpY2UoKTt0aGlzLnhEYXRhPWwuc2xpY2UoKSx0aGlzLnlEYXRhPWguc2xpY2UoKTt2YXIgZixkLHAsbSx2LGcseSxiPV8uY2FsY0Zyb21UcmFjZSh0LGUuZnVsbExheW91dCkseD1sLmxlbmd0aCx3PW5ldyBBcnJheSh4KSxrPW5ldyBGbG9hdDY0QXJyYXkoMip4KSxBPW5ldyBGbG9hdDY0QXJyYXkoNCp4KSxTPW5ldyBGbG9hdDY0QXJyYXkoNCp4KSxMPTAsQz0wLHo9MCxEPTAsTz0ibG9nIj09PXIudHlwZT9yLmQybDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sRj0ibG9nIj09PW4udHlwZT9uLmQybDpmdW5jdGlvbih0KXtyZXR1cm4gdH07Zm9yKGY9MDtmPHg7KytmKXRoaXMueERhdGFbZl09ZD1PKGxbZl0pLHRoaXMueURhdGFbZl09cD1GKGhbZl0pLGlzTmFOKGQpfHxpc05hTihwKXx8KHdbTCsrXT1mLGtbQysrXT1kLGtbQysrXT1wLG09QVt6KytdPWQtYltmXS54c3x8MCx2PUFbeisrXT1iW2ZdLnhoLWR8fDAsQVt6KytdPTAsQVt6KytdPTAsU1tEKytdPTAsU1tEKytdPTAsZz1TW0QrK109cC1iW2ZdLnlzfHwwLHk9U1tEKytdPWJbZl0ueWgtcHx8MCxhWzBdPU1hdGgubWluKGFbMF0sZC1tKSxhWzFdPU1hdGgubWluKGFbMV0scC1nKSxhWzJdPU1hdGgubWF4KGFbMl0sZCt2KSxhWzNdPU1hdGgubWF4KGFbM10scCt5KSk7az1NKGssQyksdGhpcy5pZFRvSW5kZXg9dyx0aGlzLnVwZGF0ZUxpbmVzKHQsayksdGhpcy51cGRhdGVFcnJvcigiWCIsdCxrLEEpLHRoaXMudXBkYXRlRXJyb3IoIlkiLHQsayxTKTt2YXIgaixOO2lmKG8mJm8ubGVuZ3RoKWZvcihOPXt9LGY9MDtmPG8ubGVuZ3RoO2YrKylOW29bZl0ucG9pbnROdW1iZXJdPSEwO2lmKHRoaXMuaGFzTWFya2Vycyl7dGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPWssdGhpcy5zY2F0dGVyLm9wdGlvbnMuc2l6ZXM9bmV3IEFycmF5KEwpLHRoaXMuc2NhdHRlci5vcHRpb25zLmdseXBocz1uZXcgQXJyYXkoTCksdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyV2lkdGhzPW5ldyBBcnJheShMKSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5jb2xvcnM9bmV3IEFycmF5KDQqTCksdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyQ29sb3JzPW5ldyBBcnJheSg0KkwpO3ZhciBCLFUsVixILHEsRyxZLFgsVyxaLEo9VCh0KSxLPXQubWFya2VyLFE9Sy5vcGFjaXR5LCQ9dC5vcGFjaXR5LHR0PVIoSy5zeW1ib2wseCksZXQ9cyhLLFEsJCx4KSxydD1QKEsubGluZS53aWR0aCx4KSxudD1zKEsubGluZSxRLCQseCk7Zm9yKGo9aShKLEsuc2l6ZSx4KSxmPTA7ZjxMOysrZilCPXdbZl0sVj10dFtCXSxIPUVbVl0scT11KFYpLEc9TiYmIU5bQl0sWT1ILm5vQm9yZGVyJiYhcT9udDpldCxYPXE/ZXQ6bnQsVT1qW0JdLFc9cnRbQl0sWj1ILm5vQm9yZGVyfHxILm5vRmlsbD8uMSpVOjAsdGhpcy5zY2F0dGVyLm9wdGlvbnMuc2l6ZXNbZl09NCpVLHRoaXMuc2NhdHRlci5vcHRpb25zLmdseXBoc1tmXT1ILnVuaWNvZGUsdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyV2lkdGhzW2ZdPS41KihXPlo/Vy1aOjApLCFxfHxILm5vQm9yZGVyfHxILm5vRmlsbD9jKHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9ycyxZLGYsQixHKTpjKHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9ycyxJLGYsMCksYyh0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcnMsWCxmLEIsRyk7Tj8odGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPW51bGwsdGhpcy5mYW5jeVNjYXR0ZXIudXBkYXRlKCksdGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPWspOnRoaXMuZmFuY3lTY2F0dGVyLnVwZGF0ZSgpfWVsc2UgdGhpcy5mYW5jeVNjYXR0ZXIuY2xlYXIoKTt0aGlzLnNjYXR0ZXIuY2xlYXIoKSx0aGlzLmV4cGFuZEF4ZXNGYW5jeShsLGgsail9LEQudXBkYXRlTGluZXM9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZih0aGlzLmhhc0xpbmVzKXt2YXIgbj1lO2lmKCF0LmNvbm5lY3RnYXBzKXt2YXIgaT0wLGE9dGhpcy54RGF0YSxzPXRoaXMueURhdGE7Zm9yKG49bmV3IEZsb2F0NjRBcnJheSgyKmEubGVuZ3RoKSxyPTA7cjxhLmxlbmd0aDsrK3IpbltpKytdPWFbcl0sbltpKytdPXNbcl19dGhpcy5saW5lLm9wdGlvbnMucG9zaXRpb25zPW47dmFyIGw9byh0LmxpbmUuY29sb3IsdC5vcGFjaXR5LDEpLHU9TWF0aC5yb3VuZCguNSp0aGlzLmxpbmUub3B0aW9ucy53aWR0aCksYz0oTFt0LmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8Yy5sZW5ndGg7KytyKWNbcl0qPXU7c3dpdGNoKHQuZmlsbCl7Y2FzZSJ0b3plcm95Ijp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMSwhMCwhMSwhMV07YnJlYWs7Y2FzZSJ0b3plcm94Ijp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMCwhMSwhMSwhMV07YnJlYWs7ZGVmYXVsdDp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMSwhMSwhMSwhMV19dmFyIGg9dyh0LmZpbGxjb2xvcik7dGhpcy5saW5lLm9wdGlvbnMuY29sb3I9bCx0aGlzLmxpbmUub3B0aW9ucy53aWR0aD0yKnQubGluZS53aWR0aCx0aGlzLmxpbmUub3B0aW9ucy5kYXNoZXM9Yyx0aGlzLmxpbmUub3B0aW9ucy5maWxsQ29sb3I9W2gsaCxoLGhdLHRoaXMubGluZS51cGRhdGUoKX1lbHNlIHRoaXMubGluZS5jbGVhcigpfSxELnVwZGF0ZUVycm9yPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXNbImVycm9yIit0XSxhPWVbImVycm9yXyIrdC50b0xvd2VyQ2FzZSgpXTsieCI9PT10LnRvTG93ZXJDYXNlKCkmJmEuY29weV95c3R5bGUmJihhPWUuZXJyb3JfeSksdGhpc1siaGFzRXJyb3IiK3RdPyhpLm9wdGlvbnMucG9zaXRpb25zPXIsaS5vcHRpb25zLmVycm9ycz1uLGkub3B0aW9ucy5jYXBTaXplPWEud2lkdGgsaS5vcHRpb25zLmxpbmVXaWR0aD1hLnRoaWNrbmVzcy8yLGkub3B0aW9ucy5jb2xvcj1vKGEuY29sb3IsMSwxKSxpLnVwZGF0ZSgpKTppLmNsZWFyKCl9LEQuZXhwYW5kQXhlc0Zhc3Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9ZXx8MTAsbz0wO288MjtvKyspcj10aGlzLnNjZW5lW3pbb11dLG49ci5fbWluLG58fChuPVtdKSxuLnB1c2goe3ZhbDp0W29dLHBhZDphfSksaT1yLl9tYXgsaXx8KGk9W10pLGkucHVzaCh7dmFsOnRbbysyXSxwYWQ6YX0pfSxELmV4cGFuZEF4ZXNGYW5jeT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zY2VuZSxpPXtwYWRkZWQ6ITAscHBhZDpyfTtiLmV4cGFuZChuLnhheGlzLHQsaSksYi5leHBhbmQobi55YXhpcyxlLGkpfSxELmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpbmUuZGlzcG9zZSgpLHRoaXMuZXJyb3JYLmRpc3Bvc2UoKSx0aGlzLmVycm9yWS5kaXNwb3NlKCksdGhpcy5zY2F0dGVyLmRpc3Bvc2UoKSx0aGlzLmZhbmN5U2NhdHRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mfSx7Ii4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MzIsIi4uLy4uL2NvbnN0YW50cy9nbDJkX2Rhc2hlcyI6Njk5LCIuLi8uLi9jb25zdGFudHMvZ2wyZF9tYXJrZXJzIjo3MDAsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcwMywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjcyMSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQyLCIuLi8uLi9saWIvdHlwZWRfYXJyYXlfdHJ1bmNhdGUiOjc0NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjc2NSwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwMzMsIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDQwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1LCJmYXN0LWlzbnVtZXJpYyI6MTI5LCJnbC1lcnJvcjJkIjoxNTcsImdsLWxpbmUyZCI6MTY4LCJnbC1zY2F0dGVyMmQiOjI0NiwiZ2wtc2NhdHRlcjJkLXNkZiI6MjQxfV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiKSxoPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBkKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsaSl9dmFyIHA9byh0LGUsZixkKTtpZighcClyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2QoInRleHQiKSxkKCJtb2RlIixwPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKGQoImNvbm5lY3RnYXBzIiksbCh0LGUscixmLGQpKSxhLmhhc01hcmtlcnMoZSkmJnModCxlLHIsZixkKSxkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZ1KHQsZSxyLGQpLGModCxlLHIse2F4aXM6InkifSksYyh0LGUscix7YXhpczoieCIsaW5oZXJpdDoieSJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjYzMSwiLi4vLi4vbGliIjo3MjQsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDMwLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTAzMiwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDM2LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA0MSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTA0NywiLi9hdHRyaWJ1dGVzIjoxMDY5fV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuLi9zY2F0dGVyL2hvdmVyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2NhdHRlcmdsIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxuLmNhdGVnb3JpZXM9WyJnbDJkIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwibWFya2VyQ29sb3JzY2FsZSIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODA0LCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDI4LCIuLi9zY2F0dGVyL2hvdmVyIjoxMDM0LCIuL2F0dHJpYnV0ZXMiOjEwNjksIi4vY2FsYyI6MTA3MCwiLi9jb252ZXJ0IjoxMDcxLCIuL2RlZmF1bHRzIjoxMDcyLCIuL3NlbGVjdCI6MTA3NH1dLDEwNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9dC5jZCxsPXQueGF4aXMsdT10LnlheGlzLGM9W10saD1zWzBdLnRyYWNlLGY9c1swXS5fZ2xUcmFjZSxkPWYuc2NlbmUscD0hbi5oYXNNYXJrZXJzKGgpJiYhbi5oYXNUZXh0KGgpO2lmKCEwPT09aC52aXNpYmxlJiYhcCl7aWYoITE9PT1lKWZvcihyPTA7cjxzLmxlbmd0aDtyKyspc1tyXS5kaW09MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspaT1zW3JdLGE9bC5jMnAoaS54KSxvPXUuYzJwKGkueSksZS5jb250YWlucyhbYSxvXSk/KGMucHVzaCh7cG9pbnROdW1iZXI6cix4OmkueCx5OmkueX0pLGkuZGltPTApOmkuZGltPTE7cmV0dXJuIGguc2VsZWN0aW9uPWMsZi51cGRhdGUoaCxzKSxkLmdscGxvdC5zZXREaXJ0eSgpLGN9fX0seyIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1fV0sMTA3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9bi5saW5lLGM9bi5tYXJrZXI7ZS5leHBvcnRzPXtsb246bi5sb24sbGF0Om4ubGF0LG1vZGU6bCh7fSxpLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aH0sY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6e3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LG9wYWNpdHk6Yy5vcGFjaXR5LHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsY29sb3I6Yy5jb2xvcixjb2xvcnNjYWxlOmMuY29sb3JzY2FsZSxjYXV0bzpjLmNhdXRvLGNtYXg6Yy5jbWF4LGNtaW46Yy5jbWluLGF1dG9jb2xvcnNjYWxlOmMuYXV0b2NvbG9yc2NhbGUscmV2ZXJzZXNjYWxlOmMucmV2ZXJzZXNjYWxlLHNob3dzY2FsZTpjLnNob3dzY2FsZSxjb2xvcmJhcjpzfSxmaWxsOm4uZmlsbCxmaWxsY29sb3I6aS5maWxsY29sb3IsdGV4dGZvbnQ6YS5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjphLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLGhvdmVyaW5mbzpsKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsInRleHQiLCJuYW1lIl19KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjgyMywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDI1LCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwNjJ9XSwxMDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtyZXR1cm57Z2VvanNvbjp2Lm1ha2VCbGFuaygpLGxheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fX1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBhLm9wYWNpdHkqZSoodC5kaW0/XzoxKX1mdW5jdGlvbiBuKHQscixuLGkpe3ZvaWQgMD09PWVbcl1bbl0mJihlW3JdW25dPWkpLHRbcl09ZVtyXVtuXX12YXIgaSxhPXRbMF0udHJhY2Usbz1hLm1hcmtlcjtnLmhhc0NvbG9yc2NhbGUoYSwibWFya2VyIik/aT1nLm1ha2VDb2xvclNjYWxlRnVuYyhnLmV4dHJhY3RTY2FsZShvLmNvbG9yc2NhbGUsby5jbWluLG8uY21heCkpOkFycmF5LmlzQXJyYXkoby5jb2xvcikmJihpPXAuaWRlbnRpdHkpO3ZhciBzO2IuaXNCdWJibGUoYSkmJihzPXkoYSkpO3ZhciBsO0FycmF5LmlzQXJyYXkoby5vcGFjaXR5KT9sPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsZCh0Lm1vKT8rcC5jb25zdHJhaW4odC5tbywwLDEpOjApfTphLl9oYXNEaW1tZWRQdHMmJihsPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsby5vcGFjaXR5KX0pO2Zvcih2YXIgdT1bXSxjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBoPXRbY10sbT1oLmxvbmxhdDtpZighZihtKSl7dmFyIHY9e307aWYoaSl7dmFyIHg9aC5tY2M9aShoLm1jKTtuKHYsdyx4LGMpfXMmJm4odixNLHMoaC5tcyksYyksbCYmbih2LGssbChoKSxjKSx1LnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6bX0scHJvcGVydGllczp2fSl9fXJldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6dX19ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dFswXS50cmFjZSxyPWUubWFya2VyfHx7fSxuPXIuc3ltYm9sLGk9ZS50ZXh0LGE9ImNpcmNsZSIhPT1uP3Uobik6YyxvPWIuaGFzVGV4dChlKT91KGkpOmMscz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBoPXRbbF07ZihoLmxvbmxhdCl8fHMucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpoLmxvbmxhdH0scHJvcGVydGllczp7c3ltYm9sOmEoaC5teCksdGV4dDpvKGgudHgpfX0pfXJldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6c319ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG49dC5tYXJrZXI7aWYoQXJyYXkuaXNBcnJheShuLmNvbG9yKSl7Zm9yKHZhciBpPU9iamVjdC5rZXlzKGVbd10pLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO2EucHVzaChbZVt3XVtzXSxzXSl9cj17cHJvcGVydHk6dyxzdG9wczphfX1lbHNlIHI9bi5jb2xvcjtyZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbj10Lm1hcmtlcjtpZihBcnJheS5pc0FycmF5KG4uc2l6ZSkpe2Zvcih2YXIgaT1PYmplY3Qua2V5cyhlW01dKSxhPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXTthLnB1c2goW2VbTV1bc10sK3NdKX1yPXtwcm9wZXJ0eTpNLHN0b3BzOmEuc29ydChoKX19ZWxzZSByPW4uc2l6ZS8yO3JldHVybiByfWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuPXQubWFya2VyO2lmKEFycmF5LmlzQXJyYXkobi5vcGFjaXR5KXx8dC5faGFzRGltbWVkUHRzKXtmb3IodmFyIGk9T2JqZWN0LmtleXMoZVtrXSksYT1bXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb107YS5wdXNoKFtlW2tdW3NdLCtzXSl9cj17cHJvcGVydHk6ayxzdG9wczphLnNvcnQoaCl9fWVsc2Ugcj10Lm9wYWNpdHkqbi5vcGFjaXR5O3JldHVybiByfWZ1bmN0aW9uIHUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZnVuY3Rpb24odCl7cmV0dXJuIHR9OnQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06Y31mdW5jdGlvbiBjKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gZih0KXtyZXR1cm4gdFswXT09PW19dmFyIGQ9dCgiZmFzdC1pc251bWVyaWMiKSxwPXQoIi4uLy4uL2xpYiIpLG09dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx2PXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIiksZz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx5PXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksYj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIikseD10KCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiKSxfPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSx3PSJjaXJjbGUtY29sb3IiLE09ImNpcmNsZS1yYWRpdXMiLGs9ImNpcmNsZS1vcGFjaXR5IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPSEwPT09ZS52aXNpYmxlLHU9Im5vbmUiIT09ZS5maWxsLGM9Yi5oYXNMaW5lcyhlKSxoPWIuaGFzTWFya2VycyhlKSxmPWIuaGFzVGV4dChlKSxkPWgmJiJjaXJjbGUiPT09ZS5tYXJrZXIuc3ltYm9sLG09aCYmImNpcmNsZSIhPT1lLm1hcmtlci5zeW1ib2wsZz1uKCkseT1uKCksXz1uKCksQT1uKCksVD17ZmlsbDpnLGxpbmU6eSxjaXJjbGU6XyxzeW1ib2w6QX07aWYoIXIpcmV0dXJuIFQ7dmFyIFM7aWYoKHV8fGMpJiYoUz12LmNhbGNUcmFjZVRvTGluZUNvb3Jkcyh0KSksdSYmKGcuZ2VvanNvbj12Lm1ha2VQb2x5Z29uKFMpLGcubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLHAuZXh0ZW5kRmxhdChnLnBhaW50LHsiZmlsbC1jb2xvciI6ZS5maWxsY29sb3J9KSksYyYmKHkuZ2VvanNvbj12Lm1ha2VMaW5lKFMpLHkubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLHAuZXh0ZW5kRmxhdCh5LnBhaW50LHsibGluZS13aWR0aCI6ZS5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjplLmxpbmUuY29sb3IsImxpbmUtb3BhY2l0eSI6ZS5vcGFjaXR5fSkpLGQpe3ZhciBFPXt9O0Vbd109e30sRVtNXT17fSxFW2tdPXt9LF8uZ2VvanNvbj1pKHQsRSksXy5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIscC5leHRlbmRGbGF0KF8ucGFpbnQseyJjaXJjbGUtb3BhY2l0eSI6bChlLEUpLCJjaXJjbGUtY29sb3IiOm8oZSxFKSwiY2lyY2xlLXJhZGl1cyI6cyhlLEUpfSl9aWYoKG18fGYpJiYoQS5nZW9qc29uPWEodCkscC5leHRlbmRGbGF0KEEubGF5b3V0LHt2aXNpYmlsaXR5OiJ2aXNpYmxlIiwiaWNvbi1pbWFnZSI6IntzeW1ib2x9LTE1IiwidGV4dC1maWVsZCI6Int0ZXh0fSJ9KSxtJiYocC5leHRlbmRGbGF0KEEubGF5b3V0LHsiaWNvbi1zaXplIjplLm1hcmtlci5zaXplLzEwfSkscC5leHRlbmRGbGF0KEEucGFpbnQseyJpY29uLW9wYWNpdHkiOmUub3BhY2l0eSplLm1hcmtlci5vcGFjaXR5LCJpY29uLWNvbG9yIjplLm1hcmtlci5jb2xvcn0pKSxmKSl7dmFyIEw9KGUubWFya2VyfHx7fSkuc2l6ZSxDPXgoZS50ZXh0cG9zaXRpb24sTCk7cC5leHRlbmRGbGF0KEEubGF5b3V0LHsidGV4dC1zaXplIjplLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpDLmFuY2hvciwidGV4dC1vZmZzZXQiOkMub2Zmc2V0fSkscC5leHRlbmRGbGF0KEEucGFpbnQseyJ0ZXh0LWNvbG9yIjplLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOmUub3BhY2l0eX0pfXJldHVybiBUfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYxNiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzAzLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NzE5LCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiOjgyMCwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjEwNDAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXIoImxvbiIpfHxbXSxpPXIoImxhdCIpfHxbXSxhPU1hdGgubWluKG4ubGVuZ3RoLGkubGVuZ3RoKTtyZXR1cm4gYTxuLmxlbmd0aCYmKGUubG9uPW4uc2xpY2UoMCxhKSksYTxpLmxlbmd0aCYmKGUubGF0PWkuc2xpY2UoMCxhKSksYX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxjLHIsbil9aWYoIW4odCxlLGYpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7aWYoZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLGYse25vRGFzaDohMH0pLGYoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSl7byh0LGUscixoLGYse25vTGluZTohMH0pO3ZhciBkPWUubWFya2VyO2QubGluZT17d2lkdGg6MH0sImNpcmNsZSIhPT1kLnN5bWJvbCYmKEFycmF5LmlzQXJyYXkoZC5zaXplKSYmKGQuc2l6ZT1kLnNpemVbMF0pLEFycmF5LmlzQXJyYXkoZC5jb2xvcikmJihkLmNvbG9yPWQuY29sb3JbMF0pKX1hLmhhc1RleHQoZSkmJmwodCxlLGgsZiksZigiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmdSh0LGUscixmKX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDMyLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwMzYsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDQxLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNDYsIi4vYXR0cmlidXRlcyI6MTA3NX1dLDEwNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHR9fSx7fV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCsiXHhiMCJ9dmFyIG49dC5ob3ZlcmluZm8uc3BsaXQoIisiKSxpPS0xIT09bi5pbmRleE9mKCJhbGwiKSxhPS0xIT09bi5pbmRleE9mKCJsb24iKSxvPS0xIT09bi5pbmRleE9mKCJsYXQiKSxzPWUubG9ubGF0LGw9W107aWYoaXx8YSYmbz9sLnB1c2goIigiK3Ioc1swXSkrIiwgIityKHNbMV0pKyIpIik6YT9sLnB1c2goImxvbjogIityKHNbMF0pKTpvJiZsLnB1c2goImxhdDogIityKHNbMV0pKSxpfHwtMSE9PW4uaW5kZXhPZigidGV4dCIpKXt2YXIgdTtlLmh0eD91PWUuaHR4OnQuaG92ZXJ0ZXh0P3U9dC5ob3ZlcnRleHQ6ZS50eD91PWUudHg6dC50ZXh0JiYodT10LnRleHQpLEFycmF5LmlzQXJyYXkodSl8fGwucHVzaCh1KX1yZXR1cm4gbC5qb2luKCI8YnI+Iil9dmFyIGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHQpe3ZhciBlPXQubG9ubGF0O2lmKGVbMF09PT1vKXJldHVybiAxLzA7dmFyIG49TWF0aC5hYnMoYy5jMnAoZSktYy5jMnAoW3AsZVsxXV0pKSxpPU1hdGguYWJzKGguYzJwKGUpLWguYzJwKFtlWzBdLHJdKSksYT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KG4qbitpKmkpLWEsMS0zL2EpfXZhciBsPXQuY2QsdT1sWzBdLnRyYWNlLGM9dC54YSxoPXQueWEsZj1lPj0wP01hdGguZmxvb3IoKGUrMTgwKS8zNjApOk1hdGguY2VpbCgoZS0xODApLzM2MCksZD0zNjAqZixwPWUtZDtpZihpLmdldENsb3Nlc3QobCxzLHQpLCExIT09dC5pbmRleCl7dmFyIG09bFt0LmluZGV4XSx2PW0ubG9ubGF0LGc9W3ZbMF0rZCx2WzFdXSx5PWMuYzJwKGcpLGI9aC5jMnAoZykseD1tLm1yY3x8MTtyZXR1cm4gdC54MD15LXgsdC54MT15K3gsdC55MD1iLXgsdC55MT1iK3gsdC5jb2xvcj1hKHUsbSksdC5leHRyYVRleHQ9bih1LG0pLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTAzM31dLDEwODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uY2FsYz10KCIuLi9zY2F0dGVyZ2VvL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJtYXBib3giLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvbWFwYm94Iiksbi5jYXRlZ29yaWVzPVsibWFwYm94IiwiZ2wiLCJzeW1ib2xzIiwibWFya2VyQ29sb3JzY2FsZSIsInNob3dMZWdlbmQiLCJzY2F0dGVybGlrZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9tYXBib3giOjgyMSwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTAyOCwiLi4vc2NhdHRlcmdlby9jYWxjIjoxMDYzLCIuL2F0dHJpYnV0ZXMiOjEwNzUsIi4vZGVmYXVsdHMiOjEwNzcsIi4vZXZlbnRfZGF0YSI6MTA3OCwiLi9ob3ZlciI6MTA3OSwiLi9wbG90IjoxMDgxLCIuL3NlbGVjdCI6MTA4Mn1dLDEwODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMubWFwYm94PXQsdGhpcy5tYXA9dC5tYXAsdGhpcy51aWQ9ZSx0aGlzLmlkU291cmNlRmlsbD1lKyItc291cmNlLWZpbGwiLHRoaXMuaWRTb3VyY2VMaW5lPWUrIi1zb3VyY2UtbGluZSIsdGhpcy5pZFNvdXJjZUNpcmNsZT1lKyItc291cmNlLWNpcmNsZSIsdGhpcy5pZFNvdXJjZVN5bWJvbD1lKyItc291cmNlLXN5bWJvbCIsdGhpcy5pZExheWVyRmlsbD1lKyItbGF5ZXItZmlsbCIsdGhpcy5pZExheWVyTGluZT1lKyItbGF5ZXItbGluZSIsdGhpcy5pZExheWVyQ2lyY2xlPWUrIi1sYXllci1jaXJjbGUiLHRoaXMuaWRMYXllclN5bWJvbD1lKyItbGF5ZXItc3ltYm9sIix0aGlzLm1hcGJveC5pbml0U291cmNlKHRoaXMuaWRTb3VyY2VGaWxsKSx0aGlzLm1hcGJveC5pbml0U291cmNlKHRoaXMuaWRTb3VyY2VMaW5lKSx0aGlzLm1hcGJveC5pbml0U291cmNlKHRoaXMuaWRTb3VyY2VDaXJjbGUpLHRoaXMubWFwYm94LmluaXRTb3VyY2UodGhpcy5pZFNvdXJjZVN5bWJvbCksdGhpcy5tYXAuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllckZpbGwsc291cmNlOnRoaXMuaWRTb3VyY2VGaWxsLHR5cGU6ImZpbGwifSksdGhpcy5tYXAuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllckxpbmUsc291cmNlOnRoaXMuaWRTb3VyY2VMaW5lLHR5cGU6ImxpbmUifSksdGhpcy5tYXAuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllckNpcmNsZSxzb3VyY2U6dGhpcy5pZFNvdXJjZUNpcmNsZSx0eXBlOiJjaXJjbGUifSksdGhpcy5tYXAuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllclN5bWJvbCxzb3VyY2U6dGhpcy5pZFNvdXJjZVN5bWJvbCx0eXBlOiJzeW1ib2wifSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4idmlzaWJsZSI9PT10LmxheW91dC52aXNpYmlsaXR5fXZhciBhPXQoIi4vY29udmVydCIpLG89bi5wcm90b3R5cGU7by51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXBib3gscj1hKHQpO2Uuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJGaWxsLCJzZXRMYXlvdXRQcm9wZXJ0eSIsci5maWxsLmxheW91dCksZS5zZXRPcHRpb25zKHRoaXMuaWRMYXllckxpbmUsInNldExheW91dFByb3BlcnR5IixyLmxpbmUubGF5b3V0KSxlLnNldE9wdGlvbnModGhpcy5pZExheWVyQ2lyY2xlLCJzZXRMYXlvdXRQcm9wZXJ0eSIsci5jaXJjbGUubGF5b3V0KSxlLnNldE9wdGlvbnModGhpcy5pZExheWVyU3ltYm9sLCJzZXRMYXlvdXRQcm9wZXJ0eSIsci5zeW1ib2wubGF5b3V0KSxpKHIuZmlsbCkmJihlLnNldFNvdXJjZURhdGEodGhpcy5pZFNvdXJjZUZpbGwsci5maWxsLmdlb2pzb24pLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJGaWxsLCJzZXRQYWludFByb3BlcnR5IixyLmZpbGwucGFpbnQpKSxpKHIubGluZSkmJihlLnNldFNvdXJjZURhdGEodGhpcy5pZFNvdXJjZUxpbmUsci5saW5lLmdlb2pzb24pLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJMaW5lLCJzZXRQYWludFByb3BlcnR5IixyLmxpbmUucGFpbnQpKSxpKHIuY2lyY2xlKSYmKGUuc2V0U291cmNlRGF0YSh0aGlzLmlkU291cmNlQ2lyY2xlLHIuY2lyY2xlLmdlb2pzb24pLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJDaXJjbGUsInNldFBhaW50UHJvcGVydHkiLHIuY2lyY2xlLnBhaW50KSksaShyLnN5bWJvbCkmJihlLnNldFNvdXJjZURhdGEodGhpcy5pZFNvdXJjZVN5bWJvbCxyLnN5bWJvbC5nZW9qc29uKSxlLnNldE9wdGlvbnModGhpcy5pZExheWVyU3ltYm9sLCJzZXRQYWludFByb3BlcnR5IixyLnN5bWJvbC5wYWludCkpLHRbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30sby5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXJGaWxsKSx0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllckxpbmUpLHQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyQ2lyY2xlKSx0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllclN5bWJvbCksdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZUZpbGwpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2VMaW5lKSx0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlQ2lyY2xlKSx0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlU3ltYm9sKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxpPW5ldyBuKHQsci51aWQpO3JldHVybiBpLnVwZGF0ZShlKSxpfX0seyIuL2NvbnZlcnQiOjEwNzZ9XSwxMDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzLGw9dC5jZCx1PXQueGF4aXMsYz10LnlheGlzLGg9W10sZj1sWzBdLnRyYWNlO2lmKGYuX2hhc0RpbW1lZFB0cz0hMSwhMD09PWYudmlzaWJsZSYmbi5oYXNNYXJrZXJzKGYpKXtpZighMT09PWUpZm9yKHM9MDtzPGwubGVuZ3RoO3MrKylsW3NdLmRpbT0wO2Vsc2UgZm9yKHM9MDtzPGwubGVuZ3RoO3MrKylyPWxbc10saT1yLmxvbmxhdCxhPXUuYzJwKGkpLG89Yy5jMnAoaSksZS5jb250YWlucyhbYSxvXSk/KGYuX2hhc0RpbW1lZFB0cz0hMCxoLnB1c2goe3BvaW50TnVtYmVyOnMsbG9uOmlbMF0sbGF0OmlbMV19KSxyLmRpbT0wKTpyLmRpbT0xO3JldHVybiBmLl9nbFRyYWNlLnVwZGF0ZShsKSxofX19LHsiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NX1dLDEwODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PW4ubWFya2VyLGM9bi5saW5lLGg9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxjOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sbW9kZTpsKHt9LG4ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6Yy5jb2xvcix3aWR0aDpjLndpZHRoLGRhc2g6cyxzaGFwZTpsKHt9LGMuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmMuc21vb3RoaW5nfSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGNsaXBvbmF4aXM6bi5jbGlwb25heGlzLGZpbGw6bCh7fSxuLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXX0pLGZpbGxjb2xvcjpuLmZpbGxjb2xvcixtYXJrZXI6bCh7fSx7c3ltYm9sOnUuc3ltYm9sLG9wYWNpdHk6dS5vcGFjaXR5LG1heGRpc3BsYXllZDp1Lm1heGRpc3BsYXllZCxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGxpbmU6bCh7fSx7d2lkdGg6aC53aWR0aH0sYSgibWFya2VyIi5saW5lKSksZ3JhZGllbnQ6dS5ncmFkaWVudH0sYSgibWFya2VyIikse3Nob3dzY2FsZTp1LnNob3dzY2FsZSxjb2xvcmJhcjpvfSksdGV4dGZvbnQ6bi50ZXh0Zm9udCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sCmhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwiYyIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOm4uaG92ZXJvbn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIjo2MDksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MjUsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjV9XSwxMDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxzPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbD1bImEiLCJiIiwiYyJdLHU9e2E6WyJiIiwiYyJdLGI6WyJhIiwiYyJdLGM6WyJhIiwiYiJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLGgsZixkLHAsbT10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0sdj1tLnN1bSxnPWUuc3VtfHx2O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoaD1sW3JdLCFlW2hdKXtmb3IoZD1lW3VbaF1bMF1dLHA9ZVt1W2hdWzFdXSxmPW5ldyBBcnJheShkLmxlbmd0aCksYz0wO2M8ZC5sZW5ndGg7YysrKWZbY109Zy1kW2NdLXBbY107ZVtoXT1mfXZhciB5LGIseCxfLHcsTSxrPWUuYS5sZW5ndGgsQT1uZXcgQXJyYXkoayk7Zm9yKHI9MDtyPGs7cisrKXk9ZS5hW3JdLGI9ZS5iW3JdLHg9ZS5jW3JdLG4oeSkmJm4oYikmJm4oeCk/KHk9K3ksYj0rYix4PSt4LF89di8oeStiK3gpLDEhPT1fJiYoeSo9XyxiKj1fLHgqPV8pLE09eSx3PXgtYixBW3JdPXt4OncseTpNLGE6eSxiOmIsYzp4fSk6QVtyXT17eDohMSx5OiExfTt2YXIgVCxTO2lmKGEuaGFzTWFya2VycyhlKSYmKFQ9ZS5tYXJrZXIsUz1ULnNpemUsQXJyYXkuaXNBcnJheShTKSkpe3ZhciBFPXt0eXBlOiJsaW5lYXIifTtpLnNldENvbnZlcnQoRSksUz1FLm1ha2VDYWxjZGF0YShlLm1hcmtlciwic2l6ZSIpLFMubGVuZ3RoPmsmJlMuc3BsaWNlKGssUy5sZW5ndGgtayl9cmV0dXJuIG8oZSkscyhBLGUpLEF9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDI0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTAyOSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDEwODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksaD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXZhciBwLG09ZCgiYSIpLHY9ZCgiYiIpLGc9ZCgiYyIpO2lmKG0/KHA9bS5sZW5ndGgsdj8ocD1NYXRoLm1pbihwLHYubGVuZ3RoKSxnJiYocD1NYXRoLm1pbihwLGcubGVuZ3RoKSkpOnA9Zz9NYXRoLm1pbihwLGcubGVuZ3RoKTowKTp2JiZnJiYocD1NYXRoLm1pbih2Lmxlbmd0aCxnLmxlbmd0aCkpLCFwKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bSYmcDxtLmxlbmd0aCYmKGUuYT1tLnNsaWNlKDAscCkpLHYmJnA8di5sZW5ndGgmJihlLmI9di5zbGljZSgwLHApKSxnJiZwPGcubGVuZ3RoJiYoZS5jPWcuc2xpY2UoMCxwKSksZCgic3VtIiksZCgidGV4dCIpLGQoImhvdmVydGV4dCIpLGQoIm1vZGUiLHA8aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixmLGQpLGwodCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLGQse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZ1KHQsZSxmLGQpO3ZhciB5PVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihkKCJtYXJrZXIubWF4ZGlzcGxheWVkIikseS5wdXNoKCJwb2ludHMiKSksZCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGModCxlLHIsZCksYS5oYXNMaW5lcyhlKXx8bCh0LGUsZCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8eS5wdXNoKCJmaWxscyIpLGQoImhvdmVyb24iLHkuam9pbigiKyIpfHwicG9pbnRzIiksZCgiY2xpcG9uYXhpcyIpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjEwMzAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDMyLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwMzYsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTAzOCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNDEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA0NiwiLi9hdHRyaWJ1dGVzIjoxMDgzfV0sMTA4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBvKHQsZSl7Zy5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitpLnRpY2tUZXh0KHQsZSwiaG92ZXIiKS50ZXh0KX12YXIgcz1uKHQsZSxyLGEpO2lmKHMmJiExIT09c1swXS5pbmRleCl7dmFyIGw9c1swXTtpZih2b2lkIDA9PT1sLmluZGV4KXt2YXIgdT0xLWwueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLGg9Yyp1LzIsZj1jLWg7cmV0dXJuIGwueDA9TWF0aC5tYXgoTWF0aC5taW4obC54MCxmKSxoKSxsLngxPU1hdGgubWF4KE1hdGgubWluKGwueDEsZiksaCksc312YXIgZD1sLmNkW2wuaW5kZXhdO2wuYT1kLmEsbC5iPWQuYixsLmM9ZC5jLGwueExhYmVsVmFsPXZvaWQgMCxsLnlMYWJlbFZhbD12b2lkIDA7dmFyIHA9bC50cmFjZSxtPXAuX3Rlcm5hcnksdj1wLmhvdmVyaW5mby5zcGxpdCgiKyIpLGc9W107cmV0dXJuLTEhPT12LmluZGV4T2YoImFsbCIpJiYodj1bImEiLCJiIiwiYyJdKSwtMSE9PXYuaW5kZXhPZigiYSIpJiZvKG0uYWF4aXMsZC5hKSwtMSE9PXYuaW5kZXhPZigiYiIpJiZvKG0uYmF4aXMsZC5iKSwtMSE9PXYuaW5kZXhPZigiYyIpJiZvKG0uY2F4aXMsZC5jKSxsLmV4dHJhVGV4dD1nLmpvaW4oIjxicj4iKSxzfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vc2NhdHRlci9ob3ZlciI6MTAzNH1dLDEwODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJ0ZXJuYXJ5IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL3Rlcm5hcnkiKSxuLmNhdGVnb3JpZXM9WyJ0ZXJuYXJ5Iiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL3Rlcm5hcnkiOjgzNSwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTAyOCwiLi9hdHRyaWJ1dGVzIjoxMDgzLCIuL2NhbGMiOjEwODQsIi4vZGVmYXVsdHMiOjEwODUsIi4vaG92ZXIiOjEwODYsIi4vcGxvdCI6MTA4OCwiLi9zZWxlY3QiOjEwODksIi4vc3R5bGUiOjEwOTB9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucGxvdENvbnRhaW5lcjtyLnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2Zvcih2YXIgaT17eGF4aXM6dC54YXhpcyx5YXhpczp0LnlheGlzLHBsb3Q6cixsYXllckNsaXBJZDp0Ll9oYXNDbGlwT25BeGlzRmFsc2U/dC5jbGlwSWRSZWxhdGl2ZTpudWxsfSxhPTA7YTxlLmxlbmd0aDthKyspZVthXVswXS50cmFjZS5fdGVybmFyeT10O24odC5ncmFwaERpdixpLGUpfX0seyIuLi9zY2F0dGVyL3Bsb3QiOjEwNDJ9XSwxMDg5OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzEwNjBdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuLi9zY2F0dGVyL3NlbGVjdCI6MTA0MyxkdXA6MTA2MH1dLDEwOTA6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTA2MV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4uL3NjYXR0ZXIvc3R5bGUiOjEwNDQsZHVwOjEwNjF9XSwxMDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJue3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fWZ1bmN0aW9uIGkodCl7cmV0dXJue3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHByb2plY3Q6e3g6bigieCIpLHk6bigieSIpLHo6bigieiIpfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZX0sdXNlY29sb3JtYXA6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLG1heDoxNixkZmx0OjJ9LGhpZ2hsaWdodDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0saGlnaGxpZ2h0Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmV9LGhpZ2hsaWdodHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLG1heDoxNixkZmx0OjJ9fX12YXIgYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxjYXV0bzpvLnphdXRvLGNtaW46by56bWluLGNtYXg6by56bWF4LGNvbG9yc2NhbGU6by5jb2xvcnNjYWxlLGF1dG9jb2xvcnNjYWxlOmwoe30sby5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pLHJldmVyc2VzY2FsZTpvLnJldmVyc2VzY2FsZSxzaG93c2NhbGU6by5zaG93c2NhbGUsY29sb3JiYXI6cyxjb250b3Vyczp7eDppKCJ4IikseTppKCJ5IiksejppKCJ6Iil9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxvLnphdXRvLHt9KSx6bWluOmwoe30sby56bWluLHt9KSx6bWF4Omwoe30sby56bWF4LHt9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MDcsIi4uLy4uL2xpYi9leHRlbmQiOjcxNX1dLDEwOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLnN1cmZhY2Vjb2xvcj9uKGUsZS5zdXJmYWNlY29sb3IsIiIsImMiKTpuKGUsZS56LCIiLCJjIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDh9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsbD0iY2IiK3IudWlkLHU9ci5jbWluLGM9ci5jbWF4LGg9ci5zdXJmYWNlY29sb3J8fHIuejtpZihuKHUpfHwodT1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxoKSksbihjKXx8KGM9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsaCkpLHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK2wpLnJlbW92ZSgpLCFyLnNob3dzY2FsZSlyZXR1cm4gdm9pZCBhLmF1dG9NYXJnaW4odCxsKTt2YXIgZj1lWzBdLnQuY2I9cyh0LGwpLGQ9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUoci5jb2xvcnNjYWxlLHUsYykse25vTnVtZXJpY0NoZWNrOiEwfSk7Zi5maWxsY29sb3IoZCkuZmlsbGxldmVscyh7c3RhcnQ6dSxlbmQ6YyxzaXplOihjLXUpLzI1NH0pLm9wdGlvbnMoci5jb2xvcmJhcikoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Ijo2MDUsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDEwOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5zdXJmYWNlPWUsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj1bITEsITEsITFdLHRoaXMuZGF0YVNjYWxlPTF9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0xKSx0Lm1hcChmdW5jdGlvbih0KXt2YXIgcj10WzBdLG49cCh0WzFdKSxpPW4udG9SZ2IoKTtyZXR1cm57aW5kZXg6cixyZ2I6W2kucixpLmcsaS5iLGVdfX0pfWZ1bmN0aW9uIGEodCl7dmFyIGU9dFswXS5yZ2Iscj10W3QubGVuZ3RoLTFdLnJnYjtyZXR1cm4gZVswXT09PXJbMF0mJmVbMV09PT1yWzFdJiZlWzJdPT09clsyXSYmZVszXT09PXJbM119ZnVuY3Rpb24gbyh0KXt2YXIgZT10LnNoYXBlLHI9W2VbMF0rMixlWzFdKzJdLG49YyhuZXcgRmxvYXQzMkFycmF5KHJbMF0qclsxXSkscik7cmV0dXJuIGQuYXNzaWduKG4ubG8oMSwxKS5oaShlWzBdLGVbMV0pLHQpLGQuYXNzaWduKG4ubG8oMSkuaGkoZVswXSwxKSx0LmhpKGVbMF0sMSkpLGQuYXNzaWduKG4ubG8oMSxyWzFdLTEpLmhpKGVbMF0sMSksdC5sbygwLGVbMV0tMSkuaGkoZVswXSwxKSksZC5hc3NpZ24obi5sbygwLDEpLmhpKDEsZVsxXSksdC5oaSgxKSksZC5hc3NpZ24obi5sbyhyWzBdLTEsMSkuaGkoMSxlWzFdKSx0LmxvKGVbMF0tMSkpLG4uc2V0KDAsMCx0LmdldCgwLDApKSxuLnNldCgwLHJbMV0tMSx0LmdldCgwLGVbMV0tMSkpLG4uc2V0KHJbMF0tMSwwLHQuZ2V0KGVbMF0tMSwwKSksbi5zZXQoclswXS0xLHJbMV0tMSx0LmdldChlWzBdLTEsZVsxXS0xKSksbn1mdW5jdGlvbiBzKHQpe3ZhciBlPU1hdGgubWF4KHRbMF0uc2hhcGVbMF0sdFswXS5zaGFwZVsxXSk7aWYoZTx2KXtmb3IodmFyIHI9di9lLG49WzB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzBdKnIrMSksMHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMV0qcisxKV0saT1uWzBdKm5bMV0sYT0wO2E8dC5sZW5ndGg7KythKXt2YXIgcz1vKHRbYV0pLGw9YyhuZXcgRmxvYXQzMkFycmF5KGkpLG4pO2gobCxzLFtyLDAsMCwwLHIsMCwwLDAsMV0pLHRbYV09bH1yZXR1cm4gcn1yZXR1cm4gMX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT11KHtnbDpyfSksYT1uZXcgbih0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfXZhciB1PXQoImdsLXN1cmZhY2UzZCIpLGM9dCgibmRhcnJheSIpLGg9dCgibmRhcnJheS1ob21vZ3JhcGh5IiksZj10KCJuZGFycmF5LWZpbGwiKSxkPXQoIm5kYXJyYXktb3BzIikscD10KCJ0aW55Y29sb3IyIiksbT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksdj0xMjgsZz1uLnByb3RvdHlwZTtnLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLnN1cmZhY2Upe3ZhciBlPXQuaW5kZXg9W01hdGgubWluKDB8TWF0aC5yb3VuZCh0LmRhdGEuaW5kZXhbMF0vdGhpcy5kYXRhU2NhbGUtMSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLE1hdGgubWluKDB8TWF0aC5yb3VuZCh0LmRhdGEuaW5kZXhbMV0vdGhpcy5kYXRhU2NhbGUtMSksdGhpcy5kYXRhLnoubGVuZ3RoLTEpXSxyPVswLDAsMF07QXJyYXkuaXNBcnJheSh0aGlzLmRhdGEueFswXSk/clswXT10aGlzLmRhdGEueFtlWzFdXVtlWzBdXTpyWzBdPXRoaXMuZGF0YS54W2VbMF1dLEFycmF5LmlzQXJyYXkodGhpcy5kYXRhLnlbMF0pP3JbMV09dGhpcy5kYXRhLnlbZVsxXV1bZVswXV06clsxXT10aGlzLmRhdGEueVtlWzFdXSxyWzJdPXRoaXMuZGF0YS56W2VbMV1dW2VbMF1dLHQudHJhY2VDb29yZGluYXRlPXI7dmFyIG49dGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQ7dC5kYXRhQ29vcmRpbmF0ZT1bbi54YXhpcy5kMmwoclswXSwwLHRoaXMuZGF0YS54Y2FsZW5kYXIpKnRoaXMuc2NlbmUuZGF0YVNjYWxlWzBdLG4ueWF4aXMuZDJsKHJbMV0sMCx0aGlzLmRhdGEueWNhbGVuZGFyKSp0aGlzLnNjZW5lLmRhdGFTY2FsZVsxXSxuLnpheGlzLmQybChyWzJdLDAsdGhpcy5kYXRhLnpjYWxlbmRhcikqdGhpcy5zY2VuZS5kYXRhU2NhbGVbMl1dO3ZhciBpPXRoaXMuZGF0YS50ZXh0O3JldHVybiBpJiZpW2VbMV1dJiZ2b2lkIDAhPT1pW2VbMV1dW2VbMF1dP3QudGV4dExhYmVsPWlbZVsxXV1bZVswXV06dC50ZXh0TGFiZWw9IiIsdC5kYXRhLmRhdGFDb29yZGluYXRlPXQuZGF0YUNvb3JkaW5hdGUuc2xpY2UoKSx0aGlzLnN1cmZhY2UuaGlnaGxpZ2h0KHQuZGF0YSksdGhpcy5zY2VuZS5nbHBsb3Quc3Bpa2VzLnBvc2l0aW9uPXQuZGF0YUNvb3JkaW5hdGUsITB9fSxnLnNldENvbnRvdXJMZXZlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1tdLFtdLFtdXSxlPSExLHI9MDtyPDM7KytyKXRoaXMuc2hvd0NvbnRvdXJbcl0mJihlPSEwLHRbcl09dGhpcy5zY2VuZS5jb250b3VyTGV2ZWxzW3JdKTtlJiZ0aGlzLnN1cmZhY2UudXBkYXRlKHtsZXZlbHM6dH0pfSxnLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2NlbmUsbj1yLmZ1bGxTY2VuZUxheW91dCxvPXRoaXMuc3VyZmFjZSxsPXQub3BhY2l0eSx1PWkodC5jb2xvcnNjYWxlLGwpLGg9dC56LGQ9dC54LHA9dC55LHY9bi54YXhpcyxnPW4ueWF4aXMseT1uLnpheGlzLGI9ci5kYXRhU2NhbGUseD1oWzBdLmxlbmd0aCxfPWgubGVuZ3RoLHc9W2MobmV3IEZsb2F0MzJBcnJheSh4Kl8pLFt4LF9dKSxjKG5ldyBGbG9hdDMyQXJyYXkoeCpfKSxbeCxfXSksYyhuZXcgRmxvYXQzMkFycmF5KHgqXyksW3gsX10pXSxNPXdbMF0saz13WzFdLEE9ci5jb250b3VyTGV2ZWxzO3RoaXMuZGF0YT10O3ZhciBUPXQueGNhbGVuZGFyLFM9dC55Y2FsZW5kYXIsRT10LnpjYWxlbmRhcjtmKHdbMl0sZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kMmwoaFtlXVt0XSwwLEUpKmJbMl19KSxBcnJheS5pc0FycmF5KGRbMF0pP2YoTSxmdW5jdGlvbih0LGUpe3JldHVybiB2LmQybChkW2VdW3RdLDAsVCkqYlswXX0pOmYoTSxmdW5jdGlvbih0KXtyZXR1cm4gdi5kMmwoZFt0XSwwLFQpKmJbMF19KSxBcnJheS5pc0FycmF5KHBbMF0pP2YoayxmdW5jdGlvbih0LGUpe3JldHVybiBnLmQybChwW2VdW3RdLDAsUykqYlsxXX0pOmYoayxmdW5jdGlvbih0LGUpe3JldHVybiBnLmQybChwW2VdLDAsUykqYlsxXX0pO3ZhciBMPXtjb2xvcm1hcDp1LGxldmVsczpbW10sW10sW11dLHNob3dDb250b3VyOlshMCwhMCwhMF0sc2hvd1N1cmZhY2U6IXQuaGlkZXN1cmZhY2UsY29udG91clByb2plY3Q6W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSxjb250b3VyV2lkdGg6WzEsMSwxXSxjb250b3VyQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxjb250b3VyVGludDpbMSwxLDFdLGR5bmFtaWNDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGR5bmFtaWNXaWR0aDpbMSwxLDFdLGR5bmFtaWNUaW50OlsxLDEsMV0sb3BhY2l0eTp0Lm9wYWNpdHl9O2lmKEwuaW50ZW5zaXR5Qm91bmRzPVt0LmNtaW4sdC5jbWF4XSx0LnN1cmZhY2Vjb2xvcil7dmFyIEM9YyhuZXcgRmxvYXQzMkFycmF5KHgqXyksW3gsX10pO2YoQyxmdW5jdGlvbihlLHIpe3JldHVybiB0LnN1cmZhY2Vjb2xvcltyXVtlXX0pLHcucHVzaChDKX1lbHNlIEwuaW50ZW5zaXR5Qm91bmRzWzBdKj1iWzJdLEwuaW50ZW5zaXR5Qm91bmRzWzFdKj1iWzJdO3RoaXMuZGF0YVNjYWxlPXModyksdC5zdXJmYWNlY29sb3ImJihMLmludGVuc2l0eT13LnBvcCgpKTt2YXIgej1bITAsITAsITBdLEk9WyJ4IiwieSIsInoiXTtmb3IoZT0wO2U8MzsrK2Upe3ZhciBEPXQuY29udG91cnNbSVtlXV07eltlXT1ELmhpZ2hsaWdodCxMLnNob3dDb250b3VyW2VdPUQuc2hvd3x8RC5oaWdobGlnaHQsTC5zaG93Q29udG91cltlXSYmKEwuY29udG91clByb2plY3RbZV09W0QucHJvamVjdC54LEQucHJvamVjdC55LEQucHJvamVjdC56XSxELnNob3c/KHRoaXMuc2hvd0NvbnRvdXJbZV09ITAsTC5sZXZlbHNbZV09QVtlXSxvLmhpZ2hsaWdodENvbG9yW2VdPUwuY29udG91ckNvbG9yW2VdPW0oRC5jb2xvciksRC51c2Vjb2xvcm1hcD9vLmhpZ2hsaWdodFRpbnRbZV09TC5jb250b3VyVGludFtlXT0wOm8uaGlnaGxpZ2h0VGludFtlXT1MLmNvbnRvdXJUaW50W2VdPTEsTC5jb250b3VyV2lkdGhbZV09RC53aWR0aCk6dGhpcy5zaG93Q29udG91cltlXT0hMSxELmhpZ2hsaWdodCYmKEwuZHluYW1pY0NvbG9yW2VdPW0oRC5oaWdobGlnaHRjb2xvciksTC5keW5hbWljV2lkdGhbZV09RC5oaWdobGlnaHR3aWR0aCkpfWEodSkmJihMLnZlcnRleENvbG9yPSEwKSxMLmNvb3Jkcz13LG8udXBkYXRlKEwpLG8udmlzaWJsZT10LnZpc2libGUsby5lbmFibGVEeW5hbWljPXosby5zbmFwVG9EYXRhPSEwLCJsaWdodGluZyJpbiB0JiYoby5hbWJpZW50TGlnaHQ9dC5saWdodGluZy5hbWJpZW50LG8uZGlmZnVzZUxpZ2h0PXQubGlnaHRpbmcuZGlmZnVzZSxvLnNwZWN1bGFyTGlnaHQ9dC5saWdodGluZy5zcGVjdWxhcixvLnJvdWdobmVzcz10LmxpZ2h0aW5nLnJvdWdobmVzcyxvLmZyZXNuZWw9dC5saWdodGluZy5mcmVzbmVsKSwibGlnaHRwb3NpdGlvbiJpbiB0JiYoby5saWdodFBvc2l0aW9uPVt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0pLGwmJmw8MSYmKG8uc3VwcG9ydHNUcmFuc3BhcmVuY3k9ITApfSxnLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zdXJmYWNlKSx0aGlzLnN1cmZhY2UuZGlzcG9zZSgpfSxlLmV4cG9ydHM9bH0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDIsImdsLXN1cmZhY2UzZCI6MjY0LG5kYXJyYXk6NDY1LCJuZGFycmF5LWZpbGwiOjQ1NSwibmRhcnJheS1ob21vZ3JhcGh5Ijo0NTcsIm5kYXJyYXktb3BzIjo0NTksdGlueWNvbG9yMjo1MzJ9XSwxMDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2UgaW4gdCYmIShyIGluIHQpJiYodFtyXT10W2VdKX12YXIgaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxzLHIsbil9dmFyIGMsaCxmPXUoInoiKTtpZighZilyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3ZhciBkPWZbMF0ubGVuZ3RoLHA9Zi5sZW5ndGg7aWYodSgieCIpLHUoInkiKSxpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLGwpLCFBcnJheS5pc0FycmF5KGUueCkpZm9yKGUueD1bXSxjPTA7YzxkOysrYyllLnhbY109YztpZih1KCJ0ZXh0IiksIUFycmF5LmlzQXJyYXkoZS55KSlmb3IoZS55PVtdLGM9MDtjPHA7KytjKWUueVtjXT1jO1sibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJoaWRlc3VyZmFjZSIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3UodCl9KTt2YXIgbT11KCJzdXJmYWNlY29sb3IiKTt1KCJjb2xvcnNjYWxlIik7dmFyIHY9WyJ4IiwieSIsInoiXTtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBnPSJjb250b3Vycy4iK3ZbY10seT11KGcrIi5zaG93IiksYj11KGcrIi5oaWdobGlnaHQiKTtpZih5fHxiKWZvcihoPTA7aDwzOysraCl1KGcrIi5wcm9qZWN0LiIrdltoXSk7eSYmKHUoZysiLmNvbG9yIiksdShnKyIud2lkdGgiKSx1KGcrIi51c2Vjb2xvcm1hcCIpKSxiJiYodShnKyIuaGlnaGxpZ2h0Y29sb3IiKSx1KGcrIi5oaWdobGlnaHR3aWR0aCIpKX1tfHwobih0LCJ6bWluIiwiY21pbiIpLG4odCwiem1heCIsImNtYXgiKSxuKHQsInphdXRvIiwiY2F1dG8iKSksbyh0LGUsbCx1LHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MTEsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2F0dHJpYnV0ZXMiOjEwOTF9XSwxMDk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic3VyZmFjZSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDNkIiksbi5jYXRlZ29yaWVzPVsiZ2wzZCIsIjJkTWFwIiwibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjgwNywiLi9hdHRyaWJ1dGVzIjoxMDkxLCIuL2NhbGMiOjEwOTIsIi4vY29sb3JiYXIiOjEwOTMsIi4vY29udmVydCI6MTA5NCwiLi9kZWZhdWx0cyI6MTA5NX1dLDEwOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihhKX12YXIgaSxhPXQub3BlcmF0aW9uLG89dC52YWx1ZSxjPUFycmF5LmlzQXJyYXkobyksaD1mdW5jdGlvbihyKXtyZXR1cm4gZShyLDAsdC52YWx1ZWNhbGVuZGFyKX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gZSh0LDAscil9O3N3aXRjaChuKHMpP2k9aChjP29bMF06byk6bihsKT9pPWM/W2gob1swXSksaChvWzFdKV06W2gobyksaChvKV06bih1KSYmKGk9Yz9vLm1hcChoKTpbaChvKV0pLGEpe2Nhc2UiPSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPT09aX07Y2FzZSIhPSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpIT09aX07Y2FzZSI8IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk8aX07Y2FzZSI8PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPD1pfTtjYXNlIj4iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KT5pfTtjYXNlIj49IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk+PWl9O2Nhc2UiW10iOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1pWzBdJiZlPD1pWzFdfTtjYXNlIigpIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZT5pWzBdJiZlPGlbMV19O2Nhc2UiWykiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1pWzBdJiZlPGlbMV19O2Nhc2UiKF0iOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPmlbMF0mJmU8PWlbMV19O2Nhc2UiXVsiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPD1pWzBdfHxlPj1pWzFdfTtjYXNlIikoIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTxpWzBdfHxlPmlbMV19O2Nhc2UiXSgiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPD1pWzBdfHxlPmlbMV19O2Nhc2UiKVsiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPGlbMF18fGU+PWlbMV19O2Nhc2Uie30iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMSE9PWkuaW5kZXhPZihmKHQpKX07Y2FzZSJ9eyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi0xPT09aS5pbmRleE9mKGYodCkpfX19dmFyIGk9dCgiLi4vbGliIiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPVsiPSIsIiE9IiwiPCIsIj49IiwiPiIsIjw9Il0sbD1bIltdIiwiKCkiLCJbKSIsIihdIiwiXVsiLCIpKCIsIl0oIiwiKVsiXSx1PVsie30iLCJ9eyJdO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImZpbHRlciIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4In0sb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KHMpLmNvbmNhdChsKS5jb25jYXQodSksZGZsdDoiPSJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MH0scHJlc2VydmVnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsYSl7cmV0dXJuIGkuY29lcmNlKHQsbixyLmF0dHJpYnV0ZXMsZSxhKX12YXIgbj17fTtpZihlKCJlbmFibGVkIikpe2UoInByZXNlcnZlZ2FwcyIpLGUoIm9wZXJhdGlvbiIpLGUoInZhbHVlIiksZSgidGFyZ2V0Iik7dmFyIG89YS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7byh0LG4sInZhbHVlY2FsZW5kYXIiLG51bGwpLG8odCxuLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYSh0LHIpe2Zvcih2YXIgbj0wO248aC5sZW5ndGg7bisrKXt0KGkubmVzdGVkUHJvcGVydHkoZSxoW25dKSxyKX19aWYoci5lbmFibGVkKXt2YXIgcz1pLmdldFRhcmdldEFycmF5KGUscik7aWYocyl7dmFyIGw9ci50YXJnZXQsdT1zLmxlbmd0aCxjPXIudGFyZ2V0Y2FsZW5kYXIsaD1lLl9hcnJheUF0dHJzO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7dmFyIGY9aS5uZXN0ZWRQcm9wZXJ0eShlLGwrImNhbGVuZGFyIikuZ2V0KCk7ZiYmKGM9Zil9dmFyIGQscCxtPW8uZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxsLHMpLHY9bihyLG0sYyksZz17fTtyLnByZXNlcnZlZ2Fwcz8oZD1mdW5jdGlvbih0KXtnW3QuYXN0cl09aS5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheSh1KSl9LHA9ZnVuY3Rpb24odCxlKXt2YXIgcj1nW3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KGQ9ZnVuY3Rpb24odCl7Z1t0LmFzdHJdPWkuZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LHA9ZnVuY3Rpb24odCxlKXt2YXIgcj1nW3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksYShkKTtmb3IodmFyIHk9MDt5PHU7eSsrKXt2KHNbeV0pJiZhKHAseSl9fX19fSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9yZWdpc3RyeSI6ODQyfV0sMTA5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChbXSl9ZnVuY3Rpb24gaSh0LGUscixuKXtvLm5lc3RlZFByb3BlcnR5KHQsbikuc2V0KG8ubmVzdGVkUHJvcGVydHkodCxuKS5nZXQoKS5jb25jYXQoW28ubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQoKVtyXV0pKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHIsYT1lLnRyYW5zZm9ybSx1PXQudHJhbnNmb3Jtc1tlLnRyYW5zZm9ybUluZGV4XS5ncm91cHM7aWYoIUFycmF5LmlzQXJyYXkodSl8fDA9PT11Lmxlbmd0aClyZXR1cm4gdDt2YXIgYz1vLmZpbHRlclVuaXF1ZSh1KSxoPW5ldyBBcnJheShjLmxlbmd0aCksZj11Lmxlbmd0aCxkPXMuZmluZEFycmF5QXR0cmlidXRlcyh0KSxwPWEuc3R5bGVzfHxbXSxtPXt9O2ZvcihyPTA7cjxwLmxlbmd0aDtyKyspbVtwW3JdLnRhcmdldF09cFtyXS52YWx1ZTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXt2YXIgdj1jW3JdLGc9aFtyXT1vLmV4dGVuZERlZXBOb0FycmF5cyh7fSx0KTtkLmZvckVhY2gobi5iaW5kKG51bGwsZykpO2Zvcih2YXIgeT0wO3k8Zjt5KyspdVt5XT09PXYmJmQuZm9yRWFjaChpLmJpbmQoMCxnLHQseSkpO2cubmFtZT12LGwuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhnKSxnPW8uZXh0ZW5kRGVlcE5vQXJyYXlzKGcsbVt2XXx8e30pfXJldHVybiBofXZhciBvPXQoIi4uL2xpYiIpLHM9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxsPXQoIi4uL3Bsb3RzL3Bsb3RzIik7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZ3JvdXBieSIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxncm91cHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHN0eWxlczp7X2lzTGlua2VkVG9BcnJheToic3R5bGUiLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX19fSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxpKXtyZXR1cm4gby5jb2VyY2UodCxuLHIuYXR0cmlidXRlcyxlLGkpfXZhciBuPXt9O2lmKCFlKCJlbmFibGVkIikpcmV0dXJuIG47ZSgiZ3JvdXBzIik7dmFyIGk9dC5zdHlsZXMsYT1uLnN0eWxlcz1bXTtpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWFbc109e30sby5jb2VyY2UoaVtzXSxhW3NdLHIuYXR0cmlidXRlcy5zdHlsZXMsInRhcmdldCIpLG8uY29lcmNlKGlbc10sYVtzXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ2YWx1ZSIpO3JldHVybiBufSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspcj1yLmNvbmNhdChhKHRbbl0sZSkpO3JldHVybiByfX0seyIuLi9saWIiOjcyNCwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjc1MywiLi4vcGxvdHMvcGxvdHMiOjgyN31dLDEwOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPWUubGVuZ3RoLGE9bmV3IEFycmF5KG4pLG89ZS5zbGljZSgpLnNvcnQoaSh0LHIpKSxzPTA7czxuO3MrKylmb3IodmFyIGw9ZVtzXSx1PTA7dTxuO3UrKyl7dmFyIGM9b1t1XTtpZihsPT09Yyl7YVt1XT1zLG9bdV09bnVsbDticmVha319cmV0dXJuIGF9ZnVuY3Rpb24gaSh0LGUpe3N3aXRjaCh0Lm9yZGVyKXtjYXNlImFzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCktZShyKX07Y2FzZSJkZXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZShyKS1lKHQpfX19dmFyIGE9dCgiLi4vbGliIiksbz10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9InNvcnQiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIn19LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLGkpe3JldHVybiBhLmNvZXJjZSh0LG4sci5hdHRyaWJ1dGVzLGUsaSl9dmFyIG49e307cmV0dXJuIGUoImVuYWJsZWQiKSYmKGUoInRhcmdldCIpLGUoIm9yZGVyIikpLG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1hLmdldFRhcmdldEFycmF5KGUscik7aWYoaSlmb3IodmFyIHM9ci50YXJnZXQsbD1pLmxlbmd0aCx1PWUuX2FycmF5QXR0cnMsYz1vLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxpKSxoPW4ocixpLGMpLGY9MDtmPHUubGVuZ3RoO2YrKyl7Zm9yKHZhciBkPWEubmVzdGVkUHJvcGVydHkoZSx1W2ZdKSxwPWQuZ2V0KCksbT1uZXcgQXJyYXkobCksdj0wO3Y8bDt2KyspbVt2XT1wW2hbdl1dO2Quc2V0KG0pfX19fSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0fV19LHt9LFsxOV0pKDE5KX0pOw=="></script> </head> <body style="background-color:white;"> <div id="htmlwidget_container"> <div id="1b746154189d" style="width:100%;height:400px;" class="plotly html-widget"></div> </div> <script type="application/json" data-for="1b746154189d">{"x":{"visdat":{"1b741c0854d7":["function () ","plotlyVisDat"]},"cur_data":"1b741c0854d7","attrs":{"1b741c0854d7":{"alpha":1,"sizes":[10,100],"z":{},"type":"surface","color":[[7.63450000000005,5.21899999999997,3.93799999999982,3.3515000000001,3.00000000000011,2.47899999999981,2.40649999999994,2.13200000000029,2.32249999999999,3.30150000000003,2.38400000000001],[15.1119999999999,10.0835,7.66850000000011,6.3995000000001,5.39399999999978,4.65499999999963,4.27749999999969,4.08800000000042,4.28250000000025,4.92300000000023,5.3275000000001],[22.0595000000002,15.3714999999999,11.4599999999999,9.34349999999995,7.92649999999992,7.46500000000015,6.23350000000016,6.09749999999985,7.80000000000018,6.12000000000012,6.92649999999981],[29.0104999999999,20.715,15.141,12.3925,10.563,9.22950000000014,10.0559999999996,7.85400000000004,9.68449999999962,10.2999999999997,8.8755000000001],[36.4515,25.0095,18.9469999999999,15.5375,13.0699999999996,11.4509999999999,10.2714999999999,10.2544999999998,11.9375,13.4865,15.4920000000002],[43.6855,30.3969999999999,22.5509999999999,18.4515,15.7125,13.7914999999999,12.1605,11.922,13.9785000000002,12.9779999999996,19.3680000000002],[50.7214999999999,34.8140000000001,26.0554999999999,21.401,18.1804999999998,15.9185,14.047,14.2415000000001,14.8490000000004,15.9349999999999,20.2144999999998],[57.9074999999999,40.0820000000001,29.9890000000001,24.5930000000003,20.6254999999999,18.1539999999999,15.8959999999998,15.9830000000004,16.1915000000004,20.5189999999998,23.0334999999998],[65.1385000000002,44.928,33.601,27.686,23.3004999999997,22.9699999999999,17.978,18.8090000000002,19.5759999999998,24.2304999999999,26.3055000000002],[72.8245000000001,49.3389999999999,37.3625,30.6750000000002,25.8674999999997,22.7145000000003,20.174,18.7420000000002,21.7310000000002,23.7144999999996,27.6675000000002]],"colorscale":[["0","rgb(255,112,183)"],["1","rgb(128,0,64)"]]},"1b741c0854d7.1":{"alpha":1,"sizes":[10,100],"z":{},"type":"surface","color":[[4.7640000000001,3.50450000000006,2.68399999999997,1.96250000000032,2.5559999999997,2.20299999999975,3.08000000000004,2.56700000000001,2.8715000000002,2.96000000000049,2.57249999999999],[9.48699999999994,6.839,5.34700000000009,4.78599999999983,4.84300000000019,4.38449999999989,5.65800000000036,5.22500000000014,4.82599999999979,5.35599999999977,4.673],[17.0535,9.89700000000005,7.28849999999989,8.50350000000003,8.0949999999998,7.94899999999984,9.42449999999985,8.37700000000018,8.34950000000003,7.97699999999986,5.82499999999982],[20.6445000000001,14.7029999999999,9.47050000000002,10.228,9.33100000000013,10.8859999999997,12.1065,9.41949999999997,10.1510000000001,9.86599999999976,8.98000000000002],[23.5574999999998,17.085,12.5954999999999,12.2169999999998,12.0320000000004,14.0300000000002,13.4430000000004,14.4234999999999,13.1405000000002,13.4075,11.4469999999999],[32.4455,20.067,13.6119999999999,14.3624999999998,13.2185000000003,14.0414999999998,15.369,15.5475000000001,15.5804999999998,15.7030000000002,15.126],[38.5869999999999,23.4320000000001,16.8415,19.0464999999998,18.6259999999997,21.2490000000001,21.2399999999999,18.7505000000001,19.4830000000004,17.3265000000004,17.6859999999997],[41.2830000000001,26.122,18.4565000000001,22.9315000000001,21.0709999999998,23.9125000000003,23.9765,20.7905000000001,22.3074999999999,21.5975000000001,19.5179999999998],[48.198,29.1835000000001,20.8739999999998,26.0270000000003,21.4944999999997,23.6719999999999,24.4755000000002,20.4035000000001,22.5184999999999,23.6945000000001,22.9085],[50.741,33.4600000000002,22.9504999999998,26.477,26.1740000000001,29.7209999999997,28.5250000000001,28.0170000000003,26.2305000000001,24.5684999999996,24.8975]]}},"layout":{"margin":{"b":40,"l":60,"t":25,"r":10},"title":"fastSave Runtime","scene":{"xaxis":{"title":"Cores"},"yaxis":{"title":"Data (Gb)"},"zaxis":{"title":"Time (s)"}},"xaxis":{"domain":[0,1]},"yaxis":{"domain":[0,1]},"hovermode":"closest","showlegend":false,"legend":{"y":0.333333333333333,"yanchor":"top"}},"source":"A","config":{"modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"data":[{"colorbar":{"title":"","ticklen":2,"len":0.333333333333333,"y":1,"lenmode":"fraction","yanchor":"top"},"colorscale":[["0","1"],["rgb(255,112,183)","rgb(128,0,64)"]],"showscale":true,"z":[[7.63450000000005,5.21899999999997,3.93799999999982,3.3515000000001,3.00000000000011,2.47899999999981,2.40649999999994,2.13200000000029,2.32249999999999,3.30150000000003,2.38400000000001],[15.1119999999999,10.0835,7.66850000000011,6.3995000000001,5.39399999999978,4.65499999999963,4.27749999999969,4.08800000000042,4.28250000000025,4.92300000000023,5.3275000000001],[22.0595000000002,15.3714999999999,11.4599999999999,9.34349999999995,7.92649999999992,7.46500000000015,6.23350000000016,6.09749999999985,7.80000000000018,6.12000000000012,6.92649999999981],[29.0104999999999,20.715,15.141,12.3925,10.563,9.22950000000014,10.0559999999996,7.85400000000004,9.68449999999962,10.2999999999997,8.8755000000001],[36.4515,25.0095,18.9469999999999,15.5375,13.0699999999996,11.4509999999999,10.2714999999999,10.2544999999998,11.9375,13.4865,15.4920000000002],[43.6855,30.3969999999999,22.5509999999999,18.4515,15.7125,13.7914999999999,12.1605,11.922,13.9785000000002,12.9779999999996,19.3680000000002],[50.7214999999999,34.8140000000001,26.0554999999999,21.401,18.1804999999998,15.9185,14.047,14.2415000000001,14.8490000000004,15.9349999999999,20.2144999999998],[57.9074999999999,40.0820000000001,29.9890000000001,24.5930000000003,20.6254999999999,18.1539999999999,15.8959999999998,15.9830000000004,16.1915000000004,20.5189999999998,23.0334999999998],[65.1385000000002,44.928,33.601,27.686,23.3004999999997,22.9699999999999,17.978,18.8090000000002,19.5759999999998,24.2304999999999,26.3055000000002],[72.8245000000001,49.3389999999999,37.3625,30.6750000000002,25.8674999999997,22.7145000000003,20.174,18.7420000000002,21.7310000000002,23.7144999999996,27.6675000000002]],"type":"surface","frame":null},{"colorbar":{"title":"","ticklen":2,"len":0.333333333333333,"y":0.666666666666667,"lenmode":"fraction","yanchor":"top"},"colorscale":[["0","rgba(68,1,84,1)"],["0.00880496599022991","rgba(69,5,87,1)"],["0.0284073269171017","rgba(70,13,93,1)"],["0.0404994919703033","rgba(70,18,97,1)"],["0.0533290056729952","rgba(71,23,101,1)"],["0.0791459103609803","rgba(72,31,109,1)"],["0.0904239931133732","rgba(72,34,113,1)"],["0.105871270920941","rgba(72,39,118,1)"],["0.117016172278506","rgba(72,42,121,1)"],["0.140933257599274","rgba(70,50,125,1)"],["0.158018401964381","rgba(69,55,127,1)"],["0.170487179306252","rgba(68,59,129,1)"],["0.187582907623264","rgba(66,64,132,1)"],["0.196827107617618","rgba(65,67,133,1)"],["0.224979537692975","rgba(62,75,137,1)"],["0.239440743981255","rgba(61,79,138,1)"],["0.260238209477574","rgba(59,84,139,1)"],["0.272437978041826","rgba(58,88,139,1)"],["0.293535322175495","rgba(55,93,140,1)"],["0.306482141345146","rgba(54,97,141,1)"],["0.324447517710476","rgba(51,102,142,1)"],["0.356447214303857","rgba(48,109,142,1)"],["0.404208179278032","rgba(44,121,142,1)"],["0.552769820213935","rgba(31,157,137,1)"],["1","rgba(253,231,37,1)"]],"showscale":true,"z":[[4.7640000000001,3.50450000000006,2.68399999999997,1.96250000000032,2.5559999999997,2.20299999999975,3.08000000000004,2.56700000000001,2.8715000000002,2.96000000000049,2.57249999999999],[9.48699999999994,6.839,5.34700000000009,4.78599999999983,4.84300000000019,4.38449999999989,5.65800000000036,5.22500000000014,4.82599999999979,5.35599999999977,4.673],[17.0535,9.89700000000005,7.28849999999989,8.50350000000003,8.0949999999998,7.94899999999984,9.42449999999985,8.37700000000018,8.34950000000003,7.97699999999986,5.82499999999982],[20.6445000000001,14.7029999999999,9.47050000000002,10.228,9.33100000000013,10.8859999999997,12.1065,9.41949999999997,10.1510000000001,9.86599999999976,8.98000000000002],[23.5574999999998,17.085,12.5954999999999,12.2169999999998,12.0320000000004,14.0300000000002,13.4430000000004,14.4234999999999,13.1405000000002,13.4075,11.4469999999999],[32.4455,20.067,13.6119999999999,14.3624999999998,13.2185000000003,14.0414999999998,15.369,15.5475000000001,15.5804999999998,15.7030000000002,15.126],[38.5869999999999,23.4320000000001,16.8415,19.0464999999998,18.6259999999997,21.2490000000001,21.2399999999999,18.7505000000001,19.4830000000004,17.3265000000004,17.6859999999997],[41.2830000000001,26.122,18.4565000000001,22.9315000000001,21.0709999999998,23.9125000000003,23.9765,20.7905000000001,22.3074999999999,21.5975000000001,19.5179999999998],[48.198,29.1835000000001,20.8739999999998,26.0270000000003,21.4944999999997,23.6719999999999,24.4755000000002,20.4035000000001,22.5184999999999,23.6945000000001,22.9085],[50.741,33.4600000000002,22.9504999999998,26.477,26.1740000000001,29.7209999999997,28.5250000000001,28.0170000000003,26.2305000000001,24.5684999999996,24.8975]],"type":"surface","frame":null}],"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1}},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":{"render":[{"code":"function(el, x) { var ctConfig = crosstalk.var('plotlyCrosstalkOpts').set({\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1}}); }","data":null}]}}</script> <script type="application/htmlwidget-sizing" data-for="1b746154189d">{"viewer":{"width":"100%","height":400,"padding":15,"fill":true},"browser":{"width":"100%","height":400,"padding":40,"fill":true}}</script> </body> </html>