-
Notifications
You must be signed in to change notification settings - Fork 1
/
mind_map.html
20 lines (19 loc) · 431 KB
/
mind_map.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!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,IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbiYmKG4ub3duZXJEb2N1bWVudHx8bi5kb2N1bWVudHx8bikuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIHQobil7cmV0dXJuIG4mJihuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8bi5kb2N1bWVudCYmbnx8bi5kZWZhdWx0Vmlldyl9ZnVuY3Rpb24gZShuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOk5hTn1mdW5jdGlvbiByKG4pe3JldHVybiBudWxsPT09bj9OYU46K259ZnVuY3Rpb24gaShuKXtyZXR1cm4haXNOYU4obil9ZnVuY3Rpb24gdShuKXtyZXR1cm57bGVmdDpmdW5jdGlvbih0LGUscixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPXQubGVuZ3RoKTtpPnI7KXt2YXIgdT1yK2k+Pj4xO24odFt1XSxlKTwwP3I9dSsxOmk9dX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT10Lmxlbmd0aCk7aT5yOyl7dmFyIHU9citpPj4+MTtuKHRbdV0sZSk+MD9pPXU6cj11KzF9cmV0dXJuIHJ9fX1mdW5jdGlvbiBvKG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiBhKG4pe2Zvcih2YXIgdD0xO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiBsKG4sdCl7Zm9yKHZhciBlIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGUse3ZhbHVlOnRbZV0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGMoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX1mdW5jdGlvbiBmKG4pe3JldHVybihuKz0iIik9PT1ib3x8blswXT09PV9vP19vK246bn1mdW5jdGlvbiBzKG4pe3JldHVybihuKz0iIilbMF09PT1fbz9uLnNsaWNlKDEpOm59ZnVuY3Rpb24gaChuKXtyZXR1cm4gZihuKWluIHRoaXMuX31mdW5jdGlvbiBwKG4pe3JldHVybihuPWYobikpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW25dfWZ1bmN0aW9uIGcoKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcy5fKW4ucHVzaChzKHQpKTtyZXR1cm4gbn1mdW5jdGlvbiB2KCl7dmFyIG49MDtmb3IodmFyIHQgaW4gdGhpcy5fKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7Zm9yKHZhciBuIGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB5KCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gbShuKXtyZXR1cm4gbn1mdW5jdGlvbiBNKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gcj09PXQ/bjpyfX1mdW5jdGlvbiB4KG4sdCl7aWYodCBpbiBuKXJldHVybiB0O3Q9dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2Zvcih2YXIgZT0wLHI9d28ubGVuZ3RoO3I+ZTsrK2Upe3ZhciBpPXdvW2VdK3Q7aWYoaSBpbiBuKXJldHVybiBpfX1mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gdyhuKXtmdW5jdGlvbiB0KCl7Zm9yKHZhciB0LHI9ZSxpPS0xLHU9ci5sZW5ndGg7KytpPHU7KSh0PXJbaV0ub24pJiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbn12YXIgZT1bXSxyPW5ldyBjO3JldHVybiB0Lm9uPWZ1bmN0aW9uKHQsaSl7dmFyIHUsbz1yLmdldCh0KTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsdT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKHUrMSkpLHIucmVtb3ZlKHQpKSxpJiZlLnB1c2goci5zZXQodCx7b246aX0pKSxuKX0sdH1mdW5jdGlvbiBTKCl7YW8uZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBrKCl7Zm9yKHZhciBuLHQ9YW8uZXZlbnQ7bj10LnNvdXJjZUV2ZW50Oyl0PW47cmV0dXJuIHR9ZnVuY3Rpb24gTihuKXtmb3IodmFyIHQ9bmV3IF8sZT0wLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPXcodCk7cmV0dXJuIHQub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dHJ5e3ZhciB1PWkuc291cmNlRXZlbnQ9YW8uZXZlbnQ7aS50YXJnZXQ9bixhby5ldmVudD1pLHRbaS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7YW8uZXZlbnQ9dX19fSx0fWZ1bmN0aW9uIEUobil7cmV0dXJuIGtvKG4sQ28pLG59ZnVuY3Rpb24gQShuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIE5vKG4sdGhpcyl9fWZ1bmN0aW9uIEMobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmdW5jdGlvbigpe3JldHVybiBFbyhuLHRoaXMpfX1mdW5jdGlvbiB6KG4sdCl7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9ZnVuY3Rpb24gaSgpe3RoaXMuc2V0QXR0cmlidXRlKG4sdCl9ZnVuY3Rpb24gdSgpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfWZ1bmN0aW9uIG8oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9ZnVuY3Rpb24gYSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGUpfXJldHVybiBuPWFvLm5zLnF1YWxpZnkobiksbnVsbD09dD9uLmxvY2FsP3I6ZToiZnVuY3Rpb24iPT10eXBlb2YgdD9uLmxvY2FsP2E6bzpuLmxvY2FsP3U6aX1mdW5jdGlvbiBMKG4pe3JldHVybiBuLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uIHEobil7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK2FvLnJlcXVvdGUobikrIig/Olxccyt8JCkiLCJnIil9ZnVuY3Rpb24gVChuKXtyZXR1cm4obisiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFIobix0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPS0xOysrZTxpOyluW2VdKHRoaXMsdCl9ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT0tMSxyPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrZTxpOyluW2VdKHRoaXMscil9bj1UKG4pLm1hcChEKTt2YXIgaT1uLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9yOmV9ZnVuY3Rpb24gRChuKXt2YXIgdD1xKG4pO3JldHVybiBmdW5jdGlvbihlLHIpe2lmKGk9ZS5jbGFzc0xpc3QpcmV0dXJuIHI/aS5hZGQobik6aS5yZW1vdmUobik7dmFyIGk9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiO3I/KHQubGFzdEluZGV4PTAsdC50ZXN0KGkpfHxlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLEwoaSsiICIrbikpKTplLnNldEF0dHJpYnV0ZSgiY2xhc3MiLEwoaS5yZXBsYWNlKHQsIiAiKSkpfX1mdW5jdGlvbiBQKG4sdCxlKXtmdW5jdGlvbiByKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX1mdW5jdGlvbiBpKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHQsZSl9ZnVuY3Rpb24gdSgpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4scixlKX1yZXR1cm4gbnVsbD09dD9yOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6aX1mdW5jdGlvbiBVKG4sdCl7ZnVuY3Rpb24gZSgpe2RlbGV0ZSB0aGlzW25dfWZ1bmN0aW9uIHIoKXt0aGlzW25dPXR9ZnVuY3Rpb24gaSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRlIHRoaXNbbl06dGhpc1tuXT1lfXJldHVybiBudWxsPT10P2U6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/aTpyfWZ1bmN0aW9uIGoobil7ZnVuY3Rpb24gdCgpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09em8mJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXpvP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfWZ1bmN0aW9uIGUoKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49YW8ubnMucXVhbGlmeShuKSkubG9jYWw/ZTp0fWZ1bmN0aW9uIEYoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBIKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5jdGlvbiBPKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBbyh0aGlzLG4pfX1mdW5jdGlvbiBJKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwobj1lKSxmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlP24odC5fX2RhdGFfXyxlLl9fZGF0YV9fKTohdC0hZX19ZnVuY3Rpb24gWShuLHQpe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5lO2UrKylmb3IodmFyIGksdT1uW2VdLG89MCxhPXUubGVuZ3RoO2E+bztvKyspKGk9dVtvXSkmJnQoaSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFoobil7cmV0dXJuIGtvKG4scW8pLG59ZnVuY3Rpb24gVihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihyLGksdSl7dmFyIG8sYT1uW3VdLnVwZGF0ZSxsPWEubGVuZ3RoO2Zvcih1IT1lJiYoZT11LHQ9MCksaT49dCYmKHQ9aSsxKTshKG89YVt0XSkmJisrdDxsOyk7cmV0dXJuIG99fWZ1bmN0aW9uIFgobix0LGUpe2Z1bmN0aW9uIHIoKXt2YXIgdD10aGlzW29dO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobix0LHQuJCksZGVsZXRlIHRoaXNbb10pfWZ1bmN0aW9uIGkoKXt2YXIgaT1sKHQsY28oYXJndW1lbnRzKSk7ci5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihuLHRoaXNbb109aSxpLiQ9ZSksaS5fPXR9ZnVuY3Rpb24gdSgpe3ZhciB0LGU9bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIithby5yZXF1b3RlKG4pKyIkIik7Zm9yKHZhciByIGluIHRoaXMpaWYodD1yLm1hdGNoKGUpKXt2YXIgaT10aGlzW3JdO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0WzFdLGksaS4kKSxkZWxldGUgdGhpc1tyXX19dmFyIG89Il9fb24iK24sYT1uLmluZGV4T2YoIi4iKSxsPSQ7YT4wJiYobj1uLnNsaWNlKDAsYSkpO3ZhciBjPVRvLmdldChuKTtyZXR1cm4gYyYmKG49YyxsPUIpLGE/dD9pOnI6dD9iOnV9ZnVuY3Rpb24gJChuLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1hby5ldmVudDthby5ldmVudD1lLHRbMF09dGhpcy5fX2RhdGFfXzt0cnl7bi5hcHBseSh0aGlzLHQpfWZpbmFsbHl7YW8uZXZlbnQ9cn19fWZ1bmN0aW9uIEIobix0KXt2YXIgZT0kKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMscj1uLnJlbGF0ZWRUYXJnZXQ7ciYmKHI9PT10fHw4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpfHxlLmNhbGwodCxuKX19ZnVuY3Rpb24gVyhlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK0RvLGk9ImNsaWNrIityLHU9YW8uc2VsZWN0KHQoZSkpLm9uKCJ0b3VjaG1vdmUiK3IsUykub24oImRyYWdzdGFydCIrcixTKS5vbigic2VsZWN0c3RhcnQiK3IsUyk7aWYobnVsbD09Um8mJihSbz0ib25zZWxlY3RzdGFydCJpbiBlPyExOngoZS5zdHlsZSwidXNlclNlbGVjdCIpKSxSbyl7dmFyIG89bihlKS5zdHlsZSxhPW9bUm9dO29bUm9dPSJub25lIn1yZXR1cm4gZnVuY3Rpb24obil7aWYodS5vbihyLG51bGwpLFJvJiYob1tSb109YSksbil7dmFyIHQ9ZnVuY3Rpb24oKXt1Lm9uKGksbnVsbCl9O3Uub24oaSxmdW5jdGlvbigpe1MoKSx0KCl9LCEwKSxzZXRUaW1lb3V0KHQsMCl9fX1mdW5jdGlvbiBKKG4sZSl7ZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIHI9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIGk9ci5jcmVhdGVTVkdQb2ludCgpO2lmKDA+UG8pe3ZhciB1PXQobik7aWYodS5zY3JvbGxYfHx1LnNjcm9sbFkpe3I9YW8uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKTt2YXIgbz1yWzBdWzBdLmdldFNjcmVlbkNUTSgpO1BvPSEoby5mfHxvLmUpLHIucmVtb3ZlKCl9fXJldHVybiBQbz8oaS54PWUucGFnZVgsaS55PWUucGFnZVkpOihpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFkpLGk9aS5tYXRyaXhUcmFuc2Zvcm0obi5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtpLngsaS55XX12YXIgYT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtYS5sZWZ0LW4uY2xpZW50TGVmdCxlLmNsaWVudFktYS50b3Atbi5jbGllbnRUb3BdfWZ1bmN0aW9uIEcoKXtyZXR1cm4gYW8uZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcn1mdW5jdGlvbiBLKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBRKG4sdCxlKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBdKX1mdW5jdGlvbiBubihuKXtyZXR1cm4gbj4xPzA6LTE+bj9GbzpNYXRoLmFjb3Mobil9ZnVuY3Rpb24gdG4obil7cmV0dXJuIG4+MT9JbzotMT5uPy1JbzpNYXRoLmFzaW4obil9ZnVuY3Rpb24gZW4obil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9ZnVuY3Rpb24gcm4obil7cmV0dXJuKChuPU1hdGguZXhwKG4pKSsxL24pLzJ9ZnVuY3Rpb24gdW4obil7cmV0dXJuKChuPU1hdGguZXhwKDIqbikpLTEpLyhuKzEpfWZ1bmN0aW9uIG9uKG4pe3JldHVybihuPU1hdGguc2luKG4vMikpKm59ZnVuY3Rpb24gYW4oKXt9ZnVuY3Rpb24gbG4obix0LGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbG4/KHRoaXMuaD0rbix0aGlzLnM9K3Qsdm9pZCh0aGlzLmw9K2UpKTphcmd1bWVudHMubGVuZ3RoPDI/biBpbnN0YW5jZW9mIGxuP25ldyBsbihuLmgsbi5zLG4ubCk6X24oIiIrbix3bixsbik6bmV3IGxuKG4sdCxlKX1mdW5jdGlvbiBjbihuLHQsZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbj4zNjA/bi09MzYwOjA+biYmKG4rPTM2MCksNjA+bj91KyhvLXUpKm4vNjA6MTgwPm4/bzoyNDA+bj91KyhvLXUpKigyNDAtbikvNjA6dX1mdW5jdGlvbiBpKG4pe3JldHVybiBNYXRoLnJvdW5kKDI1NSpyKG4pKX12YXIgdSxvO3JldHVybiBuPWlzTmFOKG4pPzA6KG4lPTM2MCk8MD9uKzM2MDpuLHQ9aXNOYU4odCk/MDowPnQ/MDp0PjE/MTp0LGU9MD5lPzA6ZT4xPzE6ZSxvPS41Pj1lP2UqKDErdCk6ZSt0LWUqdCx1PTIqZS1vLG5ldyBtbihpKG4rMTIwKSxpKG4pLGkobi0xMjApKX1mdW5jdGlvbiBmbihuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmbj8odGhpcy5oPStuLHRoaXMuYz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgZm4/bmV3IGZuKG4uaCxuLmMsbi5sKTpuIGluc3RhbmNlb2YgaG4/Z24obi5sLG4uYSxuLmIpOmduKChuPVNuKChuPWFvLnJnYihuKSkucixuLmcsbi5iKSkubCxuLmEsbi5iKTpuZXcgZm4obix0LGUpfWZ1bmN0aW9uIHNuKG4sdCxlKXtyZXR1cm4gaXNOYU4obikmJihuPTApLGlzTmFOKHQpJiYodD0wKSxuZXcgaG4oZSxNYXRoLmNvcyhuKj1ZbykqdCxNYXRoLnNpbihuKSp0KX1mdW5jdGlvbiBobihuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBobj8odGhpcy5sPStuLHRoaXMuYT0rdCx2b2lkKHRoaXMuYj0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgaG4/bmV3IGhuKG4ubCxuLmEsbi5iKTpuIGluc3RhbmNlb2YgZm4/c24obi5oLG4uYyxuLmwpOlNuKChuPW1uKG4pKS5yLG4uZyxuLmIpOm5ldyBobihuLHQsZSl9ZnVuY3Rpb24gcG4obix0LGUpe3ZhciByPShuKzE2KS8xMTYsaT1yK3QvNTAwLHU9ci1lLzIwMDtyZXR1cm4gaT12bihpKSpuYSxyPXZuKHIpKnRhLHU9dm4odSkqZWEsbmV3IG1uKHluKDMuMjQwNDU0MippLTEuNTM3MTM4NSpyLS40OTg1MzE0KnUpLHluKC0uOTY5MjY2KmkrMS44NzYwMTA4KnIrLjA0MTU1Nip1KSx5biguMDU1NjQzNCppLS4yMDQwMjU5KnIrMS4wNTcyMjUyKnUpKX1mdW5jdGlvbiBnbihuLHQsZSl7cmV0dXJuIG4+MD9uZXcgZm4oTWF0aC5hdGFuMihlLHQpKlpvLE1hdGguc3FydCh0KnQrZSplKSxuKTpuZXcgZm4oTmFOLE5hTixuKX1mdW5jdGlvbiB2bihuKXtyZXR1cm4gbj4uMjA2ODkzMDM0P24qbipuOihuLTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIGRuKG4pe3JldHVybiBuPi4wMDg4NTY/TWF0aC5wb3cobiwxLzMpOjcuNzg3MDM3Km4rNC8yOX1mdW5jdGlvbiB5bihuKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKC4wMDMwND49bj8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBtbihuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtbj8odGhpcy5yPX5+bix0aGlzLmc9fn50LHZvaWQodGhpcy5iPX5+ZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgbW4/bmV3IG1uKG4ucixuLmcsbi5iKTpfbigiIituLG1uLGNuKTpuZXcgbW4obix0LGUpfWZ1bmN0aW9uIE1uKG4pe3JldHVybiBuZXcgbW4obj4+MTYsbj4+OCYyNTUsMjU1Jm4pfWZ1bmN0aW9uIHhuKG4pe3JldHVybiBNbihuKSsiIn1mdW5jdGlvbiBibihuKXtyZXR1cm4gMTY+bj8iMCIrTWF0aC5tYXgoMCxuKS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LG4pLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBfbihuLHQsZSl7dmFyIHIsaSx1LG89MCxhPTAsbD0wO2lmKHI9LyhbYS16XSspXCgoLiopXCkvLmV4ZWMobj1uLnRvTG93ZXJDYXNlKCkpKXN3aXRjaChpPXJbMl0uc3BsaXQoIiwiKSxyWzFdKXtjYXNlImhzbCI6cmV0dXJuIGUocGFyc2VGbG9hdChpWzBdKSxwYXJzZUZsb2F0KGlbMV0pLzEwMCxwYXJzZUZsb2F0KGlbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiB0KE5uKGlbMF0pLE5uKGlbMV0pLE5uKGlbMl0pKX1yZXR1cm4odT11YS5nZXQobikpP3QodS5yLHUuZyx1LmIpOihudWxsPT1ufHwiIyIhPT1uLmNoYXJBdCgwKXx8aXNOYU4odT1wYXJzZUludChuLnNsaWNlKDEpLDE2KSl8fCg0PT09bi5sZW5ndGg/KG89KDM4NDAmdSk+PjQsbz1vPj40fG8sYT0yNDAmdSxhPWE+PjR8YSxsPTE1JnUsbD1sPDw0fGwpOjc9PT1uLmxlbmd0aCYmKG89KDE2NzExNjgwJnUpPj4xNixhPSg2NTI4MCZ1KT4+OCxsPTI1NSZ1KSksdChvLGEsbCkpfWZ1bmN0aW9uIHduKG4sdCxlKXt2YXIgcixpLHU9TWF0aC5taW4obi89MjU1LHQvPTI1NSxlLz0yNTUpLG89TWF0aC5tYXgobix0LGUpLGE9by11LGw9KG8rdSkvMjtyZXR1cm4gYT8oaT0uNT5sP2EvKG8rdSk6YS8oMi1vLXUpLHI9bj09bz8odC1lKS9hKyhlPnQ/NjowKTp0PT1vPyhlLW4pL2ErMjoobi10KS9hKzQscio9NjApOihyPU5hTixpPWw+MCYmMT5sPzA6ciksbmV3IGxuKHIsaSxsKX1mdW5jdGlvbiBTbihuLHQsZSl7bj1rbihuKSx0PWtuKHQpLGU9a24oZSk7dmFyIHI9ZG4oKC40MTI0NTY0Km4rLjM1NzU3NjEqdCsuMTgwNDM3NSplKS9uYSksaT1kbigoLjIxMjY3MjkqbisuNzE1MTUyMip0Ky4wNzIxNzUqZSkvdGEpLHU9ZG4oKC4wMTkzMzM5Km4rLjExOTE5Mip0Ky45NTAzMDQxKmUpL2VhKTtyZXR1cm4gaG4oMTE2KmktMTYsNTAwKihyLWkpLDIwMCooaS11KSl9ZnVuY3Rpb24ga24obil7cmV0dXJuKG4vPTI1NSk8PS4wNDA0NT9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gTm4obil7dmFyIHQ9cGFyc2VGbG9hdChuKTtyZXR1cm4iJSI9PT1uLmNoYXJBdChuLmxlbmd0aC0xKT9NYXRoLnJvdW5kKDIuNTUqdCk6dH1mdW5jdGlvbiBFbihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIEFuKG4pe3JldHVybiBmdW5jdGlvbih0LGUscil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpLENuKHQsZSxuLHIpfX1mdW5jdGlvbiBDbihuLHQsZSxyKXtmdW5jdGlvbiBpKCl7dmFyIG4sdD1sLnN0YXR1cztpZighdCYmTG4obCl8fHQ+PTIwMCYmMzAwPnR8fDMwND09PXQpe3RyeXtuPWUuY2FsbCh1LGwpfWNhdGNoKHIpe3JldHVybiB2b2lkIG8uZXJyb3IuY2FsbCh1LHIpfW8ubG9hZC5jYWxsKHUsbil9ZWxzZSBvLmVycm9yLmNhbGwodSxsKX12YXIgdT17fSxvPWFvLmRpc3BhdGNoKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxhPXt9LGw9bmV3IFhNTEh0dHBSZXF1ZXN0LGM9bnVsbDtyZXR1cm4hdGhpcy5YRG9tYWluUmVxdWVzdHx8IndpdGhDcmVkZW50aWFscyJpbiBsfHwhL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KG4pfHwobD1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gbD9sLm9ubG9hZD1sLm9uZXJyb3I9aTpsLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVhZHlTdGF0ZT4zJiZpKCl9LGwub25wcm9ncmVzcz1mdW5jdGlvbihuKXt2YXIgdD1hby5ldmVudDthby5ldmVudD1uO3RyeXtvLnByb2dyZXNzLmNhbGwodSxsKX1maW5hbGx5e2FvLmV2ZW50PXR9fSx1LmhlYWRlcj1mdW5jdGlvbihuLHQpe3JldHVybiBuPShuKyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9hW25dOihudWxsPT10P2RlbGV0ZSBhW25dOmFbbl09dCsiIix1KX0sdS5taW1lVHlwZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1uP251bGw6bisiIix1KTp0fSx1LnJlc3BvbnNlVHlwZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLHUpOmN9LHUucmVzcG9uc2U9ZnVuY3Rpb24obil7cmV0dXJuIGU9bix1fSxbImdldCIsInBvc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdS5zZW5kLmFwcGx5KHUsW25dLmNvbmNhdChjbyhhcmd1bWVudHMpKSl9fSksdS5zZW5kPWZ1bmN0aW9uKGUscixpKXtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJihpPXIscj1udWxsKSxsLm9wZW4oZSxuLCEwKSxudWxsPT10fHwiYWNjZXB0ImluIGF8fChhLmFjY2VwdD10KyIsKi8qIiksbC5zZXRSZXF1ZXN0SGVhZGVyKWZvcih2YXIgZiBpbiBhKWwuc2V0UmVxdWVzdEhlYWRlcihmLGFbZl0pO3JldHVybiBudWxsIT10JiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZSh0KSxudWxsIT1jJiYobC5yZXNwb25zZVR5cGU9YyksbnVsbCE9aSYmdS5vbigiZXJyb3IiLGkpLm9uKCJsb2FkIixmdW5jdGlvbihuKXtpKG51bGwsbil9KSxvLmJlZm9yZXNlbmQuY2FsbCh1LGwpLGwuc2VuZChudWxsPT1yP251bGw6ciksdX0sdS5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBsLmFib3J0KCksdX0sYW8ucmViaW5kKHUsbywib24iKSxudWxsPT1yP3U6dS5nZXQoem4ocikpfWZ1bmN0aW9uIHpuKG4pe3JldHVybiAxPT09bi5sZW5ndGg/ZnVuY3Rpb24odCxlKXtuKG51bGw9PXQ/ZTpudWxsKX06bn1mdW5jdGlvbiBMbihuKXt2YXIgdD1uLnJlc3BvbnNlVHlwZTtyZXR1cm4gdCYmInRleHQiIT09dD9uLnJlc3BvbnNlOm4ucmVzcG9uc2VUZXh0fWZ1bmN0aW9uIHFuKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9MCksMz5yJiYoZT1EYXRlLm5vdygpKTt2YXIgaT1lK3QsdT17YzpuLHQ6aSxuOm51bGx9O3JldHVybiBhYT9hYS5uPXU6b2E9dSxhYT11LGxhfHwoY2E9Y2xlYXJUaW1lb3V0KGNhKSxsYT0xLGZhKFRuKSksdX1mdW5jdGlvbiBUbigpe3ZhciBuPVJuKCksdD1EbigpLW47dD4yND8oaXNGaW5pdGUodCkmJihjbGVhclRpbWVvdXQoY2EpLGNhPXNldFRpbWVvdXQoVG4sdCkpLGxhPTApOihsYT0xLGZhKFRuKSl9ZnVuY3Rpb24gUm4oKXtmb3IodmFyIG49RGF0ZS5ub3coKSx0PW9hO3Q7KW4+PXQudCYmdC5jKG4tdC50KSYmKHQuYz1udWxsKSx0PXQubjtyZXR1cm4gbn1mdW5jdGlvbiBEbigpe2Zvcih2YXIgbix0PW9hLGU9MS8wO3Q7KXQuYz8odC50PGUmJihlPXQudCksdD0obj10KS5uKTp0PW4/bi5uPXQubjpvYT10Lm47cmV0dXJuIGFhPW4sZX1mdW5jdGlvbiBQbihuLHQpe3JldHVybiB0LShuP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIFVuKG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMyp4byg4LXQpKTtyZXR1cm57c2NhbGU6dD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBuKmV9LHN5bWJvbDpufX1mdW5jdGlvbiBqbihuKXt2YXIgdD1uLmRlY2ltYWwsZT1uLnRob3VzYW5kcyxyPW4uZ3JvdXBpbmcsaT1uLmN1cnJlbmN5LHU9ciYmZT9mdW5jdGlvbihuLHQpe2Zvcih2YXIgaT1uLmxlbmd0aCx1PVtdLG89MCxhPXJbMF0sbD0wO2k+MCYmYT4wJiYobCthKzE+dCYmKGE9TWF0aC5tYXgoMSx0LWwpKSx1LnB1c2gobi5zdWJzdHJpbmcoaS09YSxpK2EpKSwhKChsKz1hKzEpPnQpKTspYT1yW289KG8rMSklci5sZW5ndGhdO3JldHVybiB1LnJldmVyc2UoKS5qb2luKGUpfTptO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1oYS5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8Ij4iLGE9ZVszXXx8Ii0iLGw9ZVs0XXx8IiIsYz1lWzVdLGY9K2VbNl0scz1lWzddLGg9ZVs4XSxwPWVbOV0sZz0xLHY9IiIsZD0iIix5PSExLG09ITA7c3dpdGNoKGgmJihoPStoLnN1YnN0cmluZygxKSksKGN8fCIwIj09PXImJiI9Ij09PW8pJiYoYz1yPSIwIixvPSI9IikscCl7Y2FzZSJuIjpzPSEwLHA9ImciO2JyZWFrO2Nhc2UiJSI6Zz0xMDAsZD0iJSIscD0iZiI7YnJlYWs7Y2FzZSJwIjpnPTEwMCxkPSIlIixwPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09PWwmJih2PSIwIitwLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6bT0hMTtjYXNlImQiOnk9ITAsaD0wO2JyZWFrO2Nhc2UicyI6Zz0tMSxwPSJyIn0iJCI9PT1sJiYodj1pWzBdLGQ9aVsxXSksInIiIT1wfHxofHwocD0iZyIpLG51bGwhPWgmJigiZyI9PXA/aD1NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKToiZSIhPXAmJiJmIiE9cHx8KGg9TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxoKSkpKSxwPXBhLmdldChwKXx8Rm47dmFyIE09YyYmcztyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9ZDtpZih5JiZuJTEpcmV0dXJuIiI7dmFyIGk9MD5ufHwwPT09biYmMD4xL24/KG49LW4sIi0iKToiLSI9PT1hPyIiOmE7aWYoMD5nKXt2YXIgbD1hby5mb3JtYXRQcmVmaXgobixoKTtuPWwuc2NhbGUobiksZT1sLnN5bWJvbCtkfWVsc2Ugbio9ZztuPXAobixoKTt2YXIgeCxiLF89bi5sYXN0SW5kZXhPZigiLiIpO2lmKDA+Xyl7dmFyIHc9bT9uLmxhc3RJbmRleE9mKCJlIik6LTE7MD53Pyh4PW4sYj0iIik6KHg9bi5zdWJzdHJpbmcoMCx3KSxiPW4uc3Vic3RyaW5nKHcpKX1lbHNlIHg9bi5zdWJzdHJpbmcoMCxfKSxiPXQrbi5zdWJzdHJpbmcoXysxKTshYyYmcyYmKHg9dSh4LDEvMCkpO3ZhciBTPXYubGVuZ3RoK3gubGVuZ3RoK2IubGVuZ3RoKyhNPzA6aS5sZW5ndGgpLGs9Zj5TP25ldyBBcnJheShTPWYtUysxKS5qb2luKHIpOiIiO3JldHVybiBNJiYoeD11KGsreCxrLmxlbmd0aD9mLWIubGVuZ3RoOjEvMCkpLGkrPXYsbj14K2IsKCI8Ij09PW8/aStuK2s6Ij4iPT09bz9rK2krbjoiXiI9PT1vP2suc3Vic3RyaW5nKDAsUz4+PTEpK2krbitrLnN1YnN0cmluZyhTKTppKyhNP246aytuKSkrZX19fWZ1bmN0aW9uIEZuKG4pe3JldHVybiBuKyIifWZ1bmN0aW9uIEhuKCl7dGhpcy5fPW5ldyBEYXRlKGFyZ3VtZW50cy5sZW5ndGg+MT9EYXRlLlVUQy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YXJndW1lbnRzWzBdKX1mdW5jdGlvbiBPbihuLHQsZSl7ZnVuY3Rpb24gcih0KXt2YXIgZT1uKHQpLHI9dShlLDEpO3JldHVybiByLXQ+dC1lP2U6cn1mdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9bihuZXcgdmEoZS0xKSksMSksZX1mdW5jdGlvbiB1KG4sZSl7cmV0dXJuIHQobj1uZXcgdmEoK24pLGUpLG59ZnVuY3Rpb24gbyhuLHIsdSl7dmFyIG89aShuKSxhPVtdO2lmKHU+MSlmb3IoO3I+bzspZShvKSV1fHxhLnB1c2gobmV3IERhdGUoK28pKSx0KG8sMSk7ZWxzZSBmb3IoO3I+bzspYS5wdXNoKG5ldyBEYXRlKCtvKSksdChvLDEpO3JldHVybiBhfWZ1bmN0aW9uIGEobix0LGUpe3RyeXt2YT1Ibjt2YXIgcj1uZXcgSG47cmV0dXJuIHIuXz1uLG8ocix0LGUpfWZpbmFsbHl7dmE9RGF0ZX19bi5mbG9vcj1uLG4ucm91bmQ9cixuLmNlaWw9aSxuLm9mZnNldD11LG4ucmFuZ2U9bzt2YXIgbD1uLnV0Yz1JbihuKTtyZXR1cm4gbC5mbG9vcj1sLGwucm91bmQ9SW4ociksbC5jZWlsPUluKGkpLGwub2Zmc2V0PUluKHUpLGwucmFuZ2U9YSxufWZ1bmN0aW9uIEluKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3RyeXt2YT1Ibjt2YXIgcj1uZXcgSG47cmV0dXJuIHIuXz10LG4ocixlKS5ffWZpbmFsbHl7dmE9RGF0ZX19fWZ1bmN0aW9uIFluKG4pe2Z1bmN0aW9uIHQobil7ZnVuY3Rpb24gdCh0KXtmb3IodmFyIGUsaSx1LG89W10sYT0tMSxsPTA7KythPHI7KTM3PT09bi5jaGFyQ29kZUF0KGEpJiYoby5wdXNoKG4uc2xpY2UobCxhKSksbnVsbCE9KGk9eWFbZT1uLmNoYXJBdCgrK2EpXSkmJihlPW4uY2hhckF0KCsrYSkpLCh1PUFbZV0pJiYoZT11KHQsbnVsbD09aT8iZSI9PT1lPyIgIjoiMCI6aSkpLG8ucHVzaChlKSxsPWErMSk7cmV0dXJuIG8ucHVzaChuLnNsaWNlKGwsYSkpLG8uam9pbigiIil9dmFyIHI9bi5sZW5ndGg7cmV0dXJuIHQucGFyc2U9ZnVuY3Rpb24odCl7dmFyIHI9e3k6MTkwMCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MCxaOm51bGx9LGk9ZShyLG4sdCwwKTtpZihpIT10Lmxlbmd0aClyZXR1cm4gbnVsbDsicCJpbiByJiYoci5IPXIuSCUxMisxMipyLnApO3ZhciB1PW51bGwhPXIuWiYmdmEhPT1IbixvPW5ldyh1P0huOnZhKTtyZXR1cm4iaiJpbiByP28uc2V0RnVsbFllYXIoci55LDAsci5qKToiVyJpbiByfHwiVSJpbiByPygidyJpbiByfHwoci53PSJXImluIHI/MTowKSxvLnNldEZ1bGxZZWFyKHIueSwwLDEpLG8uc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcrNypyLlctKG8uZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKG8uZ2V0RGF5KCkrNiklNykpOm8uc2V0RnVsbFllYXIoci55LHIubSxyLmQpLG8uc2V0SG91cnMoci5IKyhyLlovMTAwfDApLHIuTStyLlolMTAwLHIuUyxyLkwpLHU/by5fOm99LHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gbn0sdH1mdW5jdGlvbiBlKG4sdCxlLHIpe2Zvcih2YXIgaSx1LG8sYT0wLGw9dC5sZW5ndGgsYz1lLmxlbmd0aDtsPmE7KXtpZihyPj1jKXJldHVybi0xO2lmKGk9dC5jaGFyQ29kZUF0KGErKyksMzc9PT1pKXtpZihvPXQuY2hhckF0KGErKyksdT1DW28gaW4geWE/dC5jaGFyQXQoYSsrKTpvXSwhdXx8KHI9dShuLGUscikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1lLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1mdW5jdGlvbiByKG4sdCxlKXtfLmxhc3RJbmRleD0wO3ZhciByPV8uZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi53PXcuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaShuLHQsZSl7eC5sYXN0SW5kZXg9MDt2YXIgcj14LmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4udz1iLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHUobix0LGUpe04ubGFzdEluZGV4PTA7dmFyIHI9Ti5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLm09RS5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKG4sdCxlKXtTLmxhc3RJbmRleD0wO3ZhciByPVMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5tPWsuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIGUobixBLmMudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIGwobix0LHIpe3JldHVybiBlKG4sQS54LnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBjKG4sdCxyKXtyZXR1cm4gZShuLEEuWC50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gZihuLHQsZSl7dmFyIHI9TS5nZXQodC5zbGljZShlLGUrPTIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBudWxsPT1yPy0xOihuLnA9cixlKX12YXIgcz1uLmRhdGVUaW1lLGg9bi5kYXRlLHA9bi50aW1lLGc9bi5wZXJpb2RzLHY9bi5kYXlzLGQ9bi5zaG9ydERheXMseT1uLm1vbnRocyxtPW4uc2hvcnRNb250aHM7dC51dGM9ZnVuY3Rpb24obil7ZnVuY3Rpb24gZShuKXt0cnl7dmE9SG47dmFyIHQ9bmV3IHZhO3JldHVybiB0Ll89bixyKHQpfWZpbmFsbHl7dmE9RGF0ZX19dmFyIHI9dChuKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuKXt0cnl7dmE9SG47dmFyIHQ9ci5wYXJzZShuKTtyZXR1cm4gdCYmdC5ffWZpbmFsbHl7dmE9RGF0ZX19LGUudG9TdHJpbmc9ci50b1N0cmluZyxlfSx0Lm11bHRpPXQudXRjLm11bHRpPWN0O3ZhciBNPWFvLm1hcCgpLHg9Vm4odiksYj1Ybih2KSxfPVZuKGQpLHc9WG4oZCksUz1Wbih5KSxrPVhuKHkpLE49Vm4obSksRT1YbihtKTtnLmZvckVhY2goZnVuY3Rpb24obix0KXtNLnNldChuLnRvTG93ZXJDYXNlKCksdCl9KTt2YXIgQT17YTpmdW5jdGlvbihuKXtyZXR1cm4gZFtuLmdldERheSgpXX0sQTpmdW5jdGlvbihuKXtyZXR1cm4gdltuLmdldERheSgpXX0sYjpmdW5jdGlvbihuKXtyZXR1cm4gbVtuLmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKG4pe3JldHVybiB5W24uZ2V0TW9udGgoKV19LGM6dChzKSxkOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFpuKG4uZ2V0RGF0ZSgpLHQsMil9LGU6ZnVuY3Rpb24obix0KXtyZXR1cm4gWm4obi5nZXREYXRlKCksdCwyKX0sSDpmdW5jdGlvbihuLHQpe3JldHVybiBabihuLmdldEhvdXJzKCksdCwyKX0sSTpmdW5jdGlvbihuLHQpe3JldHVybiBabihuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9LGo6ZnVuY3Rpb24obix0KXtyZXR1cm4gWm4oMStnYS5kYXlPZlllYXIobiksdCwzKX0sTDpmdW5jdGlvbihuLHQpe3JldHVybiBabihuLmdldE1pbGxpc2Vjb25kcygpLHQsMyl9LG06ZnVuY3Rpb24obix0KXtyZXR1cm4gWm4obi5nZXRNb250aCgpKzEsdCwyKX0sTTpmdW5jdGlvbihuLHQpe3JldHVybiBabihuLmdldE1pbnV0ZXMoKSx0LDIpfSxwOmZ1bmN0aW9uKG4pe3JldHVybiBnWysobi5nZXRIb3VycygpPj0xMildfSxTOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFpuKG4uZ2V0U2Vjb25kcygpLHQsMil9LFU6ZnVuY3Rpb24obix0KXtyZXR1cm4gWm4oZ2Euc3VuZGF5T2ZZZWFyKG4pLHQsMil9LHc6ZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF5KCl9LFc6ZnVuY3Rpb24obix0KXtyZXR1cm4gWm4oZ2EubW9uZGF5T2ZZZWFyKG4pLHQsMil9LHg6dChoKSxYOnQocCkseTpmdW5jdGlvbihuLHQpe3JldHVybiBabihuLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9LFk6ZnVuY3Rpb24obix0KXtyZXR1cm4gWm4obi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfSxaOmF0LCIlIjpmdW5jdGlvbigpe3JldHVybiIlIn19LEM9e2E6cixBOmksYjp1LEI6byxjOmEsZDp0dCxlOnR0LEg6cnQsSTpydCxqOmV0LEw6b3QsbTpudCxNOml0LHA6ZixTOnV0LFU6Qm4sdzokbixXOlduLHg6bCxYOmMseTpHbixZOkpuLFo6S24sIiUiOmx0fTtyZXR1cm4gdH1mdW5jdGlvbiBabihuLHQsZSl7dmFyIHI9MD5uPyItIjoiIixpPShyPy1uOm4pKyIiLHU9aS5sZW5ndGg7cmV0dXJuIHIrKGU+dT9uZXcgQXJyYXkoZS11KzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBWbihuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAoYW8ucmVxdW90ZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFhuKG4pe2Zvcih2YXIgdD1uZXcgYyxlPS0xLHI9bi5sZW5ndGg7KytlPHI7KXQuc2V0KG5bZV0udG9Mb3dlckNhc2UoKSxlKTtyZXR1cm4gdH1mdW5jdGlvbiAkbihuLHQsZSl7bWEubGFzdEluZGV4PTA7dmFyIHI9bWEuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KG4udz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCbihuLHQsZSl7bWEubGFzdEluZGV4PTA7dmFyIHI9bWEuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFduKG4sdCxlKXttYS5sYXN0SW5kZXg9MDt2YXIgcj1tYS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLlc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSm4obix0LGUpe21hLmxhc3RJbmRleD0wO3ZhciByPW1hLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiByPyhuLnk9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gR24obix0LGUpe21hLmxhc3RJbmRleD0wO3ZhciByPW1hLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLnk9UW4oK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtuKG4sdCxlKXtyZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QodD10LnNsaWNlKGUsZSs1KSk/KG4uWj0tdCxlKzUpOi0xfWZ1bmN0aW9uIFFuKG4pe3JldHVybiBuKyhuPjY4PzE5MDA6MmUzKX1mdW5jdGlvbiBudChuLHQsZSl7bWEubGFzdEluZGV4PTA7dmFyIHI9bWEuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KG4ubT1yWzBdLTEsZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdHQobix0LGUpe21hLmxhc3RJbmRleD0wO3ZhciByPW1hLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXQobix0LGUpe21hLmxhc3RJbmRleD0wO3ZhciByPW1hLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiByPyhuLmo9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnQobix0LGUpe21hLmxhc3RJbmRleD0wO3ZhciByPW1hLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXQobix0LGUpe21hLmxhc3RJbmRleD0wO3ZhciByPW1hLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdXQobix0LGUpe21hLmxhc3RJbmRleD0wO3ZhciByPW1hLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb3Qobix0LGUpe21hLmxhc3RJbmRleD0wO3ZhciByPW1hLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiByPyhuLkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYXQobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpLGU9dD4wPyItIjoiKyIscj14byh0KS82MHwwLGk9eG8odCklNjA7cmV0dXJuIGUrWm4ociwiMCIsMikrWm4oaSwiMCIsMil9ZnVuY3Rpb24gbHQobix0LGUpe01hLmxhc3RJbmRleD0wO3ZhciByPU1hLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiByP2UrclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gY3Qobil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9LTE7KytlPHQ7KW5bZV1bMF09dGhpcyhuW2VdWzBdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1uW2VdOyFyWzFdKHQpOylyPW5bKytlXTtyZXR1cm4gclswXSh0KX19ZnVuY3Rpb24gZnQoKXt9ZnVuY3Rpb24gc3Qobix0LGUpe3ZhciByPWUucz1uK3QsaT1yLW4sdT1yLWk7ZS50PW4tdSsodC1pKX1mdW5jdGlvbiBodChuLHQpe24mJndhLmhhc093blByb3BlcnR5KG4udHlwZSkmJndhW24udHlwZV0obix0KX1mdW5jdGlvbiBwdChuLHQsZSl7dmFyIHIsaT0tMSx1PW4ubGVuZ3RoLWU7Zm9yKHQubGluZVN0YXJ0KCk7KytpPHU7KXI9bltpXSx0LnBvaW50KHJbMF0sclsxXSxyWzJdKTt0LmxpbmVFbmQoKX1mdW5jdGlvbiBndChuLHQpe3ZhciBlPS0xLHI9bi5sZW5ndGg7Zm9yKHQucG9seWdvblN0YXJ0KCk7KytlPHI7KXB0KG5bZV0sdCwxKTt0LnBvbHlnb25FbmQoKX1mdW5jdGlvbiB2dCgpe2Z1bmN0aW9uIG4obix0KXtuKj1Zbyx0PXQqWW8vMitGby80O3ZhciBlPW4tcixvPWU+PTA/MTotMSxhPW8qZSxsPU1hdGguY29zKHQpLGM9TWF0aC5zaW4odCksZj11KmMscz1pKmwrZipNYXRoLmNvcyhhKSxoPWYqbypNYXRoLnNpbihhKTtrYS5hZGQoTWF0aC5hdGFuMihoLHMpKSxyPW4saT1sLHU9Y312YXIgdCxlLHIsaSx1O05hLnBvaW50PWZ1bmN0aW9uKG8sYSl7TmEucG9pbnQ9bixyPSh0PW8pKllvLGk9TWF0aC5jb3MoYT0oZT1hKSpZby8yK0ZvLzQpLHU9TWF0aC5zaW4oYSl9LE5hLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1bmN0aW9uIGR0KG4pe3ZhciB0PW5bMF0sZT1uWzFdLHI9TWF0aC5jb3MoZSk7cmV0dXJuW3IqTWF0aC5jb3ModCkscipNYXRoLnNpbih0KSxNYXRoLnNpbihlKV19ZnVuY3Rpb24geXQobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXStuWzJdKnRbMl19ZnVuY3Rpb24gbXQobix0KXtyZXR1cm5bblsxXSp0WzJdLW5bMl0qdFsxXSxuWzJdKnRbMF0tblswXSp0WzJdLG5bMF0qdFsxXS1uWzFdKnRbMF1dfWZ1bmN0aW9uIE10KG4sdCl7blswXSs9dFswXSxuWzFdKz10WzFdLG5bMl0rPXRbMl19ZnVuY3Rpb24geHQobix0KXtyZXR1cm5bblswXSp0LG5bMV0qdCxuWzJdKnRdfWZ1bmN0aW9uIGJ0KG4pe3ZhciB0PU1hdGguc3FydChuWzBdKm5bMF0rblsxXSpuWzFdK25bMl0qblsyXSk7blswXS89dCxuWzFdLz10LG5bMl0vPXR9ZnVuY3Rpb24gX3Qobil7cmV0dXJuW01hdGguYXRhbjIoblsxXSxuWzBdKSx0bihuWzJdKV19ZnVuY3Rpb24gd3Qobix0KXtyZXR1cm4geG8oblswXS10WzBdKTxVbyYmeG8oblsxXS10WzFdKTxVb31mdW5jdGlvbiBTdChuLHQpe24qPVlvO3ZhciBlPU1hdGguY29zKHQqPVlvKTtrdChlKk1hdGguY29zKG4pLGUqTWF0aC5zaW4obiksTWF0aC5zaW4odCkpfWZ1bmN0aW9uIGt0KG4sdCxlKXsrK0VhLENhKz0obi1DYSkvRWEsemErPSh0LXphKS9FYSxMYSs9KGUtTGEpL0VhfWZ1bmN0aW9uIE50KCl7ZnVuY3Rpb24gbihuLGkpe24qPVlvO3ZhciB1PU1hdGguY29zKGkqPVlvKSxvPXUqTWF0aC5jb3MobiksYT11Kk1hdGguc2luKG4pLGw9TWF0aC5zaW4oaSksYz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYz1lKmwtciphKSpjKyhjPXIqby10KmwpKmMrKGM9dCphLWUqbykqYyksdCpvK2UqYStyKmwpO0FhKz1jLHFhKz1jKih0Kyh0PW8pKSxUYSs9YyooZSsoZT1hKSksUmErPWMqKHIrKHI9bCkpLGt0KHQsZSxyKX12YXIgdCxlLHI7amEucG9pbnQ9ZnVuY3Rpb24oaSx1KXtpKj1Zbzt2YXIgbz1NYXRoLmNvcyh1Kj1Zbyk7dD1vKk1hdGguY29zKGkpLGU9bypNYXRoLnNpbihpKSxyPU1hdGguc2luKHUpLGphLnBvaW50PW4sa3QodCxlLHIpfX1mdW5jdGlvbiBFdCgpe2phLnBvaW50PVN0fWZ1bmN0aW9uIEF0KCl7ZnVuY3Rpb24gbihuLHQpe24qPVlvO3ZhciBlPU1hdGguY29zKHQqPVlvKSxvPWUqTWF0aC5jb3MobiksYT1lKk1hdGguc2luKG4pLGw9TWF0aC5zaW4odCksYz1pKmwtdSphLGY9dSpvLXIqbCxzPXIqYS1pKm8saD1NYXRoLnNxcnQoYypjK2YqZitzKnMpLHA9cipvK2kqYSt1KmwsZz1oJiYtbm4ocCkvaCx2PU1hdGguYXRhbjIoaCxwKTtEYSs9ZypjLFBhKz1nKmYsVWErPWcqcyxBYSs9dixxYSs9dioocisocj1vKSksVGErPXYqKGkrKGk9YSkpLFJhKz12Kih1Kyh1PWwpKSxrdChyLGksdSl9dmFyIHQsZSxyLGksdTtqYS5wb2ludD1mdW5jdGlvbihvLGEpe3Q9byxlPWEsamEucG9pbnQ9bixvKj1Zbzt2YXIgbD1NYXRoLmNvcyhhKj1Zbyk7cj1sKk1hdGguY29zKG8pLGk9bCpNYXRoLnNpbihvKSx1PU1hdGguc2luKGEpLGt0KHIsaSx1KX0samEubGluZUVuZD1mdW5jdGlvbigpe24odCxlKSxqYS5saW5lRW5kPUV0LGphLnBvaW50PVN0fX1mdW5jdGlvbiBDdChuLHQpe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZT1uKGUsciksdChlWzBdLGVbMV0pfXJldHVybiBuLmludmVydCYmdC5pbnZlcnQmJihlLmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQuaW52ZXJ0KGUsciksZSYmbi5pbnZlcnQoZVswXSxlWzFdKX0pLGV9ZnVuY3Rpb24genQoKXtyZXR1cm4hMH1mdW5jdGlvbiBMdChuLHQsZSxyLGkpe3ZhciB1PVtdLG89W107aWYobi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKCEoKHQ9bi5sZW5ndGgtMSk8PTApKXt2YXIgdCxlPW5bMF0scj1uW3RdO2lmKHd0KGUscikpe2kubGluZVN0YXJ0KCk7Zm9yKHZhciBhPTA7dD5hOysrYSlpLnBvaW50KChlPW5bYV0pWzBdLGVbMV0pO3JldHVybiB2b2lkIGkubGluZUVuZCgpfXZhciBsPW5ldyBUdChlLG4sbnVsbCwhMCksYz1uZXcgVHQoZSxudWxsLGwsITEpO2wubz1jLHUucHVzaChsKSxvLnB1c2goYyksbD1uZXcgVHQocixuLG51bGwsITEpLGM9bmV3IFR0KHIsbnVsbCxsLCEwKSxsLm89Yyx1LnB1c2gobCksby5wdXNoKGMpfX0pLG8uc29ydCh0KSxxdCh1KSxxdChvKSx1Lmxlbmd0aCl7Zm9yKHZhciBhPTAsbD1lLGM9by5sZW5ndGg7Yz5hOysrYSlvW2FdLmU9bD0hbDtmb3IodmFyIGYscyxoPXVbMF07Oyl7Zm9yKHZhciBwPWgsZz0hMDtwLnY7KWlmKChwPXAubik9PT1oKXJldHVybjtmPXAueixpLmxpbmVTdGFydCgpO2Rve2lmKHAudj1wLm8udj0hMCxwLmUpe2lmKGcpZm9yKHZhciBhPTAsYz1mLmxlbmd0aDtjPmE7KythKWkucG9pbnQoKHM9ZlthXSlbMF0sc1sxXSk7ZWxzZSByKHAueCxwLm4ueCwxLGkpO3A9cC5ufWVsc2V7aWYoZyl7Zj1wLnAuejtmb3IodmFyIGE9Zi5sZW5ndGgtMTthPj0wOy0tYSlpLnBvaW50KChzPWZbYV0pWzBdLHNbMV0pfWVsc2UgcihwLngscC5wLngsLTEsaSk7cD1wLnB9cD1wLm8sZj1wLnosZz0hZ313aGlsZSghcC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIHF0KG4pe2lmKHQ9bi5sZW5ndGgpe2Zvcih2YXIgdCxlLHI9MCxpPW5bMF07KytyPHQ7KWkubj1lPW5bcl0sZS5wPWksaT1lO2kubj1lPW5bMF0sZS5wPWl9fWZ1bmN0aW9uIFR0KG4sdCxlLHIpe3RoaXMueD1uLHRoaXMuej10LHRoaXMubz1lLHRoaXMuZT1yLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gUnQobix0LGUscil7cmV0dXJuIGZ1bmN0aW9uKGksdSl7ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWkodCxlKTtuKHQ9clswXSxlPXJbMV0pJiZ1LnBvaW50KHQsZSl9ZnVuY3Rpb24gYShuLHQpe3ZhciBlPWkobix0KTtkLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gbCgpe20ucG9pbnQ9YSxkLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGMoKXttLnBvaW50PW8sZC5saW5lRW5kKCl9ZnVuY3Rpb24gZihuLHQpe3YucHVzaChbbix0XSk7dmFyIGU9aShuLHQpO3gucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBzKCl7eC5saW5lU3RhcnQoKSx2PVtdfWZ1bmN0aW9uIGgoKXtmKHZbMF1bMF0sdlswXVsxXSkseC5saW5lRW5kKCk7dmFyIG4sdD14LmNsZWFuKCksZT1NLmJ1ZmZlcigpLHI9ZS5sZW5ndGg7aWYodi5wb3AoKSxnLnB1c2godiksdj1udWxsLHIpaWYoMSZ0KXtuPWVbMF07dmFyIGkscj1uLmxlbmd0aC0xLG89LTE7aWYocj4wKXtmb3IoYnx8KHUucG9seWdvblN0YXJ0KCksYj0hMCksdS5saW5lU3RhcnQoKTsrK288cjspdS5wb2ludCgoaT1uW29dKVswXSxpWzFdKTt1LmxpbmVFbmQoKX19ZWxzZSByPjEmJjImdCYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpLHAucHVzaChlLmZpbHRlcihEdCkpfXZhciBwLGcsdixkPXQodSkseT1pLmludmVydChyWzBdLHJbMV0pLG09e3BvaW50Om8sbGluZVN0YXJ0OmwsbGluZUVuZDpjLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe20ucG9pbnQ9ZixtLmxpbmVTdGFydD1zLG0ubGluZUVuZD1oLHA9W10sZz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe20ucG9pbnQ9byxtLmxpbmVTdGFydD1sLG0ubGluZUVuZD1jLHA9YW8ubWVyZ2UocCk7dmFyIG49T3QoeSxnKTtwLmxlbmd0aD8oYnx8KHUucG9seWdvblN0YXJ0KCksYj0hMCksTHQocCxVdCxuLGUsdSkpOm4mJihifHwodS5wb2x5Z29uU3RhcnQoKSxiPSEwKSx1LmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsdSksdS5saW5lRW5kKCkpLGImJih1LnBvbHlnb25FbmQoKSxiPSExKSxwPWc9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7dS5wb2x5Z29uU3RhcnQoKSx1LmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsdSksdS5saW5lRW5kKCksdS5wb2x5Z29uRW5kKCl9fSxNPVB0KCkseD10KE0pLGI9ITE7cmV0dXJuIG19fWZ1bmN0aW9uIER0KG4pe3JldHVybiBuLmxlbmd0aD4xfWZ1bmN0aW9uIFB0KCl7dmFyIG4sdD1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5wdXNoKG49W10pfSxwb2ludDpmdW5jdGlvbih0LGUpe24ucHVzaChbdCxlXSl9LGxpbmVFbmQ6YixidWZmZXI6ZnVuY3Rpb24oKXt2YXIgZT10O3JldHVybiB0PVtdLG49bnVsbCxlfSxyZWpvaW46ZnVuY3Rpb24oKXt0Lmxlbmd0aD4xJiZ0LnB1c2godC5wb3AoKS5jb25jYXQodC5zaGlmdCgpKSl9fX1mdW5jdGlvbiBVdChuLHQpe3JldHVybigobj1uLngpWzBdPDA/blsxXS1Jby1VbzpJby1uWzFdKS0oKHQ9dC54KVswXTwwP3RbMV0tSW8tVW86SW8tdFsxXSl9ZnVuY3Rpb24ganQobil7dmFyIHQsZT1OYU4scj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe24ubGluZVN0YXJ0KCksdD0xfSxwb2ludDpmdW5jdGlvbih1LG8pe3ZhciBhPXU+MD9GbzotRm8sbD14byh1LWUpO3hvKGwtRm8pPFVvPyhuLnBvaW50KGUscj0ocitvKS8yPjA/SW86LUlvKSxuLnBvaW50KGksciksbi5saW5lRW5kKCksbi5saW5lU3RhcnQoKSxuLnBvaW50KGEsciksbi5wb2ludCh1LHIpLHQ9MCk6aSE9PWEmJmw+PUZvJiYoeG8oZS1pKTxVbyYmKGUtPWkqVW8pLHhvKHUtYSk8VW8mJih1LT1hKlVvKSxyPUZ0KGUscix1LG8pLG4ucG9pbnQoaSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQoYSxyKSx0PTApLG4ucG9pbnQoZT11LHI9byksaT1hfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5saW5lRW5kKCksZT1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi10fX19ZnVuY3Rpb24gRnQobix0LGUscil7dmFyIGksdSxvPU1hdGguc2luKG4tZSk7cmV0dXJuIHhvKG8pPlVvP01hdGguYXRhbigoTWF0aC5zaW4odCkqKHU9TWF0aC5jb3MocikpKk1hdGguc2luKGUpLU1hdGguc2luKHIpKihpPU1hdGguY29zKHQpKSpNYXRoLnNpbihuKSkvKGkqdSpvKSk6KHQrcikvMn1mdW5jdGlvbiBIdChuLHQsZSxyKXt2YXIgaTtpZihudWxsPT1uKWk9ZSpJbyxyLnBvaW50KC1GbyxpKSxyLnBvaW50KDAsaSksci5wb2ludChGbyxpKSxyLnBvaW50KEZvLDApLHIucG9pbnQoRm8sLWkpLHIucG9pbnQoMCwtaSksci5wb2ludCgtRm8sLWkpLHIucG9pbnQoLUZvLDApLHIucG9pbnQoLUZvLGkpO2Vsc2UgaWYoeG8oblswXS10WzBdKT5Vbyl7dmFyIHU9blswXTx0WzBdP0ZvOi1GbztpPWUqdS8yLHIucG9pbnQoLXUsaSksci5wb2ludCgwLGkpLHIucG9pbnQodSxpKX1lbHNlIHIucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBPdChuLHQpe3ZhciBlPW5bMF0scj1uWzFdLGk9W01hdGguc2luKGUpLC1NYXRoLmNvcyhlKSwwXSx1PTAsbz0wO2thLnJlc2V0KCk7Zm9yKHZhciBhPTAsbD10Lmxlbmd0aDtsPmE7KythKXt2YXIgYz10W2FdLGY9Yy5sZW5ndGg7aWYoZilmb3IodmFyIHM9Y1swXSxoPXNbMF0scD1zWzFdLzIrRm8vNCxnPU1hdGguc2luKHApLHY9TWF0aC5jb3MocCksZD0xOzspe2Q9PT1mJiYoZD0wKSxuPWNbZF07dmFyIHk9blswXSxtPW5bMV0vMitGby80LE09TWF0aC5zaW4obSkseD1NYXRoLmNvcyhtKSxiPXktaCxfPWI+PTA/MTotMSx3PV8qYixTPXc+Rm8saz1nKk07aWYoa2EuYWRkKE1hdGguYXRhbjIoaypfKk1hdGguc2luKHcpLHYqeCtrKk1hdGguY29zKHcpKSksdSs9Uz9iK18qSG86YixTXmg+PWVeeT49ZSl7dmFyIE49bXQoZHQocyksZHQobikpO2J0KE4pO3ZhciBFPW10KGksTik7YnQoRSk7dmFyIEE9KFNeYj49MD8tMToxKSp0bihFWzJdKTsocj5BfHxyPT09QSYmKE5bMF18fE5bMV0pKSYmKG8rPVNeYj49MD8xOi0xKX1pZighZCsrKWJyZWFrO2g9eSxnPU0sdj14LHM9bn19cmV0dXJuKC1Vbz51fHxVbz51JiYtVW8+a2EpXjEmb31mdW5jdGlvbiBJdChuKXtmdW5jdGlvbiB0KG4sdCl7cmV0dXJuIE1hdGguY29zKG4pKk1hdGguY29zKHQpPnV9ZnVuY3Rpb24gZShuKXt2YXIgZSx1LGwsYyxmO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtjPWw9ITEsZj0xfSxwb2ludDpmdW5jdGlvbihzLGgpe3ZhciBwLGc9W3MsaF0sdj10KHMsaCksZD1vP3Y/MDppKHMsaCk6dj9pKHMrKDA+cz9GbzotRm8pLGgpOjA7aWYoIWUmJihjPWw9dikmJm4ubGluZVN0YXJ0KCksdiE9PWwmJihwPXIoZSxnKSwod3QoZSxwKXx8d3QoZyxwKSkmJihnWzBdKz1VbyxnWzFdKz1Vbyx2PXQoZ1swXSxnWzFdKSkpLHYhPT1sKWY9MCx2PyhuLmxpbmVTdGFydCgpLHA9cihnLGUpLG4ucG9pbnQocFswXSxwWzFdKSk6KHA9cihlLGcpLG4ucG9pbnQocFswXSxwWzFdKSxuLmxpbmVFbmQoKSksZT1wO2Vsc2UgaWYoYSYmZSYmb152KXt2YXIgeTtkJnV8fCEoeT1yKGcsZSwhMCkpfHwoZj0wLG8/KG4ubGluZVN0YXJ0KCksbi5wb2ludCh5WzBdWzBdLHlbMF1bMV0pLG4ucG9pbnQoeVsxXVswXSx5WzFdWzFdKSxuLmxpbmVFbmQoKSk6KG4ucG9pbnQoeVsxXVswXSx5WzFdWzFdKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQoeVswXVswXSx5WzBdWzFdKSkpfSF2fHxlJiZ3dChlLGcpfHxuLnBvaW50KGdbMF0sZ1sxXSksZT1nLGw9dix1PWR9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZuLmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGZ8KGMmJmwpPDwxfX19ZnVuY3Rpb24gcihuLHQsZSl7dmFyIHI9ZHQobiksaT1kdCh0KSxvPVsxLDAsMF0sYT1tdChyLGkpLGw9eXQoYSxhKSxjPWFbMF0sZj1sLWMqYztpZighZilyZXR1cm4hZSYmbjt2YXIgcz11KmwvZixoPS11KmMvZixwPW10KG8sYSksZz14dChvLHMpLHY9eHQoYSxoKTtNdChnLHYpO3ZhciBkPXAseT15dChnLGQpLG09eXQoZCxkKSxNPXkqeS1tKih5dChnLGcpLTEpO2lmKCEoMD5NKSl7dmFyIHg9TWF0aC5zcXJ0KE0pLGI9eHQoZCwoLXkteCkvbSk7aWYoTXQoYixnKSxiPV90KGIpLCFlKXJldHVybiBiO3ZhciBfLHc9blswXSxTPXRbMF0saz1uWzFdLE49dFsxXTt3PlMmJihfPXcsdz1TLFM9Xyk7dmFyIEU9Uy13LEE9eG8oRS1Gbyk8VW8sQz1BfHxVbz5FO2lmKCFBJiZrPk4mJihfPWssaz1OLE49XyksQz9BP2srTj4wXmJbMV08KHhvKGJbMF0tdyk8VW8/azpOKTprPD1iWzFdJiZiWzFdPD1OOkU+Rm9eKHc8PWJbMF0mJmJbMF08PVMpKXt2YXIgej14dChkLCgteSt4KS9tKTtyZXR1cm4gTXQoeixnKSxbYixfdCh6KV19fX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9bz9uOkZvLW4saT0wO3JldHVybi1yPnQ/aXw9MTp0PnImJihpfD0yKSwtcj5lP2l8PTQ6ZT5yJiYoaXw9OCksaX12YXIgdT1NYXRoLmNvcyhuKSxvPXU+MCxhPXhvKHUpPlVvLGw9dmUobiw2KllvKTtyZXR1cm4gUnQodCxlLGwsbz9bMCwtbl06Wy1GbyxuLUZvXSl9ZnVuY3Rpb24gWXQobix0LGUscil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciB1LG89aS5hLGE9aS5iLGw9by54LGM9by55LGY9YS54LHM9YS55LGg9MCxwPTEsZz1mLWwsdj1zLWM7aWYodT1uLWwsZ3x8ISh1PjApKXtpZih1Lz1nLDA+Zyl7aWYoaD51KXJldHVybjtwPnUmJihwPXUpfWVsc2UgaWYoZz4wKXtpZih1PnApcmV0dXJuO3U+aCYmKGg9dSl9aWYodT1lLWwsZ3x8ISgwPnUpKXtpZih1Lz1nLDA+Zyl7aWYodT5wKXJldHVybjt1PmgmJihoPXUpfWVsc2UgaWYoZz4wKXtpZihoPnUpcmV0dXJuO3A+dSYmKHA9dSl9aWYodT10LWMsdnx8ISh1PjApKXtpZih1Lz12LDA+dil7aWYoaD51KXJldHVybjtwPnUmJihwPXUpfWVsc2UgaWYodj4wKXtpZih1PnApcmV0dXJuO3U+aCYmKGg9dSl9aWYodT1yLWMsdnx8ISgwPnUpKXtpZih1Lz12LDA+dil7aWYodT5wKXJldHVybjt1PmgmJihoPXUpfWVsc2UgaWYodj4wKXtpZihoPnUpcmV0dXJuO3A+dSYmKHA9dSl9cmV0dXJuIGg+MCYmKGkuYT17eDpsK2gqZyx5OmMraCp2fSksMT5wJiYoaS5iPXt4OmwrcCpnLHk6YytwKnZ9KSxpfX19fX19ZnVuY3Rpb24gWnQobix0LGUscil7ZnVuY3Rpb24gaShyLGkpe3JldHVybiB4byhyWzBdLW4pPFVvP2k+MD8wOjM6eG8oclswXS1lKTxVbz9pPjA/MjoxOnhvKHJbMV0tdCk8VW8/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIHUobix0KXtyZXR1cm4gbyhuLngsdC54KX1mdW5jdGlvbiBvKG4sdCl7dmFyIGU9aShuLDEpLHI9aSh0LDEpO3JldHVybiBlIT09cj9lLXI6MD09PWU/dFsxXS1uWzFdOjE9PT1lP25bMF0tdFswXToyPT09ZT9uWzFdLXRbMV06dFswXS1uWzBdfXJldHVybiBmdW5jdGlvbihhKXtmdW5jdGlvbiBsKG4pe2Zvcih2YXIgdD0wLGU9ZC5sZW5ndGgscj1uWzFdLGk9MDtlPmk7KytpKWZvcih2YXIgdSxvPTEsYT1kW2ldLGw9YS5sZW5ndGgsYz1hWzBdO2w+bzsrK28pdT1hW29dLGNbMV08PXI/dVsxXT5yJiZRKGMsdSxuKT4wJiYrK3Q6dVsxXTw9ciYmUShjLHUsbik8MCYmLS10LGM9dTtyZXR1cm4gMCE9PXR9ZnVuY3Rpb24gYyh1LGEsbCxjKXt2YXIgZj0wLHM9MDtpZihudWxsPT11fHwoZj1pKHUsbCkpIT09KHM9aShhLGwpKXx8byh1LGEpPDBebD4wKXtkbyBjLnBvaW50KDA9PT1mfHwzPT09Zj9uOmUsZj4xP3I6dCk7d2hpbGUoKGY9KGYrbCs0KSU0KSE9PXMpfWVsc2UgYy5wb2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIGYoaSx1KXtyZXR1cm4gaT49biYmZT49aSYmdT49dCYmcj49dX1mdW5jdGlvbiBzKG4sdCl7ZihuLHQpJiZhLnBvaW50KG4sdCl9ZnVuY3Rpb24gaCgpe0MucG9pbnQ9ZyxkJiZkLnB1c2goeT1bXSksUz0hMCx3PSExLGI9Xz1OYU59ZnVuY3Rpb24gcCgpe3YmJihnKG0sTSkseCYmdyYmRS5yZWpvaW4oKSx2LnB1c2goRS5idWZmZXIoKSkpLEMucG9pbnQ9cyx3JiZhLmxpbmVFbmQoKX1mdW5jdGlvbiBnKG4sdCl7bj1NYXRoLm1heCgtSGEsTWF0aC5taW4oSGEsbikpLHQ9TWF0aC5tYXgoLUhhLE1hdGgubWluKEhhLHQpKTt2YXIgZT1mKG4sdCk7aWYoZCYmeS5wdXNoKFtuLHRdKSxTKW09bixNPXQseD1lLFM9ITEsZSYmKGEubGluZVN0YXJ0KCksYS5wb2ludChuLHQpKTtlbHNlIGlmKGUmJncpYS5wb2ludChuLHQpO2Vsc2V7dmFyIHI9e2E6e3g6Yix5Ol99LGI6e3g6bix5OnR9fTtBKHIpPyh3fHwoYS5saW5lU3RhcnQoKSxhLnBvaW50KHIuYS54LHIuYS55KSksYS5wb2ludChyLmIueCxyLmIueSksZXx8YS5saW5lRW5kKCksaz0hMSk6ZSYmKGEubGluZVN0YXJ0KCksYS5wb2ludChuLHQpLGs9ITEpfWI9bixfPXQsdz1lfXZhciB2LGQseSxtLE0seCxiLF8sdyxTLGssTj1hLEU9UHQoKSxBPVl0KG4sdCxlLHIpLEM9e3BvaW50OnMsbGluZVN0YXJ0OmgsbGluZUVuZDpwLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2E9RSx2PVtdLGQ9W10saz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2E9Tix2PWFvLm1lcmdlKHYpO3ZhciB0PWwoW24scl0pLGU9ayYmdCxpPXYubGVuZ3RoOyhlfHxpKSYmKGEucG9seWdvblN0YXJ0KCksZSYmKGEubGluZVN0YXJ0KCksYyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksaSYmTHQodix1LHQsYyxhKSxhLnBvbHlnb25FbmQoKSksdj1kPXk9bnVsbH19O3JldHVybiBDfX1mdW5jdGlvbiBWdChuKXt2YXIgdD0wLGU9Rm8vMyxyPWFlKG4pLGk9cih0LGUpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9blswXSpGby8xODAsZT1uWzFdKkZvLzE4MCk6W3QvRm8qMTgwLGUvRm8qMTgwXX0saX1mdW5jdGlvbiBYdChuLHQpe2Z1bmN0aW9uIGUobix0KXt2YXIgZT1NYXRoLnNxcnQodS0yKmkqTWF0aC5zaW4odCkpL2k7cmV0dXJuW2UqTWF0aC5zaW4obio9aSksby1lKk1hdGguY29zKG4pXX12YXIgcj1NYXRoLnNpbihuKSxpPShyK01hdGguc2luKHQpKS8yLHU9MStyKigyKmktciksbz1NYXRoLnNxcnQodSkvaTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1vLXQ7cmV0dXJuW01hdGguYXRhbjIobixlKS9pLHRuKCh1LShuKm4rZSplKSppKmkpLygyKmkpKV19LGV9ZnVuY3Rpb24gJHQoKXtmdW5jdGlvbiBuKG4sdCl7SWErPWkqbi1yKnQscj1uLGk9dH12YXIgdCxlLHIsaTskYS5wb2ludD1mdW5jdGlvbih1LG8peyRhLnBvaW50PW4sdD1yPXUsZT1pPW99LCRhLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1bmN0aW9uIEJ0KG4sdCl7WWE+biYmKFlhPW4pLG4+VmEmJihWYT1uKSxaYT50JiYoWmE9dCksdD5YYSYmKFhhPXQpfWZ1bmN0aW9uIFd0KCl7ZnVuY3Rpb24gbihuLHQpe28ucHVzaCgiTSIsbiwiLCIsdCx1KX1mdW5jdGlvbiB0KG4sdCl7by5wdXNoKCJNIixuLCIsIix0KSxhLnBvaW50PWV9ZnVuY3Rpb24gZShuLHQpe28ucHVzaCgiTCIsbiwiLCIsdCl9ZnVuY3Rpb24gcigpe2EucG9pbnQ9bn1mdW5jdGlvbiBpKCl7by5wdXNoKCJaIil9dmFyIHU9SnQoNC41KSxvPVtdLGE9e3BvaW50Om4sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD10fSxsaW5lRW5kOnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9cixhLnBvaW50PW59LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiB1PUp0KG4pLGF9LHJlc3VsdDpmdW5jdGlvbigpe2lmKG8ubGVuZ3RoKXt2YXIgbj1vLmpvaW4oIiIpO3JldHVybiBvPVtdLG59fX07cmV0dXJuIGF9ZnVuY3Rpb24gSnQobil7cmV0dXJuIm0wLCIrbisiYSIrbisiLCIrbisiIDAgMSwxIDAsIistMipuKyJhIituKyIsIituKyIgMCAxLDEgMCwiKzIqbisieiJ9ZnVuY3Rpb24gR3Qobix0KXtDYSs9bix6YSs9dCwrK0xhfWZ1bmN0aW9uIEt0KCl7ZnVuY3Rpb24gbihuLHIpe3ZhciBpPW4tdCx1PXItZSxvPU1hdGguc3FydChpKmkrdSp1KTtxYSs9byoodCtuKS8yLFRhKz1vKihlK3IpLzIsUmErPW8sR3QodD1uLGU9cil9dmFyIHQsZTtXYS5wb2ludD1mdW5jdGlvbihyLGkpe1dhLnBvaW50PW4sR3QodD1yLGU9aSl9fWZ1bmN0aW9uIFF0KCl7V2EucG9pbnQ9R3R9ZnVuY3Rpb24gbmUoKXtmdW5jdGlvbiBuKG4sdCl7dmFyIGU9bi1yLHU9dC1pLG89TWF0aC5zcXJ0KGUqZSt1KnUpO3FhKz1vKihyK24pLzIsVGErPW8qKGkrdCkvMixSYSs9byxvPWkqbi1yKnQsRGErPW8qKHIrbiksUGErPW8qKGkrdCksVWErPTMqbyxHdChyPW4saT10KX12YXIgdCxlLHIsaTtXYS5wb2ludD1mdW5jdGlvbih1LG8pe1dhLnBvaW50PW4sR3QodD1yPXUsZT1pPW8pfSxXYS5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiB0ZShuKXtmdW5jdGlvbiB0KHQsZSl7bi5tb3ZlVG8odCtvLGUpLG4uYXJjKHQsZSxvLDAsSG8pfWZ1bmN0aW9uIGUodCxlKXtuLm1vdmVUbyh0LGUpLGEucG9pbnQ9cn1mdW5jdGlvbiByKHQsZSl7bi5saW5lVG8odCxlKX1mdW5jdGlvbiBpKCl7YS5wb2ludD10fWZ1bmN0aW9uIHUoKXtuLmNsb3NlUGF0aCgpfXZhciBvPTQuNSxhPXtwb2ludDp0LGxpbmVTdGFydDpmdW5jdGlvbigpe2EucG9pbnQ9ZX0sbGluZUVuZDppLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2EubGluZUVuZD11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YS5saW5lRW5kPWksYS5wb2ludD10fSxwb2ludFJhZGl1czpmdW5jdGlvbihuKXtyZXR1cm4gbz1uLGF9LHJlc3VsdDpifTtyZXR1cm4gYX1mdW5jdGlvbiBlZShuKXtmdW5jdGlvbiB0KG4pe3JldHVybihhP3I6ZSkobil9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdWUodCxmdW5jdGlvbihlLHIpe2U9bihlLHIpLHQucG9pbnQoZVswXSxlWzFdKX0pfWZ1bmN0aW9uIHIodCl7ZnVuY3Rpb24gZShlLHIpe2U9bihlLHIpLHQucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiByKCl7TT1OYU4sUy5wb2ludD11LHQubGluZVN0YXJ0KCl9ZnVuY3Rpb24gdShlLHIpe3ZhciB1PWR0KFtlLHJdKSxvPW4oZSxyKTtpKE0seCxtLGIsXyx3LE09b1swXSx4PW9bMV0sbT1lLGI9dVswXSxfPXVbMV0sdz11WzJdLGEsdCksdC5wb2ludChNLHgpfWZ1bmN0aW9uIG8oKXtTLnBvaW50PWUsdC5saW5lRW5kKCl9ZnVuY3Rpb24gbCgpewpyKCksUy5wb2ludD1jLFMubGluZUVuZD1mfWZ1bmN0aW9uIGMobix0KXt1KHM9bixoPXQpLHA9TSxnPXgsdj1iLGQ9Xyx5PXcsUy5wb2ludD11fWZ1bmN0aW9uIGYoKXtpKE0seCxtLGIsXyx3LHAsZyxzLHYsZCx5LGEsdCksUy5saW5lRW5kPW8sbygpfXZhciBzLGgscCxnLHYsZCx5LG0sTSx4LGIsXyx3LFM9e3BvaW50OmUsbGluZVN0YXJ0OnIsbGluZUVuZDpvLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksUy5saW5lU3RhcnQ9bH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGluZVN0YXJ0PXJ9fTtyZXR1cm4gU31mdW5jdGlvbiBpKHQsZSxyLGEsbCxjLGYscyxoLHAsZyx2LGQseSl7dmFyIG09Zi10LE09cy1lLHg9bSptK00qTTtpZih4PjQqdSYmZC0tKXt2YXIgYj1hK3AsXz1sK2csdz1jK3YsUz1NYXRoLnNxcnQoYipiK18qXyt3KncpLGs9TWF0aC5hc2luKHcvPVMpLE49eG8oeG8odyktMSk8VW98fHhvKHItaCk8VW8/KHIraCkvMjpNYXRoLmF0YW4yKF8sYiksRT1uKE4sayksQT1FWzBdLEM9RVsxXSx6PUEtdCxMPUMtZSxxPU0qei1tKkw7KHEqcS94PnV8fHhvKChtKnorTSpMKS94LS41KT4uM3x8bz5hKnArbCpnK2MqdikmJihpKHQsZSxyLGEsbCxjLEEsQyxOLGIvPVMsXy89Uyx3LGQseSkseS5wb2ludChBLEMpLGkoQSxDLE4sYixfLHcsZixzLGgscCxnLHYsZCx5KSl9fXZhciB1PS41LG89TWF0aC5jb3MoMzAqWW8pLGE9MTY7cmV0dXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSh1PW4qbik+MCYmMTYsdCk6TWF0aC5zcXJ0KHUpfSx0fWZ1bmN0aW9uIHJlKG4pe3ZhciB0PWVlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oW3QqWm8sZSpab10pfSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBsZSh0KG4pKX19ZnVuY3Rpb24gaWUobil7dGhpcy5zdHJlYW09bn1mdW5jdGlvbiB1ZShuLHQpe3JldHVybntwb2ludDp0LHNwaGVyZTpmdW5jdGlvbigpe24uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpfX19ZnVuY3Rpb24gb2Uobil7cmV0dXJuIGFlKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSgpfWZ1bmN0aW9uIGFlKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuIG49YShuWzBdKllvLG5bMV0qWW8pLFtuWzBdKmgrbCxjLW5bMV0qaF19ZnVuY3Rpb24gZShuKXtyZXR1cm4gbj1hLmludmVydCgoblswXS1sKS9oLChjLW5bMV0pL2gpLG4mJltuWzBdKlpvLG5bMV0qWm9dfWZ1bmN0aW9uIHIoKXthPUN0KG89c2UoeSxNLHgpLHUpO3ZhciBuPXUodixkKTtyZXR1cm4gbD1wLW5bMF0qaCxjPWcrblsxXSpoLGkoKX1mdW5jdGlvbiBpKCl7cmV0dXJuIGYmJihmLnZhbGlkPSExLGY9bnVsbCksdH12YXIgdSxvLGEsbCxjLGYscz1lZShmdW5jdGlvbihuLHQpe3JldHVybiBuPXUobix0KSxbblswXSpoK2wsYy1uWzFdKmhdfSksaD0xNTAscD00ODAsZz0yNTAsdj0wLGQ9MCx5PTAsTT0wLHg9MCxiPUZhLF89bSx3PW51bGwsUz1udWxsO3JldHVybiB0LnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gZiYmKGYudmFsaWQ9ITEpLGY9bGUoYihvLHMoXyhuKSkpKSxmLnZhbGlkPSEwLGZ9LHQuY2xpcEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPW51bGw9PW4/KHc9bixGYSk6SXQoKHc9K24pKllvKSxpKCkpOnd9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1uLF89bj9adChuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdKTptLGkoKSk6U30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPStuWzBdLGc9K25bMV0scigpKTpbcCxnXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9blswXSUzNjAqWW8sZD1uWzFdJTM2MCpZbyxyKCkpOlt2KlpvLGQqWm9dfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT1uWzBdJTM2MCpZbyxNPW5bMV0lMzYwKllvLHg9bi5sZW5ndGg+Mj9uWzJdJTM2MCpZbzowLHIoKSk6W3kqWm8sTSpabyx4KlpvXX0sYW8ucmViaW5kKHQscywicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gdT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmludmVydD11LmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIGxlKG4pe3JldHVybiB1ZShuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KllvLGUqWW8pfSl9ZnVuY3Rpb24gY2Uobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBmZShuLHQpe3JldHVybltuPkZvP24tSG86LUZvPm4/bitIbzpuLHRdfWZ1bmN0aW9uIHNlKG4sdCxlKXtyZXR1cm4gbj90fHxlP0N0KHBlKG4pLGdlKHQsZSkpOnBlKG4pOnR8fGU/Z2UodCxlKTpmZX1mdW5jdGlvbiBoZShuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gdCs9bixbdD5Gbz90LUhvOi1Gbz50P3QrSG86dCxlXX19ZnVuY3Rpb24gcGUobil7dmFyIHQ9aGUobik7cmV0dXJuIHQuaW52ZXJ0PWhlKC1uKSx0fWZ1bmN0aW9uIGdlKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5jb3MobikqZSxsPU1hdGguc2luKG4pKmUsYz1NYXRoLnNpbih0KSxmPWMqcithKmk7cmV0dXJuW01hdGguYXRhbjIobCp1LWYqbyxhKnItYyppKSx0bihmKnUrbCpvKV19dmFyIHI9TWF0aC5jb3MobiksaT1NYXRoLnNpbihuKSx1PU1hdGguY29zKHQpLG89TWF0aC5zaW4odCk7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9TWF0aC5jb3ModCksYT1NYXRoLmNvcyhuKSplLGw9TWF0aC5zaW4obikqZSxjPU1hdGguc2luKHQpLGY9Yyp1LWwqbztyZXR1cm5bTWF0aC5hdGFuMihsKnUrYypvLGEqcitmKmkpLHRuKGYqci1hKmkpXX0sZX1mdW5jdGlvbiB2ZShuLHQpe3ZhciBlPU1hdGguY29zKG4pLHI9TWF0aC5zaW4obik7cmV0dXJuIGZ1bmN0aW9uKGksdSxvLGEpe3ZhciBsPW8qdDtudWxsIT1pPyhpPWRlKGUsaSksdT1kZShlLHUpLChvPjA/dT5pOmk+dSkmJihpKz1vKkhvKSk6KGk9bitvKkhvLHU9bi0uNSpsKTtmb3IodmFyIGMsZj1pO28+MD9mPnU6dT5mO2YtPWwpYS5wb2ludCgoYz1fdChbZSwtcipNYXRoLmNvcyhmKSwtcipNYXRoLnNpbihmKV0pKVswXSxjWzFdKX19ZnVuY3Rpb24gZGUobix0KXt2YXIgZT1kdCh0KTtlWzBdLT1uLGJ0KGUpO3ZhciByPW5uKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLVVvKSUoMipNYXRoLlBJKX1mdW5jdGlvbiB5ZShuLHQsZSl7dmFyIHI9YW8ucmFuZ2Uobix0LVVvLGUpLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIG1lKG4sdCxlKXt2YXIgcj1hby5yYW5nZShuLHQtVW8sZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gTWUobil7cmV0dXJuIG4uc291cmNlfWZ1bmN0aW9uIHhlKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlvbiBiZShuLHQsZSxyKXt2YXIgaT1NYXRoLmNvcyh0KSx1PU1hdGguc2luKHQpLG89TWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxsPWkqTWF0aC5jb3MobiksYz1pKk1hdGguc2luKG4pLGY9bypNYXRoLmNvcyhlKSxzPW8qTWF0aC5zaW4oZSksaD0yKk1hdGguYXNpbihNYXRoLnNxcnQob24oci10KStpKm8qb24oZS1uKSkpLHA9MS9NYXRoLnNpbihoKSxnPWg/ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zaW4obio9aCkqcCxlPU1hdGguc2luKGgtbikqcCxyPWUqbCt0KmYsaT1lKmMrdCpzLG89ZSp1K3QqYTtyZXR1cm5bTWF0aC5hdGFuMihpLHIpKlpvLE1hdGguYXRhbjIobyxNYXRoLnNxcnQocipyK2kqaSkpKlpvXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipabyx0KlpvXX07cmV0dXJuIGcuZGlzdGFuY2U9aCxnfWZ1bmN0aW9uIF9lKCl7ZnVuY3Rpb24gbihuLGkpe3ZhciB1PU1hdGguc2luKGkqPVlvKSxvPU1hdGguY29zKGkpLGE9eG8oKG4qPVlvKS10KSxsPU1hdGguY29zKGEpO0phKz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYT1vKk1hdGguc2luKGEpKSphKyhhPXIqdS1lKm8qbCkqYSksZSp1K3IqbypsKSx0PW4sZT11LHI9b312YXIgdCxlLHI7R2EucG9pbnQ9ZnVuY3Rpb24oaSx1KXt0PWkqWW8sZT1NYXRoLnNpbih1Kj1Zbykscj1NYXRoLmNvcyh1KSxHYS5wb2ludD1ufSxHYS5saW5lRW5kPWZ1bmN0aW9uKCl7R2EucG9pbnQ9R2EubGluZUVuZD1ifX1mdW5jdGlvbiB3ZShuLHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxpPU1hdGguY29zKGUpLHU9bihyKmkpO3JldHVyblt1KmkqTWF0aC5zaW4odCksdSpNYXRoLnNpbihlKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sZSl7dmFyIHI9TWF0aC5zcXJ0KG4qbitlKmUpLGk9dChyKSx1PU1hdGguc2luKGkpLG89TWF0aC5jb3MoaSk7cmV0dXJuW01hdGguYXRhbjIobip1LHIqbyksTWF0aC5hc2luKHImJmUqdS9yKV19LGV9ZnVuY3Rpb24gU2Uobix0KXtmdW5jdGlvbiBlKG4sdCl7bz4wPy1JbytVbz50JiYodD0tSW8rVW8pOnQ+SW8tVW8mJih0PUlvLVVvKTt2YXIgZT1vL01hdGgucG93KGkodCksdSk7cmV0dXJuW2UqTWF0aC5zaW4odSpuKSxvLWUqTWF0aC5jb3ModSpuKV19dmFyIHI9TWF0aC5jb3MobiksaT1mdW5jdGlvbihuKXtyZXR1cm4gTWF0aC50YW4oRm8vNCtuLzIpfSx1PW49PT10P01hdGguc2luKG4pOk1hdGgubG9nKHIvTWF0aC5jb3ModCkpL01hdGgubG9nKGkodCkvaShuKSksbz1yKk1hdGgucG93KGkobiksdSkvdTtyZXR1cm4gdT8oZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1vLXQscj1LKHUpKk1hdGguc3FydChuKm4rZSplKTtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsMipNYXRoLmF0YW4oTWF0aC5wb3coby9yLDEvdSkpLUlvXX0sZSk6TmV9ZnVuY3Rpb24ga2Uobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9dS10O3JldHVybltlKk1hdGguc2luKGkqbiksdS1lKk1hdGguY29zKGkqbildfXZhciByPU1hdGguY29zKG4pLGk9bj09PXQ/TWF0aC5zaW4obik6KHItTWF0aC5jb3ModCkpLyh0LW4pLHU9ci9pK247cmV0dXJuIHhvKGkpPFVvP2NlOihlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPXUtdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL2ksdS1LKGkpKk1hdGguc3FydChuKm4rZSplKV19LGUpfWZ1bmN0aW9uIE5lKG4sdCl7cmV0dXJuW24sTWF0aC5sb2coTWF0aC50YW4oRm8vNCt0LzIpKV19ZnVuY3Rpb24gRWUobil7dmFyIHQsZT1vZShuKSxyPWUuc2NhbGUsaT1lLnRyYW5zbGF0ZSx1PWUuY2xpcEV4dGVudDtyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIG49aS5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3ZhciBvPXUuYXBwbHkoZSxhcmd1bWVudHMpO2lmKG89PT1lKXtpZih0PW51bGw9PW4pe3ZhciBhPUZvKnIoKSxsPWkoKTt1KFtbbFswXS1hLGxbMV0tYV0sW2xbMF0rYSxsWzFdK2FdXSl9fWVsc2UgdCYmKG89bnVsbCk7cmV0dXJuIG99LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBBZShuLHQpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihGby80K3QvMikpLC1uXX1mdW5jdGlvbiBDZShuKXtyZXR1cm4gblswXX1mdW5jdGlvbiB6ZShuKXtyZXR1cm4gblsxXX1mdW5jdGlvbiBMZShuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1bMCwxXSxyPTIsaT0yO3Q+aTtpKyspe2Zvcig7cj4xJiZRKG5bZVtyLTJdXSxuW2Vbci0xXV0sbltpXSk8PTA7KS0tcjtlW3IrK109aX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIHFlKG4sdCl7cmV0dXJuIG5bMF0tdFswXXx8blsxXS10WzFdfWZ1bmN0aW9uIFRlKG4sdCxlKXtyZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKTwoZVsxXS10WzFdKSooblswXS10WzBdKX1mdW5jdGlvbiBSZShuLHQsZSxyKXt2YXIgaT1uWzBdLHU9ZVswXSxvPXRbMF0taSxhPXJbMF0tdSxsPW5bMV0sYz1lWzFdLGY9dFsxXS1sLHM9clsxXS1jLGg9KGEqKGwtYyktcyooaS11KSkvKHMqby1hKmYpO3JldHVybltpK2gqbyxsK2gqZl19ZnVuY3Rpb24gRGUobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJuISh0WzBdLWVbMF18fHRbMV0tZVsxXSl9ZnVuY3Rpb24gUGUoKXtycih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gVWUobil7dmFyIHQ9Y2wucG9wKCl8fG5ldyBQZTtyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBqZShuKXtCZShuKSxvbC5yZW1vdmUobiksY2wucHVzaChuKSxycihuKX1mdW5jdGlvbiBGZShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxyPXQuY3ksaT17eDplLHk6cn0sdT1uLlAsbz1uLk4sYT1bbl07amUobik7Zm9yKHZhciBsPXU7bC5jaXJjbGUmJnhvKGUtbC5jaXJjbGUueCk8VW8mJnhvKHItbC5jaXJjbGUuY3kpPFVvOyl1PWwuUCxhLnVuc2hpZnQobCksamUobCksbD11O2EudW5zaGlmdChsKSxCZShsKTtmb3IodmFyIGM9bztjLmNpcmNsZSYmeG8oZS1jLmNpcmNsZS54KTxVbyYmeG8oci1jLmNpcmNsZS5jeSk8VW87KW89Yy5OLGEucHVzaChjKSxqZShjKSxjPW87YS5wdXNoKGMpLEJlKGMpO3ZhciBmLHM9YS5sZW5ndGg7Zm9yKGY9MTtzPmY7KytmKWM9YVtmXSxsPWFbZi0xXSxucihjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPWFbMF0sYz1hW3MtMV0sYy5lZGdlPUtlKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSwkZShsKSwkZShjKX1mdW5jdGlvbiBIZShuKXtmb3IodmFyIHQsZSxyLGksdT1uLngsbz1uLnksYT1vbC5fO2E7KWlmKHI9T2UoYSxvKS11LHI+VW8pYT1hLkw7ZWxzZXtpZihpPXUtSWUoYSxvKSwhKGk+VW8pKXtyPi1Vbz8odD1hLlAsZT1hKTppPi1Vbz8odD1hLGU9YS5OKTp0PWU9YTticmVha31pZighYS5SKXt0PWE7YnJlYWt9YT1hLlJ9dmFyIGw9VWUobik7aWYob2wuaW5zZXJ0KHQsbCksdHx8ZSl7aWYodD09PWUpcmV0dXJuIEJlKHQpLGU9VWUodC5zaXRlKSxvbC5pbnNlcnQobCxlKSxsLmVkZ2U9ZS5lZGdlPUtlKHQuc2l0ZSxsLnNpdGUpLCRlKHQpLHZvaWQgJGUoZSk7aWYoIWUpcmV0dXJuIHZvaWQobC5lZGdlPUtlKHQuc2l0ZSxsLnNpdGUpKTtCZSh0KSxCZShlKTt2YXIgYz10LnNpdGUsZj1jLngscz1jLnksaD1uLngtZixwPW4ueS1zLGc9ZS5zaXRlLHY9Zy54LWYsZD1nLnktcyx5PTIqKGgqZC1wKnYpLG09aCpoK3AqcCxNPXYqditkKmQseD17eDooZCptLXAqTSkveStmLHk6KGgqTS12Km0pL3krc307bnIoZS5lZGdlLGMsZyx4KSxsLmVkZ2U9S2UoYyxuLG51bGwseCksZS5lZGdlPUtlKG4sZyxudWxsLHgpLCRlKHQpLCRlKGUpfX1mdW5jdGlvbiBPZShuLHQpe3ZhciBlPW4uc2l0ZSxyPWUueCxpPWUueSx1PWktdDtpZighdSlyZXR1cm4gcjt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLSgxLzApO2U9by5zaXRlO3ZhciBhPWUueCxsPWUueSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgZj1hLXIscz0xL3UtMS9jLGg9Zi9jO3JldHVybiBzPygtaCtNYXRoLnNxcnQoaCpoLTIqcyooZipmLygtMipjKS1sK2MvMitpLXUvMikpKS9zK3I6KHIrYSkvMn1mdW5jdGlvbiBJZShuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBPZShlLHQpO3ZhciByPW4uc2l0ZTtyZXR1cm4gci55PT09dD9yLng6MS8wfWZ1bmN0aW9uIFllKG4pe3RoaXMuc2l0ZT1uLHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gWmUobil7Zm9yKHZhciB0LGUscixpLHUsbyxhLGwsYyxmLHM9blswXVswXSxoPW5bMV1bMF0scD1uWzBdWzFdLGc9blsxXVsxXSx2PXVsLGQ9di5sZW5ndGg7ZC0tOylpZih1PXZbZF0sdSYmdS5wcmVwYXJlKCkpZm9yKGE9dS5lZGdlcyxsPWEubGVuZ3RoLG89MDtsPm87KWY9YVtvXS5lbmQoKSxyPWYueCxpPWYueSxjPWFbKytvJWxdLnN0YXJ0KCksdD1jLngsZT1jLnksKHhvKHItdCk+VW98fHhvKGktZSk+VW8pJiYoYS5zcGxpY2UobywwLG5ldyB0cihRZSh1LnNpdGUsZix4byhyLXMpPFVvJiZnLWk+VW8/e3g6cyx5OnhvKHQtcyk8VW8/ZTpnfTp4byhpLWcpPFVvJiZoLXI+VW8/e3g6eG8oZS1nKTxVbz90OmgseTpnfTp4byhyLWgpPFVvJiZpLXA+VW8/e3g6aCx5OnhvKHQtaCk8VW8/ZTpwfTp4byhpLXApPFVvJiZyLXM+VW8/e3g6eG8oZS1wKTxVbz90OnMseTpwfTpudWxsKSx1LnNpdGUsbnVsbCkpLCsrbCl9ZnVuY3Rpb24gVmUobix0KXtyZXR1cm4gdC5hbmdsZS1uLmFuZ2xlfWZ1bmN0aW9uIFhlKCl7cnIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uICRlKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgcj10LnNpdGUsaT1uLnNpdGUsdT1lLnNpdGU7aWYociE9PXUpe3ZhciBvPWkueCxhPWkueSxsPXIueC1vLGM9ci55LWEsZj11LngtbyxzPXUueS1hLGg9MioobCpzLWMqZik7aWYoIShoPj0tam8pKXt2YXIgcD1sKmwrYypjLGc9ZipmK3Mqcyx2PShzKnAtYypnKS9oLGQ9KGwqZy1mKnApL2gscz1kK2EseT1mbC5wb3AoKXx8bmV3IFhlO3kuYXJjPW4seS5zaXRlPWkseS54PXYrbyx5Lnk9cytNYXRoLnNxcnQodip2K2QqZCkseS5jeT1zLG4uY2lyY2xlPXk7Zm9yKHZhciBtPW51bGwsTT1sbC5fO007KWlmKHkueTxNLnl8fHkueT09PU0ueSYmeS54PD1NLngpe2lmKCFNLkwpe209TS5QO2JyZWFrfU09TS5MfWVsc2V7aWYoIU0uUil7bT1NO2JyZWFrfU09TS5SfWxsLmluc2VydChtLHkpLG18fChhbD15KX19fX1mdW5jdGlvbiBCZShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoYWw9dC5OKSxsbC5yZW1vdmUodCksZmwucHVzaCh0KSxycih0KSxuLmNpcmNsZT1udWxsKX1mdW5jdGlvbiBXZShuKXtmb3IodmFyIHQsZT1pbCxyPVl0KG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0pLGk9ZS5sZW5ndGg7aS0tOyl0PWVbaV0sKCFKZSh0LG4pfHwhcih0KXx8eG8odC5hLngtdC5iLngpPFVvJiZ4byh0LmEueS10LmIueSk8VW8pJiYodC5hPXQuYj1udWxsLGUuc3BsaWNlKGksMSkpfWZ1bmN0aW9uIEplKG4sdCl7dmFyIGU9bi5iO2lmKGUpcmV0dXJuITA7dmFyIHIsaSx1PW4uYSxvPXRbMF1bMF0sYT10WzFdWzBdLGw9dFswXVsxXSxjPXRbMV1bMV0sZj1uLmwscz1uLnIsaD1mLngscD1mLnksZz1zLngsdj1zLnksZD0oaCtnKS8yLHk9KHArdikvMjtpZih2PT09cCl7aWYobz5kfHxkPj1hKXJldHVybjtpZihoPmcpe2lmKHUpe2lmKHUueT49YylyZXR1cm59ZWxzZSB1PXt4OmQseTpsfTtlPXt4OmQseTpjfX1lbHNle2lmKHUpe2lmKHUueTxsKXJldHVybn1lbHNlIHU9e3g6ZCx5OmN9O2U9e3g6ZCx5Omx9fX1lbHNlIGlmKHI9KGgtZykvKHYtcCksaT15LXIqZCwtMT5yfHxyPjEpaWYoaD5nKXtpZih1KXtpZih1Lnk+PWMpcmV0dXJufWVsc2UgdT17eDoobC1pKS9yLHk6bH07ZT17eDooYy1pKS9yLHk6Y319ZWxzZXtpZih1KXtpZih1Lnk8bClyZXR1cm59ZWxzZSB1PXt4OihjLWkpL3IseTpjfTtlPXt4OihsLWkpL3IseTpsfX1lbHNlIGlmKHY+cCl7aWYodSl7aWYodS54Pj1hKXJldHVybn1lbHNlIHU9e3g6byx5OnIqbytpfTtlPXt4OmEseTpyKmEraX19ZWxzZXtpZih1KXtpZih1Lng8bylyZXR1cm59ZWxzZSB1PXt4OmEseTpyKmEraX07ZT17eDpvLHk6cipvK2l9fXJldHVybiBuLmE9dSxuLmI9ZSwhMH1mdW5jdGlvbiBHZShuLHQpe3RoaXMubD1uLHRoaXMucj10LHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiBLZShuLHQsZSxyKXt2YXIgaT1uZXcgR2Uobix0KTtyZXR1cm4gaWwucHVzaChpKSxlJiZucihpLG4sdCxlKSxyJiZucihpLHQsbixyKSx1bFtuLmldLmVkZ2VzLnB1c2gobmV3IHRyKGksbix0KSksdWxbdC5pXS5lZGdlcy5wdXNoKG5ldyB0cihpLHQsbikpLGl9ZnVuY3Rpb24gUWUobix0LGUpe3ZhciByPW5ldyBHZShuLG51bGwpO3JldHVybiByLmE9dCxyLmI9ZSxpbC5wdXNoKHIpLHJ9ZnVuY3Rpb24gbnIobix0LGUscil7bi5hfHxuLmI/bi5sPT09ZT9uLmI9cjpuLmE9cjoobi5hPXIsbi5sPXQsbi5yPWUpfWZ1bmN0aW9uIHRyKG4sdCxlKXt2YXIgcj1uLmEsaT1uLmI7dGhpcy5lZGdlPW4sdGhpcy5zaXRlPXQsdGhpcy5hbmdsZT1lP01hdGguYXRhbjIoZS55LXQueSxlLngtdC54KTpuLmw9PT10P01hdGguYXRhbjIoaS54LXIueCxyLnktaS55KTpNYXRoLmF0YW4yKHIueC1pLngsaS55LXIueSl9ZnVuY3Rpb24gZXIoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBycihuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIGlyKG4sdCl7dmFyIGU9dCxyPXQuUixpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6bi5fPXIsci5VPWksZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiB1cihuLHQpe3ZhciBlPXQscj10LkwsaT1lLlU7aT9pLkw9PT1lP2kuTD1yOmkuUj1yOm4uXz1yLHIuVT1pLGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gb3Iobil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufWZ1bmN0aW9uIGFyKG4sdCl7dmFyIGUscixpLHU9bi5zb3J0KGxyKS5wb3AoKTtmb3IoaWw9W10sdWw9bmV3IEFycmF5KG4ubGVuZ3RoKSxvbD1uZXcgZXIsbGw9bmV3IGVyOzspaWYoaT1hbCx1JiYoIWl8fHUueTxpLnl8fHUueT09PWkueSYmdS54PGkueCkpdS54PT09ZSYmdS55PT09cnx8KHVsW3UuaV09bmV3IFllKHUpLEhlKHUpLGU9dS54LHI9dS55KSx1PW4ucG9wKCk7ZWxzZXtpZighaSlicmVhaztGZShpLmFyYyl9dCYmKFdlKHQpLFplKHQpKTt2YXIgbz17Y2VsbHM6dWwsZWRnZXM6aWx9O3JldHVybiBvbD1sbD1pbD11bD1udWxsLG99ZnVuY3Rpb24gbHIobix0KXtyZXR1cm4gdC55LW4ueXx8dC54LW4ueH1mdW5jdGlvbiBjcihuLHQsZSl7cmV0dXJuKG4ueC1lLngpKih0Lnktbi55KS0obi54LXQueCkqKGUueS1uLnkpfWZ1bmN0aW9uIGZyKG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gc3Iobil7cmV0dXJuIG4ueX1mdW5jdGlvbiBocigpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gcHIobix0LGUscixpLHUpe2lmKCFuKHQsZSxyLGksdSkpe3ZhciBvPS41KihlK2kpLGE9LjUqKHIrdSksbD10Lm5vZGVzO2xbMF0mJnByKG4sbFswXSxlLHIsbyxhKSxsWzFdJiZwcihuLGxbMV0sbyxyLGksYSksbFsyXSYmcHIobixsWzJdLGUsYSxvLHUpLGxbM10mJnByKG4sbFszXSxvLGEsaSx1KX19ZnVuY3Rpb24gZ3Iobix0LGUscixpLHUsbyl7dmFyIGEsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIGMobixmLHMsaCxwKXtpZighKGY+dXx8cz5vfHxyPmh8fGk+cCkpe2lmKGc9bi5wb2ludCl7dmFyIGcsdj10LW4ueCxkPWUtbi55LHk9dip2K2QqZDtpZihsPnkpe3ZhciBtPU1hdGguc3FydChsPXkpO3I9dC1tLGk9ZS1tLHU9dCttLG89ZSttLGE9Z319Zm9yKHZhciBNPW4ubm9kZXMseD0uNSooZitoKSxiPS41KihzK3ApLF89dD49eCx3PWU+PWIsUz13PDwxfF8saz1TKzQ7az5TOysrUylpZihuPU1bMyZTXSlzd2l0Y2goMyZTKXtjYXNlIDA6YyhuLGYscyx4LGIpO2JyZWFrO2Nhc2UgMTpjKG4seCxzLGgsYik7YnJlYWs7Y2FzZSAyOmMobixmLGIseCxwKTticmVhaztjYXNlIDM6YyhuLHgsYixoLHApfX19KG4scixpLHUsbyksYX1mdW5jdGlvbiB2cihuLHQpe249YW8ucmdiKG4pLHQ9YW8ucmdiKHQpO3ZhciBlPW4ucixyPW4uZyxpPW4uYix1PXQuci1lLG89dC5nLXIsYT10LmItaTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIiMiK2JuKE1hdGgucm91bmQoZSt1Km4pKStibihNYXRoLnJvdW5kKHIrbypuKSkrYm4oTWF0aC5yb3VuZChpK2EqbikpfX1mdW5jdGlvbiBkcihuLHQpe3ZhciBlLHI9e30saT17fTtmb3IoZSBpbiBuKWUgaW4gdD9yW2VdPU1yKG5bZV0sdFtlXSk6aVtlXT1uW2VdO2ZvcihlIGluIHQpZSBpbiBufHwoaVtlXT10W2VdKTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKGUgaW4gcilpW2VdPXJbZV0obik7cmV0dXJuIGl9fWZ1bmN0aW9uIHlyKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIG1yKG4sdCl7dmFyIGUscixpLHU9aGwubGFzdEluZGV4PXBsLmxhc3RJbmRleD0wLG89LTEsYT1bXSxsPVtdO2ZvcihuKz0iIix0Kz0iIjsoZT1obC5leGVjKG4pKSYmKHI9cGwuZXhlYyh0KSk7KShpPXIuaW5kZXgpPnUmJihpPXQuc2xpY2UodSxpKSxhW29dP2Fbb10rPWk6YVsrK29dPWkpLChlPWVbMF0pPT09KHI9clswXSk/YVtvXT9hW29dKz1yOmFbKytvXT1yOihhWysrb109bnVsbCxsLnB1c2goe2k6byx4OnlyKGUscil9KSksdT1wbC5sYXN0SW5kZXg7cmV0dXJuIHU8dC5sZW5ndGgmJihpPXQuc2xpY2UodSksYVtvXT9hW29dKz1pOmFbKytvXT1pKSxhLmxlbmd0aDwyP2xbMF0/KHQ9bFswXS54LGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gdH06KHQ9bC5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciBlLHI9MDt0PnI7KytyKWFbKGU9bFtyXSkuaV09ZS54KG4pO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gTXIobix0KXtmb3IodmFyIGUscj1hby5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLXI+PTAmJiEoZT1hby5pbnRlcnBvbGF0b3JzW3JdKG4sdCkpOyk7cmV0dXJuIGV9ZnVuY3Rpb24geHIobix0KXt2YXIgZSxyPVtdLGk9W10sdT1uLmxlbmd0aCxvPXQubGVuZ3RoLGE9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpO2ZvcihlPTA7YT5lOysrZSlyLnB1c2goTXIobltlXSx0W2VdKSk7Zm9yKDt1PmU7KytlKWlbZV09bltlXTtmb3IoO28+ZTsrK2UpaVtlXT10W2VdO3JldHVybiBmdW5jdGlvbihuKXtmb3IoZT0wO2E+ZTsrK2UpaVtlXT1yW2VdKG4pO3JldHVybiBpfX1mdW5jdGlvbiBicihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+PXQ/MDp0Pj0xPzE6bih0KX19ZnVuY3Rpb24gX3Iobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAxLW4oMS10KX19ZnVuY3Rpb24gd3Iobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi41KiguNT50P24oMip0KToyLW4oMi0yKnQpKX19ZnVuY3Rpb24gU3Iobil7cmV0dXJuIG4qbn1mdW5jdGlvbiBrcihuKXtyZXR1cm4gbipuKm59ZnVuY3Rpb24gTnIobil7aWYoMD49bilyZXR1cm4gMDtpZihuPj0xKXJldHVybiAxO3ZhciB0PW4qbixlPXQqbjtyZXR1cm4gNCooLjU+bj9lOjMqKG4tdCkrZS0uNzUpfWZ1bmN0aW9uIEVyKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxuKX19ZnVuY3Rpb24gQXIobil7cmV0dXJuIDEtTWF0aC5jb3MobipJbyl9ZnVuY3Rpb24gQ3Iobil7cmV0dXJuIE1hdGgucG93KDIsMTAqKG4tMSkpfWZ1bmN0aW9uIHpyKG4pe3JldHVybiAxLU1hdGguc3FydCgxLW4qbil9ZnVuY3Rpb24gTHIobix0KXt2YXIgZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/ZT10L0hvKk1hdGguYXNpbigxL24pOihuPTEsZT10LzQpLGZ1bmN0aW9uKHIpe3JldHVybiAxK24qTWF0aC5wb3coMiwtMTAqcikqTWF0aC5zaW4oKHItZSkqSG8vdCl9fWZ1bmN0aW9uIHFyKG4pe3JldHVybiBufHwobj0xLjcwMTU4KSxmdW5jdGlvbih0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfX1mdW5jdGlvbiBUcihuKXtyZXR1cm4gMS8yLjc1Pm4/Ny41NjI1Km4qbjoyLzIuNzU+bj83LjU2MjUqKG4tPTEuNS8yLjc1KSpuKy43NToyLjUvMi43NT5uPzcuNTYyNSoobi09Mi4yNS8yLjc1KSpuKy45Mzc1OjcuNTYyNSoobi09Mi42MjUvMi43NSkqbisuOTg0Mzc1fWZ1bmN0aW9uIFJyKG4sdCl7bj1hby5oY2wobiksdD1hby5oY2wodCk7dmFyIGU9bi5oLHI9bi5jLGk9bi5sLHU9dC5oLWUsbz10LmMtcixhPXQubC1pO3JldHVybiBpc05hTihvKSYmKG89MCxyPWlzTmFOKHIpP3QuYzpyKSxpc05hTih1KT8odT0wLGU9aXNOYU4oZSk/dC5oOmUpOnU+MTgwP3UtPTM2MDotMTgwPnUmJih1Kz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiBzbihlK3UqbixyK28qbixpK2EqbikrIiJ9fWZ1bmN0aW9uIERyKG4sdCl7bj1hby5oc2wobiksdD1hby5oc2wodCk7dmFyIGU9bi5oLHI9bi5zLGk9bi5sLHU9dC5oLWUsbz10LnMtcixhPXQubC1pO3JldHVybiBpc05hTihvKSYmKG89MCxyPWlzTmFOKHIpP3QuczpyKSxpc05hTih1KT8odT0wLGU9aXNOYU4oZSk/dC5oOmUpOnU+MTgwP3UtPTM2MDotMTgwPnUmJih1Kz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiBjbihlK3UqbixyK28qbixpK2EqbikrIiJ9fWZ1bmN0aW9uIFByKG4sdCl7bj1hby5sYWIobiksdD1hby5sYWIodCk7dmFyIGU9bi5sLHI9bi5hLGk9bi5iLHU9dC5sLWUsbz10LmEtcixhPXQuYi1pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcG4oZSt1Km4scitvKm4saSthKm4pKyIifX1mdW5jdGlvbiBVcihuLHQpe3JldHVybiB0LT1uLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4rdCplKX19ZnVuY3Rpb24ganIobil7dmFyIHQ9W24uYSxuLmJdLGU9W24uYyxuLmRdLHI9SHIodCksaT1Gcih0LGUpLHU9SHIoT3IoZSx0LC1pKSl8fDA7dFswXSplWzFdPGVbMF0qdFsxXSYmKHRbMF0qPS0xLHRbMV0qPS0xLHIqPS0xLGkqPS0xKSx0aGlzLnJvdGF0ZT0ocj9NYXRoLmF0YW4yKHRbMV0sdFswXSk6TWF0aC5hdGFuMigtZVswXSxlWzFdKSkqWm8sdGhpcy50cmFuc2xhdGU9W24uZSxuLmZdLHRoaXMuc2NhbGU9W3IsdV0sdGhpcy5za2V3PXU/TWF0aC5hdGFuMihpLHUpKlpvOjB9ZnVuY3Rpb24gRnIobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXX1mdW5jdGlvbiBIcihuKXt2YXIgdD1NYXRoLnNxcnQoRnIobixuKSk7cmV0dXJuIHQmJihuWzBdLz10LG5bMV0vPXQpLHR9ZnVuY3Rpb24gT3Iobix0LGUpe3JldHVybiBuWzBdKz1lKnRbMF0sblsxXSs9ZSp0WzFdLG59ZnVuY3Rpb24gSXIobil7cmV0dXJuIG4ubGVuZ3RoP24ucG9wKCkrIiwiOiIifWZ1bmN0aW9uIFlyKG4sdCxlLHIpe2lmKG5bMF0hPT10WzBdfHxuWzFdIT09dFsxXSl7dmFyIGk9ZS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7ci5wdXNoKHtpOmktNCx4OnlyKG5bMF0sdFswXSl9LHtpOmktMix4OnlyKG5bMV0sdFsxXSl9KX1lbHNlKHRbMF18fHRbMV0pJiZlLnB1c2goInRyYW5zbGF0ZSgiK3QrIikiKX1mdW5jdGlvbiBacihuLHQsZSxyKXtuIT09dD8obi10PjE4MD90Kz0zNjA6dC1uPjE4MCYmKG4rPTM2MCksci5wdXNoKHtpOmUucHVzaChJcihlKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDp5cihuLHQpfSkpOnQmJmUucHVzaChJcihlKSsicm90YXRlKCIrdCsiKSIpfWZ1bmN0aW9uIFZyKG4sdCxlLHIpe24hPT10P3IucHVzaCh7aTplLnB1c2goSXIoZSkrInNrZXdYKCIsbnVsbCwiKSIpLTIseDp5cihuLHQpfSk6dCYmZS5wdXNoKElyKGUpKyJza2V3WCgiK3QrIikiKX1mdW5jdGlvbiBYcihuLHQsZSxyKXtpZihuWzBdIT09dFswXXx8blsxXSE9PXRbMV0pe3ZhciBpPWUucHVzaChJcihlKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ci5wdXNoKHtpOmktNCx4OnlyKG5bMF0sdFswXSl9LHtpOmktMix4OnlyKG5bMV0sdFsxXSl9KX1lbHNlIDE9PT10WzBdJiYxPT09dFsxXXx8ZS5wdXNoKElyKGUpKyJzY2FsZSgiK3QrIikiKX1mdW5jdGlvbiAkcihuLHQpe3ZhciBlPVtdLHI9W107cmV0dXJuIG49YW8udHJhbnNmb3JtKG4pLHQ9YW8udHJhbnNmb3JtKHQpLFlyKG4udHJhbnNsYXRlLHQudHJhbnNsYXRlLGUsciksWnIobi5yb3RhdGUsdC5yb3RhdGUsZSxyKSxWcihuLnNrZXcsdC5za2V3LGUsciksWHIobi5zY2FsZSx0LnNjYWxlLGUsciksbj10PW51bGwsZnVuY3Rpb24obil7Zm9yKHZhciB0LGk9LTEsdT1yLmxlbmd0aDsrK2k8dTspZVsodD1yW2ldKS5pXT10Lngobik7cmV0dXJuIGUuam9pbigiIil9fWZ1bmN0aW9uIEJyKG4sdCl7cmV0dXJuIHQ9KHQtPW49K24pfHwxL3QsZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH19ZnVuY3Rpb24gV3Iobix0KXtyZXR1cm4gdD0odC09bj0rbil8fDEvdCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChlLW4pL3QpKX19ZnVuY3Rpb24gSnIobil7Zm9yKHZhciB0PW4uc291cmNlLGU9bi50YXJnZXQscj1Lcih0LGUpLGk9W3RdO3QhPT1yOyl0PXQucGFyZW50LGkucHVzaCh0KTtmb3IodmFyIHU9aS5sZW5ndGg7ZSE9PXI7KWkuc3BsaWNlKHUsMCxlKSxlPWUucGFyZW50O3JldHVybiBpfWZ1bmN0aW9uIEdyKG4pe2Zvcih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1lLnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gS3Iobix0KXtpZihuPT09dClyZXR1cm4gbjtmb3IodmFyIGU9R3Iobikscj1Hcih0KSxpPWUucG9wKCksdT1yLnBvcCgpLG89bnVsbDtpPT09dTspbz1pLGk9ZS5wb3AoKSx1PXIucG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gUXIobil7bi5maXhlZHw9Mn1mdW5jdGlvbiBuaShuKXtuLmZpeGVkJj0tN31mdW5jdGlvbiB0aShuKXtuLmZpeGVkfD00LG4ucHg9bi54LG4ucHk9bi55fWZ1bmN0aW9uIGVpKG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIHJpKG4sdCxlKXt2YXIgcj0wLGk9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZhciB1LG89bi5ub2RlcyxhPW8ubGVuZ3RoLGw9LTE7KytsPGE7KXU9b1tsXSxudWxsIT11JiYocmkodSx0LGUpLG4uY2hhcmdlKz11LmNoYXJnZSxyKz11LmNoYXJnZSp1LmN4LGkrPXUuY2hhcmdlKnUuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciBjPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENoYXJnZT1jLHIrPWMqbi5wb2ludC54LGkrPWMqbi5wb2ludC55fW4uY3g9ci9uLmNoYXJnZSxuLmN5PWkvbi5jaGFyZ2V9ZnVuY3Rpb24gaWkobix0KXtyZXR1cm4gYW8ucmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4sbi5saW5rcz1maSxufWZ1bmN0aW9uIHVpKG4sdCl7Zm9yKHZhciBlPVtuXTtudWxsIT0obj1lLnBvcCgpKTspaWYodChuKSwoaT1uLmNoaWxkcmVuKSYmKHI9aS5sZW5ndGgpKWZvcih2YXIgcixpOy0tcj49MDspZS5wdXNoKGlbcl0pfWZ1bmN0aW9uIG9pKG4sdCl7Zm9yKHZhciBlPVtuXSxyPVtdO251bGwhPShuPWUucG9wKCkpOylpZihyLnB1c2gobiksKHU9bi5jaGlsZHJlbikmJihpPXUubGVuZ3RoKSlmb3IodmFyIGksdSxvPS0xOysrbzxpOyllLnB1c2godVtvXSk7Zm9yKDtudWxsIT0obj1yLnBvcCgpKTspdChuKX1mdW5jdGlvbiBhaShuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlvbiBsaShuKXtyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBjaShuLHQpe3JldHVybiB0LnZhbHVlLW4udmFsdWV9ZnVuY3Rpb24gZmkobil7cmV0dXJuIGFvLm1lcmdlKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6bix0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiBzaShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIGhpKG4pe3JldHVybiBuLnl9ZnVuY3Rpb24gcGkobix0LGUpe24ueTA9dCxuLnk9ZX1mdW5jdGlvbiBnaShuKXtyZXR1cm4gYW8ucmFuZ2Uobi5sZW5ndGgpfWZ1bmN0aW9uIHZpKG4pe2Zvcih2YXIgdD0tMSxlPW5bMF0ubGVuZ3RoLHI9W107Kyt0PGU7KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlvbiBkaShuKXtmb3IodmFyIHQsZT0xLHI9MCxpPW5bMF1bMV0sdT1uLmxlbmd0aDt1PmU7KytlKSh0PW5bZV1bMV0pPmkmJihyPWUsaT10KTtyZXR1cm4gcn1mdW5jdGlvbiB5aShuKXtyZXR1cm4gbi5yZWR1Y2UobWksMCl9ZnVuY3Rpb24gbWkobix0KXtyZXR1cm4gbit0WzFdfWZ1bmN0aW9uIE1pKG4sdCl7cmV0dXJuIHhpKG4sTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24geGkobix0KXtmb3IodmFyIGU9LTEscj0rblswXSxpPShuWzFdLXIpL3QsdT1bXTsrK2U8PXQ7KXVbZV09aSplK3I7cmV0dXJuIHV9ZnVuY3Rpb24gYmkobil7cmV0dXJuW2FvLm1pbihuKSxhby5tYXgobildfWZ1bmN0aW9uIF9pKG4sdCl7cmV0dXJuIG4udmFsdWUtdC52YWx1ZX1mdW5jdGlvbiB3aShuLHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtuLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBTaShuLHQpe24uX3BhY2tfbmV4dD10LHQuX3BhY2tfcHJldj1ufWZ1bmN0aW9uIGtpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1uLnksaT1uLnIrdC5yO3JldHVybi45OTkqaSppPmUqZStyKnJ9ZnVuY3Rpb24gTmkobil7ZnVuY3Rpb24gdChuKXtmPU1hdGgubWluKG4ueC1uLnIsZikscz1NYXRoLm1heChuLngrbi5yLHMpLGg9TWF0aC5taW4obi55LW4ucixoKSxwPU1hdGgubWF4KG4ueStuLnIscCl9aWYoKGU9bi5jaGlsZHJlbikmJihjPWUubGVuZ3RoKSl7dmFyIGUscixpLHUsbyxhLGwsYyxmPTEvMCxzPS0oMS8wKSxoPTEvMCxwPS0oMS8wKTtpZihlLmZvckVhY2goRWkpLHI9ZVswXSxyLng9LXIucixyLnk9MCx0KHIpLGM+MSYmKGk9ZVsxXSxpLng9aS5yLGkueT0wLHQoaSksYz4yKSlmb3IodT1lWzJdLHppKHIsaSx1KSx0KHUpLHdpKHIsdSksci5fcGFja19wcmV2PXUsd2kodSxpKSxpPXIuX3BhY2tfbmV4dCxvPTM7Yz5vO28rKyl7emkocixpLHU9ZVtvXSk7dmFyIGc9MCx2PTEsZD0xO2ZvcihhPWkuX3BhY2tfbmV4dDthIT09aTthPWEuX3BhY2tfbmV4dCx2KyspaWYoa2koYSx1KSl7Zz0xO2JyZWFrfWlmKDE9PWcpZm9yKGw9ci5fcGFja19wcmV2O2whPT1hLl9wYWNrX3ByZXYmJiFraShsLHUpO2w9bC5fcGFja19wcmV2LGQrKyk7Zz8oZD52fHx2PT1kJiZpLnI8ci5yP1NpKHIsaT1hKTpTaShyPWwsaSksby0tKTood2kocix1KSxpPXUsdCh1KSl9dmFyIHk9KGYrcykvMixtPShoK3ApLzIsTT0wO2ZvcihvPTA7Yz5vO28rKyl1PWVbb10sdS54LT15LHUueS09bSxNPU1hdGgubWF4KE0sdS5yK01hdGguc3FydCh1LngqdS54K3UueSp1LnkpKTtuLnI9TSxlLmZvckVhY2goQWkpfX1mdW5jdGlvbiBFaShuKXtuLl9wYWNrX25leHQ9bi5fcGFja19wcmV2PW59ZnVuY3Rpb24gQWkobil7ZGVsZXRlIG4uX3BhY2tfbmV4dCxkZWxldGUgbi5fcGFja19wcmV2fWZ1bmN0aW9uIENpKG4sdCxlLHIpe3ZhciBpPW4uY2hpbGRyZW47aWYobi54PXQrPXIqbi54LG4ueT1lKz1yKm4ueSxuLnIqPXIsaSlmb3IodmFyIHU9LTEsbz1pLmxlbmd0aDsrK3U8bzspQ2koaVt1XSx0LGUscil9ZnVuY3Rpb24gemkobix0LGUpe3ZhciByPW4ucitlLnIsaT10Lngtbi54LHU9dC55LW4ueTtpZihyJiYoaXx8dSkpe3ZhciBvPXQucitlLnIsYT1pKmkrdSp1O28qPW8scio9cjt2YXIgbD0uNSsoci1vKS8oMiphKSxjPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyoocithKS0oci09YSkqci1vKm8pKS8oMiphKTtlLng9bi54K2wqaStjKnUsZS55PW4ueStsKnUtYyppfWVsc2UgZS54PW4ueCtyLGUueT1uLnl9ZnVuY3Rpb24gTGkobix0KXtyZXR1cm4gbi5wYXJlbnQ9PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBxaShuKXt2YXIgdD1uLmNoaWxkcmVuO3JldHVybiB0Lmxlbmd0aD90WzBdOm4udH1mdW5jdGlvbiBUaShuKXt2YXIgdCxlPW4uY2hpbGRyZW47cmV0dXJuKHQ9ZS5sZW5ndGgpP2VbdC0xXTpuLnR9ZnVuY3Rpb24gUmkobix0LGUpe3ZhciByPWUvKHQuaS1uLmkpO3QuYy09cix0LnMrPWUsbi5jKz1yLHQueis9ZSx0Lm0rPWV9ZnVuY3Rpb24gRGkobil7Zm9yKHZhciB0LGU9MCxyPTAsaT1uLmNoaWxkcmVuLHU9aS5sZW5ndGg7LS11Pj0wOyl0PWlbdV0sdC56Kz1lLHQubSs9ZSxlKz10LnMrKHIrPXQuYyl9ZnVuY3Rpb24gUGkobix0LGUpe3JldHVybiBuLmEucGFyZW50PT09dC5wYXJlbnQ/bi5hOmV9ZnVuY3Rpb24gVWkobil7cmV0dXJuIDErYW8ubWF4KG4sZnVuY3Rpb24obil7cmV0dXJuIG4ueX0pfWZ1bmN0aW9uIGppKG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihuLHQpe3JldHVybiBuK3QueH0sMCkvbi5sZW5ndGh9ZnVuY3Rpb24gRmkobil7dmFyIHQ9bi5jaGlsZHJlbjtyZXR1cm4gdCYmdC5sZW5ndGg/RmkodFswXSk6bn1mdW5jdGlvbiBIaShuKXt2YXIgdCxlPW4uY2hpbGRyZW47cmV0dXJuIGUmJih0PWUubGVuZ3RoKT9IaShlW3QtMV0pOm59ZnVuY3Rpb24gT2kobil7cmV0dXJue3g6bi54LHk6bi55LGR4Om4uZHgsZHk6bi5keX19ZnVuY3Rpb24gSWkobix0KXt2YXIgZT1uLngrdFszXSxyPW4ueSt0WzBdLGk9bi5keC10WzFdLXRbM10sdT1uLmR5LXRbMF0tdFsyXTtyZXR1cm4gMD5pJiYoZSs9aS8yLGk9MCksMD51JiYocis9dS8yLHU9MCkse3g6ZSx5OnIsZHg6aSxkeTp1fX1mdW5jdGlvbiBZaShuKXt2YXIgdD1uWzBdLGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gZT50P1t0LGVdOltlLHRdfWZ1bmN0aW9uIFppKG4pe3JldHVybiBuLnJhbmdlRXh0ZW50P24ucmFuZ2VFeHRlbnQoKTpZaShuLnJhbmdlKCkpfWZ1bmN0aW9uIFZpKG4sdCxlLHIpe3ZhciBpPWUoblswXSxuWzFdKSx1PXIodFswXSx0WzFdKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHUoaShuKSl9fWZ1bmN0aW9uIFhpKG4sdCl7dmFyIGUscj0wLGk9bi5sZW5ndGgtMSx1PW5bcl0sbz1uW2ldO3JldHVybiB1Pm8mJihlPXIscj1pLGk9ZSxlPXUsdT1vLG89ZSksbltyXT10LmZsb29yKHUpLG5baV09dC5jZWlsKG8pLG59ZnVuY3Rpb24gJGkobil7cmV0dXJuIG4/e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKHQvbikqbn0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKHQvbikqbn19OlNsfWZ1bmN0aW9uIEJpKG4sdCxlLHIpe3ZhciBpPVtdLHU9W10sbz0wLGE9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTE7Zm9yKG5bYV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrbzw9YTspaS5wdXNoKGUobltvLTFdLG5bb10pKSx1LnB1c2gocih0W28tMV0sdFtvXSkpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1hby5iaXNlY3Qobix0LDEsYSktMTtyZXR1cm4gdVtlXShpW2VdKHQpKX19ZnVuY3Rpb24gV2kobix0LGUscil7ZnVuY3Rpb24gaSgpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP0JpOlZpLGw9cj9XcjpCcjtyZXR1cm4gbz1pKG4sdCxsLGUpLGE9aSh0LG4sbCxNciksdX1mdW5jdGlvbiB1KG4pe3JldHVybiBvKG4pfXZhciBvLGE7cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBhKG4pfSx1LmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChOdW1iZXIpLGkoKSk6bn0sdS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGkoKSk6dH0sdS5yYW5nZVJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiB1LnJhbmdlKG4pLmludGVycG9sYXRlKFVyKX0sdS5jbGFtcD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLGkoKSk6cn0sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLGkoKSk6ZX0sdS50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gUWkobix0KX0sdS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51KG4sdCxlKX0sdS5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBHaShuLHQpLGkoKX0sdS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFdpKG4sdCxlLHIpfSxpKCl9ZnVuY3Rpb24gSmkobix0KXtyZXR1cm4gYW8ucmViaW5kKG4sdCwicmFuZ2UiLCJyYW5nZVJvdW5kIiwiaW50ZXJwb2xhdGUiLCJjbGFtcCIpfWZ1bmN0aW9uIEdpKG4sdCl7cmV0dXJuIFhpKG4sJGkoS2kobix0KVsyXSkpLFhpKG4sJGkoS2kobix0KVsyXSkpLG59ZnVuY3Rpb24gS2kobix0KXtudWxsPT10JiYodD0xMCk7dmFyIGU9WWkobikscj1lWzFdLWVbMF0saT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksdT10L3IqaTtyZXR1cm4uMTU+PXU/aSo9MTA6LjM1Pj11P2kqPTU6Ljc1Pj11JiYoaSo9MiksZVswXT1NYXRoLmNlaWwoZVswXS9pKSppLGVbMV09TWF0aC5mbG9vcihlWzFdL2kpKmkrLjUqaSxlWzJdPWksZX1mdW5jdGlvbiBRaShuLHQpe3JldHVybiBhby5yYW5nZS5hcHBseShhbyxLaShuLHQpKX1mdW5jdGlvbiBudShuLHQsZSl7dmFyIHI9S2kobix0KTtpZihlKXt2YXIgaT1oYS5leGVjKGUpO2lmKGkuc2hpZnQoKSwicyI9PT1pWzhdKXt2YXIgdT1hby5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeG8oclswXSkseG8oclsxXSkpKTtyZXR1cm4gaVs3XXx8KGlbN109Ii4iK3R1KHUuc2NhbGUoclsyXSkpKSxpWzhdPSJmIixlPWFvLmZvcm1hdChpLmpvaW4oIiIpKSxmdW5jdGlvbihuKXtyZXR1cm4gZSh1LnNjYWxlKG4pKSt1LnN5bWJvbH19aVs3XXx8KGlbN109Ii4iK2V1KGlbOF0scikpLGU9aS5qb2luKCIiKX1lbHNlIGU9IiwuIit0dShyWzJdKSsiZiI7cmV0dXJuIGFvLmZvcm1hdChlKX1mdW5jdGlvbiB0dShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBldShuLHQpe3ZhciBlPXR1KHRbMl0pO3JldHVybiBuIGluIGtsP01hdGguYWJzKGUtdHUoTWF0aC5tYXgoeG8odFswXSkseG8odFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5jdGlvbiBydShuLHQsZSxyKXtmdW5jdGlvbiBpKG4pe3JldHVybihlP01hdGgubG9nKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0aW9uIHUobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbihpKHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWluKChyPXQubWFwKE51bWJlcikpLm1hcChpKSksbyk6cn0sby5iYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFwKGkpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1YaShyLm1hcChpKSxlP01hdGg6RWwpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKHUpLG99LG8udGlja3M9ZnVuY3Rpb24oKXt2YXIgbj1ZaShyKSxvPVtdLGE9blswXSxsPW5bMV0sYz1NYXRoLmZsb29yKGkoYSkpLGY9TWF0aC5jZWlsKGkobCkpLHM9dCUxPzI6dDtpZihpc0Zpbml0ZShmLWMpKXtpZihlKXtmb3IoO2Y+YztjKyspZm9yKHZhciBoPTE7cz5oO2grKylvLnB1c2godShjKSpoKTtvLnB1c2godShjKSl9ZWxzZSBmb3Ioby5wdXNoKHUoYykpO2MrKzxmOylmb3IodmFyIGg9cy0xO2g+MDtoLS0pby5wdXNoKHUoYykqaCk7Zm9yKGM9MDtvW2NdPGE7YysrKTtmb3IoZj1vLmxlbmd0aDtvW2YtMV0+bDtmLS0pO289by5zbGljZShjLGYpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obixlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTmw7YXJndW1lbnRzLmxlbmd0aDwyP2U9Tmw6ImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPWFvLmZvcm1hdChlKSk7dmFyIHI9TWF0aC5tYXgoMSx0Km4vby50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBvPW4vdShNYXRoLnJvdW5kKGkobikpKTtyZXR1cm4gdC0uNT5vKnQmJihvKj10KSxyPj1vP2Uobik6IiJ9fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcnUobi5jb3B5KCksdCxlLHIpfSxKaShvLG4pfWZ1bmN0aW9uIGl1KG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKGkodCkpfXZhciBpPXV1KHQpLHU9dXUoMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAoTnVtYmVyKSkubWFwKGkpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVybiBRaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnUoZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKEdpKGUsbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXV1KHQ9byksdT11dSgxL3QpLG4uZG9tYWluKGUubWFwKGkpKSxyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gaXUobi5jb3B5KCksdCxlKX0sSmkocixuKX1mdW5jdGlvbiB1dShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+dD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gb3Uobix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiB1WygoaS5nZXQoZSl8fCgicmFuZ2UiPT09dC50P2kuc2V0KGUsbi5wdXNoKGUpKTpOYU4pKS0xKSV1Lmxlbmd0aF19ZnVuY3Rpb24gcih0LGUpe3JldHVybiBhby5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn0pfXZhciBpLHUsbztyZXR1cm4gZS5kb21haW49ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG47bj1bXSxpPW5ldyBjO2Zvcih2YXIgdSxvPS0xLGE9ci5sZW5ndGg7KytvPGE7KWkuaGFzKHU9cltvXSl8fGkuc2V0KHUsbi5wdXNoKHUpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5hKX0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLG89MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOnV9LGUucmFuZ2VQb2ludHM9ZnVuY3Rpb24oaSxhKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApO3ZhciBsPWlbMF0sYz1pWzFdLGY9bi5sZW5ndGg8Mj8obD0obCtjKS8yLDApOihjLWwpLyhuLmxlbmd0aC0xK2EpO3JldHVybiB1PXIobCtmKmEvMixmKSxvPTAsdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24oaSxhKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApO3ZhciBsPWlbMF0sYz1pWzFdLGY9bi5sZW5ndGg8Mj8obD1jPU1hdGgucm91bmQoKGwrYykvMiksMCk6KGMtbCkvKG4ubGVuZ3RoLTErYSl8MDtyZXR1cm4gdT1yKGwrTWF0aC5yb3VuZChmKmEvMisoYy1sLShuLmxlbmd0aC0xK2EpKmYpLzIpLGYpLG89MCx0PXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZUJhbmRzPWZ1bmN0aW9uKGksYSxsKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGw9YSk7dmFyIGM9aVsxXTxpWzBdLGY9aVtjLTBdLHM9aVsxLWNdLGg9KHMtZikvKG4ubGVuZ3RoLWErMipsKTtyZXR1cm4gdT1yKGYraCpsLGgpLGMmJnUucmV2ZXJzZSgpLG89aCooMS1hKSx0PXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24oaSxhLGwpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGE9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYobD1hKTt2YXIgYz1pWzFdPGlbMF0sZj1pW2MtMF0scz1pWzEtY10saD1NYXRoLmZsb29yKChzLWYpLyhuLmxlbmd0aC1hKzIqbCkpO3JldHVybiB1PXIoZitNYXRoLnJvdW5kKChzLWYtKG4ubGVuZ3RoLWEpKmgpLzIpLGgpLGMmJnUucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChoKigxLWEpKSx0PXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFlpKHQuYVswXSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBvdShuLHQpfSxlLmRvbWFpbihuKX1mdW5jdGlvbiBhdShuLHQpe2Z1bmN0aW9uIHUoKXt2YXIgZT0wLHI9dC5sZW5ndGg7Zm9yKGE9W107KytlPHI7KWFbZS0xXT1hby5xdWFudGlsZShuLGUvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhuKXtyZXR1cm4gaXNOYU4obj0rbik/dm9pZCAwOnRbYW8uYmlzZWN0KGEsbildfXZhciBhO3JldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChyKS5maWx0ZXIoaSkuc29ydChlKSx1KCkpOm59LG8ucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bix1KCkpOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXQuaW5kZXhPZihlKSwwPmU/W05hTixOYU5dOltlPjA/YVtlLTFdOm5bMF0sZTxhLmxlbmd0aD9hW2VdOm5bbi5sZW5ndGgtMV1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYXUobix0KX0sdSgpfWZ1bmN0aW9uIGx1KG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4obyxNYXRoLmZsb29yKHUqKHQtbikpKSldfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgdSxvO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLGkoKSk6W24sdF19LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bixpKCkpOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhPZih0KSx0PTA+dD9OYU46dC91K24sW3QsdCsxL3VdfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbHUobix0LGUpfSxpKCl9ZnVuY3Rpb24gY3Uobix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj1lP3RbYW8uYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBjdShuLHQpfSxlfWZ1bmN0aW9uIGZ1KG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0KTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBRaShuLHQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnUobix0LGUpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZnUobil9LHR9ZnVuY3Rpb24gc3UoKXtyZXR1cm4gMH1mdW5jdGlvbiBodShuKXtyZXR1cm4gbi5pbm5lclJhZGl1c31mdW5jdGlvbiBwdShuKXtyZXR1cm4gbi5vdXRlclJhZGl1c31mdW5jdGlvbiBndShuKXtyZXR1cm4gbi5zdGFydEFuZ2xlfWZ1bmN0aW9uIHZ1KG4pe3JldHVybiBuLmVuZEFuZ2xlfWZ1bmN0aW9uIGR1KG4pe3JldHVybiBuJiZuLnBhZEFuZ2xlfWZ1bmN0aW9uIHl1KG4sdCxlLHIpe3JldHVybihuLWUpKnQtKHQtcikqbj4wPzA6MX1mdW5jdGlvbiBtdShuLHQsZSxyLGkpe3ZhciB1PW5bMF0tdFswXSxvPW5bMV0tdFsxXSxhPShpP3I6LXIpL01hdGguc3FydCh1KnUrbypvKSxsPWEqbyxjPS1hKnUsZj1uWzBdK2wscz1uWzFdK2MsaD10WzBdK2wscD10WzFdK2MsZz0oZitoKS8yLHY9KHMrcCkvMixkPWgtZix5PXAtcyxtPWQqZCt5KnksTT1lLXIseD1mKnAtaCpzLGI9KDA+eT8tMToxKSpNYXRoLnNxcnQoTWF0aC5tYXgoMCxNKk0qbS14KngpKSxfPSh4KnktZCpiKS9tLHc9KC14KmQteSpiKS9tLFM9KHgqeStkKmIpL20saz0oLXgqZCt5KmIpL20sTj1fLWcsRT13LXYsQT1TLWcsQz1rLXY7cmV0dXJuIE4qTitFKkU+QSpBK0MqQyYmKF89Uyx3PWspLFtbXy1sLHctY10sW18qZS9NLHcqZS9NXV19ZnVuY3Rpb24gTXUobil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBvKCl7Yy5wdXNoKCJNIix1KG4oZiksYSkpfWZvcih2YXIgbCxjPVtdLGY9W10scz0tMSxoPXQubGVuZ3RoLHA9RW4oZSksZz1FbihyKTsrK3M8aDspaS5jYWxsKHRoaXMsbD10W3NdLHMpP2YucHVzaChbK3AuY2FsbCh0aGlzLGwscyksK2cuY2FsbCh0aGlzLGwscyldKTpmLmxlbmd0aCYmKG8oKSxmPVtdKTtyZXR1cm4gZi5sZW5ndGgmJm8oKSxjLmxlbmd0aD9jLmpvaW4oIiIpOm51bGx9dmFyIGU9Q2Uscj16ZSxpPXp0LHU9eHUsbz11LmtleSxhPS43O3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0KTpyfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bix0KTppfSx0LmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP3U9bjoodT1UbC5nZXQobil8fHh1KS5rZXksdCk6b30sdC50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4sdCk6YX0sdH1mdW5jdGlvbiB4dShuKXtyZXR1cm4gbi5sZW5ndGg+MT9uLmpvaW4oIkwiKTpuKyJaIn1mdW5jdGlvbiBidShuKXtyZXR1cm4gbi5qb2luKCJMIikrIloifWZ1bmN0aW9uIF91KG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLGk9W3JbMF0sIiwiLHJbMV1dOysrdDxlOylpLnB1c2goIkgiLChyWzBdKyhyPW5bdF0pWzBdKS8yLCJWIixyWzFdKTtyZXR1cm4gZT4xJiZpLnB1c2goIkgiLHJbMF0pLGkuam9pbigiIil9ZnVuY3Rpb24gd3Uobil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0saT1bclswXSwiLCIsclsxXV07Kyt0PGU7KWkucHVzaCgiViIsKHI9blt0XSlbMV0sIkgiLHJbMF0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIFN1KG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLGk9W3JbMF0sIiwiLHJbMV1dOysrdDxlOylpLnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBrdShuLHQpe3JldHVybiBuLmxlbmd0aDw0P3h1KG4pOm5bMV0rQXUobi5zbGljZSgxLC0xKSxDdShuLHQpKX1mdW5jdGlvbiBOdShuLHQpe3JldHVybiBuLmxlbmd0aDwzP2J1KG4pOm5bMF0rQXUoKG4ucHVzaChuWzBdKSxuKSxDdShbbltuLmxlbmd0aC0yXV0uY29uY2F0KG4sW25bMV1dKSx0KSl9ZnVuY3Rpb24gRXUobix0KXtyZXR1cm4gbi5sZW5ndGg8Mz94dShuKTpuWzBdK0F1KG4sQ3Uobix0KSl9ZnVuY3Rpb24gQXUobix0KXtpZih0Lmxlbmd0aDwxfHxuLmxlbmd0aCE9dC5sZW5ndGgmJm4ubGVuZ3RoIT10Lmxlbmd0aCsyKXJldHVybiB4dShuKTt2YXIgZT1uLmxlbmd0aCE9dC5sZW5ndGgscj0iIixpPW5bMF0sdT1uWzFdLG89dFswXSxhPW8sbD0xO2lmKGUmJihyKz0iUSIrKHVbMF0tMipvWzBdLzMpKyIsIisodVsxXS0yKm9bMV0vMykrIiwiK3VbMF0rIiwiK3VbMV0saT1uWzFdLGw9MiksdC5sZW5ndGg+MSl7YT10WzFdLHU9bltsXSxsKysscis9IkMiKyhpWzBdK29bMF0pKyIsIisoaVsxXStvWzFdKSsiLCIrKHVbMF0tYVswXSkrIiwiKyh1WzFdLWFbMV0pKyIsIit1WzBdKyIsIit1WzFdO2Zvcih2YXIgYz0yO2M8dC5sZW5ndGg7YysrLGwrKyl1PW5bbF0sYT10W2NdLHIrPSJTIisodVswXS1hWzBdKSsiLCIrKHVbMV0tYVsxXSkrIiwiK3VbMF0rIiwiK3VbMV19aWYoZSl7dmFyIGY9bltsXTtyKz0iUSIrKHVbMF0rMiphWzBdLzMpKyIsIisodVsxXSsyKmFbMV0vMykrIiwiK2ZbMF0rIiwiK2ZbMV19cmV0dXJuIHJ9ZnVuY3Rpb24gQ3Uobix0KXtmb3IodmFyIGUscj1bXSxpPSgxLXQpLzIsdT1uWzBdLG89blsxXSxhPTEsbD1uLmxlbmd0aDsrK2E8bDspZT11LHU9byxvPW5bYV0sci5wdXNoKFtpKihvWzBdLWVbMF0pLGkqKG9bMV0tZVsxXSldKTtyZXR1cm4gcn1mdW5jdGlvbiB6dShuKXtpZihuLmxlbmd0aDwzKXJldHVybiB4dShuKTt2YXIgdD0xLGU9bi5sZW5ndGgscj1uWzBdLGk9clswXSx1PXJbMV0sbz1baSxpLGksKHI9blsxXSlbMF1dLGE9W3UsdSx1LHJbMV1dLGw9W2ksIiwiLHUsIkwiLFJ1KFBsLG8pLCIsIixSdShQbCxhKV07Zm9yKG4ucHVzaChuW2UtMV0pOysrdDw9ZTspcj1uW3RdLG8uc2hpZnQoKSxvLnB1c2goclswXSksYS5zaGlmdCgpLGEucHVzaChyWzFdKSxEdShsLG8sYSk7cmV0dXJuIG4ucG9wKCksbC5wdXNoKCJMIixyKSxsLmpvaW4oIiIpfWZ1bmN0aW9uIEx1KG4pe2lmKG4ubGVuZ3RoPDQpcmV0dXJuIHh1KG4pO2Zvcih2YXIgdCxlPVtdLHI9LTEsaT1uLmxlbmd0aCx1PVswXSxvPVswXTsrK3I8MzspdD1uW3JdLHUucHVzaCh0WzBdKSxvLnB1c2godFsxXSk7Zm9yKGUucHVzaChSdShQbCx1KSsiLCIrUnUoUGwsbykpLC0tcjsrK3I8aTspdD1uW3JdLHUuc2hpZnQoKSx1LnB1c2godFswXSksby5zaGlmdCgpLG8ucHVzaCh0WzFdKSxEdShlLHUsbyk7cmV0dXJuIGUuam9pbigiIil9ZnVuY3Rpb24gcXUobil7Zm9yKHZhciB0LGUscj0tMSxpPW4ubGVuZ3RoLHU9aSs0LG89W10sYT1bXTsrK3I8NDspZT1uW3IlaV0sby5wdXNoKGVbMF0pLGEucHVzaChlWzFdKTtmb3IodD1bUnUoUGwsbyksIiwiLFJ1KFBsLGEpXSwtLXI7KytyPHU7KWU9bltyJWldLG8uc2hpZnQoKSxvLnB1c2goZVswXSksYS5zaGlmdCgpLGEucHVzaChlWzFdKSxEdSh0LG8sYSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gVHUobix0KXt2YXIgZT1uLmxlbmd0aC0xO2lmKGUpZm9yKHZhciByLGksdT1uWzBdWzBdLG89blswXVsxXSxhPW5bZV1bMF0tdSxsPW5bZV1bMV0tbyxjPS0xOysrYzw9ZTspcj1uW2NdLGk9Yy9lLHJbMF09dCpyWzBdKygxLXQpKih1K2kqYSksclsxXT10KnJbMV0rKDEtdCkqKG8raSpsKTtyZXR1cm4genUobil9ZnVuY3Rpb24gUnUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXStuWzJdKnRbMl0rblszXSp0WzNdfWZ1bmN0aW9uIER1KG4sdCxlKXtuLnB1c2goIkMiLFJ1KFJsLHQpLCIsIixSdShSbCxlKSwiLCIsUnUoRGwsdCksIiwiLFJ1KERsLGUpLCIsIixSdShQbCx0KSwiLCIsUnUoUGwsZSkpfWZ1bmN0aW9uIFB1KG4sdCl7cmV0dXJuKHRbMV0tblsxXSkvKHRbMF0tblswXSl9ZnVuY3Rpb24gVXUobil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aC0xLHI9W10saT1uWzBdLHU9blsxXSxvPXJbMF09UHUoaSx1KTsrK3Q8ZTspclt0XT0obysobz1QdShpPXUsdT1uW3QrMV0pKSkvMjtyZXR1cm4gclt0XT1vLHJ9ZnVuY3Rpb24ganUobil7Zm9yKHZhciB0LGUscixpLHU9W10sbz1VdShuKSxhPS0xLGw9bi5sZW5ndGgtMTsrK2E8bDspdD1QdShuW2FdLG5bYSsxXSkseG8odCk8VW8/b1thXT1vW2ErMV09MDooZT1vW2FdL3Qscj1vW2ErMV0vdCxpPWUqZStyKnIsaT45JiYoaT0zKnQvTWF0aC5zcXJ0KGkpLG9bYV09aSplLG9bYSsxXT1pKnIpKTtmb3IoYT0tMTsrK2E8PWw7KWk9KG5bTWF0aC5taW4obCxhKzEpXVswXS1uW01hdGgubWF4KDAsYS0xKV1bMF0pLyg2KigxK29bYV0qb1thXSkpLHUucHVzaChbaXx8MCxvW2FdKml8fDBdKTtyZXR1cm4gdX1mdW5jdGlvbiBGdShuKXtyZXR1cm4gbi5sZW5ndGg8Mz94dShuKTpuWzBdK0F1KG4sanUobikpfWZ1bmN0aW9uIEh1KG4pe2Zvcih2YXIgdCxlLHIsaT0tMSx1PW4ubGVuZ3RoOysraTx1Oyl0PW5baV0sZT10WzBdLHI9dFsxXS1Jbyx0WzBdPWUqTWF0aC5jb3MociksdFsxXT1lKk1hdGguc2luKHIpO3JldHVybiBufWZ1bmN0aW9uIE91KG4pe2Z1bmN0aW9uIHQodCl7ZnVuY3Rpb24gbCgpe3YucHVzaCgiTSIsYShuKHkpLHMpLGYsYyhuKGQucmV2ZXJzZSgpKSxzKSwiWiIpfWZvcih2YXIgaCxwLGcsdj1bXSxkPVtdLHk9W10sbT0tMSxNPXQubGVuZ3RoLHg9RW4oZSksYj1FbihpKSxfPWU9PT1yP2Z1bmN0aW9uKCl7CnJldHVybiBwfTpFbihyKSx3PWk9PT11P2Z1bmN0aW9uKCl7cmV0dXJuIGd9OkVuKHUpOysrbTxNOylvLmNhbGwodGhpcyxoPXRbbV0sbSk/KGQucHVzaChbcD0reC5jYWxsKHRoaXMsaCxtKSxnPStiLmNhbGwodGhpcyxoLG0pXSkseS5wdXNoKFsrXy5jYWxsKHRoaXMsaCxtKSwrdy5jYWxsKHRoaXMsaCxtKV0pKTpkLmxlbmd0aCYmKGwoKSxkPVtdLHk9W10pO3JldHVybiBkLmxlbmd0aCYmbCgpLHYubGVuZ3RoP3Yuam9pbigiIik6bnVsbH12YXIgZT1DZSxyPUNlLGk9MCx1PXplLG89enQsYT14dSxsPWEua2V5LGM9YSxmPSJMIixzPS43O3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cj1uLHQpOnJ9LHQueDA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0LngxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXU9bix0KTp1fSx0LnkwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW4sdCk6aX0sdC55MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1uLHQpOm99LHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIG4/YT1uOihhPVRsLmdldChuKXx8eHUpLmtleSxjPWEucmV2ZXJzZXx8YSxmPWEuY2xvc2VkPyJNIjoiTCIsdCk6bH0sdC50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sdCk6c30sdH1mdW5jdGlvbiBJdShuKXtyZXR1cm4gbi5yYWRpdXN9ZnVuY3Rpb24gWXUobil7cmV0dXJuW24ueCxuLnldfWZ1bmN0aW9uIFp1KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGU9dFswXSxyPXRbMV0tSW87cmV0dXJuW2UqTWF0aC5jb3MociksZSpNYXRoLnNpbihyKV19fWZ1bmN0aW9uIFZ1KCl7cmV0dXJuIDY0fWZ1bmN0aW9uIFh1KCl7cmV0dXJuImNpcmNsZSJ9ZnVuY3Rpb24gJHUobil7dmFyIHQ9TWF0aC5zcXJ0KG4vRm8pO3JldHVybiJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrdCsiWiJ9ZnVuY3Rpb24gQnUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsZSxyOyh0PXRoaXNbbl0pJiYocj10W2U9dC5hY3RpdmVdKSYmKHIudGltZXIuYz1udWxsLHIudGltZXIudD1OYU4sLS10LmNvdW50P2RlbGV0ZSB0W2VdOmRlbGV0ZSB0aGlzW25dLHQuYWN0aXZlKz0uNSxyLmV2ZW50JiZyLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxyLmluZGV4KSl9fWZ1bmN0aW9uIFd1KG4sdCxlKXtyZXR1cm4ga28obixZbCksbi5uYW1lc3BhY2U9dCxuLmlkPWUsbn1mdW5jdGlvbiBKdShuLHQsZSxyKXt2YXIgaT1uLmlkLHU9bi5uYW1lc3BhY2U7cmV0dXJuIFkobiwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLG8sYSl7blt1XVtpXS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18sbyxhKSkpfTooZT1yKGUpLGZ1bmN0aW9uKG4pe25bdV1baV0udHdlZW4uc2V0KHQsZSl9KSl9ZnVuY3Rpb24gR3Uobil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gS3Uobil7cmV0dXJuIG51bGw9PW4/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrbisiX18ifWZ1bmN0aW9uIFF1KG4sdCxlLHIsaSl7ZnVuY3Rpb24gdShuKXt2YXIgdD12LmRlbGF5O3JldHVybiBmLnQ9dCtsLG4+PXQ/byhuLXQpOnZvaWQoZi5jPW8pfWZ1bmN0aW9uIG8oZSl7dmFyIGk9Zy5hY3RpdmUsdT1nW2ldO3UmJih1LnRpbWVyLmM9bnVsbCx1LnRpbWVyLnQ9TmFOLC0tZy5jb3VudCxkZWxldGUgZ1tpXSx1LmV2ZW50JiZ1LmV2ZW50LmludGVycnVwdC5jYWxsKG4sbi5fX2RhdGFfXyx1LmluZGV4KSk7Zm9yKHZhciBvIGluIGcpaWYocj4rbyl7dmFyIGM9Z1tvXTtjLnRpbWVyLmM9bnVsbCxjLnRpbWVyLnQ9TmFOLC0tZy5jb3VudCxkZWxldGUgZ1tvXX1mLmM9YSxxbihmdW5jdGlvbigpe3JldHVybiBmLmMmJmEoZXx8MSkmJihmLmM9bnVsbCxmLnQ9TmFOKSwxfSwwLGwpLGcuYWN0aXZlPXIsdi5ldmVudCYmdi5ldmVudC5zdGFydC5jYWxsKG4sbi5fX2RhdGFfXyx0KSxwPVtdLHYudHdlZW4uZm9yRWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLG4uX19kYXRhX18sdCkpJiZwLnB1c2gocil9KSxoPXYuZWFzZSxzPXYuZHVyYXRpb259ZnVuY3Rpb24gYShpKXtmb3IodmFyIHU9aS9zLG89aCh1KSxhPXAubGVuZ3RoO2E+MDspcFstLWFdLmNhbGwobixvKTtyZXR1cm4gdT49MT8odi5ldmVudCYmdi5ldmVudC5lbmQuY2FsbChuLG4uX19kYXRhX18sdCksLS1nLmNvdW50P2RlbGV0ZSBnW3JdOmRlbGV0ZSBuW2VdLDEpOnZvaWQgMH12YXIgbCxmLHMsaCxwLGc9bltlXXx8KG5bZV09e2FjdGl2ZTowLGNvdW50OjB9KSx2PWdbcl07dnx8KGw9aS50aW1lLGY9cW4odSwwLGwpLHY9Z1tyXT17dHdlZW46bmV3IGMsdGltZTpsLHRpbWVyOmYsZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OnR9LGk9bnVsbCwrK2cuY291bnQpfWZ1bmN0aW9uIG5vKG4sdCxlKXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7dmFyIHI9dChuKTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKHIpP3I6ZShuKSkrIiwwKSJ9KX1mdW5jdGlvbiB0byhuLHQsZSl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKG4pe3ZhciByPXQobik7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKHIpP3I6ZShuKSkrIikifSl9ZnVuY3Rpb24gZW8obil7cmV0dXJuIG4udG9JU09TdHJpbmcoKX1mdW5jdGlvbiBybyhuLHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbih0KX1mdW5jdGlvbiBpKG4sZSl7dmFyIHI9blsxXS1uWzBdLGk9ci9lLHU9YW8uYmlzZWN0KEtsLGkpO3JldHVybiB1PT1LbC5sZW5ndGg/W3QueWVhcixLaShuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi8zMTUzNmU2fSksZSlbMl1dOnU/dFtpL0tsW3UtMV08S2xbdV0vaT91LTE6dV06W3RjLEtpKG4sZSlbMl1dfXJldHVybiByLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gaW8obi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4odCkscik6bi5kb21haW4oKS5tYXAoaW8pfSxyLm5pY2U9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiFpc05hTihlKSYmIW4ucmFuZ2UoZSxpbygrZSsxKSx0KS5sZW5ndGh9dmFyIHU9ci5kb21haW4oKSxvPVlpKHUpLGE9bnVsbD09bj9pKG8sMTApOiJudW1iZXIiPT10eXBlb2YgbiYmaShvLG4pO3JldHVybiBhJiYobj1hWzBdLHQ9YVsxXSksci5kb21haW4oWGkodSx0PjE/e2Zsb29yOmZ1bmN0aW9uKHQpe2Zvcig7ZSh0PW4uZmxvb3IodCkpOyl0PWlvKHQtMSk7cmV0dXJuIHR9LGNlaWw6ZnVuY3Rpb24odCl7Zm9yKDtlKHQ9bi5jZWlsKHQpKTspdD1pbygrdCsxKTtyZXR1cm4gdH19Om4pKX0sci50aWNrcz1mdW5jdGlvbihuLHQpe3ZhciBlPVlpKHIuZG9tYWluKCkpLHU9bnVsbD09bj9pKGUsMTApOiJudW1iZXIiPT10eXBlb2Ygbj9pKGUsbik6IW4ucmFuZ2UmJlt7cmFuZ2U6bn0sdF07cmV0dXJuIHUmJihuPXVbMF0sdD11WzFdKSxuLnJhbmdlKGVbMF0saW8oK2VbMV0rMSksMT50PzE6dCl9LHIudGlja0Zvcm1hdD1mdW5jdGlvbigpe3JldHVybiBlfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcm8obi5jb3B5KCksdCxlKX0sSmkocixuKX1mdW5jdGlvbiBpbyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gdW8obil7cmV0dXJuIEpTT04ucGFyc2Uobi5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIG9vKG4pe3ZhciB0PWZvLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIHQuc2VsZWN0Tm9kZShmby5ib2R5KSx0LmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChuLnJlc3BvbnNlVGV4dCl9dmFyIGFvPXt2ZXJzaW9uOiIzLjUuMTcifSxsbz1bXS5zbGljZSxjbz1mdW5jdGlvbihuKXtyZXR1cm4gbG8uY2FsbChuKX0sZm89dGhpcy5kb2N1bWVudDtpZihmbyl0cnl7Y28oZm8uZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKHNvKXtjbz1mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1uZXcgQXJyYXkodCk7dC0tOyllW3RdPW5bdF07cmV0dXJuIGV9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxmbyl0cnl7Zm8uY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKGhvKXt2YXIgcG89dGhpcy5FbGVtZW50LnByb3RvdHlwZSxnbz1wby5zZXRBdHRyaWJ1dGUsdm89cG8uc2V0QXR0cmlidXRlTlMseW89dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxtbz15by5zZXRQcm9wZXJ0eTtwby5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24obix0KXtnby5jYWxsKHRoaXMsbix0KyIiKX0scG8uc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24obix0LGUpe3ZvLmNhbGwodGhpcyxuLHQsZSsiIil9LHlvLnNldFByb3BlcnR5PWZ1bmN0aW9uKG4sdCxlKXttby5jYWxsKHRoaXMsbix0KyIiLGUpfX1hby5hc2NlbmRpbmc9ZSxhby5kZXNjZW5kaW5nPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4+dD8tMTp0Pm4/MTp0Pj1uPzA6TmFOfSxhby5taW49ZnVuY3Rpb24obix0KXt2YXIgZSxyLGk9LTEsdT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8dTspaWYobnVsbCE9KHI9bltpXSkmJnI+PXIpe2U9cjticmVha31mb3IoOysraTx1OyludWxsIT0ocj1uW2ldKSYmZT5yJiYoZT1yKX1lbHNle2Zvcig7KytpPHU7KWlmKG51bGwhPShyPXQuY2FsbChuLG5baV0saSkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8dTspbnVsbCE9KHI9dC5jYWxsKG4sbltpXSxpKSkmJmU+ciYmKGU9cil9cmV0dXJuIGV9LGFvLm1heD1mdW5jdGlvbihuLHQpe3ZhciBlLHIsaT0tMSx1PW4ubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTx1OylpZihudWxsIT0ocj1uW2ldKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7KytpPHU7KW51bGwhPShyPW5baV0pJiZyPmUmJihlPXIpfWVsc2V7Zm9yKDsrK2k8dTspaWYobnVsbCE9KHI9dC5jYWxsKG4sbltpXSxpKSkmJnI+PXIpe2U9cjticmVha31mb3IoOysraTx1OyludWxsIT0ocj10LmNhbGwobixuW2ldLGkpKSYmcj5lJiYoZT1yKX1yZXR1cm4gZX0sYW8uZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUscixpLHU9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK3U8bzspaWYobnVsbCE9KHI9blt1XSkmJnI+PXIpe2U9aT1yO2JyZWFrfWZvcig7Kyt1PG87KW51bGwhPShyPW5bdV0pJiYoZT5yJiYoZT1yKSxyPmkmJihpPXIpKX1lbHNle2Zvcig7Kyt1PG87KWlmKG51bGwhPShyPXQuY2FsbChuLG5bdV0sdSkpJiZyPj1yKXtlPWk9cjticmVha31mb3IoOysrdTxvOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmKGU+ciYmKGU9cikscj5pJiYoaT1yKSl9cmV0dXJuW2UsaV19LGFvLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLG89LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK288dTspaShlPStuW29dKSYmKHIrPWUpO2Vsc2UgZm9yKDsrK288dTspaShlPSt0LmNhbGwobixuW29dLG8pKSYmKHIrPWUpO3JldHVybiByfSxhby5tZWFuPWZ1bmN0aW9uKG4sdCl7dmFyIGUsdT0wLG89bi5sZW5ndGgsYT0tMSxsPW87aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8bzspaShlPXIoblthXSkpP3UrPWU6LS1sO2Vsc2UgZm9yKDsrK2E8bzspaShlPXIodC5jYWxsKG4sblthXSxhKSkpP3UrPWU6LS1sO3JldHVybiBsP3UvbDp2b2lkIDB9LGFvLnF1YW50aWxlPWZ1bmN0aW9uKG4sdCl7dmFyIGU9KG4ubGVuZ3RoLTEpKnQrMSxyPU1hdGguZmxvb3IoZSksaT0rbltyLTFdLHU9ZS1yO3JldHVybiB1P2krdSoobltyXS1pKTppfSxhby5tZWRpYW49ZnVuY3Rpb24obix0KXt2YXIgdSxvPVtdLGE9bi5sZW5ndGgsbD0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbDxhOylpKHU9cihuW2xdKSkmJm8ucHVzaCh1KTtlbHNlIGZvcig7KytsPGE7KWkodT1yKHQuY2FsbChuLG5bbF0sbCkpKSYmby5wdXNoKHUpO3JldHVybiBvLmxlbmd0aD9hby5xdWFudGlsZShvLnNvcnQoZSksLjUpOnZvaWQgMH0sYW8udmFyaWFuY2U9ZnVuY3Rpb24obix0KXt2YXIgZSx1LG89bi5sZW5ndGgsYT0wLGw9MCxjPS0xLGY9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYzxvOylpKGU9cihuW2NdKSkmJih1PWUtYSxhKz11LysrZixsKz11KihlLWEpKTtlbHNlIGZvcig7KytjPG87KWkoZT1yKHQuY2FsbChuLG5bY10sYykpKSYmKHU9ZS1hLGErPXUvKytmLGwrPXUqKGUtYSkpO3JldHVybiBmPjE/bC8oZi0xKTp2b2lkIDB9LGFvLmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBuPWFvLnZhcmlhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbj9NYXRoLnNxcnQobik6bn07dmFyIE1vPXUoZSk7YW8uYmlzZWN0TGVmdD1Nby5sZWZ0LGFvLmJpc2VjdD1hby5iaXNlY3RSaWdodD1Nby5yaWdodCxhby5iaXNlY3Rvcj1mdW5jdGlvbihuKXtyZXR1cm4gdSgxPT09bi5sZW5ndGg/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShuKHQpLHIpfTpuKX0sYW8uc2h1ZmZsZT1mdW5jdGlvbihuLHQsZSl7KHU9YXJndW1lbnRzLmxlbmd0aCk8MyYmKGU9bi5sZW5ndGgsMj51JiYodD0wKSk7Zm9yKHZhciByLGksdT1lLXQ7dTspaT1NYXRoLnJhbmRvbSgpKnUtLXwwLHI9blt1K3RdLG5bdSt0XT1uW2krdF0sbltpK3RdPXI7cmV0dXJuIG59LGFvLnBlcm11dGU9ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPW5bdFtlXV07cmV0dXJuIHJ9LGFvLnBhaXJzPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlPTAscj1uLmxlbmd0aC0xLGk9blswXSx1PW5ldyBBcnJheSgwPnI/MDpyKTtyPmU7KXVbZV09W3Q9aSxpPW5bKytlXV07cmV0dXJuIHV9LGFvLnRyYW5zcG9zZT1mdW5jdGlvbihuKXtpZighKGk9bi5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgdD0tMSxlPWFvLm1pbihuLG8pLHI9bmV3IEFycmF5KGUpOysrdDxlOylmb3IodmFyIGksdT0tMSxhPXJbdF09bmV3IEFycmF5KGkpOysrdTxpOylhW3VdPW5bdV1bdF07cmV0dXJuIHJ9LGFvLnppcD1mdW5jdGlvbigpe3JldHVybiBhby50cmFuc3Bvc2UoYXJndW1lbnRzKX0sYW8ua2V5cz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2goZSk7cmV0dXJuIHR9LGFvLnZhbHVlcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2gobltlXSk7cmV0dXJuIHR9LGFvLmVudHJpZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4pdC5wdXNoKHtrZXk6ZSx2YWx1ZTpuW2VdfSk7cmV0dXJuIHR9LGFvLm1lcmdlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHIsaT1uLmxlbmd0aCx1PS0xLG89MDsrK3U8aTspbys9blt1XS5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KG8pOy0taT49MDspZm9yKHI9bltpXSx0PXIubGVuZ3RoOy0tdD49MDspZVstLW9dPXJbdF07cmV0dXJuIGV9O3ZhciB4bz1NYXRoLmFiczthby5yYW5nZT1mdW5jdGlvbihuLHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYoZT0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPTApKSwodC1uKS9lPT09MS8wKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgcixpPVtdLHU9YSh4byhlKSksbz0tMTtpZihuKj11LHQqPXUsZSo9dSwwPmUpZm9yKDsocj1uK2UqKytvKT50OylpLnB1c2goci91KTtlbHNlIGZvcig7KHI9bitlKisrbyk8dDspaS5wdXNoKHIvdSk7cmV0dXJuIGl9LGFvLm1hcD1mdW5jdGlvbihuLHQpe3ZhciBlPW5ldyBjO2lmKG4gaW5zdGFuY2VvZiBjKW4uZm9yRWFjaChmdW5jdGlvbihuLHQpe2Uuc2V0KG4sdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciByLGk9LTEsdT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTx1OyllLnNldChpLG5baV0pO2Vsc2UgZm9yKDsrK2k8dTspZS5zZXQodC5jYWxsKG4scj1uW2ldLGkpLHIpfWVsc2UgZm9yKHZhciBvIGluIG4pZS5zZXQobyxuW29dKTtyZXR1cm4gZX07dmFyIGJvPSJfX3Byb3RvX18iLF9vPSJceDAwIjtsKGMse2hhczpoLGdldDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fW2YobildfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpcy5fW2YobildPXR9LHJlbW92ZTpwLGtleXM6Zyx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcy5fKW4ucHVzaCh0aGlzLl9bdF0pO3JldHVybiBufSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMuXyluLnB1c2goe2tleTpzKHQpLHZhbHVlOnRoaXMuX1t0XX0pO3JldHVybiBufSxzaXplOnYsZW1wdHk6ZCxmb3JFYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdCBpbiB0aGlzLl8pbi5jYWxsKHRoaXMscyh0KSx0aGlzLl9bdF0pfX0pLGFvLm5lc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQsbyxhKXtpZihhPj11Lmxlbmd0aClyZXR1cm4gcj9yLmNhbGwoaSxvKTplP28uc29ydChlKTpvO2Zvcih2YXIgbCxmLHMsaCxwPS0xLGc9by5sZW5ndGgsdj11W2ErK10sZD1uZXcgYzsrK3A8ZzspKGg9ZC5nZXQobD12KGY9b1twXSkpKT9oLnB1c2goZik6ZC5zZXQobCxbZl0pO3JldHVybiB0PyhmPXQoKSxzPWZ1bmN0aW9uKGUscil7Zi5zZXQoZSxuKHQscixhKSl9KTooZj17fSxzPWZ1bmN0aW9uKGUscil7ZltlXT1uKHQscixhKX0pLGQuZm9yRWFjaChzKSxmfWZ1bmN0aW9uIHQobixlKXtpZihlPj11Lmxlbmd0aClyZXR1cm4gbjt2YXIgcj1bXSxpPW9bZSsrXTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7ci5wdXNoKHtrZXk6bix2YWx1ZXM6dChpLGUpfSl9KSxpP3Iuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBpKG4ua2V5LHQua2V5KX0pOnJ9dmFyIGUscixpPXt9LHU9W10sbz1bXTtyZXR1cm4gaS5tYXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlLHQsMCl9LGkuZW50cmllcz1mdW5jdGlvbihlKXtyZXR1cm4gdChuKGFvLm1hcCxlLDApLDApfSxpLmtleT1mdW5jdGlvbihuKXtyZXR1cm4gdS5wdXNoKG4pLGl9LGkuc29ydEtleXM9ZnVuY3Rpb24obil7cmV0dXJuIG9bdS5sZW5ndGgtMV09bixpfSxpLnNvcnRWYWx1ZXM9ZnVuY3Rpb24obil7cmV0dXJuIGU9bixpfSxpLnJvbGx1cD1mdW5jdGlvbihuKXtyZXR1cm4gcj1uLGl9LGl9LGFvLnNldD1mdW5jdGlvbihuKXt2YXIgdD1uZXcgeTtpZihuKWZvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5lOysrZSl0LmFkZChuW2VdKTtyZXR1cm4gdH0sbCh5LHtoYXM6aCxhZGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX1tmKG4rPSIiKV09ITAsbn0scmVtb3ZlOnAsdmFsdWVzOmcsc2l6ZTp2LGVtcHR5OmQsZm9yRWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcy5fKW4uY2FsbCh0aGlzLHModCkpfX0pLGFvLmJlaGF2aW9yPXt9LGFvLnJlYmluZD1mdW5jdGlvbihuLHQpe2Zvcih2YXIgZSxyPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrcjxpOyluW2U9YXJndW1lbnRzW3JdXT1NKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIHdvPVsid2Via2l0IiwibXMiLCJtb3oiLCJNb3oiLCJvIiwiTyJdO2FvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBfLHQ9LTEsZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3VtZW50c1t0XV09dyhuKTtyZXR1cm4gbn0sXy5wcm90b3R5cGUub249ZnVuY3Rpb24obix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lmKGU+PTAmJihyPW4uc2xpY2UoZSsxKSxuPW4uc2xpY2UoMCxlKSksbilyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXNbbl0ub24ocik6dGhpc1tuXS5vbihyLHQpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihudWxsPT10KWZvcihuIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShuKSYmdGhpc1tuXS5vbihyLG51bGwpO3JldHVybiB0aGlzfX0sYW8uZXZlbnQ9bnVsbCxhby5yZXF1b3RlPWZ1bmN0aW9uKG4pe3JldHVybiBuLnJlcGxhY2UoU28sIlxcJCYiKX07dmFyIFNvPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZyxrbz17fS5fX3Byb3RvX18/ZnVuY3Rpb24obix0KXtuLl9fcHJvdG9fXz10fTpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXX0sTm89ZnVuY3Rpb24obix0KXtyZXR1cm4gdC5xdWVyeVNlbGVjdG9yKG4pfSxFbz1mdW5jdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwobil9LEFvPWZ1bmN0aW9uKG4sdCl7dmFyIGU9bi5tYXRjaGVzfHxuW3gobiwibWF0Y2hlc1NlbGVjdG9yIildO3JldHVybihBbz1mdW5jdGlvbihuLHQpe3JldHVybiBlLmNhbGwobix0KX0pKG4sdCl9OyJmdW5jdGlvbiI9PXR5cGVvZiBTaXp6bGUmJihObz1mdW5jdGlvbihuLHQpe3JldHVybiBTaXp6bGUobix0KVswXXx8bnVsbH0sRW89U2l6emxlLEFvPVNpenpsZS5tYXRjaGVzU2VsZWN0b3IpLGFvLnNlbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBhby5zZWxlY3QoZm8uZG9jdW1lbnRFbGVtZW50KX07dmFyIENvPWFvLnNlbGVjdGlvbi5wcm90b3R5cGU9W107Q28uc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscixpLHU9W107bj1BKG4pO2Zvcih2YXIgbz0tMSxhPXRoaXMubGVuZ3RoOysrbzxhOyl7dS5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0ocj10aGlzW29dKS5wYXJlbnROb2RlO2Zvcih2YXIgbD0tMSxjPXIubGVuZ3RoOysrbDxjOykoaT1yW2xdKT8odC5wdXNoKGU9bi5jYWxsKGksaS5fX2RhdGFfXyxsLG8pKSxlJiYiX19kYXRhX18iaW4gaSYmKGUuX19kYXRhX189aS5fX2RhdGFfXykpOnQucHVzaChudWxsKX1yZXR1cm4gRSh1KX0sQ28uc2VsZWN0QWxsPWZ1bmN0aW9uKG4pe3ZhciB0LGUscj1bXTtuPUMobik7Zm9yKHZhciBpPS0xLHU9dGhpcy5sZW5ndGg7KytpPHU7KWZvcih2YXIgbz10aGlzW2ldLGE9LTEsbD1vLmxlbmd0aDsrK2E8bDspKGU9b1thXSkmJihyLnB1c2godD1jbyhuLmNhbGwoZSxlLl9fZGF0YV9fLGEsaSkpKSx0LnBhcmVudE5vZGU9ZSk7cmV0dXJuIEUocil9O3ZhciB6bz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsTG89e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnpvLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07YW8ubnM9e3ByZWZpeDpMbyxxdWFsaWZ5OmZ1bmN0aW9uKG4pe3ZhciB0PW4uaW5kZXhPZigiOiIpLGU9bjtyZXR1cm4gdD49MCYmInhtbG5zIiE9PShlPW4uc2xpY2UoMCx0KSkmJihuPW4uc2xpY2UodCsxKSksTG8uaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOkxvW2VdLGxvY2FsOm59Om59fSxDby5hdHRyPWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBlPXRoaXMubm9kZSgpO3JldHVybiBuPWFvLm5zLnF1YWxpZnkobiksbi5sb2NhbD9lLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ZS5nZXRBdHRyaWJ1dGUobil9Zm9yKHQgaW4gbil0aGlzLmVhY2goeih0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKHoobix0KSl9LENvLmNsYXNzZWQ9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9dGhpcy5ub2RlKCkscj0obj1UKG4pKS5sZW5ndGgsaT0tMTtpZih0PWUuY2xhc3NMaXN0KXtmb3IoOysraTxyOylpZighdC5jb250YWlucyhuW2ldKSlyZXR1cm4hMX1lbHNlIGZvcih0PWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysraTxyOylpZighcShuW2ldKS50ZXN0KHQpKXJldHVybiExO3JldHVybiEwfWZvcih0IGluIG4pdGhpcy5lYWNoKFIodCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChSKG4sdCkpfSxDby5zdHlsZT1mdW5jdGlvbihuLGUscil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigzPmkpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5pJiYoZT0iIik7Zm9yKHIgaW4gbil0aGlzLmVhY2goUChyLG5bcl0sZSkpO3JldHVybiB0aGlzfWlmKDI+aSl7dmFyIHU9dGhpcy5ub2RlKCk7cmV0dXJuIHQodSkuZ2V0Q29tcHV0ZWRTdHlsZSh1LG51bGwpLmdldFByb3BlcnR5VmFsdWUobil9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKFAobixlLHIpKX0sQ28ucHJvcGVydHk9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gdGhpcy5ub2RlKClbbl07Zm9yKHQgaW4gbil0aGlzLmVhY2goVSh0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKFUobix0KSl9LENvLnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PSIifTpmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn0pOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxDby5odG1sPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PXQ/IiI6dH06bnVsbD09bj9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPW59KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LENvLmFwcGVuZD1mdW5jdGlvbihuKXtyZXR1cm4gbj1qKG4pLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LENvLmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBuPWoobiksdD1BKHQpLHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxDby5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKEYpfSxDby5kYXRhPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuLGUpe3ZhciByLGksdSxvPW4ubGVuZ3RoLHM9ZS5sZW5ndGgsaD1NYXRoLm1pbihvLHMpLHA9bmV3IEFycmF5KHMpLGc9bmV3IEFycmF5KHMpLHY9bmV3IEFycmF5KG8pO2lmKHQpe3ZhciBkLHk9bmV3IGMsbT1uZXcgQXJyYXkobyk7Zm9yKHI9LTE7KytyPG87KShpPW5bcl0pJiYoeS5oYXMoZD10LmNhbGwoaSxpLl9fZGF0YV9fLHIpKT92W3JdPWk6eS5zZXQoZCxpKSxtW3JdPWQpO2ZvcihyPS0xOysrcjxzOykoaT15LmdldChkPXQuY2FsbChlLHU9ZVtyXSxyKSkpP2khPT0hMCYmKHBbcl09aSxpLl9fZGF0YV9fPXUpOmdbcl09SCh1KSx5LnNldChkLCEwKTtmb3Iocj0tMTsrK3I8bzspciBpbiBtJiZ5LmdldChtW3JdKSE9PSEwJiYodltyXT1uW3JdKX1lbHNle2ZvcihyPS0xOysrcjxoOylpPW5bcl0sdT1lW3JdLGk/KGkuX19kYXRhX189dSxwW3JdPWkpOmdbcl09SCh1KTtmb3IoO3M+cjsrK3IpZ1tyXT1IKGVbcl0pO2Zvcig7bz5yOysrcil2W3JdPW5bcl19Zy51cGRhdGU9cCxnLnBhcmVudE5vZGU9cC5wYXJlbnROb2RlPXYucGFyZW50Tm9kZT1uLnBhcmVudE5vZGUsYS5wdXNoKGcpLGwucHVzaChwKSxmLnB1c2godil9dmFyIHIsaSx1PS0xLG89dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2ZvcihuPW5ldyBBcnJheShvPShyPXRoaXNbMF0pLmxlbmd0aCk7Kyt1PG87KShpPXJbdV0pJiYoblt1XT1pLl9fZGF0YV9fKTtyZXR1cm4gbn12YXIgYT1aKFtdKSxsPUUoW10pLGY9RShbXSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pZm9yKDsrK3U8bzspZShyPXRoaXNbdV0sbi5jYWxsKHIsci5wYXJlbnROb2RlLl9fZGF0YV9fLHUpKTtlbHNlIGZvcig7Kyt1PG87KWUocj10aGlzW3VdLG4pO3JldHVybiBsLmVudGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGwuZXhpdD1mdW5jdGlvbigpe3JldHVybiBmfSxsfSxDby5kYXR1bT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsbik6dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKX0sQ28uZmlsdGVyPWZ1bmN0aW9uKG4pe3ZhciB0LGUscixpPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1PKG4pKTtmb3IodmFyIHU9MCxvPXRoaXMubGVuZ3RoO28+dTt1Kyspe2kucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9KGU9dGhpc1t1XSkucGFyZW50Tm9kZTtmb3IodmFyIGE9MCxsPWUubGVuZ3RoO2w+YTthKyspKHI9ZVthXSkmJm4uY2FsbChyLHIuX19kYXRhX18sYSx1KSYmdC5wdXNoKHIpfXJldHVybiBFKGkpfSxDby5vcmRlcj1mdW5jdGlvbigpe2Zvcih2YXIgbj0tMSx0PXRoaXMubGVuZ3RoOysrbjx0Oylmb3IodmFyIGUscj10aGlzW25dLGk9ci5sZW5ndGgtMSx1PXJbaV07LS1pPj0wOykoZT1yW2ldKSYmKHUmJnUhPT1lLm5leHRTaWJsaW5nJiZ1LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdSksdT1lKTtyZXR1cm4gdGhpc30sQ28uc29ydD1mdW5jdGlvbihuKXtuPUkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2Zvcih2YXIgdD0tMSxlPXRoaXMubGVuZ3RoOysrdDxlOyl0aGlzW3RdLnNvcnQobik7cmV0dXJuIHRoaXMub3JkZXIoKX0sQ28uZWFjaD1mdW5jdGlvbihuKXtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKHQsZSxyKXtuLmNhbGwodCx0Ll9fZGF0YV9fLGUscil9KX0sQ28uY2FsbD1mdW5jdGlvbihuKXt2YXIgdD1jbyhhcmd1bWVudHMpO3JldHVybiBuLmFwcGx5KHRbMF09dGhpcyx0KSx0aGlzfSxDby5lbXB0eT1mdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sQ28ubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLHQ9dGhpcy5sZW5ndGg7dD5uO24rKylmb3IodmFyIGU9dGhpc1tuXSxyPTAsaT1lLmxlbmd0aDtpPnI7cisrKXt2YXIgdT1lW3JdO2lmKHUpcmV0dXJuIHV9cmV0dXJuIG51bGx9LENvLnNpemU9ZnVuY3Rpb24oKXt2YXIgbj0wO3JldHVybiBZKHRoaXMsZnVuY3Rpb24oKXsrK259KSxufTt2YXIgcW89W107YW8uc2VsZWN0aW9uLmVudGVyPVosYW8uc2VsZWN0aW9uLmVudGVyLnByb3RvdHlwZT1xbyxxby5hcHBlbmQ9Q28uYXBwZW5kLHFvLmVtcHR5PUNvLmVtcHR5LHFvLm5vZGU9Q28ubm9kZSxxby5jYWxsPUNvLmNhbGwscW8uc2l6ZT1Dby5zaXplLHFvLnNlbGVjdD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLGksdSxvPVtdLGE9LTEsbD10aGlzLmxlbmd0aDsrK2E8bDspe3I9KGk9dGhpc1thXSkudXBkYXRlLG8ucHVzaCh0PVtdKSx0LnBhcmVudE5vZGU9aS5wYXJlbnROb2RlO2Zvcih2YXIgYz0tMSxmPWkubGVuZ3RoOysrYzxmOykodT1pW2NdKT8odC5wdXNoKHJbY109ZT1uLmNhbGwoaS5wYXJlbnROb2RlLHUuX19kYXRhX18sYyxhKSksZS5fX2RhdGFfXz11Ll9fZGF0YV9fKTp0LnB1c2gobnVsbCl9cmV0dXJuIEUobyl9LHFvLmluc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PVYodGhpcykpLENvLmluc2VydC5jYWxsKHRoaXMsbix0KX0sYW8uc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bTm8odCxmbyldLGUucGFyZW50Tm9kZT1mby5kb2N1bWVudEVsZW1lbnQpOihlPVt0XSxlLnBhcmVudE5vZGU9bih0KSksRShbZV0pfSxhby5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQ7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyh0PWNvKEVvKG4sZm8pKSx0LnBhcmVudE5vZGU9Zm8uZG9jdW1lbnRFbGVtZW50KToodD1jbyhuKSx0LnBhcmVudE5vZGU9bnVsbCksRShbdF0pfSxDby5vbj1mdW5jdGlvbihuLHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtpZigzPnIpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5yJiYodD0hMSk7Zm9yKGUgaW4gbil0aGlzLmVhY2goWChlLG5bZV0sdCkpO3JldHVybiB0aGlzfWlmKDI+cilyZXR1cm4ocj10aGlzLm5vZGUoKVsiX19vbiIrbl0pJiZyLl87ZT0hMX1yZXR1cm4gdGhpcy5lYWNoKFgobix0LGUpKX07dmFyIFRvPWFvLm1hcCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KTtmbyYmVG8uZm9yRWFjaChmdW5jdGlvbihuKXsib24iK24gaW4gZm8mJlRvLnJlbW92ZShuKX0pO3ZhciBSbyxEbz0wO2FvLm1vdXNlPWZ1bmN0aW9uKG4pe3JldHVybiBKKG4saygpKX07dmFyIFBvPXRoaXMubmF2aWdhdG9yJiYvV2ViS2l0Ly50ZXN0KHRoaXMubmF2aWdhdG9yLnVzZXJBZ2VudCk/LTE6MDthby50b3VjaD1mdW5jdGlvbihuLHQsZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYoZT10LHQ9aygpLmNoYW5nZWRUb3VjaGVzKSx0KWZvcih2YXIgcixpPTAsdT10Lmxlbmd0aDt1Pmk7KytpKWlmKChyPXRbaV0pLmlkZW50aWZpZXI9PT1lKXJldHVybiBKKG4scil9LGFvLmJlaGF2aW9yLmRyYWc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dGhpcy5vbigibW91c2Vkb3duLmRyYWciLHUpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLG8pfWZ1bmN0aW9uIGUobix0LGUsdSxvKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIG4sZSxyPXQoaCx2KTtyJiYobj1yWzBdLU1bMF0sZT1yWzFdLU1bMV0sZ3w9bnxlLE09cixwKHt0eXBlOiJkcmFnIix4OnJbMF0rY1swXSx5OnJbMV0rY1sxXSxkeDpuLGR5OmV9KSl9ZnVuY3Rpb24gbCgpe3QoaCx2KSYmKHkub24odStkLG51bGwpLm9uKG8rZCxudWxsKSxtKGcpLHAoe3R5cGU6ImRyYWdlbmQifSkpfXZhciBjLGY9dGhpcyxzPWFvLmV2ZW50LnRhcmdldC5jb3JyZXNwb25kaW5nRWxlbWVudHx8YW8uZXZlbnQudGFyZ2V0LGg9Zi5wYXJlbnROb2RlLHA9ci5vZihmLGFyZ3VtZW50cyksZz0wLHY9bigpLGQ9Ii5kcmFnIisobnVsbD09dj8iIjoiLSIrdikseT1hby5zZWxlY3QoZShzKSkub24odStkLGEpLm9uKG8rZCxsKSxtPVcocyksTT10KGgsdik7aT8oYz1pLmFwcGx5KGYsYXJndW1lbnRzKSxjPVtjLngtTVswXSxjLnktTVsxXV0pOmM9WzAsMF0scCh7dHlwZToiZHJhZ3N0YXJ0In0pfX12YXIgcj1OKG4sImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiksaT1udWxsLHU9ZShiLGFvLm1vdXNlLHQsIm1vdXNlbW92ZSIsIm1vdXNldXAiKSxvPWUoRyxhby50b3VjaCxtLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpO3JldHVybiBuLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG4pOml9LGFvLnJlYmluZChuLHIsIm9uIil9LGFvLnRvdWNoZXM9ZnVuY3Rpb24obix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD1rKCkudG91Y2hlcyksdD9jbyh0KS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9SihuLHQpO3JldHVybiBlLmlkZW50aWZpZXI9dC5pZGVudGlmaWVyLGV9KTpbXX07dmFyIFVvPTFlLTYsam89VW8qVW8sRm89TWF0aC5QSSxIbz0yKkZvLE9vPUhvLVVvLElvPUZvLzIsWW89Rm8vMTgwLFpvPTE4MC9GbyxWbz1NYXRoLlNRUlQyLFhvPTIsJG89NDthby5pbnRlcnBvbGF0ZVpvb209ZnVuY3Rpb24obix0KXt2YXIgZSxyLGk9blswXSx1PW5bMV0sbz1uWzJdLGE9dFswXSxsPXRbMV0sYz10WzJdLGY9YS1pLHM9bC11LGg9ZipmK3MqcztpZihqbz5oKXI9TWF0aC5sb2coYy9vKS9WbyxlPWZ1bmN0aW9uKG4pe3JldHVybltpK24qZix1K24qcyxvKk1hdGguZXhwKFZvKm4qcildfTtlbHNle3ZhciBwPU1hdGguc3FydChoKSxnPShjKmMtbypvKyRvKmgpLygyKm8qWG8qcCksdj0oYypjLW8qby0kbypoKS8oMipjKlhvKnApLGQ9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKSx5PU1hdGgubG9nKE1hdGguc3FydCh2KnYrMSktdik7cj0oeS1kKS9WbyxlPWZ1bmN0aW9uKG4pe3ZhciB0PW4qcixlPXJuKGQpLGE9by8oWG8qcCkqKGUqdW4oVm8qdCtkKS1lbihkKSk7cmV0dXJuW2krYSpmLHUrYSpzLG8qZS9ybihWbyp0K2QpXX19cmV0dXJuIGUuZHVyYXRpb249MWUzKnIsZX0sYW8uYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7bi5vbihMLHMpLm9uKFdvKyIuem9vbSIscCkub24oImRibGNsaWNrLnpvb20iLGcpLm9uKFIsaCl9ZnVuY3Rpb24gZShuKXtyZXR1cm5bKG5bMF0tay54KS9rLmssKG5bMV0tay55KS9rLmtdfWZ1bmN0aW9uIHIobil7cmV0dXJuW25bMF0qay5rK2sueCxuWzFdKmsuaytrLnldfWZ1bmN0aW9uIGkobil7ay5rPU1hdGgubWF4KEFbMF0sTWF0aC5taW4oQVsxXSxuKSl9ZnVuY3Rpb24gdShuLHQpe3Q9cih0KSxrLngrPW5bMF0tdFswXSxrLnkrPW5bMV0tdFsxXX1mdW5jdGlvbiBvKHQsZSxyLG8pe3QuX19jaGFydF9fPXt4OmsueCx5OmsueSxrOmsua30saShNYXRoLnBvdygyLG8pKSx1KGQ9ZSxyKSx0PWFvLnNlbGVjdCh0KSxDPjAmJih0PXQudHJhbnNpdGlvbigpLmR1cmF0aW9uKEMpKSx0LmNhbGwobi5ldmVudCl9ZnVuY3Rpb24gYSgpe2ImJmIuZG9tYWluKHgucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4tay54KS9rLmt9KS5tYXAoeC5pbnZlcnQpKSx3JiZ3LmRvbWFpbihfLnJhbmdlKCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLWsueSkvay5rfSkubWFwKF8uaW52ZXJ0KSl9ZnVuY3Rpb24gbChuKXt6Kyt8fG4oe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBjKG4pe2EoKSxuKHt0eXBlOiJ6b29tIixzY2FsZTprLmssdHJhbnNsYXRlOltrLngsay55XX0pfWZ1bmN0aW9uIGYobil7LS16fHwobih7dHlwZToiem9vbWVuZCJ9KSxkPW51bGwpfWZ1bmN0aW9uIHMoKXtmdW5jdGlvbiBuKCl7YT0xLHUoYW8ubW91c2UoaSksaCksYyhvKX1mdW5jdGlvbiByKCl7cy5vbihxLG51bGwpLm9uKFQsbnVsbCkscChhKSxmKG8pfXZhciBpPXRoaXMsbz1ELm9mKGksYXJndW1lbnRzKSxhPTAscz1hby5zZWxlY3QodChpKSkub24ocSxuKS5vbihULHIpLGg9ZShhby5tb3VzZShpKSkscD1XKGkpO0lsLmNhbGwoaSksbChvKX1mdW5jdGlvbiBoKCl7ZnVuY3Rpb24gbigpe3ZhciBuPWFvLnRvdWNoZXMoZyk7cmV0dXJuIHA9ay5rLG4uZm9yRWFjaChmdW5jdGlvbihuKXtuLmlkZW50aWZpZXIgaW4gZCYmKGRbbi5pZGVudGlmaWVyXT1lKG4pKX0pLG59ZnVuY3Rpb24gdCgpe3ZhciB0PWFvLmV2ZW50LnRhcmdldDthby5zZWxlY3QodCkub24oeCxyKS5vbihiLGEpLF8ucHVzaCh0KTtmb3IodmFyIGU9YW8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsaT0wLHU9ZS5sZW5ndGg7dT5pOysraSlkW2VbaV0uaWRlbnRpZmllcl09bnVsbDt2YXIgbD1uKCksYz1EYXRlLm5vdygpO2lmKDE9PT1sLmxlbmd0aCl7aWYoNTAwPmMtTSl7dmFyIGY9bFswXTtvKGcsZixkW2YuaWRlbnRpZmllcl0sTWF0aC5mbG9vcihNYXRoLmxvZyhrLmspL01hdGguTE4yKSsxKSxTKCl9TT1jfWVsc2UgaWYobC5sZW5ndGg+MSl7dmFyIGY9bFswXSxzPWxbMV0saD1mWzBdLXNbMF0scD1mWzFdLXNbMV07eT1oKmgrcCpwfX1mdW5jdGlvbiByKCl7dmFyIG4sdCxlLHIsbz1hby50b3VjaGVzKGcpO0lsLmNhbGwoZyk7Zm9yKHZhciBhPTAsbD1vLmxlbmd0aDtsPmE7KythLHI9bnVsbClpZihlPW9bYV0scj1kW2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9cn1pZihyKXt2YXIgZj0oZj1lWzBdLW5bMF0pKmYrKGY9ZVsxXS1uWzFdKSpmLHM9eSYmTWF0aC5zcXJ0KGYveSk7bj1bKG5bMF0rZVswXSkvMiwoblsxXStlWzFdKS8yXSx0PVsodFswXStyWzBdKS8yLCh0WzFdK3JbMV0pLzJdLGkocypwKX1NPW51bGwsdShuLHQpLGModil9ZnVuY3Rpb24gYSgpe2lmKGFvLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFyIHQ9YW8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysrZSlkZWxldGUgZFt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgaSBpbiBkKXJldHVybiB2b2lkIG4oKX1hby5zZWxlY3RBbGwoXykub24obSxudWxsKSx3Lm9uKEwscykub24oUixoKSxOKCksZih2KX12YXIgcCxnPXRoaXMsdj1ELm9mKGcsYXJndW1lbnRzKSxkPXt9LHk9MCxtPSIuem9vbS0iK2FvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIseD0idG91Y2htb3ZlIittLGI9InRvdWNoZW5kIittLF89W10sdz1hby5zZWxlY3QoZyksTj1XKGcpO3QoKSxsKHYpLHcub24oTCxudWxsKS5vbihSLHQpfWZ1bmN0aW9uIHAoKXt2YXIgbj1ELm9mKHRoaXMsYXJndW1lbnRzKTttP2NsZWFyVGltZW91dChtKTooSWwuY2FsbCh0aGlzKSx2PWUoZD15fHxhby5tb3VzZSh0aGlzKSksbChuKSksbT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bT1udWxsLGYobil9LDUwKSxTKCksaShNYXRoLnBvdygyLC4wMDIqQm8oKSkqay5rKSx1KGQsdiksYyhuKX1mdW5jdGlvbiBnKCl7dmFyIG49YW8ubW91c2UodGhpcyksdD1NYXRoLmxvZyhrLmspL01hdGguTE4yO28odGhpcyxuLGUobiksYW8uZXZlbnQuc2hpZnRLZXk/TWF0aC5jZWlsKHQpLTE6TWF0aC5mbG9vcih0KSsxKX12YXIgdixkLHksbSxNLHgsYixfLHcsaz17eDowLHk6MCxrOjF9LEU9Wzk2MCw1MDBdLEE9Sm8sQz0yNTAsej0wLEw9Im1vdXNlZG93bi56b29tIixxPSJtb3VzZW1vdmUuem9vbSIsVD0ibW91c2V1cC56b29tIixSPSJ0b3VjaHN0YXJ0Lnpvb20iLEQ9TihuLCJ6b29tc3RhcnQiLCJ6b29tIiwiem9vbWVuZCIpO3JldHVybiBXb3x8KFdvPSJvbndoZWVsImluIGZvPyhCbz1mdW5jdGlvbigpe3JldHVybi1hby5ldmVudC5kZWx0YVkqKGFvLmV2ZW50LmRlbHRhTW9kZT8xMjA6MSl9LCJ3aGVlbCIpOiJvbm1vdXNld2hlZWwiaW4gZm8/KEJvPWZ1bmN0aW9uKCl7cmV0dXJuIGFvLmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KEJvPWZ1bmN0aW9uKCl7cmV0dXJuLWFvLmV2ZW50LmRldGFpbH0sIk1vek1vdXNlUGl4ZWxTY3JvbGwiKSksbi5ldmVudD1mdW5jdGlvbihuKXtuLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1ELm9mKHRoaXMsYXJndW1lbnRzKSx0PWs7SGw/YW8uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC56b29tIixmdW5jdGlvbigpe2s9dGhpcy5fX2NoYXJ0X198fHt4OjAseTowLGs6MX0sbChuKX0pLnR3ZWVuKCJ6b29tOnpvb20iLGZ1bmN0aW9uKCl7dmFyIGU9RVswXSxyPUVbMV0saT1kP2RbMF06ZS8yLHU9ZD9kWzFdOnIvMixvPWFvLmludGVycG9sYXRlWm9vbShbKGktay54KS9rLmssKHUtay55KS9rLmssZS9rLmtdLFsoaS10LngpL3QuaywodS10LnkpL3QuayxlL3Qua10pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1vKHQpLGE9ZS9yWzJdO3RoaXMuX19jaGFydF9fPWs9e3g6aS1yWzBdKmEseTp1LXJbMV0qYSxrOmF9LGMobil9fSkuZWFjaCgiaW50ZXJydXB0Lnpvb20iLGZ1bmN0aW9uKCl7ZihuKX0pLmVhY2goImVuZC56b29tIixmdW5jdGlvbigpe2Yobil9KToodGhpcy5fX2NoYXJ0X189ayxsKG4pLGMobiksZihuKSl9KX0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9e3g6K3RbMF0seTordFsxXSxrOmsua30sYSgpLG4pOltrLngsay55XX0sbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz17eDprLngseTprLnksazpudWxsfSxpKCt0KSxhKCksbik6ay5rfSxuLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPW51bGw9PXQ/Sm86Wyt0WzBdLCt0WzFdXSxuKTpBfSxuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT10JiZbK3RbMF0sK3RbMV1dLG4pOnl9LG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT10JiZbK3RbMF0sK3RbMV1dLG4pOkV9LG4uZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEM9K3Qsbik6Q30sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQseD10LmNvcHkoKSxrPXt4OjAseTowLGs6MX0sbik6Yn0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXQsXz10LmNvcHkoKSxrPXt4OjAseTowLGs6MX0sbik6d30sYW8ucmViaW5kKG4sRCwib24iKX07dmFyIEJvLFdvLEpvPVswLDEvMF07YW8uY29sb3I9YW4sYW4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LGFvLmhzbD1sbjt2YXIgR289bG4ucHJvdG90eXBlPW5ldyBhbjtHby5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSksbmV3IGxuKHRoaXMuaCx0aGlzLnMsdGhpcy5sL24pfSxHby5kYXJrZXI9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9uOjEpLG5ldyBsbih0aGlzLmgsdGhpcy5zLG4qdGhpcy5sKX0sR28ucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIGNuKHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sYW8uaGNsPWZuO3ZhciBLbz1mbi5wcm90b3R5cGU9bmV3IGFuO0tvLmJyaWdodGVyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZm4odGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK1FvKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0sS28uZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZm4odGhpcy5oLHRoaXMuYyxNYXRoLm1heCgwLHRoaXMubC1RbyooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSl9LEtvLnJnYj1mdW5jdGlvbigpe3JldHVybiBzbih0aGlzLmgsdGhpcy5jLHRoaXMubCkucmdiKCl9LGFvLmxhYj1objt2YXIgUW89MTgsbmE9Ljk1MDQ3LHRhPTEsZWE9MS4wODg4MyxyYT1obi5wcm90b3R5cGU9bmV3IGFuO3JhLmJyaWdodGVyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgaG4oTWF0aC5taW4oMTAwLHRoaXMubCtRbyooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0scmEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgaG4oTWF0aC5tYXgoMCx0aGlzLmwtUW8qKGFyZ3VtZW50cy5sZW5ndGg/bjoxKSksdGhpcy5hLHRoaXMuYil9LHJhLnJnYj1mdW5jdGlvbigpe3JldHVybiBwbih0aGlzLmwsdGhpcy5hLHRoaXMuYil9LGFvLnJnYj1tbjt2YXIgaWE9bW4ucHJvdG90eXBlPW5ldyBhbjtpYS5icmlnaHRlcj1mdW5jdGlvbihuKXtuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKTt2YXIgdD10aGlzLnIsZT10aGlzLmcscj10aGlzLmIsaT0zMDtyZXR1cm4gdHx8ZXx8cj8odCYmaT50JiYodD1pKSxlJiZpPmUmJihlPWkpLHImJmk+ciYmKHI9aSksbmV3IG1uKE1hdGgubWluKDI1NSx0L24pLE1hdGgubWluKDI1NSxlL24pLE1hdGgubWluKDI1NSxyL24pKSk6bmV3IG1uKGksaSxpKX0saWEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxuZXcgbW4obip0aGlzLnIsbip0aGlzLmcsbip0aGlzLmIpfSxpYS5oc2w9ZnVuY3Rpb24oKXtyZXR1cm4gd24odGhpcy5yLHRoaXMuZyx0aGlzLmIpfSxpYS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIjIitibih0aGlzLnIpK2JuKHRoaXMuZykrYm4odGhpcy5iKX07dmFyIHVhPWFvLm1hcCh7YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7dWEuZm9yRWFjaChmdW5jdGlvbihuLHQpe3VhLnNldChuLE1uKHQpKX0pLGFvLmZ1bmN0b3I9RW4sYW8ueGhyPUFuKG0pLGFvLmRzdj1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobixlLHUpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHU9ZSxlPW51bGwpO3ZhciBvPUNuKG4sdCxudWxsPT1lP3I6aShlKSx1KTtyZXR1cm4gby5yb3c9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5yZXNwb25zZShudWxsPT0oZT1uKT9yOmkobikpOmV9LG99ZnVuY3Rpb24gcihuKXtyZXR1cm4gZS5wYXJzZShuLnJlc3BvbnNlVGV4dCl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUucGFyc2UodC5yZXNwb25zZVRleHQsbil9fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQubWFwKG8pLmpvaW4obil9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gYS50ZXN0KG4pPyciJytuLnJlcGxhY2UoL1wiL2csJyIiJykrJyInOm59dmFyIGE9bmV3IFJlZ0V4cCgnWyInK24rIlxuXSIpLGw9bi5jaGFyQ29kZUF0KDApO3JldHVybiBlLnBhcnNlPWZ1bmN0aW9uKG4sdCl7dmFyIHI7cmV0dXJuIGUucGFyc2VSb3dzKG4sZnVuY3Rpb24obixlKXtpZihyKXJldHVybiByKG4sZS0xKTt2YXIgaT1uZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrbi5tYXAoZnVuY3Rpb24obix0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobikrIjogZFsiK3QrIl0ifSkuam9pbigiLCIpKyJ9Iik7cj10P2Z1bmN0aW9uKG4sZSl7cmV0dXJuIHQoaShuKSxlKX06aX0pfSxlLnBhcnNlUm93cz1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUoKXtpZihmPj1jKXJldHVybiBvO2lmKGkpcmV0dXJuIGk9ITEsdTt2YXIgdD1mO2lmKDM0PT09bi5jaGFyQ29kZUF0KHQpKXtmb3IodmFyIGU9dDtlKys8YzspaWYoMzQ9PT1uLmNoYXJDb2RlQXQoZSkpe2lmKDM0IT09bi5jaGFyQ29kZUF0KGUrMSkpYnJlYWs7KytlfWY9ZSsyO3ZhciByPW4uY2hhckNvZGVBdChlKzEpO3JldHVybiAxMz09PXI/KGk9ITAsMTA9PT1uLmNoYXJDb2RlQXQoZSsyKSYmKytmKToxMD09PXImJihpPSEwKSxuLnNsaWNlKHQrMSxlKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtjPmY7KXt2YXIgcj1uLmNoYXJDb2RlQXQoZisrKSxhPTE7aWYoMTA9PT1yKWk9ITA7ZWxzZSBpZigxMz09PXIpaT0hMCwxMD09PW4uY2hhckNvZGVBdChmKSYmKCsrZiwrK2EpO2Vsc2UgaWYociE9PWwpY29udGludWU7cmV0dXJuIG4uc2xpY2UodCxmLWEpfXJldHVybiBuLnNsaWNlKHQpfWZvcih2YXIgcixpLHU9e30sbz17fSxhPVtdLGM9bi5sZW5ndGgsZj0wLHM9MDsocj1lKCkpIT09bzspe2Zvcih2YXIgaD1bXTtyIT09dSYmciE9PW87KWgucHVzaChyKSxyPWUoKTt0JiZudWxsPT0oaD10KGgscysrKSl8fGEucHVzaChoKX1yZXR1cm4gYX0sZS5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0WzBdKSlyZXR1cm4gZS5mb3JtYXRSb3dzKHQpO3ZhciByPW5ldyB5LGk9W107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gbilyLmhhcyh0KXx8aS5wdXNoKHIuYWRkKHQpKX0pLFtpLm1hcChvKS5qb2luKG4pXS5jb25jYXQodC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBvKHRbbl0pfSkuam9pbihuKX0pKS5qb2luKCJcbiIpfSxlLmZvcm1hdFJvd3M9ZnVuY3Rpb24obil7cmV0dXJuIG4ubWFwKHUpLmpvaW4oIlxuIil9LGV9LGFvLmNzdj1hby5kc3YoIiwiLCJ0ZXh0L2NzdiIpLGFvLnRzdj1hby5kc3YoIgkiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIik7dmFyIG9hLGFhLGxhLGNhLGZhPXRoaXNbeCh0aGlzLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O2FvLnRpbWVyPWZ1bmN0aW9uKCl7cW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhby50aW1lci5mbHVzaD1mdW5jdGlvbigpe1JuKCksRG4oKX0sYW8ucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJvdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9O3ZhciBzYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoVW4pO2FvLmZvcm1hdFByZWZpeD1mdW5jdGlvbihuLHQpe3ZhciBlPTA7cmV0dXJuKG49K24pJiYoMD5uJiYobio9LTEpLHQmJihuPWFvLnJvdW5kKG4sUG4obix0KSkpLGU9MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKG4pL01hdGguTE4xMCksZT1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChlLTEpLzMpKSkpLHNhWzgrZS8zXX07dmFyIGhhPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaSxwYT1hby5tYXAoe2I6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobil9LG86ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpfSxYOmZ1bmN0aW9uKG4pe3JldHVybiBuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LGU6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9GaXhlZCh0KX0scjpmdW5jdGlvbihuLHQpe3JldHVybihuPWFvLnJvdW5kKG4sUG4obix0KSkpLnRvRml4ZWQoTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxQbihuKigxKzFlLTE1KSx0KSkpKX19KSxnYT1hby50aW1lPXt9LHZhPURhdGU7SG4ucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe2RhLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe2RhLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtkYS5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtkYS5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7ZGEuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7ZGEuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtkYS5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe2RhLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtkYS5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIGRhPURhdGUucHJvdG90eXBlO2dhLnllYXI9T24oZnVuY3Rpb24obil7cmV0dXJuIG49Z2EuZGF5KG4pLG4uc2V0TW9udGgoMCwxKSxufSxmdW5jdGlvbihuLHQpe24uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRGdWxsWWVhcigpfSksZ2EueWVhcnM9Z2EueWVhci5yYW5nZSxnYS55ZWFycy51dGM9Z2EueWVhci51dGMucmFuZ2UsZ2EuZGF5PU9uKGZ1bmN0aW9uKG4pe3ZhciB0PW5ldyB2YSgyZTMsMCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSksdH0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSksZ2EuZGF5cz1nYS5kYXkucmFuZ2UsZ2EuZGF5cy51dGM9Z2EuZGF5LnV0Yy5yYW5nZSxnYS5kYXlPZlllYXI9ZnVuY3Rpb24obil7dmFyIHQ9Z2EueWVhcihuKTtyZXR1cm4gTWF0aC5mbG9vcigobi10LTZlNCoobi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sWyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSJdLmZvckVhY2goZnVuY3Rpb24obix0KXt0PTctdDt2YXIgZT1nYVtuXT1PbihmdW5jdGlvbihuKXtyZXR1cm4obj1nYS5kYXkobikpLnNldERhdGUobi5nZXREYXRlKCktKG4uZ2V0RGF5KCkrdCklNyksbn0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrNypNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7dmFyIGU9Z2EueWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoZ2EuZGF5T2ZZZWFyKG4pKyhlK3QpJTcpLzcpLShlIT09dCl9KTtnYVtuKyJzIl09ZS5yYW5nZSxnYVtuKyJzIl0udXRjPWUudXRjLnJhbmdlLGdhW24rIk9mWWVhciJdPWZ1bmN0aW9uKG4pe3ZhciBlPWdhLnllYXIobikuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKGdhLmRheU9mWWVhcihuKSsoZSt0KSU3KS83KX19KSxnYS53ZWVrPWdhLnN1bmRheSxnYS53ZWVrcz1nYS5zdW5kYXkucmFuZ2UsZ2Eud2Vla3MudXRjPWdhLnN1bmRheS51dGMucmFuZ2UsZ2Eud2Vla09mWWVhcj1nYS5zdW5kYXlPZlllYXI7dmFyIHlhPXsiLSI6IiIsXzoiICIsMDoiMCJ9LG1hPS9eXHMqXGQrLyxNYT0vXiUvO2FvLmxvY2FsZT1mdW5jdGlvbihuKXtyZXR1cm57bnVtYmVyRm9ybWF0OmpuKG4pLHRpbWVGb3JtYXQ6WW4obil9fTt2YXIgeGE9YW8ubG9jYWxlKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxkYXRlVGltZToiJWEgJWIgJWUgJVggJVkiLGRhdGU6IiVtLyVkLyVZIix0aW1lOiIlSDolTTolUyIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSwKc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7YW8uZm9ybWF0PXhhLm51bWJlckZvcm1hdCxhby5nZW89e30sZnQucHJvdG90eXBlPXtzOjAsdDowLGFkZDpmdW5jdGlvbihuKXtzdChuLHRoaXMudCxiYSksc3QoYmEucyx0aGlzLnMsdGhpcyksdGhpcy5zP3RoaXMudCs9YmEudDp0aGlzLnM9YmEudH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIGJhPW5ldyBmdDthby5nZW8uc3RyZWFtPWZ1bmN0aW9uKG4sdCl7biYmX2EuaGFzT3duUHJvcGVydHkobi50eXBlKT9fYVtuLnR5cGVdKG4sdCk6aHQobix0KX07dmFyIF9hPXtGZWF0dXJlOmZ1bmN0aW9uKG4sdCl7aHQobi5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWh0KGVbcl0uZ2VvbWV0cnksdCl9fSx3YT17U3BoZXJlOmZ1bmN0aW9uKG4sdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24obix0KXtuPW4uY29vcmRpbmF0ZXMsdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW49ZVtyXSx0LnBvaW50KG5bMF0sblsxXSxuWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe3B0KG4uY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylwdChlW3JdLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24obix0KXtndChuLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWd0KGVbcl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmdlb21ldHJpZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylodChlW3JdLHQpfX07YW8uZ2VvLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIFNhPTAsYW8uZ2VvLnN0cmVhbShuLE5hKSxTYX07dmFyIFNhLGthPW5ldyBmdCxOYT17c3BoZXJlOmZ1bmN0aW9uKCl7U2ErPTQqRm99LHBvaW50OmIsbGluZVN0YXJ0OmIsbGluZUVuZDpiLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2thLnJlc2V0KCksTmEubGluZVN0YXJ0PXZ0fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIG49MiprYTtTYSs9MD5uPzQqRm8rbjpuLE5hLmxpbmVTdGFydD1OYS5saW5lRW5kPU5hLnBvaW50PWJ9fTthby5nZW8uYm91bmRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHQpe00ucHVzaCh4PVtmPW4saD1uXSkscz50JiYocz10KSx0PnAmJihwPXQpfWZ1bmN0aW9uIHQodCxlKXt2YXIgcj1kdChbdCpZbyxlKllvXSk7aWYoeSl7dmFyIGk9bXQoeSxyKSx1PVtpWzFdLC1pWzBdLDBdLG89bXQodSxpKTtidChvKSxvPV90KG8pO3ZhciBsPXQtZyxjPWw+MD8xOi0xLHY9b1swXSpabypjLGQ9eG8obCk+MTgwO2lmKGReKHY+YypnJiZjKnQ+dikpe3ZhciBtPW9bMV0qWm87bT5wJiYocD1tKX1lbHNlIGlmKHY9KHYrMzYwKSUzNjAtMTgwLGReKHY+YypnJiZjKnQ+dikpe3ZhciBtPS1vWzFdKlpvO3M+bSYmKHM9bSl9ZWxzZSBzPmUmJihzPWUpLGU+cCYmKHA9ZSk7ZD9nPnQ/YShmLHQpPmEoZixoKSYmKGg9dCk6YSh0LGgpPmEoZixoKSYmKGY9dCk6aD49Zj8oZj50JiYoZj10KSx0PmgmJihoPXQpKTp0Pmc/YShmLHQpPmEoZixoKSYmKGg9dCk6YSh0LGgpPmEoZixoKSYmKGY9dCl9ZWxzZSBuKHQsZSk7eT1yLGc9dH1mdW5jdGlvbiBlKCl7Yi5wb2ludD10fWZ1bmN0aW9uIHIoKXt4WzBdPWYseFsxXT1oLGIucG9pbnQ9bix5PW51bGx9ZnVuY3Rpb24gaShuLGUpe2lmKHkpe3ZhciByPW4tZzttKz14byhyKT4xODA/cisocj4wPzM2MDotMzYwKTpyfWVsc2Ugdj1uLGQ9ZTtOYS5wb2ludChuLGUpLHQobixlKX1mdW5jdGlvbiB1KCl7TmEubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbygpe2kodixkKSxOYS5saW5lRW5kKCkseG8obSk+VW8mJihmPS0oaD0xODApKSx4WzBdPWYseFsxXT1oLHk9bnVsbH1mdW5jdGlvbiBhKG4sdCl7cmV0dXJuKHQtPW4pPDA/dCszNjA6dH1mdW5jdGlvbiBsKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBjKG4sdCl7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn12YXIgZixzLGgscCxnLHYsZCx5LG0sTSx4LGI9e3BvaW50Om4sbGluZVN0YXJ0OmUsbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2IucG9pbnQ9aSxiLmxpbmVTdGFydD11LGIubGluZUVuZD1vLG09MCxOYS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe05hLnBvbHlnb25FbmQoKSxiLnBvaW50PW4sYi5saW5lU3RhcnQ9ZSxiLmxpbmVFbmQ9ciwwPmthPyhmPS0oaD0xODApLHM9LShwPTkwKSk6bT5Vbz9wPTkwOi1Vbz5tJiYocz0tOTApLHhbMF09Zix4WzFdPWh9fTtyZXR1cm4gZnVuY3Rpb24obil7cD1oPS0oZj1zPTEvMCksTT1bXSxhby5nZW8uc3RyZWFtKG4sYik7dmFyIHQ9TS5sZW5ndGg7aWYodCl7TS5zb3J0KGwpO2Zvcih2YXIgZSxyPTEsaT1NWzBdLHU9W2ldO3Q+cjsrK3IpZT1NW3JdLGMoZVswXSxpKXx8YyhlWzFdLGkpPyhhKGlbMF0sZVsxXSk+YShpWzBdLGlbMV0pJiYoaVsxXT1lWzFdKSxhKGVbMF0saVsxXSk+YShpWzBdLGlbMV0pJiYoaVswXT1lWzBdKSk6dS5wdXNoKGk9ZSk7Zm9yKHZhciBvLGUsZz0tKDEvMCksdD11Lmxlbmd0aC0xLHI9MCxpPXVbdF07dD49cjtpPWUsKytyKWU9dVtyXSwobz1hKGlbMV0sZVswXSkpPmcmJihnPW8sZj1lWzBdLGg9aVsxXSl9cmV0dXJuIE09eD1udWxsLGY9PT0xLzB8fHM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZixzXSxbaCxwXV19fSgpLGFvLmdlby5jZW50cm9pZD1mdW5jdGlvbihuKXtFYT1BYT1DYT16YT1MYT1xYT1UYT1SYT1EYT1QYT1VYT0wLGFvLmdlby5zdHJlYW0obixqYSk7dmFyIHQ9RGEsZT1QYSxyPVVhLGk9dCp0K2UqZStyKnI7cmV0dXJuIGpvPmkmJih0PXFhLGU9VGEscj1SYSxVbz5BYSYmKHQ9Q2EsZT16YSxyPUxhKSxpPXQqdCtlKmUrcipyLGpvPmkpP1tOYU4sTmFOXTpbTWF0aC5hdGFuMihlLHQpKlpvLHRuKHIvTWF0aC5zcXJ0KGkpKSpab119O3ZhciBFYSxBYSxDYSx6YSxMYSxxYSxUYSxSYSxEYSxQYSxVYSxqYT17c3BoZXJlOmIscG9pbnQ6U3QsbGluZVN0YXJ0Ok50LGxpbmVFbmQ6RXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7amEubGluZVN0YXJ0PUF0fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7amEubGluZVN0YXJ0PU50fX0sRmE9UnQoenQsanQsSHQsWy1GbywtRm8vMl0pLEhhPTFlOTthby5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciBuLHQsZSxyLGksdSxvPXtzdHJlYW06ZnVuY3Rpb24obil7cmV0dXJuIGkmJihpLnZhbGlkPSExKSxpPXUobiksaS52YWxpZD0hMCxpfSxleHRlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9WnQobj0rYVswXVswXSx0PSthWzBdWzFdLGU9K2FbMV1bMF0scj0rYVsxXVsxXSksaSYmKGkudmFsaWQ9ITEsaT1udWxsKSxvKTpbW24sdF0sW2Uscl1dfX07cmV0dXJuIG8uZXh0ZW50KFtbMCwwXSxbOTYwLDUwMF1dKX0sKGFvLmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBWdChYdCl9KS5yYXc9WHQsYW8uZ2VvLmFsYmVycz1mdW5jdGlvbigpe3JldHVybiBhby5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKX0sYW8uZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7dmFyIHU9blswXSxvPW5bMV07cmV0dXJuIHQ9bnVsbCxlKHUsbyksdHx8KHIodSxvKSx0KXx8aSh1LG8pLHR9dmFyIHQsZSxyLGksdT1hby5nZW8uYWxiZXJzKCksbz1hby5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGE9YW8uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKG4sZSl7dD1bbixlXX19O3JldHVybiBuLmludmVydD1mdW5jdGlvbihuKXt2YXIgdD11LnNjYWxlKCksZT11LnRyYW5zbGF0ZSgpLHI9KG5bMF0tZVswXSkvdCxpPShuWzFdLWVbMV0pL3Q7cmV0dXJuKGk+PS4xMiYmLjIzND5pJiZyPj0tLjQyNSYmLS4yMTQ+cj9vOmk+PS4xNjYmJi4yMzQ+aSYmcj49LS4yMTQmJi0uMTE1PnI/YTp1KS5pbnZlcnQobil9LG4uc3RyZWFtPWZ1bmN0aW9uKG4pe3ZhciB0PXUuc3RyZWFtKG4pLGU9by5zdHJlYW0obikscj1hLnN0cmVhbShuKTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24obixpKXt0LnBvaW50KG4saSksZS5wb2ludChuLGkpLHIucG9pbnQobixpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dC5zcGhlcmUoKSxlLnNwaGVyZSgpLHIuc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZS5saW5lU3RhcnQoKSxyLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksZS5saW5lRW5kKCksci5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCksZS5wb2x5Z29uU3RhcnQoKSxyLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCksZS5wb2x5Z29uRW5kKCksci5wb2x5Z29uRW5kKCl9fX0sbi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUucHJlY2lzaW9uKHQpLG8ucHJlY2lzaW9uKHQpLGEucHJlY2lzaW9uKHQpLG4pOnUucHJlY2lzaW9uKCl9LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUuc2NhbGUodCksby5zY2FsZSguMzUqdCksYS5zY2FsZSh0KSxuLnRyYW5zbGF0ZSh1LnRyYW5zbGF0ZSgpKSk6dS5zY2FsZSgpfSxuLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdS50cmFuc2xhdGUoKTt2YXIgYz11LnNjYWxlKCksZj0rdFswXSxzPSt0WzFdO3JldHVybiBlPXUudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tmLS40NTUqYyxzLS4yMzgqY10sW2YrLjQ1NSpjLHMrLjIzOCpjXV0pLnN0cmVhbShsKS5wb2ludCxyPW8udHJhbnNsYXRlKFtmLS4zMDcqYyxzKy4yMDEqY10pLmNsaXBFeHRlbnQoW1tmLS40MjUqYytVbyxzKy4xMipjK1VvXSxbZi0uMjE0KmMtVW8scysuMjM0KmMtVW9dXSkuc3RyZWFtKGwpLnBvaW50LGk9YS50cmFuc2xhdGUoW2YtLjIwNSpjLHMrLjIxMipjXSkuY2xpcEV4dGVudChbW2YtLjIxNCpjK1VvLHMrLjE2NipjK1VvXSxbZi0uMTE1KmMtVW8scysuMjM0KmMtVW9dXSkuc3RyZWFtKGwpLnBvaW50LG59LG4uc2NhbGUoMTA3MCl9O3ZhciBPYSxJYSxZYSxaYSxWYSxYYSwkYT17cG9pbnQ6YixsaW5lU3RhcnQ6YixsaW5lRW5kOmIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7SWE9MCwkYS5saW5lU3RhcnQ9JHR9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXskYS5saW5lU3RhcnQ9JGEubGluZUVuZD0kYS5wb2ludD1iLE9hKz14byhJYS8yKX19LEJhPXtwb2ludDpCdCxsaW5lU3RhcnQ6YixsaW5lRW5kOmIscG9seWdvblN0YXJ0OmIscG9seWdvbkVuZDpifSxXYT17cG9pbnQ6R3QsbGluZVN0YXJ0Okt0LGxpbmVFbmQ6UXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7V2EubGluZVN0YXJ0PW5lfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7V2EucG9pbnQ9R3QsV2EubGluZVN0YXJ0PUt0LFdhLmxpbmVFbmQ9UXR9fTthby5nZW8ucGF0aD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIG4mJigiZnVuY3Rpb24iPT10eXBlb2YgYSYmdS5wb2ludFJhZGl1cygrYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG8mJm8udmFsaWR8fChvPWkodSkpLGFvLmdlby5zdHJlYW0obixvKSksdS5yZXN1bHQoKX1mdW5jdGlvbiB0KCl7cmV0dXJuIG89bnVsbCxufXZhciBlLHIsaSx1LG8sYT00LjU7cmV0dXJuIG4uYXJlYT1mdW5jdGlvbihuKXtyZXR1cm4gT2E9MCxhby5nZW8uc3RyZWFtKG4saSgkYSkpLE9hfSxuLmNlbnRyb2lkPWZ1bmN0aW9uKG4pe3JldHVybiBDYT16YT1MYT1xYT1UYT1SYT1EYT1QYT1VYT0wLGFvLmdlby5zdHJlYW0obixpKFdhKSksVWE/W0RhL1VhLFBhL1VhXTpSYT9bcWEvUmEsVGEvUmFdOkxhP1tDYS9MYSx6YS9MYV06W05hTixOYU5dfSxuLmJvdW5kcz1mdW5jdGlvbihuKXtyZXR1cm4gVmE9WGE9LShZYT1aYT0xLzApLGFvLmdlby5zdHJlYW0obixpKEJhKSksW1tZYSxaYV0sW1ZhLFhhXV19LG4ucHJvamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0oZT1uKT9uLnN0cmVhbXx8cmUobik6bSx0KCkpOmV9LG4uY29udGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1udWxsPT0ocj1uKT9uZXcgV3Q6bmV3IHRlKG4pLCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZ1LnBvaW50UmFkaXVzKGEpLHQoKSk6cn0sbi5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oih1LnBvaW50UmFkaXVzKCt0KSwrdCksbik6YX0sbi5wcm9qZWN0aW9uKGFvLmdlby5hbGJlcnNVc2EoKSkuY29udGV4dChudWxsKX0sYW8uZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpZSh0KTtmb3IodmFyIHIgaW4gbillW3JdPW5bcl07cmV0dXJuIGV9fX0saWUucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbihuLHQpe3RoaXMuc3RyZWFtLnBvaW50KG4sdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSxhby5nZW8ucHJvamVjdGlvbj1vZSxhby5nZW8ucHJvamVjdGlvbk11dGF0b3I9YWUsKGFvLmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gb2UoY2UpfSkucmF3PWNlLmludmVydD1jZSxhby5nZW8ucm90YXRpb249ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gdD1uKHRbMF0qWW8sdFsxXSpZbyksdFswXSo9Wm8sdFsxXSo9Wm8sdH1yZXR1cm4gbj1zZShuWzBdJTM2MCpZbyxuWzFdKllvLG4ubGVuZ3RoPjI/blsyXSpZbzowKSx0LmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uLmludmVydCh0WzBdKllvLHRbMV0qWW8pLHRbMF0qPVpvLHRbMV0qPVpvLHR9LHR9LGZlLmludmVydD1jZSxhby5nZW8uY2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIsdD1zZSgtblswXSpZbywtblsxXSpZbywwKS5pbnZlcnQsaT1bXTtyZXR1cm4gZShudWxsLG51bGwsMSx7cG9pbnQ6ZnVuY3Rpb24obixlKXtpLnB1c2gobj10KG4sZSkpLG5bMF0qPVpvLG5bMV0qPVpvfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaV19fXZhciB0LGUscj1bMCwwXSxpPTY7cmV0dXJuIG4ub3JpZ2luPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5hbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12ZSgodD0rcikqWW8saSpZbyksbik6dH0sbi5wcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dmUodCpZbywoaT0rcikqWW8pLG4pOml9LG4uYW5nbGUoOTApfSxhby5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24obix0KXt2YXIgZSxyPSh0WzBdLW5bMF0pKllvLGk9blsxXSpZbyx1PXRbMV0qWW8sbz1NYXRoLnNpbihyKSxhPU1hdGguY29zKHIpLGw9TWF0aC5zaW4oaSksYz1NYXRoLmNvcyhpKSxmPU1hdGguc2luKHUpLHM9TWF0aC5jb3ModSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChlPXMqbykqZSsoZT1jKmYtbCpzKmEpKmUpLGwqZitjKnMqYSl9LGFvLmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dCgpfX1mdW5jdGlvbiB0KCl7cmV0dXJuIGFvLnJhbmdlKE1hdGguY2VpbCh1L2QpKmQsaSxkKS5tYXAoaCkuY29uY2F0KGFvLnJhbmdlKE1hdGguY2VpbChjL3kpKnksbCx5KS5tYXAocCkpLmNvbmNhdChhby5yYW5nZShNYXRoLmNlaWwoci9nKSpnLGUsZykuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiB4byhuJWQpPlVvfSkubWFwKGYpKS5jb25jYXQoYW8ucmFuZ2UoTWF0aC5jZWlsKGEvdikqdixvLHYpLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4geG8obiV5KT5Vb30pLm1hcChzKSl9dmFyIGUscixpLHUsbyxhLGwsYyxmLHMsaCxwLGc9MTAsdj1nLGQ9OTAseT0zNjAsbT0yLjU7cmV0dXJuIG4ubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6bn19KX0sbi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKHUpLmNvbmNhdChwKGwpLnNsaWNlKDEpLGgoaSkucmV2ZXJzZSgpLnNsaWNlKDEpLHAoYykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSxuLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uLm1ham9yRXh0ZW50KHQpLm1pbm9yRXh0ZW50KHQpOm4ubWlub3JFeHRlbnQoKX0sbi5tYWpvckV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdFswXVswXSxpPSt0WzFdWzBdLGM9K3RbMF1bMV0sbD0rdFsxXVsxXSx1PmkmJih0PXUsdT1pLGk9dCksYz5sJiYodD1jLGM9bCxsPXQpLG4ucHJlY2lzaW9uKG0pKTpbW3UsY10sW2ksbF1dfSxuLm1pbm9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0WzBdWzBdLGU9K3RbMV1bMF0sYT0rdFswXVsxXSxvPSt0WzFdWzFdLHI+ZSYmKHQ9cixyPWUsZT10KSxhPm8mJih0PWEsYT1vLG89dCksbi5wcmVjaXNpb24obSkpOltbcixhXSxbZSxvXV19LG4uc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uLm1ham9yU3RlcCh0KS5taW5vclN0ZXAodCk6bi5taW5vclN0ZXAoKX0sbi5tYWpvclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3RbMF0seT0rdFsxXSxuKTpbZCx5XX0sbi5taW5vclN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3RbMF0sdj0rdFsxXSxuKTpbZyx2XX0sbi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3QsZj15ZShhLG8sOTApLHM9bWUocixlLG0pLGg9eWUoYyxsLDkwKSxwPW1lKHUsaSxtKSxuKTptfSxuLm1ham9yRXh0ZW50KFtbLTE4MCwtOTArVW9dLFsxODAsOTAtVW9dXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1Vb10sWzE4MCw4MCtVb11dKX0sYW8uZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpbdHx8ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXx8aS5hcHBseSh0aGlzLGFyZ3VtZW50cyldfX12YXIgdCxlLHI9TWUsaT14ZTtyZXR1cm4gbi5kaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBhby5nZW8uZGlzdGFuY2UodHx8ci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZXx8aS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxuLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDplLG4pOnJ9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZT0iZnVuY3Rpb24iPT10eXBlb2YgdD9udWxsOnQsbik6aX0sbi5wcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uOjB9LG59LGFvLmdlby5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBiZShuWzBdKllvLG5bMV0qWW8sdFswXSpZbyx0WzFdKllvKX0sYW8uZ2VvLmxlbmd0aD1mdW5jdGlvbihuKXtyZXR1cm4gSmE9MCxhby5nZW8uc3RyZWFtKG4sR2EpLEphfTt2YXIgSmEsR2E9e3NwaGVyZTpiLHBvaW50OmIsbGluZVN0YXJ0Ol9lLGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6Yixwb2x5Z29uRW5kOmJ9LEthPXdlKGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnNxcnQoMi8oMStuKSl9LGZ1bmN0aW9uKG4pe3JldHVybiAyKk1hdGguYXNpbihuLzIpfSk7KGFvLmdlby5hemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gb2UoS2EpfSkucmF3PUthO3ZhciBRYT13ZShmdW5jdGlvbihuKXt2YXIgdD1NYXRoLmFjb3Mobik7cmV0dXJuIHQmJnQvTWF0aC5zaW4odCl9LG0pOyhhby5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gb2UoUWEpfSkucmF3PVFhLChhby5nZW8uY29uaWNDb25mb3JtYWw9ZnVuY3Rpb24oKXtyZXR1cm4gVnQoU2UpfSkucmF3PVNlLChhby5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBWdChrZSl9KS5yYXc9a2U7dmFyIG5sPXdlKGZ1bmN0aW9uKG4pe3JldHVybiAxL259LE1hdGguYXRhbik7KGFvLmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBvZShubCl9KS5yYXc9bmwsTmUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuW24sMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUlvXX0sKGFvLmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBFZShOZSl9KS5yYXc9TmU7dmFyIHRsPXdlKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LE1hdGguYXNpbik7KGFvLmdlby5vcnRob2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gb2UodGwpfSkucmF3PXRsO3ZhciBlbD13ZShmdW5jdGlvbihuKXtyZXR1cm4gMS8oMStuKX0sZnVuY3Rpb24obil7cmV0dXJuIDIqTWF0aC5hdGFuKG4pfSk7KGFvLmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIG9lKGVsKX0pLnJhdz1lbCxBZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm5bLXQsMipNYXRoLmF0YW4oTWF0aC5leHAobikpLUlvXX0sKGFvLmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgbj1FZShBZSksdD1uLmNlbnRlcixlPW4ucm90YXRlO3JldHVybiBuLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj90KFstblsxXSxuWzBdXSk6KG49dCgpLFtuWzFdLC1uWzBdXSl9LG4ucm90YXRlPWZ1bmN0aW9uKG4pe3JldHVybiBuP2UoW25bMF0sblsxXSxuLmxlbmd0aD4yP25bMl0rOTA6OTBdKToobj1lKCksW25bMF0sblsxXSxuWzJdLTkwXSl9LGUoWzAsMCw5MF0pfSkucmF3PUFlLGFvLmdlb209e30sYW8uZ2VvbS5odWxsPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQobil7aWYobi5sZW5ndGg8MylyZXR1cm5bXTt2YXIgdCxpPUVuKGUpLHU9RW4ociksbz1uLmxlbmd0aCxhPVtdLGw9W107Zm9yKHQ9MDtvPnQ7dCsrKWEucHVzaChbK2kuY2FsbCh0aGlzLG5bdF0sdCksK3UuY2FsbCh0aGlzLG5bdF0sdCksdF0pO2ZvcihhLnNvcnQocWUpLHQ9MDtvPnQ7dCsrKWwucHVzaChbYVt0XVswXSwtYVt0XVsxXV0pO3ZhciBjPUxlKGEpLGY9TGUobCkscz1mWzBdPT09Y1swXSxoPWZbZi5sZW5ndGgtMV09PT1jW2MubGVuZ3RoLTFdLHA9W107Zm9yKHQ9Yy5sZW5ndGgtMTt0Pj0wOy0tdClwLnB1c2goblthW2NbdF1dWzJdXSk7Zm9yKHQ9K3M7dDxmLmxlbmd0aC1oOysrdClwLnB1c2goblthW2ZbdF1dWzJdXSk7cmV0dXJuIHB9dmFyIGU9Q2Uscj16ZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KG4pOih0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0KTpyfSx0KX0sYW8uZ2VvbS5wb2x5Z29uPWZ1bmN0aW9uKG4pe3JldHVybiBrbyhuLHJsKSxufTt2YXIgcmw9YW8uZ2VvbS5wb2x5Z29uLnByb3RvdHlwZT1bXTtybC5hcmVhPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQ9LTEsZT10aGlzLmxlbmd0aCxyPXRoaXNbZS0xXSxpPTA7Kyt0PGU7KW49cixyPXRoaXNbdF0saSs9blsxXSpyWzBdLW5bMF0qclsxXTtyZXR1cm4uNSppfSxybC5jZW50cm9pZD1mdW5jdGlvbihuKXt2YXIgdCxlLHI9LTEsaT10aGlzLmxlbmd0aCx1PTAsbz0wLGE9dGhpc1tpLTFdO2Zvcihhcmd1bWVudHMubGVuZ3RofHwobj0tMS8oNip0aGlzLmFyZWEoKSkpOysrcjxpOyl0PWEsYT10aGlzW3JdLGU9dFswXSphWzFdLWFbMF0qdFsxXSx1Kz0odFswXSthWzBdKSplLG8rPSh0WzFdK2FbMV0pKmU7cmV0dXJuW3UqbixvKm5dfSxybC5jbGlwPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHIsaSx1LG8sYT1EZShuKSxsPS0xLGM9dGhpcy5sZW5ndGgtRGUodGhpcyksZj10aGlzW2MtMV07KytsPGM7KXtmb3IodD1uLnNsaWNlKCksbi5sZW5ndGg9MCxpPXRoaXNbbF0sdT10WyhyPXQubGVuZ3RoLWEpLTFdLGU9LTE7KytlPHI7KW89dFtlXSxUZShvLGYsaSk/KFRlKHUsZixpKXx8bi5wdXNoKFJlKHUsbyxmLGkpKSxuLnB1c2gobykpOlRlKHUsZixpKSYmbi5wdXNoKFJlKHUsbyxmLGkpKSx1PW87YSYmbi5wdXNoKG5bMF0pLGY9aX1yZXR1cm4gbn07dmFyIGlsLHVsLG9sLGFsLGxsLGNsPVtdLGZsPVtdO1llLnByb3RvdHlwZS5wcmVwYXJlPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQ9dGhpcy5lZGdlcyxlPXQubGVuZ3RoO2UtLTspbj10W2VdLmVkZ2Usbi5iJiZuLmF8fHQuc3BsaWNlKGUsMSk7cmV0dXJuIHQuc29ydChWZSksdC5sZW5ndGh9LHRyLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmE6dGhpcy5lZGdlLmJ9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2UubD09PXRoaXMuc2l0ZT90aGlzLmVkZ2UuYjp0aGlzLmVkZ2UuYX19LGVyLnByb3RvdHlwZT17aW5zZXJ0OmZ1bmN0aW9uKG4sdCl7dmFyIGUscixpO2lmKG4pe2lmKHQuUD1uLHQuTj1uLk4sbi5OJiYobi5OLlA9dCksbi5OPXQsbi5SKXtmb3Iobj1uLlI7bi5MOyluPW4uTDtuLkw9dH1lbHNlIG4uUj10O2U9bn1lbHNlIHRoaXMuXz8obj1vcih0aGlzLl8pLHQuUD1udWxsLHQuTj1uLG4uUD1uLkw9dCxlPW4pOih0LlA9dC5OPW51bGwsdGhpcy5fPXQsZT1udWxsKTtmb3IodC5MPXQuUj1udWxsLHQuVT1lLHQuQz0hMCxuPXQ7ZSYmZS5DOylyPWUuVSxlPT09ci5MPyhpPXIuUixpJiZpLkM/KGUuQz1pLkM9ITEsci5DPSEwLG49cik6KG49PT1lLlImJihpcih0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCx1cih0aGlzLHIpKSk6KGk9ci5MLGkmJmkuQz8oZS5DPWkuQz0hMSxyLkM9ITAsbj1yKToobj09PWUuTCYmKHVyKHRoaXMsZSksbj1lLGU9bi5VKSxlLkM9ITEsci5DPSEwLGlyKHRoaXMscikpKSxlPW4uVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKG4pe24uTiYmKG4uTi5QPW4uUCksbi5QJiYobi5QLk49bi5OKSxuLk49bi5QPW51bGw7dmFyIHQsZSxyLGk9bi5VLHU9bi5MLG89bi5SO2lmKGU9dT9vP29yKG8pOnU6byxpP2kuTD09PW4/aS5MPWU6aS5SPWU6dGhpcy5fPWUsdSYmbz8ocj1lLkMsZS5DPW4uQyxlLkw9dSx1LlU9ZSxlIT09bz8oaT1lLlUsZS5VPW4uVSxuPWUuUixpLkw9bixlLlI9byxvLlU9ZSk6KGUuVT1pLGk9ZSxuPWUuUikpOihyPW4uQyxuPWUpLG4mJihuLlU9aSksIXIpe2lmKG4mJm4uQylyZXR1cm4gdm9pZChuLkM9ITEpO2Rve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PWkuTCl7aWYodD1pLlIsdC5DJiYodC5DPSExLGkuQz0hMCxpcih0aGlzLGkpLHQ9aS5SKSx0LkwmJnQuTC5DfHx0LlImJnQuUi5DKXt0LlImJnQuUi5DfHwodC5MLkM9ITEsdC5DPSEwLHVyKHRoaXMsdCksdD1pLlIpLHQuQz1pLkMsaS5DPXQuUi5DPSExLGlyKHRoaXMsaSksbj10aGlzLl87YnJlYWt9fWVsc2UgaWYodD1pLkwsdC5DJiYodC5DPSExLGkuQz0hMCx1cih0aGlzLGkpLHQ9aS5MKSx0LkwmJnQuTC5DfHx0LlImJnQuUi5DKXt0LkwmJnQuTC5DfHwodC5SLkM9ITEsdC5DPSEwLGlyKHRoaXMsdCksdD1pLkwpLHQuQz1pLkMsaS5DPXQuTC5DPSExLHVyKHRoaXMsaSksbj10aGlzLl87YnJlYWt9dC5DPSEwLG49aSxpPWkuVX13aGlsZSghbi5DKTtuJiYobi5DPSExKX19fSxhby5nZW9tLnZvcm9ub2k9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdChuKXt2YXIgdD1uZXcgQXJyYXkobi5sZW5ndGgpLHI9YVswXVswXSxpPWFbMF1bMV0sdT1hWzFdWzBdLG89YVsxXVsxXTtyZXR1cm4gYXIoZShuKSxhKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUsYSl7dmFyIGw9ZS5lZGdlcyxjPWUuc2l0ZSxmPXRbYV09bC5sZW5ndGg/bC5tYXAoZnVuY3Rpb24obil7dmFyIHQ9bi5zdGFydCgpO3JldHVyblt0LngsdC55XX0pOmMueD49ciYmYy54PD11JiZjLnk+PWkmJmMueTw9bz9bW3Isb10sW3Usb10sW3UsaV0sW3IsaV1dOltdO2YucG9pbnQ9blthXX0pLHR9ZnVuY3Rpb24gZShuKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obix0KXtyZXR1cm57eDpNYXRoLnJvdW5kKHUobix0KS9VbykqVW8seTpNYXRoLnJvdW5kKG8obix0KS9VbykqVW8saTp0fX0pfXZhciByPUNlLGk9emUsdT1yLG89aSxhPXNsO3JldHVybiBuP3Qobik6KHQubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIGFyKGUobikpLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5sJiZuLnJ9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTpuW3QubC5pXSx0YXJnZXQ6blt0LnIuaV19fSl9LHQudHJpYW5nbGVzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO3JldHVybiBhcihlKG4pKS5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBpLHUsbz1lLnNpdGUsYT1lLmVkZ2VzLnNvcnQoVmUpLGw9LTEsYz1hLmxlbmd0aCxmPWFbYy0xXS5lZGdlLHM9Zi5sPT09bz9mLnI6Zi5sOysrbDxjOylpPWYsdT1zLGY9YVtsXS5lZGdlLHM9Zi5sPT09bz9mLnI6Zi5sLHI8dS5pJiZyPHMuaSYmY3Iobyx1LHMpPDAmJnQucHVzaChbbltyXSxuW3UuaV0sbltzLmldXSl9KSx0fSx0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9RW4ocj1uKSx0KTpyfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RW4oaT1uKSx0KTppfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bnVsbD09bj9zbDpuLHQpOmE9PT1zbD9udWxsOmF9LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LmNsaXBFeHRlbnQobiYmW1swLDBdLG5dKTphPT09c2w/bnVsbDphJiZhWzFdfSx0KX07dmFyIHNsPVtbLTFlNiwtMWU2XSxbMWU2LDFlNl1dO2FvLmdlb20uZGVsYXVuYXk9ZnVuY3Rpb24obil7cmV0dXJuIGFvLmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyhuKX0sYW8uZ2VvbS5xdWFkdHJlZT1mdW5jdGlvbihuLHQsZSxyLGkpe2Z1bmN0aW9uIHUobil7ZnVuY3Rpb24gdShuLHQsZSxyLGksdSxvLGEpe2lmKCFpc05hTihlKSYmIWlzTmFOKHIpKWlmKG4ubGVhZil7dmFyIGw9bi54LGY9bi55O2lmKG51bGwhPWwpaWYoeG8obC1lKSt4byhmLXIpPC4wMSljKG4sdCxlLHIsaSx1LG8sYSk7ZWxzZXt2YXIgcz1uLnBvaW50O24ueD1uLnk9bi5wb2ludD1udWxsLGMobixzLGwsZixpLHUsbyxhKSxjKG4sdCxlLHIsaSx1LG8sYSl9ZWxzZSBuLng9ZSxuLnk9cixuLnBvaW50PXR9ZWxzZSBjKG4sdCxlLHIsaSx1LG8sYSl9ZnVuY3Rpb24gYyhuLHQsZSxyLGksbyxhLGwpe3ZhciBjPS41KihpK2EpLGY9LjUqKG8rbCkscz1lPj1jLGg9cj49ZixwPWg8PDF8cztuLmxlYWY9ITEsbj1uLm5vZGVzW3BdfHwobi5ub2Rlc1twXT1ocigpKSxzP2k9YzphPWMsaD9vPWY6bD1mLHUobix0LGUscixpLG8sYSxsKX12YXIgZixzLGgscCxnLHYsZCx5LG0sTT1FbihhKSx4PUVuKGwpO2lmKG51bGwhPXQpdj10LGQ9ZSx5PXIsbT1pO2Vsc2UgaWYoeT1tPS0odj1kPTEvMCkscz1bXSxoPVtdLGc9bi5sZW5ndGgsbylmb3IocD0wO2c+cDsrK3ApZj1uW3BdLGYueDx2JiYodj1mLngpLGYueTxkJiYoZD1mLnkpLGYueD55JiYoeT1mLngpLGYueT5tJiYobT1mLnkpLHMucHVzaChmLngpLGgucHVzaChmLnkpO2Vsc2UgZm9yKHA9MDtnPnA7KytwKXt2YXIgYj0rTShmPW5bcF0scCksXz0reChmLHApO3Y+YiYmKHY9YiksZD5fJiYoZD1fKSxiPnkmJih5PWIpLF8+bSYmKG09Xykscy5wdXNoKGIpLGgucHVzaChfKX12YXIgdz15LXYsUz1tLWQ7dz5TP209ZCt3Onk9ditTO3ZhciBrPWhyKCk7aWYoay5hZGQ9ZnVuY3Rpb24obil7dShrLG4sK00obiwrK3ApLCt4KG4scCksdixkLHksbSl9LGsudmlzaXQ9ZnVuY3Rpb24obil7cHIobixrLHYsZCx5LG0pfSxrLmZpbmQ9ZnVuY3Rpb24obil7cmV0dXJuIGdyKGssblswXSxuWzFdLHYsZCx5LG0pfSxwPS0xLG51bGw9PXQpe2Zvcig7KytwPGc7KXUoayxuW3BdLHNbcF0saFtwXSx2LGQseSxtKTstLXB9ZWxzZSBuLmZvckVhY2goay5hZGQpO3JldHVybiBzPWg9bj1mPW51bGwsa312YXIgbyxhPUNlLGw9emU7cmV0dXJuKG89YXJndW1lbnRzLmxlbmd0aCk/KGE9ZnIsbD1zciwzPT09byYmKGk9ZSxyPXQsZT10PTApLHUobikpOih1Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bix1KTphfSx1Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bix1KTpsfSx1LmV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09bj90PWU9cj1pPW51bGw6KHQ9K25bMF1bMF0sZT0rblswXVsxXSxyPStuWzFdWzBdLGk9K25bMV1bMV0pLHUpOm51bGw9PXQ/bnVsbDpbW3QsZV0sW3IsaV1dfSx1LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9aT1udWxsOih0PWU9MCxyPStuWzBdLGk9K25bMV0pLHUpOm51bGw9PXQ/bnVsbDpbci10LGktZV19LHUpfSxhby5pbnRlcnBvbGF0ZVJnYj12cixhby5pbnRlcnBvbGF0ZU9iamVjdD1kcixhby5pbnRlcnBvbGF0ZU51bWJlcj15cixhby5pbnRlcnBvbGF0ZVN0cmluZz1tcjt2YXIgaGw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLHBsPW5ldyBSZWdFeHAoaGwuc291cmNlLCJnIik7YW8uaW50ZXJwb2xhdGU9TXIsYW8uaW50ZXJwb2xhdG9ycz1bZnVuY3Rpb24obix0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4oInN0cmluZyI9PT1lP3VhLmhhcyh0LnRvTG93ZXJDYXNlKCkpfHwvXigjfHJnYlwofGhzbFwoKS9pLnRlc3QodCk/dnI6bXI6dCBpbnN0YW5jZW9mIGFuP3ZyOkFycmF5LmlzQXJyYXkodCk/eHI6Im9iamVjdCI9PT1lJiZpc05hTih0KT9kcjp5cikobix0KX1dLGFvLmludGVycG9sYXRlQXJyYXk9eHI7dmFyIGdsPWZ1bmN0aW9uKCl7cmV0dXJuIG19LHZsPWFvLm1hcCh7bGluZWFyOmdsLHBvbHk6RXIscXVhZDpmdW5jdGlvbigpe3JldHVybiBTcn0sY3ViaWM6ZnVuY3Rpb24oKXtyZXR1cm4ga3J9LHNpbjpmdW5jdGlvbigpe3JldHVybiBBcn0sZXhwOmZ1bmN0aW9uKCl7cmV0dXJuIENyfSxjaXJjbGU6ZnVuY3Rpb24oKXtyZXR1cm4genJ9LGVsYXN0aWM6THIsYmFjazpxcixib3VuY2U6ZnVuY3Rpb24oKXtyZXR1cm4gVHJ9fSksZGw9YW8ubWFwKHsiaW4iOm0sb3V0Ol9yLCJpbi1vdXQiOndyLCJvdXQtaW4iOmZ1bmN0aW9uKG4pe3JldHVybiB3cihfcihuKSl9fSk7YW8uZWFzZT1mdW5jdGlvbihuKXt2YXIgdD1uLmluZGV4T2YoIi0iKSxlPXQ+PTA/bi5zbGljZSgwLHQpOm4scj10Pj0wP24uc2xpY2UodCsxKToiaW4iO3JldHVybiBlPXZsLmdldChlKXx8Z2wscj1kbC5nZXQocil8fG0sYnIocihlLmFwcGx5KG51bGwsbG8uY2FsbChhcmd1bWVudHMsMSkpKSl9LGFvLmludGVycG9sYXRlSGNsPVJyLGFvLmludGVycG9sYXRlSHNsPURyLGFvLmludGVycG9sYXRlTGFiPVByLGFvLmludGVycG9sYXRlUm91bmQ9VXIsYW8udHJhbnNmb3JtPWZ1bmN0aW9uKG4pe3ZhciB0PWZvLmNyZWF0ZUVsZW1lbnROUyhhby5ucy5wcmVmaXguc3ZnLCJnIik7cmV0dXJuKGFvLnRyYW5zZm9ybT1mdW5jdGlvbihuKXtpZihudWxsIT1uKXt0LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKTt2YXIgZT10LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCl9cmV0dXJuIG5ldyBqcihlP2UubWF0cml4OnlsKX0pKG4pfSxqci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy50cmFuc2xhdGUrIilyb3RhdGUoIit0aGlzLnJvdGF0ZSsiKXNrZXdYKCIrdGhpcy5za2V3KyIpc2NhbGUoIit0aGlzLnNjYWxlKyIpIn07dmFyIHlsPXthOjEsYjowLGM6MCxkOjEsZTowLGY6MH07YW8uaW50ZXJwb2xhdGVUcmFuc2Zvcm09JHIsYW8ubGF5b3V0PXt9LGFvLmxheW91dC5idW5kbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKHZhciB0PVtdLGU9LTEscj1uLmxlbmd0aDsrK2U8cjspdC5wdXNoKEpyKG5bZV0pKTtyZXR1cm4gdH19LGFvLmxheW91dC5jaG9yZD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt2YXIgbixjLHMsaCxwLGc9e30sdj1bXSxkPWFvLnJhbmdlKHUpLHk9W107Zm9yKGU9W10scj1bXSxuPTAsaD0tMTsrK2g8dTspe2ZvcihjPTAscD0tMTsrK3A8dTspYys9aVtoXVtwXTt2LnB1c2goYykseS5wdXNoKGFvLnJhbmdlKHUpKSxuKz1jfWZvcihvJiZkLnNvcnQoZnVuY3Rpb24obix0KXtyZXR1cm4gbyh2W25dLHZbdF0pfSksYSYmeS5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7bi5zb3J0KGZ1bmN0aW9uKG4sZSl7cmV0dXJuIGEoaVt0XVtuXSxpW3RdW2VdKX0pfSksbj0oSG8tZip1KS9uLGM9MCxoPS0xOysraDx1Oyl7Zm9yKHM9YyxwPS0xOysrcDx1Oyl7dmFyIG09ZFtoXSxNPXlbbV1bcF0seD1pW21dW01dLGI9YyxfPWMrPXgqbjtnW20rIi0iK01dPXtpbmRleDptLHN1YmluZGV4Ok0sc3RhcnRBbmdsZTpiLGVuZEFuZ2xlOl8sdmFsdWU6eH19clttXT17aW5kZXg6bSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6Yyx2YWx1ZTp2W21dfSxjKz1mfWZvcihoPS0xOysraDx1Oylmb3IocD1oLTE7KytwPHU7KXt2YXIgdz1nW2grIi0iK3BdLFM9Z1twKyItIitoXTsody52YWx1ZXx8Uy52YWx1ZSkmJmUucHVzaCh3LnZhbHVlPFMudmFsdWU/e3NvdXJjZTpTLHRhcmdldDp3fTp7c291cmNlOncsdGFyZ2V0OlN9KX1sJiZ0KCl9ZnVuY3Rpb24gdCgpe2Uuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBsKChuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSkvMiwodC5zb3VyY2UudmFsdWUrdC50YXJnZXQudmFsdWUpLzIpfSl9dmFyIGUscixpLHUsbyxhLGwsYz17fSxmPTA7cmV0dXJuIGMubWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PShpPW4pJiZpLmxlbmd0aCxlPXI9bnVsbCxjKTppfSxjLnBhZGRpbmc9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9bixlPXI9bnVsbCxjKTpmfSxjLnNvcnRHcm91cHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bixlPXI9bnVsbCxjKTpvfSxjLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bixlPW51bGwsYyk6YX0sYy5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4sZSYmdCgpLGMpOmx9LGMuY2hvcmRzPWZ1bmN0aW9uKCl7cmV0dXJuIGV8fG4oKSxlfSxjLmdyb3Vwcz1mdW5jdGlvbigpe3JldHVybiByfHxuKCkscn0sY30sYW8ubGF5b3V0LmZvcmNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSl7aWYodC5wb2ludCE9PW4pe3ZhciB1PXQuY3gtbi54LG89dC5jeS1uLnksYT1pLWUsbD11KnUrbypvO2lmKGw+YSphL3kpe2lmKHY+bCl7dmFyIGM9dC5jaGFyZ2UvbDtuLnB4LT11KmMsbi5weS09bypjfXJldHVybiEwfWlmKHQucG9pbnQmJmwmJnY+bCl7dmFyIGM9dC5wb2ludENoYXJnZS9sO24ucHgtPXUqYyxuLnB5LT1vKmN9fXJldHVybiF0LmNoYXJnZX19ZnVuY3Rpb24gdChuKXtuLnB4PWFvLmV2ZW50Lngsbi5weT1hby5ldmVudC55LGwucmVzdW1lKCl9dmFyIGUscixpLHUsbyxhLGw9e30sYz1hby5kaXNwYXRjaCgic3RhcnQiLCJ0aWNrIiwiZW5kIiksZj1bMSwxXSxzPS45LGg9bWwscD1NbCxnPS0zMCx2PXhsLGQ9LjEseT0uNjQsTT1bXSx4PVtdO3JldHVybiBsLnRpY2s9ZnVuY3Rpb24oKXtpZigoaSo9Ljk5KTwuMDA1KXJldHVybiBlPW51bGwsYy5lbmQoe3R5cGU6ImVuZCIsYWxwaGE6aT0wfSksITA7dmFyIHQscixsLGgscCx2LHksbSxiLF89TS5sZW5ndGgsdz14Lmxlbmd0aDtmb3Iocj0wO3c+cjsrK3IpbD14W3JdLGg9bC5zb3VyY2UscD1sLnRhcmdldCxtPXAueC1oLngsYj1wLnktaC55LCh2PW0qbStiKmIpJiYodj1pKm9bcl0qKCh2PU1hdGguc3FydCh2KSktdVtyXSkvdixtKj12LGIqPXYscC54LT1tKih5PWgud2VpZ2h0K3Aud2VpZ2h0P2gud2VpZ2h0LyhoLndlaWdodCtwLndlaWdodCk6LjUpLHAueS09Yip5LGgueCs9bSooeT0xLXkpLGgueSs9Yip5KTtpZigoeT1pKmQpJiYobT1mWzBdLzIsYj1mWzFdLzIscj0tMSx5KSlmb3IoOysrcjxfOylsPU1bcl0sbC54Kz0obS1sLngpKnksbC55Kz0oYi1sLnkpKnk7aWYoZylmb3IocmkodD1hby5nZW9tLnF1YWR0cmVlKE0pLGksYSkscj0tMTsrK3I8XzspKGw9TVtyXSkuZml4ZWR8fHQudmlzaXQobihsKSk7Zm9yKHI9LTE7KytyPF87KWw9TVtyXSxsLmZpeGVkPyhsLng9bC5weCxsLnk9bC5weSk6KGwueC09KGwucHgtKGwucHg9bC54KSkqcyxsLnktPShsLnB5LShsLnB5PWwueSkpKnMpO2MudGljayh7dHlwZToidGljayIsYWxwaGE6aX0pfSxsLm5vZGVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPW4sbCk6TX0sbC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD1uLGwpOnh9LGwuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLGwpOmZ9LGwubGlua0Rpc3RhbmNlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sbCk6aH0sbC5kaXN0YW5jZT1sLmxpbmtEaXN0YW5jZSxsLmxpbmtTdHJlbmd0aD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGwpOnB9LGwuZnJpY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K24sbCk6c30sbC5jaGFyZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjorbixsKTpnfSxsLmNoYXJnZURpc3RhbmNlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PW4qbixsKTpNYXRoLnNxcnQodil9LGwuZ3Jhdml0eT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rbixsKTpkfSxsLnRoZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PW4qbixsKTpNYXRoLnNxcnQoeSl9LGwuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K24saT9uPjA/aT1uOihlLmM9bnVsbCxlLnQ9TmFOLGU9bnVsbCxjLmVuZCh7dHlwZToiZW5kIixhbHBoYTppPTB9KSk6bj4wJiYoYy5zdGFydCh7dHlwZToic3RhcnQiLGFscGhhOmk9bn0pLGU9cW4obC50aWNrKSksbCk6aX0sbC5zdGFydD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixyKXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KGkpLGw9MDtpPmw7KytsKWVbbF09W107Zm9yKGw9MDtjPmw7KytsKXt2YXIgdT14W2xdO2VbdS5zb3VyY2UuaW5kZXhdLnB1c2godS50YXJnZXQpLGVbdS50YXJnZXQuaW5kZXhdLnB1c2godS5zb3VyY2UpfX1mb3IodmFyIG8sYT1lW3RdLGw9LTEsZj1hLmxlbmd0aDsrK2w8ZjspaWYoIWlzTmFOKG89YVtsXVtuXSkpcmV0dXJuIG87cmV0dXJuIE1hdGgucmFuZG9tKCkqcn12YXIgdCxlLHIsaT1NLmxlbmd0aCxjPXgubGVuZ3RoLHM9ZlswXSx2PWZbMV07Zm9yKHQ9MDtpPnQ7Kyt0KShyPU1bdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO2M+dDsrK3Qpcj14W3RdLCJudW1iZXIiPT10eXBlb2Ygci5zb3VyY2UmJihyLnNvdXJjZT1NW3Iuc291cmNlXSksIm51bWJlciI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PU1bci50YXJnZXRdKSwrK3Iuc291cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO2k+dDsrK3Qpcj1NW3RdLGlzTmFOKHIueCkmJihyLng9bigieCIscykpLGlzTmFOKHIueSkmJihyLnk9bigieSIsdikpLGlzTmFOKHIucHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKHU9W10sImZ1bmN0aW9uIj09dHlwZW9mIGgpZm9yKHQ9MDtjPnQ7Kyt0KXVbdF09K2guY2FsbCh0aGlzLHhbdF0sdCk7ZWxzZSBmb3IodD0wO2M+dDsrK3QpdVt0XT1oO2lmKG89W10sImZ1bmN0aW9uIj09dHlwZW9mIHApZm9yKHQ9MDtjPnQ7Kyt0KW9bdF09K3AuY2FsbCh0aGlzLHhbdF0sdCk7ZWxzZSBmb3IodD0wO2M+dDsrK3Qpb1t0XT1wO2lmKGE9W10sImZ1bmN0aW9uIj09dHlwZW9mIGcpZm9yKHQ9MDtpPnQ7Kyt0KWFbdF09K2cuY2FsbCh0aGlzLE1bdF0sdCk7ZWxzZSBmb3IodD0wO2k+dDsrK3QpYVt0XT1nO3JldHVybiBsLnJlc3VtZSgpfSxsLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiBsLmFscGhhKC4xKX0sbC5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWxwaGEoMCl9LGwuZHJhZz1mdW5jdGlvbigpe3JldHVybiByfHwocj1hby5iZWhhdmlvci5kcmFnKCkub3JpZ2luKG0pLm9uKCJkcmFnc3RhcnQuZm9yY2UiLFFyKS5vbigiZHJhZy5mb3JjZSIsdCkub24oImRyYWdlbmQuZm9yY2UiLG5pKSksYXJndW1lbnRzLmxlbmd0aD92b2lkIHRoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsdGkpLm9uKCJtb3VzZW91dC5mb3JjZSIsZWkpLmNhbGwocik6cn0sYW8ucmViaW5kKGwsYywib24iKX07dmFyIG1sPTIwLE1sPTEseGw9MS8wO2FvLmxheW91dC5oaWVyYXJjaHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGkpe3ZhciB1LG89W2ldLGE9W107Zm9yKGkuZGVwdGg9MDtudWxsIT0odT1vLnBvcCgpKTspaWYoYS5wdXNoKHUpLChjPWUuY2FsbChuLHUsdS5kZXB0aCkpJiYobD1jLmxlbmd0aCkpe2Zvcih2YXIgbCxjLGY7LS1sPj0wOylvLnB1c2goZj1jW2xdKSxmLnBhcmVudD11LGYuZGVwdGg9dS5kZXB0aCsxO3ImJih1LnZhbHVlPTApLHUuY2hpbGRyZW49Y31lbHNlIHImJih1LnZhbHVlPStyLmNhbGwobix1LHUuZGVwdGgpfHwwKSxkZWxldGUgdS5jaGlsZHJlbjtyZXR1cm4gb2koaSxmdW5jdGlvbihuKXt2YXIgZSxpO3QmJihlPW4uY2hpbGRyZW4pJiZlLnNvcnQodCksciYmKGk9bi5wYXJlbnQpJiYoaS52YWx1ZSs9bi52YWx1ZSl9KSxhfXZhciB0PWNpLGU9YWkscj1saTtyZXR1cm4gbi5zb3J0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jaGlsZHJlbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLnJldmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHImJih1aSh0LGZ1bmN0aW9uKG4pe24uY2hpbGRyZW4mJihuLnZhbHVlPTApfSksb2kodCxmdW5jdGlvbih0KXt2YXIgZTt0LmNoaWxkcmVufHwodC52YWx1ZT0rci5jYWxsKG4sdCx0LmRlcHRoKXx8MCksKGU9dC5wYXJlbnQpJiYoZS52YWx1ZSs9dC52YWx1ZSl9KSksdH0sbn0sYW8ubGF5b3V0LnBhcnRpdGlvbj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCxlLHIsaSl7dmFyIHU9dC5jaGlsZHJlbjtpZih0Lng9ZSx0Lnk9dC5kZXB0aCppLHQuZHg9cix0LmR5PWksdSYmKG89dS5sZW5ndGgpKXt2YXIgbyxhLGwsYz0tMTtmb3Iocj10LnZhbHVlP3IvdC52YWx1ZTowOysrYzxvOyluKGE9dVtjXSxlLGw9YS52YWx1ZSpyLGkpLGUrPWx9fWZ1bmN0aW9uIHQobil7dmFyIGU9bi5jaGlsZHJlbixyPTA7aWYoZSYmKGk9ZS5sZW5ndGgpKWZvcih2YXIgaSx1PS0xOysrdTxpOylyPU1hdGgubWF4KHIsdChlW3VdKSk7cmV0dXJuIDErcn1mdW5jdGlvbiBlKGUsdSl7dmFyIG89ci5jYWxsKHRoaXMsZSx1KTtyZXR1cm4gbihvWzBdLDAsaVswXSxpWzFdL3Qob1swXSkpLG99dmFyIHI9YW8ubGF5b3V0LmhpZXJhcmNoeSgpLGk9WzEsMV07cmV0dXJuIGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLGUpOml9LGlpKGUscil9LGFvLmxheW91dC5waWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG8pe3ZhciBhLGw9by5sZW5ndGgsYz1vLm1hcChmdW5jdGlvbihlLHIpe3JldHVybit0LmNhbGwobixlLHIpfSksZj0rKCJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIpLHM9KCJmdW5jdGlvbiI9PXR5cGVvZiBpP2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOmkpLWYsaD1NYXRoLm1pbihNYXRoLmFicyhzKS9sLCsoImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dSkpLHA9aCooMD5zPy0xOjEpLGc9YW8uc3VtKGMpLHY9Zz8ocy1sKnApL2c6MCxkPWFvLnJhbmdlKGwpLHk9W107cmV0dXJuIG51bGwhPWUmJmQuc29ydChlPT09Ymw/ZnVuY3Rpb24obix0KXtyZXR1cm4gY1t0XS1jW25dfTpmdW5jdGlvbihuLHQpe3JldHVybiBlKG9bbl0sb1t0XSl9KSxkLmZvckVhY2goZnVuY3Rpb24obil7eVtuXT17ZGF0YTpvW25dLHZhbHVlOmE9Y1tuXSxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6Zis9YSp2K3AscGFkQW5nbGU6aH19KSx5fXZhciB0PU51bWJlcixlPWJsLHI9MCxpPUhvLHU9MDtyZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxuLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbik6dX0sbn07dmFyIGJsPXt9O2FvLmxheW91dC5zdGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oYSxsKXtpZighKGg9YS5sZW5ndGgpKXJldHVybiBhO3ZhciBjPWEubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuY2FsbChuLGUscil9KSxmPWMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVyblt1LmNhbGwobix0LGUpLG8uY2FsbChuLHQsZSldfSl9KSxzPWUuY2FsbChuLGYsbCk7Yz1hby5wZXJtdXRlKGMscyksZj1hby5wZXJtdXRlKGYscyk7dmFyIGgscCxnLHYsZD1yLmNhbGwobixmLGwpLHk9Y1swXS5sZW5ndGg7Zm9yKGc9MDt5Pmc7KytnKWZvcihpLmNhbGwobixjWzBdW2ddLHY9ZFtnXSxmWzBdW2ddWzFdKSxwPTE7aD5wOysrcClpLmNhbGwobixjW3BdW2ddLHYrPWZbcC0xXVtnXVsxXSxmW3BdW2ddWzFdKTtyZXR1cm4gYX12YXIgdD1tLGU9Z2kscj12aSxpPXBpLHU9c2ksbz1oaTtyZXR1cm4gbi52YWx1ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X2wuZ2V0KHQpfHxnaSxuKTplfSxuLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OndsLmdldCh0KXx8dmksbik6cn0sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsbik6dX0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbik6b30sbi5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxufTt2YXIgX2w9YW8ubWFwKHsiaW5zaWRlLW91dCI6ZnVuY3Rpb24obil7dmFyIHQsZSxyPW4ubGVuZ3RoLGk9bi5tYXAoZGkpLHU9bi5tYXAoeWkpLG89YW8ucmFuZ2Uocikuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBpW25dLWlbdF19KSxhPTAsbD0wLGM9W10sZj1bXTtmb3IodD0wO3I+dDsrK3QpZT1vW3RdLGw+YT8oYSs9dVtlXSxjLnB1c2goZSkpOihsKz11W2VdLGYucHVzaChlKSk7cmV0dXJuIGYucmV2ZXJzZSgpLmNvbmNhdChjKX0scmV2ZXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gYW8ucmFuZ2Uobi5sZW5ndGgpLnJldmVyc2UoKX0sImRlZmF1bHQiOmdpfSksd2w9YW8ubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKG4pe3ZhciB0LGUscixpPW4ubGVuZ3RoLHU9blswXS5sZW5ndGgsbz1bXSxhPTAsbD1bXTtmb3IoZT0wO3U+ZTsrK2Upe2Zvcih0PTAscj0wO2k+dDt0Kyspcis9blt0XVtlXVsxXTtyPmEmJihhPXIpLG8ucHVzaChyKX1mb3IoZT0wO3U+ZTsrK2UpbFtlXT0oYS1vW2VdKS8yO3JldHVybiBsfSx3aWdnbGU6ZnVuY3Rpb24obil7dmFyIHQsZSxyLGksdSxvLGEsbCxjLGY9bi5sZW5ndGgscz1uWzBdLGg9cy5sZW5ndGgscD1bXTtmb3IocFswXT1sPWM9MCxlPTE7aD5lOysrZSl7Zm9yKHQ9MCxpPTA7Zj50OysrdClpKz1uW3RdW2VdWzFdO2Zvcih0PTAsdT0wLGE9c1tlXVswXS1zW2UtMV1bMF07Zj50OysrdCl7Zm9yKHI9MCxvPShuW3RdW2VdWzFdLW5bdF1bZS0xXVsxXSkvKDIqYSk7dD5yOysrcilvKz0obltyXVtlXVsxXS1uW3JdW2UtMV1bMV0pL2E7dSs9bypuW3RdW2VdWzFdfXBbZV09bC09aT91L2kqYTowLGM+bCYmKGM9bCl9Zm9yKGU9MDtoPmU7KytlKXBbZV0tPWM7cmV0dXJuIHB9LGV4cGFuZDpmdW5jdGlvbihuKXt2YXIgdCxlLHIsaT1uLmxlbmd0aCx1PW5bMF0ubGVuZ3RoLG89MS9pLGE9W107Zm9yKGU9MDt1PmU7KytlKXtmb3IodD0wLHI9MDtpPnQ7dCsrKXIrPW5bdF1bZV1bMV07aWYocilmb3IodD0wO2k+dDt0Kyspblt0XVtlXVsxXS89cjtlbHNlIGZvcih0PTA7aT50O3QrKyluW3RdW2VdWzFdPW99Zm9yKGU9MDt1PmU7KytlKWFbZV09MDtyZXR1cm4gYX0semVybzp2aX0pO2FvLmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdSl7Zm9yKHZhciBvLGEsbD1bXSxjPW4ubWFwKGUsdGhpcyksZj1yLmNhbGwodGhpcyxjLHUpLHM9aS5jYWxsKHRoaXMsZixjLHUpLHU9LTEsaD1jLmxlbmd0aCxwPXMubGVuZ3RoLTEsZz10PzE6MS9oOysrdTxwOylvPWxbdV09W10sby5keD1zW3UrMV0tKG8ueD1zW3VdKSxvLnk9MDtpZihwPjApZm9yKHU9LTE7Kyt1PGg7KWE9Y1t1XSxhPj1mWzBdJiZhPD1mWzFdJiYobz1sW2FvLmJpc2VjdChzLGEsMSxwKS0xXSxvLnkrPWcsby5wdXNoKG5bdV0pKTtyZXR1cm4gbH12YXIgdD0hMCxlPU51bWJlcixyPWJpLGk9TWk7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUVuKHQpLG4pOnJ9LG4uYmlucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24obil7cmV0dXJuIHhpKG4sdCl9OkVuKHQpLG4pOml9LG4uZnJlcXVlbmN5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZSxuKTp0fSxufSxhby5sYXlvdXQucGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix1KXt2YXIgbz1lLmNhbGwodGhpcyxuLHUpLGE9b1swXSxsPWlbMF0sYz1pWzFdLGY9bnVsbD09dD9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fTtpZihhLng9YS55PTAsb2koYSxmdW5jdGlvbihuKXtuLnI9K2Yobi52YWx1ZSl9KSxvaShhLE5pKSxyKXt2YXIgcz1yKih0PzE6TWF0aC5tYXgoMiphLnIvbCwyKmEuci9jKSkvMjtvaShhLGZ1bmN0aW9uKG4pe24ucis9c30pLG9pKGEsTmkpLG9pKGEsZnVuY3Rpb24obil7bi5yLT1zfSl9cmV0dXJuIENpKGEsbC8yLGMvMix0PzE6MS9NYXRoLm1heCgyKmEuci9sLDIqYS5yL2MpKSxvfXZhciB0LGU9YW8ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoX2kpLHI9MCxpPVsxLDFdO3JldHVybiBuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxuLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1lfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLG4pOnR9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxpaShuLGUpfSxhby5sYXlvdXQudHJlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXt2YXIgZj1vLmNhbGwodGhpcyxuLGkpLHM9ZlswXSxoPXQocyk7aWYob2koaCxlKSxoLnBhcmVudC5tPS1oLnosdWkoaCxyKSxjKXVpKHMsdSk7ZWxzZXt2YXIgcD1zLGc9cyx2PXM7dWkocyxmdW5jdGlvbihuKXtuLng8cC54JiYocD1uKSxuLng+Zy54JiYoZz1uKSxuLmRlcHRoPnYuZGVwdGgmJih2PW4pfSk7dmFyIGQ9YShwLGcpLzItcC54LHk9bFswXS8oZy54K2EoZyxwKS8yK2QpLG09bFsxXS8odi5kZXB0aHx8MSk7dWkocyxmdW5jdGlvbihuKXtuLng9KG4ueCtkKSp5LG4ueT1uLmRlcHRoKm19KX1yZXR1cm4gZn1mdW5jdGlvbiB0KG4pe2Zvcih2YXIgdCxlPXtBOm51bGwsY2hpbGRyZW46W25dfSxyPVtlXTtudWxsIT0odD1yLnBvcCgpKTspZm9yKHZhciBpLHU9dC5jaGlsZHJlbixvPTAsYT11Lmxlbmd0aDthPm87KytvKXIucHVzaCgodVtvXT1pPXtfOnVbb10scGFyZW50OnQsY2hpbGRyZW46KGk9dVtvXS5jaGlsZHJlbikmJmkuc2xpY2UoKXx8W10sQTpudWxsLGE6bnVsbCx6OjAsbTowLGM6MCxzOjAsdDpudWxsLGk6b30pLmE9aSk7cmV0dXJuIGUuY2hpbGRyZW5bMF19ZnVuY3Rpb24gZShuKXt2YXIgdD1uLmNoaWxkcmVuLGU9bi5wYXJlbnQuY2hpbGRyZW4scj1uLmk/ZVtuLmktMV06bnVsbDtpZih0Lmxlbmd0aCl7RGkobik7dmFyIHU9KHRbMF0ueit0W3QubGVuZ3RoLTFdLnopLzI7cj8obi56PXIueithKG4uXyxyLl8pLG4ubT1uLnotdSk6bi56PXV9ZWxzZSByJiYobi56PXIueithKG4uXyxyLl8pKTtuLnBhcmVudC5BPWkobixyLG4ucGFyZW50LkF8fGVbMF0pfWZ1bmN0aW9uIHIobil7bi5fLng9bi56K24ucGFyZW50Lm0sbi5tKz1uLnBhcmVudC5tfWZ1bmN0aW9uIGkobix0LGUpe2lmKHQpe2Zvcih2YXIgcixpPW4sdT1uLG89dCxsPWkucGFyZW50LmNoaWxkcmVuWzBdLGM9aS5tLGY9dS5tLHM9by5tLGg9bC5tO289VGkobyksaT1xaShpKSxvJiZpOylsPXFpKGwpLHU9VGkodSksdS5hPW4scj1vLnorcy1pLnotYythKG8uXyxpLl8pLHI+MCYmKFJpKFBpKG8sbixlKSxuLHIpLGMrPXIsZis9cikscys9by5tLGMrPWkubSxoKz1sLm0sZis9dS5tO28mJiFUaSh1KSYmKHUudD1vLHUubSs9cy1mKSxpJiYhcWkobCkmJihsLnQ9aSxsLm0rPWMtaCxlPW4pfXJldHVybiBlfWZ1bmN0aW9uIHUobil7bi54Kj1sWzBdLG4ueT1uLmRlcHRoKmxbMV19dmFyIG89YW8ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCksYT1MaSxsPVsxLDFdLGM9bnVsbDtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbik6YX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW51bGw9PShsPXQpP3U6bnVsbCxuKTpjP251bGw6bH0sbi5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1udWxsPT0obD10KT9udWxsOnUsbik6Yz9sOm51bGx9LGlpKG4sbyl9LGFvLmxheW91dC5jbHVzdGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBvLGE9dC5jYWxsKHRoaXMsbix1KSxsPWFbMF0sYz0wO29pKGwsZnVuY3Rpb24obil7dmFyIHQ9bi5jaGlsZHJlbjt0JiZ0Lmxlbmd0aD8obi54PWppKHQpLG4ueT1VaSh0KSk6KG4ueD1vP2MrPWUobixvKTowLG4ueT0wLG89bil9KTt2YXIgZj1GaShsKSxzPUhpKGwpLGg9Zi54LWUoZixzKS8yLHA9cy54K2UocyxmKS8yO3JldHVybiBvaShsLGk/ZnVuY3Rpb24obil7bi54PShuLngtbC54KSpyWzBdLG4ueT0obC55LW4ueSkqclsxXX06ZnVuY3Rpb24obil7bi54PShuLngtaCkvKHAtaCkqclswXSxuLnk9KDEtKGwueT9uLnkvbC55OjEpKSpyWzFdfSksYX12YXIgdD1hby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxlPUxpLHI9WzEsMV0saT0hMTtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShyPXQpLG4pOmk/bnVsbDpyfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShyPXQpLG4pOmk/cjpudWxsfSxpaShuLHQpfSxhby5sYXlvdXQudHJlZW1hcD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0KXtmb3IodmFyIGUscixpPS0xLHU9bi5sZW5ndGg7KytpPHU7KXI9KGU9bltpXSkudmFsdWUqKDA+dD8wOnQpLGUuYXJlYT1pc05hTihyKXx8MD49cj8wOnJ9ZnVuY3Rpb24gdChlKXt2YXIgdT1lLmNoaWxkcmVuO2lmKHUmJnUubGVuZ3RoKXt2YXIgbyxhLGwsYz1zKGUpLGY9W10saD11LnNsaWNlKCksZz0xLzAsdj0ic2xpY2UiPT09cD9jLmR4OiJkaWNlIj09PXA/Yy5keToic2xpY2UtZGljZSI9PT1wPzEmZS5kZXB0aD9jLmR5OmMuZHg6TWF0aC5taW4oYy5keCxjLmR5KTtmb3IobihoLGMuZHgqYy5keS9lLnZhbHVlKSxmLmFyZWE9MDsobD1oLmxlbmd0aCk+MDspZi5wdXNoKG89aFtsLTFdKSxmLmFyZWErPW8uYXJlYSwic3F1YXJpZnkiIT09cHx8KGE9cihmLHYpKTw9Zz8oaC5wb3AoKSxnPWEpOihmLmFyZWEtPWYucG9wKCkuYXJlYSxpKGYsdixjLCExKSx2PU1hdGgubWluKGMuZHgsYy5keSksZi5sZW5ndGg9Zi5hcmVhPTAsZz0xLzApO2YubGVuZ3RoJiYoaShmLHYsYywhMCksZi5sZW5ndGg9Zi5hcmVhPTApLHUuZm9yRWFjaCh0KX19ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmNoaWxkcmVuO2lmKHImJnIubGVuZ3RoKXt2YXIgdSxvPXModCksYT1yLnNsaWNlKCksbD1bXTtmb3IobihhLG8uZHgqby5keS90LnZhbHVlKSxsLmFyZWE9MDt1PWEucG9wKCk7KWwucHVzaCh1KSxsLmFyZWErPXUuYXJlYSxudWxsIT11LnomJihpKGwsdS56P28uZHg6by5keSxvLCFhLmxlbmd0aCksbC5sZW5ndGg9bC5hcmVhPTApO3IuZm9yRWFjaChlKX19ZnVuY3Rpb24gcihuLHQpe2Zvcih2YXIgZSxyPW4uYXJlYSxpPTAsdT0xLzAsbz0tMSxhPW4ubGVuZ3RoOysrbzxhOykoZT1uW29dLmFyZWEpJiYodT5lJiYodT1lKSxlPmkmJihpPWUpKTtyZXR1cm4gcio9cix0Kj10LHI/TWF0aC5tYXgodCppKmcvcixyLyh0KnUqZykpOjEvMH1mdW5jdGlvbiBpKG4sdCxlLHIpe3ZhciBpLHU9LTEsbz1uLmxlbmd0aCxhPWUueCxjPWUueSxmPXQ/bChuLmFyZWEvdCk6MDsKaWYodD09ZS5keCl7Zm9yKChyfHxmPmUuZHkpJiYoZj1lLmR5KTsrK3U8bzspaT1uW3VdLGkueD1hLGkueT1jLGkuZHk9ZixhKz1pLmR4PU1hdGgubWluKGUueCtlLmR4LWEsZj9sKGkuYXJlYS9mKTowKTtpLno9ITAsaS5keCs9ZS54K2UuZHgtYSxlLnkrPWYsZS5keS09Zn1lbHNle2Zvcigocnx8Zj5lLmR4KSYmKGY9ZS5keCk7Kyt1PG87KWk9blt1XSxpLng9YSxpLnk9YyxpLmR4PWYsYys9aS5keT1NYXRoLm1pbihlLnkrZS5keS1jLGY/bChpLmFyZWEvZik6MCk7aS56PSExLGkuZHkrPWUueStlLmR5LWMsZS54Kz1mLGUuZHgtPWZ9fWZ1bmN0aW9uIHUocil7dmFyIGk9b3x8YShyKSx1PWlbMF07cmV0dXJuIHUueD11Lnk9MCx1LnZhbHVlPyh1LmR4PWNbMF0sdS5keT1jWzFdKTp1LmR4PXUuZHk9MCxvJiZhLnJldmFsdWUodSksbihbdV0sdS5keCp1LmR5L3UudmFsdWUpLChvP2U6dCkodSksaCYmKG89aSksaX12YXIgbyxhPWFvLmxheW91dC5oaWVyYXJjaHkoKSxsPU1hdGgucm91bmQsYz1bMSwxXSxmPW51bGwscz1PaSxoPSExLHA9InNxdWFyaWZ5IixnPS41KigxK01hdGguc3FydCg1KSk7cmV0dXJuIHUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLHUpOmN9LHUucGFkZGluZz1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPW4uY2FsbCh1LHQsdC5kZXB0aCk7cmV0dXJuIG51bGw9PWU/T2kodCk6SWkodCwibnVtYmVyIj09dHlwZW9mIGU/W2UsZSxlLGVdOmUpfWZ1bmN0aW9uIGUodCl7cmV0dXJuIElpKHQsbil9aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGY7dmFyIHI7cmV0dXJuIHM9bnVsbD09KGY9bik/T2k6ImZ1bmN0aW9uIj09KHI9dHlwZW9mIG4pP3Q6Im51bWJlciI9PT1yPyhuPVtuLG4sbixuXSxlKTplLHV9LHUucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bj9NYXRoLnJvdW5kOk51bWJlcix1KTpsIT1OdW1iZXJ9LHUuc3RpY2t5PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPW4sbz1udWxsLHUpOmh9LHUucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9bix1KTpnfSx1Lm1vZGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9bisiIix1KTpwfSxpaSh1LGEpfSxhby5yYW5kb209e25vcm1hbDpmdW5jdGlvbihuLHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIDI+ZSYmKHQ9MSksMT5lJiYobj0wKSxmdW5jdGlvbigpe3ZhciBlLHIsaTtkbyBlPTIqTWF0aC5yYW5kb20oKS0xLHI9MipNYXRoLnJhbmRvbSgpLTEsaT1lKmUrcipyO3doaWxlKCFpfHxpPjEpO3JldHVybiBuK3QqZSpNYXRoLnNxcnQoLTIqTWF0aC5sb2coaSkvaSl9fSxsb2dOb3JtYWw6ZnVuY3Rpb24oKXt2YXIgbj1hby5yYW5kb20ubm9ybWFsLmFwcGx5KGFvLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKG4oKSl9fSxiYXRlczpmdW5jdGlvbihuKXt2YXIgdD1hby5yYW5kb20uaXJ3aW5IYWxsKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KCkvbn19LGlyd2luSGFsbDpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPTA7bj5lO2UrKyl0Kz1NYXRoLnJhbmRvbSgpO3JldHVybiB0fX19LGFvLnNjYWxlPXt9O3ZhciBTbD17Zmxvb3I6bSxjZWlsOm19O2FvLnNjYWxlLmxpbmVhcj1mdW5jdGlvbigpe3JldHVybiBXaShbMCwxXSxbMCwxXSxNciwhMSl9O3ZhciBrbD17czoxLGc6MSxwOjEscjoxLGU6MX07YW8uc2NhbGUubG9nPWZ1bmN0aW9uKCl7cmV0dXJuIHJ1KGFvLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIE5sPWFvLmZvcm1hdCgiLjBlIiksRWw9e2Zsb29yOmZ1bmN0aW9uKG4pe3JldHVybi1NYXRoLmNlaWwoLW4pfSxjZWlsOmZ1bmN0aW9uKG4pe3JldHVybi1NYXRoLmZsb29yKC1uKX19O2FvLnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBpdShhby5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0sYW8uc2NhbGUuc3FydD1mdW5jdGlvbigpe3JldHVybiBhby5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LGFvLnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gb3UoW10se3Q6InJhbmdlIixhOltbXV19KX0sYW8uc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiBhby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoQWwpfSxhby5zY2FsZS5jYXRlZ29yeTIwPWZ1bmN0aW9uKCl7cmV0dXJuIGFvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShDbCl9LGFvLnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIGFvLnNjYWxlLm9yZGluYWwoKS5yYW5nZSh6bCl9LGFvLnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIGFvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShMbCl9O3ZhciBBbD1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcCh4biksQ2w9WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoeG4pLHpsPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcCh4biksTGw9WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcCh4bik7YW8uc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gYXUoW10sW10pfSxhby5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBsdSgwLDEsWzAsMV0pfSxhby5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gY3UoWy41XSxbMCwxXSl9LGFvLnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1KFswLDFdKX0sYW8uc3ZnPXt9LGFvLnN2Zy5hcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG49TWF0aC5tYXgoMCwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGM9TWF0aC5tYXgoMCwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGY9by5hcHBseSh0aGlzLGFyZ3VtZW50cyktSW8scz1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JbyxoPU1hdGguYWJzKHMtZikscD1mPnM/MDoxO2lmKG4+YyYmKGc9YyxjPW4sbj1nKSxoPj1PbylyZXR1cm4gdChjLHApKyhuP3QobiwxLXApOiIiKSsiWiI7dmFyIGcsdixkLHksbSxNLHgsYixfLHcsUyxrLE49MCxFPTAsQT1bXTtpZigoeT0oK2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwKS8yKSYmKGQ9dT09PXFsP01hdGguc3FydChuKm4rYypjKTordS5hcHBseSh0aGlzLGFyZ3VtZW50cykscHx8KEUqPS0xKSxjJiYoRT10bihkL2MqTWF0aC5zaW4oeSkpKSxuJiYoTj10bihkL24qTWF0aC5zaW4oeSkpKSksYyl7bT1jKk1hdGguY29zKGYrRSksTT1jKk1hdGguc2luKGYrRSkseD1jKk1hdGguY29zKHMtRSksYj1jKk1hdGguc2luKHMtRSk7dmFyIEM9TWF0aC5hYnMocy1mLTIqRSk8PUZvPzA6MTtpZihFJiZ5dShtLE0seCxiKT09PXBeQyl7dmFyIHo9KGYrcykvMjttPWMqTWF0aC5jb3MoeiksTT1jKk1hdGguc2luKHopLHg9Yj1udWxsfX1lbHNlIG09TT0wO2lmKG4pe189bipNYXRoLmNvcyhzLU4pLHc9bipNYXRoLnNpbihzLU4pLFM9bipNYXRoLmNvcyhmK04pLGs9bipNYXRoLnNpbihmK04pO3ZhciBMPU1hdGguYWJzKGYtcysyKk4pPD1Gbz8wOjE7aWYoTiYmeXUoXyx3LFMsayk9PT0xLXBeTCl7dmFyIHE9KGYrcykvMjtfPW4qTWF0aC5jb3MocSksdz1uKk1hdGguc2luKHEpLFM9az1udWxsfX1lbHNlIF89dz0wO2lmKGg+VW8mJihnPU1hdGgubWluKE1hdGguYWJzKGMtbikvMiwraS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKT4uMDAxKXt2PWM+bl5wPzA6MTt2YXIgVD1nLFI9ZztpZihGbz5oKXt2YXIgRD1udWxsPT1TP1tfLHddOm51bGw9PXg/W20sTV06UmUoW20sTV0sW1Msa10sW3gsYl0sW18sd10pLFA9bS1EWzBdLFU9TS1EWzFdLGo9eC1EWzBdLEY9Yi1EWzFdLEg9MS9NYXRoLnNpbihNYXRoLmFjb3MoKFAqaitVKkYpLyhNYXRoLnNxcnQoUCpQK1UqVSkqTWF0aC5zcXJ0KGoqaitGKkYpKSkvMiksTz1NYXRoLnNxcnQoRFswXSpEWzBdK0RbMV0qRFsxXSk7Uj1NYXRoLm1pbihnLChuLU8pLyhILTEpKSxUPU1hdGgubWluKGcsKGMtTykvKEgrMSkpfWlmKG51bGwhPXgpe3ZhciBJPW11KG51bGw9PVM/W18sd106W1Msa10sW20sTV0sYyxULHApLFk9bXUoW3gsYl0sW18sd10sYyxULHApO2c9PT1UP0EucHVzaCgiTSIsSVswXSwiQSIsVCwiLCIsVCwiIDAgMCwiLHYsIiAiLElbMV0sIkEiLGMsIiwiLGMsIiAwICIsMS1wXnl1KElbMV1bMF0sSVsxXVsxXSxZWzFdWzBdLFlbMV1bMV0pLCIsIixwLCIgIixZWzFdLCJBIixULCIsIixULCIgMCAwLCIsdiwiICIsWVswXSk6QS5wdXNoKCJNIixJWzBdLCJBIixULCIsIixULCIgMCAxLCIsdiwiICIsWVswXSl9ZWxzZSBBLnB1c2goIk0iLG0sIiwiLE0pO2lmKG51bGwhPVMpe3ZhciBaPW11KFttLE1dLFtTLGtdLG4sLVIscCksVj1tdShbXyx3XSxudWxsPT14P1ttLE1dOlt4LGJdLG4sLVIscCk7Zz09PVI/QS5wdXNoKCJMIixWWzBdLCJBIixSLCIsIixSLCIgMCAwLCIsdiwiICIsVlsxXSwiQSIsbiwiLCIsbiwiIDAgIixwXnl1KFZbMV1bMF0sVlsxXVsxXSxaWzFdWzBdLFpbMV1bMV0pLCIsIiwxLXAsIiAiLFpbMV0sIkEiLFIsIiwiLFIsIiAwIDAsIix2LCIgIixaWzBdKTpBLnB1c2goIkwiLFZbMF0sIkEiLFIsIiwiLFIsIiAwIDAsIix2LCIgIixaWzBdKX1lbHNlIEEucHVzaCgiTCIsXywiLCIsdyl9ZWxzZSBBLnB1c2goIk0iLG0sIiwiLE0pLG51bGwhPXgmJkEucHVzaCgiQSIsYywiLCIsYywiIDAgIixDLCIsIixwLCIgIix4LCIsIixiKSxBLnB1c2goIkwiLF8sIiwiLHcpLG51bGwhPVMmJkEucHVzaCgiQSIsbiwiLCIsbiwiIDAgIixMLCIsIiwxLXAsIiAiLFMsIiwiLGspO3JldHVybiBBLnB1c2goIloiKSxBLmpvaW4oIiIpfWZ1bmN0aW9uIHQobix0KXtyZXR1cm4iTTAsIituKyJBIituKyIsIituKyIgMCAxLCIrdCsiIDAsIistbisiQSIrbisiLCIrbisiIDAgMSwiK3QrIiAwLCIrbn12YXIgZT1odSxyPXB1LGk9c3UsdT1xbCxvPWd1LGE9dnUsbD1kdTtyZXR1cm4gbi5pbm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1Fbih0KSxuKTplfSxuLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUVuKHQpLG4pOnJ9LG4uY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPUVuKHQpLG4pOml9LG4ucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ9PXFsP3FsOkVuKHQpLG4pOnV9LG4uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1Fbih0KSxuKTpvfSxuLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUVuKHQpLG4pOmF9LG4ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9RW4odCksbik6bH0sbi5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBuPSgrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMix0PSgrby5hcHBseSh0aGlzLGFyZ3VtZW50cykrICthLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1JbztyZXR1cm5bTWF0aC5jb3ModCkqbixNYXRoLnNpbih0KSpuXX0sbn07dmFyIHFsPSJhdXRvIjthby5zdmcubGluZT1mdW5jdGlvbigpe3JldHVybiBNdShtKX07dmFyIFRsPWFvLm1hcCh7bGluZWFyOnh1LCJsaW5lYXItY2xvc2VkIjpidSxzdGVwOl91LCJzdGVwLWJlZm9yZSI6d3UsInN0ZXAtYWZ0ZXIiOlN1LGJhc2lzOnp1LCJiYXNpcy1vcGVuIjpMdSwiYmFzaXMtY2xvc2VkIjpxdSxidW5kbGU6VHUsY2FyZGluYWw6RXUsImNhcmRpbmFsLW9wZW4iOmt1LCJjYXJkaW5hbC1jbG9zZWQiOk51LG1vbm90b25lOkZ1fSk7VGwuZm9yRWFjaChmdW5jdGlvbihuLHQpe3Qua2V5PW4sdC5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KG4pfSk7dmFyIFJsPVswLDIvMywxLzMsMF0sRGw9WzAsMS8zLDIvMywwXSxQbD1bMCwxLzYsMi8zLDEvNl07YW8uc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49TXUoSHUpO3JldHVybiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmFuZ2xlPW4ueSxkZWxldGUgbi55LG59LHd1LnJldmVyc2U9U3UsU3UucmV2ZXJzZT13dSxhby5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBPdShtKX0sYW8uc3ZnLmFyZWEucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49T3UoSHUpO3JldHVybiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmlubmVyUmFkaXVzPW4ueDAsZGVsZXRlIG4ueDAsbi5vdXRlclJhZGl1cz1uLngxLGRlbGV0ZSBuLngxLG4uYW5nbGU9bi55LGRlbGV0ZSBuLnksbi5zdGFydEFuZ2xlPW4ueTAsZGVsZXRlIG4ueTAsbi5lbmRBbmdsZT1uLnkxLGRlbGV0ZSBuLnkxLG59LGFvLnN2Zy5jaG9yZD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixhKXt2YXIgbD10KHRoaXMsdSxuLGEpLGM9dCh0aGlzLG8sbixhKTtyZXR1cm4iTSIrbC5wMCtyKGwucixsLnAxLGwuYTEtbC5hMCkrKGUobCxjKT9pKGwucixsLnAxLGwucixsLnAwKTppKGwucixsLnAxLGMucixjLnAwKStyKGMucixjLnAxLGMuYTEtYy5hMCkraShjLnIsYy5wMSxsLnIsbC5wMCkpKyJaIn1mdW5jdGlvbiB0KG4sdCxlLHIpe3ZhciBpPXQuY2FsbChuLGUsciksdT1hLmNhbGwobixpLHIpLG89bC5jYWxsKG4saSxyKS1JbyxmPWMuY2FsbChuLGksciktSW87cmV0dXJue3I6dSxhMDpvLGExOmYscDA6W3UqTWF0aC5jb3MobyksdSpNYXRoLnNpbihvKV0scDE6W3UqTWF0aC5jb3MoZiksdSpNYXRoLnNpbihmKV19fWZ1bmN0aW9uIGUobix0KXtyZXR1cm4gbi5hMD09dC5hMCYmbi5hMT09dC5hMX1mdW5jdGlvbiByKG4sdCxlKXtyZXR1cm4iQSIrbisiLCIrbisiIDAgIisgKyhlPkZvKSsiLDEgIit0fWZ1bmN0aW9uIGkobix0LGUscil7cmV0dXJuIlEgMCwwICIrcn12YXIgdT1NZSxvPXhlLGE9SXUsbD1ndSxjPXZ1O3JldHVybiBuLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1Fbih0KSxuKTphfSxuLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1Fbih0KSxuKTp1fSxuLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1Fbih0KSxuKTpvfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9RW4odCksbik6bH0sbi5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1Fbih0KSxuKTpjfSxufSxhby5zdmcuZGlhZ29uYWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4saSl7dmFyIHU9dC5jYWxsKHRoaXMsbixpKSxvPWUuY2FsbCh0aGlzLG4saSksYT0odS55K28ueSkvMixsPVt1LHt4OnUueCx5OmF9LHt4Om8ueCx5OmF9LG9dO3JldHVybiBsPWwubWFwKHIpLCJNIitsWzBdKyJDIitsWzFdKyIgIitsWzJdKyIgIitsWzNdfXZhciB0PU1lLGU9eGUscj1ZdTtyZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9RW4oZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9RW4odCksbik6ZX0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbn0sYW8uc3ZnLmRpYWdvbmFsLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPWFvLnN2Zy5kaWFnb25hbCgpLHQ9WXUsZT1uLnByb2plY3Rpb247cmV0dXJuIG4ucHJvamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFp1KHQ9bikpOnR9LG59LGFvLnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4scil7cmV0dXJuKFVsLmdldCh0LmNhbGwodGhpcyxuLHIpKXx8JHUpKGUuY2FsbCh0aGlzLG4scikpfXZhciB0PVh1LGU9VnU7cmV0dXJuIG4udHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1FbihlKSxuKTp0fSxuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9RW4odCksbik6ZX0sbn07dmFyIFVsPWFvLm1hcCh7Y2lyY2xlOiR1LGNyb3NzOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuLzUpLzI7cmV0dXJuIk0iKy0zKnQrIiwiKy10KyJIIistdCsiViIrLTMqdCsiSCIrdCsiViIrLXQrIkgiKzMqdCsiViIrdCsiSCIrdCsiViIrMyp0KyJIIistdCsiViIrdCsiSCIrLTMqdCsiWiJ9LGRpYW1vbmQ6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vKDIqRmwpKSxlPXQqRmw7cmV0dXJuIk0wLCIrLXQrIkwiK2UrIiwwIDAsIit0KyIgIistZSsiLDBaIn0sc3F1YXJlOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuKS8yO3JldHVybiJNIistdCsiLCIrLXQrIkwiK3QrIiwiKy10KyIgIit0KyIsIit0KyIgIistdCsiLCIrdCsiWiJ9LCJ0cmlhbmdsZS1kb3duIjpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi9qbCksZT10KmpsLzI7cmV0dXJuIk0wLCIrZSsiTCIrdCsiLCIrLWUrIiAiKy10KyIsIistZSsiWiJ9LCJ0cmlhbmdsZS11cCI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vamwpLGU9dCpqbC8yO3JldHVybiJNMCwiKy1lKyJMIit0KyIsIitlKyIgIistdCsiLCIrZSsiWiJ9fSk7YW8uc3ZnLnN5bWJvbFR5cGVzPVVsLmtleXMoKTt2YXIgamw9TWF0aC5zcXJ0KDMpLEZsPU1hdGgudGFuKDMwKllvKTtDby50cmFuc2l0aW9uPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHI9SGx8fCsrWmwsaT1LdShuKSx1PVtdLG89T2x8fHt0aW1lOkRhdGUubm93KCksZWFzZTpOcixkZWxheTowLGR1cmF0aW9uOjI1MH0sYT0tMSxsPXRoaXMubGVuZ3RoOysrYTxsOyl7dS5wdXNoKHQ9W10pO2Zvcih2YXIgYz10aGlzW2FdLGY9LTEscz1jLmxlbmd0aDsrK2Y8czspKGU9Y1tmXSkmJlF1KGUsZixpLHIsbyksdC5wdXNoKGUpfXJldHVybiBXdSh1LGkscil9LENvLmludGVycnVwdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKG51bGw9PW4/SWw6QnUoS3UobikpKX07dmFyIEhsLE9sLElsPUJ1KEt1KCkpLFlsPVtdLFpsPTA7WWwuY2FsbD1Dby5jYWxsLFlsLmVtcHR5PUNvLmVtcHR5LFlsLm5vZGU9Q28ubm9kZSxZbC5zaXplPUNvLnNpemUsYW8udHJhbnNpdGlvbj1mdW5jdGlvbihuLHQpe3JldHVybiBuJiZuLnRyYW5zaXRpb24/SGw/bi50cmFuc2l0aW9uKHQpOm46YW8uc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuKX0sYW8udHJhbnNpdGlvbi5wcm90b3R5cGU9WWwsWWwuc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0LGUscixpPXRoaXMuaWQsdT10aGlzLm5hbWVzcGFjZSxvPVtdO249QShuKTtmb3IodmFyIGE9LTEsbD10aGlzLmxlbmd0aDsrK2E8bDspe28ucHVzaCh0PVtdKTtmb3IodmFyIGM9dGhpc1thXSxmPS0xLHM9Yy5sZW5ndGg7KytmPHM7KShyPWNbZl0pJiYoZT1uLmNhbGwocixyLl9fZGF0YV9fLGYsYSkpPygiX19kYXRhX18iaW4gciYmKGUuX19kYXRhX189ci5fX2RhdGFfXyksUXUoZSxmLHUsaSxyW3VdW2ldKSx0LnB1c2goZSkpOnQucHVzaChudWxsKX1yZXR1cm4gV3Uobyx1LGkpfSxZbC5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQsZSxyLGksdSxvPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZSxsPVtdO249QyhuKTtmb3IodmFyIGM9LTEsZj10aGlzLmxlbmd0aDsrK2M8ZjspZm9yKHZhciBzPXRoaXNbY10saD0tMSxwPXMubGVuZ3RoOysraDxwOylpZihyPXNbaF0pe3U9clthXVtvXSxlPW4uY2FsbChyLHIuX19kYXRhX18saCxjKSxsLnB1c2godD1bXSk7Zm9yKHZhciBnPS0xLHY9ZS5sZW5ndGg7KytnPHY7KShpPWVbZ10pJiZRdShpLGcsYSxvLHUpLHQucHVzaChpKX1yZXR1cm4gV3UobCxhLG8pfSxZbC5maWx0ZXI9ZnVuY3Rpb24obil7dmFyIHQsZSxyLGk9W107ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPU8obikpO2Zvcih2YXIgdT0wLG89dGhpcy5sZW5ndGg7bz51O3UrKyl7aS5wdXNoKHQ9W10pO2Zvcih2YXIgZT10aGlzW3VdLGE9MCxsPWUubGVuZ3RoO2w+YTthKyspKHI9ZVthXSkmJm4uY2FsbChyLHIuX19kYXRhX18sYSx1KSYmdC5wdXNoKHIpfXJldHVybiBXdShpLHRoaXMubmFtZXNwYWNlLHRoaXMuaWQpfSxZbC50d2Vlbj1mdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXMubm9kZSgpW3JdW2VdLnR3ZWVuLmdldChuKTpZKHRoaXMsbnVsbD09dD9mdW5jdGlvbih0KXt0W3JdW2VdLnR3ZWVuLnJlbW92ZShuKX06ZnVuY3Rpb24oaSl7aVtyXVtlXS50d2Vlbi5zZXQobix0KX0pfSxZbC5hdHRyPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGEpfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gbnVsbD09bj9lOihuKz0iIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5nZXRBdHRyaWJ1dGUoYSk7cmV0dXJuIGUhPT1uJiYodD1vKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUoYSx0KG4pKX0pfSl9ZnVuY3Rpb24gdShuKXtyZXR1cm4gbnVsbD09bj9yOihuKz0iIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5nZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpO3JldHVybiBlIT09biYmKHQ9byhlLG4pLGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsLHQobikpfSl9KX1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih0IGluIG4pdGhpcy5hdHRyKHQsblt0XSk7cmV0dXJuIHRoaXN9dmFyIG89InRyYW5zZm9ybSI9PW4/JHI6TXIsYT1hby5ucy5xdWFsaWZ5KG4pO3JldHVybiBKdSh0aGlzLCJhdHRyLiIrbix0LGEubG9jYWw/dTppKX0sWWwuYXR0clR3ZWVuPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuLGUpe3ZhciByPXQuY2FsbCh0aGlzLG4sZSx0aGlzLmdldEF0dHJpYnV0ZShpKSk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKGkscihuKSl9fWZ1bmN0aW9uIHIobixlKXt2YXIgcj10LmNhbGwodGhpcyxuLGUsdGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwscihuKSl9fXZhciBpPWFvLm5zLnF1YWxpZnkobik7cmV0dXJuIHRoaXMudHdlZW4oImF0dHIuIituLGkubG9jYWw/cjplKX0sWWwuc3R5bGU9ZnVuY3Rpb24obixlLHIpe2Z1bmN0aW9uIGkoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIG51bGw9PWU/aTooZSs9IiIsZnVuY3Rpb24oKXt2YXIgaSx1PXQodGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUobik7cmV0dXJuIHUhPT1lJiYoaT1Ncih1LGUpLGZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpKHQpLHIpfSl9KX12YXIgbz1hcmd1bWVudHMubGVuZ3RoO2lmKDM+byl7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPm8mJihlPSIiKTtmb3IociBpbiBuKXRoaXMuc3R5bGUocixuW3JdLGUpO3JldHVybiB0aGlzfXI9IiJ9cmV0dXJuIEp1KHRoaXMsInN0eWxlLiIrbixlLHUpfSxZbC5zdHlsZVR3ZWVuPWZ1bmN0aW9uKG4sZSxyKXtmdW5jdGlvbiBpKGksdSl7dmFyIG89ZS5jYWxsKHRoaXMsaSx1LHQodGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUobikpO3JldHVybiBvJiZmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sbyh0KSxyKX19cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9IiIpLHRoaXMudHdlZW4oInN0eWxlLiIrbixpKX0sWWwudGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gSnUodGhpcywidGV4dCIsbixHdSl9LFlsLnJlbW92ZT1mdW5jdGlvbigpe3ZhciBuPXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goImVuZC50cmFuc2l0aW9uIixmdW5jdGlvbigpe3ZhciB0O3RoaXNbbl0uY291bnQ8MiYmKHQ9dGhpcy5wYXJlbnROb2RlKSYmdC5yZW1vdmVDaGlsZCh0aGlzKX0pfSxZbC5lYXNlPWZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuaWQsZT10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW2VdW3RdLmVhc2U6KCJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1hby5lYXNlLmFwcGx5KGFvLGFyZ3VtZW50cykpLFkodGhpcyxmdW5jdGlvbihyKXtyW2VdW3RdLmVhc2U9bn0pKX0sWWwuZGVsYXk9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZCxlPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbZV1bdF0uZGVsYXk6WSh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHIsaSx1KXtyW2VdW3RdLmRlbGF5PStuLmNhbGwocixyLl9fZGF0YV9fLGksdSl9OihuPStuLGZ1bmN0aW9uKHIpe3JbZV1bdF0uZGVsYXk9bn0pKX0sWWwuZHVyYXRpb249ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZCxlPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbZV1bdF0uZHVyYXRpb246WSh0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKHIsaSx1KXtyW2VdW3RdLmR1cmF0aW9uPU1hdGgubWF4KDEsbi5jYWxsKHIsci5fX2RhdGFfXyxpLHUpKX06KG49TWF0aC5tYXgoMSxuKSxmdW5jdGlvbihyKXtyW2VdW3RdLmR1cmF0aW9uPW59KSl9LFlsLmVhY2g9ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT1PbCx1PUhsO3RyeXtIbD1lLFkodGhpcyxmdW5jdGlvbih0LGksdSl7T2w9dFtyXVtlXSxuLmNhbGwodCx0Ll9fZGF0YV9fLGksdSl9KX1maW5hbGx5e09sPWksSGw9dX19ZWxzZSBZKHRoaXMsZnVuY3Rpb24oaSl7dmFyIHU9aVtyXVtlXTsodS5ldmVudHx8KHUuZXZlbnQ9YW8uZGlzcGF0Y2goInN0YXJ0IiwiZW5kIiwiaW50ZXJydXB0IikpKS5vbihuLHQpfSk7cmV0dXJuIHRoaXN9LFlsLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIG4sdCxlLHIsaT10aGlzLmlkLHU9KytabCxvPXRoaXMubmFtZXNwYWNlLGE9W10sbD0wLGM9dGhpcy5sZW5ndGg7Yz5sO2wrKyl7YS5wdXNoKG49W10pO2Zvcih2YXIgdD10aGlzW2xdLGY9MCxzPXQubGVuZ3RoO3M+ZjtmKyspKGU9dFtmXSkmJihyPWVbb11baV0sUXUoZSxmLG8sdSx7dGltZTpyLnRpbWUsZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheStyLmR1cmF0aW9uLGR1cmF0aW9uOnIuZHVyYXRpb259KSksbi5wdXNoKGUpfXJldHVybiBXdShhLG8sdSl9LGFvLnN2Zy5heGlzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLmVhY2goZnVuY3Rpb24oKXt2YXIgbixjPWFvLnNlbGVjdCh0aGlzKSxmPXRoaXMuX19jaGFydF9ffHxlLHM9dGhpcy5fX2NoYXJ0X189ZS5jb3B5KCksaD1udWxsPT1sP3MudGlja3M/cy50aWNrcy5hcHBseShzLGEpOnMuZG9tYWluKCk6bCxwPW51bGw9PXQ/cy50aWNrRm9ybWF0P3MudGlja0Zvcm1hdC5hcHBseShzLGEpOm06dCxnPWMuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCxzKSx2PWcuZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLFVvKSxkPWFvLnRyYW5zaXRpb24oZy5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IixVbykucmVtb3ZlKCkseT1hby50cmFuc2l0aW9uKGcub3JkZXIoKSkuc3R5bGUoIm9wYWNpdHkiLDEpLE09TWF0aC5tYXgoaSwwKStvLHg9WmkocyksYj1jLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoWzBdKSxfPShiLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJkb21haW4iKSxhby50cmFuc2l0aW9uKGIpKTt2LmFwcGVuZCgibGluZSIpLHYuYXBwZW5kKCJ0ZXh0Iik7dmFyIHcsUyxrLE4sRT12LnNlbGVjdCgibGluZSIpLEE9eS5zZWxlY3QoImxpbmUiKSxDPWcuc2VsZWN0KCJ0ZXh0IikudGV4dChwKSx6PXYuc2VsZWN0KCJ0ZXh0IiksTD15LnNlbGVjdCgidGV4dCIpLHE9InRvcCI9PT1yfHwibGVmdCI9PT1yPy0xOjE7aWYoImJvdHRvbSI9PT1yfHwidG9wIj09PXI/KG49bm8sdz0ieCIsaz0ieSIsUz0ieDIiLE49InkyIixDLmF0dHIoImR5IiwwPnE/IjBlbSI6Ii43MWVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksXy5hdHRyKCJkIiwiTSIreFswXSsiLCIrcSp1KyJWMEgiK3hbMV0rIlYiK3EqdSkpOihuPXRvLHc9InkiLGs9IngiLFM9InkyIixOPSJ4MiIsQy5hdHRyKCJkeSIsIi4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwwPnE/ImVuZCI6InN0YXJ0IiksXy5hdHRyKCJkIiwiTSIrcSp1KyIsIit4WzBdKyJIMFYiK3hbMV0rIkgiK3EqdSkpLEUuYXR0cihOLHEqaSksei5hdHRyKGsscSpNKSxBLmF0dHIoUywwKS5hdHRyKE4scSppKSxMLmF0dHIodywwKS5hdHRyKGsscSpNKSxzLnJhbmdlQmFuZCl7dmFyIFQ9cyxSPVQucmFuZ2VCYW5kKCkvMjtmPXM9ZnVuY3Rpb24obil7cmV0dXJuIFQobikrUn19ZWxzZSBmLnJhbmdlQmFuZD9mPXM6ZC5jYWxsKG4scyxmKTt2LmNhbGwobixmLHMpLHkuY2FsbChuLHMscyl9KX12YXIgdCxlPWFvLnNjYWxlLmxpbmVhcigpLHI9VmwsaT02LHU9NixvPTMsYT1bMTBdLGw9bnVsbDtyZXR1cm4gbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ub3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQgaW4gWGw/dCsiIjpWbCxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Y28oYXJndW1lbnRzKSxuKTphfSxuLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxuKTpsfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIGU/KGk9K3QsdT0rYXJndW1lbnRzW2UtMV0sbik6aX0sbi5pbm5lclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOml9LG4ub3V0ZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxuKTp1fSxuLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LG4pOm99LG4udGlja1N1YmRpdmlkZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZufSxufTt2YXIgVmw9ImJvdHRvbSIsWGw9e3RvcDoxLHJpZ2h0OjEsYm90dG9tOjEsbGVmdDoxfTthby5zdmcuYnJ1c2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQpe3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PWFvLnNlbGVjdCh0aGlzKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2giLHUpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIix1KSxvPXQuc2VsZWN0QWxsKCIuYmFja2dyb3VuZCIpLmRhdGEoWzBdKTtvLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYWNrZ3JvdW5kIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHlsZSgiY3Vyc29yIiwiY3Jvc3NoYWlyIiksdC5zZWxlY3RBbGwoIi5leHRlbnQiKS5kYXRhKFswXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImV4dGVudCIpLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIik7dmFyIGE9dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5kYXRhKHYsbSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXtyZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3JldHVybiAkbFtuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4pe3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rpb24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLGEuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIGwscz1hby50cmFuc2l0aW9uKHQpLGg9YW8udHJhbnNpdGlvbihvKTtjJiYobD1aaShjKSxoLmF0dHIoIngiLGxbMF0pLmF0dHIoIndpZHRoIixsWzFdLWxbMF0pLHIocykpLGYmJihsPVppKGYpLGguYXR0cigieSIsbFswXSkuYXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pLGkocykpLGUocyl9KX1mdW5jdGlvbiBlKG4pe24uc2VsZWN0QWxsKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKCIrc1srL2UkLy50ZXN0KG4pXSsiLCIraFsrL15zLy50ZXN0KG4pXSsiKSJ9KX1mdW5jdGlvbiByKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsc1swXSksbi5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLHNbMV0tc1swXSl9ZnVuY3Rpb24gaShuKXtuLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoInkiLGhbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5lPnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsaFsxXS1oWzBdKX1mdW5jdGlvbiB1KCl7ZnVuY3Rpb24gdSgpezMyPT1hby5ldmVudC5rZXlDb2RlJiYoQ3x8KE09bnVsbCxMWzBdLT1zWzFdLExbMV0tPWhbMV0sQz0yKSxTKCkpfWZ1bmN0aW9uIHYoKXszMj09YW8uZXZlbnQua2V5Q29kZSYmMj09QyYmKExbMF0rPXNbMV0sTFsxXSs9aFsxXSxDPTAsUygpKX1mdW5jdGlvbiBkKCl7dmFyIG49YW8ubW91c2UoYiksdD0hMTt4JiYoblswXSs9eFswXSxuWzFdKz14WzFdKSxDfHwoYW8uZXZlbnQuYWx0S2V5PyhNfHwoTT1bKHNbMF0rc1sxXSkvMiwoaFswXStoWzFdKS8yXSksTFswXT1zWysoblswXTxNWzBdKV0sTFsxXT1oWysoblsxXTxNWzFdKV0pOk09bnVsbCksRSYmeShuLGMsMCkmJihyKGspLHQ9ITApLEEmJnkobixmLDEpJiYoaShrKSx0PSEwKSx0JiYoZShrKSx3KHt0eXBlOiJicnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiB5KG4sdCxlKXt2YXIgcixpLHU9WmkodCksbD11WzBdLGM9dVsxXSxmPUxbZV0sdj1lP2g6cyxkPXZbMV0tdlswXTtyZXR1cm4gQyYmKGwtPWYsYy09ZCtmKSxyPShlP2c6cCk/TWF0aC5tYXgobCxNYXRoLm1pbihjLG5bZV0pKTpuW2VdLEM/aT0ocis9ZikrZDooTSYmKGY9TWF0aC5tYXgobCxNYXRoLm1pbihjLDIqTVtlXS1yKSkpLHI+Zj8oaT1yLHI9Zik6aT1mKSx2WzBdIT1yfHx2WzFdIT1pPyhlP2E9bnVsbDpvPW51bGwsdlswXT1yLHZbMV09aSwhMCk6dm9pZCAwfWZ1bmN0aW9uIG0oKXtkKCksay5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKSxhby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxxLm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLHooKSx3KHt0eXBlOiJicnVzaGVuZCJ9KX12YXIgTSx4LGI9dGhpcyxfPWFvLnNlbGVjdChhby5ldmVudC50YXJnZXQpLHc9bC5vZihiLGFyZ3VtZW50cyksaz1hby5zZWxlY3QoYiksTj1fLmRhdHVtKCksRT0hL14obnxzKSQvLnRlc3QoTikmJmMsQT0hL14oZXx3KSQvLnRlc3QoTikmJmYsQz1fLmNsYXNzZWQoImV4dGVudCIpLHo9VyhiKSxMPWFvLm1vdXNlKGIpLHE9YW8uc2VsZWN0KHQoYikpLm9uKCJrZXlkb3duLmJydXNoIix1KS5vbigia2V5dXAuYnJ1c2giLHYpO2lmKGFvLmV2ZW50LmNoYW5nZWRUb3VjaGVzP3Eub24oInRvdWNobW92ZS5icnVzaCIsZCkub24oInRvdWNoZW5kLmJydXNoIixtKTpxLm9uKCJtb3VzZW1vdmUuYnJ1c2giLGQpLm9uKCJtb3VzZXVwLmJydXNoIixtKSxrLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLEMpTFswXT1zWzBdLUxbMF0sTFsxXT1oWzBdLUxbMV07ZWxzZSBpZihOKXt2YXIgVD0rL3ckLy50ZXN0KE4pLFI9Ky9ebi8udGVzdChOKTt4PVtzWzEtVF0tTFswXSxoWzEtUl0tTFsxXV0sTFswXT1zW1RdLExbMV09aFtSXX1lbHNlIGFvLmV2ZW50LmFsdEtleSYmKE09TC5zbGljZSgpKTtrLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksYW8uc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsXy5zdHlsZSgiY3Vyc29yIikpLHcoe3R5cGU6ImJydXNoc3RhcnQifSksZCgpfXZhciBvLGEsbD1OKG4sImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYz1udWxsLGY9bnVsbCxzPVswLDBdLGg9WzAsMF0scD0hMCxnPSEwLHY9QmxbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49bC5vZih0aGlzLGFyZ3VtZW50cyksdD17eDpzLHk6aCxpOm8sajphfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMuX19jaGFydF9fPXQsSGw/YW8uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtvPWUuaSxhPWUuaixzPWUueCxoPWUueSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNoIixmdW5jdGlvbigpe3ZhciBlPXhyKHMsdC54KSxyPXhyKGgsdC55KTtyZXR1cm4gbz1hPW51bGwsZnVuY3Rpb24oaSl7cz10Lng9ZShpKSxoPXQueT1yKGkpLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5jdGlvbigpe289dC5pLGE9dC5qLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlwZToiYnJ1c2hzdGFydCJ9KSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNoZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCx2PUJsWyFjPDwxfCFmXSxuKTpjfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dCx2PUJsWyFjPDwxfCFmXSxuKTpmfSxuLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiZmPyhwPSEhdFswXSxnPSEhdFsxXSk6Yz9wPSEhdDpmJiYoZz0hIXQpLG4pOmMmJmY/W3AsZ106Yz9wOmY/ZzpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgZSxyLGksdSxsO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiYoZT10WzBdLHI9dFsxXSxmJiYoZT1lWzBdLHI9clswXSksbz1bZSxyXSxjLmludmVydCYmKGU9YyhlKSxyPWMocikpLGU+ciYmKGw9ZSxlPXIscj1sKSxlPT1zWzBdJiZyPT1zWzFdfHwocz1bZSxyXSkpLGYmJihpPXRbMF0sdT10WzFdLGMmJihpPWlbMV0sdT11WzFdKSxhPVtpLHVdLGYuaW52ZXJ0JiYoaT1mKGkpLHU9Zih1KSksaT51JiYobD1pLGk9dSx1PWwpLGk9PWhbMF0mJnU9PWhbMV18fChoPVtpLHVdKSksbik6KGMmJihvPyhlPW9bMF0scj1vWzFdKTooZT1zWzBdLHI9c1sxXSxjLmludmVydCYmKGU9Yy5pbnZlcnQoZSkscj1jLmludmVydChyKSksZT5yJiYobD1lLGU9cixyPWwpKSksZiYmKGE/KGk9YVswXSx1PWFbMV0pOihpPWhbMF0sdT1oWzFdLGYuaW52ZXJ0JiYoaT1mLmludmVydChpKSx1PWYuaW52ZXJ0KHUpKSxpPnUmJihsPWksaT11LHU9bCkpKSxjJiZmP1tbZSxpXSxbcix1XV06Yz9bZSxyXTpmJiZbaSx1XSl9LG4uY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gbi5lbXB0eSgpfHwocz1bMCwwXSxoPVswLDBdLG89YT1udWxsKSxufSxuLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISFjJiZzWzBdPT1zWzFdfHwhIWYmJmhbMF09PWhbMV19LGFvLnJlYmluZChuLGwsIm9uIil9O3ZhciAkbD17bjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxCbD1bWyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXSxbImUiLCJ3Il0sWyJuIiwicyJdLFtdXSxXbD1nYS5mb3JtYXQ9eGEudGltZUZvcm1hdCxKbD1XbC51dGMsR2w9SmwoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO1dsLmlzbz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyYmK25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9lbzpHbCxlby5wYXJzZT1mdW5jdGlvbihuKXt2YXIgdD1uZXcgRGF0ZShuKTtyZXR1cm4gaXNOYU4odCk/bnVsbDp0fSxlby50b1N0cmluZz1HbC50b1N0cmluZyxnYS5zZWNvbmQ9T24oZnVuY3Rpb24obil7cmV0dXJuIG5ldyB2YSgxZTMqTWF0aC5mbG9vcihuLzFlMykpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZShuLmdldFRpbWUoKSsxZTMqTWF0aC5mbG9vcih0KSl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFNlY29uZHMoKX0pLGdhLnNlY29uZHM9Z2Euc2Vjb25kLnJhbmdlLGdhLnNlY29uZHMudXRjPWdhLnNlY29uZC51dGMucmFuZ2UsZ2EubWludXRlPU9uKGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdmEoNmU0Kk1hdGguZmxvb3Iobi82ZTQpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrNmU0Kk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaW51dGVzKCl9KSxnYS5taW51dGVzPWdhLm1pbnV0ZS5yYW5nZSxnYS5taW51dGVzLnV0Yz1nYS5taW51dGUudXRjLnJhbmdlLGdhLmhvdXI9T24oZnVuY3Rpb24obil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpLzYwO3JldHVybiBuZXcgdmEoMzZlNSooTWF0aC5mbG9vcihuLzM2ZTUtdCkrdCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZShuLmdldFRpbWUoKSszNmU1Kk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRIb3VycygpfSksZ2EuaG91cnM9Z2EuaG91ci5yYW5nZSxnYS5ob3Vycy51dGM9Z2EuaG91ci51dGMucmFuZ2UsZ2EubW9udGg9T24oZnVuY3Rpb24obil7cmV0dXJuIG49Z2EuZGF5KG4pLG4uc2V0RGF0ZSgxKSxufSxmdW5jdGlvbihuLHQpe24uc2V0TW9udGgobi5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNb250aCgpfSksZ2EubW9udGhzPWdhLm1vbnRoLnJhbmdlLGdhLm1vbnRocy51dGM9Z2EubW9udGgudXRjLnJhbmdlO3ZhciBLbD1bMWUzLDVlMywxNWUzLDNlNCw2ZTQsM2U1LDllNSwxOGU1LDM2ZTUsMTA4ZTUsMjE2ZTUsNDMyZTUsODY0ZTUsMTcyOGU1LDYwNDhlNSwyNTkyZTYsNzc3NmU2LDMxNTM2ZTZdLFFsPVtbZ2Euc2Vjb25kLDFdLFtnYS5zZWNvbmQsNV0sW2dhLnNlY29uZCwxNV0sW2dhLnNlY29uZCwzMF0sW2dhLm1pbnV0ZSwxXSxbZ2EubWludXRlLDVdLFtnYS5taW51dGUsMTVdLFtnYS5taW51dGUsMzBdLFtnYS5ob3VyLDFdLFtnYS5ob3VyLDNdLFtnYS5ob3VyLDZdLFtnYS5ob3VyLDEyXSxbZ2EuZGF5LDFdLFtnYS5kYXksMl0sW2dhLndlZWssMV0sW2dhLm1vbnRoLDFdLFtnYS5tb250aCwzXSxbZ2EueWVhciwxXV0sbmM9V2wubXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF5KCkmJjEhPW4uZ2V0RGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJuIDEhPW4uZ2V0RGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX1dLFsiJVkiLHp0XV0pLHRjPXtyYW5nZTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGFvLnJhbmdlKE1hdGguY2VpbChuL2UpKmUsK3QsZSkubWFwKGlvKX0sZmxvb3I6bSxjZWlsOm19O1FsLnllYXI9Z2EueWVhcixnYS5zY2FsZT1mdW5jdGlvbigpe3JldHVybiBybyhhby5zY2FsZS5saW5lYXIoKSxRbCxuYyl9O3ZhciBlYz1RbC5tYXAoZnVuY3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSkscmM9SmwubXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF5KCkmJjEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJuIDEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTW9udGgoKX1dLFsiJVkiLHp0XV0pO2VjLnllYXI9Z2EueWVhci51dGMsZ2Euc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIHJvKGFvLnNjYWxlLmxpbmVhcigpLGVjLHJjKX0sYW8udGV4dD1BbihmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNwb25zZVRleHR9KSxhby5qc29uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIENuKG4sImFwcGxpY2F0aW9uL2pzb24iLHVvLHQpfSxhby5odG1sPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIENuKG4sInRleHQvaHRtbCIsb28sdCl9LGFvLnhtbD1BbihmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNwb25zZVhNTH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/KHRoaXMuZDM9YW8sZGVmaW5lKGFvKSk6Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWFvOnRoaXMuZDM9YW99KCk7"></script>
<link href="data:text/css;charset=utf-8,%2Emarkmap%2Dnode%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Emarkmap%2Dnode%2Dcircle%20%7B%0Afill%3A%20%23fff%3B%0Astroke%2Dwidth%3A%201%2E5px%3B%0A%7D%0A%2Emarkmap%2Dnode%2Dtext%20%7B%0Afill%3A%20%23000%3B%0Afont%3A%2010px%20sans%2Dserif%3B%0A%7D%0A%2Emarkmap%2Dlink%20%7B%0Afill%3A%20none%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CiAgICAgICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLgogICAgICAgIGRlZmluZShbJ2QzJ10sIGZhY3RvcnkpOwogICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHsKICAgICAgICAvLyBOb2RlLiBEb2VzIG5vdCB3b3JrIHdpdGggc3RyaWN0IENvbW1vbkpTLCBidXQKICAgICAgICAvLyBvbmx5IENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cywKICAgICAgICAvLyBsaWtlIE5vZGUuCiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2QzJykpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHMgKHJvb3QgaXMgd2luZG93KQogICAgICAgIHJvb3QubWFya21hcCA9IGZhY3Rvcnkocm9vdC5kMyk7CiAgICB9Cn0odGhpcywgZnVuY3Rpb24gKGQzKSB7Cgp2YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihkc3QsIHNyYykgewogIC8vIHBvb3IgbWFuJ3MgT2JqZWN0LmFzc2lnbigpCiAgZm9yICh2YXIgayBpbiBzcmMpIHsKICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoaykpIHsKICAgICAgZHN0W2tdID0gc3JjW2tdOwogICAgfQogIH0KICByZXR1cm4gZHN0Owp9OwoKZnVuY3Rpb24gdHJhdmVyc2VNaW5EaXN0YW5jZShub2RlKSB7CiAgdmFyIHZhbCA9IEluZmluaXR5OwogIGlmIChub2RlLmNoaWxkcmVuKSB7CiAgICB2YWwgPSBNYXRoLm1pbi5hcHBseShudWxsLCBub2RlLmNoaWxkcmVuLm1hcCh0cmF2ZXJzZU1pbkRpc3RhbmNlKSk7CiAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAxKSB7CiAgICAgIHZhbCA9IE1hdGgubWluKHZhbCwgTWF0aC5hYnMobm9kZS5jaGlsZHJlblswXS54IC0gbm9kZS5jaGlsZHJlblsxXS54KSk7CiAgICB9CiAgfQogIHJldHVybiB2YWw7Cn0KCmZ1bmN0aW9uIGdldExhYmVsV2lkdGgoZCkgewogIC8vIGNvbnN0YW50IHJhdGlvIGZvciBub3csIG5lZWRzIHRvIGJlIG1lYXN1cmVkIGJhc2VkIG9uIGZvbnQKICByZXR1cm4gZC5uYW1lLmxlbmd0aCAqIDU7Cn0KCmZ1bmN0aW9uIHRyYXZlcnNlTGFiZWxXaWR0aChkLCBvZmZzZXQpIHsKICBkLnkgKz0gb2Zmc2V0OwogIGlmIChkLm5hbWUgIT09ICcnICYmIGQuY2hpbGRyZW4gJiYgZC5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgZC5jaGlsZHJlblswXS5uYW1lID09PSAnJykgewogICAgdmFyIGNoaWxkID0gZC5jaGlsZHJlblswXTsKICAgIG9mZnNldCArPSBkLnkgKyBnZXRMYWJlbFdpZHRoKGQpIC0gY2hpbGQueTsKICAgIGNoaWxkLnkgKz0gb2Zmc2V0OwogICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7CiAgICAgIGNoaWxkLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYykgewogICAgICAgIHRyYXZlcnNlTGFiZWxXaWR0aChjLCBvZmZzZXQpOwogICAgICB9KTsKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIHRyYXZlcnNlQnJhbmNoSWQobm9kZSwgYnJhbmNoKSB7CiAgbm9kZS5icmFuY2ggPSBicmFuY2g7CiAgaWYgKG5vZGUuY2hpbGRyZW4pIHsKICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihkKSB7CiAgICAgIHRyYXZlcnNlQnJhbmNoSWQoZCwgYnJhbmNoKTsKICAgIH0pOwogIH0KfQoKZnVuY3Rpb24gTWFya21hcChzdmcsIGRhdGEsIG9wdGlvbnMpIHsKICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTWFya21hcCkpIHJldHVybiBuZXcgTWFya21hcChzdmcsIGRhdGEsIG9wdGlvbnMpOwogIHRoaXMuaW5pdChzdmcsIGRhdGEsIG9wdGlvbnMpOwp9Cgp2YXIgZGVmYXVsdFByZXNldCA9IHsKICBub2RlSGVpZ2h0OiAyMCwKICBub2RlV2lkdGg6IDE4MCwKICBzcGFjaW5nVmVydGljYWw6IDEwLAogIHNwYWNpbmdIb3Jpem9udGFsOiAxMjAsCiAgZHVyYXRpb246IDc1MCwKICBsYXlvdXQ6ICd0cmVlJywKICBjb2xvcjogJ2dyYXknLAogIGxpbmtTaGFwZTogJ2RpYWdvbmFsJywKICByZW5kZXJlcjogJ2JveGVkJwp9OwoKYXNzaWduKE1hcmttYXAucHJvdG90eXBlLCB7CiAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB7CiAgICAgIHpvb21TY2FsZTogMSwKICAgICAgem9vbVRyYW5zbGF0ZTogWzAsIDBdLAogICAgICBhdXRvRml0OiB0cnVlCiAgICB9OwogIH0sCiAgcHJlc2V0czogewogICAgJ2RlZmF1bHQnOiBkZWZhdWx0UHJlc2V0LAogICAgJ2NvbG9yZnVsJzogYXNzaWduKGFzc2lnbih7fSwgZGVmYXVsdFByZXNldCksIHsKICAgICAgbm9kZUhlaWdodDogMTAsCiAgICAgIHJlbmRlcmVyOiAnYmFzaWMnLAogICAgICBjb2xvcjogJ2NhdGVnb3J5MjAnCiAgICB9KQogIH0sCiAgaGVscGVyTmFtZXM6IFsnbGF5b3V0JywgJ2xpbmtTaGFwZScsICdjb2xvciddLAogIGxheW91dHM6IHsKICAgIHRyZWU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZDMubGF5b3V0LnRyZWUoKTsKICAgIH0KICB9LAogIGxpbmtTaGFwZXM6IHsKICAgIGRpYWdvbmFsOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGQzLnN2Zy5kaWFnb25hbCgpCiAgICAgICAgLnByb2plY3Rpb24oZnVuY3Rpb24oZCkgeyByZXR1cm4gW2QueSwgZC54XTsgfSk7CiAgICB9LAogICAgYnJhY2tldDogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihkKSB7CiAgICAgICAgcmV0dXJuICJNIiArIGQuc291cmNlLnkgKyAiLCIgKyBkLnNvdXJjZS54CiAgICAgICAgICAgICsgIlYiICsgZC50YXJnZXQueCArICJIIiArIGQudGFyZ2V0Lnk7CiAgICAgIH07CiAgICB9CiAgfSwKICBjb2xvcnM6IGFzc2lnbigKICAgIHtncmF5OiBmdW5jdGlvbigpIHtyZXR1cm4gZnVuY3Rpb24oKSB7cmV0dXJuICcjOTI5MjkyJzt9fX0sCiAgICBkMy5zY2FsZQogICksCiAgaW5pdDogZnVuY3Rpb24oc3ZnLCBkYXRhLCBvcHRpb25zKSB7CiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICBzdmcgPSBzdmcuZGF0dW0gPyBzdmcgOiBkMy5zZWxlY3Qoc3ZnKTsKCiAgICB0aGlzLmhlbHBlcnMgPSB7fTsKICAgIHRoaXMuaSA9IDA7CiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUoKTsKICAgIHRoaXMuc2V0KHRoaXMucHJlc2V0c1tvcHRpb25zLnByZXNldCB8fCAnZGVmYXVsdCddKTsKICAgIHN0YXRlLmhlaWdodCA9IHN2Zy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0OwogICAgc3RhdGUud2lkdGggPSBzdmcubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoOwogICAgdGhpcy5zZXQob3B0aW9ucyk7CgogICAgLy8gZGlzYWJsZSBwYW5uaW5nIHVzaW5nIHJpZ2h0IG1vdXNlIGJ1dHRvbgogICAgc3ZnLm9uKCJtb3VzZWRvd24iLCBmdW5jdGlvbigpIHsKICAgICAgdmFyIGV2ID0gZDMuZXZlbnQ7CiAgICAgIGlmIChldi5idXR0b24gPT09IDIpIHsKICAgICAgICBldi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgfQogICAgfSk7CgogICAgdmFyIHpvb20gPSB0aGlzLnpvb20gPSBkMy5iZWhhdmlvci56b29tKCkKICAgICAgIC5vbigiem9vbSIsIGZ1bmN0aW9uKCkgewogICAgICAgICB0aGlzLnVwZGF0ZVpvb20oZDMuZXZlbnQudHJhbnNsYXRlLCBkMy5ldmVudC5zY2FsZSk7CiAgICAgICB9LmJpbmQodGhpcykpOwoKICAgIHRoaXMuc3ZnID0gc3ZnCiAgICAgIC5jYWxsKHpvb20pCiAgICAgIC5hcHBlbmQoImciKTsKCiAgICB0aGlzLnVwZGF0ZVpvb20oc3RhdGUuem9vbVRyYW5zbGF0ZSwgc3RhdGUuem9vbVNjYWxlKTsKCiAgICB0aGlzLnNldERhdGEoZGF0YSk7CiAgICB0aGlzLnVwZGF0ZShzdGF0ZS5yb290KTsKCiAgICBpZiAob3B0aW9ucy5hdXRvRml0ID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRvRml0ID09PSBudWxsKSB7CiAgICAgIHN0YXRlLmF1dG9GaXQgPSBmYWxzZTsKICAgIH0KICB9LAogIHVwZGF0ZVpvb206IGZ1bmN0aW9uKHRyYW5zbGF0ZSwgc2NhbGUpIHsKICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7CiAgICBzdGF0ZS56b29tVHJhbnNsYXRlID0gdHJhbnNsYXRlOwogICAgc3RhdGUuem9vbVNjYWxlID0gc2NhbGU7CiAgICB0aGlzLnpvb20udHJhbnNsYXRlKHN0YXRlLnpvb21UcmFuc2xhdGUpCiAgICAgICAgLnNjYWxlKHN0YXRlLnpvb21TY2FsZSk7CiAgICB0aGlzLnN2Zy5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyBzdGF0ZS56b29tVHJhbnNsYXRlICsgIikiICsgIiBzY2FsZSgiICsgc3RhdGUuem9vbVNjYWxlICsgIikiKQogIH0sCiAgc2V0OiBmdW5jdGlvbih2YWx1ZXMpIHsKICAgIGlmICh2YWx1ZXMucHJlc2V0KSB7CiAgICAgIHRoaXMuc2V0KHRoaXMucHJlc2V0c1t2YWx1ZXMucHJlc2V0XSk7CiAgICB9CiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlOwogICAgdmFyIGhlbHBlcnMgPSB0aGlzLmhlbHBlcnM7CiAgICB0aGlzLmhlbHBlck5hbWVzLmZvckVhY2goZnVuY3Rpb24oaCkgewogICAgICBpZiAoIWhlbHBlcnNbaF0gfHwgKHZhbHVlc1toXSAmJiB2YWx1ZXNbaF0gIT09IHN0YXRlW2hdKSkgewogICAgICAgIGhlbHBlcnNbaF0gPSB0aGlzW2grJ3MnXVt2YWx1ZXNbaF0gfHwgc3RhdGVbaF1dKCk7CiAgICAgIH0KICAgIH0uYmluZCh0aGlzKSk7CiAgICBhc3NpZ24oc3RhdGUsIHZhbHVlcyB8fCB7fSk7CiAgICByZXR1cm4gdGhpczsKICB9LAogIHNldERhdGE6IGZ1bmN0aW9uKGRhdGEpIHsKICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7CiAgICAgIGRhdGEuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihkLCBpKSB7CiAgICAgICAgdHJhdmVyc2VCcmFuY2hJZChkLCBpKTsKICAgICAgfSk7CiAgICB9CgogICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTsKICAgIHN0YXRlLnJvb3QgPSBkYXRhOwogICAgc3RhdGUucm9vdC54MCA9IHN0YXRlLmhlaWdodCAvIDI7CiAgICBzdGF0ZS5yb290LnkwID0gMDsKCiAgICAvLyBmdW5jdGlvbiBjb2xsYXBzZShkKSB7CiAgICAvLyAgIGlmIChkLmNoaWxkcmVuKSB7CiAgICAvLyAgICAgZC5fY2hpbGRyZW4gPSBkLmNoaWxkcmVuOwogICAgLy8gICAgIGQuX2NoaWxkcmVuLmZvckVhY2goY29sbGFwc2UpOwogICAgLy8gICAgIGQuY2hpbGRyZW4gPSBudWxsOwogICAgLy8gICB9CiAgICAvLyB9CiAgICAvL3Jvb3QuY2hpbGRyZW4uZm9yRWFjaChjb2xsYXBzZSk7CiAgICByZXR1cm4gdGhpczsKICB9LAogIHVwZGF0ZTogZnVuY3Rpb24oc291cmNlKSB7CiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlOwogICAgc291cmNlID0gc291cmNlIHx8IHN0YXRlLnJvb3Q7CiAgICB2YXIgcmVzID0gdGhpcy5sYXlvdXQoc3RhdGUpOwogICAgaWYgKHN0YXRlLmF1dG9GaXQpIHsKICAgICAgdmFyIG1pblggPSBkMy5taW4ocmVzLm5vZGVzLCBmdW5jdGlvbihkKSB7cmV0dXJuIGQueDt9KTsKICAgICAgdmFyIG1pblkgPSBkMy5taW4ocmVzLm5vZGVzLCBmdW5jdGlvbihkKSB7cmV0dXJuIGQueTt9KTsKICAgICAgdmFyIG1heFggPSBkMy5tYXgocmVzLm5vZGVzLCBmdW5jdGlvbihkKSB7cmV0dXJuIGQueDt9KTsKICAgICAgdmFyIG1heFkgPSBkMy5tYXgocmVzLm5vZGVzLCBmdW5jdGlvbihkKSB7cmV0dXJuIGQueTt9KTsKICAgICAgdmFyIHJlYWxIZWlnaHQgPSBtYXhYIC0gbWluWDsKICAgICAgdmFyIHJlYWxXaWR0aCA9IG1heFkgLSBtaW5ZICsgc3RhdGUubm9kZVdpZHRoOwogICAgICB2YXIgc2NhbGUgPSBNYXRoLm1pbihzdGF0ZS5oZWlnaHQgLyByZWFsSGVpZ2h0LCBzdGF0ZS53aWR0aCAvIHJlYWxXaWR0aCwgMSk7CiAgICAgIHZhciB0cmFuc2xhdGUgPSBbCiAgICAgICAgKHN0YXRlLndpZHRoLXJlYWxXaWR0aCpzY2FsZSkvMi1taW5ZKnNjYWxlLAogICAgICAgIChzdGF0ZS5oZWlnaHQtcmVhbEhlaWdodCpzY2FsZSkvMi1taW5YKnNjYWxlCiAgICAgIF07CiAgICAgIHRoaXMudXBkYXRlWm9vbSh0cmFuc2xhdGUsIHNjYWxlKTsKICAgIH0KICAgIHRoaXMucmVuZGVyKHNvdXJjZSwgcmVzLm5vZGVzLCByZXMubGlua3MpOwogICAgcmV0dXJuIHRoaXM7CiAgfSwKICBsYXlvdXQ6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICB2YXIgbGF5b3V0ID0gdGhpcy5oZWxwZXJzLmxheW91dDsKCiAgICB2YXIgb2Zmc2V0ID0gc3RhdGUucm9vdC54ICE9PSB1bmRlZmluZWQgPyBzdGF0ZS5yb290LnggOiBzdGF0ZS5yb290LngwOwoKICAgIC8vIENvbXB1dGUgdGhlIG5ldyB0cmVlIGxheW91dC4KICAgIHZhciBub2RlcyA9IGxheW91dC5ub2RlcyhzdGF0ZS5yb290KS5yZXZlcnNlKCksCiAgICAgICAgbGlua3MgPSBsYXlvdXQubGlua3Mobm9kZXMpOwoKICAgIC8vIE5vcm1hbGl6ZQogICAgdmFyIHJhdGlvID0gKHN0YXRlLm5vZGVIZWlnaHQgKyBzdGF0ZS5zcGFjaW5nVmVydGljYWwpIC8gdHJhdmVyc2VNaW5EaXN0YW5jZShzdGF0ZS5yb290KTsKICAgIG9mZnNldCAtPSBzdGF0ZS5yb290LnggKiByYXRpbzsKCiAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsKICAgICAgZC55ID0gZC5kZXB0aCAqIChzdGF0ZS5ub2RlV2lkdGggKyBzdGF0ZS5zcGFjaW5nSG9yaXpvbnRhbCk7CiAgICAgIGQueCA9IGQueCAqIHJhdGlvICsgb2Zmc2V0OwogICAgfSk7CgogICAgLy90cmF2ZXJzZUxhYmVsV2lkdGgocm9vdCwgMCk7CgogICAgcmV0dXJuIHsKICAgICAgbm9kZXM6IG5vZGVzLAogICAgICBsaW5rczogbGlua3MKICAgIH07CiAgfSwKICByZW5kZXI6IGZ1bmN0aW9uKHNvdXJjZSwgbm9kZXMsIGxpbmtzKSB7CiAgICB0aGlzLnJlbmRlcmVyc1t0aGlzLnN0YXRlLnJlbmRlcmVyXS5jYWxsKHRoaXMsIHNvdXJjZSwgbm9kZXMsIGxpbmtzKTsKICB9LAogIHJlbmRlcmVyczogewogICAgYm94ZWQ6IGZ1bmN0aW9uKHNvdXJjZSwgbm9kZXMsIGxpbmtzKSB7CiAgICAgIHZhciBzdmcgPSB0aGlzLnN2ZzsKICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZTsKICAgICAgdmFyIGNvbG9yID0gdGhpcy5oZWxwZXJzLmNvbG9yOwogICAgICB0aGlzLnJlbmRlcmVycy5iYXNpYy5jYWxsKHRoaXMsIHNvdXJjZSwgbm9kZXMsIGxpbmtzKTsKICAgICAgdmFyIG5vZGUgPSBzdmcuc2VsZWN0QWxsKCJnLm1hcmttYXAtbm9kZSIpOwoKICAgICAgbm9kZS5zZWxlY3QoJ3JlY3QnKQogICAgICAgIC5hdHRyKCJ5IiwgLXN0YXRlLm5vZGVIZWlnaHQvMikKICAgICAgICAuYXR0cigncngnLCAxMCkKICAgICAgICAuYXR0cigncnknLCAxMCkKICAgICAgICAuYXR0cignaGVpZ2h0Jywgc3RhdGUubm9kZUhlaWdodCkKICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQzLnJnYihjb2xvcihkLmJyYW5jaCkpLmJyaWdodGVyKDEuMik7IH0pCiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGNvbG9yKGQuYnJhbmNoKTsgfSkKICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMSk7CgogICAgICBub2RlLnNlbGVjdCgndGV4dCcpCiAgICAgICAuYXR0cigiZHkiLCAiMyIpCgogICAgICBzdmcuc2VsZWN0QWxsKCJwYXRoLm1hcmttYXAtbGluayIpCiAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIDEpOwogICAgfSwKICAgIGJhc2ljOiBmdW5jdGlvbihzb3VyY2UsIG5vZGVzLCBsaW5rcykgewogICAgICB2YXIgc3ZnID0gdGhpcy5zdmc7CiAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGU7CiAgICAgIHZhciBjb2xvciA9IHRoaXMuaGVscGVycy5jb2xvcjsKICAgICAgdmFyIGxpbmtTaGFwZSA9IHRoaXMuaGVscGVycy5saW5rU2hhcGU7CgogICAgICBmdW5jdGlvbiBsaW5rV2lkdGgoZCkgewogICAgICAgIHZhciBkZXB0aCA9IGQuZGVwdGg7CiAgICAgICAgaWYgKGQubmFtZSAhPT0gJycgJiYgZC5jaGlsZHJlbiAmJiBkLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBkLmNoaWxkcmVuWzBdLm5hbWUgPT09ICcnKSB7CiAgICAgICAgICBkZXB0aCArPSAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gTWF0aC5tYXgoNiAtIDIqZGVwdGgsIDEuNSk7CiAgICAgIH0KCiAgICAgIC8vIFVwZGF0ZSB0aGUgbm9kZXPigKYKICAgICAgdmFyIG5vZGUgPSBzdmcuc2VsZWN0QWxsKCJnLm1hcmttYXAtbm9kZSIpCiAgICAgICAgICAuZGF0YShub2RlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5pZCB8fCAoZC5pZCA9ICsrdGhpcy5pKTsgfS5iaW5kKHRoaXMpKTsKCiAgICAgIC8vIEVudGVyIGFueSBuZXcgbm9kZXMgYXQgdGhlIHBhcmVudCdzIHByZXZpb3VzIHBvc2l0aW9uLgogICAgICB2YXIgbm9kZUVudGVyID0gbm9kZS5lbnRlcigpLmFwcGVuZCgiZyIpCiAgICAgICAgICAuYXR0cigiY2xhc3MiLCAibWFya21hcC1ub2RlIikKICAgICAgICAgIC5hdHRyKCJ0cmFuc2Zvcm0iLCBmdW5jdGlvbihkKSB7IHJldHVybiAidHJhbnNsYXRlKCIgKyBzb3VyY2UueTAgKyAiLCIgKyBzb3VyY2UueDAgKyAiKSI7IH0pCiAgICAgICAgICAub24oImNsaWNrIiwgdGhpcy5jbGljay5iaW5kKHRoaXMpKTsKCiAgICAgIG5vZGVFbnRlci5hcHBlbmQoJ3JlY3QnKQogICAgICAgIC5hdHRyKCdjbGFzcycsICdtYXJrbWFwLW5vZGUtcmVjdCcpCiAgICAgICAgLmF0dHIoInkiLCBmdW5jdGlvbihkKSB7IHJldHVybiAtbGlua1dpZHRoKGQpIC8gMiB9KQogICAgICAgIC5hdHRyKCd4Jywgc3RhdGUubm9kZVdpZHRoKQogICAgICAgIC5hdHRyKCd3aWR0aCcsIDApCiAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGxpbmtXaWR0aCkKICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGNvbG9yKGQuYnJhbmNoKTsgfSk7CgogICAgICBub2RlRW50ZXIuYXBwZW5kKCJjaXJjbGUiKQogICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ21hcmttYXAtbm9kZS1jaXJjbGUnKQogICAgICAgICAgLmF0dHIoJ2N4Jywgc3RhdGUubm9kZVdpZHRoKQogICAgICAgICAgLmF0dHIoJ3N0cm9rZScsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGNvbG9yKGQuYnJhbmNoKTsgfSkKICAgICAgICAgIC5hdHRyKCJyIiwgMWUtNikKICAgICAgICAgIC5zdHlsZSgiZmlsbCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQuX2NoaWxkcmVuID8gY29sb3IoZC5icmFuY2gpIDogJyc7IH0pOwoKICAgICAgbm9kZUVudGVyLmFwcGVuZCgidGV4dCIpCiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbWFya21hcC1ub2RlLXRleHQnKQogICAgICAgICAgLmF0dHIoIngiLCBzdGF0ZS5ub2RlV2lkdGgpCiAgICAgICAgICAuYXR0cigiZHkiLCAiLTUiKQogICAgICAgICAgLmF0dHIoInRleHQtYW5jaG9yIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gInN0YXJ0IjsgfSkKICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQubmFtZTsgfSkKICAgICAgICAgIC5zdHlsZSgiZmlsbC1vcGFjaXR5IiwgMWUtNik7CgogICAgICAvLyBUcmFuc2l0aW9uIG5vZGVzIHRvIHRoZWlyIG5ldyBwb3NpdGlvbi4KICAgICAgdmFyIG5vZGVVcGRhdGUgPSBub2RlLnRyYW5zaXRpb24oKQogICAgICAgICAgLmR1cmF0aW9uKHN0YXRlLmR1cmF0aW9uKQogICAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuICJ0cmFuc2xhdGUoIiArIGQueSArICIsIiArIGQueCArICIpIjsgfSk7CgogICAgICBub2RlVXBkYXRlLnNlbGVjdCgncmVjdCcpCiAgICAgICAgLmF0dHIoJ3gnLCAtMSkKICAgICAgICAuYXR0cignd2lkdGgnLCBzdGF0ZS5ub2RlV2lkdGggKyAyKTsKCiAgICAgIG5vZGVVcGRhdGUuc2VsZWN0KCJjaXJjbGUiKQogICAgICAgICAgLmF0dHIoInIiLCA0LjUpCiAgICAgICAgICAuc3R5bGUoImZpbGwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLl9jaGlsZHJlbiA/IGNvbG9yKGQuYnJhbmNoKSA6ICcnOyB9KQogICAgICAgICAgLnN0eWxlKCdkaXNwbGF5JywgZnVuY3Rpb24oZCkgewogICAgICAgICAgICB2YXIgaGFzQ2hpbGRyZW4gPSBkLmNoaWxkcmVuIHx8IGQuX2NoaWxkcmVuOwogICAgICAgICAgICByZXR1cm4gaGFzQ2hpbGRyZW4gPyAgJ2lubGluZScgOiAnbm9uZSc7CiAgICAgICAgICB9KTsKCiAgICAgIG5vZGVVcGRhdGUuc2VsZWN0KCJ0ZXh0IikKICAgICAgICAgIC5hdHRyKCJ4IiwgMTApCiAgICAgICAgICAuc3R5bGUoImZpbGwtb3BhY2l0eSIsIDEpOwoKICAgICAgLy8gVHJhbnNpdGlvbiBleGl0aW5nIG5vZGVzIHRvIHRoZSBwYXJlbnQncyBuZXcgcG9zaXRpb24uCiAgICAgIHZhciBub2RlRXhpdCA9IG5vZGUuZXhpdCgpLnRyYW5zaXRpb24oKQogICAgICAgICAgLmR1cmF0aW9uKHN0YXRlLmR1cmF0aW9uKQogICAgICAgICAgLmF0dHIoInRyYW5zZm9ybSIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuICJ0cmFuc2xhdGUoIiArIHNvdXJjZS55ICsgIiwiICsgc291cmNlLnggKyAiKSI7IH0pCiAgICAgICAgICAucmVtb3ZlKCk7CgogICAgICBub2RlRXhpdC5zZWxlY3QoJ3JlY3QnKQogICAgICAgIC5hdHRyKCd4Jywgc3RhdGUubm9kZVdpZHRoKQogICAgICAgIC5hdHRyKCd3aWR0aCcsIDApOwoKICAgICAgbm9kZUV4aXQuc2VsZWN0KCJjaXJjbGUiKQogICAgICAgICAgLmF0dHIoInIiLCAxZS02KTsKCiAgICAgIG5vZGVFeGl0LnNlbGVjdCgidGV4dCIpCiAgICAgICAgICAuc3R5bGUoImZpbGwtb3BhY2l0eSIsIDFlLTYpCiAgICAgICAgICAuYXR0cigieCIsIHN0YXRlLm5vZGVXaWR0aCk7CgoKICAgICAgLy8gVXBkYXRlIHRoZSBsaW5rc+KApgogICAgICB2YXIgbGluayA9IHN2Zy5zZWxlY3RBbGwoInBhdGgubWFya21hcC1saW5rIikKICAgICAgICAgIC5kYXRhKGxpbmtzLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnRhcmdldC5pZDsgfSk7CgogICAgICAvLyBFbnRlciBhbnkgbmV3IGxpbmtzIGF0IHRoZSBwYXJlbnQncyBwcmV2aW91cyBwb3NpdGlvbi4KICAgICAgbGluay5lbnRlcigpLmluc2VydCgicGF0aCIsICJnIikKICAgICAgICAgIC5hdHRyKCJjbGFzcyIsICJtYXJrbWFwLWxpbmsiKQogICAgICAgICAgLmF0dHIoJ3N0cm9rZScsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGNvbG9yKGQudGFyZ2V0LmJyYW5jaCk7IH0pCiAgICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgZnVuY3Rpb24obCkge3JldHVybiBsaW5rV2lkdGgobC50YXJnZXQpO30pCiAgICAgICAgICAuYXR0cigiZCIsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgICAgdmFyIG8gPSB7eDogc291cmNlLngwLCB5OiBzb3VyY2UueTAgKyBzdGF0ZS5ub2RlV2lkdGh9OwogICAgICAgICAgICByZXR1cm4gbGlua1NoYXBlKHtzb3VyY2U6IG8sIHRhcmdldDogb30pOwogICAgICAgICAgfSk7CgogICAgICAvLyBUcmFuc2l0aW9uIGxpbmtzIHRvIHRoZWlyIG5ldyBwb3NpdGlvbi4KICAgICAgbGluay50cmFuc2l0aW9uKCkKICAgICAgICAgIC5kdXJhdGlvbihzdGF0ZS5kdXJhdGlvbikKICAgICAgICAgIC5hdHRyKCJkIiwgZnVuY3Rpb24oZCkgewogICAgICAgICAgICB2YXIgcyA9IHt4OiBkLnNvdXJjZS54LCB5OiBkLnNvdXJjZS55ICsgc3RhdGUubm9kZVdpZHRofTsKICAgICAgICAgICAgdmFyIHQgPSB7eDogZC50YXJnZXQueCwgeTogZC50YXJnZXQueX07CiAgICAgICAgICAgIHJldHVybiBsaW5rU2hhcGUoe3NvdXJjZTogcywgdGFyZ2V0OiB0fSk7CiAgICAgICAgICB9KTsKCiAgICAgIC8vIFRyYW5zaXRpb24gZXhpdGluZyBub2RlcyB0byB0aGUgcGFyZW50J3MgbmV3IHBvc2l0aW9uLgogICAgICBsaW5rLmV4aXQoKS50cmFuc2l0aW9uKCkKICAgICAgICAgIC5kdXJhdGlvbihzdGF0ZS5kdXJhdGlvbikKICAgICAgICAgIC5hdHRyKCJkIiwgZnVuY3Rpb24oZCkgewogICAgICAgICAgICB2YXIgbyA9IHt4OiBzb3VyY2UueCwgeTogc291cmNlLnkgKyBzdGF0ZS5ub2RlV2lkdGh9OwogICAgICAgICAgICByZXR1cm4gbGlua1NoYXBlKHtzb3VyY2U6IG8sIHRhcmdldDogb30pOwogICAgICAgICAgfSkKICAgICAgICAgIC5yZW1vdmUoKTsKCiAgICAgIC8vIFN0YXNoIHRoZSBvbGQgcG9zaXRpb25zIGZvciB0cmFuc2l0aW9uLgogICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGQpIHsKICAgICAgICBkLngwID0gZC54OwogICAgICAgIGQueTAgPSBkLnk7CiAgICAgIH0pOwogICAgfQogIH0sCiAgLy8gVG9nZ2xlIGNoaWxkcmVuIG9uIGNsaWNrLgogIGNsaWNrOiBmdW5jdGlvbihkKSB7CiAgICBpZiAoZC5jaGlsZHJlbikgewogICAgICBkLl9jaGlsZHJlbiA9IGQuY2hpbGRyZW47CiAgICAgIGQuY2hpbGRyZW4gPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgZC5jaGlsZHJlbiA9IGQuX2NoaWxkcmVuOwogICAgICBkLl9jaGlsZHJlbiA9IG51bGw7CiAgICB9CiAgICB0aGlzLnVwZGF0ZShkKTsKICB9Cgp9KTsKCnJldHVybiBNYXJrbWFwOwoKfSkpOwo="></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKGYpe2lmKHR5cGVvZiBleHBvcnRzPT09Im9iamVjdCImJnR5cGVvZiBtb2R1bGUhPT0idW5kZWZpbmVkIil7bW9kdWxlLmV4cG9ydHM9ZigpfWVsc2UgaWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQpe2RlZmluZShbXSxmKX1lbHNle3ZhciBnO2lmKHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIil7Zz13aW5kb3d9ZWxzZSBpZih0eXBlb2YgZ2xvYmFsIT09InVuZGVmaW5lZCIpe2c9Z2xvYmFsfWVsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5kZWZpbmVkIil7Zz1zZWxmfWVsc2V7Zz10aGlzfWcucGFyc2VtZD1mKCl9fSkoZnVuY3Rpb24oKXt2YXIgZGVmaW5lLG1vZHVsZSxleHBvcnRzO3JldHVybiBmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBmLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gcGFyc2VtZCh0ZXh0KXt2YXIgcGFyc2U9cmVxdWlyZSgiLi4vcGFyc2UubWFya2Rvd24iKTt2YXIgdHJhbnNmb3JtPXJlcXVpcmUoIi4uL3RyYW5zZm9ybS5oZWFkaW5ncyIpO3ZhciBoZWFkaW5ncz1wYXJzZSh0ZXh0KTt2YXIgcm9vdD10cmFuc2Zvcm0oaGVhZGluZ3MpO3JldHVybiByb290fX0seyIuLi9wYXJzZS5tYXJrZG93biI6NjMsIi4uL3RyYW5zZm9ybS5oZWFkaW5ncyI6NjR9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsoZnVuY3Rpb24ocm9vdCxmYWN0b3J5KXtpZih0eXBlb2YgZGVmaW5lPT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCl7ZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHJvb3RbIkF1dG9saW5rZXIiXT1mYWN0b3J5KCl9KX1lbHNlIGlmKHR5cGVvZiBleHBvcnRzPT09Im9iamVjdCIpe21vZHVsZS5leHBvcnRzPWZhY3RvcnkoKX1lbHNle3Jvb3RbIkF1dG9saW5rZXIiXT1mYWN0b3J5KCl9fSkodGhpcyxmdW5jdGlvbigpe3ZhciBBdXRvbGlua2VyPWZ1bmN0aW9uKGNmZyl7QXV0b2xpbmtlci5VdGlsLmFzc2lnbih0aGlzLGNmZyl9O0F1dG9saW5rZXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpBdXRvbGlua2VyLHVybHM6dHJ1ZSxlbWFpbDp0cnVlLHR3aXR0ZXI6dHJ1ZSxuZXdXaW5kb3c6dHJ1ZSxzdHJpcFByZWZpeDp0cnVlLHRydW5jYXRlOnVuZGVmaW5lZCxjbGFzc05hbWU6IiIsaHRtbFBhcnNlcjp1bmRlZmluZWQsbWF0Y2hQYXJzZXI6dW5kZWZpbmVkLHRhZ0J1aWxkZXI6dW5kZWZpbmVkLGxpbms6ZnVuY3Rpb24odGV4dE9ySHRtbCl7dmFyIGh0bWxQYXJzZXI9dGhpcy5nZXRIdG1sUGFyc2VyKCksaHRtbE5vZGVzPWh0bWxQYXJzZXIucGFyc2UodGV4dE9ySHRtbCksYW5jaG9yVGFnU3RhY2tDb3VudD0wLHJlc3VsdEh0bWw9W107Zm9yKHZhciBpPTAsbGVuPWh0bWxOb2Rlcy5sZW5ndGg7aTxsZW47aSsrKXt2YXIgbm9kZT1odG1sTm9kZXNbaV0sbm9kZVR5cGU9bm9kZS5nZXRUeXBlKCksbm9kZVRleHQ9bm9kZS5nZXRUZXh0KCk7aWYobm9kZVR5cGU9PT0iZWxlbWVudCIpe2lmKG5vZGUuZ2V0VGFnTmFtZSgpPT09ImEiKXtpZighbm9kZS5pc0Nsb3NpbmcoKSl7YW5jaG9yVGFnU3RhY2tDb3VudCsrfWVsc2V7YW5jaG9yVGFnU3RhY2tDb3VudD1NYXRoLm1heChhbmNob3JUYWdTdGFja0NvdW50LTEsMCl9fXJlc3VsdEh0bWwucHVzaChub2RlVGV4dCl9ZWxzZSBpZihub2RlVHlwZT09PSJlbnRpdHkiKXtyZXN1bHRIdG1sLnB1c2gobm9kZVRleHQpfWVsc2V7aWYoYW5jaG9yVGFnU3RhY2tDb3VudD09PTApe3ZhciBsaW5raWZpZWRTdHI9dGhpcy5saW5raWZ5U3RyKG5vZGVUZXh0KTtyZXN1bHRIdG1sLnB1c2gobGlua2lmaWVkU3RyKX1lbHNle3Jlc3VsdEh0bWwucHVzaChub2RlVGV4dCl9fX1yZXR1cm4gcmVzdWx0SHRtbC5qb2luKCIiKX0sbGlua2lmeVN0cjpmdW5jdGlvbihzdHIpe3JldHVybiB0aGlzLmdldE1hdGNoUGFyc2VyKCkucmVwbGFjZShzdHIsdGhpcy5jcmVhdGVNYXRjaFJldHVyblZhbCx0aGlzKX0sY3JlYXRlTWF0Y2hSZXR1cm5WYWw6ZnVuY3Rpb24obWF0Y2gpe3ZhciByZXBsYWNlRm5SZXN1bHQ7aWYodGhpcy5yZXBsYWNlRm4pe3JlcGxhY2VGblJlc3VsdD10aGlzLnJlcGxhY2VGbi5jYWxsKHRoaXMsdGhpcyxtYXRjaCl9aWYodHlwZW9mIHJlcGxhY2VGblJlc3VsdD09PSJzdHJpbmciKXtyZXR1cm4gcmVwbGFjZUZuUmVzdWx0fWVsc2UgaWYocmVwbGFjZUZuUmVzdWx0PT09ZmFsc2Upe3JldHVybiBtYXRjaC5nZXRNYXRjaGVkVGV4dCgpfWVsc2UgaWYocmVwbGFjZUZuUmVzdWx0IGluc3RhbmNlb2YgQXV0b2xpbmtlci5IdG1sVGFnKXtyZXR1cm4gcmVwbGFjZUZuUmVzdWx0LnRvU3RyaW5nKCl9ZWxzZXt2YXIgdGFnQnVpbGRlcj10aGlzLmdldFRhZ0J1aWxkZXIoKSxhbmNob3JUYWc9dGFnQnVpbGRlci5idWlsZChtYXRjaCk7cmV0dXJuIGFuY2hvclRhZy50b1N0cmluZygpfX0sZ2V0SHRtbFBhcnNlcjpmdW5jdGlvbigpe3ZhciBodG1sUGFyc2VyPXRoaXMuaHRtbFBhcnNlcjtpZighaHRtbFBhcnNlcil7aHRtbFBhcnNlcj10aGlzLmh0bWxQYXJzZXI9bmV3IEF1dG9saW5rZXIuaHRtbFBhcnNlci5IdG1sUGFyc2VyfXJldHVybiBodG1sUGFyc2VyfSxnZXRNYXRjaFBhcnNlcjpmdW5jdGlvbigpe3ZhciBtYXRjaFBhcnNlcj10aGlzLm1hdGNoUGFyc2VyO2lmKCFtYXRjaFBhcnNlcil7bWF0Y2hQYXJzZXI9dGhpcy5tYXRjaFBhcnNlcj1uZXcgQXV0b2xpbmtlci5tYXRjaFBhcnNlci5NYXRjaFBhcnNlcih7dXJsczp0aGlzLnVybHMsZW1haWw6dGhpcy5lbWFpbCx0d2l0dGVyOnRoaXMudHdpdHRlcixzdHJpcFByZWZpeDp0aGlzLnN0cmlwUHJlZml4fSl9cmV0dXJuIG1hdGNoUGFyc2VyfSxnZXRUYWdCdWlsZGVyOmZ1bmN0aW9uKCl7dmFyIHRhZ0J1aWxkZXI9dGhpcy50YWdCdWlsZGVyO2lmKCF0YWdCdWlsZGVyKXt0YWdCdWlsZGVyPXRoaXMudGFnQnVpbGRlcj1uZXcgQXV0b2xpbmtlci5BbmNob3JUYWdCdWlsZGVyKHtuZXdXaW5kb3c6dGhpcy5uZXdXaW5kb3csdHJ1bmNhdGU6dGhpcy50cnVuY2F0ZSxjbGFzc05hbWU6dGhpcy5jbGFzc05hbWV9KX1yZXR1cm4gdGFnQnVpbGRlcn19O0F1dG9saW5rZXIubGluaz1mdW5jdGlvbih0ZXh0T3JIdG1sLG9wdGlvbnMpe3ZhciBhdXRvbGlua2VyPW5ldyBBdXRvbGlua2VyKG9wdGlvbnMpO3JldHVybiBhdXRvbGlua2VyLmxpbmsodGV4dE9ySHRtbCl9O0F1dG9saW5rZXIubWF0Y2g9e307QXV0b2xpbmtlci5odG1sUGFyc2VyPXt9O0F1dG9saW5rZXIubWF0Y2hQYXJzZXI9e307QXV0b2xpbmtlci5VdGlsPXthYnN0cmFjdE1ldGhvZDpmdW5jdGlvbigpe3Rocm93ImFic3RyYWN0In0sYXNzaWduOmZ1bmN0aW9uKGRlc3Qsc3JjKXtmb3IodmFyIHByb3AgaW4gc3JjKXtpZihzcmMuaGFzT3duUHJvcGVydHkocHJvcCkpe2Rlc3RbcHJvcF09c3JjW3Byb3BdfX1yZXR1cm4gZGVzdH0sZXh0ZW5kOmZ1bmN0aW9uKHN1cGVyY2xhc3MscHJvdG9Qcm9wcyl7dmFyIHN1cGVyY2xhc3NQcm90bz1zdXBlcmNsYXNzLnByb3RvdHlwZTt2YXIgRj1mdW5jdGlvbigpe307Ri5wcm90b3R5cGU9c3VwZXJjbGFzc1Byb3RvO3ZhciBzdWJjbGFzcztpZihwcm90b1Byb3BzLmhhc093blByb3BlcnR5KCJjb25zdHJ1Y3RvciIpKXtzdWJjbGFzcz1wcm90b1Byb3BzLmNvbnN0cnVjdG9yfWVsc2V7c3ViY2xhc3M9ZnVuY3Rpb24oKXtzdXBlcmNsYXNzUHJvdG8uY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX12YXIgc3ViY2xhc3NQcm90bz1zdWJjbGFzcy5wcm90b3R5cGU9bmV3IEY7c3ViY2xhc3NQcm90by5jb25zdHJ1Y3Rvcj1zdWJjbGFzcztzdWJjbGFzc1Byb3RvLnN1cGVyY2xhc3M9c3VwZXJjbGFzc1Byb3RvO2RlbGV0ZSBwcm90b1Byb3BzLmNvbnN0cnVjdG9yO0F1dG9saW5rZXIuVXRpbC5hc3NpZ24oc3ViY2xhc3NQcm90byxwcm90b1Byb3BzKTtyZXR1cm4gc3ViY2xhc3N9LGVsbGlwc2lzOmZ1bmN0aW9uKHN0cix0cnVuY2F0ZUxlbixlbGxpcHNpc0NoYXJzKXtpZihzdHIubGVuZ3RoPnRydW5jYXRlTGVuKXtlbGxpcHNpc0NoYXJzPWVsbGlwc2lzQ2hhcnM9PW51bGw/Ii4uIjplbGxpcHNpc0NoYXJzO3N0cj1zdHIuc3Vic3RyaW5nKDAsdHJ1bmNhdGVMZW4tZWxsaXBzaXNDaGFycy5sZW5ndGgpK2VsbGlwc2lzQ2hhcnN9cmV0dXJuIHN0cn0saW5kZXhPZjpmdW5jdGlvbihhcnIsZWxlbWVudCl7aWYoQXJyYXkucHJvdG90eXBlLmluZGV4T2Ype3JldHVybiBhcnIuaW5kZXhPZihlbGVtZW50KX1lbHNle2Zvcih2YXIgaT0wLGxlbj1hcnIubGVuZ3RoO2k8bGVuO2krKyl7aWYoYXJyW2ldPT09ZWxlbWVudClyZXR1cm4gaX1yZXR1cm4tMX19LHNwbGl0QW5kQ2FwdHVyZTpmdW5jdGlvbihzdHIsc3BsaXRSZWdleCl7aWYoIXNwbGl0UmVnZXguZ2xvYmFsKXRocm93IG5ldyBFcnJvcigiYHNwbGl0UmVnZXhgIG11c3QgaGF2ZSB0aGUgJ2cnIGZsYWcgc2V0Iik7dmFyIHJlc3VsdD1bXSxsYXN0SWR4PTAsbWF0Y2g7d2hpbGUobWF0Y2g9c3BsaXRSZWdleC5leGVjKHN0cikpe3Jlc3VsdC5wdXNoKHN0ci5zdWJzdHJpbmcobGFzdElkeCxtYXRjaC5pbmRleCkpO3Jlc3VsdC5wdXNoKG1hdGNoWzBdKTtsYXN0SWR4PW1hdGNoLmluZGV4K21hdGNoWzBdLmxlbmd0aH1yZXN1bHQucHVzaChzdHIuc3Vic3RyaW5nKGxhc3RJZHgpKTtyZXR1cm4gcmVzdWx0fX07QXV0b2xpbmtlci5IdG1sVGFnPUF1dG9saW5rZXIuVXRpbC5leHRlbmQoT2JqZWN0LHt3aGl0ZXNwYWNlUmVnZXg6L1xzKy8sY29uc3RydWN0b3I6ZnVuY3Rpb24oY2ZnKXtBdXRvbGlua2VyLlV0aWwuYXNzaWduKHRoaXMsY2ZnKTt0aGlzLmlubmVySHRtbD10aGlzLmlubmVySHRtbHx8dGhpcy5pbm5lckhUTUx9LHNldFRhZ05hbWU6ZnVuY3Rpb24odGFnTmFtZSl7dGhpcy50YWdOYW1lPXRhZ05hbWU7cmV0dXJuIHRoaXN9LGdldFRhZ05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdOYW1lfHwiIn0sc2V0QXR0cjpmdW5jdGlvbihhdHRyTmFtZSxhdHRyVmFsdWUpe3ZhciB0YWdBdHRycz10aGlzLmdldEF0dHJzKCk7dGFnQXR0cnNbYXR0ck5hbWVdPWF0dHJWYWx1ZTtyZXR1cm4gdGhpc30sZ2V0QXR0cjpmdW5jdGlvbihhdHRyTmFtZSl7cmV0dXJuIHRoaXMuZ2V0QXR0cnMoKVthdHRyTmFtZV19LHNldEF0dHJzOmZ1bmN0aW9uKGF0dHJzKXt2YXIgdGFnQXR0cnM9dGhpcy5nZXRBdHRycygpO0F1dG9saW5rZXIuVXRpbC5hc3NpZ24odGFnQXR0cnMsYXR0cnMpO3JldHVybiB0aGlzfSxnZXRBdHRyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHJzfHwodGhpcy5hdHRycz17fSl9LHNldENsYXNzOmZ1bmN0aW9uKGNzc0NsYXNzKXtyZXR1cm4gdGhpcy5zZXRBdHRyKCJjbGFzcyIsY3NzQ2xhc3MpfSxhZGRDbGFzczpmdW5jdGlvbihjc3NDbGFzcyl7dmFyIGNsYXNzQXR0cj10aGlzLmdldENsYXNzKCksd2hpdGVzcGFjZVJlZ2V4PXRoaXMud2hpdGVzcGFjZVJlZ2V4LGluZGV4T2Y9QXV0b2xpbmtlci5VdGlsLmluZGV4T2YsY2xhc3Nlcz0hY2xhc3NBdHRyP1tdOmNsYXNzQXR0ci5zcGxpdCh3aGl0ZXNwYWNlUmVnZXgpLG5ld0NsYXNzZXM9Y3NzQ2xhc3Muc3BsaXQod2hpdGVzcGFjZVJlZ2V4KSxuZXdDbGFzczt3aGlsZShuZXdDbGFzcz1uZXdDbGFzc2VzLnNoaWZ0KCkpe2lmKGluZGV4T2YoY2xhc3NlcyxuZXdDbGFzcyk9PT0tMSl7Y2xhc3Nlcy5wdXNoKG5ld0NsYXNzKX19dGhpcy5nZXRBdHRycygpWyJjbGFzcyJdPWNsYXNzZXMuam9pbigiICIpO3JldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihjc3NDbGFzcyl7dmFyIGNsYXNzQXR0cj10aGlzLmdldENsYXNzKCksd2hpdGVzcGFjZVJlZ2V4PXRoaXMud2hpdGVzcGFjZVJlZ2V4LGluZGV4T2Y9QXV0b2xpbmtlci5VdGlsLmluZGV4T2YsY2xhc3Nlcz0hY2xhc3NBdHRyP1tdOmNsYXNzQXR0ci5zcGxpdCh3aGl0ZXNwYWNlUmVnZXgpLHJlbW92ZUNsYXNzZXM9Y3NzQ2xhc3Muc3BsaXQod2hpdGVzcGFjZVJlZ2V4KSxyZW1vdmVDbGFzczt3aGlsZShjbGFzc2VzLmxlbmd0aCYmKHJlbW92ZUNsYXNzPXJlbW92ZUNsYXNzZXMuc2hpZnQoKSkpe3ZhciBpZHg9aW5kZXhPZihjbGFzc2VzLHJlbW92ZUNsYXNzKTtpZihpZHghPT0tMSl7Y2xhc3Nlcy5zcGxpY2UoaWR4LDEpfX10aGlzLmdldEF0dHJzKClbImNsYXNzIl09Y2xhc3Nlcy5qb2luKCIgIik7cmV0dXJuIHRoaXN9LGdldENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QXR0cnMoKVsiY2xhc3MiXXx8IiJ9LGhhc0NsYXNzOmZ1bmN0aW9uKGNzc0NsYXNzKXtyZXR1cm4oIiAiK3RoaXMuZ2V0Q2xhc3MoKSsiICIpLmluZGV4T2YoIiAiK2Nzc0NsYXNzKyIgIikhPT0tMX0sc2V0SW5uZXJIdG1sOmZ1bmN0aW9uKGh0bWwpe3RoaXMuaW5uZXJIdG1sPWh0bWw7cmV0dXJuIHRoaXN9LGdldElubmVySHRtbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlubmVySHRtbHx8IiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHRhZ05hbWU9dGhpcy5nZXRUYWdOYW1lKCksYXR0cnNTdHI9dGhpcy5idWlsZEF0dHJzU3RyKCk7YXR0cnNTdHI9YXR0cnNTdHI/IiAiK2F0dHJzU3RyOiIiO3JldHVyblsiPCIsdGFnTmFtZSxhdHRyc1N0ciwiPiIsdGhpcy5nZXRJbm5lckh0bWwoKSwiPC8iLHRhZ05hbWUsIj4iXS5qb2luKCIiKX0sYnVpbGRBdHRyc1N0cjpmdW5jdGlvbigpe2lmKCF0aGlzLmF0dHJzKXJldHVybiIiO3ZhciBhdHRycz10aGlzLmdldEF0dHJzKCksYXR0cnNBcnI9W107Zm9yKHZhciBwcm9wIGluIGF0dHJzKXtpZihhdHRycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSl7YXR0cnNBcnIucHVzaChwcm9wKyc9IicrYXR0cnNbcHJvcF0rJyInKX19cmV0dXJuIGF0dHJzQXJyLmpvaW4oIiAiKX19KTtBdXRvbGlua2VyLkFuY2hvclRhZ0J1aWxkZXI9QXV0b2xpbmtlci5VdGlsLmV4dGVuZChPYmplY3Qse2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGNmZyl7QXV0b2xpbmtlci5VdGlsLmFzc2lnbih0aGlzLGNmZyl9LGJ1aWxkOmZ1bmN0aW9uKG1hdGNoKXt2YXIgdGFnPW5ldyBBdXRvbGlua2VyLkh0bWxUYWcoe3RhZ05hbWU6ImEiLGF0dHJzOnRoaXMuY3JlYXRlQXR0cnMobWF0Y2guZ2V0VHlwZSgpLG1hdGNoLmdldEFuY2hvckhyZWYoKSksaW5uZXJIdG1sOnRoaXMucHJvY2Vzc0FuY2hvclRleHQobWF0Y2guZ2V0QW5jaG9yVGV4dCgpKX0pO3JldHVybiB0YWd9LGNyZWF0ZUF0dHJzOmZ1bmN0aW9uKG1hdGNoVHlwZSxhbmNob3JIcmVmKXt2YXIgYXR0cnM9e2hyZWY6YW5jaG9ySHJlZn07dmFyIGNzc0NsYXNzPXRoaXMuY3JlYXRlQ3NzQ2xhc3MobWF0Y2hUeXBlKTtpZihjc3NDbGFzcyl7YXR0cnNbImNsYXNzIl09Y3NzQ2xhc3N9aWYodGhpcy5uZXdXaW5kb3cpe2F0dHJzWyJ0YXJnZXQiXT0iX2JsYW5rIn1yZXR1cm4gYXR0cnN9LGNyZWF0ZUNzc0NsYXNzOmZ1bmN0aW9uKG1hdGNoVHlwZSl7dmFyIGNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZTtpZighY2xhc3NOYW1lKXJldHVybiIiO2Vsc2UgcmV0dXJuIGNsYXNzTmFtZSsiICIrY2xhc3NOYW1lKyItIittYXRjaFR5cGV9LHByb2Nlc3NBbmNob3JUZXh0OmZ1bmN0aW9uKGFuY2hvclRleHQpe2FuY2hvclRleHQ9dGhpcy5kb1RydW5jYXRlKGFuY2hvclRleHQpO3JldHVybiBhbmNob3JUZXh0fSxkb1RydW5jYXRlOmZ1bmN0aW9uKGFuY2hvclRleHQpe3JldHVybiBBdXRvbGlua2VyLlV0aWwuZWxsaXBzaXMoYW5jaG9yVGV4dCx0aGlzLnRydW5jYXRlfHxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpfX0pO0F1dG9saW5rZXIuaHRtbFBhcnNlci5IdG1sUGFyc2VyPUF1dG9saW5rZXIuVXRpbC5leHRlbmQoT2JqZWN0LHtodG1sUmVnZXg6ZnVuY3Rpb24oKXt2YXIgdGFnTmFtZVJlZ2V4PS9bMC05YS16QS1aXVswLTlhLXpBLVo6XSovLGF0dHJOYW1lUmVnZXg9L1teXHNcMCInPlwvPVx4MDEtXHgxRlx4N0ZdKy8sYXR0clZhbHVlUmVnZXg9Lyg/OiJbXiJdKj8ifCdbXiddKj8nfFteJyI9PD5gXHNdKykvLG5hbWVFcXVhbHNWYWx1ZVJlZ2V4PWF0dHJOYW1lUmVnZXguc291cmNlKyIoPzpcXHMqPVxccyoiK2F0dHJWYWx1ZVJlZ2V4LnNvdXJjZSsiKT8iO3JldHVybiBuZXcgUmVnRXhwKFsiKD86IiwiPCghRE9DVFlQRSkiLCIoPzoiLCJcXHMrIiwiKD86IixuYW1lRXF1YWxzVmFsdWVSZWdleCwifCIsYXR0clZhbHVlUmVnZXguc291cmNlKyIpIiwiKSoiLCI+IiwiKSIsInwiLCIoPzoiLCI8KC8pPyIsIigiK3RhZ05hbWVSZWdleC5zb3VyY2UrIikiLCIoPzoiLCJcXHMrIixuYW1lRXF1YWxzVmFsdWVSZWdleCwiKSoiLCJcXHMqLz8iLCI+IiwiKSJdLmpvaW4oIiIpLCJnaSIpfSgpLGh0bWxDaGFyYWN0ZXJFbnRpdGllc1JlZ2V4Oi8oJm5ic3A7fCYjMTYwO3wmbHQ7fCYjNjA7fCZndDt8JiM2Mjt8JnF1b3Q7fCYjMzQ7fCYjMzk7KS9naSxwYXJzZTpmdW5jdGlvbihodG1sKXt2YXIgaHRtbFJlZ2V4PXRoaXMuaHRtbFJlZ2V4LGN1cnJlbnRSZXN1bHQsbGFzdEluZGV4PTAsdGV4dEFuZEVudGl0eU5vZGVzLG5vZGVzPVtdO3doaWxlKChjdXJyZW50UmVzdWx0PWh0bWxSZWdleC5leGVjKGh0bWwpKSE9PW51bGwpe3ZhciB0YWdUZXh0PWN1cnJlbnRSZXN1bHRbMF0sdGFnTmFtZT1jdXJyZW50UmVzdWx0WzFdfHxjdXJyZW50UmVzdWx0WzNdLGlzQ2xvc2luZ1RhZz0hIWN1cnJlbnRSZXN1bHRbMl0saW5CZXR3ZWVuVGFnc1RleHQ9aHRtbC5zdWJzdHJpbmcobGFzdEluZGV4LGN1cnJlbnRSZXN1bHQuaW5kZXgpO2lmKGluQmV0d2VlblRhZ3NUZXh0KXt0ZXh0QW5kRW50aXR5Tm9kZXM9dGhpcy5wYXJzZVRleHRBbmRFbnRpdHlOb2RlcyhpbkJldHdlZW5UYWdzVGV4dCk7bm9kZXMucHVzaC5hcHBseShub2Rlcyx0ZXh0QW5kRW50aXR5Tm9kZXMpfW5vZGVzLnB1c2godGhpcy5jcmVhdGVFbGVtZW50Tm9kZSh0YWdUZXh0LHRhZ05hbWUsaXNDbG9zaW5nVGFnKSk7bGFzdEluZGV4PWN1cnJlbnRSZXN1bHQuaW5kZXgrdGFnVGV4dC5sZW5ndGh9aWYobGFzdEluZGV4PGh0bWwubGVuZ3RoKXt2YXIgdGV4dD1odG1sLnN1YnN0cmluZyhsYXN0SW5kZXgpO2lmKHRleHQpe3RleHRBbmRFbnRpdHlOb2Rlcz10aGlzLnBhcnNlVGV4dEFuZEVudGl0eU5vZGVzKHRleHQpO25vZGVzLnB1c2guYXBwbHkobm9kZXMsdGV4dEFuZEVudGl0eU5vZGVzKX19cmV0dXJuIG5vZGVzfSxwYXJzZVRleHRBbmRFbnRpdHlOb2RlczpmdW5jdGlvbih0ZXh0KXt2YXIgbm9kZXM9W10sdGV4dEFuZEVudGl0eVRva2Vucz1BdXRvbGlua2VyLlV0aWwuc3BsaXRBbmRDYXB0dXJlKHRleHQsdGhpcy5odG1sQ2hhcmFjdGVyRW50aXRpZXNSZWdleCk7Zm9yKHZhciBpPTAsbGVuPXRleHRBbmRFbnRpdHlUb2tlbnMubGVuZ3RoO2k8bGVuO2krPTIpe3ZhciB0ZXh0VG9rZW49dGV4dEFuZEVudGl0eVRva2Vuc1tpXSxlbnRpdHlUb2tlbj10ZXh0QW5kRW50aXR5VG9rZW5zW2krMV07aWYodGV4dFRva2VuKW5vZGVzLnB1c2godGhpcy5jcmVhdGVUZXh0Tm9kZSh0ZXh0VG9rZW4pKTtpZihlbnRpdHlUb2tlbilub2Rlcy5wdXNoKHRoaXMuY3JlYXRlRW50aXR5Tm9kZShlbnRpdHlUb2tlbikpfXJldHVybiBub2Rlc30sY3JlYXRlRWxlbWVudE5vZGU6ZnVuY3Rpb24odGFnVGV4dCx0YWdOYW1lLGlzQ2xvc2luZ1RhZyl7cmV0dXJuIG5ldyBBdXRvbGlua2VyLmh0bWxQYXJzZXIuRWxlbWVudE5vZGUoe3RleHQ6dGFnVGV4dCx0YWdOYW1lOnRhZ05hbWUudG9Mb3dlckNhc2UoKSxjbG9zaW5nOmlzQ2xvc2luZ1RhZ30pfSxjcmVhdGVFbnRpdHlOb2RlOmZ1bmN0aW9uKHRleHQpe3JldHVybiBuZXcgQXV0b2xpbmtlci5odG1sUGFyc2VyLkVudGl0eU5vZGUoe3RleHQ6dGV4dH0pfSxjcmVhdGVUZXh0Tm9kZTpmdW5jdGlvbih0ZXh0KXtyZXR1cm4gbmV3IEF1dG9saW5rZXIuaHRtbFBhcnNlci5UZXh0Tm9kZSh7dGV4dDp0ZXh0fSl9fSk7QXV0b2xpbmtlci5odG1sUGFyc2VyLkh0bWxOb2RlPUF1dG9saW5rZXIuVXRpbC5leHRlbmQoT2JqZWN0LHt0ZXh0OiIiLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGNmZyl7QXV0b2xpbmtlci5VdGlsLmFzc2lnbih0aGlzLGNmZyl9LGdldFR5cGU6QXV0b2xpbmtlci5VdGlsLmFic3RyYWN0TWV0aG9kLGdldFRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0fX0pO0F1dG9saW5rZXIuaHRtbFBhcnNlci5FbGVtZW50Tm9kZT1BdXRvbGlua2VyLlV0aWwuZXh0ZW5kKEF1dG9saW5rZXIuaHRtbFBhcnNlci5IdG1sTm9kZSx7dGFnTmFtZToiIixjbG9zaW5nOmZhbHNlLGdldFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4iZWxlbWVudCJ9LGdldFRhZ05hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWdOYW1lfSxpc0Nsb3Npbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9zaW5nfX0pO0F1dG9saW5rZXIuaHRtbFBhcnNlci5FbnRpdHlOb2RlPUF1dG9saW5rZXIuVXRpbC5leHRlbmQoQXV0b2xpbmtlci5odG1sUGFyc2VyLkh0bWxOb2RlLHtnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImVudGl0eSJ9fSk7QXV0b2xpbmtlci5odG1sUGFyc2VyLlRleHROb2RlPUF1dG9saW5rZXIuVXRpbC5leHRlbmQoQXV0b2xpbmtlci5odG1sUGFyc2VyLkh0bWxOb2RlLHtnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInRleHQifX0pO0F1dG9saW5rZXIubWF0Y2hQYXJzZXIuTWF0Y2hQYXJzZXI9QXV0b2xpbmtlci5VdGlsLmV4dGVuZChPYmplY3Qse3VybHM6dHJ1ZSxlbWFpbDp0cnVlLHR3aXR0ZXI6dHJ1ZSxzdHJpcFByZWZpeDp0cnVlLG1hdGNoZXJSZWdleDpmdW5jdGlvbigpe3ZhciB0d2l0dGVyUmVnZXg9LyhefFteXHddKUAoXHd7MSwxNX0pLyxlbWFpbFJlZ2V4PS8oPzpbXC07OiY9XCtcJCxcd1wuXStAKS8scHJvdG9jb2xSZWdleD0vKD86W0EtWmEtel1bLS4rQS1aYS16MC05XSs6KD8hW0EtWmEtel1bLS4rQS1aYS16MC05XSs6XC9cLykoPyFcZCtcLz8pKD86XC9cLyk/KS8sd3d3UmVnZXg9Lyg/Ond3d1wuKS8sZG9tYWluTmFtZVJlZ2V4PS9bQS1aYS16MC05XC5cLV0qW0EtWmEtejAtOVwtXS8sdGxkUmVnZXg9L1wuKD86aW50ZXJuYXRpb25hbHxjb25zdHJ1Y3Rpb258Y29udHJhY3RvcnN8ZW50ZXJwcmlzZXN8cGhvdG9ncmFwaHl8cHJvZHVjdGlvbnN8Zm91bmRhdGlvbnxpbW1vYmlsaWVufGluZHVzdHJpZXN8bWFuYWdlbWVudHxwcm9wZXJ0aWVzfHRlY2hub2xvZ3l8Y2hyaXN0bWFzfGNvbW11bml0eXxkaXJlY3Rvcnl8ZWR1Y2F0aW9ufGVxdWlwbWVudHxpbnN0aXR1dGV8bWFya2V0aW5nfHNvbHV0aW9uc3x2YWNhdGlvbnN8YmFyZ2FpbnN8Ym91dGlxdWV8YnVpbGRlcnN8Y2F0ZXJpbmd8Y2xlYW5pbmd8Y2xvdGhpbmd8Y29tcHV0ZXJ8ZGVtb2NyYXR8ZGlhbW9uZHN8Z3JhcGhpY3N8aG9sZGluZ3N8bGlnaHRpbmd8cGFydG5lcnN8cGx1bWJpbmd8c3VwcGxpZXN8dHJhaW5pbmd8dmVudHVyZXN8YWNhZGVteXxjYXJlZXJzfGNvbXBhbnl8Y3J1aXNlc3xkb21haW5zfGV4cG9zZWR8ZmxpZ2h0c3xmbG9yaXN0fGdhbGxlcnl8Z3VpdGFyc3xob2xpZGF5fGtpdGNoZW58bmV1c3Rhcnxva2luYXdhfHJlY2lwZXN8cmVudGFsc3xyZXZpZXdzfHNoaWtzaGF8c2luZ2xlc3xzdXBwb3J0fHN5c3RlbXN8YWdlbmN5fGJlcmxpbnxjYW1lcmF8Y2VudGVyfGNvZmZlZXxjb25kb3N8ZGF0aW5nfGVzdGF0ZXxldmVudHN8ZXhwZXJ0fGZ1dGJvbHxrYXVmZW58bHV4dXJ5fG1haXNvbnxtb25hc2h8bXVzZXVtfG5hZ295YXxwaG90b3N8cmVwYWlyfHJlcG9ydHxzb2NpYWx8c3VwcGx5fHRhdHRvb3x0aWVuZGF8dHJhdmVsfHZpYWplc3x2aWxsYXN8dmlzaW9ufHZvdGluZ3x2b3lhZ2V8YWN0b3J8YnVpbGR8Y2FyZHN8Y2hlYXB8Y29kZXN8ZGFuY2V8ZW1haWx8Z2xhc3N8aG91c2V8bWFuZ298bmluamF8cGFydHN8cGhvdG98c2hvZXN8c29sYXJ8dG9kYXl8dG9reW98dG9vbHN8d2F0Y2h8d29ya3N8YWVyb3xhcnBhfGFzaWF8YmVzdHxiaWtlfGJsdWV8YnV6enxjYW1wfGNsdWJ8Y29vbHxjb29wfGZhcm18ZmlzaHxnaWZ0fGd1cnV8aW5mb3xqb2JzfGtpd2l8a3JlZHxsYW5kfGxpbW98bGlua3xtZW51fG1vYml8bW9kYXxuYW1lfHBpY3N8cGlua3xwb3N0fHFwb258cmljaHxydWhyfHNleHl8dGlwc3x2b3RlfHZvdG98d2FuZ3x3aWVufHdpa2l8em9uZXxiYXJ8YmlkfGJpenxjYWJ8Y2F0fGNlb3xjb218ZWR1fGdvdnxpbnR8a2ltfG1pbHxuZXR8b25sfG9yZ3xwcm98cHVifHJlZHx0ZWx8dW5vfHdlZHx4eHh8eHl6fGFjfGFkfGFlfGFmfGFnfGFpfGFsfGFtfGFufGFvfGFxfGFyfGFzfGF0fGF1fGF3fGF4fGF6fGJhfGJifGJkfGJlfGJmfGJnfGJofGJpfGJqfGJtfGJufGJvfGJyfGJzfGJ0fGJ2fGJ3fGJ5fGJ6fGNhfGNjfGNkfGNmfGNnfGNofGNpfGNrfGNsfGNtfGNufGNvfGNyfGN1fGN2fGN3fGN4fGN5fGN6fGRlfGRqfGRrfGRtfGRvfGR6fGVjfGVlfGVnfGVyfGVzfGV0fGV1fGZpfGZqfGZrfGZtfGZvfGZyfGdhfGdifGdkfGdlfGdmfGdnfGdofGdpfGdsfGdtfGdufGdwfGdxfGdyfGdzfGd0fGd1fGd3fGd5fGhrfGhtfGhufGhyfGh0fGh1fGlkfGllfGlsfGltfGlufGlvfGlxfGlyfGlzfGl0fGplfGptfGpvfGpwfGtlfGtnfGtofGtpfGttfGtufGtwfGtyfGt3fGt5fGt6fGxhfGxifGxjfGxpfGxrfGxyfGxzfGx0fGx1fGx2fGx5fG1hfG1jfG1kfG1lfG1nfG1ofG1rfG1sfG1tfG1ufG1vfG1wfG1xfG1yfG1zfG10fG11fG12fG13fG14fG15fG16fG5hfG5jfG5lfG5mfG5nfG5pfG5sfG5vfG5wfG5yfG51fG56fG9tfHBhfHBlfHBmfHBnfHBofHBrfHBsfHBtfHBufHByfHBzfHB0fHB3fHB5fHFhfHJlfHJvfHJzfHJ1fHJ3fHNhfHNifHNjfHNkfHNlfHNnfHNofHNpfHNqfHNrfHNsfHNtfHNufHNvfHNyfHN0fHN1fHN2fHN4fHN5fHN6fHRjfHRkfHRmfHRnfHRofHRqfHRrfHRsfHRtfHRufHRvfHRwfHRyfHR0fHR2fHR3fHR6fHVhfHVnfHVrfHVzfHV5fHV6fHZhfHZjfHZlfHZnfHZpfHZufHZ1fHdmfHdzfHllfHl0fHphfHptfHp3KVxiLyx1cmxTdWZmaXhSZWdleD0vW1wtQS1aYS16MC05KyZAI1wvJT1+XygpfCckKlxbXF0/ITosLjtdKltcLUEtWmEtejAtOSsmQCNcLyU9fl8oKXwnJCpcW1xdXS87cmV0dXJuIG5ldyBSZWdFeHAoWyIoIix0d2l0dGVyUmVnZXguc291cmNlLCIpIiwifCIsIigiLGVtYWlsUmVnZXguc291cmNlLGRvbWFpbk5hbWVSZWdleC5zb3VyY2UsdGxkUmVnZXguc291cmNlLCIpIiwifCIsIigiLCIoPzoiLCIoIixwcm90b2NvbFJlZ2V4LnNvdXJjZSxkb21haW5OYW1lUmVnZXguc291cmNlLCIpIiwifCIsIig/OiIsIiguPy8vKT8iLHd3d1JlZ2V4LnNvdXJjZSxkb21haW5OYW1lUmVnZXguc291cmNlLCIpIiwifCIsIig/OiIsIiguPy8vKT8iLGRvbWFpbk5hbWVSZWdleC5zb3VyY2UsdGxkUmVnZXguc291cmNlLCIpIiwiKSIsIig/OiIrdXJsU3VmZml4UmVnZXguc291cmNlKyIpPyIsIikiXS5qb2luKCIiKSwiZ2kiKX0oKSxjaGFyQmVmb3JlUHJvdG9jb2xSZWxNYXRjaFJlZ2V4Oi9eKC4pP1wvXC8vLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGNmZyl7QXV0b2xpbmtlci5VdGlsLmFzc2lnbih0aGlzLGNmZyk7dGhpcy5tYXRjaFZhbGlkYXRvcj1uZXcgQXV0b2xpbmtlci5NYXRjaFZhbGlkYXRvcn0scmVwbGFjZTpmdW5jdGlvbih0ZXh0LHJlcGxhY2VGbixjb250ZXh0T2JqKXt2YXIgbWU9dGhpcztyZXR1cm4gdGV4dC5yZXBsYWNlKHRoaXMubWF0Y2hlclJlZ2V4LGZ1bmN0aW9uKG1hdGNoU3RyLCQxLCQyLCQzLCQ0LCQ1LCQ2LCQ3LCQ4KXt2YXIgbWF0Y2hEZXNjT2JqPW1lLnByb2Nlc3NDYW5kaWRhdGVNYXRjaChtYXRjaFN0ciwkMSwkMiwkMywkNCwkNSwkNiwkNywkOCk7aWYoIW1hdGNoRGVzY09iail7cmV0dXJuIG1hdGNoU3RyfWVsc2V7dmFyIHJlcGxhY2VTdHI9cmVwbGFjZUZuLmNhbGwoY29udGV4dE9iaixtYXRjaERlc2NPYmoubWF0Y2gpO3JldHVybiBtYXRjaERlc2NPYmoucHJlZml4U3RyK3JlcGxhY2VTdHIrbWF0Y2hEZXNjT2JqLnN1ZmZpeFN0cn19KX0scHJvY2Vzc0NhbmRpZGF0ZU1hdGNoOmZ1bmN0aW9uKG1hdGNoU3RyLHR3aXR0ZXJNYXRjaCx0d2l0dGVySGFuZGxlUHJlZml4V2hpdGVzcGFjZUNoYXIsdHdpdHRlckhhbmRsZSxlbWFpbEFkZHJlc3NNYXRjaCx1cmxNYXRjaCxwcm90b2NvbFVybE1hdGNoLHd3d1Byb3RvY29sUmVsYXRpdmVNYXRjaCx0bGRQcm90b2NvbFJlbGF0aXZlTWF0Y2gpe3ZhciBwcm90b2NvbFJlbGF0aXZlTWF0Y2g9d3d3UHJvdG9jb2xSZWxhdGl2ZU1hdGNofHx0bGRQcm90b2NvbFJlbGF0aXZlTWF0Y2gsbWF0Y2gscHJlZml4U3RyPSIiLHN1ZmZpeFN0cj0iIjtpZih0d2l0dGVyTWF0Y2gmJiF0aGlzLnR3aXR0ZXJ8fGVtYWlsQWRkcmVzc01hdGNoJiYhdGhpcy5lbWFpbHx8dXJsTWF0Y2gmJiF0aGlzLnVybHN8fCF0aGlzLm1hdGNoVmFsaWRhdG9yLmlzVmFsaWRNYXRjaCh1cmxNYXRjaCxwcm90b2NvbFVybE1hdGNoLHByb3RvY29sUmVsYXRpdmVNYXRjaCkpe3JldHVybiBudWxsfWlmKHRoaXMubWF0Y2hIYXNVbmJhbGFuY2VkQ2xvc2luZ1BhcmVuKG1hdGNoU3RyKSl7bWF0Y2hTdHI9bWF0Y2hTdHIuc3Vic3RyKDAsbWF0Y2hTdHIubGVuZ3RoLTEpO3N1ZmZpeFN0cj0iKSJ9aWYoZW1haWxBZGRyZXNzTWF0Y2gpe21hdGNoPW5ldyBBdXRvbGlua2VyLm1hdGNoLkVtYWlsKHttYXRjaGVkVGV4dDptYXRjaFN0cixlbWFpbDplbWFpbEFkZHJlc3NNYXRjaH0pfWVsc2UgaWYodHdpdHRlck1hdGNoKXtpZih0d2l0dGVySGFuZGxlUHJlZml4V2hpdGVzcGFjZUNoYXIpe3ByZWZpeFN0cj10d2l0dGVySGFuZGxlUHJlZml4V2hpdGVzcGFjZUNoYXI7bWF0Y2hTdHI9bWF0Y2hTdHIuc2xpY2UoMSl9bWF0Y2g9bmV3IEF1dG9saW5rZXIubWF0Y2guVHdpdHRlcih7bWF0Y2hlZFRleHQ6bWF0Y2hTdHIsdHdpdHRlckhhbmRsZTp0d2l0dGVySGFuZGxlfSl9ZWxzZXtpZihwcm90b2NvbFJlbGF0aXZlTWF0Y2gpe3ZhciBjaGFyQmVmb3JlTWF0Y2g9cHJvdG9jb2xSZWxhdGl2ZU1hdGNoLm1hdGNoKHRoaXMuY2hhckJlZm9yZVByb3RvY29sUmVsTWF0Y2hSZWdleClbMV18fCIiO2lmKGNoYXJCZWZvcmVNYXRjaCl7cHJlZml4U3RyPWNoYXJCZWZvcmVNYXRjaDttYXRjaFN0cj1tYXRjaFN0ci5zbGljZSgxKX19bWF0Y2g9bmV3IEF1dG9saW5rZXIubWF0Y2guVXJsKHttYXRjaGVkVGV4dDptYXRjaFN0cix1cmw6bWF0Y2hTdHIscHJvdG9jb2xVcmxNYXRjaDohIXByb3RvY29sVXJsTWF0Y2gscHJvdG9jb2xSZWxhdGl2ZU1hdGNoOiEhcHJvdG9jb2xSZWxhdGl2ZU1hdGNoLHN0cmlwUHJlZml4OnRoaXMuc3RyaXBQcmVmaXh9KX1yZXR1cm57cHJlZml4U3RyOnByZWZpeFN0cixzdWZmaXhTdHI6c3VmZml4U3RyLG1hdGNoOm1hdGNofX0sbWF0Y2hIYXNVbmJhbGFuY2VkQ2xvc2luZ1BhcmVuOmZ1bmN0aW9uKG1hdGNoU3RyKXt2YXIgbGFzdENoYXI9bWF0Y2hTdHIuY2hhckF0KG1hdGNoU3RyLmxlbmd0aC0xKTtpZihsYXN0Q2hhcj09PSIpIil7dmFyIG9wZW5QYXJlbnNNYXRjaD1tYXRjaFN0ci5tYXRjaCgvXCgvZyksY2xvc2VQYXJlbnNNYXRjaD1tYXRjaFN0ci5tYXRjaCgvXCkvZyksbnVtT3BlblBhcmVucz1vcGVuUGFyZW5zTWF0Y2gmJm9wZW5QYXJlbnNNYXRjaC5sZW5ndGh8fDAsbnVtQ2xvc2VQYXJlbnM9Y2xvc2VQYXJlbnNNYXRjaCYmY2xvc2VQYXJlbnNNYXRjaC5sZW5ndGh8fDA7aWYobnVtT3BlblBhcmVuczxudW1DbG9zZVBhcmVucyl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtBdXRvbGlua2VyLk1hdGNoVmFsaWRhdG9yPUF1dG9saW5rZXIuVXRpbC5leHRlbmQoT2JqZWN0LHtpbnZhbGlkUHJvdG9jb2xSZWxNYXRjaFJlZ2V4Oi9eW1x3XVwvXC8vLGhhc0Z1bGxQcm90b2NvbFJlZ2V4Oi9eW0EtWmEtel1bLS4rQS1aYS16MC05XSs6XC9cLy8sdXJpU2NoZW1lUmVnZXg6L15bQS1aYS16XVstLitBLVphLXowLTldKzovLGhhc1dvcmRDaGFyQWZ0ZXJQcm90b2NvbFJlZ2V4Oi86W15cc10qP1tBLVphLXpdLyxpc1ZhbGlkTWF0Y2g6ZnVuY3Rpb24odXJsTWF0Y2gscHJvdG9jb2xVcmxNYXRjaCxwcm90b2NvbFJlbGF0aXZlTWF0Y2gpe2lmKHByb3RvY29sVXJsTWF0Y2gmJiF0aGlzLmlzVmFsaWRVcmlTY2hlbWUocHJvdG9jb2xVcmxNYXRjaCl8fHRoaXMudXJsTWF0Y2hEb2VzTm90SGF2ZVByb3RvY29sT3JEb3QodXJsTWF0Y2gscHJvdG9jb2xVcmxNYXRjaCl8fHRoaXMudXJsTWF0Y2hEb2VzTm90SGF2ZUF0TGVhc3RPbmVXb3JkQ2hhcih1cmxNYXRjaCxwcm90b2NvbFVybE1hdGNoKXx8dGhpcy5pc0ludmFsaWRQcm90b2NvbFJlbGF0aXZlTWF0Y2gocHJvdG9jb2xSZWxhdGl2ZU1hdGNoKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxpc1ZhbGlkVXJpU2NoZW1lOmZ1bmN0aW9uKHVyaVNjaGVtZU1hdGNoKXt2YXIgdXJpU2NoZW1lPXVyaVNjaGVtZU1hdGNoLm1hdGNoKHRoaXMudXJpU2NoZW1lUmVnZXgpWzBdLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHVyaVNjaGVtZSE9PSJqYXZhc2NyaXB0OiImJnVyaVNjaGVtZSE9PSJ2YnNjcmlwdDoifSx1cmxNYXRjaERvZXNOb3RIYXZlUHJvdG9jb2xPckRvdDpmdW5jdGlvbih1cmxNYXRjaCxwcm90b2NvbFVybE1hdGNoKXtyZXR1cm4hIXVybE1hdGNoJiYoIXByb3RvY29sVXJsTWF0Y2h8fCF0aGlzLmhhc0Z1bGxQcm90b2NvbFJlZ2V4LnRlc3QocHJvdG9jb2xVcmxNYXRjaCkpJiZ1cmxNYXRjaC5pbmRleE9mKCIuIik9PT0tMX0sdXJsTWF0Y2hEb2VzTm90SGF2ZUF0TGVhc3RPbmVXb3JkQ2hhcjpmdW5jdGlvbih1cmxNYXRjaCxwcm90b2NvbFVybE1hdGNoKXtpZih1cmxNYXRjaCYmcHJvdG9jb2xVcmxNYXRjaCl7cmV0dXJuIXRoaXMuaGFzV29yZENoYXJBZnRlclByb3RvY29sUmVnZXgudGVzdCh1cmxNYXRjaCl9ZWxzZXtyZXR1cm4gZmFsc2V9fSxpc0ludmFsaWRQcm90b2NvbFJlbGF0aXZlTWF0Y2g6ZnVuY3Rpb24ocHJvdG9jb2xSZWxhdGl2ZU1hdGNoKXtyZXR1cm4hIXByb3RvY29sUmVsYXRpdmVNYXRjaCYmdGhpcy5pbnZhbGlkUHJvdG9jb2xSZWxNYXRjaFJlZ2V4LnRlc3QocHJvdG9jb2xSZWxhdGl2ZU1hdGNoKX19KTtBdXRvbGlua2VyLm1hdGNoLk1hdGNoPUF1dG9saW5rZXIuVXRpbC5leHRlbmQoT2JqZWN0LHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihjZmcpe0F1dG9saW5rZXIuVXRpbC5hc3NpZ24odGhpcyxjZmcpfSxnZXRUeXBlOkF1dG9saW5rZXIuVXRpbC5hYnN0cmFjdE1ldGhvZCxnZXRNYXRjaGVkVGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZWRUZXh0fSxnZXRBbmNob3JIcmVmOkF1dG9saW5rZXIuVXRpbC5hYnN0cmFjdE1ldGhvZCxnZXRBbmNob3JUZXh0OkF1dG9saW5rZXIuVXRpbC5hYnN0cmFjdE1ldGhvZH0pO0F1dG9saW5rZXIubWF0Y2guRW1haWw9QXV0b2xpbmtlci5VdGlsLmV4dGVuZChBdXRvbGlua2VyLm1hdGNoLk1hdGNoLHtnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuImVtYWlsIn0sZ2V0RW1haWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWFpbH0sZ2V0QW5jaG9ySHJlZjpmdW5jdGlvbigpe3JldHVybiJtYWlsdG86Iit0aGlzLmVtYWlsfSxnZXRBbmNob3JUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1haWx9fSk7QXV0b2xpbmtlci5tYXRjaC5Ud2l0dGVyPUF1dG9saW5rZXIuVXRpbC5leHRlbmQoQXV0b2xpbmtlci5tYXRjaC5NYXRjaCx7Z2V0VHlwZTpmdW5jdGlvbigpe3JldHVybiJ0d2l0dGVyIn0sZ2V0VHdpdHRlckhhbmRsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR3aXR0ZXJIYW5kbGV9LGdldEFuY2hvckhyZWY6ZnVuY3Rpb24oKXtyZXR1cm4iaHR0cHM6Ly90d2l0dGVyLmNvbS8iK3RoaXMudHdpdHRlckhhbmRsZX0sZ2V0QW5jaG9yVGV4dDpmdW5jdGlvbigpe3JldHVybiJAIit0aGlzLnR3aXR0ZXJIYW5kbGV9fSk7QXV0b2xpbmtlci5tYXRjaC5Vcmw9QXV0b2xpbmtlci5VdGlsLmV4dGVuZChBdXRvbGlua2VyLm1hdGNoLk1hdGNoLHt1cmxQcmVmaXhSZWdleDovXihodHRwcz86XC9cLyk/KHd3d1wuKT8vaSxwcm90b2NvbFJlbGF0aXZlUmVnZXg6L15cL1wvLyxwcm90b2NvbFByZXBlbmRlZDpmYWxzZSxnZXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuInVybCJ9LGdldFVybDpmdW5jdGlvbigpe3ZhciB1cmw9dGhpcy51cmw7aWYoIXRoaXMucHJvdG9jb2xSZWxhdGl2ZU1hdGNoJiYhdGhpcy5wcm90b2NvbFVybE1hdGNoJiYhdGhpcy5wcm90b2NvbFByZXBlbmRlZCl7dXJsPXRoaXMudXJsPSJodHRwOi8vIit1cmw7dGhpcy5wcm90b2NvbFByZXBlbmRlZD10cnVlfXJldHVybiB1cmx9LGdldEFuY2hvckhyZWY6ZnVuY3Rpb24oKXt2YXIgdXJsPXRoaXMuZ2V0VXJsKCk7cmV0dXJuIHVybC5yZXBsYWNlKC8mYW1wOy9nLCImIil9LGdldEFuY2hvclRleHQ6ZnVuY3Rpb24oKXt2YXIgYW5jaG9yVGV4dD10aGlzLmdldFVybCgpO2lmKHRoaXMucHJvdG9jb2xSZWxhdGl2ZU1hdGNoKXthbmNob3JUZXh0PXRoaXMuc3RyaXBQcm90b2NvbFJlbGF0aXZlUHJlZml4KGFuY2hvclRleHQpfWlmKHRoaXMuc3RyaXBQcmVmaXgpe2FuY2hvclRleHQ9dGhpcy5zdHJpcFVybFByZWZpeChhbmNob3JUZXh0KX1hbmNob3JUZXh0PXRoaXMucmVtb3ZlVHJhaWxpbmdTbGFzaChhbmNob3JUZXh0KTtyZXR1cm4gYW5jaG9yVGV4dH0sc3RyaXBVcmxQcmVmaXg6ZnVuY3Rpb24odGV4dCl7cmV0dXJuIHRleHQucmVwbGFjZSh0aGlzLnVybFByZWZpeFJlZ2V4LCIiKX0sc3RyaXBQcm90b2NvbFJlbGF0aXZlUHJlZml4OmZ1bmN0aW9uKHRleHQpe3JldHVybiB0ZXh0LnJlcGxhY2UodGhpcy5wcm90b2NvbFJlbGF0aXZlUmVnZXgsIiIpfSxyZW1vdmVUcmFpbGluZ1NsYXNoOmZ1bmN0aW9uKGFuY2hvclRleHQpe2lmKGFuY2hvclRleHQuY2hhckF0KGFuY2hvclRleHQubGVuZ3RoLTEpPT09Ii8iKXthbmNob3JUZXh0PWFuY2hvclRleHQuc2xpY2UoMCwtMSl9cmV0dXJuIGFuY2hvclRleHR9fSk7cmV0dXJuIEF1dG9saW5rZXJ9KX0se31dLDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1yZXF1aXJlKCIuL2xpYi8iKX0seyIuL2xpYi8iOjE3fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPXtBYWN1dGU6IsOBIixhYWN1dGU6IsOhIixBYnJldmU6IsSCIixhYnJldmU6IsSDIixhYzoi4oi+IixhY2Q6IuKIvyIsYWNFOiLiiL7MsyIsQWNpcmM6IsOCIixhY2lyYzoiw6IiLGFjdXRlOiLCtCIsQWN5OiLQkCIsYWN5OiLQsCIsQUVsaWc6IsOGIixhZWxpZzoiw6YiLGFmOiLigaEiLEFmcjoi8J2UhCIsYWZyOiLwnZSeIixBZ3JhdmU6IsOAIixhZ3JhdmU6IsOgIixhbGVmc3ltOiLihLUiLGFsZXBoOiLihLUiLEFscGhhOiLOkSIsYWxwaGE6Is6xIixBbWFjcjoixIAiLGFtYWNyOiLEgSIsYW1hbGc6IuKovyIsQU1QOiImIixhbXA6IiYiLEFuZDoi4qmTIixhbmQ6IuKIpyIsYW5kYW5kOiLiqZUiLGFuZGQ6IuKpnCIsYW5kc2xvcGU6IuKpmCIsYW5kdjoi4qmaIixhbmc6IuKIoCIsYW5nZToi4qakIixhbmdsZToi4oigIixhbmdtc2Q6IuKIoSIsYW5nbXNkYWE6IuKmqCIsYW5nbXNkYWI6IuKmqSIsYW5nbXNkYWM6IuKmqiIsYW5nbXNkYWQ6IuKmqyIsYW5nbXNkYWU6IuKmrCIsYW5nbXNkYWY6IuKmrSIsYW5nbXNkYWc6IuKmriIsYW5nbXNkYWg6IuKmryIsYW5ncnQ6IuKInyIsYW5ncnR2Yjoi4oq+IixhbmdydHZiZDoi4qadIixhbmdzcGg6IuKIoiIsYW5nc3Q6IsOFIixhbmd6YXJyOiLijbwiLEFvZ29uOiLEhCIsYW9nb246IsSFIixBb3BmOiLwnZS4Iixhb3BmOiLwnZWSIixhcDoi4omIIixhcGFjaXI6IuKpryIsYXBFOiLiqbAiLGFwZToi4omKIixhcGlkOiLiiYsiLGFwb3M6IiciLEFwcGx5RnVuY3Rpb246IuKBoSIsYXBwcm94OiLiiYgiLGFwcHJveGVxOiLiiYoiLEFyaW5nOiLDhSIsYXJpbmc6IsOlIixBc2NyOiLwnZKcIixhc2NyOiLwnZK2IixBc3NpZ246IuKJlCIsYXN0OiIqIixhc3ltcDoi4omIIixhc3ltcGVxOiLiiY0iLEF0aWxkZToiw4MiLGF0aWxkZToiw6MiLEF1bWw6IsOEIixhdW1sOiLDpCIsYXdjb25pbnQ6IuKIsyIsYXdpbnQ6IuKokSIsYmFja2Nvbmc6IuKJjCIsYmFja2Vwc2lsb246Is+2IixiYWNrcHJpbWU6IuKAtSIsYmFja3NpbToi4oi9IixiYWNrc2ltZXE6IuKLjSIsQmFja3NsYXNoOiLiiJYiLEJhcnY6IuKrpyIsYmFydmVlOiLiir0iLEJhcndlZDoi4oyGIixiYXJ3ZWQ6IuKMhSIsYmFyd2VkZ2U6IuKMhSIsYmJyazoi4o61IixiYnJrdGJyazoi4o62IixiY29uZzoi4omMIixCY3k6ItCRIixiY3k6ItCxIixiZHF1bzoi4oCeIixiZWNhdXM6IuKItSIsQmVjYXVzZToi4oi1IixiZWNhdXNlOiLiiLUiLGJlbXB0eXY6IuKmsCIsYmVwc2k6Is+2IixiZXJub3U6IuKErCIsQmVybm91bGxpczoi4oSsIixCZXRhOiLOkiIsYmV0YToizrIiLGJldGg6IuKEtiIsYmV0d2Vlbjoi4omsIixCZnI6IvCdlIUiLGJmcjoi8J2UnyIsYmlnY2FwOiLii4IiLGJpZ2NpcmM6IuKXryIsYmlnY3VwOiLii4MiLGJpZ29kb3Q6IuKogCIsYmlnb3BsdXM6IuKogSIsYmlnb3RpbWVzOiLiqIIiLGJpZ3NxY3VwOiLiqIYiLGJpZ3N0YXI6IuKYhSIsYmlndHJpYW5nbGVkb3duOiLilr0iLGJpZ3RyaWFuZ2xldXA6IuKWsyIsYmlndXBsdXM6IuKohCIsYmlndmVlOiLii4EiLGJpZ3dlZGdlOiLii4AiLGJrYXJvdzoi4qSNIixibGFja2xvemVuZ2U6IuKnqyIsYmxhY2tzcXVhcmU6IuKWqiIsYmxhY2t0cmlhbmdsZToi4pa0IixibGFja3RyaWFuZ2xlZG93bjoi4pa+IixibGFja3RyaWFuZ2xlbGVmdDoi4peCIixibGFja3RyaWFuZ2xlcmlnaHQ6IuKWuCIsYmxhbms6IuKQoyIsYmxrMTI6IuKWkiIsYmxrMTQ6IuKWkSIsYmxrMzQ6IuKWkyIsYmxvY2s6IuKWiCIsYm5lOiI94oOlIixibmVxdWl2OiLiiaHig6UiLGJOb3Q6IuKrrSIsYm5vdDoi4oyQIixCb3BmOiLwnZS5Iixib3BmOiLwnZWTIixib3Q6IuKKpSIsYm90dG9tOiLiiqUiLGJvd3RpZToi4ouIIixib3hib3g6IuKniSIsYm94REw6IuKVlyIsYm94RGw6IuKVliIsYm94ZEw6IuKVlSIsYm94ZGw6IuKUkCIsYm94RFI6IuKVlCIsYm94RHI6IuKVkyIsYm94ZFI6IuKVkiIsYm94ZHI6IuKUjCIsYm94SDoi4pWQIixib3hoOiLilIAiLGJveEhEOiLilaYiLGJveEhkOiLilaQiLGJveGhEOiLilaUiLGJveGhkOiLilKwiLGJveEhVOiLilakiLGJveEh1OiLilaciLGJveGhVOiLilagiLGJveGh1OiLilLQiLGJveG1pbnVzOiLiip8iLGJveHBsdXM6IuKKniIsYm94dGltZXM6IuKKoCIsYm94VUw6IuKVnSIsYm94VWw6IuKVnCIsYm94dUw6IuKVmyIsYm94dWw6IuKUmCIsYm94VVI6IuKVmiIsYm94VXI6IuKVmSIsYm94dVI6IuKVmCIsYm94dXI6IuKUlCIsYm94Vjoi4pWRIixib3h2OiLilIIiLGJveFZIOiLilawiLGJveFZoOiLilasiLGJveHZIOiLilaoiLGJveHZoOiLilLwiLGJveFZMOiLilaMiLGJveFZsOiLilaIiLGJveHZMOiLilaEiLGJveHZsOiLilKQiLGJveFZSOiLilaAiLGJveFZyOiLilZ8iLGJveHZSOiLilZ4iLGJveHZyOiLilJwiLGJwcmltZToi4oC1IixCcmV2ZToiy5giLGJyZXZlOiLLmCIsYnJ2YmFyOiLCpiIsQnNjcjoi4oSsIixic2NyOiLwnZK3Iixic2VtaToi4oGPIixic2ltOiLiiL0iLGJzaW1lOiLii40iLGJzb2w6IlxcIixic29sYjoi4qeFIixic29saHN1Yjoi4p+IIixidWxsOiLigKIiLGJ1bGxldDoi4oCiIixidW1wOiLiiY4iLGJ1bXBFOiLiqq4iLGJ1bXBlOiLiiY8iLEJ1bXBlcToi4omOIixidW1wZXE6IuKJjyIsQ2FjdXRlOiLEhiIsY2FjdXRlOiLEhyIsQ2FwOiLii5IiLGNhcDoi4oipIixjYXBhbmQ6IuKphCIsY2FwYnJjdXA6IuKpiSIsY2FwY2FwOiLiqYsiLGNhcGN1cDoi4qmHIixjYXBkb3Q6IuKpgCIsQ2FwaXRhbERpZmZlcmVudGlhbEQ6IuKFhSIsY2Fwczoi4oip77iAIixjYXJldDoi4oGBIixjYXJvbjoiy4ciLENheWxleXM6IuKErSIsY2NhcHM6IuKpjSIsQ2Nhcm9uOiLEjCIsY2Nhcm9uOiLEjSIsQ2NlZGlsOiLDhyIsY2NlZGlsOiLDpyIsQ2NpcmM6IsSIIixjY2lyYzoixIkiLENjb25pbnQ6IuKIsCIsY2N1cHM6IuKpjCIsY2N1cHNzbToi4qmQIixDZG90OiLEiiIsY2RvdDoixIsiLGNlZGlsOiLCuCIsQ2VkaWxsYToiwrgiLGNlbXB0eXY6IuKmsiIsY2VudDoiwqIiLENlbnRlckRvdDoiwrciLGNlbnRlcmRvdDoiwrciLENmcjoi4oStIixjZnI6IvCdlKAiLENIY3k6ItCnIixjaGN5OiLRhyIsY2hlY2s6IuKckyIsY2hlY2ttYXJrOiLinJMiLENoaToizqciLGNoaToiz4ciLGNpcjoi4peLIixjaXJjOiLLhiIsY2lyY2VxOiLiiZciLGNpcmNsZWFycm93bGVmdDoi4oa6IixjaXJjbGVhcnJvd3JpZ2h0OiLihrsiLGNpcmNsZWRhc3Q6IuKKmyIsY2lyY2xlZGNpcmM6IuKKmiIsY2lyY2xlZGRhc2g6IuKKnSIsQ2lyY2xlRG90OiLiipkiLGNpcmNsZWRSOiLCriIsY2lyY2xlZFM6IuKTiCIsQ2lyY2xlTWludXM6IuKKliIsQ2lyY2xlUGx1czoi4oqVIixDaXJjbGVUaW1lczoi4oqXIixjaXJFOiLip4MiLGNpcmU6IuKJlyIsY2lyZm5pbnQ6IuKokCIsY2lybWlkOiLiq68iLGNpcnNjaXI6IuKngiIsQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiLiiLIiLENsb3NlQ3VybHlEb3VibGVRdW90ZToi4oCdIixDbG9zZUN1cmx5UXVvdGU6IuKAmSIsY2x1YnM6IuKZoyIsY2x1YnN1aXQ6IuKZoyIsQ29sb246IuKItyIsY29sb246IjoiLENvbG9uZToi4qm0Iixjb2xvbmU6IuKJlCIsY29sb25lcToi4omUIixjb21tYToiLCIsY29tbWF0OiJAIixjb21wOiLiiIEiLGNvbXBmbjoi4oiYIixjb21wbGVtZW50OiLiiIEiLGNvbXBsZXhlczoi4oSCIixjb25nOiLiiYUiLGNvbmdkb3Q6IuKprSIsQ29uZ3J1ZW50OiLiiaEiLENvbmludDoi4oivIixjb25pbnQ6IuKIriIsQ29udG91ckludGVncmFsOiLiiK4iLENvcGY6IuKEgiIsY29wZjoi8J2VlCIsY29wcm9kOiLiiJAiLENvcHJvZHVjdDoi4oiQIixDT1BZOiLCqSIsY29weToiwqkiLGNvcHlzcjoi4oSXIixDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiLiiLMiLGNyYXJyOiLihrUiLENyb3NzOiLiqK8iLGNyb3NzOiLinJciLENzY3I6IvCdkp4iLGNzY3I6IvCdkrgiLGNzdWI6IuKrjyIsY3N1YmU6IuKrkSIsY3N1cDoi4quQIixjc3VwZToi4quSIixjdGRvdDoi4ouvIixjdWRhcnJsOiLipLgiLGN1ZGFycnI6IuKktSIsY3VlcHI6IuKLniIsY3Vlc2M6IuKLnyIsY3VsYXJyOiLihrYiLGN1bGFycnA6IuKkvSIsQ3VwOiLii5MiLGN1cDoi4oiqIixjdXBicmNhcDoi4qmIIixDdXBDYXA6IuKJjSIsY3VwY2FwOiLiqYYiLGN1cGN1cDoi4qmKIixjdXBkb3Q6IuKKjSIsY3Vwb3I6IuKphSIsY3Vwczoi4oiq77iAIixjdXJhcnI6IuKGtyIsY3VyYXJybToi4qS8IixjdXJseWVxcHJlYzoi4oueIixjdXJseWVxc3VjYzoi4oufIixjdXJseXZlZToi4ouOIixjdXJseXdlZGdlOiLii48iLGN1cnJlbjoiwqQiLGN1cnZlYXJyb3dsZWZ0OiLihrYiLGN1cnZlYXJyb3dyaWdodDoi4oa3IixjdXZlZToi4ouOIixjdXdlZDoi4ouPIixjd2NvbmludDoi4oiyIixjd2ludDoi4oixIixjeWxjdHk6IuKMrSIsRGFnZ2VyOiLigKEiLGRhZ2dlcjoi4oCgIixkYWxldGg6IuKEuCIsRGFycjoi4oahIixkQXJyOiLih5MiLGRhcnI6IuKGkyIsZGFzaDoi4oCQIixEYXNodjoi4qukIixkYXNodjoi4oqjIixkYmthcm93OiLipI8iLGRibGFjOiLLnSIsRGNhcm9uOiLEjiIsZGNhcm9uOiLEjyIsRGN5OiLQlCIsZGN5OiLQtCIsREQ6IuKFhSIsZGQ6IuKFhiIsZGRhZ2dlcjoi4oChIixkZGFycjoi4oeKIixERG90cmFoZDoi4qSRIixkZG90c2VxOiLiqbciLGRlZzoiwrAiLERlbDoi4oiHIixEZWx0YToizpQiLGRlbHRhOiLOtCIsZGVtcHR5djoi4qaxIixkZmlzaHQ6IuKlvyIsRGZyOiLwnZSHIixkZnI6IvCdlKEiLGRIYXI6IuKlpSIsZGhhcmw6IuKHgyIsZGhhcnI6IuKHgiIsRGlhY3JpdGljYWxBY3V0ZToiwrQiLERpYWNyaXRpY2FsRG90OiLLmSIsRGlhY3JpdGljYWxEb3VibGVBY3V0ZToiy50iLERpYWNyaXRpY2FsR3JhdmU6ImAiLERpYWNyaXRpY2FsVGlsZGU6IsucIixkaWFtOiLii4QiLERpYW1vbmQ6IuKLhCIsZGlhbW9uZDoi4ouEIixkaWFtb25kc3VpdDoi4pmmIixkaWFtczoi4pmmIixkaWU6IsKoIixEaWZmZXJlbnRpYWxEOiLihYYiLGRpZ2FtbWE6Is+dIixkaXNpbjoi4ouyIixkaXY6IsO3IixkaXZpZGU6IsO3IixkaXZpZGVvbnRpbWVzOiLii4ciLGRpdm9ueDoi4ouHIixESmN5OiLQgiIsZGpjeToi0ZIiLGRsY29ybjoi4oyeIixkbGNyb3A6IuKMjSIsZG9sbGFyOiIkIixEb3BmOiLwnZS7Iixkb3BmOiLwnZWVIixEb3Q6IsKoIixkb3Q6IsuZIixEb3REb3Q6IuKDnCIsZG90ZXE6IuKJkCIsZG90ZXFkb3Q6IuKJkSIsRG90RXF1YWw6IuKJkCIsZG90bWludXM6IuKIuCIsZG90cGx1czoi4oiUIixkb3RzcXVhcmU6IuKKoSIsZG91YmxlYmFyd2VkZ2U6IuKMhiIsRG91YmxlQ29udG91ckludGVncmFsOiLiiK8iLERvdWJsZURvdDoiwqgiLERvdWJsZURvd25BcnJvdzoi4oeTIixEb3VibGVMZWZ0QXJyb3c6IuKHkCIsRG91YmxlTGVmdFJpZ2h0QXJyb3c6IuKHlCIsRG91YmxlTGVmdFRlZToi4qukIixEb3VibGVMb25nTGVmdEFycm93OiLin7giLERvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdzoi4p+6IixEb3VibGVMb25nUmlnaHRBcnJvdzoi4p+5IixEb3VibGVSaWdodEFycm93OiLih5IiLERvdWJsZVJpZ2h0VGVlOiLiiqgiLERvdWJsZVVwQXJyb3c6IuKHkSIsRG91YmxlVXBEb3duQXJyb3c6IuKHlSIsRG91YmxlVmVydGljYWxCYXI6IuKIpSIsRG93bkFycm93OiLihpMiLERvd25hcnJvdzoi4oeTIixkb3duYXJyb3c6IuKGkyIsRG93bkFycm93QmFyOiLipJMiLERvd25BcnJvd1VwQXJyb3c6IuKHtSIsRG93bkJyZXZlOiLMkSIsZG93bmRvd25hcnJvd3M6IuKHiiIsZG93bmhhcnBvb25sZWZ0OiLih4MiLGRvd25oYXJwb29ucmlnaHQ6IuKHgiIsRG93bkxlZnRSaWdodFZlY3Rvcjoi4qWQIixEb3duTGVmdFRlZVZlY3Rvcjoi4qWeIixEb3duTGVmdFZlY3Rvcjoi4oa9IixEb3duTGVmdFZlY3RvckJhcjoi4qWWIixEb3duUmlnaHRUZWVWZWN0b3I6IuKlnyIsRG93blJpZ2h0VmVjdG9yOiLih4EiLERvd25SaWdodFZlY3RvckJhcjoi4qWXIixEb3duVGVlOiLiiqQiLERvd25UZWVBcnJvdzoi4oanIixkcmJrYXJvdzoi4qSQIixkcmNvcm46IuKMnyIsZHJjcm9wOiLijIwiLERzY3I6IvCdkp8iLGRzY3I6IvCdkrkiLERTY3k6ItCFIixkc2N5OiLRlSIsZHNvbDoi4qe2IixEc3Ryb2s6IsSQIixkc3Ryb2s6IsSRIixkdGRvdDoi4ouxIixkdHJpOiLilr8iLGR0cmlmOiLilr4iLGR1YXJyOiLih7UiLGR1aGFyOiLipa8iLGR3YW5nbGU6IuKmpiIsRFpjeToi0I8iLGR6Y3k6ItGfIixkemlncmFycjoi4p+/IixFYWN1dGU6IsOJIixlYWN1dGU6IsOpIixlYXN0ZXI6IuKpriIsRWNhcm9uOiLEmiIsZWNhcm9uOiLEmyIsZWNpcjoi4omWIixFY2lyYzoiw4oiLGVjaXJjOiLDqiIsZWNvbG9uOiLiiZUiLEVjeToi0K0iLGVjeToi0Y0iLGVERG90OiLiqbciLEVkb3Q6IsSWIixlRG90OiLiiZEiLGVkb3Q6IsSXIixlZToi4oWHIixlZkRvdDoi4omSIixFZnI6IvCdlIgiLGVmcjoi8J2UoiIsZWc6IuKqmiIsRWdyYXZlOiLDiCIsZWdyYXZlOiLDqCIsZWdzOiLiqpYiLGVnc2RvdDoi4qqYIixlbDoi4qqZIixFbGVtZW50OiLiiIgiLGVsaW50ZXJzOiLij6ciLGVsbDoi4oSTIixlbHM6IuKqlSIsZWxzZG90OiLiqpciLEVtYWNyOiLEkiIsZW1hY3I6IsSTIixlbXB0eToi4oiFIixlbXB0eXNldDoi4oiFIixFbXB0eVNtYWxsU3F1YXJlOiLil7siLGVtcHR5djoi4oiFIixFbXB0eVZlcnlTbWFsbFNxdWFyZToi4parIixlbXNwOiLigIMiLGVtc3AxMzoi4oCEIixlbXNwMTQ6IuKAhSIsRU5HOiLFiiIsZW5nOiLFiyIsZW5zcDoi4oCCIixFb2dvbjoixJgiLGVvZ29uOiLEmSIsRW9wZjoi8J2UvCIsZW9wZjoi8J2VliIsZXBhcjoi4ouVIixlcGFyc2w6IuKnoyIsZXBsdXM6IuKpsSIsZXBzaToizrUiLEVwc2lsb246Is6VIixlcHNpbG9uOiLOtSIsZXBzaXY6Is+1IixlcWNpcmM6IuKJliIsZXFjb2xvbjoi4omVIixlcXNpbToi4omCIixlcXNsYW50Z3RyOiLiqpYiLGVxc2xhbnRsZXNzOiLiqpUiLEVxdWFsOiLiqbUiLGVxdWFsczoiPSIsRXF1YWxUaWxkZToi4omCIixlcXVlc3Q6IuKJnyIsRXF1aWxpYnJpdW06IuKHjCIsZXF1aXY6IuKJoSIsZXF1aXZERDoi4qm4IixlcXZwYXJzbDoi4qelIixlcmFycjoi4qWxIixlckRvdDoi4omTIixFc2NyOiLihLAiLGVzY3I6IuKEryIsZXNkb3Q6IuKJkCIsRXNpbToi4qmzIixlc2ltOiLiiYIiLEV0YToizpciLGV0YToizrciLEVUSDoiw5AiLGV0aDoiw7AiLEV1bWw6IsOLIixldW1sOiLDqyIsZXVybzoi4oKsIixleGNsOiIhIixleGlzdDoi4oiDIixFeGlzdHM6IuKIgyIsZXhwZWN0YXRpb246IuKEsCIsRXhwb25lbnRpYWxFOiLihYciLGV4cG9uZW50aWFsZToi4oWHIixmYWxsaW5nZG90c2VxOiLiiZIiLEZjeToi0KQiLGZjeToi0YQiLGZlbWFsZToi4pmAIixmZmlsaWc6Iu+sgyIsZmZsaWc6Iu+sgCIsZmZsbGlnOiLvrIQiLEZmcjoi8J2UiSIsZmZyOiLwnZSjIixmaWxpZzoi76yBIixGaWxsZWRTbWFsbFNxdWFyZToi4pe8IixGaWxsZWRWZXJ5U21hbGxTcXVhcmU6IuKWqiIsZmpsaWc6ImZqIixmbGF0OiLima0iLGZsbGlnOiLvrIIiLGZsdG5zOiLilrEiLGZub2Y6IsaSIixGb3BmOiLwnZS9Iixmb3BmOiLwnZWXIixGb3JBbGw6IuKIgCIsZm9yYWxsOiLiiIAiLGZvcms6IuKLlCIsZm9ya3Y6IuKrmSIsRm91cmllcnRyZjoi4oSxIixmcGFydGludDoi4qiNIixmcmFjMTI6IsK9IixmcmFjMTM6IuKFkyIsZnJhYzE0OiLCvCIsZnJhYzE1OiLihZUiLGZyYWMxNjoi4oWZIixmcmFjMTg6IuKFmyIsZnJhYzIzOiLihZQiLGZyYWMyNToi4oWWIixmcmFjMzQ6IsK+IixmcmFjMzU6IuKFlyIsZnJhYzM4OiLihZwiLGZyYWM0NToi4oWYIixmcmFjNTY6IuKFmiIsZnJhYzU4OiLihZ0iLGZyYWM3ODoi4oWeIixmcmFzbDoi4oGEIixmcm93bjoi4oyiIixGc2NyOiLihLEiLGZzY3I6IvCdkrsiLGdhY3V0ZToix7UiLEdhbW1hOiLOkyIsZ2FtbWE6Is6zIixHYW1tYWQ6Is+cIixnYW1tYWQ6Is+dIixnYXA6IuKqhiIsR2JyZXZlOiLEniIsZ2JyZXZlOiLEnyIsR2NlZGlsOiLEoiIsR2NpcmM6IsScIixnY2lyYzoixJ0iLEdjeToi0JMiLGdjeToi0LMiLEdkb3Q6IsSgIixnZG90OiLEoSIsZ0U6IuKJpyIsZ2U6IuKJpSIsZ0VsOiLiqowiLGdlbDoi4oubIixnZXE6IuKJpSIsZ2VxcToi4omnIixnZXFzbGFudDoi4qm+IixnZXM6IuKpviIsZ2VzY2M6IuKqqSIsZ2VzZG90OiLiqoAiLGdlc2RvdG86IuKqgiIsZ2VzZG90b2w6IuKqhCIsZ2VzbDoi4oub77iAIixnZXNsZXM6IuKqlCIsR2ZyOiLwnZSKIixnZnI6IvCdlKQiLEdnOiLii5kiLGdnOiLiiasiLGdnZzoi4ouZIixnaW1lbDoi4oS3IixHSmN5OiLQgyIsZ2pjeToi0ZMiLGdsOiLiibciLGdsYToi4qqlIixnbEU6IuKqkiIsZ2xqOiLiqqQiLGduYXA6IuKqiiIsZ25hcHByb3g6IuKqiiIsZ25FOiLiiakiLGduZToi4qqIIixnbmVxOiLiqogiLGduZXFxOiLiiakiLGduc2ltOiLii6ciLEdvcGY6IvCdlL4iLGdvcGY6IvCdlZgiLGdyYXZlOiJgIixHcmVhdGVyRXF1YWw6IuKJpSIsR3JlYXRlckVxdWFsTGVzczoi4oubIixHcmVhdGVyRnVsbEVxdWFsOiLiiaciLEdyZWF0ZXJHcmVhdGVyOiLiqqIiLEdyZWF0ZXJMZXNzOiLiibciLEdyZWF0ZXJTbGFudEVxdWFsOiLiqb4iLEdyZWF0ZXJUaWxkZToi4omzIixHc2NyOiLwnZKiIixnc2NyOiLihIoiLGdzaW06IuKJsyIsZ3NpbWU6IuKqjiIsZ3NpbWw6IuKqkCIsR1Q6Ij4iLEd0OiLiiasiLGd0OiI+IixndGNjOiLiqqciLGd0Y2lyOiLiqboiLGd0ZG90OiLii5ciLGd0bFBhcjoi4qaVIixndHF1ZXN0OiLiqbwiLGd0cmFwcHJveDoi4qqGIixndHJhcnI6IuKluCIsZ3RyZG90OiLii5ciLGd0cmVxbGVzczoi4oubIixndHJlcXFsZXNzOiLiqowiLGd0cmxlc3M6IuKJtyIsZ3Ryc2ltOiLiibMiLGd2ZXJ0bmVxcToi4omp77iAIixndm5FOiLiianvuIAiLEhhY2VrOiLLhyIsaGFpcnNwOiLigIoiLGhhbGY6IsK9IixoYW1pbHQ6IuKEiyIsSEFSRGN5OiLQqiIsaGFyZGN5OiLRiiIsaEFycjoi4oeUIixoYXJyOiLihpQiLGhhcnJjaXI6IuKliCIsaGFycnc6IuKGrSIsSGF0OiJeIixoYmFyOiLihI8iLEhjaXJjOiLEpCIsaGNpcmM6IsSlIixoZWFydHM6IuKZpSIsaGVhcnRzdWl0OiLimaUiLGhlbGxpcDoi4oCmIixoZXJjb246IuKKuSIsSGZyOiLihIwiLGhmcjoi8J2UpSIsSGlsYmVydFNwYWNlOiLihIsiLGhrc2Vhcm93OiLipKUiLGhrc3dhcm93OiLipKYiLGhvYXJyOiLih78iLGhvbXRodDoi4oi7Iixob29rbGVmdGFycm93OiLihqkiLGhvb2tyaWdodGFycm93OiLihqoiLEhvcGY6IuKEjSIsaG9wZjoi8J2VmSIsaG9yYmFyOiLigJUiLEhvcml6b250YWxMaW5lOiLilIAiLEhzY3I6IuKEiyIsaHNjcjoi8J2SvSIsaHNsYXNoOiLihI8iLEhzdHJvazoixKYiLGhzdHJvazoixKciLEh1bXBEb3duSHVtcDoi4omOIixIdW1wRXF1YWw6IuKJjyIsaHlidWxsOiLigYMiLGh5cGhlbjoi4oCQIixJYWN1dGU6IsONIixpYWN1dGU6IsOtIixpYzoi4oGjIixJY2lyYzoiw44iLGljaXJjOiLDriIsSWN5OiLQmCIsaWN5OiLQuCIsSWRvdDoixLAiLElFY3k6ItCVIixpZWN5OiLQtSIsaWV4Y2w6IsKhIixpZmY6IuKHlCIsSWZyOiLihJEiLGlmcjoi8J2UpiIsSWdyYXZlOiLDjCIsaWdyYXZlOiLDrCIsaWk6IuKFiCIsaWlpaW50OiLiqIwiLGlpaW50OiLiiK0iLGlpbmZpbjoi4qecIixpaW90YToi4oSpIixJSmxpZzoixLIiLGlqbGlnOiLEsyIsSW06IuKEkSIsSW1hY3I6IsSqIixpbWFjcjoixKsiLGltYWdlOiLihJEiLEltYWdpbmFyeUk6IuKFiCIsaW1hZ2xpbmU6IuKEkCIsaW1hZ3BhcnQ6IuKEkSIsaW1hdGg6IsSxIixpbW9mOiLiirciLGltcGVkOiLGtSIsSW1wbGllczoi4oeSIixpbjoi4oiIIixpbmNhcmU6IuKEhSIsaW5maW46IuKIniIsaW5maW50aWU6IuKnnSIsaW5vZG90OiLEsSIsSW50OiLiiKwiLGludDoi4oirIixpbnRjYWw6IuKKuiIsaW50ZWdlcnM6IuKEpCIsSW50ZWdyYWw6IuKIqyIsaW50ZXJjYWw6IuKKuiIsSW50ZXJzZWN0aW9uOiLii4IiLGludGxhcmhrOiLiqJciLGludHByb2Q6IuKovCIsSW52aXNpYmxlQ29tbWE6IuKBoyIsSW52aXNpYmxlVGltZXM6IuKBoiIsSU9jeToi0IEiLGlvY3k6ItGRIixJb2dvbjoixK4iLGlvZ29uOiLEryIsSW9wZjoi8J2VgCIsaW9wZjoi8J2VmiIsSW90YToizpkiLGlvdGE6Is65IixpcHJvZDoi4qi8IixpcXVlc3Q6IsK/IixJc2NyOiLihJAiLGlzY3I6IvCdkr4iLGlzaW46IuKIiCIsaXNpbmRvdDoi4ou1Iixpc2luRToi4ou5Iixpc2luczoi4ou0Iixpc2luc3Y6IuKLsyIsaXNpbnY6IuKIiCIsaXQ6IuKBoiIsSXRpbGRlOiLEqCIsaXRpbGRlOiLEqSIsSXVrY3k6ItCGIixpdWtjeToi0ZYiLEl1bWw6IsOPIixpdW1sOiLDryIsSmNpcmM6IsS0IixqY2lyYzoixLUiLEpjeToi0JkiLGpjeToi0LkiLEpmcjoi8J2UjSIsamZyOiLwnZSnIixqbWF0aDoiyLciLEpvcGY6IvCdlYEiLGpvcGY6IvCdlZsiLEpzY3I6IvCdkqUiLGpzY3I6IvCdkr8iLEpzZXJjeToi0IgiLGpzZXJjeToi0ZgiLEp1a2N5OiLQhCIsanVrY3k6ItGUIixLYXBwYToizpoiLGthcHBhOiLOuiIsa2FwcGF2OiLPsCIsS2NlZGlsOiLEtiIsa2NlZGlsOiLEtyIsS2N5OiLQmiIsa2N5OiLQuiIsS2ZyOiLwnZSOIixrZnI6IvCdlKgiLGtncmVlbjoixLgiLEtIY3k6ItClIixraGN5OiLRhSIsS0pjeToi0IwiLGtqY3k6ItGcIixLb3BmOiLwnZWCIixrb3BmOiLwnZWcIixLc2NyOiLwnZKmIixrc2NyOiLwnZOAIixsQWFycjoi4oeaIixMYWN1dGU6IsS5IixsYWN1dGU6IsS6IixsYWVtcHR5djoi4qa0IixsYWdyYW46IuKEkiIsTGFtYmRhOiLOmyIsbGFtYmRhOiLOuyIsTGFuZzoi4p+qIixsYW5nOiLin6giLGxhbmdkOiLippEiLGxhbmdsZToi4p+oIixsYXA6IuKqhSIsTGFwbGFjZXRyZjoi4oSSIixsYXF1bzoiwqsiLExhcnI6IuKGniIsbEFycjoi4oeQIixsYXJyOiLihpAiLGxhcnJiOiLih6QiLGxhcnJiZnM6IuKknyIsbGFycmZzOiLipJ0iLGxhcnJoazoi4oapIixsYXJybHA6IuKGqyIsbGFycnBsOiLipLkiLGxhcnJzaW06IuKlsyIsbGFycnRsOiLihqIiLGxhdDoi4qqrIixsQXRhaWw6IuKkmyIsbGF0YWlsOiLipJkiLGxhdGU6IuKqrSIsbGF0ZXM6IuKqre+4gCIsbEJhcnI6IuKkjiIsbGJhcnI6IuKkjCIsbGJicms6IuKdsiIsbGJyYWNlOiJ7IixsYnJhY2s6IlsiLGxicmtlOiLiposiLGxicmtzbGQ6IuKmjyIsbGJya3NsdToi4qaNIixMY2Fyb246IsS9IixsY2Fyb246IsS+IixMY2VkaWw6IsS7IixsY2VkaWw6IsS8IixsY2VpbDoi4oyIIixsY3ViOiJ7IixMY3k6ItCbIixsY3k6ItC7IixsZGNhOiLipLYiLGxkcXVvOiLigJwiLGxkcXVvcjoi4oCeIixsZHJkaGFyOiLipaciLGxkcnVzaGFyOiLipYsiLGxkc2g6IuKGsiIsbEU6IuKJpiIsbGU6IuKJpCIsTGVmdEFuZ2xlQnJhY2tldDoi4p+oIixMZWZ0QXJyb3c6IuKGkCIsTGVmdGFycm93OiLih5AiLGxlZnRhcnJvdzoi4oaQIixMZWZ0QXJyb3dCYXI6IuKHpCIsTGVmdEFycm93UmlnaHRBcnJvdzoi4oeGIixsZWZ0YXJyb3d0YWlsOiLihqIiLExlZnRDZWlsaW5nOiLijIgiLExlZnREb3VibGVCcmFja2V0OiLin6YiLExlZnREb3duVGVlVmVjdG9yOiLipaEiLExlZnREb3duVmVjdG9yOiLih4MiLExlZnREb3duVmVjdG9yQmFyOiLipZkiLExlZnRGbG9vcjoi4oyKIixsZWZ0aGFycG9vbmRvd246IuKGvSIsbGVmdGhhcnBvb251cDoi4oa8IixsZWZ0bGVmdGFycm93czoi4oeHIixMZWZ0UmlnaHRBcnJvdzoi4oaUIixMZWZ0cmlnaHRhcnJvdzoi4oeUIixsZWZ0cmlnaHRhcnJvdzoi4oaUIixsZWZ0cmlnaHRhcnJvd3M6IuKHhiIsbGVmdHJpZ2h0aGFycG9vbnM6IuKHiyIsbGVmdHJpZ2h0c3F1aWdhcnJvdzoi4oatIixMZWZ0UmlnaHRWZWN0b3I6IuKljiIsTGVmdFRlZToi4oqjIixMZWZ0VGVlQXJyb3c6IuKGpCIsTGVmdFRlZVZlY3Rvcjoi4qWaIixsZWZ0dGhyZWV0aW1lczoi4ouLIixMZWZ0VHJpYW5nbGU6IuKKsiIsTGVmdFRyaWFuZ2xlQmFyOiLip48iLExlZnRUcmlhbmdsZUVxdWFsOiLiirQiLExlZnRVcERvd25WZWN0b3I6IuKlkSIsTGVmdFVwVGVlVmVjdG9yOiLipaAiLExlZnRVcFZlY3Rvcjoi4oa/IixMZWZ0VXBWZWN0b3JCYXI6IuKlmCIsTGVmdFZlY3Rvcjoi4oa8IixMZWZ0VmVjdG9yQmFyOiLipZIiLGxFZzoi4qqLIixsZWc6IuKLmiIsbGVxOiLiiaQiLGxlcXE6IuKJpiIsbGVxc2xhbnQ6IuKpvSIsbGVzOiLiqb0iLGxlc2NjOiLiqqgiLGxlc2RvdDoi4qm/IixsZXNkb3RvOiLiqoEiLGxlc2RvdG9yOiLiqoMiLGxlc2c6IuKLmu+4gCIsbGVzZ2VzOiLiqpMiLGxlc3NhcHByb3g6IuKqhSIsbGVzc2RvdDoi4ouWIixsZXNzZXFndHI6IuKLmiIsbGVzc2VxcWd0cjoi4qqLIixMZXNzRXF1YWxHcmVhdGVyOiLii5oiLExlc3NGdWxsRXF1YWw6IuKJpiIsTGVzc0dyZWF0ZXI6IuKJtiIsbGVzc2d0cjoi4om2IixMZXNzTGVzczoi4qqhIixsZXNzc2ltOiLiibIiLExlc3NTbGFudEVxdWFsOiLiqb0iLExlc3NUaWxkZToi4omyIixsZmlzaHQ6IuKlvCIsbGZsb29yOiLijIoiLExmcjoi8J2UjyIsbGZyOiLwnZSpIixsZzoi4om2IixsZ0U6IuKqkSIsbEhhcjoi4qWiIixsaGFyZDoi4oa9IixsaGFydToi4oa8IixsaGFydWw6IuKlqiIsbGhibGs6IuKWhCIsTEpjeToi0IkiLGxqY3k6ItGZIixMbDoi4ouYIixsbDoi4omqIixsbGFycjoi4oeHIixsbGNvcm5lcjoi4oyeIixMbGVmdGFycm93OiLih5oiLGxsaGFyZDoi4qWrIixsbHRyaToi4pe6IixMbWlkb3Q6IsS/IixsbWlkb3Q6IsWAIixsbW91c3Q6IuKOsCIsbG1vdXN0YWNoZToi4o6wIixsbmFwOiLiqokiLGxuYXBwcm94OiLiqokiLGxuRToi4omoIixsbmU6IuKqhyIsbG5lcToi4qqHIixsbmVxcToi4omoIixsbnNpbToi4oumIixsb2FuZzoi4p+sIixsb2Fycjoi4oe9Iixsb2Jyazoi4p+mIixMb25nTGVmdEFycm93OiLin7UiLExvbmdsZWZ0YXJyb3c6IuKfuCIsbG9uZ2xlZnRhcnJvdzoi4p+1IixMb25nTGVmdFJpZ2h0QXJyb3c6IuKftyIsTG9uZ2xlZnRyaWdodGFycm93OiLin7oiLGxvbmdsZWZ0cmlnaHRhcnJvdzoi4p+3Iixsb25nbWFwc3RvOiLin7wiLExvbmdSaWdodEFycm93OiLin7YiLExvbmdyaWdodGFycm93OiLin7kiLGxvbmdyaWdodGFycm93OiLin7YiLGxvb3BhcnJvd2xlZnQ6IuKGqyIsbG9vcGFycm93cmlnaHQ6IuKGrCIsbG9wYXI6IuKmhSIsTG9wZjoi8J2VgyIsbG9wZjoi8J2VnSIsbG9wbHVzOiLiqK0iLGxvdGltZXM6IuKotCIsbG93YXN0OiLiiJciLGxvd2JhcjoiXyIsTG93ZXJMZWZ0QXJyb3c6IuKGmSIsTG93ZXJSaWdodEFycm93OiLihpgiLGxvejoi4peKIixsb3plbmdlOiLil4oiLGxvemY6IuKnqyIsbHBhcjoiKCIsbHBhcmx0OiLippMiLGxyYXJyOiLih4YiLGxyY29ybmVyOiLijJ8iLGxyaGFyOiLih4siLGxyaGFyZDoi4qWtIixscm06IuKAjiIsbHJ0cmk6IuKKvyIsbHNhcXVvOiLigLkiLExzY3I6IuKEkiIsbHNjcjoi8J2TgSIsTHNoOiLihrAiLGxzaDoi4oawIixsc2ltOiLiibIiLGxzaW1lOiLiqo0iLGxzaW1nOiLiqo8iLGxzcWI6IlsiLGxzcXVvOiLigJgiLGxzcXVvcjoi4oCaIixMc3Ryb2s6IsWBIixsc3Ryb2s6IsWCIixMVDoiPCIsTHQ6IuKJqiIsbHQ6IjwiLGx0Y2M6IuKqpiIsbHRjaXI6IuKpuSIsbHRkb3Q6IuKLliIsbHRocmVlOiLii4siLGx0aW1lczoi4ouJIixsdGxhcnI6IuKltiIsbHRxdWVzdDoi4qm7IixsdHJpOiLil4MiLGx0cmllOiLiirQiLGx0cmlmOiLil4IiLGx0clBhcjoi4qaWIixsdXJkc2hhcjoi4qWKIixsdXJ1aGFyOiLipaYiLGx2ZXJ0bmVxcToi4omo77iAIixsdm5FOiLiiajvuIAiLG1hY3I6IsKvIixtYWxlOiLimYIiLG1hbHQ6IuKcoCIsbWFsdGVzZToi4pygIixNYXA6IuKkhSIsbWFwOiLihqYiLG1hcHN0bzoi4oamIixtYXBzdG9kb3duOiLihqciLG1hcHN0b2xlZnQ6IuKGpCIsbWFwc3RvdXA6IuKGpSIsbWFya2VyOiLilq4iLG1jb21tYToi4qipIixNY3k6ItCcIixtY3k6ItC8IixtZGFzaDoi4oCUIixtRERvdDoi4oi6IixtZWFzdXJlZGFuZ2xlOiLiiKEiLE1lZGl1bVNwYWNlOiLigZ8iLE1lbGxpbnRyZjoi4oSzIixNZnI6IvCdlJAiLG1mcjoi8J2UqiIsbWhvOiLihKciLG1pY3JvOiLCtSIsbWlkOiLiiKMiLG1pZGFzdDoiKiIsbWlkY2lyOiLiq7AiLG1pZGRvdDoiwrciLG1pbnVzOiLiiJIiLG1pbnVzYjoi4oqfIixtaW51c2Q6IuKIuCIsbWludXNkdToi4qiqIixNaW51c1BsdXM6IuKIkyIsbWxjcDoi4qubIixtbGRyOiLigKYiLG1ucGx1czoi4oiTIixtb2RlbHM6IuKKpyIsTW9wZjoi8J2VhCIsbW9wZjoi8J2VniIsbXA6IuKIkyIsTXNjcjoi4oSzIixtc2NyOiLwnZOCIixtc3Rwb3M6IuKIviIsTXU6Is6cIixtdToizrwiLG11bHRpbWFwOiLiirgiLG11bWFwOiLiirgiLG5hYmxhOiLiiIciLE5hY3V0ZToixYMiLG5hY3V0ZToixYQiLG5hbmc6IuKIoOKDkiIsbmFwOiLiiYkiLG5hcEU6IuKpsMy4IixuYXBpZDoi4omLzLgiLG5hcG9zOiLFiSIsbmFwcHJveDoi4omJIixuYXR1cjoi4pmuIixuYXR1cmFsOiLima4iLG5hdHVyYWxzOiLihJUiLG5ic3A6IsKgIixuYnVtcDoi4omOzLgiLG5idW1wZToi4omPzLgiLG5jYXA6IuKpgyIsTmNhcm9uOiLFhyIsbmNhcm9uOiLFiCIsTmNlZGlsOiLFhSIsbmNlZGlsOiLFhiIsbmNvbmc6IuKJhyIsbmNvbmdkb3Q6IuKprcy4IixuY3VwOiLiqYIiLE5jeToi0J0iLG5jeToi0L0iLG5kYXNoOiLigJMiLG5lOiLiiaAiLG5lYXJoazoi4qSkIixuZUFycjoi4oeXIixuZWFycjoi4oaXIiwKbmVhcnJvdzoi4oaXIixuZWRvdDoi4omQzLgiLE5lZ2F0aXZlTWVkaXVtU3BhY2U6IuKAiyIsTmVnYXRpdmVUaGlja1NwYWNlOiLigIsiLE5lZ2F0aXZlVGhpblNwYWNlOiLigIsiLE5lZ2F0aXZlVmVyeVRoaW5TcGFjZToi4oCLIixuZXF1aXY6IuKJoiIsbmVzZWFyOiLipKgiLG5lc2ltOiLiiYLMuCIsTmVzdGVkR3JlYXRlckdyZWF0ZXI6IuKJqyIsTmVzdGVkTGVzc0xlc3M6IuKJqiIsTmV3TGluZToiXG4iLG5leGlzdDoi4oiEIixuZXhpc3RzOiLiiIQiLE5mcjoi8J2UkSIsbmZyOiLwnZSrIixuZ0U6IuKJp8y4IixuZ2U6IuKJsSIsbmdlcToi4omxIixuZ2VxcToi4omnzLgiLG5nZXFzbGFudDoi4qm+zLgiLG5nZXM6IuKpvsy4IixuR2c6IuKLmcy4IixuZ3NpbToi4om1IixuR3Q6IuKJq+KDkiIsbmd0OiLiia8iLG5ndHI6IuKJryIsbkd0djoi4omrzLgiLG5oQXJyOiLih44iLG5oYXJyOiLihq4iLG5ocGFyOiLiq7IiLG5pOiLiiIsiLG5pczoi4ou8IixuaXNkOiLii7oiLG5pdjoi4oiLIixOSmN5OiLQiiIsbmpjeToi0ZoiLG5sQXJyOiLih40iLG5sYXJyOiLihpoiLG5sZHI6IuKApSIsbmxFOiLiiabMuCIsbmxlOiLiibAiLG5MZWZ0YXJyb3c6IuKHjSIsbmxlZnRhcnJvdzoi4oaaIixuTGVmdHJpZ2h0YXJyb3c6IuKHjiIsbmxlZnRyaWdodGFycm93OiLihq4iLG5sZXE6IuKJsCIsbmxlcXE6IuKJpsy4IixubGVxc2xhbnQ6IuKpvcy4IixubGVzOiLiqb3MuCIsbmxlc3M6IuKJriIsbkxsOiLii5jMuCIsbmxzaW06IuKJtCIsbkx0OiLiiarig5IiLG5sdDoi4omuIixubHRyaToi4ouqIixubHRyaWU6IuKLrCIsbkx0djoi4omqzLgiLG5taWQ6IuKIpCIsTm9CcmVhazoi4oGgIixOb25CcmVha2luZ1NwYWNlOiLCoCIsTm9wZjoi4oSVIixub3BmOiLwnZWfIixOb3Q6IuKrrCIsbm90OiLCrCIsTm90Q29uZ3J1ZW50OiLiiaIiLE5vdEN1cENhcDoi4omtIixOb3REb3VibGVWZXJ0aWNhbEJhcjoi4oimIixOb3RFbGVtZW50OiLiiIkiLE5vdEVxdWFsOiLiiaAiLE5vdEVxdWFsVGlsZGU6IuKJgsy4IixOb3RFeGlzdHM6IuKIhCIsTm90R3JlYXRlcjoi4omvIixOb3RHcmVhdGVyRXF1YWw6IuKJsSIsTm90R3JlYXRlckZ1bGxFcXVhbDoi4omnzLgiLE5vdEdyZWF0ZXJHcmVhdGVyOiLiiavMuCIsTm90R3JlYXRlckxlc3M6IuKJuSIsTm90R3JlYXRlclNsYW50RXF1YWw6IuKpvsy4IixOb3RHcmVhdGVyVGlsZGU6IuKJtSIsTm90SHVtcERvd25IdW1wOiLiiY7MuCIsTm90SHVtcEVxdWFsOiLiiY/MuCIsbm90aW46IuKIiSIsbm90aW5kb3Q6IuKLtcy4Iixub3RpbkU6IuKLucy4Iixub3RpbnZhOiLiiIkiLG5vdGludmI6IuKLtyIsbm90aW52Yzoi4ou2IixOb3RMZWZ0VHJpYW5nbGU6IuKLqiIsTm90TGVmdFRyaWFuZ2xlQmFyOiLip4/MuCIsTm90TGVmdFRyaWFuZ2xlRXF1YWw6IuKLrCIsTm90TGVzczoi4omuIixOb3RMZXNzRXF1YWw6IuKJsCIsTm90TGVzc0dyZWF0ZXI6IuKJuCIsTm90TGVzc0xlc3M6IuKJqsy4IixOb3RMZXNzU2xhbnRFcXVhbDoi4qm9zLgiLE5vdExlc3NUaWxkZToi4om0IixOb3ROZXN0ZWRHcmVhdGVyR3JlYXRlcjoi4qqizLgiLE5vdE5lc3RlZExlc3NMZXNzOiLiqqHMuCIsbm90bmk6IuKIjCIsbm90bml2YToi4oiMIixub3RuaXZiOiLii74iLG5vdG5pdmM6IuKLvSIsTm90UHJlY2VkZXM6IuKKgCIsTm90UHJlY2VkZXNFcXVhbDoi4qqvzLgiLE5vdFByZWNlZGVzU2xhbnRFcXVhbDoi4ougIixOb3RSZXZlcnNlRWxlbWVudDoi4oiMIixOb3RSaWdodFRyaWFuZ2xlOiLii6siLE5vdFJpZ2h0VHJpYW5nbGVCYXI6IuKnkMy4IixOb3RSaWdodFRyaWFuZ2xlRXF1YWw6IuKLrSIsTm90U3F1YXJlU3Vic2V0OiLiio/MuCIsTm90U3F1YXJlU3Vic2V0RXF1YWw6IuKLoiIsTm90U3F1YXJlU3VwZXJzZXQ6IuKKkMy4IixOb3RTcXVhcmVTdXBlcnNldEVxdWFsOiLii6MiLE5vdFN1YnNldDoi4oqC4oOSIixOb3RTdWJzZXRFcXVhbDoi4oqIIixOb3RTdWNjZWVkczoi4oqBIixOb3RTdWNjZWVkc0VxdWFsOiLiqrDMuCIsTm90U3VjY2VlZHNTbGFudEVxdWFsOiLii6EiLE5vdFN1Y2NlZWRzVGlsZGU6IuKJv8y4IixOb3RTdXBlcnNldDoi4oqD4oOSIixOb3RTdXBlcnNldEVxdWFsOiLiiokiLE5vdFRpbGRlOiLiiYEiLE5vdFRpbGRlRXF1YWw6IuKJhCIsTm90VGlsZGVGdWxsRXF1YWw6IuKJhyIsTm90VGlsZGVUaWxkZToi4omJIixOb3RWZXJ0aWNhbEJhcjoi4oikIixucGFyOiLiiKYiLG5wYXJhbGxlbDoi4oimIixucGFyc2w6IuKrveKDpSIsbnBhcnQ6IuKIgsy4IixucG9saW50OiLiqJQiLG5wcjoi4oqAIixucHJjdWU6IuKLoCIsbnByZToi4qqvzLgiLG5wcmVjOiLiioAiLG5wcmVjZXE6IuKqr8y4IixuckFycjoi4oePIixucmFycjoi4oabIixucmFycmM6IuKks8y4IixucmFycnc6IuKGncy4IixuUmlnaHRhcnJvdzoi4oePIixucmlnaHRhcnJvdzoi4oabIixucnRyaToi4ourIixucnRyaWU6IuKLrSIsbnNjOiLiioEiLG5zY2N1ZToi4ouhIixuc2NlOiLiqrDMuCIsTnNjcjoi8J2SqSIsbnNjcjoi8J2TgyIsbnNob3J0bWlkOiLiiKQiLG5zaG9ydHBhcmFsbGVsOiLiiKYiLG5zaW06IuKJgSIsbnNpbWU6IuKJhCIsbnNpbWVxOiLiiYQiLG5zbWlkOiLiiKQiLG5zcGFyOiLiiKYiLG5zcXN1YmU6IuKLoiIsbnNxc3VwZToi4oujIixuc3ViOiLiioQiLG5zdWJFOiLiq4XMuCIsbnN1YmU6IuKKiCIsbnN1YnNldDoi4oqC4oOSIixuc3Vic2V0ZXE6IuKKiCIsbnN1YnNldGVxcToi4quFzLgiLG5zdWNjOiLiioEiLG5zdWNjZXE6IuKqsMy4Iixuc3VwOiLiioUiLG5zdXBFOiLiq4bMuCIsbnN1cGU6IuKKiSIsbnN1cHNldDoi4oqD4oOSIixuc3Vwc2V0ZXE6IuKKiSIsbnN1cHNldGVxcToi4quGzLgiLG50Z2w6IuKJuSIsTnRpbGRlOiLDkSIsbnRpbGRlOiLDsSIsbnRsZzoi4om4IixudHJpYW5nbGVsZWZ0OiLii6oiLG50cmlhbmdsZWxlZnRlcToi4ousIixudHJpYW5nbGVyaWdodDoi4ourIixudHJpYW5nbGVyaWdodGVxOiLii60iLE51OiLOnSIsbnU6Is69IixudW06IiMiLG51bWVybzoi4oSWIixudW1zcDoi4oCHIixudmFwOiLiiY3ig5IiLG5WRGFzaDoi4oqvIixuVmRhc2g6IuKKriIsbnZEYXNoOiLiiq0iLG52ZGFzaDoi4oqsIixudmdlOiLiiaXig5IiLG52Z3Q6Ij7ig5IiLG52SGFycjoi4qSEIixudmluZmluOiLip54iLG52bEFycjoi4qSCIixudmxlOiLiiaTig5IiLG52bHQ6Ijzig5IiLG52bHRyaWU6IuKKtOKDkiIsbnZyQXJyOiLipIMiLG52cnRyaWU6IuKKteKDkiIsbnZzaW06IuKIvOKDkiIsbndhcmhrOiLipKMiLG53QXJyOiLih5YiLG53YXJyOiLihpYiLG53YXJyb3c6IuKGliIsbnduZWFyOiLipKciLE9hY3V0ZToiw5MiLG9hY3V0ZToiw7MiLG9hc3Q6IuKKmyIsb2Npcjoi4oqaIixPY2lyYzoiw5QiLG9jaXJjOiLDtCIsT2N5OiLQniIsb2N5OiLQviIsb2Rhc2g6IuKKnSIsT2RibGFjOiLFkCIsb2RibGFjOiLFkSIsb2Rpdjoi4qi4IixvZG90OiLiipkiLG9kc29sZDoi4qa8IixPRWxpZzoixZIiLG9lbGlnOiLFkyIsb2ZjaXI6IuKmvyIsT2ZyOiLwnZSSIixvZnI6IvCdlKwiLG9nb246IsubIixPZ3JhdmU6IsOSIixvZ3JhdmU6IsOyIixvZ3Q6IuKngSIsb2hiYXI6IuKmtSIsb2htOiLOqSIsb2ludDoi4oiuIixvbGFycjoi4oa6IixvbGNpcjoi4qa+IixvbGNyb3NzOiLiprsiLG9saW5lOiLigL4iLG9sdDoi4qeAIixPbWFjcjoixYwiLG9tYWNyOiLFjSIsT21lZ2E6Is6pIixvbWVnYToiz4kiLE9taWNyb246Is6fIixvbWljcm9uOiLOvyIsb21pZDoi4qa2IixvbWludXM6IuKKliIsT29wZjoi8J2VhiIsb29wZjoi8J2VoCIsb3Bhcjoi4qa3IixPcGVuQ3VybHlEb3VibGVRdW90ZToi4oCcIixPcGVuQ3VybHlRdW90ZToi4oCYIixvcGVycDoi4qa5IixvcGx1czoi4oqVIixPcjoi4qmUIixvcjoi4oioIixvcmFycjoi4oa7IixvcmQ6IuKpnSIsb3JkZXI6IuKEtCIsb3JkZXJvZjoi4oS0IixvcmRmOiLCqiIsb3JkbToiwroiLG9yaWdvZjoi4oq2Iixvcm9yOiLiqZYiLG9yc2xvcGU6IuKplyIsb3J2OiLiqZsiLG9TOiLik4giLE9zY3I6IvCdkqoiLG9zY3I6IuKEtCIsT3NsYXNoOiLDmCIsb3NsYXNoOiLDuCIsb3NvbDoi4oqYIixPdGlsZGU6IsOVIixvdGlsZGU6IsO1IixPdGltZXM6IuKotyIsb3RpbWVzOiLiipciLG90aW1lc2FzOiLiqLYiLE91bWw6IsOWIixvdW1sOiLDtiIsb3ZiYXI6IuKMvSIsT3ZlckJhcjoi4oC+IixPdmVyQnJhY2U6IuKPniIsT3ZlckJyYWNrZXQ6IuKOtCIsT3ZlclBhcmVudGhlc2lzOiLij5wiLHBhcjoi4oilIixwYXJhOiLCtiIscGFyYWxsZWw6IuKIpSIscGFyc2ltOiLiq7MiLHBhcnNsOiLiq70iLHBhcnQ6IuKIgiIsUGFydGlhbEQ6IuKIgiIsUGN5OiLQnyIscGN5OiLQvyIscGVyY250OiIlIixwZXJpb2Q6Ii4iLHBlcm1pbDoi4oCwIixwZXJwOiLiiqUiLHBlcnRlbms6IuKAsSIsUGZyOiLwnZSTIixwZnI6IvCdlK0iLFBoaToizqYiLHBoaToiz4YiLHBoaXY6Is+VIixwaG1tYXQ6IuKEsyIscGhvbmU6IuKYjiIsUGk6Is6gIixwaToiz4AiLHBpdGNoZm9yazoi4ouUIixwaXY6Is+WIixwbGFuY2s6IuKEjyIscGxhbmNraDoi4oSOIixwbGFua3Y6IuKEjyIscGx1czoiKyIscGx1c2FjaXI6IuKooyIscGx1c2I6IuKKniIscGx1c2Npcjoi4qiiIixwbHVzZG86IuKIlCIscGx1c2R1OiLiqKUiLHBsdXNlOiLiqbIiLFBsdXNNaW51czoiwrEiLHBsdXNtbjoiwrEiLHBsdXNzaW06IuKopiIscGx1c3R3bzoi4qinIixwbToiwrEiLFBvaW5jYXJlcGxhbmU6IuKEjCIscG9pbnRpbnQ6IuKolSIsUG9wZjoi4oSZIixwb3BmOiLwnZWhIixwb3VuZDoiwqMiLFByOiLiqrsiLHByOiLiiboiLHByYXA6IuKqtyIscHJjdWU6IuKJvCIscHJFOiLiqrMiLHByZToi4qqvIixwcmVjOiLiiboiLHByZWNhcHByb3g6IuKqtyIscHJlY2N1cmx5ZXE6IuKJvCIsUHJlY2VkZXM6IuKJuiIsUHJlY2VkZXNFcXVhbDoi4qqvIixQcmVjZWRlc1NsYW50RXF1YWw6IuKJvCIsUHJlY2VkZXNUaWxkZToi4om+IixwcmVjZXE6IuKqryIscHJlY25hcHByb3g6IuKquSIscHJlY25lcXE6IuKqtSIscHJlY25zaW06IuKLqCIscHJlY3NpbToi4om+IixQcmltZToi4oCzIixwcmltZToi4oCyIixwcmltZXM6IuKEmSIscHJuYXA6IuKquSIscHJuRToi4qq1Iixwcm5zaW06IuKLqCIscHJvZDoi4oiPIixQcm9kdWN0OiLiiI8iLHByb2ZhbGFyOiLijK4iLHByb2ZsaW5lOiLijJIiLHByb2ZzdXJmOiLijJMiLHByb3A6IuKInSIsUHJvcG9ydGlvbjoi4oi3IixQcm9wb3J0aW9uYWw6IuKInSIscHJvcHRvOiLiiJ0iLHByc2ltOiLiib4iLHBydXJlbDoi4oqwIixQc2NyOiLwnZKrIixwc2NyOiLwnZOFIixQc2k6Is6oIixwc2k6Is+IIixwdW5jc3A6IuKAiCIsUWZyOiLwnZSUIixxZnI6IvCdlK4iLHFpbnQ6IuKojCIsUW9wZjoi4oSaIixxb3BmOiLwnZWiIixxcHJpbWU6IuKBlyIsUXNjcjoi8J2SrCIscXNjcjoi8J2ThiIscXVhdGVybmlvbnM6IuKEjSIscXVhdGludDoi4qiWIixxdWVzdDoiPyIscXVlc3RlcToi4omfIixRVU9UOiciJyxxdW90OiciJyxyQWFycjoi4oebIixyYWNlOiLiiL3MsSIsUmFjdXRlOiLFlCIscmFjdXRlOiLFlSIscmFkaWM6IuKImiIscmFlbXB0eXY6IuKmsyIsUmFuZzoi4p+rIixyYW5nOiLin6kiLHJhbmdkOiLippIiLHJhbmdlOiLipqUiLHJhbmdsZToi4p+pIixyYXF1bzoiwrsiLFJhcnI6IuKGoCIsckFycjoi4oeSIixyYXJyOiLihpIiLHJhcnJhcDoi4qW1IixyYXJyYjoi4oelIixyYXJyYmZzOiLipKAiLHJhcnJjOiLipLMiLHJhcnJmczoi4qSeIixyYXJyaGs6IuKGqiIscmFycmxwOiLihqwiLHJhcnJwbDoi4qWFIixyYXJyc2ltOiLipbQiLFJhcnJ0bDoi4qSWIixyYXJydGw6IuKGoyIscmFycnc6IuKGnSIsckF0YWlsOiLipJwiLHJhdGFpbDoi4qSaIixyYXRpbzoi4oi2IixyYXRpb25hbHM6IuKEmiIsUkJhcnI6IuKkkCIsckJhcnI6IuKkjyIscmJhcnI6IuKkjSIscmJicms6IuKdsyIscmJyYWNlOiJ9IixyYnJhY2s6Il0iLHJicmtlOiLipowiLHJicmtzbGQ6IuKmjiIscmJya3NsdToi4qaQIixSY2Fyb246IsWYIixyY2Fyb246IsWZIixSY2VkaWw6IsWWIixyY2VkaWw6IsWXIixyY2VpbDoi4oyJIixyY3ViOiJ9IixSY3k6ItCgIixyY3k6ItGAIixyZGNhOiLipLciLHJkbGRoYXI6IuKlqSIscmRxdW86IuKAnSIscmRxdW9yOiLigJ0iLHJkc2g6IuKGsyIsUmU6IuKEnCIscmVhbDoi4oScIixyZWFsaW5lOiLihJsiLHJlYWxwYXJ0OiLihJwiLHJlYWxzOiLihJ0iLHJlY3Q6IuKWrSIsUkVHOiLCriIscmVnOiLCriIsUmV2ZXJzZUVsZW1lbnQ6IuKIiyIsUmV2ZXJzZUVxdWlsaWJyaXVtOiLih4siLFJldmVyc2VVcEVxdWlsaWJyaXVtOiLipa8iLHJmaXNodDoi4qW9IixyZmxvb3I6IuKMiyIsUmZyOiLihJwiLHJmcjoi8J2UryIsckhhcjoi4qWkIixyaGFyZDoi4oeBIixyaGFydToi4oeAIixyaGFydWw6IuKlrCIsUmhvOiLOoSIscmhvOiLPgSIscmhvdjoiz7EiLFJpZ2h0QW5nbGVCcmFja2V0OiLin6kiLFJpZ2h0QXJyb3c6IuKGkiIsUmlnaHRhcnJvdzoi4oeSIixyaWdodGFycm93OiLihpIiLFJpZ2h0QXJyb3dCYXI6IuKHpSIsUmlnaHRBcnJvd0xlZnRBcnJvdzoi4oeEIixyaWdodGFycm93dGFpbDoi4oajIixSaWdodENlaWxpbmc6IuKMiSIsUmlnaHREb3VibGVCcmFja2V0OiLin6ciLFJpZ2h0RG93blRlZVZlY3Rvcjoi4qWdIixSaWdodERvd25WZWN0b3I6IuKHgiIsUmlnaHREb3duVmVjdG9yQmFyOiLipZUiLFJpZ2h0Rmxvb3I6IuKMiyIscmlnaHRoYXJwb29uZG93bjoi4oeBIixyaWdodGhhcnBvb251cDoi4oeAIixyaWdodGxlZnRhcnJvd3M6IuKHhCIscmlnaHRsZWZ0aGFycG9vbnM6IuKHjCIscmlnaHRyaWdodGFycm93czoi4oeJIixyaWdodHNxdWlnYXJyb3c6IuKGnSIsUmlnaHRUZWU6IuKKoiIsUmlnaHRUZWVBcnJvdzoi4oamIixSaWdodFRlZVZlY3Rvcjoi4qWbIixyaWdodHRocmVldGltZXM6IuKLjCIsUmlnaHRUcmlhbmdsZToi4oqzIixSaWdodFRyaWFuZ2xlQmFyOiLip5AiLFJpZ2h0VHJpYW5nbGVFcXVhbDoi4oq1IixSaWdodFVwRG93blZlY3Rvcjoi4qWPIixSaWdodFVwVGVlVmVjdG9yOiLipZwiLFJpZ2h0VXBWZWN0b3I6IuKGviIsUmlnaHRVcFZlY3RvckJhcjoi4qWUIixSaWdodFZlY3Rvcjoi4oeAIixSaWdodFZlY3RvckJhcjoi4qWTIixyaW5nOiLLmiIscmlzaW5nZG90c2VxOiLiiZMiLHJsYXJyOiLih4QiLHJsaGFyOiLih4wiLHJsbToi4oCPIixybW91c3Q6IuKOsSIscm1vdXN0YWNoZToi4o6xIixybm1pZDoi4quuIixyb2FuZzoi4p+tIixyb2Fycjoi4oe+Iixyb2Jyazoi4p+nIixyb3Bhcjoi4qaGIixSb3BmOiLihJ0iLHJvcGY6IvCdlaMiLHJvcGx1czoi4qiuIixyb3RpbWVzOiLiqLUiLFJvdW5kSW1wbGllczoi4qWwIixycGFyOiIpIixycGFyZ3Q6IuKmlCIscnBwb2xpbnQ6IuKokiIscnJhcnI6IuKHiSIsUnJpZ2h0YXJyb3c6IuKHmyIscnNhcXVvOiLigLoiLFJzY3I6IuKEmyIscnNjcjoi8J2ThyIsUnNoOiLihrEiLHJzaDoi4oaxIixyc3FiOiJdIixyc3F1bzoi4oCZIixyc3F1b3I6IuKAmSIscnRocmVlOiLii4wiLHJ0aW1lczoi4ouKIixydHJpOiLilrkiLHJ0cmllOiLiirUiLHJ0cmlmOiLilrgiLHJ0cmlsdHJpOiLip44iLFJ1bGVEZWxheWVkOiLip7QiLHJ1bHVoYXI6IuKlqCIscng6IuKEniIsU2FjdXRlOiLFmiIsc2FjdXRlOiLFmyIsc2JxdW86IuKAmiIsU2M6IuKqvCIsc2M6IuKJuyIsc2NhcDoi4qq4IixTY2Fyb246IsWgIixzY2Fyb246IsWhIixzY2N1ZToi4om9IixzY0U6IuKqtCIsc2NlOiLiqrAiLFNjZWRpbDoixZ4iLHNjZWRpbDoixZ8iLFNjaXJjOiLFnCIsc2NpcmM6IsWdIixzY25hcDoi4qq6IixzY25FOiLiqrYiLHNjbnNpbToi4oupIixzY3BvbGludDoi4qiTIixzY3NpbToi4om/IixTY3k6ItChIixzY3k6ItGBIixzZG90OiLii4UiLHNkb3RiOiLiiqEiLHNkb3RlOiLiqaYiLHNlYXJoazoi4qSlIixzZUFycjoi4oeYIixzZWFycjoi4oaYIixzZWFycm93OiLihpgiLHNlY3Q6IsKnIixzZW1pOiI7IixzZXN3YXI6IuKkqSIsc2V0bWludXM6IuKIliIsc2V0bW46IuKIliIsc2V4dDoi4py2IixTZnI6IvCdlJYiLHNmcjoi8J2UsCIsc2Zyb3duOiLijKIiLHNoYXJwOiLima8iLFNIQ0hjeToi0KkiLHNoY2hjeToi0YkiLFNIY3k6ItCoIixzaGN5OiLRiCIsU2hvcnREb3duQXJyb3c6IuKGkyIsU2hvcnRMZWZ0QXJyb3c6IuKGkCIsc2hvcnRtaWQ6IuKIoyIsc2hvcnRwYXJhbGxlbDoi4oilIixTaG9ydFJpZ2h0QXJyb3c6IuKGkiIsU2hvcnRVcEFycm93OiLihpEiLHNoeToiwq0iLFNpZ21hOiLOoyIsc2lnbWE6Is+DIixzaWdtYWY6Is+CIixzaWdtYXY6Is+CIixzaW06IuKIvCIsc2ltZG90OiLiqaoiLHNpbWU6IuKJgyIsc2ltZXE6IuKJgyIsc2ltZzoi4qqeIixzaW1nRToi4qqgIixzaW1sOiLiqp0iLHNpbWxFOiLiqp8iLHNpbW5lOiLiiYYiLHNpbXBsdXM6IuKopCIsc2ltcmFycjoi4qWyIixzbGFycjoi4oaQIixTbWFsbENpcmNsZToi4oiYIixzbWFsbHNldG1pbnVzOiLiiJYiLHNtYXNocDoi4qizIixzbWVwYXJzbDoi4qekIixzbWlkOiLiiKMiLHNtaWxlOiLijKMiLHNtdDoi4qqqIixzbXRlOiLiqqwiLHNtdGVzOiLiqqzvuIAiLFNPRlRjeToi0KwiLHNvZnRjeToi0YwiLHNvbDoiLyIsc29sYjoi4qeEIixzb2xiYXI6IuKMvyIsU29wZjoi8J2ViiIsc29wZjoi8J2VpCIsc3BhZGVzOiLimaAiLHNwYWRlc3VpdDoi4pmgIixzcGFyOiLiiKUiLHNxY2FwOiLiipMiLHNxY2Fwczoi4oqT77iAIixzcWN1cDoi4oqUIixzcWN1cHM6IuKKlO+4gCIsU3FydDoi4oiaIixzcXN1Yjoi4oqPIixzcXN1YmU6IuKKkSIsc3FzdWJzZXQ6IuKKjyIsc3FzdWJzZXRlcToi4oqRIixzcXN1cDoi4oqQIixzcXN1cGU6IuKKkiIsc3FzdXBzZXQ6IuKKkCIsc3FzdXBzZXRlcToi4oqSIixzcXU6IuKWoSIsU3F1YXJlOiLilqEiLHNxdWFyZToi4pahIixTcXVhcmVJbnRlcnNlY3Rpb246IuKKkyIsU3F1YXJlU3Vic2V0OiLiio8iLFNxdWFyZVN1YnNldEVxdWFsOiLiipEiLFNxdWFyZVN1cGVyc2V0OiLiipAiLFNxdWFyZVN1cGVyc2V0RXF1YWw6IuKKkiIsU3F1YXJlVW5pb246IuKKlCIsc3F1YXJmOiLilqoiLHNxdWY6IuKWqiIsc3JhcnI6IuKGkiIsU3Njcjoi8J2SriIsc3Njcjoi8J2TiCIsc3NldG1uOiLiiJYiLHNzbWlsZToi4oyjIixzc3RhcmY6IuKLhiIsU3Rhcjoi4ouGIixzdGFyOiLimIYiLHN0YXJmOiLimIUiLHN0cmFpZ2h0ZXBzaWxvbjoiz7UiLHN0cmFpZ2h0cGhpOiLPlSIsc3RybnM6IsKvIixTdWI6IuKLkCIsc3ViOiLiioIiLHN1YmRvdDoi4qq9IixzdWJFOiLiq4UiLHN1YmU6IuKKhiIsc3ViZWRvdDoi4quDIixzdWJtdWx0OiLiq4EiLHN1Ym5FOiLiq4siLHN1Ym5lOiLiiooiLHN1YnBsdXM6IuKqvyIsc3VicmFycjoi4qW5IixTdWJzZXQ6IuKLkCIsc3Vic2V0OiLiioIiLHN1YnNldGVxOiLiioYiLHN1YnNldGVxcToi4quFIixTdWJzZXRFcXVhbDoi4oqGIixzdWJzZXRuZXE6IuKKiiIsc3Vic2V0bmVxcToi4quLIixzdWJzaW06IuKrhyIsc3Vic3ViOiLiq5UiLHN1YnN1cDoi4quTIixzdWNjOiLiibsiLHN1Y2NhcHByb3g6IuKquCIsc3VjY2N1cmx5ZXE6IuKJvSIsU3VjY2VlZHM6IuKJuyIsU3VjY2VlZHNFcXVhbDoi4qqwIixTdWNjZWVkc1NsYW50RXF1YWw6IuKJvSIsU3VjY2VlZHNUaWxkZToi4om/IixzdWNjZXE6IuKqsCIsc3VjY25hcHByb3g6IuKquiIsc3VjY25lcXE6IuKqtiIsc3VjY25zaW06IuKLqSIsc3VjY3NpbToi4om/IixTdWNoVGhhdDoi4oiLIixTdW06IuKIkSIsc3VtOiLiiJEiLHN1bmc6IuKZqiIsU3VwOiLii5EiLHN1cDoi4oqDIixzdXAxOiLCuSIsc3VwMjoiwrIiLHN1cDM6IsKzIixzdXBkb3Q6IuKqviIsc3VwZHN1Yjoi4quYIixzdXBFOiLiq4YiLHN1cGU6IuKKhyIsc3VwZWRvdDoi4quEIixTdXBlcnNldDoi4oqDIixTdXBlcnNldEVxdWFsOiLiiociLHN1cGhzb2w6IuKfiSIsc3VwaHN1Yjoi4quXIixzdXBsYXJyOiLipbsiLHN1cG11bHQ6IuKrgiIsc3VwbkU6IuKrjCIsc3VwbmU6IuKKiyIsc3VwcGx1czoi4quAIixTdXBzZXQ6IuKLkSIsc3Vwc2V0OiLiioMiLHN1cHNldGVxOiLiiociLHN1cHNldGVxcToi4quGIixzdXBzZXRuZXE6IuKKiyIsc3Vwc2V0bmVxcToi4quMIixzdXBzaW06IuKriCIsc3Vwc3ViOiLiq5QiLHN1cHN1cDoi4quWIixzd2FyaGs6IuKkpiIsc3dBcnI6IuKHmSIsc3dhcnI6IuKGmSIsc3dhcnJvdzoi4oaZIixzd253YXI6IuKkqiIsc3psaWc6IsOfIixUYWI6Ilx0Iix0YXJnZXQ6IuKMliIsVGF1OiLOpCIsdGF1OiLPhCIsdGJyazoi4o60IixUY2Fyb246IsWkIix0Y2Fyb246IsWlIixUY2VkaWw6IsWiIix0Y2VkaWw6IsWjIixUY3k6ItCiIix0Y3k6ItGCIix0ZG90OiLig5siLHRlbHJlYzoi4oyVIixUZnI6IvCdlJciLHRmcjoi8J2UsSIsdGhlcmU0OiLiiLQiLFRoZXJlZm9yZToi4oi0Iix0aGVyZWZvcmU6IuKItCIsVGhldGE6Is6YIix0aGV0YToizrgiLHRoZXRhc3ltOiLPkSIsdGhldGF2OiLPkSIsdGhpY2thcHByb3g6IuKJiCIsdGhpY2tzaW06IuKIvCIsVGhpY2tTcGFjZToi4oGf4oCKIix0aGluc3A6IuKAiSIsVGhpblNwYWNlOiLigIkiLHRoa2FwOiLiiYgiLHRoa3NpbToi4oi8IixUSE9STjoiw54iLHRob3JuOiLDviIsVGlsZGU6IuKIvCIsdGlsZGU6IsucIixUaWxkZUVxdWFsOiLiiYMiLFRpbGRlRnVsbEVxdWFsOiLiiYUiLFRpbGRlVGlsZGU6IuKJiCIsdGltZXM6IsOXIix0aW1lc2I6IuKKoCIsdGltZXNiYXI6IuKosSIsdGltZXNkOiLiqLAiLHRpbnQ6IuKIrSIsdG9lYToi4qSoIix0b3A6IuKKpCIsdG9wYm90OiLijLYiLHRvcGNpcjoi4quxIixUb3BmOiLwnZWLIix0b3BmOiLwnZWlIix0b3Bmb3JrOiLiq5oiLHRvc2E6IuKkqSIsdHByaW1lOiLigLQiLFRSQURFOiLihKIiLHRyYWRlOiLihKIiLHRyaWFuZ2xlOiLilrUiLHRyaWFuZ2xlZG93bjoi4pa/Iix0cmlhbmdsZWxlZnQ6IuKXgyIsdHJpYW5nbGVsZWZ0ZXE6IuKKtCIsdHJpYW5nbGVxOiLiiZwiLHRyaWFuZ2xlcmlnaHQ6IuKWuSIsdHJpYW5nbGVyaWdodGVxOiLiirUiLHRyaWRvdDoi4pesIix0cmllOiLiiZwiLHRyaW1pbnVzOiLiqLoiLFRyaXBsZURvdDoi4oObIix0cmlwbHVzOiLiqLkiLHRyaXNiOiLip40iLHRyaXRpbWU6IuKouyIsdHJwZXppdW06IuKPoiIsVHNjcjoi8J2SryIsdHNjcjoi8J2TiSIsVFNjeToi0KYiLHRzY3k6ItGGIixUU0hjeToi0IsiLHRzaGN5OiLRmyIsVHN0cm9rOiLFpiIsdHN0cm9rOiLFpyIsdHdpeHQ6IuKJrCIsdHdvaGVhZGxlZnRhcnJvdzoi4oaeIix0d29oZWFkcmlnaHRhcnJvdzoi4oagIixVYWN1dGU6IsOaIix1YWN1dGU6IsO6IixVYXJyOiLihp8iLHVBcnI6IuKHkSIsdWFycjoi4oaRIixVYXJyb2Npcjoi4qWJIixVYnJjeToi0I4iLHVicmN5OiLRniIsVWJyZXZlOiLFrCIsdWJyZXZlOiLFrSIsVWNpcmM6IsObIix1Y2lyYzoiw7siLFVjeToi0KMiLHVjeToi0YMiLHVkYXJyOiLih4UiLFVkYmxhYzoixbAiLHVkYmxhYzoixbEiLHVkaGFyOiLipa4iLHVmaXNodDoi4qW+IixVZnI6IvCdlJgiLHVmcjoi8J2UsiIsVWdyYXZlOiLDmSIsdWdyYXZlOiLDuSIsdUhhcjoi4qWjIix1aGFybDoi4oa/Iix1aGFycjoi4oa+Iix1aGJsazoi4paAIix1bGNvcm46IuKMnCIsdWxjb3JuZXI6IuKMnCIsdWxjcm9wOiLijI8iLHVsdHJpOiLil7giLFVtYWNyOiLFqiIsdW1hY3I6IsWrIix1bWw6IsKoIixVbmRlckJhcjoiXyIsVW5kZXJCcmFjZToi4o+fIixVbmRlckJyYWNrZXQ6IuKOtSIsVW5kZXJQYXJlbnRoZXNpczoi4o+dIixVbmlvbjoi4ouDIixVbmlvblBsdXM6IuKKjiIsVW9nb246IsWyIix1b2dvbjoixbMiLFVvcGY6IvCdlYwiLHVvcGY6IvCdlaYiLFVwQXJyb3c6IuKGkSIsVXBhcnJvdzoi4oeRIix1cGFycm93OiLihpEiLFVwQXJyb3dCYXI6IuKkkiIsVXBBcnJvd0Rvd25BcnJvdzoi4oeFIixVcERvd25BcnJvdzoi4oaVIixVcGRvd25hcnJvdzoi4oeVIix1cGRvd25hcnJvdzoi4oaVIixVcEVxdWlsaWJyaXVtOiLipa4iLHVwaGFycG9vbmxlZnQ6IuKGvyIsdXBoYXJwb29ucmlnaHQ6IuKGviIsdXBsdXM6IuKKjiIsVXBwZXJMZWZ0QXJyb3c6IuKGliIsVXBwZXJSaWdodEFycm93OiLihpciLFVwc2k6Is+SIix1cHNpOiLPhSIsdXBzaWg6Is+SIixVcHNpbG9uOiLOpSIsdXBzaWxvbjoiz4UiLFVwVGVlOiLiiqUiLFVwVGVlQXJyb3c6IuKGpSIsdXB1cGFycm93czoi4oeIIix1cmNvcm46IuKMnSIsdXJjb3JuZXI6IuKMnSIsdXJjcm9wOiLijI4iLFVyaW5nOiLFriIsdXJpbmc6IsWvIix1cnRyaToi4pe5IixVc2NyOiLwnZKwIix1c2NyOiLwnZOKIix1dGRvdDoi4ouwIixVdGlsZGU6IsWoIix1dGlsZGU6IsWpIix1dHJpOiLilrUiLHV0cmlmOiLilrQiLHV1YXJyOiLih4giLFV1bWw6IsOcIix1dW1sOiLDvCIsdXdhbmdsZToi4qanIix2YW5ncnQ6IuKmnCIsdmFyZXBzaWxvbjoiz7UiLHZhcmthcHBhOiLPsCIsdmFybm90aGluZzoi4oiFIix2YXJwaGk6Is+VIix2YXJwaToiz5YiLHZhcnByb3B0bzoi4oidIix2QXJyOiLih5UiLHZhcnI6IuKGlSIsdmFycmhvOiLPsSIsdmFyc2lnbWE6Is+CIix2YXJzdWJzZXRuZXE6IuKKiu+4gCIsdmFyc3Vic2V0bmVxcToi4quL77iAIix2YXJzdXBzZXRuZXE6IuKKi++4gCIsdmFyc3Vwc2V0bmVxcToi4quM77iAIix2YXJ0aGV0YToiz5EiLHZhcnRyaWFuZ2xlbGVmdDoi4oqyIix2YXJ0cmlhbmdsZXJpZ2h0OiLiirMiLFZiYXI6IuKrqyIsdkJhcjoi4quoIix2QmFydjoi4qupIixWY3k6ItCSIix2Y3k6ItCyIixWRGFzaDoi4oqrIixWZGFzaDoi4oqpIix2RGFzaDoi4oqoIix2ZGFzaDoi4oqiIixWZGFzaGw6IuKrpiIsVmVlOiLii4EiLHZlZToi4oioIix2ZWViYXI6IuKKuyIsdmVlZXE6IuKJmiIsdmVsbGlwOiLii64iLFZlcmJhcjoi4oCWIix2ZXJiYXI6InwiLFZlcnQ6IuKAliIsdmVydDoifCIsVmVydGljYWxCYXI6IuKIoyIsVmVydGljYWxMaW5lOiJ8IixWZXJ0aWNhbFNlcGFyYXRvcjoi4p2YIixWZXJ0aWNhbFRpbGRlOiLiiYAiLFZlcnlUaGluU3BhY2U6IuKAiiIsVmZyOiLwnZSZIix2ZnI6IvCdlLMiLHZsdHJpOiLiirIiLHZuc3ViOiLiioLig5IiLHZuc3VwOiLiioPig5IiLFZvcGY6IvCdlY0iLHZvcGY6IvCdlaciLHZwcm9wOiLiiJ0iLHZydHJpOiLiirMiLFZzY3I6IvCdkrEiLHZzY3I6IvCdk4siLHZzdWJuRToi4quL77iAIix2c3VibmU6IuKKiu+4gCIsdnN1cG5FOiLiq4zvuIAiLHZzdXBuZToi4oqL77iAIixWdmRhc2g6IuKKqiIsdnppZ3phZzoi4qaaIixXY2lyYzoixbQiLHdjaXJjOiLFtSIsd2VkYmFyOiLiqZ8iLFdlZGdlOiLii4AiLHdlZGdlOiLiiKciLHdlZGdlcToi4omZIix3ZWllcnA6IuKEmCIsV2ZyOiLwnZSaIix3ZnI6IvCdlLQiLFdvcGY6IvCdlY4iLHdvcGY6IvCdlagiLHdwOiLihJgiLHdyOiLiiYAiLHdyZWF0aDoi4omAIixXc2NyOiLwnZKyIix3c2NyOiLwnZOMIix4Y2FwOiLii4IiLHhjaXJjOiLil68iLHhjdXA6IuKLgyIseGR0cmk6IuKWvSIsWGZyOiLwnZSbIix4ZnI6IvCdlLUiLHhoQXJyOiLin7oiLHhoYXJyOiLin7ciLFhpOiLOniIseGk6Is6+Iix4bEFycjoi4p+4Iix4bGFycjoi4p+1Iix4bWFwOiLin7wiLHhuaXM6IuKLuyIseG9kb3Q6IuKogCIsWG9wZjoi8J2VjyIseG9wZjoi8J2VqSIseG9wbHVzOiLiqIEiLHhvdGltZToi4qiCIix4ckFycjoi4p+5Iix4cmFycjoi4p+2IixYc2NyOiLwnZKzIix4c2NyOiLwnZONIix4c3FjdXA6IuKohiIseHVwbHVzOiLiqIQiLHh1dHJpOiLilrMiLHh2ZWU6IuKLgSIseHdlZGdlOiLii4AiLFlhY3V0ZToiw50iLHlhY3V0ZToiw70iLFlBY3k6ItCvIix5YWN5OiLRjyIsWWNpcmM6IsW2Iix5Y2lyYzoixbciLFljeToi0KsiLHljeToi0YsiLHllbjoiwqUiLFlmcjoi8J2UnCIseWZyOiLwnZS2IixZSWN5OiLQhyIseWljeToi0ZciLFlvcGY6IvCdlZAiLHlvcGY6IvCdlaoiLFlzY3I6IvCdkrQiLHlzY3I6IvCdk44iLFlVY3k6ItCuIix5dWN5OiLRjiIsWXVtbDoixbgiLHl1bWw6IsO/IixaYWN1dGU6IsW5Iix6YWN1dGU6IsW6IixaY2Fyb246IsW9Iix6Y2Fyb246IsW+IixaY3k6ItCXIix6Y3k6ItC3IixaZG90OiLFuyIsemRvdDoixbwiLHplZXRyZjoi4oSoIixaZXJvV2lkdGhTcGFjZToi4oCLIixaZXRhOiLOliIsemV0YToizrYiLFpmcjoi4oSoIix6ZnI6IvCdlLciLFpIY3k6ItCWIix6aGN5OiLQtiIsemlncmFycjoi4oedIixab3BmOiLihKQiLHpvcGY6IvCdlasiLFpzY3I6IvCdkrUiLHpzY3I6IvCdk48iLHp3ajoi4oCNIix6d25qOiLigIwifX0se31dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgaHRtbF9ibG9ja3M9e307WyJhcnRpY2xlIiwiYXNpZGUiLCJidXR0b24iLCJibG9ja3F1b3RlIiwiYm9keSIsImNhbnZhcyIsImNhcHRpb24iLCJjb2wiLCJjb2xncm91cCIsImRkIiwiZGl2IiwiZGwiLCJkdCIsImVtYmVkIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImhyIiwiaWZyYW1lIiwibGkiLCJtYXAiLCJvYmplY3QiLCJvbCIsIm91dHB1dCIsInAiLCJwcmUiLCJwcm9ncmVzcyIsInNjcmlwdCIsInNlY3Rpb24iLCJzdHlsZSIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRyIiwidGhlYWQiLCJ1bCIsInZpZGVvIl0uZm9yRWFjaChmdW5jdGlvbihuYW1lKXtodG1sX2Jsb2Nrc1tuYW1lXT10cnVlfSk7bW9kdWxlLmV4cG9ydHM9aHRtbF9ibG9ja3N9LHt9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcmVwbGFjZShyZWdleCxvcHRpb25zKXtyZWdleD1yZWdleC5zb3VyY2U7b3B0aW9ucz1vcHRpb25zfHwiIjtyZXR1cm4gZnVuY3Rpb24gc2VsZihuYW1lLHZhbCl7aWYoIW5hbWUpe3JldHVybiBuZXcgUmVnRXhwKHJlZ2V4LG9wdGlvbnMpfXZhbD12YWwuc291cmNlfHx2YWw7cmVnZXg9cmVnZXgucmVwbGFjZShuYW1lLHZhbCk7cmV0dXJuIHNlbGZ9fXZhciBhdHRyX25hbWU9L1thLXpBLVpfOl1bYS16QS1aMC05Oi5fLV0qLzt2YXIgdW5xdW90ZWQ9L1teIic9PD5gXHgwMC1ceDIwXSsvO3ZhciBzaW5nbGVfcXVvdGVkPS8nW14nXSonLzt2YXIgZG91YmxlX3F1b3RlZD0vIlteIl0qIi87dmFyIGF0dHJfdmFsdWU9cmVwbGFjZSgvKD86dW5xdW90ZWR8c2luZ2xlX3F1b3RlZHxkb3VibGVfcXVvdGVkKS8pKCJ1bnF1b3RlZCIsdW5xdW90ZWQpKCJzaW5nbGVfcXVvdGVkIixzaW5nbGVfcXVvdGVkKSgiZG91YmxlX3F1b3RlZCIsZG91YmxlX3F1b3RlZCkoKTt2YXIgYXR0cmlidXRlPXJlcGxhY2UoLyg/OlxzK2F0dHJfbmFtZSg/OlxzKj1ccyphdHRyX3ZhbHVlKT8pLykoImF0dHJfbmFtZSIsYXR0cl9uYW1lKSgiYXR0cl92YWx1ZSIsYXR0cl92YWx1ZSkoKTt2YXIgb3Blbl90YWc9cmVwbGFjZSgvPFtBLVphLXpdW0EtWmEtejAtOV0qYXR0cmlidXRlKlxzKlwvPz4vKSgiYXR0cmlidXRlIixhdHRyaWJ1dGUpKCk7dmFyIGNsb3NlX3RhZz0vPFwvW0EtWmEtel1bQS1aYS16MC05XSpccyo+Lzt2YXIgY29tbWVudD0vPCEtLShbXi1dK3xbLV1bXi1dKykqLS0+Lzt2YXIgcHJvY2Vzc2luZz0vPFs/XS4qP1s/XT4vO3ZhciBkZWNsYXJhdGlvbj0vPCFbQS1aXStccytbXj5dKj4vO3ZhciBjZGF0YT0vPCFcW0NEQVRBXFsoW15cXV0rfFxdW15cXV18XF1cXVtePl0pKlxdXF0+Lzt2YXIgSFRNTF9UQUdfUkU9cmVwbGFjZSgvXig/Om9wZW5fdGFnfGNsb3NlX3RhZ3xjb21tZW50fHByb2Nlc3Npbmd8ZGVjbGFyYXRpb258Y2RhdGEpLykoIm9wZW5fdGFnIixvcGVuX3RhZykoImNsb3NlX3RhZyIsY2xvc2VfdGFnKSgiY29tbWVudCIsY29tbWVudCkoInByb2Nlc3NpbmciLHByb2Nlc3NpbmcpKCJkZWNsYXJhdGlvbiIsZGVjbGFyYXRpb24pKCJjZGF0YSIsY2RhdGEpKCk7bW9kdWxlLmV4cG9ydHMuSFRNTF9UQUdfUkU9SFRNTF9UQUdfUkV9LHt9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9WyJjb2FwIiwiZG9pIiwiamF2YXNjcmlwdCIsImFhYSIsImFhYXMiLCJhYm91dCIsImFjYXAiLCJjYXAiLCJjaWQiLCJjcmlkIiwiZGF0YSIsImRhdiIsImRpY3QiLCJkbnMiLCJmaWxlIiwiZnRwIiwiZ2VvIiwiZ28iLCJnb3BoZXIiLCJoMzIzIiwiaHR0cCIsImh0dHBzIiwiaWF4IiwiaWNhcCIsImltIiwiaW1hcCIsImluZm8iLCJpcHAiLCJpcmlzIiwiaXJpcy5iZWVwIiwiaXJpcy54cGMiLCJpcmlzLnhwY3MiLCJpcmlzLmx3eiIsImxkYXAiLCJtYWlsdG8iLCJtaWQiLCJtc3JwIiwibXNycHMiLCJtdHFwIiwibXVwZGF0ZSIsIm5ld3MiLCJuZnMiLCJuaSIsIm5paCIsIm5udHAiLCJvcGFxdWVsb2NrdG9rZW4iLCJwb3AiLCJwcmVzIiwicnRzcCIsInNlcnZpY2UiLCJzZXNzaW9uIiwic2h0dHAiLCJzaWV2ZSIsInNpcCIsInNpcHMiLCJzbXMiLCJzbm1wIiwic29hcC5iZWVwIiwic29hcC5iZWVwcyIsInRhZyIsInRlbCIsInRlbG5ldCIsInRmdHAiLCJ0aGlzbWVzc2FnZSIsInRuMzI3MCIsInRpcCIsInR2IiwidXJuIiwidmVtbWkiLCJ3cyIsIndzcyIsInhjb24iLCJ4Y29uLXVzZXJpZCIsInhtbHJwYy5iZWVwIiwieG1scnBjLmJlZXBzIiwieG1wcCIsInozOS41MHIiLCJ6MzkuNTBzIiwiYWRpdW14dHJhIiwiYWZwIiwiYWZzIiwiYWltIiwiYXB0IiwiYXR0YWNobWVudCIsImF3IiwiYmVzaGFyZSIsImJpdGNvaW4iLCJib2xvIiwiY2FsbHRvIiwiY2hyb21lIiwiY2hyb21lLWV4dGVuc2lvbiIsImNvbS1ldmVudGJyaXRlLWF0dGVuZGVlIiwiY29udGVudCIsImN2cyIsImRsbmEtcGxheXNpbmdsZSIsImRsbmEtcGxheWNvbnRhaW5lciIsImR0biIsImR2YiIsImVkMmsiLCJmYWNldGltZSIsImZlZWQiLCJmaW5nZXIiLCJmaXNoIiwiZ2ciLCJnaXQiLCJnaXptb3Byb2plY3QiLCJndGFsayIsImhjcCIsImljb24iLCJpcG4iLCJpcmMiLCJpcmM2IiwiaXJjcyIsIml0bXMiLCJqYXIiLCJqbXMiLCJrZXlwYXJjIiwibGFzdGZtIiwibGRhcHMiLCJtYWduZXQiLCJtYXBzIiwibWFya2V0IiwibWVzc2FnZSIsIm1tcyIsIm1zLWhlbHAiLCJtc25pbSIsIm11bWJsZSIsIm12biIsIm5vdGVzIiwib2lkIiwicGFsbSIsInBhcGFyYXp6aSIsInBsYXRmb3JtIiwicHJveHkiLCJwc3ljIiwicXVlcnkiLCJyZXMiLCJyZXNvdXJjZSIsInJtaSIsInJzeW5jIiwicnRtcCIsInNlY29uZGxpZmUiLCJzZnRwIiwic2duIiwic2t5cGUiLCJzbWIiLCJzb2xkYXQiLCJzcG90aWZ5Iiwic3NoIiwic3RlYW0iLCJzdm4iLCJ0ZWFtc3BlYWsiLCJ0aGluZ3MiLCJ1ZHAiLCJ1bnJlYWwiLCJ1dDIwMDQiLCJ2ZW50cmlsbyIsInZpZXctc291cmNlIiwid2ViY2FsIiwid3RhaSIsInd5Y2l3eWciLCJ4ZmlyZSIsInhyaSIsInltc2dyIl19LHt9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdHlwZU9mKG9iail7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopfWZ1bmN0aW9uIGlzU3RyaW5nKG9iail7cmV0dXJuIHR5cGVPZihvYmopPT09IltvYmplY3QgU3RyaW5nXSJ9dmFyIGhhc093bj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGhhcyhvYmplY3Qsa2V5KXtyZXR1cm4gb2JqZWN0P2hhc093bi5jYWxsKG9iamVjdCxrZXkpOmZhbHNlfWZ1bmN0aW9uIGFzc2lnbihvYmope3ZhciBzb3VyY2VzPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3NvdXJjZXMuZm9yRWFjaChmdW5jdGlvbihzb3VyY2Upe2lmKCFzb3VyY2Upe3JldHVybn1pZih0eXBlb2Ygc291cmNlIT09Im9iamVjdCIpe3Rocm93IG5ldyBUeXBlRXJyb3Ioc291cmNlKyJtdXN0IGJlIG9iamVjdCIpfU9iamVjdC5rZXlzKHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpe29ialtrZXldPXNvdXJjZVtrZXldfSl9KTtyZXR1cm4gb2JqfXZhciBVTkVTQ0FQRV9NRF9SRT0vXFwoW1xcISIjJCUmJygpKissLlwvOjs8PT4/QFtcXV5fYHt8fX4tXSkvZztmdW5jdGlvbiB1bmVzY2FwZU1kKHN0cil7aWYoc3RyLmluZGV4T2YoIlxcIik8MCl7cmV0dXJuIHN0cn1yZXR1cm4gc3RyLnJlcGxhY2UoVU5FU0NBUEVfTURfUkUsIiQxIil9ZnVuY3Rpb24gaXNWYWxpZEVudGl0eUNvZGUoYyl7aWYoYz49NTUyOTYmJmM8PTU3MzQzKXtyZXR1cm4gZmFsc2V9aWYoYz49NjQ5NzYmJmM8PTY1MDA3KXtyZXR1cm4gZmFsc2V9aWYoKGMmNjU1MzUpPT09NjU1MzV8fChjJjY1NTM1KT09PTY1NTM0KXtyZXR1cm4gZmFsc2V9aWYoYz49MCYmYzw9OCl7cmV0dXJuIGZhbHNlfWlmKGM9PT0xMSl7cmV0dXJuIGZhbHNlfWlmKGM+PTE0JiZjPD0zMSl7cmV0dXJuIGZhbHNlfWlmKGM+PTEyNyYmYzw9MTU5KXtyZXR1cm4gZmFsc2V9aWYoYz4xMTE0MTExKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9ZnVuY3Rpb24gZnJvbUNvZGVQb2ludChjKXtpZihjPjY1NTM1KXtjLT02NTUzNjt2YXIgc3Vycm9nYXRlMT01NTI5NisoYz4+MTApLHN1cnJvZ2F0ZTI9NTYzMjArKGMmMTAyMyk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoc3Vycm9nYXRlMSxzdXJyb2dhdGUyKX1yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjKX12YXIgTkFNRURfRU5USVRZX1JFPS8mKFthLXojXVthLXowLTldezEsMzF9KTsvZ2k7dmFyIERJR0lUQUxfRU5USVRZX1RFU1RfUkU9L14jKCg/OnhbYS1mMC05XXsxLDh9fFswLTldezEsOH0pKS9pO3ZhciBlbnRpdGllcz1yZXF1aXJlKCIuL2VudGl0aWVzIik7ZnVuY3Rpb24gcmVwbGFjZUVudGl0eVBhdHRlcm4obWF0Y2gsbmFtZSl7dmFyIGNvZGU9MDtpZihoYXMoZW50aXRpZXMsbmFtZSkpe3JldHVybiBlbnRpdGllc1tuYW1lXX1lbHNlIGlmKG5hbWUuY2hhckNvZGVBdCgwKT09PTM1JiZESUdJVEFMX0VOVElUWV9URVNUX1JFLnRlc3QobmFtZSkpe2NvZGU9bmFtZVsxXS50b0xvd2VyQ2FzZSgpPT09IngiP3BhcnNlSW50KG5hbWUuc2xpY2UoMiksMTYpOnBhcnNlSW50KG5hbWUuc2xpY2UoMSksMTApO2lmKGlzVmFsaWRFbnRpdHlDb2RlKGNvZGUpKXtyZXR1cm4gZnJvbUNvZGVQb2ludChjb2RlKX19cmV0dXJuIG1hdGNofWZ1bmN0aW9uIHJlcGxhY2VFbnRpdGllcyhzdHIpe2lmKHN0ci5pbmRleE9mKCImIik8MCl7cmV0dXJuIHN0cn1yZXR1cm4gc3RyLnJlcGxhY2UoTkFNRURfRU5USVRZX1JFLHJlcGxhY2VFbnRpdHlQYXR0ZXJuKX12YXIgSFRNTF9FU0NBUEVfVEVTVF9SRT0vWyY8PiJdLzt2YXIgSFRNTF9FU0NBUEVfUkVQTEFDRV9SRT0vWyY8PiJdL2c7dmFyIEhUTUxfUkVQTEFDRU1FTlRTPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsifTtmdW5jdGlvbiByZXBsYWNlVW5zYWZlQ2hhcihjaCl7cmV0dXJuIEhUTUxfUkVQTEFDRU1FTlRTW2NoXX1mdW5jdGlvbiBlc2NhcGVIdG1sKHN0cil7aWYoSFRNTF9FU0NBUEVfVEVTVF9SRS50ZXN0KHN0cikpe3JldHVybiBzdHIucmVwbGFjZShIVE1MX0VTQ0FQRV9SRVBMQUNFX1JFLHJlcGxhY2VVbnNhZmVDaGFyKX1yZXR1cm4gc3RyfWV4cG9ydHMuYXNzaWduPWFzc2lnbjtleHBvcnRzLmlzU3RyaW5nPWlzU3RyaW5nO2V4cG9ydHMuaGFzPWhhcztleHBvcnRzLnVuZXNjYXBlTWQ9dW5lc2NhcGVNZDtleHBvcnRzLmlzVmFsaWRFbnRpdHlDb2RlPWlzVmFsaWRFbnRpdHlDb2RlO2V4cG9ydHMuZnJvbUNvZGVQb2ludD1mcm9tQ29kZVBvaW50O2V4cG9ydHMucmVwbGFjZUVudGl0aWVzPXJlcGxhY2VFbnRpdGllcztleHBvcnRzLmVzY2FwZUh0bWw9ZXNjYXBlSHRtbH0seyIuL2VudGl0aWVzIjo0fV0sOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPXtvcHRpb25zOntodG1sOnRydWUseGh0bWxPdXQ6dHJ1ZSxicmVha3M6ZmFsc2UsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OmZhbHNlLGxpbmtUYXJnZXQ6IiIsdHlwb2dyYXBoZXI6ZmFsc2UscXVvdGVzOiLigJzigJ3igJjigJkiLGhpZ2hsaWdodDpudWxsLG1heE5lc3Rpbmc6MjB9LGNvbXBvbmVudHM6e2NvcmU6e3J1bGVzOlsiYmxvY2siLCJpbmxpbmUiLCJyZWZlcmVuY2VzIiwiYWJicjIiXX0sYmxvY2s6e3J1bGVzOlsiYmxvY2txdW90ZSIsImNvZGUiLCJmZW5jZXMiLCJoZWFkaW5nIiwiaHIiLCJodG1sYmxvY2siLCJsaGVhZGluZyIsImxpc3QiLCJwYXJhZ3JhcGgiXX0saW5saW5lOntydWxlczpbImF1dG9saW5rIiwiYmFja3RpY2tzIiwiZW1waGFzaXMiLCJlbnRpdHkiLCJlc2NhcGUiLCJodG1sdGFnIiwibGlua3MiLCJuZXdsaW5lIiwidGV4dCJdfX19fSx7fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz17b3B0aW9uczp7aHRtbDpmYWxzZSx4aHRtbE91dDpmYWxzZSxicmVha3M6ZmFsc2UsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OmZhbHNlLGxpbmtUYXJnZXQ6IiIsdHlwb2dyYXBoZXI6ZmFsc2UscXVvdGVzOiLigJzigJ3igJjigJkiLGhpZ2hsaWdodDpudWxsLG1heE5lc3Rpbmc6MjB9LGNvbXBvbmVudHM6e2NvcmU6e3J1bGVzOlsiYmxvY2siLCJpbmxpbmUiLCJyZWZlcmVuY2VzIiwicmVwbGFjZW1lbnRzIiwibGlua2lmeSIsInNtYXJ0cXVvdGVzIiwicmVmZXJlbmNlcyIsImFiYnIyIiwiZm9vdG5vdGVfdGFpbCJdfSxibG9jazp7cnVsZXM6WyJibG9ja3F1b3RlIiwiY29kZSIsImZlbmNlcyIsImZvb3Rub3RlIiwiaGVhZGluZyIsImhyIiwiaHRtbGJsb2NrIiwibGhlYWRpbmciLCJsaXN0IiwicGFyYWdyYXBoIiwidGFibGUiXX0saW5saW5lOntydWxlczpbImF1dG9saW5rIiwiYmFja3RpY2tzIiwiZGVsIiwiZW1waGFzaXMiLCJlbnRpdHkiLCJlc2NhcGUiLCJmb290bm90ZV9yZWYiLCJodG1sdGFnIiwibGlua3MiLCJuZXdsaW5lIiwidGV4dCJdfX19fSx7fV0sMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz17b3B0aW9uczp7aHRtbDpmYWxzZSx4aHRtbE91dDpmYWxzZSxicmVha3M6ZmFsc2UsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixsaW5raWZ5OmZhbHNlLGxpbmtUYXJnZXQ6IiIsdHlwb2dyYXBoZXI6ZmFsc2UscXVvdGVzOiLigJzigJ3igJjigJkiLGhpZ2hsaWdodDpudWxsLG1heE5lc3Rpbmc6MjB9LGNvbXBvbmVudHM6e2NvcmU6e30sYmxvY2s6e30saW5saW5lOnt9fX19LHt9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciByZXBsYWNlRW50aXRpZXM9cmVxdWlyZSgiLi4vY29tbW9uL3V0aWxzIikucmVwbGFjZUVudGl0aWVzO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIG5vcm1hbGl6ZUxpbmsodXJsKXt2YXIgbm9ybWFsaXplZD1yZXBsYWNlRW50aXRpZXModXJsKTt0cnl7bm9ybWFsaXplZD1kZWNvZGVVUkkobm9ybWFsaXplZCl9Y2F0Y2goZXJyKXt9cmV0dXJuIGVuY29kZVVSSShub3JtYWxpemVkKX19LHsiLi4vY29tbW9uL3V0aWxzIjo4fV0sMTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBub3JtYWxpemVSZWZlcmVuY2Uoc3RyKXtyZXR1cm4gc3RyLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpLnRvVXBwZXJDYXNlKCl9fSx7fV0sMTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgbm9ybWFsaXplTGluaz1yZXF1aXJlKCIuL25vcm1hbGl6ZV9saW5rIik7dmFyIHVuZXNjYXBlTWQ9cmVxdWlyZSgiLi4vY29tbW9uL3V0aWxzIikudW5lc2NhcGVNZDttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBwYXJzZUxpbmtEZXN0aW5hdGlvbihzdGF0ZSxwb3Mpe3ZhciBjb2RlLGxldmVsLGxpbmssc3RhcnQ9cG9zLG1heD1zdGF0ZS5wb3NNYXg7aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKT09PTYwKXtwb3MrKzt3aGlsZShwb3M8bWF4KXtjb2RlPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk7aWYoY29kZT09PTEwKXtyZXR1cm4gZmFsc2V9aWYoY29kZT09PTYyKXtsaW5rPW5vcm1hbGl6ZUxpbmsodW5lc2NhcGVNZChzdGF0ZS5zcmMuc2xpY2Uoc3RhcnQrMSxwb3MpKSk7aWYoIXN0YXRlLnBhcnNlci52YWxpZGF0ZUxpbmsobGluaykpe3JldHVybiBmYWxzZX1zdGF0ZS5wb3M9cG9zKzE7c3RhdGUubGlua0NvbnRlbnQ9bGluaztyZXR1cm4gdHJ1ZX1pZihjb2RlPT09OTImJnBvcysxPG1heCl7cG9zKz0yO2NvbnRpbnVlfXBvcysrfXJldHVybiBmYWxzZX1sZXZlbD0wO3doaWxlKHBvczxtYXgpe2NvZGU9c3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKTtpZihjb2RlPT09MzIpe2JyZWFrfWlmKGNvZGU+OCYmY29kZTwxNCl7YnJlYWt9aWYoY29kZT09PTkyJiZwb3MrMTxtYXgpe3Bvcys9Mjtjb250aW51ZX1pZihjb2RlPT09NDApe2xldmVsKys7aWYobGV2ZWw+MSl7YnJlYWt9fWlmKGNvZGU9PT00MSl7bGV2ZWwtLTtpZihsZXZlbDwwKXticmVha319cG9zKyt9aWYoc3RhcnQ9PT1wb3Mpe3JldHVybiBmYWxzZX1saW5rPXVuZXNjYXBlTWQoc3RhdGUuc3JjLnNsaWNlKHN0YXJ0LHBvcykpO2lmKCFzdGF0ZS5wYXJzZXIudmFsaWRhdGVMaW5rKGxpbmspKXtyZXR1cm4gZmFsc2V9c3RhdGUubGlua0NvbnRlbnQ9bGluaztzdGF0ZS5wb3M9cG9zO3JldHVybiB0cnVlfX0seyIuLi9jb21tb24vdXRpbHMiOjgsIi4vbm9ybWFsaXplX2xpbmsiOjEyfV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBwYXJzZUxpbmtMYWJlbChzdGF0ZSxzdGFydCl7dmFyIGxldmVsLGZvdW5kLG1hcmtlcixsYWJlbEVuZD0tMSxtYXg9c3RhdGUucG9zTWF4LG9sZFBvcz1zdGF0ZS5wb3Msb2xkRmxhZz1zdGF0ZS5pc0luTGFiZWw7aWYoc3RhdGUuaXNJbkxhYmVsKXtyZXR1cm4tMX1pZihzdGF0ZS5sYWJlbFVubWF0Y2hlZFNjb3Blcyl7c3RhdGUubGFiZWxVbm1hdGNoZWRTY29wZXMtLTtyZXR1cm4tMX1zdGF0ZS5wb3M9c3RhcnQrMTtzdGF0ZS5pc0luTGFiZWw9dHJ1ZTtsZXZlbD0xO3doaWxlKHN0YXRlLnBvczxtYXgpe21hcmtlcj1zdGF0ZS5zcmMuY2hhckNvZGVBdChzdGF0ZS5wb3MpO2lmKG1hcmtlcj09PTkxKXtsZXZlbCsrfWVsc2UgaWYobWFya2VyPT09OTMpe2xldmVsLS07aWYobGV2ZWw9PT0wKXtmb3VuZD10cnVlO2JyZWFrfX1zdGF0ZS5wYXJzZXIuc2tpcFRva2VuKHN0YXRlKX1pZihmb3VuZCl7bGFiZWxFbmQ9c3RhdGUucG9zO3N0YXRlLmxhYmVsVW5tYXRjaGVkU2NvcGVzPTB9ZWxzZXtzdGF0ZS5sYWJlbFVubWF0Y2hlZFNjb3Blcz1sZXZlbC0xfXN0YXRlLnBvcz1vbGRQb3M7c3RhdGUuaXNJbkxhYmVsPW9sZEZsYWc7cmV0dXJuIGxhYmVsRW5kfX0se31dLDE2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIHVuZXNjYXBlTWQ9cmVxdWlyZSgiLi4vY29tbW9uL3V0aWxzIikudW5lc2NhcGVNZDttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBwYXJzZUxpbmtUaXRsZShzdGF0ZSxwb3Mpe3ZhciBjb2RlLHN0YXJ0PXBvcyxtYXg9c3RhdGUucG9zTWF4LG1hcmtlcj1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpO2lmKG1hcmtlciE9PTM0JiZtYXJrZXIhPT0zOSYmbWFya2VyIT09NDApe3JldHVybiBmYWxzZX1wb3MrKztpZihtYXJrZXI9PT00MCl7bWFya2VyPTQxfXdoaWxlKHBvczxtYXgpe2NvZGU9c3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKTtpZihjb2RlPT09bWFya2VyKXtzdGF0ZS5wb3M9cG9zKzE7c3RhdGUubGlua0NvbnRlbnQ9dW5lc2NhcGVNZChzdGF0ZS5zcmMuc2xpY2Uoc3RhcnQrMSxwb3MpKTtyZXR1cm4gdHJ1ZX1pZihjb2RlPT09OTImJnBvcysxPG1heCl7cG9zKz0yO2NvbnRpbnVlfXBvcysrfXJldHVybiBmYWxzZX19LHsiLi4vY29tbW9uL3V0aWxzIjo4fV0sMTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYXNzaWduPXJlcXVpcmUoIi4vY29tbW9uL3V0aWxzIikuYXNzaWduO3ZhciBSZW5kZXJlcj1yZXF1aXJlKCIuL3JlbmRlcmVyIik7dmFyIFBhcnNlckNvcmU9cmVxdWlyZSgiLi9wYXJzZXJfY29yZSIpO3ZhciBQYXJzZXJCbG9jaz1yZXF1aXJlKCIuL3BhcnNlcl9ibG9jayIpO3ZhciBQYXJzZXJJbmxpbmU9cmVxdWlyZSgiLi9wYXJzZXJfaW5saW5lIik7dmFyIFJ1bGVyPXJlcXVpcmUoIi4vcnVsZXIiKTt2YXIgY29uZmlnPXtkZWZhdWx0OnJlcXVpcmUoIi4vY29uZmlncy9kZWZhdWx0IiksZnVsbDpyZXF1aXJlKCIuL2NvbmZpZ3MvZnVsbCIpLGNvbW1vbm1hcms6cmVxdWlyZSgiLi9jb25maWdzL2NvbW1vbm1hcmsiKX07ZnVuY3Rpb24gU3RhdGVDb3JlKGluc3RhbmNlLHN0cixlbnYpe3RoaXMuc3JjPXN0cjt0aGlzLmVudj1lbnY7dGhpcy5vcHRpb25zPWluc3RhbmNlLm9wdGlvbnM7dGhpcy50b2tlbnM9W107dGhpcy5pbmxpbmVNb2RlPWZhbHNlO3RoaXMuaW5saW5lPWluc3RhbmNlLmlubGluZTt0aGlzLmJsb2NrPWluc3RhbmNlLmJsb2NrO3RoaXMucmVuZGVyZXI9aW5zdGFuY2UucmVuZGVyZXI7dGhpcy50eXBvZ3JhcGhlcj1pbnN0YW5jZS50eXBvZ3JhcGhlcn1mdW5jdGlvbiBSZW1hcmthYmxlKHByZXNldCxvcHRpb25zKXtpZih0eXBlb2YgcHJlc2V0IT09InN0cmluZyIpe29wdGlvbnM9cHJlc2V0O3ByZXNldD0iZGVmYXVsdCJ9dGhpcy5pbmxpbmU9bmV3IFBhcnNlcklubGluZTt0aGlzLmJsb2NrPW5ldyBQYXJzZXJCbG9jazt0aGlzLmNvcmU9bmV3IFBhcnNlckNvcmU7dGhpcy5yZW5kZXJlcj1uZXcgUmVuZGVyZXI7dGhpcy5ydWxlcj1uZXcgUnVsZXI7dGhpcy5vcHRpb25zPXt9O3RoaXMuY29uZmlndXJlKGNvbmZpZ1twcmVzZXRdKTt0aGlzLnNldChvcHRpb25zfHx7fSl9UmVtYXJrYWJsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKG9wdGlvbnMpe2Fzc2lnbih0aGlzLm9wdGlvbnMsb3B0aW9ucyl9O1JlbWFya2FibGUucHJvdG90eXBlLmNvbmZpZ3VyZT1mdW5jdGlvbihwcmVzZXRzKXt2YXIgc2VsZj10aGlzO2lmKCFwcmVzZXRzKXt0aHJvdyBuZXcgRXJyb3IoIldyb25nIGByZW1hcmthYmxlYCBwcmVzZXQsIGNoZWNrIG5hbWUvY29udGVudCIpfWlmKHByZXNldHMub3B0aW9ucyl7c2VsZi5zZXQocHJlc2V0cy5vcHRpb25zKX1pZihwcmVzZXRzLmNvbXBvbmVudHMpe09iamVjdC5rZXlzKHByZXNldHMuY29tcG9uZW50cykuZm9yRWFjaChmdW5jdGlvbihuYW1lKXtpZihwcmVzZXRzLmNvbXBvbmVudHNbbmFtZV0ucnVsZXMpe3NlbGZbbmFtZV0ucnVsZXIuZW5hYmxlKHByZXNldHMuY29tcG9uZW50c1tuYW1lXS5ydWxlcyx0cnVlKX19KX19O1JlbWFya2FibGUucHJvdG90eXBlLnVzZT1mdW5jdGlvbihwbHVnaW4sb3B0aW9ucyl7cGx1Z2luKHRoaXMsb3B0aW9ucyk7cmV0dXJuIHRoaXN9O1JlbWFya2FibGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHN0cixlbnYpe3ZhciBzdGF0ZT1uZXcgU3RhdGVDb3JlKHRoaXMsc3RyLGVudik7dGhpcy5jb3JlLnByb2Nlc3Moc3RhdGUpO3JldHVybiBzdGF0ZS50b2tlbnN9O1JlbWFya2FibGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihzdHIsZW52KXtlbnY9ZW52fHx7fTtyZXR1cm4gdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5wYXJzZShzdHIsZW52KSx0aGlzLm9wdGlvbnMsZW52KX07UmVtYXJrYWJsZS5wcm90b3R5cGUucGFyc2VJbmxpbmU9ZnVuY3Rpb24oc3RyLGVudil7dmFyIHN0YXRlPW5ldyBTdGF0ZUNvcmUodGhpcyxzdHIsZW52KTtzdGF0ZS5pbmxpbmVNb2RlPXRydWU7dGhpcy5jb3JlLnByb2Nlc3Moc3RhdGUpO3JldHVybiBzdGF0ZS50b2tlbnN9O1JlbWFya2FibGUucHJvdG90eXBlLnJlbmRlcklubGluZT1mdW5jdGlvbihzdHIsZW52KXtlbnY9ZW52fHx7fTtyZXR1cm4gdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5wYXJzZUlubGluZShzdHIsZW52KSx0aGlzLm9wdGlvbnMsZW52KX07bW9kdWxlLmV4cG9ydHM9UmVtYXJrYWJsZTttb2R1bGUuZXhwb3J0cy51dGlscz1yZXF1aXJlKCIuL2NvbW1vbi91dGlscyIpfSx7Ii4vY29tbW9uL3V0aWxzIjo4LCIuL2NvbmZpZ3MvY29tbW9ubWFyayI6OSwiLi9jb25maWdzL2RlZmF1bHQiOjEwLCIuL2NvbmZpZ3MvZnVsbCI6MTEsIi4vcGFyc2VyX2Jsb2NrIjoxOCwiLi9wYXJzZXJfY29yZSI6MTksIi4vcGFyc2VyX2lubGluZSI6MjAsIi4vcmVuZGVyZXIiOjIxLCIuL3J1bGVyIjoyMn1dLDE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIFJ1bGVyPXJlcXVpcmUoIi4vcnVsZXIiKTt2YXIgU3RhdGVCbG9jaz1yZXF1aXJlKCIuL3J1bGVzX2Jsb2NrL3N0YXRlX2Jsb2NrIik7dmFyIF9ydWxlcz1bWyJjb2RlIixyZXF1aXJlKCIuL3J1bGVzX2Jsb2NrL2NvZGUiKV0sWyJmZW5jZXMiLHJlcXVpcmUoIi4vcnVsZXNfYmxvY2svZmVuY2VzIiksWyJwYXJhZ3JhcGgiLCJibG9ja3F1b3RlIiwibGlzdCJdXSxbImJsb2NrcXVvdGUiLHJlcXVpcmUoIi4vcnVsZXNfYmxvY2svYmxvY2txdW90ZSIpLFsicGFyYWdyYXBoIiwiYmxvY2txdW90ZSIsImxpc3QiXV0sWyJociIscmVxdWlyZSgiLi9ydWxlc19ibG9jay9ociIpLFsicGFyYWdyYXBoIiwiYmxvY2txdW90ZSIsImxpc3QiXV0sWyJsaXN0IixyZXF1aXJlKCIuL3J1bGVzX2Jsb2NrL2xpc3QiKSxbInBhcmFncmFwaCIsImJsb2NrcXVvdGUiXV0sWyJmb290bm90ZSIscmVxdWlyZSgiLi9ydWxlc19ibG9jay9mb290bm90ZSIpLFsicGFyYWdyYXBoIl1dLFsiaGVhZGluZyIscmVxdWlyZSgiLi9ydWxlc19ibG9jay9oZWFkaW5nIiksWyJwYXJhZ3JhcGgiLCJibG9ja3F1b3RlIl1dLFsibGhlYWRpbmciLHJlcXVpcmUoIi4vcnVsZXNfYmxvY2svbGhlYWRpbmciKV0sWyJodG1sYmxvY2siLHJlcXVpcmUoIi4vcnVsZXNfYmxvY2svaHRtbGJsb2NrIiksWyJwYXJhZ3JhcGgiLCJibG9ja3F1b3RlIl1dLFsidGFibGUiLHJlcXVpcmUoIi4vcnVsZXNfYmxvY2svdGFibGUiKSxbInBhcmFncmFwaCJdXSxbImRlZmxpc3QiLHJlcXVpcmUoIi4vcnVsZXNfYmxvY2svZGVmbGlzdCIpLFsicGFyYWdyYXBoIl1dLFsicGFyYWdyYXBoIixyZXF1aXJlKCIuL3J1bGVzX2Jsb2NrL3BhcmFncmFwaCIpXV07ZnVuY3Rpb24gUGFyc2VyQmxvY2soKXt0aGlzLnJ1bGVyPW5ldyBSdWxlcjtmb3IodmFyIGk9MDtpPF9ydWxlcy5sZW5ndGg7aSsrKXt0aGlzLnJ1bGVyLnB1c2goX3J1bGVzW2ldWzBdLF9ydWxlc1tpXVsxXSx7YWx0OihfcnVsZXNbaV1bMl18fFtdKS5zbGljZSgpfSl9fVBhcnNlckJsb2NrLnByb3RvdHlwZS50b2tlbml6ZT1mdW5jdGlvbihzdGF0ZSxzdGFydExpbmUsZW5kTGluZSl7dmFyIHJ1bGVzPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpO3ZhciBsZW49cnVsZXMubGVuZ3RoO3ZhciBsaW5lPXN0YXJ0TGluZTt2YXIgaGFzRW1wdHlMaW5lcz1mYWxzZTt2YXIgb2ssaTt3aGlsZShsaW5lPGVuZExpbmUpe3N0YXRlLmxpbmU9bGluZT1zdGF0ZS5za2lwRW1wdHlMaW5lcyhsaW5lKTtpZihsaW5lPj1lbmRMaW5lKXticmVha31pZihzdGF0ZS50U2hpZnRbbGluZV08c3RhdGUuYmxrSW5kZW50KXticmVha31mb3IoaT0wO2k8bGVuO2krKyl7b2s9cnVsZXNbaV0oc3RhdGUsbGluZSxlbmRMaW5lLGZhbHNlKTtpZihvayl7YnJlYWt9fXN0YXRlLnRpZ2h0PSFoYXNFbXB0eUxpbmVzO2lmKHN0YXRlLmlzRW1wdHkoc3RhdGUubGluZS0xKSl7aGFzRW1wdHlMaW5lcz10cnVlfWxpbmU9c3RhdGUubGluZTtpZihsaW5lPGVuZExpbmUmJnN0YXRlLmlzRW1wdHkobGluZSkpe2hhc0VtcHR5TGluZXM9dHJ1ZTtsaW5lKys7aWYobGluZTxlbmRMaW5lJiZzdGF0ZS5wYXJlbnRUeXBlPT09Imxpc3QiJiZzdGF0ZS5pc0VtcHR5KGxpbmUpKXticmVha31zdGF0ZS5saW5lPWxpbmV9fX07dmFyIFRBQlNfU0NBTl9SRT0vW1xuXHRdL2c7dmFyIE5FV0xJTkVTX1JFPS9ccltcblx1MDA4NV18W1x1MjQyNFx1MjAyOFx1MDA4NV0vZzt2YXIgU1BBQ0VTX1JFPS9cdTAwYTAvZztQYXJzZXJCbG9jay5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oc3RyLG9wdGlvbnMsZW52LG91dFRva2Vucyl7dmFyIHN0YXRlLGxpbmVTdGFydD0wLGxhc3RUYWJQb3M9MDtpZighc3RyKXtyZXR1cm5bXX1zdHI9c3RyLnJlcGxhY2UoU1BBQ0VTX1JFLCIgIik7c3RyPXN0ci5yZXBsYWNlKE5FV0xJTkVTX1JFLCJcbiIpO2lmKHN0ci5pbmRleE9mKCJcdCIpPj0wKXtzdHI9c3RyLnJlcGxhY2UoVEFCU19TQ0FOX1JFLGZ1bmN0aW9uKG1hdGNoLG9mZnNldCl7dmFyIHJlc3VsdDtpZihzdHIuY2hhckNvZGVBdChvZmZzZXQpPT09MTApe2xpbmVTdGFydD1vZmZzZXQrMTtsYXN0VGFiUG9zPTA7cmV0dXJuIG1hdGNofXJlc3VsdD0iICAgICIuc2xpY2UoKG9mZnNldC1saW5lU3RhcnQtbGFzdFRhYlBvcyklNCk7bGFzdFRhYlBvcz1vZmZzZXQtbGluZVN0YXJ0KzE7cmV0dXJuIHJlc3VsdH0pfXN0YXRlPW5ldyBTdGF0ZUJsb2NrKHN0cix0aGlzLG9wdGlvbnMsZW52LG91dFRva2Vucyk7dGhpcy50b2tlbml6ZShzdGF0ZSxzdGF0ZS5saW5lLHN0YXRlLmxpbmVNYXgpfTttb2R1bGUuZXhwb3J0cz1QYXJzZXJCbG9ja30seyIuL3J1bGVyIjoyMiwiLi9ydWxlc19ibG9jay9ibG9ja3F1b3RlIjoyNCwiLi9ydWxlc19ibG9jay9jb2RlIjoyNSwiLi9ydWxlc19ibG9jay9kZWZsaXN0IjoyNiwiLi9ydWxlc19ibG9jay9mZW5jZXMiOjI3LCIuL3J1bGVzX2Jsb2NrL2Zvb3Rub3RlIjoyOCwiLi9ydWxlc19ibG9jay9oZWFkaW5nIjoyOSwiLi9ydWxlc19ibG9jay9ociI6MzAsIi4vcnVsZXNfYmxvY2svaHRtbGJsb2NrIjozMSwiLi9ydWxlc19ibG9jay9saGVhZGluZyI6MzIsIi4vcnVsZXNfYmxvY2svbGlzdCI6MzMsIi4vcnVsZXNfYmxvY2svcGFyYWdyYXBoIjozNCwiLi9ydWxlc19ibG9jay9zdGF0ZV9ibG9jayI6MzUsIi4vcnVsZXNfYmxvY2svdGFibGUiOjM2fV0sMTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgUnVsZXI9cmVxdWlyZSgiLi9ydWxlciIpO3ZhciBfcnVsZXM9W1siYmxvY2siLHJlcXVpcmUoIi4vcnVsZXNfY29yZS9ibG9jayIpXSxbImFiYnIiLHJlcXVpcmUoIi4vcnVsZXNfY29yZS9hYmJyIildLFsicmVmZXJlbmNlcyIscmVxdWlyZSgiLi9ydWxlc19jb3JlL3JlZmVyZW5jZXMiKV0sWyJpbmxpbmUiLHJlcXVpcmUoIi4vcnVsZXNfY29yZS9pbmxpbmUiKV0sWyJmb290bm90ZV90YWlsIixyZXF1aXJlKCIuL3J1bGVzX2NvcmUvZm9vdG5vdGVfdGFpbCIpXSxbImFiYnIyIixyZXF1aXJlKCIuL3J1bGVzX2NvcmUvYWJicjIiKV0sWyJyZXBsYWNlbWVudHMiLHJlcXVpcmUoIi4vcnVsZXNfY29yZS9yZXBsYWNlbWVudHMiKV0sWyJzbWFydHF1b3RlcyIscmVxdWlyZSgiLi9ydWxlc19jb3JlL3NtYXJ0cXVvdGVzIildLFsibGlua2lmeSIscmVxdWlyZSgiLi9ydWxlc19jb3JlL2xpbmtpZnkiKV1dO2Z1bmN0aW9uIENvcmUoKXt0aGlzLm9wdGlvbnM9e307dGhpcy5ydWxlcj1uZXcgUnVsZXI7Zm9yKHZhciBpPTA7aTxfcnVsZXMubGVuZ3RoO2krKyl7dGhpcy5ydWxlci5wdXNoKF9ydWxlc1tpXVswXSxfcnVsZXNbaV1bMV0pfX1Db3JlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKHN0YXRlKXt2YXIgaSxsLHJ1bGVzO3J1bGVzPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpO2ZvcihpPTAsbD1ydWxlcy5sZW5ndGg7aTxsO2krKyl7cnVsZXNbaV0oc3RhdGUpfX07bW9kdWxlLmV4cG9ydHM9Q29yZX0seyIuL3J1bGVyIjoyMiwiLi9ydWxlc19jb3JlL2FiYnIiOjM3LCIuL3J1bGVzX2NvcmUvYWJicjIiOjM4LCIuL3J1bGVzX2NvcmUvYmxvY2siOjM5LCIuL3J1bGVzX2NvcmUvZm9vdG5vdGVfdGFpbCI6NDAsIi4vcnVsZXNfY29yZS9pbmxpbmUiOjQxLCIuL3J1bGVzX2NvcmUvbGlua2lmeSI6NDIsIi4vcnVsZXNfY29yZS9yZWZlcmVuY2VzIjo0MywiLi9ydWxlc19jb3JlL3JlcGxhY2VtZW50cyI6NDQsIi4vcnVsZXNfY29yZS9zbWFydHF1b3RlcyI6NDV9XSwyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciBSdWxlcj1yZXF1aXJlKCIuL3J1bGVyIik7dmFyIFN0YXRlSW5saW5lPXJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL3N0YXRlX2lubGluZSIpO3ZhciB1dGlscz1yZXF1aXJlKCIuL2NvbW1vbi91dGlscyIpO3ZhciBfcnVsZXM9W1sidGV4dCIscmVxdWlyZSgiLi9ydWxlc19pbmxpbmUvdGV4dCIpXSxbIm5ld2xpbmUiLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL25ld2xpbmUiKV0sWyJlc2NhcGUiLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL2VzY2FwZSIpXSxbImJhY2t0aWNrcyIscmVxdWlyZSgiLi9ydWxlc19pbmxpbmUvYmFja3RpY2tzIildLFsiZGVsIixyZXF1aXJlKCIuL3J1bGVzX2lubGluZS9kZWwiKV0sWyJpbnMiLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL2lucyIpXSxbIm1hcmsiLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL21hcmsiKV0sWyJlbXBoYXNpcyIscmVxdWlyZSgiLi9ydWxlc19pbmxpbmUvZW1waGFzaXMiKV0sWyJzdWIiLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL3N1YiIpXSxbInN1cCIscmVxdWlyZSgiLi9ydWxlc19pbmxpbmUvc3VwIildLFsibGlua3MiLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL2xpbmtzIildLFsiZm9vdG5vdGVfaW5saW5lIixyZXF1aXJlKCIuL3J1bGVzX2lubGluZS9mb290bm90ZV9pbmxpbmUiKV0sWyJmb290bm90ZV9yZWYiLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL2Zvb3Rub3RlX3JlZiIpXSxbImF1dG9saW5rIixyZXF1aXJlKCIuL3J1bGVzX2lubGluZS9hdXRvbGluayIpXSxbImh0bWx0YWciLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL2h0bWx0YWciKV0sWyJlbnRpdHkiLHJlcXVpcmUoIi4vcnVsZXNfaW5saW5lL2VudGl0eSIpXV07ZnVuY3Rpb24gUGFyc2VySW5saW5lKCl7dGhpcy5ydWxlcj1uZXcgUnVsZXI7Zm9yKHZhciBpPTA7aTxfcnVsZXMubGVuZ3RoO2krKyl7dGhpcy5ydWxlci5wdXNoKF9ydWxlc1tpXVswXSxfcnVsZXNbaV1bMV0pfXRoaXMudmFsaWRhdGVMaW5rPXZhbGlkYXRlTGlua31QYXJzZXJJbmxpbmUucHJvdG90eXBlLnNraXBUb2tlbj1mdW5jdGlvbihzdGF0ZSl7dmFyIHJ1bGVzPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpO3ZhciBsZW49cnVsZXMubGVuZ3RoO3ZhciBwb3M9c3RhdGUucG9zO3ZhciBpLGNhY2hlZF9wb3M7aWYoKGNhY2hlZF9wb3M9c3RhdGUuY2FjaGVHZXQocG9zKSk+MCl7c3RhdGUucG9zPWNhY2hlZF9wb3M7cmV0dXJufWZvcihpPTA7aTxsZW47aSsrKXtpZihydWxlc1tpXShzdGF0ZSx0cnVlKSl7c3RhdGUuY2FjaGVTZXQocG9zLHN0YXRlLnBvcyk7cmV0dXJufX1zdGF0ZS5wb3MrKztzdGF0ZS5jYWNoZVNldChwb3Msc3RhdGUucG9zKX07UGFyc2VySW5saW5lLnByb3RvdHlwZS50b2tlbml6ZT1mdW5jdGlvbihzdGF0ZSl7dmFyIHJ1bGVzPXRoaXMucnVsZXIuZ2V0UnVsZXMoIiIpO3ZhciBsZW49cnVsZXMubGVuZ3RoO3ZhciBlbmQ9c3RhdGUucG9zTWF4O3ZhciBvayxpO3doaWxlKHN0YXRlLnBvczxlbmQpe2ZvcihpPTA7aTxsZW47aSsrKXtvaz1ydWxlc1tpXShzdGF0ZSxmYWxzZSk7aWYob2spe2JyZWFrfX1pZihvayl7aWYoc3RhdGUucG9zPj1lbmQpe2JyZWFrfWNvbnRpbnVlfXN0YXRlLnBlbmRpbmcrPXN0YXRlLnNyY1tzdGF0ZS5wb3MrK119aWYoc3RhdGUucGVuZGluZyl7c3RhdGUucHVzaFBlbmRpbmcoKX19O1BhcnNlcklubGluZS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oc3RyLG9wdGlvbnMsZW52LG91dFRva2Vucyl7dmFyIHN0YXRlPW5ldyBTdGF0ZUlubGluZShzdHIsdGhpcyxvcHRpb25zLGVudixvdXRUb2tlbnMpO3RoaXMudG9rZW5pemUoc3RhdGUpfTtmdW5jdGlvbiB2YWxpZGF0ZUxpbmsodXJsKXt2YXIgQkFEX1BST1RPQ09MUz1bInZic2NyaXB0IiwiamF2YXNjcmlwdCIsImZpbGUiLCJkYXRhIl07dmFyIHN0cj11cmwudHJpbSgpLnRvTG93ZXJDYXNlKCk7c3RyPXV0aWxzLnJlcGxhY2VFbnRpdGllcyhzdHIpO2lmKHN0ci5pbmRleE9mKCI6IikhPT0tMSYmQkFEX1BST1RPQ09MUy5pbmRleE9mKHN0ci5zcGxpdCgiOiIpWzBdKSE9PS0xKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9bW9kdWxlLmV4cG9ydHM9UGFyc2VySW5saW5lfSx7Ii4vY29tbW9uL3V0aWxzIjo4LCIuL3J1bGVyIjoyMiwiLi9ydWxlc19pbmxpbmUvYXV0b2xpbmsiOjQ2LCIuL3J1bGVzX2lubGluZS9iYWNrdGlja3MiOjQ3LCIuL3J1bGVzX2lubGluZS9kZWwiOjQ4LCIuL3J1bGVzX2lubGluZS9lbXBoYXNpcyI6NDksIi4vcnVsZXNfaW5saW5lL2VudGl0eSI6NTAsIi4vcnVsZXNfaW5saW5lL2VzY2FwZSI6NTEsIi4vcnVsZXNfaW5saW5lL2Zvb3Rub3RlX2lubGluZSI6NTIsIi4vcnVsZXNfaW5saW5lL2Zvb3Rub3RlX3JlZiI6NTMsIi4vcnVsZXNfaW5saW5lL2h0bWx0YWciOjU0LCIuL3J1bGVzX2lubGluZS9pbnMiOjU1LCIuL3J1bGVzX2lubGluZS9saW5rcyI6NTYsIi4vcnVsZXNfaW5saW5lL21hcmsiOjU3LCIuL3J1bGVzX2lubGluZS9uZXdsaW5lIjo1OCwiLi9ydWxlc19pbmxpbmUvc3RhdGVfaW5saW5lIjo1OSwiLi9ydWxlc19pbmxpbmUvc3ViIjo2MCwiLi9ydWxlc19pbmxpbmUvc3VwIjo2MSwiLi9ydWxlc19pbmxpbmUvdGV4dCI6NjJ9XSwyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciB1dGlscz1yZXF1aXJlKCIuL2NvbW1vbi91dGlscyIpO3ZhciBydWxlcz1yZXF1aXJlKCIuL3J1bGVzIik7bW9kdWxlLmV4cG9ydHM9UmVuZGVyZXI7ZnVuY3Rpb24gUmVuZGVyZXIoKXt0aGlzLnJ1bGVzPXV0aWxzLmFzc2lnbih7fSxydWxlcyk7dGhpcy5nZXRCcmVhaz1ydWxlcy5nZXRCcmVha31SZW5kZXJlci5wcm90b3R5cGUucmVuZGVySW5saW5lPWZ1bmN0aW9uKHRva2VucyxvcHRpb25zLGVudil7dmFyIF9ydWxlcz10aGlzLnJ1bGVzO3ZhciBsZW49dG9rZW5zLmxlbmd0aCxpPTA7dmFyIHJlc3VsdD0iIjt3aGlsZShsZW4tLSl7cmVzdWx0Kz1fcnVsZXNbdG9rZW5zW2ldLnR5cGVdKHRva2VucyxpKyssb3B0aW9ucyxlbnYsdGhpcyl9cmV0dXJuIHJlc3VsdH07UmVuZGVyZXIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbih0b2tlbnMsb3B0aW9ucyxlbnYpe3ZhciBfcnVsZXM9dGhpcy5ydWxlczt2YXIgbGVuPXRva2Vucy5sZW5ndGgsaT0tMTt2YXIgcmVzdWx0PSIiO3doaWxlKCsraTxsZW4pe2lmKHRva2Vuc1tpXS50eXBlPT09ImlubGluZSIpe3Jlc3VsdCs9dGhpcy5yZW5kZXJJbmxpbmUodG9rZW5zW2ldLmNoaWxkcmVuLG9wdGlvbnMsZW52KX1lbHNle3Jlc3VsdCs9X3J1bGVzW3Rva2Vuc1tpXS50eXBlXSh0b2tlbnMsaSxvcHRpb25zLGVudix0aGlzKX19cmV0dXJuIHJlc3VsdH19LHsiLi9jb21tb24vdXRpbHMiOjgsIi4vcnVsZXMiOjIzfV0sMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBSdWxlcigpe3RoaXMuX19ydWxlc19fPVtdO3RoaXMuX19jYWNoZV9fPW51bGx9UnVsZXIucHJvdG90eXBlLl9fZmluZF9fPWZ1bmN0aW9uKG5hbWUpe3ZhciBsZW49dGhpcy5fX3J1bGVzX18ubGVuZ3RoO3ZhciBpPS0xO3doaWxlKGxlbi0tKXtpZih0aGlzLl9fcnVsZXNfX1srK2ldLm5hbWU9PT1uYW1lKXtyZXR1cm4gaX19cmV0dXJuLTF9O1J1bGVyLnByb3RvdHlwZS5fX2NvbXBpbGVfXz1mdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7dmFyIGNoYWlucz1bIiJdO3NlbGYuX19ydWxlc19fLmZvckVhY2goZnVuY3Rpb24ocnVsZSl7aWYoIXJ1bGUuZW5hYmxlZCl7cmV0dXJufXJ1bGUuYWx0LmZvckVhY2goZnVuY3Rpb24oYWx0TmFtZSl7aWYoY2hhaW5zLmluZGV4T2YoYWx0TmFtZSk8MCl7Y2hhaW5zLnB1c2goYWx0TmFtZSl9fSl9KTtzZWxmLl9fY2FjaGVfXz17fTtjaGFpbnMuZm9yRWFjaChmdW5jdGlvbihjaGFpbil7c2VsZi5fX2NhY2hlX19bY2hhaW5dPVtdO3NlbGYuX19ydWxlc19fLmZvckVhY2goZnVuY3Rpb24ocnVsZSl7aWYoIXJ1bGUuZW5hYmxlZCl7cmV0dXJufWlmKGNoYWluJiZydWxlLmFsdC5pbmRleE9mKGNoYWluKTwwKXsKcmV0dXJufXNlbGYuX19jYWNoZV9fW2NoYWluXS5wdXNoKHJ1bGUuZm4pfSl9KX07UnVsZXIucHJvdG90eXBlLmF0PWZ1bmN0aW9uKG5hbWUsZm4sb3B0aW9ucyl7dmFyIGlkeD10aGlzLl9fZmluZF9fKG5hbWUpO3ZhciBvcHQ9b3B0aW9uc3x8e307aWYoaWR4PT09LTEpe3Rocm93IG5ldyBFcnJvcigiUGFyc2VyIHJ1bGUgbm90IGZvdW5kOiAiK25hbWUpfXRoaXMuX19ydWxlc19fW2lkeF0uZm49Zm47dGhpcy5fX3J1bGVzX19baWR4XS5hbHQ9b3B0LmFsdHx8W107dGhpcy5fX2NhY2hlX189bnVsbH07UnVsZXIucHJvdG90eXBlLmJlZm9yZT1mdW5jdGlvbihiZWZvcmVOYW1lLHJ1bGVOYW1lLGZuLG9wdGlvbnMpe3ZhciBpZHg9dGhpcy5fX2ZpbmRfXyhiZWZvcmVOYW1lKTt2YXIgb3B0PW9wdGlvbnN8fHt9O2lmKGlkeD09PS0xKXt0aHJvdyBuZXcgRXJyb3IoIlBhcnNlciBydWxlIG5vdCBmb3VuZDogIitiZWZvcmVOYW1lKX10aGlzLl9fcnVsZXNfXy5zcGxpY2UoaWR4LDAse25hbWU6cnVsZU5hbWUsZW5hYmxlZDp0cnVlLGZuOmZuLGFsdDpvcHQuYWx0fHxbXX0pO3RoaXMuX19jYWNoZV9fPW51bGx9O1J1bGVyLnByb3RvdHlwZS5hZnRlcj1mdW5jdGlvbihhZnRlck5hbWUscnVsZU5hbWUsZm4sb3B0aW9ucyl7dmFyIGlkeD10aGlzLl9fZmluZF9fKGFmdGVyTmFtZSk7dmFyIG9wdD1vcHRpb25zfHx7fTtpZihpZHg9PT0tMSl7dGhyb3cgbmV3IEVycm9yKCJQYXJzZXIgcnVsZSBub3QgZm91bmQ6ICIrYWZ0ZXJOYW1lKX10aGlzLl9fcnVsZXNfXy5zcGxpY2UoaWR4KzEsMCx7bmFtZTpydWxlTmFtZSxlbmFibGVkOnRydWUsZm46Zm4sYWx0Om9wdC5hbHR8fFtdfSk7dGhpcy5fX2NhY2hlX189bnVsbH07UnVsZXIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24ocnVsZU5hbWUsZm4sb3B0aW9ucyl7dmFyIG9wdD1vcHRpb25zfHx7fTt0aGlzLl9fcnVsZXNfXy5wdXNoKHtuYW1lOnJ1bGVOYW1lLGVuYWJsZWQ6dHJ1ZSxmbjpmbixhbHQ6b3B0LmFsdHx8W119KTt0aGlzLl9fY2FjaGVfXz1udWxsfTtSdWxlci5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKGxpc3Qsc3RyaWN0KXtsaXN0PSFBcnJheS5pc0FycmF5KGxpc3QpP1tsaXN0XTpsaXN0O2lmKHN0cmljdCl7dGhpcy5fX3J1bGVzX18uZm9yRWFjaChmdW5jdGlvbihydWxlKXtydWxlLmVuYWJsZWQ9ZmFsc2V9KX1saXN0LmZvckVhY2goZnVuY3Rpb24obmFtZSl7dmFyIGlkeD10aGlzLl9fZmluZF9fKG5hbWUpO2lmKGlkeDwwKXt0aHJvdyBuZXcgRXJyb3IoIlJ1bGVzIG1hbmFnZXI6IGludmFsaWQgcnVsZSBuYW1lICIrbmFtZSl9dGhpcy5fX3J1bGVzX19baWR4XS5lbmFibGVkPXRydWV9LHRoaXMpO3RoaXMuX19jYWNoZV9fPW51bGx9O1J1bGVyLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKGxpc3Qpe2xpc3Q9IUFycmF5LmlzQXJyYXkobGlzdCk/W2xpc3RdOmxpc3Q7bGlzdC5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpe3ZhciBpZHg9dGhpcy5fX2ZpbmRfXyhuYW1lKTtpZihpZHg8MCl7dGhyb3cgbmV3IEVycm9yKCJSdWxlcyBtYW5hZ2VyOiBpbnZhbGlkIHJ1bGUgbmFtZSAiK25hbWUpfXRoaXMuX19ydWxlc19fW2lkeF0uZW5hYmxlZD1mYWxzZX0sdGhpcyk7dGhpcy5fX2NhY2hlX189bnVsbH07UnVsZXIucHJvdG90eXBlLmdldFJ1bGVzPWZ1bmN0aW9uKGNoYWluTmFtZSl7aWYodGhpcy5fX2NhY2hlX189PT1udWxsKXt0aGlzLl9fY29tcGlsZV9fKCl9cmV0dXJuIHRoaXMuX19jYWNoZV9fW2NoYWluTmFtZV18fFtdfTttb2R1bGUuZXhwb3J0cz1SdWxlcn0se31dLDIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIGhhcz1yZXF1aXJlKCIuL2NvbW1vbi91dGlscyIpLmhhczt2YXIgdW5lc2NhcGVNZD1yZXF1aXJlKCIuL2NvbW1vbi91dGlscyIpLnVuZXNjYXBlTWQ7dmFyIHJlcGxhY2VFbnRpdGllcz1yZXF1aXJlKCIuL2NvbW1vbi91dGlscyIpLnJlcGxhY2VFbnRpdGllczt2YXIgZXNjYXBlSHRtbD1yZXF1aXJlKCIuL2NvbW1vbi91dGlscyIpLmVzY2FwZUh0bWw7dmFyIHJ1bGVzPXt9O3J1bGVzLmJsb2NrcXVvdGVfb3Blbj1mdW5jdGlvbigpe3JldHVybiI8YmxvY2txdW90ZT5cbiJ9O3J1bGVzLmJsb2NrcXVvdGVfY2xvc2U9ZnVuY3Rpb24odG9rZW5zLGlkeCl7cmV0dXJuIjwvYmxvY2txdW90ZT4iK2dldEJyZWFrKHRva2VucyxpZHgpfTtydWxlcy5jb2RlPWZ1bmN0aW9uKHRva2VucyxpZHgpe2lmKHRva2Vuc1tpZHhdLmJsb2NrKXtyZXR1cm4iPHByZT48Y29kZT4iK2VzY2FwZUh0bWwodG9rZW5zW2lkeF0uY29udGVudCkrIjwvY29kZT48L3ByZT4iK2dldEJyZWFrKHRva2VucyxpZHgpfXJldHVybiI8Y29kZT4iK2VzY2FwZUh0bWwodG9rZW5zW2lkeF0uY29udGVudCkrIjwvY29kZT4ifTtydWxlcy5mZW5jZT1mdW5jdGlvbih0b2tlbnMsaWR4LG9wdGlvbnMsZW52LGluc3RhbmNlKXt2YXIgdG9rZW49dG9rZW5zW2lkeF07dmFyIGxhbmdDbGFzcz0iIjt2YXIgbGFuZ1ByZWZpeD1vcHRpb25zLmxhbmdQcmVmaXg7dmFyIGxhbmdOYW1lPSIiLGZlbmNlcyxmZW5jZU5hbWU7dmFyIGhpZ2hsaWdodGVkO2lmKHRva2VuLnBhcmFtcyl7ZmVuY2VzPXRva2VuLnBhcmFtcy5zcGxpdCgvXHMrL2cpO2ZlbmNlTmFtZT1mZW5jZXMuam9pbigiICIpO2lmKGhhcyhpbnN0YW5jZS5ydWxlcy5mZW5jZV9jdXN0b20sZmVuY2VzWzBdKSl7cmV0dXJuIGluc3RhbmNlLnJ1bGVzLmZlbmNlX2N1c3RvbVtmZW5jZXNbMF1dKHRva2VucyxpZHgsb3B0aW9ucyxlbnYsaW5zdGFuY2UpfWxhbmdOYW1lPWVzY2FwZUh0bWwocmVwbGFjZUVudGl0aWVzKHVuZXNjYXBlTWQoZmVuY2VOYW1lKSkpO2xhbmdDbGFzcz0nIGNsYXNzPSInK2xhbmdQcmVmaXgrbGFuZ05hbWUrJyInfWlmKG9wdGlvbnMuaGlnaGxpZ2h0KXtoaWdobGlnaHRlZD1vcHRpb25zLmhpZ2hsaWdodC5hcHBseShvcHRpb25zLmhpZ2hsaWdodCxbdG9rZW4uY29udGVudF0uY29uY2F0KGZlbmNlcykpfHxlc2NhcGVIdG1sKHRva2VuLmNvbnRlbnQpfWVsc2V7aGlnaGxpZ2h0ZWQ9ZXNjYXBlSHRtbCh0b2tlbi5jb250ZW50KX1yZXR1cm4iPHByZT48Y29kZSIrbGFuZ0NsYXNzKyI+IitoaWdobGlnaHRlZCsiPC9jb2RlPjwvcHJlPiIrZ2V0QnJlYWsodG9rZW5zLGlkeCl9O3J1bGVzLmZlbmNlX2N1c3RvbT17fTtydWxlcy5oZWFkaW5nX29wZW49ZnVuY3Rpb24odG9rZW5zLGlkeCl7cmV0dXJuIjxoIit0b2tlbnNbaWR4XS5oTGV2ZWwrIj4ifTtydWxlcy5oZWFkaW5nX2Nsb3NlPWZ1bmN0aW9uKHRva2VucyxpZHgpe3JldHVybiI8L2giK3Rva2Vuc1tpZHhdLmhMZXZlbCsiPlxuIn07cnVsZXMuaHI9ZnVuY3Rpb24odG9rZW5zLGlkeCxvcHRpb25zKXtyZXR1cm4ob3B0aW9ucy54aHRtbE91dD8iPGhyIC8+IjoiPGhyPiIpK2dldEJyZWFrKHRva2VucyxpZHgpfTtydWxlcy5idWxsZXRfbGlzdF9vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjx1bD5cbiJ9O3J1bGVzLmJ1bGxldF9saXN0X2Nsb3NlPWZ1bmN0aW9uKHRva2VucyxpZHgpe3JldHVybiI8L3VsPiIrZ2V0QnJlYWsodG9rZW5zLGlkeCl9O3J1bGVzLmxpc3RfaXRlbV9vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjxsaT4ifTtydWxlcy5saXN0X2l0ZW1fY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9saT5cbiJ9O3J1bGVzLm9yZGVyZWRfbGlzdF9vcGVuPWZ1bmN0aW9uKHRva2VucyxpZHgpe3ZhciB0b2tlbj10b2tlbnNbaWR4XTt2YXIgb3JkZXI9dG9rZW4ub3JkZXI+MT8nIHN0YXJ0PSInK3Rva2VuLm9yZGVyKyciJzoiIjtyZXR1cm4iPG9sIitvcmRlcisiPlxuIn07cnVsZXMub3JkZXJlZF9saXN0X2Nsb3NlPWZ1bmN0aW9uKHRva2VucyxpZHgpe3JldHVybiI8L29sPiIrZ2V0QnJlYWsodG9rZW5zLGlkeCl9O3J1bGVzLnBhcmFncmFwaF9vcGVuPWZ1bmN0aW9uKHRva2VucyxpZHgpe3JldHVybiB0b2tlbnNbaWR4XS50aWdodD8iIjoiPHA+In07cnVsZXMucGFyYWdyYXBoX2Nsb3NlPWZ1bmN0aW9uKHRva2VucyxpZHgpe3ZhciBhZGRCcmVhaz0hKHRva2Vuc1tpZHhdLnRpZ2h0JiZpZHgmJnRva2Vuc1tpZHgtMV0udHlwZT09PSJpbmxpbmUiJiYhdG9rZW5zW2lkeC0xXS5jb250ZW50KTtyZXR1cm4odG9rZW5zW2lkeF0udGlnaHQ/IiI6IjwvcD4iKSsoYWRkQnJlYWs/Z2V0QnJlYWsodG9rZW5zLGlkeCk6IiIpfTtydWxlcy5saW5rX29wZW49ZnVuY3Rpb24odG9rZW5zLGlkeCxvcHRpb25zKXt2YXIgdGl0bGU9dG9rZW5zW2lkeF0udGl0bGU/JyB0aXRsZT0iJytlc2NhcGVIdG1sKHJlcGxhY2VFbnRpdGllcyh0b2tlbnNbaWR4XS50aXRsZSkpKyciJzoiIjt2YXIgdGFyZ2V0PW9wdGlvbnMubGlua1RhcmdldD8nIHRhcmdldD0iJytvcHRpb25zLmxpbmtUYXJnZXQrJyInOiIiO3JldHVybic8YSBocmVmPSInK2VzY2FwZUh0bWwodG9rZW5zW2lkeF0uaHJlZikrJyInK3RpdGxlK3RhcmdldCsiPiJ9O3J1bGVzLmxpbmtfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9hPiJ9O3J1bGVzLmltYWdlPWZ1bmN0aW9uKHRva2VucyxpZHgsb3B0aW9ucyl7dmFyIHNyYz0nIHNyYz0iJytlc2NhcGVIdG1sKHRva2Vuc1tpZHhdLnNyYykrJyInO3ZhciB0aXRsZT10b2tlbnNbaWR4XS50aXRsZT8nIHRpdGxlPSInK2VzY2FwZUh0bWwocmVwbGFjZUVudGl0aWVzKHRva2Vuc1tpZHhdLnRpdGxlKSkrJyInOiIiO3ZhciBhbHQ9JyBhbHQ9IicrKHRva2Vuc1tpZHhdLmFsdD9lc2NhcGVIdG1sKHJlcGxhY2VFbnRpdGllcyh1bmVzY2FwZU1kKHRva2Vuc1tpZHhdLmFsdCkpKToiIikrJyInO3ZhciBzdWZmaXg9b3B0aW9ucy54aHRtbE91dD8iIC8iOiIiO3JldHVybiI8aW1nIitzcmMrYWx0K3RpdGxlK3N1ZmZpeCsiPiJ9O3J1bGVzLnRhYmxlX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPHRhYmxlPlxuIn07cnVsZXMudGFibGVfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC90YWJsZT5cbiJ9O3J1bGVzLnRoZWFkX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPHRoZWFkPlxuIn07cnVsZXMudGhlYWRfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC90aGVhZD5cbiJ9O3J1bGVzLnRib2R5X29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPHRib2R5PlxuIn07cnVsZXMudGJvZHlfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC90Ym9keT5cbiJ9O3J1bGVzLnRyX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPHRyPiJ9O3J1bGVzLnRyX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvdHI+XG4ifTtydWxlcy50aF9vcGVuPWZ1bmN0aW9uKHRva2VucyxpZHgpe3ZhciB0b2tlbj10b2tlbnNbaWR4XTtyZXR1cm4iPHRoIisodG9rZW4uYWxpZ24/JyBzdHlsZT0idGV4dC1hbGlnbjonK3Rva2VuLmFsaWduKyciJzoiIikrIj4ifTtydWxlcy50aF9jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L3RoPiJ9O3J1bGVzLnRkX29wZW49ZnVuY3Rpb24odG9rZW5zLGlkeCl7dmFyIHRva2VuPXRva2Vuc1tpZHhdO3JldHVybiI8dGQiKyh0b2tlbi5hbGlnbj8nIHN0eWxlPSJ0ZXh0LWFsaWduOicrdG9rZW4uYWxpZ24rJyInOiIiKSsiPiJ9O3J1bGVzLnRkX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvdGQ+In07cnVsZXMuc3Ryb25nX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPHN0cm9uZz4ifTtydWxlcy5zdHJvbmdfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9zdHJvbmc+In07cnVsZXMuZW1fb3Blbj1mdW5jdGlvbigpe3JldHVybiI8ZW0+In07cnVsZXMuZW1fY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9lbT4ifTtydWxlcy5kZWxfb3Blbj1mdW5jdGlvbigpe3JldHVybiI8ZGVsPiJ9O3J1bGVzLmRlbF9jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L2RlbD4ifTtydWxlcy5pbnNfb3Blbj1mdW5jdGlvbigpe3JldHVybiI8aW5zPiJ9O3J1bGVzLmluc19jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L2lucz4ifTtydWxlcy5tYXJrX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPG1hcms+In07cnVsZXMubWFya19jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L21hcms+In07cnVsZXMuc3ViPWZ1bmN0aW9uKHRva2VucyxpZHgpe3JldHVybiI8c3ViPiIrZXNjYXBlSHRtbCh0b2tlbnNbaWR4XS5jb250ZW50KSsiPC9zdWI+In07cnVsZXMuc3VwPWZ1bmN0aW9uKHRva2VucyxpZHgpe3JldHVybiI8c3VwPiIrZXNjYXBlSHRtbCh0b2tlbnNbaWR4XS5jb250ZW50KSsiPC9zdXA+In07cnVsZXMuaGFyZGJyZWFrPWZ1bmN0aW9uKHRva2VucyxpZHgsb3B0aW9ucyl7cmV0dXJuIG9wdGlvbnMueGh0bWxPdXQ/IjxiciAvPlxuIjoiPGJyPlxuIn07cnVsZXMuc29mdGJyZWFrPWZ1bmN0aW9uKHRva2VucyxpZHgsb3B0aW9ucyl7cmV0dXJuIG9wdGlvbnMuYnJlYWtzP29wdGlvbnMueGh0bWxPdXQ/IjxiciAvPlxuIjoiPGJyPlxuIjoiXG4ifTtydWxlcy50ZXh0PWZ1bmN0aW9uKHRva2VucyxpZHgpe3JldHVybiBlc2NhcGVIdG1sKHRva2Vuc1tpZHhdLmNvbnRlbnQpfTtydWxlcy5odG1sYmxvY2s9ZnVuY3Rpb24odG9rZW5zLGlkeCl7cmV0dXJuIHRva2Vuc1tpZHhdLmNvbnRlbnR9O3J1bGVzLmh0bWx0YWc9ZnVuY3Rpb24odG9rZW5zLGlkeCl7cmV0dXJuIHRva2Vuc1tpZHhdLmNvbnRlbnR9O3J1bGVzLmFiYnJfb3Blbj1mdW5jdGlvbih0b2tlbnMsaWR4KXtyZXR1cm4nPGFiYnIgdGl0bGU9IicrZXNjYXBlSHRtbChyZXBsYWNlRW50aXRpZXModG9rZW5zW2lkeF0udGl0bGUpKSsnIj4nfTtydWxlcy5hYmJyX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvYWJicj4ifTtydWxlcy5mb290bm90ZV9yZWY9ZnVuY3Rpb24odG9rZW5zLGlkeCl7dmFyIG49TnVtYmVyKHRva2Vuc1tpZHhdLmlkKzEpLnRvU3RyaW5nKCk7dmFyIGlkPSJmbnJlZiIrbjtpZih0b2tlbnNbaWR4XS5zdWJJZD4wKXtpZCs9IjoiK3Rva2Vuc1tpZHhdLnN1YklkfXJldHVybic8c3VwIGNsYXNzPSJmb290bm90ZS1yZWYiPjxhIGhyZWY9IiNmbicrbisnIiBpZD0iJytpZCsnIj5bJytuKyJdPC9hPjwvc3VwPiJ9O3J1bGVzLmZvb3Rub3RlX2Jsb2NrX29wZW49ZnVuY3Rpb24odG9rZW5zLGlkeCxvcHRpb25zKXt2YXIgaHI9b3B0aW9ucy54aHRtbE91dD8nPGhyIGNsYXNzPSJmb290bm90ZXMtc2VwIiAvPlxuJzonPGhyIGNsYXNzPSJmb290bm90ZXMtc2VwIj5cbic7cmV0dXJuIGhyKyc8c2VjdGlvbiBjbGFzcz0iZm9vdG5vdGVzIj5cbjxvbCBjbGFzcz0iZm9vdG5vdGVzLWxpc3QiPlxuJ307cnVsZXMuZm9vdG5vdGVfYmxvY2tfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9vbD5cbjwvc2VjdGlvbj5cbiJ9O3J1bGVzLmZvb3Rub3RlX29wZW49ZnVuY3Rpb24odG9rZW5zLGlkeCl7dmFyIGlkPU51bWJlcih0b2tlbnNbaWR4XS5pZCsxKS50b1N0cmluZygpO3JldHVybic8bGkgaWQ9ImZuJytpZCsnIiAgY2xhc3M9ImZvb3Rub3RlLWl0ZW0iPid9O3J1bGVzLmZvb3Rub3RlX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvbGk+XG4ifTtydWxlcy5mb290bm90ZV9hbmNob3I9ZnVuY3Rpb24odG9rZW5zLGlkeCl7dmFyIG49TnVtYmVyKHRva2Vuc1tpZHhdLmlkKzEpLnRvU3RyaW5nKCk7dmFyIGlkPSJmbnJlZiIrbjtpZih0b2tlbnNbaWR4XS5zdWJJZD4wKXtpZCs9IjoiK3Rva2Vuc1tpZHhdLnN1YklkfXJldHVybicgPGEgaHJlZj0iIycraWQrJyIgY2xhc3M9ImZvb3Rub3RlLWJhY2tyZWYiPuKGqTwvYT4nfTtydWxlcy5kbF9vcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIjxkbD5cbiJ9O3J1bGVzLmR0X29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPGR0PiJ9O3J1bGVzLmRkX29wZW49ZnVuY3Rpb24oKXtyZXR1cm4iPGRkPiJ9O3J1bGVzLmRsX2Nsb3NlPWZ1bmN0aW9uKCl7cmV0dXJuIjwvZGw+XG4ifTtydWxlcy5kdF9jbG9zZT1mdW5jdGlvbigpe3JldHVybiI8L2R0PlxuIn07cnVsZXMuZGRfY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4iPC9kZD5cbiJ9O2Z1bmN0aW9uIG5leHRUb2tlbih0b2tlbnMsaWR4KXtpZigrK2lkeD49dG9rZW5zLmxlbmd0aC0yKXtyZXR1cm4gaWR4fWlmKHRva2Vuc1tpZHhdLnR5cGU9PT0icGFyYWdyYXBoX29wZW4iJiZ0b2tlbnNbaWR4XS50aWdodCYmKHRva2Vuc1tpZHgrMV0udHlwZT09PSJpbmxpbmUiJiZ0b2tlbnNbaWR4KzFdLmNvbnRlbnQubGVuZ3RoPT09MCkmJih0b2tlbnNbaWR4KzJdLnR5cGU9PT0icGFyYWdyYXBoX2Nsb3NlIiYmdG9rZW5zW2lkeCsyXS50aWdodCkpe3JldHVybiBuZXh0VG9rZW4odG9rZW5zLGlkeCsyKX1yZXR1cm4gaWR4fXZhciBnZXRCcmVhaz1ydWxlcy5nZXRCcmVhaz1mdW5jdGlvbiBnZXRCcmVhayh0b2tlbnMsaWR4KXtpZHg9bmV4dFRva2VuKHRva2VucyxpZHgpO2lmKGlkeDx0b2tlbnMubGVuZ3RoJiZ0b2tlbnNbaWR4XS50eXBlPT09Imxpc3RfaXRlbV9jbG9zZSIpe3JldHVybiIifXJldHVybiJcbiJ9O21vZHVsZS5leHBvcnRzPXJ1bGVzfSx7Ii4vY29tbW9uL3V0aWxzIjo4fV0sMjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBibG9ja3F1b3RlKHN0YXRlLHN0YXJ0TGluZSxlbmRMaW5lLHNpbGVudCl7dmFyIG5leHRMaW5lLGxhc3RMaW5lRW1wdHksb2xkVFNoaWZ0LG9sZEJNYXJrcyxvbGRJbmRlbnQsb2xkUGFyZW50VHlwZSxsaW5lcyx0ZXJtaW5hdG9yUnVsZXMsaSxsLHRlcm1pbmF0ZSxwb3M9c3RhdGUuYk1hcmtzW3N0YXJ0TGluZV0rc3RhdGUudFNoaWZ0W3N0YXJ0TGluZV0sbWF4PXN0YXRlLmVNYXJrc1tzdGFydExpbmVdO2lmKHBvcz5tYXgpe3JldHVybiBmYWxzZX1pZihzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MrKykhPT02Mil7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLmxldmVsPj1zdGF0ZS5vcHRpb25zLm1heE5lc3Rpbmcpe3JldHVybiBmYWxzZX1pZihzaWxlbnQpe3JldHVybiB0cnVlfWlmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk9PT0zMil7cG9zKyt9b2xkSW5kZW50PXN0YXRlLmJsa0luZGVudDtzdGF0ZS5ibGtJbmRlbnQ9MDtvbGRCTWFya3M9W3N0YXRlLmJNYXJrc1tzdGFydExpbmVdXTtzdGF0ZS5iTWFya3Nbc3RhcnRMaW5lXT1wb3M7cG9zPXBvczxtYXg/c3RhdGUuc2tpcFNwYWNlcyhwb3MpOnBvcztsYXN0TGluZUVtcHR5PXBvcz49bWF4O29sZFRTaGlmdD1bc3RhdGUudFNoaWZ0W3N0YXJ0TGluZV1dO3N0YXRlLnRTaGlmdFtzdGFydExpbmVdPXBvcy1zdGF0ZS5iTWFya3Nbc3RhcnRMaW5lXTt0ZXJtaW5hdG9yUnVsZXM9c3RhdGUucGFyc2VyLnJ1bGVyLmdldFJ1bGVzKCJibG9ja3F1b3RlIik7Zm9yKG5leHRMaW5lPXN0YXJ0TGluZSsxO25leHRMaW5lPGVuZExpbmU7bmV4dExpbmUrKyl7cG9zPXN0YXRlLmJNYXJrc1tuZXh0TGluZV0rc3RhdGUudFNoaWZ0W25leHRMaW5lXTttYXg9c3RhdGUuZU1hcmtzW25leHRMaW5lXTtpZihwb3M+PW1heCl7YnJlYWt9aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKyspPT09NjIpe2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk9PT0zMil7cG9zKyt9b2xkQk1hcmtzLnB1c2goc3RhdGUuYk1hcmtzW25leHRMaW5lXSk7c3RhdGUuYk1hcmtzW25leHRMaW5lXT1wb3M7cG9zPXBvczxtYXg/c3RhdGUuc2tpcFNwYWNlcyhwb3MpOnBvcztsYXN0TGluZUVtcHR5PXBvcz49bWF4O29sZFRTaGlmdC5wdXNoKHN0YXRlLnRTaGlmdFtuZXh0TGluZV0pO3N0YXRlLnRTaGlmdFtuZXh0TGluZV09cG9zLXN0YXRlLmJNYXJrc1tuZXh0TGluZV07Y29udGludWV9aWYobGFzdExpbmVFbXB0eSl7YnJlYWt9dGVybWluYXRlPWZhbHNlO2ZvcihpPTAsbD10ZXJtaW5hdG9yUnVsZXMubGVuZ3RoO2k8bDtpKyspe2lmKHRlcm1pbmF0b3JSdWxlc1tpXShzdGF0ZSxuZXh0TGluZSxlbmRMaW5lLHRydWUpKXt0ZXJtaW5hdGU9dHJ1ZTticmVha319aWYodGVybWluYXRlKXticmVha31vbGRCTWFya3MucHVzaChzdGF0ZS5iTWFya3NbbmV4dExpbmVdKTtvbGRUU2hpZnQucHVzaChzdGF0ZS50U2hpZnRbbmV4dExpbmVdKTtzdGF0ZS50U2hpZnRbbmV4dExpbmVdPS0xMzM3fW9sZFBhcmVudFR5cGU9c3RhdGUucGFyZW50VHlwZTtzdGF0ZS5wYXJlbnRUeXBlPSJibG9ja3F1b3RlIjtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9vcGVuIixsaW5lczpsaW5lcz1bc3RhcnRMaW5lLDBdLGxldmVsOnN0YXRlLmxldmVsKyt9KTtzdGF0ZS5wYXJzZXIudG9rZW5pemUoc3RhdGUsc3RhcnRMaW5lLG5leHRMaW5lKTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiYmxvY2txdW90ZV9jbG9zZSIsbGV2ZWw6LS1zdGF0ZS5sZXZlbH0pO3N0YXRlLnBhcmVudFR5cGU9b2xkUGFyZW50VHlwZTtsaW5lc1sxXT1zdGF0ZS5saW5lO2ZvcihpPTA7aTxvbGRUU2hpZnQubGVuZ3RoO2krKyl7c3RhdGUuYk1hcmtzW2krc3RhcnRMaW5lXT1vbGRCTWFya3NbaV07c3RhdGUudFNoaWZ0W2krc3RhcnRMaW5lXT1vbGRUU2hpZnRbaV19c3RhdGUuYmxrSW5kZW50PW9sZEluZGVudDtyZXR1cm4gdHJ1ZX19LHt9XSwyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGNvZGUoc3RhdGUsc3RhcnRMaW5lLGVuZExpbmUpe3ZhciBuZXh0TGluZSxsYXN0O2lmKHN0YXRlLnRTaGlmdFtzdGFydExpbmVdLXN0YXRlLmJsa0luZGVudDw0KXtyZXR1cm4gZmFsc2V9bGFzdD1uZXh0TGluZT1zdGFydExpbmUrMTt3aGlsZShuZXh0TGluZTxlbmRMaW5lKXtpZihzdGF0ZS5pc0VtcHR5KG5leHRMaW5lKSl7bmV4dExpbmUrKztjb250aW51ZX1pZihzdGF0ZS50U2hpZnRbbmV4dExpbmVdLXN0YXRlLmJsa0luZGVudD49NCl7bmV4dExpbmUrKztsYXN0PW5leHRMaW5lO2NvbnRpbnVlfWJyZWFrfXN0YXRlLmxpbmU9bmV4dExpbmU7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImNvZGUiLGNvbnRlbnQ6c3RhdGUuZ2V0TGluZXMoc3RhcnRMaW5lLGxhc3QsNCtzdGF0ZS5ibGtJbmRlbnQsdHJ1ZSksYmxvY2s6dHJ1ZSxsaW5lczpbc3RhcnRMaW5lLHN0YXRlLmxpbmVdLGxldmVsOnN0YXRlLmxldmVsfSk7cmV0dXJuIHRydWV9fSx7fV0sMjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBza2lwTWFya2VyKHN0YXRlLGxpbmUpe3ZhciBwb3MsbWFya2VyLHN0YXJ0PXN0YXRlLmJNYXJrc1tsaW5lXStzdGF0ZS50U2hpZnRbbGluZV0sbWF4PXN0YXRlLmVNYXJrc1tsaW5lXTtpZihzdGFydD49bWF4KXtyZXR1cm4tMX1tYXJrZXI9c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQrKyk7aWYobWFya2VyIT09MTI2JiZtYXJrZXIhPT01OCl7cmV0dXJuLTF9cG9zPXN0YXRlLnNraXBTcGFjZXMoc3RhcnQpO2lmKHN0YXJ0PT09cG9zKXtyZXR1cm4tMX1pZihwb3M+PW1heCl7cmV0dXJuLTF9cmV0dXJuIHBvc31mdW5jdGlvbiBtYXJrVGlnaHRQYXJhZ3JhcGhzKHN0YXRlLGlkeCl7dmFyIGksbCxsZXZlbD1zdGF0ZS5sZXZlbCsyO2ZvcihpPWlkeCsyLGw9c3RhdGUudG9rZW5zLmxlbmd0aC0yO2k8bDtpKyspe2lmKHN0YXRlLnRva2Vuc1tpXS5sZXZlbD09PWxldmVsJiZzdGF0ZS50b2tlbnNbaV0udHlwZT09PSJwYXJhZ3JhcGhfb3BlbiIpe3N0YXRlLnRva2Vuc1tpKzJdLnRpZ2h0PXRydWU7c3RhdGUudG9rZW5zW2ldLnRpZ2h0PXRydWU7aSs9Mn19fW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGRlZmxpc3Qoc3RhdGUsc3RhcnRMaW5lLGVuZExpbmUsc2lsZW50KXt2YXIgY29udGVudFN0YXJ0LGRkTGluZSxkdExpbmUsaXRlbUxpbmVzLGxpc3RMaW5lcyxsaXN0VG9rSWR4LG5leHRMaW5lLG9sZEluZGVudCxvbGREREluZGVudCxvbGRQYXJlbnRUeXBlLG9sZFRTaGlmdCxvbGRUaWdodCxwcmV2RW1wdHlFbmQsdGlnaHQ7aWYoc2lsZW50KXtpZihzdGF0ZS5kZEluZGVudDwwKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHNraXBNYXJrZXIoc3RhdGUsc3RhcnRMaW5lKT49MH1uZXh0TGluZT1zdGFydExpbmUrMTtpZihzdGF0ZS5pc0VtcHR5KG5leHRMaW5lKSl7aWYoKytuZXh0TGluZT5lbmRMaW5lKXtyZXR1cm4gZmFsc2V9fWlmKHN0YXRlLnRTaGlmdFtuZXh0TGluZV08c3RhdGUuYmxrSW5kZW50KXtyZXR1cm4gZmFsc2V9Y29udGVudFN0YXJ0PXNraXBNYXJrZXIoc3RhdGUsbmV4dExpbmUpO2lmKGNvbnRlbnRTdGFydDwwKXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUubGV2ZWw+PXN0YXRlLm9wdGlvbnMubWF4TmVzdGluZyl7cmV0dXJuIGZhbHNlfWxpc3RUb2tJZHg9c3RhdGUudG9rZW5zLmxlbmd0aDtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiZGxfb3BlbiIsbGluZXM6bGlzdExpbmVzPVtzdGFydExpbmUsMF0sbGV2ZWw6c3RhdGUubGV2ZWwrK30pO2R0TGluZT1zdGFydExpbmU7ZGRMaW5lPW5leHRMaW5lO09VVEVSOmZvcig7Oyl7dGlnaHQ9dHJ1ZTtwcmV2RW1wdHlFbmQ9ZmFsc2U7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImR0X29wZW4iLGxpbmVzOltkdExpbmUsZHRMaW5lXSxsZXZlbDpzdGF0ZS5sZXZlbCsrfSk7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDpzdGF0ZS5nZXRMaW5lcyhkdExpbmUsZHRMaW5lKzEsc3RhdGUuYmxrSW5kZW50LGZhbHNlKS50cmltKCksbGV2ZWw6c3RhdGUubGV2ZWwrMSxsaW5lczpbZHRMaW5lLGR0TGluZV0sY2hpbGRyZW46W119KTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiZHRfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KTtmb3IoOzspe3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJkZF9vcGVuIixsaW5lczppdGVtTGluZXM9W25leHRMaW5lLDBdLGxldmVsOnN0YXRlLmxldmVsKyt9KTtvbGRUaWdodD1zdGF0ZS50aWdodDtvbGREREluZGVudD1zdGF0ZS5kZEluZGVudDtvbGRJbmRlbnQ9c3RhdGUuYmxrSW5kZW50O29sZFRTaGlmdD1zdGF0ZS50U2hpZnRbZGRMaW5lXTtvbGRQYXJlbnRUeXBlPXN0YXRlLnBhcmVudFR5cGU7c3RhdGUuYmxrSW5kZW50PXN0YXRlLmRkSW5kZW50PXN0YXRlLnRTaGlmdFtkZExpbmVdKzI7c3RhdGUudFNoaWZ0W2RkTGluZV09Y29udGVudFN0YXJ0LXN0YXRlLmJNYXJrc1tkZExpbmVdO3N0YXRlLnRpZ2h0PXRydWU7c3RhdGUucGFyZW50VHlwZT0iZGVmbGlzdCI7c3RhdGUucGFyc2VyLnRva2VuaXplKHN0YXRlLGRkTGluZSxlbmRMaW5lLHRydWUpO2lmKCFzdGF0ZS50aWdodHx8cHJldkVtcHR5RW5kKXt0aWdodD1mYWxzZX1wcmV2RW1wdHlFbmQ9c3RhdGUubGluZS1kZExpbmU+MSYmc3RhdGUuaXNFbXB0eShzdGF0ZS5saW5lLTEpO3N0YXRlLnRTaGlmdFtkZExpbmVdPW9sZFRTaGlmdDtzdGF0ZS50aWdodD1vbGRUaWdodDtzdGF0ZS5wYXJlbnRUeXBlPW9sZFBhcmVudFR5cGU7c3RhdGUuYmxrSW5kZW50PW9sZEluZGVudDtzdGF0ZS5kZEluZGVudD1vbGREREluZGVudDtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiZGRfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KTtpdGVtTGluZXNbMV09bmV4dExpbmU9c3RhdGUubGluZTtpZihuZXh0TGluZT49ZW5kTGluZSl7YnJlYWsgT1VURVJ9aWYoc3RhdGUudFNoaWZ0W25leHRMaW5lXTxzdGF0ZS5ibGtJbmRlbnQpe2JyZWFrIE9VVEVSfWNvbnRlbnRTdGFydD1za2lwTWFya2VyKHN0YXRlLG5leHRMaW5lKTtpZihjb250ZW50U3RhcnQ8MCl7YnJlYWt9ZGRMaW5lPW5leHRMaW5lfWlmKG5leHRMaW5lPj1lbmRMaW5lKXticmVha31kdExpbmU9bmV4dExpbmU7aWYoc3RhdGUuaXNFbXB0eShkdExpbmUpKXticmVha31pZihzdGF0ZS50U2hpZnRbZHRMaW5lXTxzdGF0ZS5ibGtJbmRlbnQpe2JyZWFrfWRkTGluZT1kdExpbmUrMTtpZihkZExpbmU+PWVuZExpbmUpe2JyZWFrfWlmKHN0YXRlLmlzRW1wdHkoZGRMaW5lKSl7ZGRMaW5lKyt9aWYoZGRMaW5lPj1lbmRMaW5lKXticmVha31pZihzdGF0ZS50U2hpZnRbZGRMaW5lXTxzdGF0ZS5ibGtJbmRlbnQpe2JyZWFrfWNvbnRlbnRTdGFydD1za2lwTWFya2VyKHN0YXRlLGRkTGluZSk7aWYoY29udGVudFN0YXJ0PDApe2JyZWFrfX1zdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiZGxfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KTtsaXN0TGluZXNbMV09bmV4dExpbmU7c3RhdGUubGluZT1uZXh0TGluZTtpZih0aWdodCl7bWFya1RpZ2h0UGFyYWdyYXBocyhzdGF0ZSxsaXN0VG9rSWR4KX1yZXR1cm4gdHJ1ZX19LHt9XSwyNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGZlbmNlcyhzdGF0ZSxzdGFydExpbmUsZW5kTGluZSxzaWxlbnQpe3ZhciBtYXJrZXIsbGVuLHBhcmFtcyxuZXh0TGluZSxtZW0saGF2ZUVuZE1hcmtlcj1mYWxzZSxwb3M9c3RhdGUuYk1hcmtzW3N0YXJ0TGluZV0rc3RhdGUudFNoaWZ0W3N0YXJ0TGluZV0sbWF4PXN0YXRlLmVNYXJrc1tzdGFydExpbmVdO2lmKHBvcyszPm1heCl7cmV0dXJuIGZhbHNlfW1hcmtlcj1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpO2lmKG1hcmtlciE9PTEyNiYmbWFya2VyIT09OTYpe3JldHVybiBmYWxzZX1tZW09cG9zO3Bvcz1zdGF0ZS5za2lwQ2hhcnMocG9zLG1hcmtlcik7bGVuPXBvcy1tZW07aWYobGVuPDMpe3JldHVybiBmYWxzZX1wYXJhbXM9c3RhdGUuc3JjLnNsaWNlKHBvcyxtYXgpLnRyaW0oKTtpZihwYXJhbXMuaW5kZXhPZigiYCIpPj0wKXtyZXR1cm4gZmFsc2V9aWYoc2lsZW50KXtyZXR1cm4gdHJ1ZX1uZXh0TGluZT1zdGFydExpbmU7Zm9yKDs7KXtuZXh0TGluZSsrO2lmKG5leHRMaW5lPj1lbmRMaW5lKXticmVha31wb3M9bWVtPXN0YXRlLmJNYXJrc1tuZXh0TGluZV0rc3RhdGUudFNoaWZ0W25leHRMaW5lXTttYXg9c3RhdGUuZU1hcmtzW25leHRMaW5lXTtpZihwb3M8bWF4JiZzdGF0ZS50U2hpZnRbbmV4dExpbmVdPHN0YXRlLmJsa0luZGVudCl7YnJlYWt9aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKSE9PW1hcmtlcil7Y29udGludWV9aWYoc3RhdGUudFNoaWZ0W25leHRMaW5lXS1zdGF0ZS5ibGtJbmRlbnQ+PTQpe2NvbnRpbnVlfXBvcz1zdGF0ZS5za2lwQ2hhcnMocG9zLG1hcmtlcik7aWYocG9zLW1lbTxsZW4pe2NvbnRpbnVlfXBvcz1zdGF0ZS5za2lwU3BhY2VzKHBvcyk7aWYocG9zPG1heCl7Y29udGludWV9aGF2ZUVuZE1hcmtlcj10cnVlO2JyZWFrfWxlbj1zdGF0ZS50U2hpZnRbc3RhcnRMaW5lXTtzdGF0ZS5saW5lPW5leHRMaW5lKyhoYXZlRW5kTWFya2VyPzE6MCk7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImZlbmNlIixwYXJhbXM6cGFyYW1zLGNvbnRlbnQ6c3RhdGUuZ2V0TGluZXMoc3RhcnRMaW5lKzEsbmV4dExpbmUsbGVuLHRydWUpLGxpbmVzOltzdGFydExpbmUsc3RhdGUubGluZV0sbGV2ZWw6c3RhdGUubGV2ZWx9KTtyZXR1cm4gdHJ1ZX19LHt9XSwyODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGZvb3Rub3RlKHN0YXRlLHN0YXJ0TGluZSxlbmRMaW5lLHNpbGVudCl7dmFyIG9sZEJNYXJrLG9sZFRTaGlmdCxvbGRQYXJlbnRUeXBlLHBvcyxsYWJlbCxzdGFydD1zdGF0ZS5iTWFya3Nbc3RhcnRMaW5lXStzdGF0ZS50U2hpZnRbc3RhcnRMaW5lXSxtYXg9c3RhdGUuZU1hcmtzW3N0YXJ0TGluZV07aWYoc3RhcnQrND5tYXgpe3JldHVybiBmYWxzZX1pZihzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGFydCkhPT05MSl7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXJ0KzEpIT09OTQpe3JldHVybiBmYWxzZX1pZihzdGF0ZS5sZXZlbD49c3RhdGUub3B0aW9ucy5tYXhOZXN0aW5nKXtyZXR1cm4gZmFsc2V9Zm9yKHBvcz1zdGFydCsyO3BvczxtYXg7cG9zKyspe2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk9PT0zMil7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk9PT05Myl7YnJlYWt9fWlmKHBvcz09PXN0YXJ0KzIpe3JldHVybiBmYWxzZX1pZihwb3MrMT49bWF4fHxzdGF0ZS5zcmMuY2hhckNvZGVBdCgrK3BvcykhPT01OCl7cmV0dXJuIGZhbHNlfWlmKHNpbGVudCl7cmV0dXJuIHRydWV9cG9zKys7aWYoIXN0YXRlLmVudi5mb290bm90ZXMpe3N0YXRlLmVudi5mb290bm90ZXM9e319aWYoIXN0YXRlLmVudi5mb290bm90ZXMucmVmcyl7c3RhdGUuZW52LmZvb3Rub3Rlcy5yZWZzPXt9fWxhYmVsPXN0YXRlLnNyYy5zbGljZShzdGFydCsyLHBvcy0yKTtzdGF0ZS5lbnYuZm9vdG5vdGVzLnJlZnNbIjoiK2xhYmVsXT0tMTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiZm9vdG5vdGVfcmVmZXJlbmNlX29wZW4iLGxhYmVsOmxhYmVsLGxldmVsOnN0YXRlLmxldmVsKyt9KTtvbGRCTWFyaz1zdGF0ZS5iTWFya3Nbc3RhcnRMaW5lXTtvbGRUU2hpZnQ9c3RhdGUudFNoaWZ0W3N0YXJ0TGluZV07b2xkUGFyZW50VHlwZT1zdGF0ZS5wYXJlbnRUeXBlO3N0YXRlLnRTaGlmdFtzdGFydExpbmVdPXN0YXRlLnNraXBTcGFjZXMocG9zKS1wb3M7c3RhdGUuYk1hcmtzW3N0YXJ0TGluZV09cG9zO3N0YXRlLmJsa0luZGVudCs9NDtzdGF0ZS5wYXJlbnRUeXBlPSJmb290bm90ZSI7aWYoc3RhdGUudFNoaWZ0W3N0YXJ0TGluZV08c3RhdGUuYmxrSW5kZW50KXtzdGF0ZS50U2hpZnRbc3RhcnRMaW5lXSs9c3RhdGUuYmxrSW5kZW50O3N0YXRlLmJNYXJrc1tzdGFydExpbmVdLT1zdGF0ZS5ibGtJbmRlbnR9c3RhdGUucGFyc2VyLnRva2VuaXplKHN0YXRlLHN0YXJ0TGluZSxlbmRMaW5lLHRydWUpO3N0YXRlLnBhcmVudFR5cGU9b2xkUGFyZW50VHlwZTtzdGF0ZS5ibGtJbmRlbnQtPTQ7c3RhdGUudFNoaWZ0W3N0YXJ0TGluZV09b2xkVFNoaWZ0O3N0YXRlLmJNYXJrc1tzdGFydExpbmVdPW9sZEJNYXJrO3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJmb290bm90ZV9yZWZlcmVuY2VfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KTtyZXR1cm4gdHJ1ZX19LHt9XSwyOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGhlYWRpbmcoc3RhdGUsc3RhcnRMaW5lLGVuZExpbmUsc2lsZW50KXt2YXIgY2gsbGV2ZWwsdG1wLHBvcz1zdGF0ZS5iTWFya3Nbc3RhcnRMaW5lXStzdGF0ZS50U2hpZnRbc3RhcnRMaW5lXSxtYXg9c3RhdGUuZU1hcmtzW3N0YXJ0TGluZV07aWYocG9zPj1tYXgpe3JldHVybiBmYWxzZX1jaD1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpO2lmKGNoIT09MzV8fHBvcz49bWF4KXtyZXR1cm4gZmFsc2V9bGV2ZWw9MTtjaD1zdGF0ZS5zcmMuY2hhckNvZGVBdCgrK3Bvcyk7d2hpbGUoY2g9PT0zNSYmcG9zPG1heCYmbGV2ZWw8PTYpe2xldmVsKys7Y2g9c3RhdGUuc3JjLmNoYXJDb2RlQXQoKytwb3MpfWlmKGxldmVsPjZ8fHBvczxtYXgmJmNoIT09MzIpe3JldHVybiBmYWxzZX1pZihzaWxlbnQpe3JldHVybiB0cnVlfW1heD1zdGF0ZS5za2lwQ2hhcnNCYWNrKG1heCwzMixwb3MpO3RtcD1zdGF0ZS5za2lwQ2hhcnNCYWNrKG1heCwzNSxwb3MpO2lmKHRtcD5wb3MmJnN0YXRlLnNyYy5jaGFyQ29kZUF0KHRtcC0xKT09PTMyKXttYXg9dG1wfXN0YXRlLmxpbmU9c3RhcnRMaW5lKzE7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmdfb3BlbiIsaExldmVsOmxldmVsLGxpbmVzOltzdGFydExpbmUsc3RhdGUubGluZV0sbGV2ZWw6c3RhdGUubGV2ZWx9KTtpZihwb3M8bWF4KXtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiaW5saW5lIixjb250ZW50OnN0YXRlLnNyYy5zbGljZShwb3MsbWF4KS50cmltKCksbGV2ZWw6c3RhdGUubGV2ZWwrMSxsaW5lczpbc3RhcnRMaW5lLHN0YXRlLmxpbmVdLGNoaWxkcmVuOltdfSl9c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmdfY2xvc2UiLGhMZXZlbDpsZXZlbCxsZXZlbDpzdGF0ZS5sZXZlbH0pO3JldHVybiB0cnVlfX0se31dLDMwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaHIoc3RhdGUsc3RhcnRMaW5lLGVuZExpbmUsc2lsZW50KXt2YXIgbWFya2VyLGNudCxjaCxwb3M9c3RhdGUuYk1hcmtzW3N0YXJ0TGluZV0sbWF4PXN0YXRlLmVNYXJrc1tzdGFydExpbmVdO3Bvcys9c3RhdGUudFNoaWZ0W3N0YXJ0TGluZV07aWYocG9zPm1heCl7cmV0dXJuIGZhbHNlfW1hcmtlcj1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MrKyk7aWYobWFya2VyIT09NDImJm1hcmtlciE9PTQ1JiZtYXJrZXIhPT05NSl7cmV0dXJuIGZhbHNlfWNudD0xO3doaWxlKHBvczxtYXgpe2NoPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcysrKTtpZihjaCE9PW1hcmtlciYmY2ghPT0zMil7cmV0dXJuIGZhbHNlfWlmKGNoPT09bWFya2VyKXtjbnQrK319aWYoY250PDMpe3JldHVybiBmYWxzZX1pZihzaWxlbnQpe3JldHVybiB0cnVlfXN0YXRlLmxpbmU9c3RhcnRMaW5lKzE7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImhyIixsaW5lczpbc3RhcnRMaW5lLHN0YXRlLmxpbmVdLGxldmVsOnN0YXRlLmxldmVsfSk7cmV0dXJuIHRydWV9fSx7fV0sMzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgYmxvY2tfbmFtZXM9cmVxdWlyZSgiLi4vY29tbW9uL2h0bWxfYmxvY2tzIik7dmFyIEhUTUxfVEFHX09QRU5fUkU9L148KFthLXpBLVpdezEsMTV9KVtcc1wvPl0vO3ZhciBIVE1MX1RBR19DTE9TRV9SRT0vXjxcLyhbYS16QS1aXXsxLDE1fSlbXHM+XS87ZnVuY3Rpb24gaXNMZXR0ZXIoY2gpe3ZhciBsYz1jaHwzMjtyZXR1cm4gbGM+PTk3JiZsYzw9MTIyfW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGh0bWxibG9jayhzdGF0ZSxzdGFydExpbmUsZW5kTGluZSxzaWxlbnQpe3ZhciBjaCxtYXRjaCxuZXh0TGluZSxwb3M9c3RhdGUuYk1hcmtzW3N0YXJ0TGluZV0sbWF4PXN0YXRlLmVNYXJrc1tzdGFydExpbmVdLHNoaWZ0PXN0YXRlLnRTaGlmdFtzdGFydExpbmVdO3Bvcys9c2hpZnQ7aWYoIXN0YXRlLm9wdGlvbnMuaHRtbCl7cmV0dXJuIGZhbHNlfWlmKHNoaWZ0PjN8fHBvcysyPj1tYXgpe3JldHVybiBmYWxzZX1pZihzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpIT09NjApe3JldHVybiBmYWxzZX1jaD1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MrMSk7aWYoY2g9PT0zM3x8Y2g9PT02Myl7aWYoc2lsZW50KXtyZXR1cm4gdHJ1ZX19ZWxzZSBpZihjaD09PTQ3fHxpc0xldHRlcihjaCkpe2lmKGNoPT09NDcpe21hdGNoPXN0YXRlLnNyYy5zbGljZShwb3MsbWF4KS5tYXRjaChIVE1MX1RBR19DTE9TRV9SRSk7aWYoIW1hdGNoKXtyZXR1cm4gZmFsc2V9fWVsc2V7bWF0Y2g9c3RhdGUuc3JjLnNsaWNlKHBvcyxtYXgpLm1hdGNoKEhUTUxfVEFHX09QRU5fUkUpO2lmKCFtYXRjaCl7cmV0dXJuIGZhbHNlfX1pZihibG9ja19uYW1lc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXSE9PXRydWUpe3JldHVybiBmYWxzZX1pZihzaWxlbnQpe3JldHVybiB0cnVlfX1lbHNle3JldHVybiBmYWxzZX1uZXh0TGluZT1zdGFydExpbmUrMTt3aGlsZShuZXh0TGluZTxzdGF0ZS5saW5lTWF4JiYhc3RhdGUuaXNFbXB0eShuZXh0TGluZSkpe25leHRMaW5lKyt9c3RhdGUubGluZT1uZXh0TGluZTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiaHRtbGJsb2NrIixsZXZlbDpzdGF0ZS5sZXZlbCxsaW5lczpbc3RhcnRMaW5lLHN0YXRlLmxpbmVdLGNvbnRlbnQ6c3RhdGUuZ2V0TGluZXMoc3RhcnRMaW5lLG5leHRMaW5lLDAsdHJ1ZSl9KTtyZXR1cm4gdHJ1ZX19LHsiLi4vY29tbW9uL2h0bWxfYmxvY2tzIjo1fV0sMzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBsaGVhZGluZyhzdGF0ZSxzdGFydExpbmUsZW5kTGluZSl7dmFyIG1hcmtlcixwb3MsbWF4LG5leHQ9c3RhcnRMaW5lKzE7aWYobmV4dD49ZW5kTGluZSl7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLnRTaGlmdFtuZXh0XTxzdGF0ZS5ibGtJbmRlbnQpe3JldHVybiBmYWxzZX1pZihzdGF0ZS50U2hpZnRbbmV4dF0tc3RhdGUuYmxrSW5kZW50PjMpe3JldHVybiBmYWxzZX1wb3M9c3RhdGUuYk1hcmtzW25leHRdK3N0YXRlLnRTaGlmdFtuZXh0XTttYXg9c3RhdGUuZU1hcmtzW25leHRdO2lmKHBvcz49bWF4KXtyZXR1cm4gZmFsc2V9bWFya2VyPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk7aWYobWFya2VyIT09NDUmJm1hcmtlciE9PTYxKXtyZXR1cm4gZmFsc2V9cG9zPXN0YXRlLnNraXBDaGFycyhwb3MsbWFya2VyKTtwb3M9c3RhdGUuc2tpcFNwYWNlcyhwb3MpO2lmKHBvczxtYXgpe3JldHVybiBmYWxzZX1wb3M9c3RhdGUuYk1hcmtzW3N0YXJ0TGluZV0rc3RhdGUudFNoaWZ0W3N0YXJ0TGluZV07c3RhdGUubGluZT1uZXh0KzE7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImhlYWRpbmdfb3BlbiIsaExldmVsOm1hcmtlcj09PTYxPzE6MixsaW5lczpbc3RhcnRMaW5lLHN0YXRlLmxpbmVdLGxldmVsOnN0YXRlLmxldmVsfSk7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDpzdGF0ZS5zcmMuc2xpY2UocG9zLHN0YXRlLmVNYXJrc1tzdGFydExpbmVdKS50cmltKCksbGV2ZWw6c3RhdGUubGV2ZWwrMSxsaW5lczpbc3RhcnRMaW5lLHN0YXRlLmxpbmUtMV0sY2hpbGRyZW46W119KTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiaGVhZGluZ19jbG9zZSIsaExldmVsOm1hcmtlcj09PTYxPzE6MixsZXZlbDpzdGF0ZS5sZXZlbH0pO3JldHVybiB0cnVlfX0se31dLDMzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gc2tpcEJ1bGxldExpc3RNYXJrZXIoc3RhdGUsc3RhcnRMaW5lKXt2YXIgbWFya2VyLHBvcyxtYXg7cG9zPXN0YXRlLmJNYXJrc1tzdGFydExpbmVdK3N0YXRlLnRTaGlmdFtzdGFydExpbmVdO21heD1zdGF0ZS5lTWFya3Nbc3RhcnRMaW5lXTtpZihwb3M+PW1heCl7cmV0dXJuLTF9bWFya2VyPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcysrKTtpZihtYXJrZXIhPT00MiYmbWFya2VyIT09NDUmJm1hcmtlciE9PTQzKXtyZXR1cm4tMX1pZihwb3M8bWF4JiZzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpIT09MzIpe3JldHVybi0xfXJldHVybiBwb3N9ZnVuY3Rpb24gc2tpcE9yZGVyZWRMaXN0TWFya2VyKHN0YXRlLHN0YXJ0TGluZSl7dmFyIGNoLHBvcz1zdGF0ZS5iTWFya3Nbc3RhcnRMaW5lXStzdGF0ZS50U2hpZnRbc3RhcnRMaW5lXSxtYXg9c3RhdGUuZU1hcmtzW3N0YXJ0TGluZV07aWYocG9zKzE+PW1heCl7cmV0dXJuLTF9Y2g9c3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKyspO2lmKGNoPDQ4fHxjaD41Nyl7cmV0dXJuLTF9Zm9yKDs7KXtpZihwb3M+PW1heCl7cmV0dXJuLTF9Y2g9c3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKyspO2lmKGNoPj00OCYmY2g8PTU3KXtjb250aW51ZX1pZihjaD09PTQxfHxjaD09PTQ2KXticmVha31yZXR1cm4tMX1pZihwb3M8bWF4JiZzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpIT09MzIpe3JldHVybi0xfXJldHVybiBwb3N9ZnVuY3Rpb24gbWFya1RpZ2h0UGFyYWdyYXBocyhzdGF0ZSxpZHgpe3ZhciBpLGwsbGV2ZWw9c3RhdGUubGV2ZWwrMjtmb3IoaT1pZHgrMixsPXN0YXRlLnRva2Vucy5sZW5ndGgtMjtpPGw7aSsrKXtpZihzdGF0ZS50b2tlbnNbaV0ubGV2ZWw9PT1sZXZlbCYmc3RhdGUudG9rZW5zW2ldLnR5cGU9PT0icGFyYWdyYXBoX29wZW4iKXtzdGF0ZS50b2tlbnNbaSsyXS50aWdodD10cnVlO3N0YXRlLnRva2Vuc1tpXS50aWdodD10cnVlO2krPTJ9fX1tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBsaXN0KHN0YXRlLHN0YXJ0TGluZSxlbmRMaW5lLHNpbGVudCl7dmFyIG5leHRMaW5lLGluZGVudCxvbGRUU2hpZnQsb2xkSW5kZW50LG9sZFRpZ2h0LG9sZFBhcmVudFR5cGUsc3RhcnQscG9zQWZ0ZXJNYXJrZXIsbWF4LGluZGVudEFmdGVyTWFya2VyLG1hcmtlclZhbHVlLG1hcmtlckNoYXJDb2RlLGlzT3JkZXJlZCxjb250ZW50U3RhcnQsbGlzdFRva0lkeCxwcmV2RW1wdHlFbmQsbGlzdExpbmVzLGl0ZW1MaW5lcyx0aWdodD10cnVlLHRlcm1pbmF0b3JSdWxlcyxpLGwsdGVybWluYXRlO2lmKChwb3NBZnRlck1hcmtlcj1za2lwT3JkZXJlZExpc3RNYXJrZXIoc3RhdGUsc3RhcnRMaW5lKSk+PTApe2lzT3JkZXJlZD10cnVlfWVsc2UgaWYoKHBvc0FmdGVyTWFya2VyPXNraXBCdWxsZXRMaXN0TWFya2VyKHN0YXRlLHN0YXJ0TGluZSkpPj0wKXtpc09yZGVyZWQ9ZmFsc2V9ZWxzZXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUubGV2ZWw+PXN0YXRlLm9wdGlvbnMubWF4TmVzdGluZyl7cmV0dXJuIGZhbHNlfW1hcmtlckNoYXJDb2RlPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvc0FmdGVyTWFya2VyLTEpO2lmKHNpbGVudCl7cmV0dXJuIHRydWV9bGlzdFRva0lkeD1zdGF0ZS50b2tlbnMubGVuZ3RoO2lmKGlzT3JkZXJlZCl7c3RhcnQ9c3RhdGUuYk1hcmtzW3N0YXJ0TGluZV0rc3RhdGUudFNoaWZ0W3N0YXJ0TGluZV07bWFya2VyVmFsdWU9TnVtYmVyKHN0YXRlLnNyYy5zdWJzdHIoc3RhcnQscG9zQWZ0ZXJNYXJrZXItc3RhcnQtMSkpO3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJvcmRlcmVkX2xpc3Rfb3BlbiIsb3JkZXI6bWFya2VyVmFsdWUsbGluZXM6bGlzdExpbmVzPVtzdGFydExpbmUsMF0sbGV2ZWw6c3RhdGUubGV2ZWwrK30pfWVsc2V7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImJ1bGxldF9saXN0X29wZW4iLGxpbmVzOmxpc3RMaW5lcz1bc3RhcnRMaW5lLDBdLGxldmVsOnN0YXRlLmxldmVsKyt9KX1uZXh0TGluZT1zdGFydExpbmU7cHJldkVtcHR5RW5kPWZhbHNlO3Rlcm1pbmF0b3JSdWxlcz1zdGF0ZS5wYXJzZXIucnVsZXIuZ2V0UnVsZXMoImxpc3QiKTt3aGlsZShuZXh0TGluZTxlbmRMaW5lKXtjb250ZW50U3RhcnQ9c3RhdGUuc2tpcFNwYWNlcyhwb3NBZnRlck1hcmtlcik7bWF4PXN0YXRlLmVNYXJrc1tuZXh0TGluZV07aWYoY29udGVudFN0YXJ0Pj1tYXgpe2luZGVudEFmdGVyTWFya2VyPTF9ZWxzZXtpbmRlbnRBZnRlck1hcmtlcj1jb250ZW50U3RhcnQtcG9zQWZ0ZXJNYXJrZXJ9aWYoaW5kZW50QWZ0ZXJNYXJrZXI+NCl7aW5kZW50QWZ0ZXJNYXJrZXI9MX1pZihpbmRlbnRBZnRlck1hcmtlcjwxKXtpbmRlbnRBZnRlck1hcmtlcj0xfWluZGVudD1wb3NBZnRlck1hcmtlci1zdGF0ZS5iTWFya3NbbmV4dExpbmVdK2luZGVudEFmdGVyTWFya2VyO3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW1fb3BlbiIsbGluZXM6aXRlbUxpbmVzPVtzdGFydExpbmUsMF0sbGV2ZWw6c3RhdGUubGV2ZWwrK30pO29sZEluZGVudD1zdGF0ZS5ibGtJbmRlbnQ7b2xkVGlnaHQ9c3RhdGUudGlnaHQ7b2xkVFNoaWZ0PXN0YXRlLnRTaGlmdFtzdGFydExpbmVdO29sZFBhcmVudFR5cGU9c3RhdGUucGFyZW50VHlwZTtzdGF0ZS50U2hpZnRbc3RhcnRMaW5lXT1jb250ZW50U3RhcnQtc3RhdGUuYk1hcmtzW3N0YXJ0TGluZV07c3RhdGUuYmxrSW5kZW50PWluZGVudDtzdGF0ZS50aWdodD10cnVlO3N0YXRlLnBhcmVudFR5cGU9Imxpc3QiO3N0YXRlLnBhcnNlci50b2tlbml6ZShzdGF0ZSxzdGFydExpbmUsZW5kTGluZSx0cnVlKTtpZighc3RhdGUudGlnaHR8fHByZXZFbXB0eUVuZCl7dGlnaHQ9ZmFsc2V9cHJldkVtcHR5RW5kPXN0YXRlLmxpbmUtc3RhcnRMaW5lPjEmJnN0YXRlLmlzRW1wdHkoc3RhdGUubGluZS0xKTtzdGF0ZS5ibGtJbmRlbnQ9b2xkSW5kZW50O3N0YXRlLnRTaGlmdFtzdGFydExpbmVdPW9sZFRTaGlmdDtzdGF0ZS50aWdodD1vbGRUaWdodDtzdGF0ZS5wYXJlbnRUeXBlPW9sZFBhcmVudFR5cGU7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6Imxpc3RfaXRlbV9jbG9zZSIsbGV2ZWw6LS1zdGF0ZS5sZXZlbH0pO25leHRMaW5lPXN0YXJ0TGluZT1zdGF0ZS5saW5lO2l0ZW1MaW5lc1sxXT1uZXh0TGluZTtjb250ZW50U3RhcnQ9c3RhdGUuYk1hcmtzW3N0YXJ0TGluZV07aWYobmV4dExpbmU+PWVuZExpbmUpe2JyZWFrfWlmKHN0YXRlLmlzRW1wdHkobmV4dExpbmUpKXticmVha31pZihzdGF0ZS50U2hpZnRbbmV4dExpbmVdPHN0YXRlLmJsa0luZGVudCl7YnJlYWt9dGVybWluYXRlPWZhbHNlO2ZvcihpPTAsbD10ZXJtaW5hdG9yUnVsZXMubGVuZ3RoO2k8bDtpKyspe2lmKHRlcm1pbmF0b3JSdWxlc1tpXShzdGF0ZSxuZXh0TGluZSxlbmRMaW5lLHRydWUpKXt0ZXJtaW5hdGU9dHJ1ZTticmVha319aWYodGVybWluYXRlKXticmVha31pZihpc09yZGVyZWQpe3Bvc0FmdGVyTWFya2VyPXNraXBPcmRlcmVkTGlzdE1hcmtlcihzdGF0ZSxuZXh0TGluZSk7aWYocG9zQWZ0ZXJNYXJrZXI8MCl7YnJlYWt9fWVsc2V7cG9zQWZ0ZXJNYXJrZXI9c2tpcEJ1bGxldExpc3RNYXJrZXIoc3RhdGUsbmV4dExpbmUpO2lmKHBvc0FmdGVyTWFya2VyPDApe2JyZWFrfX1pZihtYXJrZXJDaGFyQ29kZSE9PXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvc0FmdGVyTWFya2VyLTEpKXticmVha319c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6aXNPcmRlcmVkPyJvcmRlcmVkX2xpc3RfY2xvc2UiOiJidWxsZXRfbGlzdF9jbG9zZSIsbGV2ZWw6LS1zdGF0ZS5sZXZlbH0pO2xpc3RMaW5lc1sxXT1uZXh0TGluZTtzdGF0ZS5saW5lPW5leHRMaW5lO2lmKHRpZ2h0KXttYXJrVGlnaHRQYXJhZ3JhcGhzKHN0YXRlLGxpc3RUb2tJZHgpfXJldHVybiB0cnVlfX0se31dLDM0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gcGFyYWdyYXBoKHN0YXRlLHN0YXJ0TGluZSl7dmFyIGVuZExpbmUsY29udGVudCx0ZXJtaW5hdGUsaSxsLG5leHRMaW5lPXN0YXJ0TGluZSsxLHRlcm1pbmF0b3JSdWxlcztlbmRMaW5lPXN0YXRlLmxpbmVNYXg7aWYobmV4dExpbmU8ZW5kTGluZSYmIXN0YXRlLmlzRW1wdHkobmV4dExpbmUpKXt0ZXJtaW5hdG9yUnVsZXM9c3RhdGUucGFyc2VyLnJ1bGVyLmdldFJ1bGVzKCJwYXJhZ3JhcGgiKTtmb3IoO25leHRMaW5lPGVuZExpbmUmJiFzdGF0ZS5pc0VtcHR5KG5leHRMaW5lKTtuZXh0TGluZSsrKXtpZihzdGF0ZS50U2hpZnRbbmV4dExpbmVdLXN0YXRlLmJsa0luZGVudD4zKXtjb250aW51ZX10ZXJtaW5hdGU9ZmFsc2U7Zm9yKGk9MCxsPXRlcm1pbmF0b3JSdWxlcy5sZW5ndGg7aTxsO2krKyl7aWYodGVybWluYXRvclJ1bGVzW2ldKHN0YXRlLG5leHRMaW5lLGVuZExpbmUsdHJ1ZSkpe3Rlcm1pbmF0ZT10cnVlO2JyZWFrfX1pZih0ZXJtaW5hdGUpe2JyZWFrfX19Y29udGVudD1zdGF0ZS5nZXRMaW5lcyhzdGFydExpbmUsbmV4dExpbmUsc3RhdGUuYmxrSW5kZW50LGZhbHNlKS50cmltKCk7c3RhdGUubGluZT1uZXh0TGluZTtpZihjb250ZW50Lmxlbmd0aCl7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaF9vcGVuIix0aWdodDpmYWxzZSxsaW5lczpbc3RhcnRMaW5lLHN0YXRlLmxpbmVdLGxldmVsOnN0YXRlLmxldmVsfSk7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDpjb250ZW50LGxldmVsOnN0YXRlLmxldmVsKzEsbGluZXM6W3N0YXJ0TGluZSxzdGF0ZS5saW5lXSxjaGlsZHJlbjpbXX0pO3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJwYXJhZ3JhcGhfY2xvc2UiLHRpZ2h0OmZhbHNlLGxldmVsOnN0YXRlLmxldmVsfSl9cmV0dXJuIHRydWV9fSx7fV0sMzU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBTdGF0ZUJsb2NrKHNyYyxwYXJzZXIsb3B0aW9ucyxlbnYsdG9rZW5zKXt2YXIgY2gscyxzdGFydCxwb3MsbGVuLGluZGVudCxpbmRlbnRfZm91bmQ7dGhpcy5zcmM9c3JjO3RoaXMucGFyc2VyPXBhcnNlcjt0aGlzLm9wdGlvbnM9b3B0aW9uczt0aGlzLmVudj1lbnY7dGhpcy50b2tlbnM9dG9rZW5zO3RoaXMuYk1hcmtzPVtdO3RoaXMuZU1hcmtzPVtdO3RoaXMudFNoaWZ0PVtdO3RoaXMuYmxrSW5kZW50PTA7dGhpcy5saW5lPTA7dGhpcy5saW5lTWF4PTA7dGhpcy50aWdodD1mYWxzZTt0aGlzLnBhcmVudFR5cGU9InJvb3QiO3RoaXMuZGRJbmRlbnQ9LTE7dGhpcy5sZXZlbD0wO3RoaXMucmVzdWx0PSIiO3M9dGhpcy5zcmM7aW5kZW50PTA7aW5kZW50X2ZvdW5kPWZhbHNlO2ZvcihzdGFydD1wb3M9aW5kZW50PTAsbGVuPXMubGVuZ3RoO3BvczxsZW47cG9zKyspe2NoPXMuY2hhckNvZGVBdChwb3MpO2lmKCFpbmRlbnRfZm91bmQpe2lmKGNoPT09MzIpe2luZGVudCsrO2NvbnRpbnVlfWVsc2V7aW5kZW50X2ZvdW5kPXRydWV9fWlmKGNoPT09MTB8fHBvcz09PWxlbi0xKXtpZihjaCE9PTEwKXtwb3MrK310aGlzLmJNYXJrcy5wdXNoKHN0YXJ0KTt0aGlzLmVNYXJrcy5wdXNoKHBvcyk7dGhpcy50U2hpZnQucHVzaChpbmRlbnQpO2luZGVudF9mb3VuZD1mYWxzZTtpbmRlbnQ9MDtzdGFydD1wb3MrMX19dGhpcy5iTWFya3MucHVzaChzLmxlbmd0aCk7dGhpcy5lTWFya3MucHVzaChzLmxlbmd0aCk7dGhpcy50U2hpZnQucHVzaCgwKTt0aGlzLmxpbmVNYXg9dGhpcy5iTWFya3MubGVuZ3RoLTF9U3RhdGVCbG9jay5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbiBpc0VtcHR5KGxpbmUpe3JldHVybiB0aGlzLmJNYXJrc1tsaW5lXSt0aGlzLnRTaGlmdFtsaW5lXT49dGhpcy5lTWFya3NbbGluZV19O1N0YXRlQmxvY2sucHJvdG90eXBlLnNraXBFbXB0eUxpbmVzPWZ1bmN0aW9uIHNraXBFbXB0eUxpbmVzKGZyb20pe2Zvcih2YXIgbWF4PXRoaXMubGluZU1heDtmcm9tPG1heDtmcm9tKyspe2lmKHRoaXMuYk1hcmtzW2Zyb21dK3RoaXMudFNoaWZ0W2Zyb21dPHRoaXMuZU1hcmtzW2Zyb21dKXticmVha319cmV0dXJuIGZyb219O1N0YXRlQmxvY2sucHJvdG90eXBlLnNraXBTcGFjZXM9ZnVuY3Rpb24gc2tpcFNwYWNlcyhwb3Mpe2Zvcih2YXIgbWF4PXRoaXMuc3JjLmxlbmd0aDtwb3M8bWF4O3BvcysrKXtpZih0aGlzLnNyYy5jaGFyQ29kZUF0KHBvcykhPT0zMil7YnJlYWt9fXJldHVybiBwb3N9O1N0YXRlQmxvY2sucHJvdG90eXBlLnNraXBDaGFycz1mdW5jdGlvbiBza2lwQ2hhcnMocG9zLGNvZGUpe2Zvcih2YXIgbWF4PXRoaXMuc3JjLmxlbmd0aDtwb3M8bWF4O3BvcysrKXtpZih0aGlzLnNyYy5jaGFyQ29kZUF0KHBvcykhPT1jb2RlKXticmVha319cmV0dXJuIHBvc307U3RhdGVCbG9jay5wcm90b3R5cGUuc2tpcENoYXJzQmFjaz1mdW5jdGlvbiBza2lwQ2hhcnNCYWNrKHBvcyxjb2RlLG1pbil7aWYocG9zPD1taW4pe3JldHVybiBwb3N9d2hpbGUocG9zPm1pbil7aWYoY29kZSE9PXRoaXMuc3JjLmNoYXJDb2RlQXQoLS1wb3MpKXtyZXR1cm4gcG9zKzF9fXJldHVybiBwb3N9O1N0YXRlQmxvY2sucHJvdG90eXBlLmdldExpbmVzPWZ1bmN0aW9uIGdldExpbmVzKGJlZ2luLGVuZCxpbmRlbnQsa2VlcExhc3RMRil7dmFyIGksZmlyc3QsbGFzdCxxdWV1ZSxzaGlmdCxsaW5lPWJlZ2luO2lmKGJlZ2luPj1lbmQpe3JldHVybiIifWlmKGxpbmUrMT09PWVuZCl7Zmlyc3Q9dGhpcy5iTWFya3NbbGluZV0rTWF0aC5taW4odGhpcy50U2hpZnRbbGluZV0saW5kZW50KTtsYXN0PWtlZXBMYXN0TEY/dGhpcy5lTWFya3NbbGluZV0rMTp0aGlzLmVNYXJrc1tsaW5lXTtyZXR1cm4gdGhpcy5zcmMuc2xpY2UoZmlyc3QsbGFzdCl9cXVldWU9bmV3IEFycmF5KGVuZC1iZWdpbik7Zm9yKGk9MDtsaW5lPGVuZDtsaW5lKyssaSsrKXtzaGlmdD10aGlzLnRTaGlmdFtsaW5lXTtpZihzaGlmdD5pbmRlbnQpe3NoaWZ0PWluZGVudH1pZihzaGlmdDwwKXtzaGlmdD0wfWZpcnN0PXRoaXMuYk1hcmtzW2xpbmVdK3NoaWZ0O2lmKGxpbmUrMTxlbmR8fGtlZXBMYXN0TEYpe2xhc3Q9dGhpcy5lTWFya3NbbGluZV0rMX1lbHNle2xhc3Q9dGhpcy5lTWFya3NbbGluZV19cXVldWVbaV09dGhpcy5zcmMuc2xpY2UoZmlyc3QsbGFzdCl9cmV0dXJuIHF1ZXVlLmpvaW4oIiIpfTttb2R1bGUuZXhwb3J0cz1TdGF0ZUJsb2NrfSx7fV0sMzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnZXRMaW5lKHN0YXRlLGxpbmUpe3ZhciBwb3M9c3RhdGUuYk1hcmtzW2xpbmVdK3N0YXRlLmJsa0luZGVudCxtYXg9c3RhdGUuZU1hcmtzW2xpbmVdO3JldHVybiBzdGF0ZS5zcmMuc3Vic3RyKHBvcyxtYXgtcG9zKX1tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiB0YWJsZShzdGF0ZSxzdGFydExpbmUsZW5kTGluZSxzaWxlbnQpe3ZhciBjaCxsaW5lVGV4dCxwb3MsaSxuZXh0TGluZSxyb3dzLGNlbGwsYWxpZ25zLHQsdGFibGVMaW5lcyx0Ym9keUxpbmVzO2lmKHN0YXJ0TGluZSsyPmVuZExpbmUpe3JldHVybiBmYWxzZX1uZXh0TGluZT1zdGFydExpbmUrMTtpZihzdGF0ZS50U2hpZnRbbmV4dExpbmVdPHN0YXRlLmJsa0luZGVudCl7cmV0dXJuIGZhbHNlfXBvcz1zdGF0ZS5iTWFya3NbbmV4dExpbmVdK3N0YXRlLnRTaGlmdFtuZXh0TGluZV07aWYocG9zPj1zdGF0ZS5lTWFya3NbbmV4dExpbmVdKXtyZXR1cm4gZmFsc2V9Y2g9c3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKTtpZihjaCE9PTEyNCYmY2ghPT00NSYmY2ghPT01OCl7cmV0dXJuIGZhbHNlfWxpbmVUZXh0PWdldExpbmUoc3RhdGUsc3RhcnRMaW5lKzEpO2lmKCEvXlstOnwgXSskLy50ZXN0KGxpbmVUZXh0KSl7cmV0dXJuIGZhbHNlfXJvd3M9bGluZVRleHQuc3BsaXQoInwiKTtpZihyb3dzPD0yKXtyZXR1cm4gZmFsc2V9YWxpZ25zPVtdO2ZvcihpPTA7aTxyb3dzLmxlbmd0aDtpKyspe3Q9cm93c1tpXS50cmltKCk7aWYoIXQpe2lmKGk9PT0wfHxpPT09cm93cy5sZW5ndGgtMSl7Y29udGludWV9ZWxzZXtyZXR1cm4gZmFsc2V9fWlmKCEvXjo/LSs6PyQvLnRlc3QodCkpe3JldHVybiBmYWxzZX1pZih0LmNoYXJDb2RlQXQodC5sZW5ndGgtMSk9PT01OCl7YWxpZ25zLnB1c2godC5jaGFyQ29kZUF0KDApPT09NTg/ImNlbnRlciI6InJpZ2h0Iil9ZWxzZSBpZih0LmNoYXJDb2RlQXQoMCk9PT01OCl7YWxpZ25zLnB1c2goImxlZnQiKX1lbHNle2FsaWducy5wdXNoKCIiKX19bGluZVRleHQ9Z2V0TGluZShzdGF0ZSxzdGFydExpbmUpLnRyaW0oKTtpZihsaW5lVGV4dC5pbmRleE9mKCJ8Iik9PT0tMSl7cmV0dXJuIGZhbHNlfXJvd3M9bGluZVRleHQucmVwbGFjZSgvXlx8fFx8JC9nLCIiKS5zcGxpdCgifCIpO2lmKGFsaWducy5sZW5ndGghPT1yb3dzLmxlbmd0aCl7cmV0dXJuIGZhbHNlfWlmKHNpbGVudCl7cmV0dXJuIHRydWV9c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6InRhYmxlX29wZW4iLGxpbmVzOnRhYmxlTGluZXM9W3N0YXJ0TGluZSwwXSxsZXZlbDpzdGF0ZS5sZXZlbCsrfSk7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6InRoZWFkX29wZW4iLGxpbmVzOltzdGFydExpbmUsc3RhcnRMaW5lKzFdLGxldmVsOnN0YXRlLmxldmVsKyt9KTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToidHJfb3BlbiIsbGluZXM6W3N0YXJ0TGluZSxzdGFydExpbmUrMV0sbGV2ZWw6c3RhdGUubGV2ZWwrK30pO2ZvcihpPTA7aTxyb3dzLmxlbmd0aDtpKyspe3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJ0aF9vcGVuIixhbGlnbjphbGlnbnNbaV0sbGluZXM6W3N0YXJ0TGluZSxzdGFydExpbmUrMV0sbGV2ZWw6c3RhdGUubGV2ZWwrK30pO3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJpbmxpbmUiLGNvbnRlbnQ6cm93c1tpXS50cmltKCksbGluZXM6W3N0YXJ0TGluZSxzdGFydExpbmUrMV0sbGV2ZWw6c3RhdGUubGV2ZWwsY2hpbGRyZW46W119KTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToidGhfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KX1zdGF0ZS50b2tlbnMucHVzaCh7dHlwZToidHJfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToidGhlYWRfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KTtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToidGJvZHlfb3BlbiIsbGluZXM6dGJvZHlMaW5lcz1bc3RhcnRMaW5lKzIsMF0sbGV2ZWw6c3RhdGUubGV2ZWwrK30pO2ZvcihuZXh0TGluZT1zdGFydExpbmUrMjtuZXh0TGluZTxlbmRMaW5lO25leHRMaW5lKyspe2lmKHN0YXRlLnRTaGlmdFtuZXh0TGluZV08c3RhdGUuYmxrSW5kZW50KXticmVha31saW5lVGV4dD1nZXRMaW5lKHN0YXRlLG5leHRMaW5lKS50cmltKCk7aWYobGluZVRleHQuaW5kZXhPZigifCIpPT09LTEpe2JyZWFrfXJvd3M9bGluZVRleHQucmVwbGFjZSgvXlx8fFx8JC9nLCIiKS5zcGxpdCgifCIpO3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJ0cl9vcGVuIixsZXZlbDpzdGF0ZS5sZXZlbCsrfSk7Zm9yKGk9MDtpPHJvd3MubGVuZ3RoO2krKyl7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6InRkX29wZW4iLGFsaWduOmFsaWduc1tpXSxsZXZlbDpzdGF0ZS5sZXZlbCsrfSk7Y2VsbD1yb3dzW2ldLnN1YnN0cmluZyhyb3dzW2ldLmNoYXJDb2RlQXQoMCk9PT0xMjQ/MTowLHJvd3NbaV0uY2hhckNvZGVBdChyb3dzW2ldLmxlbmd0aC0xKT09PTEyND9yb3dzW2ldLmxlbmd0aC0xOnJvd3NbaV0ubGVuZ3RoKS50cmltKCk7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDpjZWxsLGxldmVsOnN0YXRlLmxldmVsLGNoaWxkcmVuOltdfSk7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6InRkX2Nsb3NlIixsZXZlbDotLXN0YXRlLmxldmVsfSl9c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6InRyX2Nsb3NlIixsZXZlbDotLXN0YXRlLmxldmVsfSl9c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6InRib2R5X2Nsb3NlIixsZXZlbDotLXN0YXRlLmxldmVsfSk7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6InRhYmxlX2Nsb3NlIixsZXZlbDotLXN0YXRlLmxldmVsfSk7dGFibGVMaW5lc1sxXT10Ym9keUxpbmVzWzFdPW5leHRMaW5lO3N0YXRlLmxpbmU9bmV4dExpbmU7cmV0dXJuIHRydWV9fSx7fV0sMzc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgU3RhdGVJbmxpbmU9cmVxdWlyZSgiLi4vcnVsZXNfaW5saW5lL3N0YXRlX2lubGluZSIpO3ZhciBwYXJzZUxpbmtMYWJlbD1yZXF1aXJlKCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfbGFiZWwiKTtmdW5jdGlvbiBwYXJzZUFiYnIoc3RyLHBhcnNlcklubGluZSxvcHRpb25zLGVudil7dmFyIHN0YXRlLGxhYmVsRW5kLHBvcyxtYXgsbGFiZWwsdGl0bGU7aWYoc3RyLmNoYXJDb2RlQXQoMCkhPT00Mil7cmV0dXJuLTF9aWYoc3RyLmNoYXJDb2RlQXQoMSkhPT05MSl7cmV0dXJuLTF9aWYoc3RyLmluZGV4T2YoIl06Iik9PT0tMSl7cmV0dXJuLTF9c3RhdGU9bmV3IFN0YXRlSW5saW5lKHN0cixwYXJzZXJJbmxpbmUsb3B0aW9ucyxlbnYsW10pO2xhYmVsRW5kPXBhcnNlTGlua0xhYmVsKHN0YXRlLDEpO2lmKGxhYmVsRW5kPDB8fHN0ci5jaGFyQ29kZUF0KGxhYmVsRW5kKzEpIT09NTgpe3JldHVybi0xfW1heD1zdGF0ZS5wb3NNYXg7Zm9yKHBvcz1sYWJlbEVuZCsyO3BvczxtYXg7cG9zKyspe2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk9PT0xMCl7YnJlYWt9fWxhYmVsPXN0ci5zbGljZSgyLGxhYmVsRW5kKTt0aXRsZT1zdHIuc2xpY2UobGFiZWxFbmQrMixwb3MpLnRyaW0oKTtpZih0aXRsZS5sZW5ndGg9PT0wKXtyZXR1cm4tMX1pZighZW52LmFiYnJldmlhdGlvbnMpe2Vudi5hYmJyZXZpYXRpb25zPXt9fWlmKHR5cGVvZiBlbnYuYWJicmV2aWF0aW9uc1siOiIrbGFiZWxdPT09InVuZGVmaW5lZCIpe2Vudi5hYmJyZXZpYXRpb25zWyI6IitsYWJlbF09dGl0bGV9cmV0dXJuIHBvc31tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBhYmJyKHN0YXRlKXt2YXIgdG9rZW5zPXN0YXRlLnRva2VucyxpLGwsY29udGVudCxwb3M7aWYoc3RhdGUuaW5saW5lTW9kZSl7cmV0dXJufWZvcihpPTEsbD10b2tlbnMubGVuZ3RoLTE7aTxsO2krKyl7aWYodG9rZW5zW2ktMV0udHlwZT09PSJwYXJhZ3JhcGhfb3BlbiImJnRva2Vuc1tpXS50eXBlPT09ImlubGluZSImJnRva2Vuc1tpKzFdLnR5cGU9PT0icGFyYWdyYXBoX2Nsb3NlIil7Y29udGVudD10b2tlbnNbaV0uY29udGVudDt3aGlsZShjb250ZW50Lmxlbmd0aCl7cG9zPXBhcnNlQWJicihjb250ZW50LHN0YXRlLmlubGluZSxzdGF0ZS5vcHRpb25zLHN0YXRlLmVudik7aWYocG9zPDApe2JyZWFrfWNvbnRlbnQ9Y29udGVudC5zbGljZShwb3MpLnRyaW0oKX10b2tlbnNbaV0uY29udGVudD1jb250ZW50O2lmKCFjb250ZW50Lmxlbmd0aCl7dG9rZW5zW2ktMV0udGlnaHQ9dHJ1ZTt0b2tlbnNbaSsxXS50aWdodD10cnVlfX19fX0seyIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfbGFiZWwiOjE1LAoiLi4vcnVsZXNfaW5saW5lL3N0YXRlX2lubGluZSI6NTl9XSwzODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciBQVU5DVF9DSEFSUz0iIFxuKClbXSdcIi4sIT8tIjtmdW5jdGlvbiByZWdFc2NhcGUocyl7cmV0dXJuIHMucmVwbGFjZSgvKFstKClcW1xde30rPyouJFxefCw6IzwhXFxdKS9nLCJcXCQxIil9bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gYWJicjIoc3RhdGUpe3ZhciBpLGosbCx0b2tlbnMsdG9rZW4sdGV4dCxub2Rlcyxwb3MsbGV2ZWwscmVnLG0scmVnVGV4dCxibG9ja1Rva2Vucz1zdGF0ZS50b2tlbnM7aWYoIXN0YXRlLmVudi5hYmJyZXZpYXRpb25zKXtyZXR1cm59aWYoIXN0YXRlLmVudi5hYmJyUmVnRXhwKXtyZWdUZXh0PSIoXnxbIitQVU5DVF9DSEFSUy5zcGxpdCgiIikubWFwKHJlZ0VzY2FwZSkuam9pbigiIikrIl0pIisiKCIrT2JqZWN0LmtleXMoc3RhdGUuZW52LmFiYnJldmlhdGlvbnMpLm1hcChmdW5jdGlvbih4KXtyZXR1cm4geC5zdWJzdHIoMSl9KS5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIubGVuZ3RoLWEubGVuZ3RofSkubWFwKHJlZ0VzY2FwZSkuam9pbigifCIpKyIpIisiKCR8WyIrUFVOQ1RfQ0hBUlMuc3BsaXQoIiIpLm1hcChyZWdFc2NhcGUpLmpvaW4oIiIpKyJdKSI7c3RhdGUuZW52LmFiYnJSZWdFeHA9bmV3IFJlZ0V4cChyZWdUZXh0LCJnIil9cmVnPXN0YXRlLmVudi5hYmJyUmVnRXhwO2ZvcihqPTAsbD1ibG9ja1Rva2Vucy5sZW5ndGg7ajxsO2orKyl7aWYoYmxvY2tUb2tlbnNbal0udHlwZSE9PSJpbmxpbmUiKXtjb250aW51ZX10b2tlbnM9YmxvY2tUb2tlbnNbal0uY2hpbGRyZW47Zm9yKGk9dG9rZW5zLmxlbmd0aC0xO2k+PTA7aS0tKXt0b2tlbj10b2tlbnNbaV07aWYodG9rZW4udHlwZSE9PSJ0ZXh0Iil7Y29udGludWV9cG9zPTA7dGV4dD10b2tlbi5jb250ZW50O3JlZy5sYXN0SW5kZXg9MDtsZXZlbD10b2tlbi5sZXZlbDtub2Rlcz1bXTt3aGlsZShtPXJlZy5leGVjKHRleHQpKXtpZihyZWcubGFzdEluZGV4PnBvcyl7bm9kZXMucHVzaCh7dHlwZToidGV4dCIsY29udGVudDp0ZXh0LnNsaWNlKHBvcyxtLmluZGV4K21bMV0ubGVuZ3RoKSxsZXZlbDpsZXZlbH0pfW5vZGVzLnB1c2goe3R5cGU6ImFiYnJfb3BlbiIsdGl0bGU6c3RhdGUuZW52LmFiYnJldmlhdGlvbnNbIjoiK21bMl1dLGxldmVsOmxldmVsKyt9KTtub2Rlcy5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50Om1bMl0sbGV2ZWw6bGV2ZWx9KTtub2Rlcy5wdXNoKHt0eXBlOiJhYmJyX2Nsb3NlIixsZXZlbDotLWxldmVsfSk7cG9zPXJlZy5sYXN0SW5kZXgtbVszXS5sZW5ndGh9aWYoIW5vZGVzLmxlbmd0aCl7Y29udGludWV9aWYocG9zPHRleHQubGVuZ3RoKXtub2Rlcy5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnRleHQuc2xpY2UocG9zKSxsZXZlbDpsZXZlbH0pfWJsb2NrVG9rZW5zW2pdLmNoaWxkcmVuPXRva2Vucz1bXS5jb25jYXQodG9rZW5zLnNsaWNlKDAsaSksbm9kZXMsdG9rZW5zLnNsaWNlKGkrMSkpfX19fSx7fV0sMzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBibG9jayhzdGF0ZSl7aWYoc3RhdGUuaW5saW5lTW9kZSl7c3RhdGUudG9rZW5zLnB1c2goe3R5cGU6ImlubGluZSIsY29udGVudDpzdGF0ZS5zcmMucmVwbGFjZSgvXG4vZywiICIpLnRyaW0oKSxsZXZlbDowLGxpbmVzOlswLDFdLGNoaWxkcmVuOltdfSl9ZWxzZXtzdGF0ZS5ibG9jay5wYXJzZShzdGF0ZS5zcmMsc3RhdGUub3B0aW9ucyxzdGF0ZS5lbnYsc3RhdGUudG9rZW5zKX19fSx7fV0sNDA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBmb290bm90ZV9ibG9jayhzdGF0ZSl7dmFyIGksbCxqLHQsbGFzdFBhcmFncmFwaCxsaXN0LHRva2VucyxjdXJyZW50LGN1cnJlbnRMYWJlbCxsZXZlbD0wLGluc2lkZVJlZj1mYWxzZSxyZWZUb2tlbnM9e307aWYoIXN0YXRlLmVudi5mb290bm90ZXMpe3JldHVybn1zdGF0ZS50b2tlbnM9c3RhdGUudG9rZW5zLmZpbHRlcihmdW5jdGlvbih0b2spe2lmKHRvay50eXBlPT09ImZvb3Rub3RlX3JlZmVyZW5jZV9vcGVuIil7aW5zaWRlUmVmPXRydWU7Y3VycmVudD1bXTtjdXJyZW50TGFiZWw9dG9rLmxhYmVsO3JldHVybiBmYWxzZX1pZih0b2sudHlwZT09PSJmb290bm90ZV9yZWZlcmVuY2VfY2xvc2UiKXtpbnNpZGVSZWY9ZmFsc2U7cmVmVG9rZW5zWyI6IitjdXJyZW50TGFiZWxdPWN1cnJlbnQ7cmV0dXJuIGZhbHNlfWlmKGluc2lkZVJlZil7Y3VycmVudC5wdXNoKHRvayl9cmV0dXJuIWluc2lkZVJlZn0pO2lmKCFzdGF0ZS5lbnYuZm9vdG5vdGVzLmxpc3Qpe3JldHVybn1saXN0PXN0YXRlLmVudi5mb290bm90ZXMubGlzdDtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiZm9vdG5vdGVfYmxvY2tfb3BlbiIsbGV2ZWw6bGV2ZWwrK30pO2ZvcihpPTAsbD1saXN0Lmxlbmd0aDtpPGw7aSsrKXtzdGF0ZS50b2tlbnMucHVzaCh7dHlwZToiZm9vdG5vdGVfb3BlbiIsaWQ6aSxsZXZlbDpsZXZlbCsrfSk7aWYobGlzdFtpXS50b2tlbnMpe3Rva2Vucz1bXTt0b2tlbnMucHVzaCh7dHlwZToicGFyYWdyYXBoX29wZW4iLHRpZ2h0OmZhbHNlLGxldmVsOmxldmVsKyt9KTt0b2tlbnMucHVzaCh7dHlwZToiaW5saW5lIixjb250ZW50OiIiLGxldmVsOmxldmVsLGNoaWxkcmVuOmxpc3RbaV0udG9rZW5zfSk7dG9rZW5zLnB1c2goe3R5cGU6InBhcmFncmFwaF9jbG9zZSIsdGlnaHQ6ZmFsc2UsbGV2ZWw6LS1sZXZlbH0pfWVsc2UgaWYobGlzdFtpXS5sYWJlbCl7dG9rZW5zPXJlZlRva2Vuc1siOiIrbGlzdFtpXS5sYWJlbF19c3RhdGUudG9rZW5zPXN0YXRlLnRva2Vucy5jb25jYXQodG9rZW5zKTtpZihzdGF0ZS50b2tlbnNbc3RhdGUudG9rZW5zLmxlbmd0aC0xXS50eXBlPT09InBhcmFncmFwaF9jbG9zZSIpe2xhc3RQYXJhZ3JhcGg9c3RhdGUudG9rZW5zLnBvcCgpfWVsc2V7bGFzdFBhcmFncmFwaD1udWxsfXQ9bGlzdFtpXS5jb3VudD4wP2xpc3RbaV0uY291bnQ6MTtmb3Ioaj0wO2o8dDtqKyspe3N0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJmb290bm90ZV9hbmNob3IiLGlkOmksc3ViSWQ6aixsZXZlbDpsZXZlbH0pfWlmKGxhc3RQYXJhZ3JhcGgpe3N0YXRlLnRva2Vucy5wdXNoKGxhc3RQYXJhZ3JhcGgpfXN0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJmb290bm90ZV9jbG9zZSIsbGV2ZWw6LS1sZXZlbH0pfXN0YXRlLnRva2Vucy5wdXNoKHt0eXBlOiJmb290bm90ZV9ibG9ja19jbG9zZSIsbGV2ZWw6LS1sZXZlbH0pfX0se31dLDQxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaW5saW5lKHN0YXRlKXt2YXIgdG9rZW5zPXN0YXRlLnRva2Vucyx0b2ssaSxsO2ZvcihpPTAsbD10b2tlbnMubGVuZ3RoO2k8bDtpKyspe3Rvaz10b2tlbnNbaV07aWYodG9rLnR5cGU9PT0iaW5saW5lIil7c3RhdGUuaW5saW5lLnBhcnNlKHRvay5jb250ZW50LHN0YXRlLm9wdGlvbnMsc3RhdGUuZW52LHRvay5jaGlsZHJlbil9fX19LHt9XSw0MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO3ZhciBBdXRvbGlua2VyPXJlcXVpcmUoImF1dG9saW5rZXIiKTt2YXIgTElOS19TQ0FOX1JFPS93d3d8QHxcOlwvXC8vO2Z1bmN0aW9uIGlzTGlua09wZW4oc3RyKXtyZXR1cm4vXjxhWz5cc10vaS50ZXN0KHN0cil9ZnVuY3Rpb24gaXNMaW5rQ2xvc2Uoc3RyKXtyZXR1cm4vXjxcL2Fccyo+L2kudGVzdChzdHIpfWZ1bmN0aW9uIGNyZWF0ZUxpbmtpZmllcigpe3ZhciBsaW5rcz1bXTt2YXIgYXV0b2xpbmtlcj1uZXcgQXV0b2xpbmtlcih7c3RyaXBQcmVmaXg6ZmFsc2UsdXJsOnRydWUsZW1haWw6dHJ1ZSx0d2l0dGVyOmZhbHNlLHJlcGxhY2VGbjpmdW5jdGlvbihsaW5rZXIsbWF0Y2gpe3N3aXRjaChtYXRjaC5nZXRUeXBlKCkpe2Nhc2UidXJsIjpsaW5rcy5wdXNoKHt0ZXh0Om1hdGNoLm1hdGNoZWRUZXh0LHVybDptYXRjaC5nZXRVcmwoKX0pO2JyZWFrO2Nhc2UiZW1haWwiOmxpbmtzLnB1c2goe3RleHQ6bWF0Y2gubWF0Y2hlZFRleHQsdXJsOiJtYWlsdG86IittYXRjaC5nZXRFbWFpbCgpLnJlcGxhY2UoL15tYWlsdG86L2ksIiIpfSk7YnJlYWt9cmV0dXJuIGZhbHNlfX0pO3JldHVybntsaW5rczpsaW5rcyxhdXRvbGlua2VyOmF1dG9saW5rZXJ9fW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGxpbmtpZnkoc3RhdGUpe3ZhciBpLGosbCx0b2tlbnMsdG9rZW4sdGV4dCxub2Rlcyxsbixwb3MsbGV2ZWwsaHRtbExpbmtMZXZlbCxibG9ja1Rva2Vucz1zdGF0ZS50b2tlbnMsbGlua2lmaWVyPW51bGwsbGlua3MsYXV0b2xpbmtlcjtpZighc3RhdGUub3B0aW9ucy5saW5raWZ5KXtyZXR1cm59Zm9yKGo9MCxsPWJsb2NrVG9rZW5zLmxlbmd0aDtqPGw7aisrKXtpZihibG9ja1Rva2Vuc1tqXS50eXBlIT09ImlubGluZSIpe2NvbnRpbnVlfXRva2Vucz1ibG9ja1Rva2Vuc1tqXS5jaGlsZHJlbjtodG1sTGlua0xldmVsPTA7Zm9yKGk9dG9rZW5zLmxlbmd0aC0xO2k+PTA7aS0tKXt0b2tlbj10b2tlbnNbaV07aWYodG9rZW4udHlwZT09PSJsaW5rX2Nsb3NlIil7aS0tO3doaWxlKHRva2Vuc1tpXS5sZXZlbCE9PXRva2VuLmxldmVsJiZ0b2tlbnNbaV0udHlwZSE9PSJsaW5rX29wZW4iKXtpLS19Y29udGludWV9aWYodG9rZW4udHlwZT09PSJodG1sdGFnIil7aWYoaXNMaW5rT3Blbih0b2tlbi5jb250ZW50KSYmaHRtbExpbmtMZXZlbD4wKXtodG1sTGlua0xldmVsLS19aWYoaXNMaW5rQ2xvc2UodG9rZW4uY29udGVudCkpe2h0bWxMaW5rTGV2ZWwrK319aWYoaHRtbExpbmtMZXZlbD4wKXtjb250aW51ZX1pZih0b2tlbi50eXBlPT09InRleHQiJiZMSU5LX1NDQU5fUkUudGVzdCh0b2tlbi5jb250ZW50KSl7aWYoIWxpbmtpZmllcil7bGlua2lmaWVyPWNyZWF0ZUxpbmtpZmllcigpO2xpbmtzPWxpbmtpZmllci5saW5rczthdXRvbGlua2VyPWxpbmtpZmllci5hdXRvbGlua2VyfXRleHQ9dG9rZW4uY29udGVudDtsaW5rcy5sZW5ndGg9MDthdXRvbGlua2VyLmxpbmsodGV4dCk7aWYoIWxpbmtzLmxlbmd0aCl7Y29udGludWV9bm9kZXM9W107bGV2ZWw9dG9rZW4ubGV2ZWw7Zm9yKGxuPTA7bG48bGlua3MubGVuZ3RoO2xuKyspe2lmKCFzdGF0ZS5pbmxpbmUudmFsaWRhdGVMaW5rKGxpbmtzW2xuXS51cmwpKXtjb250aW51ZX1wb3M9dGV4dC5pbmRleE9mKGxpbmtzW2xuXS50ZXh0KTtpZihwb3Mpe2xldmVsPWxldmVsO25vZGVzLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6dGV4dC5zbGljZSgwLHBvcyksbGV2ZWw6bGV2ZWx9KX1ub2Rlcy5wdXNoKHt0eXBlOiJsaW5rX29wZW4iLGhyZWY6bGlua3NbbG5dLnVybCx0aXRsZToiIixsZXZlbDpsZXZlbCsrfSk7bm9kZXMucHVzaCh7dHlwZToidGV4dCIsY29udGVudDpsaW5rc1tsbl0udGV4dCxsZXZlbDpsZXZlbH0pO25vZGVzLnB1c2goe3R5cGU6ImxpbmtfY2xvc2UiLGxldmVsOi0tbGV2ZWx9KTt0ZXh0PXRleHQuc2xpY2UocG9zK2xpbmtzW2xuXS50ZXh0Lmxlbmd0aCl9aWYodGV4dC5sZW5ndGgpe25vZGVzLnB1c2goe3R5cGU6InRleHQiLGNvbnRlbnQ6dGV4dCxsZXZlbDpsZXZlbH0pfWJsb2NrVG9rZW5zW2pdLmNoaWxkcmVuPXRva2Vucz1bXS5jb25jYXQodG9rZW5zLnNsaWNlKDAsaSksbm9kZXMsdG9rZW5zLnNsaWNlKGkrMSkpfX19fX0se2F1dG9saW5rZXI6Mn1dLDQzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIFN0YXRlSW5saW5lPXJlcXVpcmUoIi4uL3J1bGVzX2lubGluZS9zdGF0ZV9pbmxpbmUiKTt2YXIgcGFyc2VMaW5rTGFiZWw9cmVxdWlyZSgiLi4vaGVscGVycy9wYXJzZV9saW5rX2xhYmVsIik7dmFyIHBhcnNlTGlua0Rlc3RpbmF0aW9uPXJlcXVpcmUoIi4uL2hlbHBlcnMvcGFyc2VfbGlua19kZXN0aW5hdGlvbiIpO3ZhciBwYXJzZUxpbmtUaXRsZT1yZXF1aXJlKCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfdGl0bGUiKTt2YXIgbm9ybWFsaXplUmVmZXJlbmNlPXJlcXVpcmUoIi4uL2hlbHBlcnMvbm9ybWFsaXplX3JlZmVyZW5jZSIpO2Z1bmN0aW9uIHBhcnNlUmVmZXJlbmNlKHN0cixwYXJzZXIsb3B0aW9ucyxlbnYpe3ZhciBzdGF0ZSxsYWJlbEVuZCxwb3MsbWF4LGNvZGUsc3RhcnQsaHJlZix0aXRsZSxsYWJlbDtpZihzdHIuY2hhckNvZGVBdCgwKSE9PTkxKXtyZXR1cm4tMX1pZihzdHIuaW5kZXhPZigiXToiKT09PS0xKXtyZXR1cm4tMX1zdGF0ZT1uZXcgU3RhdGVJbmxpbmUoc3RyLHBhcnNlcixvcHRpb25zLGVudixbXSk7bGFiZWxFbmQ9cGFyc2VMaW5rTGFiZWwoc3RhdGUsMCk7aWYobGFiZWxFbmQ8MHx8c3RyLmNoYXJDb2RlQXQobGFiZWxFbmQrMSkhPT01OCl7cmV0dXJuLTF9bWF4PXN0YXRlLnBvc01heDtmb3IocG9zPWxhYmVsRW5kKzI7cG9zPG1heDtwb3MrKyl7Y29kZT1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpO2lmKGNvZGUhPT0zMiYmY29kZSE9PTEwKXticmVha319aWYoIXBhcnNlTGlua0Rlc3RpbmF0aW9uKHN0YXRlLHBvcykpe3JldHVybi0xfWhyZWY9c3RhdGUubGlua0NvbnRlbnQ7cG9zPXN0YXRlLnBvcztzdGFydD1wb3M7Zm9yKHBvcz1wb3MrMTtwb3M8bWF4O3BvcysrKXtjb2RlPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk7aWYoY29kZSE9PTMyJiZjb2RlIT09MTApe2JyZWFrfX1pZihwb3M8bWF4JiZzdGFydCE9PXBvcyYmcGFyc2VMaW5rVGl0bGUoc3RhdGUscG9zKSl7dGl0bGU9c3RhdGUubGlua0NvbnRlbnQ7cG9zPXN0YXRlLnBvc31lbHNle3RpdGxlPSIiO3Bvcz1zdGFydH13aGlsZShwb3M8bWF4JiZzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpPT09MzIpe3BvcysrfWlmKHBvczxtYXgmJnN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcykhPT0xMCl7cmV0dXJuLTF9bGFiZWw9bm9ybWFsaXplUmVmZXJlbmNlKHN0ci5zbGljZSgxLGxhYmVsRW5kKSk7aWYodHlwZW9mIGVudi5yZWZlcmVuY2VzW2xhYmVsXT09PSJ1bmRlZmluZWQiKXtlbnYucmVmZXJlbmNlc1tsYWJlbF09e3RpdGxlOnRpdGxlLGhyZWY6aHJlZn19cmV0dXJuIHBvc31tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiByZWZlcmVuY2VzKHN0YXRlKXt2YXIgdG9rZW5zPXN0YXRlLnRva2VucyxpLGwsY29udGVudCxwb3M7c3RhdGUuZW52LnJlZmVyZW5jZXM9c3RhdGUuZW52LnJlZmVyZW5jZXN8fHt9O2lmKHN0YXRlLmlubGluZU1vZGUpe3JldHVybn1mb3IoaT0xLGw9dG9rZW5zLmxlbmd0aC0xO2k8bDtpKyspe2lmKHRva2Vuc1tpXS50eXBlPT09ImlubGluZSImJnRva2Vuc1tpLTFdLnR5cGU9PT0icGFyYWdyYXBoX29wZW4iJiZ0b2tlbnNbaSsxXS50eXBlPT09InBhcmFncmFwaF9jbG9zZSIpe2NvbnRlbnQ9dG9rZW5zW2ldLmNvbnRlbnQ7d2hpbGUoY29udGVudC5sZW5ndGgpe3Bvcz1wYXJzZVJlZmVyZW5jZShjb250ZW50LHN0YXRlLmlubGluZSxzdGF0ZS5vcHRpb25zLHN0YXRlLmVudik7aWYocG9zPDApe2JyZWFrfWNvbnRlbnQ9Y29udGVudC5zbGljZShwb3MpLnRyaW0oKX10b2tlbnNbaV0uY29udGVudD1jb250ZW50O2lmKCFjb250ZW50Lmxlbmd0aCl7dG9rZW5zW2ktMV0udGlnaHQ9dHJ1ZTt0b2tlbnNbaSsxXS50aWdodD10cnVlfX19fX0seyIuLi9oZWxwZXJzL25vcm1hbGl6ZV9yZWZlcmVuY2UiOjEzLCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfZGVzdGluYXRpb24iOjE0LCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfbGFiZWwiOjE1LCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfdGl0bGUiOjE2LCIuLi9ydWxlc19pbmxpbmUvc3RhdGVfaW5saW5lIjo1OX1dLDQ0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIFJBUkVfUkU9L1wrLXxcLlwufFw/XD9cP1w/fCEhISF8LCx8LS0vO3ZhciBTQ09QRURfQUJCUl9SRT0vXCgoY3x0bXxyfHApXCkvZ2k7dmFyIFNDT1BFRF9BQkJSPXtjOiLCqSIscjoiwq4iLHA6IsKnIix0bToi4oSiIn07ZnVuY3Rpb24gcmVwbGFjZVNjb3BlZEFiYnIoc3RyKXtpZihzdHIuaW5kZXhPZigiKCIpPDApe3JldHVybiBzdHJ9cmV0dXJuIHN0ci5yZXBsYWNlKFNDT1BFRF9BQkJSX1JFLGZ1bmN0aW9uKG1hdGNoLG5hbWUpe3JldHVybiBTQ09QRURfQUJCUltuYW1lLnRvTG93ZXJDYXNlKCldfSl9bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gcmVwbGFjZShzdGF0ZSl7dmFyIGksdG9rZW4sdGV4dCxpbmxpbmVUb2tlbnMsYmxrSWR4O2lmKCFzdGF0ZS5vcHRpb25zLnR5cG9ncmFwaGVyKXtyZXR1cm59Zm9yKGJsa0lkeD1zdGF0ZS50b2tlbnMubGVuZ3RoLTE7YmxrSWR4Pj0wO2Jsa0lkeC0tKXtpZihzdGF0ZS50b2tlbnNbYmxrSWR4XS50eXBlIT09ImlubGluZSIpe2NvbnRpbnVlfWlubGluZVRva2Vucz1zdGF0ZS50b2tlbnNbYmxrSWR4XS5jaGlsZHJlbjtmb3IoaT1pbmxpbmVUb2tlbnMubGVuZ3RoLTE7aT49MDtpLS0pe3Rva2VuPWlubGluZVRva2Vuc1tpXTtpZih0b2tlbi50eXBlPT09InRleHQiKXt0ZXh0PXRva2VuLmNvbnRlbnQ7dGV4dD1yZXBsYWNlU2NvcGVkQWJicih0ZXh0KTtpZihSQVJFX1JFLnRlc3QodGV4dCkpe3RleHQ9dGV4dC5yZXBsYWNlKC9cKy0vZywiwrEiKS5yZXBsYWNlKC9cLnsyLH0vZywi4oCmIikucmVwbGFjZSgvKFs/IV0p4oCmL2csIiQxLi4iKS5yZXBsYWNlKC8oWz8hXSl7NCx9L2csIiQxJDEkMSIpLnJlcGxhY2UoLyx7Mix9L2csIiwiKS5yZXBsYWNlKC8oXnxbXi1dKS0tLShbXi1dfCQpL2dtLCIkMeKAlCQyIikucmVwbGFjZSgvKF58XHMpLS0oXHN8JCkvZ20sIiQx4oCTJDIiKS5yZXBsYWNlKC8oXnxbXi1cc10pLS0oW14tXHNdfCQpL2dtLCIkMeKAkyQyIil9dG9rZW4uY29udGVudD10ZXh0fX19fX0se31dLDQ1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIFFVT1RFX1RFU1RfUkU9L1snIl0vO3ZhciBRVU9URV9SRT0vWyciXS9nO3ZhciBQVU5DVF9SRT0vWy1ccygpXFtcXV0vO3ZhciBBUE9TVFJPUEhFPSLigJkiO2Z1bmN0aW9uIGlzTGV0dGVyKHN0cixwb3Mpe2lmKHBvczwwfHxwb3M+PXN0ci5sZW5ndGgpe3JldHVybiBmYWxzZX1yZXR1cm4hUFVOQ1RfUkUudGVzdChzdHJbcG9zXSl9ZnVuY3Rpb24gcmVwbGFjZUF0KHN0cixpbmRleCxjaCl7cmV0dXJuIHN0ci5zdWJzdHIoMCxpbmRleCkrY2grc3RyLnN1YnN0cihpbmRleCsxKX1tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBzbWFydHF1b3RlcyhzdGF0ZSl7dmFyIGksdG9rZW4sdGV4dCx0LHBvcyxtYXgsdGhpc0xldmVsLGxhc3RTcGFjZSxuZXh0U3BhY2UsaXRlbSxjYW5PcGVuLGNhbkNsb3NlLGosaXNTaW5nbGUsYmxrSWR4LHRva2VucyxzdGFjaztpZighc3RhdGUub3B0aW9ucy50eXBvZ3JhcGhlcil7cmV0dXJufXN0YWNrPVtdO2ZvcihibGtJZHg9c3RhdGUudG9rZW5zLmxlbmd0aC0xO2Jsa0lkeD49MDtibGtJZHgtLSl7aWYoc3RhdGUudG9rZW5zW2Jsa0lkeF0udHlwZSE9PSJpbmxpbmUiKXtjb250aW51ZX10b2tlbnM9c3RhdGUudG9rZW5zW2Jsa0lkeF0uY2hpbGRyZW47c3RhY2subGVuZ3RoPTA7Zm9yKGk9MDtpPHRva2Vucy5sZW5ndGg7aSsrKXt0b2tlbj10b2tlbnNbaV07aWYodG9rZW4udHlwZSE9PSJ0ZXh0Inx8UVVPVEVfVEVTVF9SRS50ZXN0KHRva2VuLnRleHQpKXtjb250aW51ZX10aGlzTGV2ZWw9dG9rZW5zW2ldLmxldmVsO2ZvcihqPXN0YWNrLmxlbmd0aC0xO2o+PTA7ai0tKXtpZihzdGFja1tqXS5sZXZlbDw9dGhpc0xldmVsKXticmVha319c3RhY2subGVuZ3RoPWorMTt0ZXh0PXRva2VuLmNvbnRlbnQ7cG9zPTA7bWF4PXRleHQubGVuZ3RoO09VVEVSOndoaWxlKHBvczxtYXgpe1FVT1RFX1JFLmxhc3RJbmRleD1wb3M7dD1RVU9URV9SRS5leGVjKHRleHQpO2lmKCF0KXticmVha31sYXN0U3BhY2U9IWlzTGV0dGVyKHRleHQsdC5pbmRleC0xKTtwb3M9dC5pbmRleCsxO2lzU2luZ2xlPXRbMF09PT0iJyI7bmV4dFNwYWNlPSFpc0xldHRlcih0ZXh0LHBvcyk7aWYoIW5leHRTcGFjZSYmIWxhc3RTcGFjZSl7aWYoaXNTaW5nbGUpe3Rva2VuLmNvbnRlbnQ9cmVwbGFjZUF0KHRva2VuLmNvbnRlbnQsdC5pbmRleCxBUE9TVFJPUEhFKX1jb250aW51ZX1jYW5PcGVuPSFuZXh0U3BhY2U7Y2FuQ2xvc2U9IWxhc3RTcGFjZTtpZihjYW5DbG9zZSl7Zm9yKGo9c3RhY2subGVuZ3RoLTE7aj49MDtqLS0pe2l0ZW09c3RhY2tbal07aWYoc3RhY2tbal0ubGV2ZWw8dGhpc0xldmVsKXticmVha31pZihpdGVtLnNpbmdsZT09PWlzU2luZ2xlJiZzdGFja1tqXS5sZXZlbD09PXRoaXNMZXZlbCl7aXRlbT1zdGFja1tqXTtpZihpc1NpbmdsZSl7dG9rZW5zW2l0ZW0udG9rZW5dLmNvbnRlbnQ9cmVwbGFjZUF0KHRva2Vuc1tpdGVtLnRva2VuXS5jb250ZW50LGl0ZW0ucG9zLHN0YXRlLm9wdGlvbnMucXVvdGVzWzJdKTt0b2tlbi5jb250ZW50PXJlcGxhY2VBdCh0b2tlbi5jb250ZW50LHQuaW5kZXgsc3RhdGUub3B0aW9ucy5xdW90ZXNbM10pfWVsc2V7dG9rZW5zW2l0ZW0udG9rZW5dLmNvbnRlbnQ9cmVwbGFjZUF0KHRva2Vuc1tpdGVtLnRva2VuXS5jb250ZW50LGl0ZW0ucG9zLHN0YXRlLm9wdGlvbnMucXVvdGVzWzBdKTt0b2tlbi5jb250ZW50PXJlcGxhY2VBdCh0b2tlbi5jb250ZW50LHQuaW5kZXgsc3RhdGUub3B0aW9ucy5xdW90ZXNbMV0pfXN0YWNrLmxlbmd0aD1qO2NvbnRpbnVlIE9VVEVSfX19aWYoY2FuT3Blbil7c3RhY2sucHVzaCh7dG9rZW46aSxwb3M6dC5pbmRleCxzaW5nbGU6aXNTaW5nbGUsbGV2ZWw6dGhpc0xldmVsfSl9ZWxzZSBpZihjYW5DbG9zZSYmaXNTaW5nbGUpe3Rva2VuLmNvbnRlbnQ9cmVwbGFjZUF0KHRva2VuLmNvbnRlbnQsdC5pbmRleCxBUE9TVFJPUEhFKX19fX19fSx7fV0sNDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgdXJsX3NjaGVtYXM9cmVxdWlyZSgiLi4vY29tbW9uL3VybF9zY2hlbWFzIik7dmFyIG5vcm1hbGl6ZUxpbms9cmVxdWlyZSgiLi4vaGVscGVycy9ub3JtYWxpemVfbGluayIpO3ZhciBFTUFJTF9SRT0vXjwoW2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSopPi87dmFyIEFVVE9MSU5LX1JFPS9ePChbYS16QS1aLlwtXXsxLDI1fSk6KFtePD5ceDAwLVx4MjBdKik+Lzttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBhdXRvbGluayhzdGF0ZSxzaWxlbnQpe3ZhciB0YWlsLGxpbmtNYXRjaCxlbWFpbE1hdGNoLHVybCxmdWxsVXJsLHBvcz1zdGF0ZS5wb3M7aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKSE9PTYwKXtyZXR1cm4gZmFsc2V9dGFpbD1zdGF0ZS5zcmMuc2xpY2UocG9zKTtpZih0YWlsLmluZGV4T2YoIj4iKTwwKXtyZXR1cm4gZmFsc2V9bGlua01hdGNoPXRhaWwubWF0Y2goQVVUT0xJTktfUkUpO2lmKGxpbmtNYXRjaCl7aWYodXJsX3NjaGVtYXMuaW5kZXhPZihsaW5rTWF0Y2hbMV0udG9Mb3dlckNhc2UoKSk8MCl7cmV0dXJuIGZhbHNlfXVybD1saW5rTWF0Y2hbMF0uc2xpY2UoMSwtMSk7ZnVsbFVybD1ub3JtYWxpemVMaW5rKHVybCk7aWYoIXN0YXRlLnBhcnNlci52YWxpZGF0ZUxpbmsodXJsKSl7cmV0dXJuIGZhbHNlfWlmKCFzaWxlbnQpe3N0YXRlLnB1c2goe3R5cGU6Imxpbmtfb3BlbiIsaHJlZjpmdWxsVXJsLGxldmVsOnN0YXRlLmxldmVsfSk7c3RhdGUucHVzaCh7dHlwZToidGV4dCIsY29udGVudDp1cmwsbGV2ZWw6c3RhdGUubGV2ZWwrMX0pO3N0YXRlLnB1c2goe3R5cGU6ImxpbmtfY2xvc2UiLGxldmVsOnN0YXRlLmxldmVsfSl9c3RhdGUucG9zKz1saW5rTWF0Y2hbMF0ubGVuZ3RoO3JldHVybiB0cnVlfWVtYWlsTWF0Y2g9dGFpbC5tYXRjaChFTUFJTF9SRSk7aWYoZW1haWxNYXRjaCl7dXJsPWVtYWlsTWF0Y2hbMF0uc2xpY2UoMSwtMSk7ZnVsbFVybD1ub3JtYWxpemVMaW5rKCJtYWlsdG86Iit1cmwpO2lmKCFzdGF0ZS5wYXJzZXIudmFsaWRhdGVMaW5rKGZ1bGxVcmwpKXtyZXR1cm4gZmFsc2V9aWYoIXNpbGVudCl7c3RhdGUucHVzaCh7dHlwZToibGlua19vcGVuIixocmVmOmZ1bGxVcmwsbGV2ZWw6c3RhdGUubGV2ZWx9KTtzdGF0ZS5wdXNoKHt0eXBlOiJ0ZXh0Iixjb250ZW50OnVybCxsZXZlbDpzdGF0ZS5sZXZlbCsxfSk7c3RhdGUucHVzaCh7dHlwZToibGlua19jbG9zZSIsbGV2ZWw6c3RhdGUubGV2ZWx9KX1zdGF0ZS5wb3MrPWVtYWlsTWF0Y2hbMF0ubGVuZ3RoO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX19LHsiLi4vY29tbW9uL3VybF9zY2hlbWFzIjo3LCIuLi9oZWxwZXJzL25vcm1hbGl6ZV9saW5rIjoxMn1dLDQ3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gYmFja3RpY2tzKHN0YXRlLHNpbGVudCl7dmFyIHN0YXJ0LG1heCxtYXJrZXIsbWF0Y2hTdGFydCxtYXRjaEVuZCxwb3M9c3RhdGUucG9zLGNoPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk7aWYoY2ghPT05Nil7cmV0dXJuIGZhbHNlfXN0YXJ0PXBvcztwb3MrKzttYXg9c3RhdGUucG9zTWF4O3doaWxlKHBvczxtYXgmJnN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk9PT05Nil7cG9zKyt9bWFya2VyPXN0YXRlLnNyYy5zbGljZShzdGFydCxwb3MpO21hdGNoU3RhcnQ9bWF0Y2hFbmQ9cG9zO3doaWxlKChtYXRjaFN0YXJ0PXN0YXRlLnNyYy5pbmRleE9mKCJgIixtYXRjaEVuZCkpIT09LTEpe21hdGNoRW5kPW1hdGNoU3RhcnQrMTt3aGlsZShtYXRjaEVuZDxtYXgmJnN0YXRlLnNyYy5jaGFyQ29kZUF0KG1hdGNoRW5kKT09PTk2KXttYXRjaEVuZCsrfWlmKG1hdGNoRW5kLW1hdGNoU3RhcnQ9PT1tYXJrZXIubGVuZ3RoKXtpZighc2lsZW50KXtzdGF0ZS5wdXNoKHt0eXBlOiJjb2RlIixjb250ZW50OnN0YXRlLnNyYy5zbGljZShwb3MsbWF0Y2hTdGFydCkucmVwbGFjZSgvWyBcbl0rL2csIiAiKS50cmltKCksYmxvY2s6ZmFsc2UsbGV2ZWw6c3RhdGUubGV2ZWx9KX1zdGF0ZS5wb3M9bWF0Y2hFbmQ7cmV0dXJuIHRydWV9fWlmKCFzaWxlbnQpe3N0YXRlLnBlbmRpbmcrPW1hcmtlcn1zdGF0ZS5wb3MrPW1hcmtlci5sZW5ndGg7cmV0dXJuIHRydWV9fSx7fV0sNDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBkZWwoc3RhdGUsc2lsZW50KXt2YXIgZm91bmQscG9zLHN0YWNrLG1heD1zdGF0ZS5wb3NNYXgsc3RhcnQ9c3RhdGUucG9zLGxhc3RDaGFyLG5leHRDaGFyO2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXJ0KSE9PTEyNil7cmV0dXJuIGZhbHNlfWlmKHNpbGVudCl7cmV0dXJuIGZhbHNlfWlmKHN0YXJ0KzQ+PW1heCl7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXJ0KzEpIT09MTI2KXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUubGV2ZWw+PXN0YXRlLm9wdGlvbnMubWF4TmVzdGluZyl7cmV0dXJuIGZhbHNlfWxhc3RDaGFyPXN0YXJ0PjA/c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQtMSk6LTE7bmV4dENoYXI9c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQrMik7aWYobGFzdENoYXI9PT0xMjYpe3JldHVybiBmYWxzZX1pZihuZXh0Q2hhcj09PTEyNil7cmV0dXJuIGZhbHNlfWlmKG5leHRDaGFyPT09MzJ8fG5leHRDaGFyPT09MTApe3JldHVybiBmYWxzZX1wb3M9c3RhcnQrMjt3aGlsZShwb3M8bWF4JiZzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpPT09MTI2KXtwb3MrK31pZihwb3M+c3RhcnQrMyl7c3RhdGUucG9zKz1wb3Mtc3RhcnQ7aWYoIXNpbGVudCl7c3RhdGUucGVuZGluZys9c3RhdGUuc3JjLnNsaWNlKHN0YXJ0LHBvcyl9cmV0dXJuIHRydWV9c3RhdGUucG9zPXN0YXJ0KzI7c3RhY2s9MTt3aGlsZShzdGF0ZS5wb3MrMTxtYXgpe2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXRlLnBvcyk9PT0xMjYpe2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXRlLnBvcysxKT09PTEyNil7bGFzdENoYXI9c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhdGUucG9zLTEpO25leHRDaGFyPXN0YXRlLnBvcysyPG1heD9zdGF0ZS5zcmMuY2hhckNvZGVBdChzdGF0ZS5wb3MrMik6LTE7aWYobmV4dENoYXIhPT0xMjYmJmxhc3RDaGFyIT09MTI2KXtpZihsYXN0Q2hhciE9PTMyJiZsYXN0Q2hhciE9PTEwKXtzdGFjay0tfWVsc2UgaWYobmV4dENoYXIhPT0zMiYmbmV4dENoYXIhPT0xMCl7c3RhY2srK31pZihzdGFjazw9MCl7Zm91bmQ9dHJ1ZTticmVha319fX1zdGF0ZS5wYXJzZXIuc2tpcFRva2VuKHN0YXRlKX1pZighZm91bmQpe3N0YXRlLnBvcz1zdGFydDtyZXR1cm4gZmFsc2V9c3RhdGUucG9zTWF4PXN0YXRlLnBvcztzdGF0ZS5wb3M9c3RhcnQrMjtpZighc2lsZW50KXtzdGF0ZS5wdXNoKHt0eXBlOiJkZWxfb3BlbiIsbGV2ZWw6c3RhdGUubGV2ZWwrK30pO3N0YXRlLnBhcnNlci50b2tlbml6ZShzdGF0ZSk7c3RhdGUucHVzaCh7dHlwZToiZGVsX2Nsb3NlIixsZXZlbDotLXN0YXRlLmxldmVsfSl9c3RhdGUucG9zPXN0YXRlLnBvc01heCsyO3N0YXRlLnBvc01heD1tYXg7cmV0dXJuIHRydWV9fSx7fV0sNDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpc0FscGhhTnVtKGNvZGUpe3JldHVybiBjb2RlPj00OCYmY29kZTw9NTd8fGNvZGU+PTY1JiZjb2RlPD05MHx8Y29kZT49OTcmJmNvZGU8PTEyMn1mdW5jdGlvbiBzY2FuRGVsaW1zKHN0YXRlLHN0YXJ0KXt2YXIgcG9zPXN0YXJ0LGxhc3RDaGFyLG5leHRDaGFyLGNvdW50LGNhbl9vcGVuPXRydWUsY2FuX2Nsb3NlPXRydWUsbWF4PXN0YXRlLnBvc01heCxtYXJrZXI9c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQpO2xhc3RDaGFyPXN0YXJ0PjA/c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQtMSk6LTE7d2hpbGUocG9zPG1heCYmc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKT09PW1hcmtlcil7cG9zKyt9aWYocG9zPj1tYXgpe2Nhbl9vcGVuPWZhbHNlfWNvdW50PXBvcy1zdGFydDtpZihjb3VudD49NCl7Y2FuX29wZW49Y2FuX2Nsb3NlPWZhbHNlfWVsc2V7bmV4dENoYXI9cG9zPG1heD9zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpOi0xO2lmKG5leHRDaGFyPT09MzJ8fG5leHRDaGFyPT09MTApe2Nhbl9vcGVuPWZhbHNlfWlmKGxhc3RDaGFyPT09MzJ8fGxhc3RDaGFyPT09MTApe2Nhbl9jbG9zZT1mYWxzZX1pZihtYXJrZXI9PT05NSl7aWYoaXNBbHBoYU51bShsYXN0Q2hhcikpe2Nhbl9vcGVuPWZhbHNlfWlmKGlzQWxwaGFOdW0obmV4dENoYXIpKXtjYW5fY2xvc2U9ZmFsc2V9fX1yZXR1cm57Y2FuX29wZW46Y2FuX29wZW4sY2FuX2Nsb3NlOmNhbl9jbG9zZSxkZWxpbXM6Y291bnR9fW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGVtcGhhc2lzKHN0YXRlLHNpbGVudCl7dmFyIHN0YXJ0Q291bnQsY291bnQsZm91bmQsb2xkQ291bnQsbmV3Q291bnQsc3RhY2sscmVzLG1heD1zdGF0ZS5wb3NNYXgsc3RhcnQ9c3RhdGUucG9zLG1hcmtlcj1zdGF0ZS5zcmMuY2hhckNvZGVBdChzdGFydCk7aWYobWFya2VyIT09OTUmJm1hcmtlciE9PTQyKXtyZXR1cm4gZmFsc2V9aWYoc2lsZW50KXtyZXR1cm4gZmFsc2V9cmVzPXNjYW5EZWxpbXMoc3RhdGUsc3RhcnQpO3N0YXJ0Q291bnQ9cmVzLmRlbGltcztpZighcmVzLmNhbl9vcGVuKXtzdGF0ZS5wb3MrPXN0YXJ0Q291bnQ7aWYoIXNpbGVudCl7c3RhdGUucGVuZGluZys9c3RhdGUuc3JjLnNsaWNlKHN0YXJ0LHN0YXRlLnBvcyl9cmV0dXJuIHRydWV9aWYoc3RhdGUubGV2ZWw+PXN0YXRlLm9wdGlvbnMubWF4TmVzdGluZyl7cmV0dXJuIGZhbHNlfXN0YXRlLnBvcz1zdGFydCtzdGFydENvdW50O3N0YWNrPVtzdGFydENvdW50XTt3aGlsZShzdGF0ZS5wb3M8bWF4KXtpZihzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGF0ZS5wb3MpPT09bWFya2VyKXtyZXM9c2NhbkRlbGltcyhzdGF0ZSxzdGF0ZS5wb3MpO2NvdW50PXJlcy5kZWxpbXM7aWYocmVzLmNhbl9jbG9zZSl7b2xkQ291bnQ9c3RhY2sucG9wKCk7bmV3Q291bnQ9Y291bnQ7d2hpbGUob2xkQ291bnQhPT1uZXdDb3VudCl7aWYobmV3Q291bnQ8b2xkQ291bnQpe3N0YWNrLnB1c2gob2xkQ291bnQtbmV3Q291bnQpO2JyZWFrfW5ld0NvdW50LT1vbGRDb3VudDtpZihzdGFjay5sZW5ndGg9PT0wKXticmVha31zdGF0ZS5wb3MrPW9sZENvdW50O29sZENvdW50PXN0YWNrLnBvcCgpfWlmKHN0YWNrLmxlbmd0aD09PTApe3N0YXJ0Q291bnQ9b2xkQ291bnQ7Zm91bmQ9dHJ1ZTticmVha31zdGF0ZS5wb3MrPWNvdW50O2NvbnRpbnVlfWlmKHJlcy5jYW5fb3Blbil7c3RhY2sucHVzaChjb3VudCl9c3RhdGUucG9zKz1jb3VudDtjb250aW51ZX1zdGF0ZS5wYXJzZXIuc2tpcFRva2VuKHN0YXRlKX1pZighZm91bmQpe3N0YXRlLnBvcz1zdGFydDtyZXR1cm4gZmFsc2V9c3RhdGUucG9zTWF4PXN0YXRlLnBvcztzdGF0ZS5wb3M9c3RhcnQrc3RhcnRDb3VudDtpZighc2lsZW50KXtpZihzdGFydENvdW50PT09Mnx8c3RhcnRDb3VudD09PTMpe3N0YXRlLnB1c2goe3R5cGU6InN0cm9uZ19vcGVuIixsZXZlbDpzdGF0ZS5sZXZlbCsrfSl9aWYoc3RhcnRDb3VudD09PTF8fHN0YXJ0Q291bnQ9PT0zKXtzdGF0ZS5wdXNoKHt0eXBlOiJlbV9vcGVuIixsZXZlbDpzdGF0ZS5sZXZlbCsrfSl9c3RhdGUucGFyc2VyLnRva2VuaXplKHN0YXRlKTtpZihzdGFydENvdW50PT09MXx8c3RhcnRDb3VudD09PTMpe3N0YXRlLnB1c2goe3R5cGU6ImVtX2Nsb3NlIixsZXZlbDotLXN0YXRlLmxldmVsfSl9aWYoc3RhcnRDb3VudD09PTJ8fHN0YXJ0Q291bnQ9PT0zKXtzdGF0ZS5wdXNoKHt0eXBlOiJzdHJvbmdfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KX19c3RhdGUucG9zPXN0YXRlLnBvc01heCtzdGFydENvdW50O3N0YXRlLnBvc01heD1tYXg7cmV0dXJuIHRydWV9fSx7fV0sNTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZW50aXRpZXM9cmVxdWlyZSgiLi4vY29tbW9uL2VudGl0aWVzIik7dmFyIGhhcz1yZXF1aXJlKCIuLi9jb21tb24vdXRpbHMiKS5oYXM7dmFyIGlzVmFsaWRFbnRpdHlDb2RlPXJlcXVpcmUoIi4uL2NvbW1vbi91dGlscyIpLmlzVmFsaWRFbnRpdHlDb2RlO3ZhciBmcm9tQ29kZVBvaW50PXJlcXVpcmUoIi4uL2NvbW1vbi91dGlscyIpLmZyb21Db2RlUG9pbnQ7dmFyIERJR0lUQUxfUkU9L14mIygoPzp4W2EtZjAtOV17MSw4fXxbMC05XXsxLDh9KSk7L2k7dmFyIE5BTUVEX1JFPS9eJihbYS16XVthLXowLTldezEsMzF9KTsvaTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBlbnRpdHkoc3RhdGUsc2lsZW50KXt2YXIgY2gsY29kZSxtYXRjaCxwb3M9c3RhdGUucG9zLG1heD1zdGF0ZS5wb3NNYXg7aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKSE9PTM4KXtyZXR1cm4gZmFsc2V9aWYocG9zKzE8bWF4KXtjaD1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MrMSk7aWYoY2g9PT0zNSl7bWF0Y2g9c3RhdGUuc3JjLnNsaWNlKHBvcykubWF0Y2goRElHSVRBTF9SRSk7aWYobWF0Y2gpe2lmKCFzaWxlbnQpe2NvZGU9bWF0Y2hbMV1bMF0udG9Mb3dlckNhc2UoKT09PSJ4Ij9wYXJzZUludChtYXRjaFsxXS5zbGljZSgxKSwxNik6cGFyc2VJbnQobWF0Y2hbMV0sMTApO3N0YXRlLnBlbmRpbmcrPWlzVmFsaWRFbnRpdHlDb2RlKGNvZGUpP2Zyb21Db2RlUG9pbnQoY29kZSk6ZnJvbUNvZGVQb2ludCg2NTUzMyl9c3RhdGUucG9zKz1tYXRjaFswXS5sZW5ndGg7cmV0dXJuIHRydWV9fWVsc2V7bWF0Y2g9c3RhdGUuc3JjLnNsaWNlKHBvcykubWF0Y2goTkFNRURfUkUpO2lmKG1hdGNoKXtpZihoYXMoZW50aXRpZXMsbWF0Y2hbMV0pKXtpZighc2lsZW50KXtzdGF0ZS5wZW5kaW5nKz1lbnRpdGllc1ttYXRjaFsxXV19c3RhdGUucG9zKz1tYXRjaFswXS5sZW5ndGg7cmV0dXJuIHRydWV9fX19aWYoIXNpbGVudCl7c3RhdGUucGVuZGluZys9IiYifXN0YXRlLnBvcysrO3JldHVybiB0cnVlfX0seyIuLi9jb21tb24vZW50aXRpZXMiOjQsIi4uL2NvbW1vbi91dGlscyI6OH1dLDUxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIEVTQ0FQRUQ9W107Zm9yKHZhciBpPTA7aTwyNTY7aSsrKXtFU0NBUEVELnB1c2goMCl9IlxcIVwiIyQlJicoKSorLC4vOjs8PT4/QFtdXl9ge3x9fi0iLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKGNoKXtFU0NBUEVEW2NoLmNoYXJDb2RlQXQoMCldPTF9KTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBlc2NhcGUoc3RhdGUsc2lsZW50KXt2YXIgY2gscG9zPXN0YXRlLnBvcyxtYXg9c3RhdGUucG9zTWF4O2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcykhPT05Mil7cmV0dXJuIGZhbHNlfXBvcysrO2lmKHBvczxtYXgpe2NoPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk7aWYoY2g8MjU2JiZFU0NBUEVEW2NoXSE9PTApe2lmKCFzaWxlbnQpe3N0YXRlLnBlbmRpbmcrPXN0YXRlLnNyY1twb3NdfXN0YXRlLnBvcys9MjtyZXR1cm4gdHJ1ZX1pZihjaD09PTEwKXtpZighc2lsZW50KXtzdGF0ZS5wdXNoKHt0eXBlOiJoYXJkYnJlYWsiLGxldmVsOnN0YXRlLmxldmVsfSl9cG9zKys7d2hpbGUocG9zPG1heCYmc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKT09PTMyKXtwb3MrK31zdGF0ZS5wb3M9cG9zO3JldHVybiB0cnVlfX1pZighc2lsZW50KXtzdGF0ZS5wZW5kaW5nKz0iXFwifXN0YXRlLnBvcysrO3JldHVybiB0cnVlfX0se31dLDUyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIHBhcnNlTGlua0xhYmVsPXJlcXVpcmUoIi4uL2hlbHBlcnMvcGFyc2VfbGlua19sYWJlbCIpO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGZvb3Rub3RlX2lubGluZShzdGF0ZSxzaWxlbnQpe3ZhciBsYWJlbFN0YXJ0LGxhYmVsRW5kLGZvb3Rub3RlSWQsb2xkTGVuZ3RoLG1heD1zdGF0ZS5wb3NNYXgsc3RhcnQ9c3RhdGUucG9zO2lmKHN0YXJ0KzI+PW1heCl7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXJ0KSE9PTk0KXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQrMSkhPT05MSl7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLmxldmVsPj1zdGF0ZS5vcHRpb25zLm1heE5lc3Rpbmcpe3JldHVybiBmYWxzZX1sYWJlbFN0YXJ0PXN0YXJ0KzI7bGFiZWxFbmQ9cGFyc2VMaW5rTGFiZWwoc3RhdGUsc3RhcnQrMSk7aWYobGFiZWxFbmQ8MCl7cmV0dXJuIGZhbHNlfWlmKCFzaWxlbnQpe2lmKCFzdGF0ZS5lbnYuZm9vdG5vdGVzKXtzdGF0ZS5lbnYuZm9vdG5vdGVzPXt9fWlmKCFzdGF0ZS5lbnYuZm9vdG5vdGVzLmxpc3Qpe3N0YXRlLmVudi5mb290bm90ZXMubGlzdD1bXX1mb290bm90ZUlkPXN0YXRlLmVudi5mb290bm90ZXMubGlzdC5sZW5ndGg7c3RhdGUucG9zPWxhYmVsU3RhcnQ7c3RhdGUucG9zTWF4PWxhYmVsRW5kO3N0YXRlLnB1c2goe3R5cGU6ImZvb3Rub3RlX3JlZiIsaWQ6Zm9vdG5vdGVJZCxsZXZlbDpzdGF0ZS5sZXZlbH0pO3N0YXRlLmxpbmtMZXZlbCsrO29sZExlbmd0aD1zdGF0ZS50b2tlbnMubGVuZ3RoO3N0YXRlLnBhcnNlci50b2tlbml6ZShzdGF0ZSk7c3RhdGUuZW52LmZvb3Rub3Rlcy5saXN0W2Zvb3Rub3RlSWRdPXt0b2tlbnM6c3RhdGUudG9rZW5zLnNwbGljZShvbGRMZW5ndGgpfTtzdGF0ZS5saW5rTGV2ZWwtLX1zdGF0ZS5wb3M9bGFiZWxFbmQrMTtzdGF0ZS5wb3NNYXg9bWF4O3JldHVybiB0cnVlfX0seyIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfbGFiZWwiOjE1fV0sNTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBmb290bm90ZV9yZWYoc3RhdGUsc2lsZW50KXt2YXIgbGFiZWwscG9zLGZvb3Rub3RlSWQsZm9vdG5vdGVTdWJJZCxtYXg9c3RhdGUucG9zTWF4LHN0YXJ0PXN0YXRlLnBvcztpZihzdGFydCszPm1heCl7cmV0dXJuIGZhbHNlfWlmKCFzdGF0ZS5lbnYuZm9vdG5vdGVzfHwhc3RhdGUuZW52LmZvb3Rub3Rlcy5yZWZzKXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQpIT09OTEpe3JldHVybiBmYWxzZX1pZihzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGFydCsxKSE9PTk0KXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUubGV2ZWw+PXN0YXRlLm9wdGlvbnMubWF4TmVzdGluZyl7cmV0dXJuIGZhbHNlfWZvcihwb3M9c3RhcnQrMjtwb3M8bWF4O3BvcysrKXtpZihzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpPT09MzIpe3JldHVybiBmYWxzZX1pZihzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpPT09MTApe3JldHVybiBmYWxzZX1pZihzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpPT09OTMpe2JyZWFrfX1pZihwb3M9PT1zdGFydCsyKXtyZXR1cm4gZmFsc2V9aWYocG9zPj1tYXgpe3JldHVybiBmYWxzZX1wb3MrKztsYWJlbD1zdGF0ZS5zcmMuc2xpY2Uoc3RhcnQrMixwb3MtMSk7aWYodHlwZW9mIHN0YXRlLmVudi5mb290bm90ZXMucmVmc1siOiIrbGFiZWxdPT09InVuZGVmaW5lZCIpe3JldHVybiBmYWxzZX1pZighc2lsZW50KXtpZighc3RhdGUuZW52LmZvb3Rub3Rlcy5saXN0KXtzdGF0ZS5lbnYuZm9vdG5vdGVzLmxpc3Q9W119aWYoc3RhdGUuZW52LmZvb3Rub3Rlcy5yZWZzWyI6IitsYWJlbF08MCl7Zm9vdG5vdGVJZD1zdGF0ZS5lbnYuZm9vdG5vdGVzLmxpc3QubGVuZ3RoO3N0YXRlLmVudi5mb290bm90ZXMubGlzdFtmb290bm90ZUlkXT17bGFiZWw6bGFiZWwsY291bnQ6MH07c3RhdGUuZW52LmZvb3Rub3Rlcy5yZWZzWyI6IitsYWJlbF09Zm9vdG5vdGVJZH1lbHNle2Zvb3Rub3RlSWQ9c3RhdGUuZW52LmZvb3Rub3Rlcy5yZWZzWyI6IitsYWJlbF19Zm9vdG5vdGVTdWJJZD1zdGF0ZS5lbnYuZm9vdG5vdGVzLmxpc3RbZm9vdG5vdGVJZF0uY291bnQ7c3RhdGUuZW52LmZvb3Rub3Rlcy5saXN0W2Zvb3Rub3RlSWRdLmNvdW50Kys7c3RhdGUucHVzaCh7dHlwZToiZm9vdG5vdGVfcmVmIixpZDpmb290bm90ZUlkLHN1YklkOmZvb3Rub3RlU3ViSWQsbGV2ZWw6c3RhdGUubGV2ZWx9KX1zdGF0ZS5wb3M9cG9zO3N0YXRlLnBvc01heD1tYXg7cmV0dXJuIHRydWV9fSx7fV0sNTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijt2YXIgSFRNTF9UQUdfUkU9cmVxdWlyZSgiLi4vY29tbW9uL2h0bWxfcmUiKS5IVE1MX1RBR19SRTtmdW5jdGlvbiBpc0xldHRlcihjaCl7dmFyIGxjPWNofDMyO3JldHVybiBsYz49OTcmJmxjPD0xMjJ9bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gaHRtbHRhZyhzdGF0ZSxzaWxlbnQpe3ZhciBjaCxtYXRjaCxtYXgscG9zPXN0YXRlLnBvcztpZighc3RhdGUub3B0aW9ucy5odG1sKXtyZXR1cm4gZmFsc2V9bWF4PXN0YXRlLnBvc01heDtpZihzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpIT09NjB8fHBvcysyPj1tYXgpe3JldHVybiBmYWxzZX1jaD1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MrMSk7aWYoY2ghPT0zMyYmY2ghPT02MyYmY2ghPT00NyYmIWlzTGV0dGVyKGNoKSl7cmV0dXJuIGZhbHNlfW1hdGNoPXN0YXRlLnNyYy5zbGljZShwb3MpLm1hdGNoKEhUTUxfVEFHX1JFKTtpZighbWF0Y2gpe3JldHVybiBmYWxzZX1pZighc2lsZW50KXtzdGF0ZS5wdXNoKHt0eXBlOiJodG1sdGFnIixjb250ZW50OnN0YXRlLnNyYy5zbGljZShwb3MscG9zK21hdGNoWzBdLmxlbmd0aCksbGV2ZWw6c3RhdGUubGV2ZWx9KX1zdGF0ZS5wb3MrPW1hdGNoWzBdLmxlbmd0aDtyZXR1cm4gdHJ1ZX19LHsiLi4vY29tbW9uL2h0bWxfcmUiOjZ9XSw1NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIGlucyhzdGF0ZSxzaWxlbnQpe3ZhciBmb3VuZCxwb3Msc3RhY2ssbWF4PXN0YXRlLnBvc01heCxzdGFydD1zdGF0ZS5wb3MsbGFzdENoYXIsbmV4dENoYXI7aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQpIT09NDMpe3JldHVybiBmYWxzZX1pZihzaWxlbnQpe3JldHVybiBmYWxzZX1pZihzdGFydCs0Pj1tYXgpe3JldHVybiBmYWxzZX1pZihzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGFydCsxKSE9PTQzKXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUubGV2ZWw+PXN0YXRlLm9wdGlvbnMubWF4TmVzdGluZyl7cmV0dXJuIGZhbHNlfWxhc3RDaGFyPXN0YXJ0PjA/c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQtMSk6LTE7bmV4dENoYXI9c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQrMik7aWYobGFzdENoYXI9PT00Myl7cmV0dXJuIGZhbHNlfWlmKG5leHRDaGFyPT09NDMpe3JldHVybiBmYWxzZX1pZihuZXh0Q2hhcj09PTMyfHxuZXh0Q2hhcj09PTEwKXtyZXR1cm4gZmFsc2V9cG9zPXN0YXJ0KzI7d2hpbGUocG9zPG1heCYmc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKT09PTQzKXtwb3MrK31pZihwb3MhPT1zdGFydCsyKXtzdGF0ZS5wb3MrPXBvcy1zdGFydDtpZighc2lsZW50KXtzdGF0ZS5wZW5kaW5nKz1zdGF0ZS5zcmMuc2xpY2Uoc3RhcnQscG9zKX1yZXR1cm4gdHJ1ZX1zdGF0ZS5wb3M9c3RhcnQrMjtzdGFjaz0xO3doaWxlKHN0YXRlLnBvcysxPG1heCl7aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhdGUucG9zKT09PTQzKXtpZihzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGF0ZS5wb3MrMSk9PT00Myl7bGFzdENoYXI9c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhdGUucG9zLTEpO25leHRDaGFyPXN0YXRlLnBvcysyPG1heD9zdGF0ZS5zcmMuY2hhckNvZGVBdChzdGF0ZS5wb3MrMik6LTE7aWYobmV4dENoYXIhPT00MyYmbGFzdENoYXIhPT00Myl7aWYobGFzdENoYXIhPT0zMiYmbGFzdENoYXIhPT0xMCl7c3RhY2stLX1lbHNlIGlmKG5leHRDaGFyIT09MzImJm5leHRDaGFyIT09MTApe3N0YWNrKyt9aWYoc3RhY2s8PTApe2ZvdW5kPXRydWU7YnJlYWt9fX19c3RhdGUucGFyc2VyLnNraXBUb2tlbihzdGF0ZSl9aWYoIWZvdW5kKXtzdGF0ZS5wb3M9c3RhcnQ7cmV0dXJuIGZhbHNlfXN0YXRlLnBvc01heD1zdGF0ZS5wb3M7c3RhdGUucG9zPXN0YXJ0KzI7aWYoIXNpbGVudCl7c3RhdGUucHVzaCh7dHlwZToiaW5zX29wZW4iLGxldmVsOnN0YXRlLmxldmVsKyt9KTtzdGF0ZS5wYXJzZXIudG9rZW5pemUoc3RhdGUpO3N0YXRlLnB1c2goe3R5cGU6Imluc19jbG9zZSIsbGV2ZWw6LS1zdGF0ZS5sZXZlbH0pfXN0YXRlLnBvcz1zdGF0ZS5wb3NNYXgrMjtzdGF0ZS5wb3NNYXg9bWF4O3JldHVybiB0cnVlfX0se31dLDU2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIHBhcnNlTGlua0xhYmVsPXJlcXVpcmUoIi4uL2hlbHBlcnMvcGFyc2VfbGlua19sYWJlbCIpO3ZhciBwYXJzZUxpbmtEZXN0aW5hdGlvbj1yZXF1aXJlKCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfZGVzdGluYXRpb24iKTt2YXIgcGFyc2VMaW5rVGl0bGU9cmVxdWlyZSgiLi4vaGVscGVycy9wYXJzZV9saW5rX3RpdGxlIik7dmFyIG5vcm1hbGl6ZVJlZmVyZW5jZT1yZXF1aXJlKCIuLi9oZWxwZXJzL25vcm1hbGl6ZV9yZWZlcmVuY2UiKTttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBsaW5rcyhzdGF0ZSxzaWxlbnQpe3ZhciBsYWJlbFN0YXJ0LGxhYmVsRW5kLGxhYmVsLGhyZWYsdGl0bGUscG9zLHJlZixjb2RlLGlzSW1hZ2U9ZmFsc2Usb2xkUG9zPXN0YXRlLnBvcyxtYXg9c3RhdGUucG9zTWF4LHN0YXJ0PXN0YXRlLnBvcyxtYXJrZXI9c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQpO2lmKG1hcmtlcj09PTMzKXtpc0ltYWdlPXRydWU7bWFya2VyPXN0YXRlLnNyYy5jaGFyQ29kZUF0KCsrc3RhcnQpfWlmKG1hcmtlciE9PTkxKXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUubGV2ZWw+PXN0YXRlLm9wdGlvbnMubWF4TmVzdGluZyl7cmV0dXJuIGZhbHNlfWxhYmVsU3RhcnQ9c3RhcnQrMTtsYWJlbEVuZD1wYXJzZUxpbmtMYWJlbChzdGF0ZSxzdGFydCk7aWYobGFiZWxFbmQ8MCl7cmV0dXJuIGZhbHNlfXBvcz1sYWJlbEVuZCsxO2lmKHBvczxtYXgmJnN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk9PT00MCl7cG9zKys7Zm9yKDtwb3M8bWF4O3BvcysrKXtjb2RlPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk7aWYoY29kZSE9PTMyJiZjb2RlIT09MTApe2JyZWFrfX1pZihwb3M+PW1heCl7cmV0dXJuIGZhbHNlfXN0YXJ0PXBvcztpZihwYXJzZUxpbmtEZXN0aW5hdGlvbihzdGF0ZSxwb3MpKXtocmVmPXN0YXRlLmxpbmtDb250ZW50O3Bvcz1zdGF0ZS5wb3N9ZWxzZXtocmVmPSIifXN0YXJ0PXBvcztmb3IoO3BvczxtYXg7cG9zKyspe2NvZGU9c3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKTtpZihjb2RlIT09MzImJmNvZGUhPT0xMCl7YnJlYWt9fWlmKHBvczxtYXgmJnN0YXJ0IT09cG9zJiZwYXJzZUxpbmtUaXRsZShzdGF0ZSxwb3MpKXt0aXRsZT1zdGF0ZS5saW5rQ29udGVudDtwb3M9c3RhdGUucG9zO2Zvcig7cG9zPG1heDtwb3MrKyl7Y29kZT1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpO2lmKGNvZGUhPT0zMiYmY29kZSE9PTEwKXticmVha319fWVsc2V7dGl0bGU9IiJ9aWYocG9zPj1tYXh8fHN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcykhPT00MSl7c3RhdGUucG9zPW9sZFBvcztyZXR1cm4gZmFsc2V9cG9zKyt9ZWxzZXtpZihzdGF0ZS5saW5rTGV2ZWw+MCl7cmV0dXJuIGZhbHNlfWZvcig7cG9zPG1heDtwb3MrKyl7Y29kZT1zdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpO2lmKGNvZGUhPT0zMiYmY29kZSE9PTEwKXticmVha319aWYocG9zPG1heCYmc3RhdGUuc3JjLmNoYXJDb2RlQXQocG9zKT09PTkxKXtzdGFydD1wb3MrMTtwb3M9cGFyc2VMaW5rTGFiZWwoc3RhdGUscG9zKTtpZihwb3M+PTApe2xhYmVsPXN0YXRlLnNyYy5zbGljZShzdGFydCxwb3MrKyl9ZWxzZXtwb3M9c3RhcnQtMX19aWYoIWxhYmVsKXtpZih0eXBlb2YgbGFiZWw9PT0idW5kZWZpbmVkIil7cG9zPWxhYmVsRW5kKzF9bGFiZWw9c3RhdGUuc3JjLnNsaWNlKGxhYmVsU3RhcnQsbGFiZWxFbmQpfXJlZj1zdGF0ZS5lbnYucmVmZXJlbmNlc1tub3JtYWxpemVSZWZlcmVuY2UobGFiZWwpXTtpZighcmVmKXtzdGF0ZS5wb3M9b2xkUG9zO3JldHVybiBmYWxzZX1ocmVmPXJlZi5ocmVmO3RpdGxlPXJlZi50aXRsZX1pZighc2lsZW50KXtzdGF0ZS5wb3M9bGFiZWxTdGFydDtzdGF0ZS5wb3NNYXg9bGFiZWxFbmQ7aWYoaXNJbWFnZSl7c3RhdGUucHVzaCh7dHlwZToiaW1hZ2UiLHNyYzpocmVmLHRpdGxlOnRpdGxlLGFsdDpzdGF0ZS5zcmMuc3Vic3RyKGxhYmVsU3RhcnQsbGFiZWxFbmQtbGFiZWxTdGFydCksbGV2ZWw6c3RhdGUubGV2ZWx9KX1lbHNle3N0YXRlLnB1c2goe3R5cGU6Imxpbmtfb3BlbiIsaHJlZjpocmVmLHRpdGxlOnRpdGxlLGxldmVsOnN0YXRlLmxldmVsKyt9KTtzdGF0ZS5saW5rTGV2ZWwrKztzdGF0ZS5wYXJzZXIudG9rZW5pemUoc3RhdGUpO3N0YXRlLmxpbmtMZXZlbC0tO3N0YXRlLnB1c2goe3R5cGU6ImxpbmtfY2xvc2UiLGxldmVsOi0tc3RhdGUubGV2ZWx9KX19c3RhdGUucG9zPXBvcztzdGF0ZS5wb3NNYXg9bWF4O3JldHVybiB0cnVlfX0seyIuLi9oZWxwZXJzL25vcm1hbGl6ZV9yZWZlcmVuY2UiOjEzLCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfZGVzdGluYXRpb24iOjE0LCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfbGFiZWwiOjE1LCIuLi9oZWxwZXJzL3BhcnNlX2xpbmtfdGl0bGUiOjE2fV0sNTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0Ijttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBkZWwoc3RhdGUsc2lsZW50KXt2YXIgZm91bmQscG9zLHN0YWNrLG1heD1zdGF0ZS5wb3NNYXgsc3RhcnQ9c3RhdGUucG9zLGxhc3RDaGFyLG5leHRDaGFyO2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXJ0KSE9PTYxKXtyZXR1cm4gZmFsc2V9aWYoc2lsZW50KXtyZXR1cm4gZmFsc2V9aWYoc3RhcnQrND49bWF4KXtyZXR1cm4gZmFsc2V9aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhcnQrMSkhPT02MSl7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLmxldmVsPj1zdGF0ZS5vcHRpb25zLm1heE5lc3Rpbmcpe3JldHVybiBmYWxzZX1sYXN0Q2hhcj1zdGFydD4wP3N0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXJ0LTEpOi0xO25leHRDaGFyPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXJ0KzIpO2lmKGxhc3RDaGFyPT09NjEpe3JldHVybiBmYWxzZX1pZihuZXh0Q2hhcj09PTYxKXtyZXR1cm4gZmFsc2V9aWYobmV4dENoYXI9PT0zMnx8bmV4dENoYXI9PT0xMCl7cmV0dXJuIGZhbHNlfXBvcz1zdGFydCsyO3doaWxlKHBvczxtYXgmJnN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcyk9PT02MSl7cG9zKyt9aWYocG9zIT09c3RhcnQrMil7c3RhdGUucG9zKz1wb3Mtc3RhcnQ7aWYoIXNpbGVudCl7c3RhdGUucGVuZGluZys9c3RhdGUuc3JjLnNsaWNlKHN0YXJ0LHBvcyl9cmV0dXJuIHRydWV9c3RhdGUucG9zPXN0YXJ0KzI7c3RhY2s9MTt3aGlsZShzdGF0ZS5wb3MrMTxtYXgpe2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXRlLnBvcyk9PT02MSl7aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhdGUucG9zKzEpPT09NjEpe2xhc3RDaGFyPXN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXRlLnBvcy0xKTtuZXh0Q2hhcj1zdGF0ZS5wb3MrMjxtYXg/c3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhdGUucG9zKzIpOi0xO2lmKG5leHRDaGFyIT09NjEmJmxhc3RDaGFyIT09NjEpe2lmKGxhc3RDaGFyIT09MzImJmxhc3RDaGFyIT09MTApe3N0YWNrLS19ZWxzZSBpZihuZXh0Q2hhciE9PTMyJiZuZXh0Q2hhciE9PTEwKXtzdGFjaysrfWlmKHN0YWNrPD0wKXtmb3VuZD10cnVlO2JyZWFrfX19fXN0YXRlLnBhcnNlci5za2lwVG9rZW4oc3RhdGUpfWlmKCFmb3VuZCl7c3RhdGUucG9zPXN0YXJ0O3JldHVybiBmYWxzZX1zdGF0ZS5wb3NNYXg9c3RhdGUucG9zO3N0YXRlLnBvcz1zdGFydCsyO2lmKCFzaWxlbnQpe3N0YXRlLnB1c2goe3R5cGU6Im1hcmtfb3BlbiIsbGV2ZWw6c3RhdGUubGV2ZWwrK30pO3N0YXRlLnBhcnNlci50b2tlbml6ZShzdGF0ZSk7c3RhdGUucHVzaCh7dHlwZToibWFya19jbG9zZSIsbGV2ZWw6LS1zdGF0ZS5sZXZlbH0pfXN0YXRlLnBvcz1zdGF0ZS5wb3NNYXgrMjtzdGF0ZS5wb3NNYXg9bWF4O3JldHVybiB0cnVlfX0se31dLDU4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24gbmV3bGluZShzdGF0ZSxzaWxlbnQpe3ZhciBwbWF4LG1heCxwb3M9c3RhdGUucG9zO2lmKHN0YXRlLnNyYy5jaGFyQ29kZUF0KHBvcykhPT0xMCl7cmV0dXJuIGZhbHNlfXBtYXg9c3RhdGUucGVuZGluZy5sZW5ndGgtMTttYXg9c3RhdGUucG9zTWF4O2lmKCFzaWxlbnQpe2lmKHBtYXg+PTAmJnN0YXRlLnBlbmRpbmcuY2hhckNvZGVBdChwbWF4KT09PTMyKXtpZihwbWF4Pj0xJiZzdGF0ZS5wZW5kaW5nLmNoYXJDb2RlQXQocG1heC0xKT09PTMyKXtmb3IodmFyIGk9cG1heC0yO2k+PTA7aS0tKXtpZihzdGF0ZS5wZW5kaW5nLmNoYXJDb2RlQXQoaSkhPT0zMil7c3RhdGUucGVuZGluZz1zdGF0ZS5wZW5kaW5nLnN1YnN0cmluZygwLGkrMSk7YnJlYWt9fXN0YXRlLnB1c2goe3R5cGU6ImhhcmRicmVhayIsbGV2ZWw6c3RhdGUubGV2ZWx9KX1lbHNle3N0YXRlLnBlbmRpbmc9c3RhdGUucGVuZGluZy5zbGljZSgwLC0xKTtzdGF0ZS5wdXNoKHt0eXBlOiJzb2Z0YnJlYWsiLGxldmVsOnN0YXRlLmxldmVsfSl9fWVsc2V7c3RhdGUucHVzaCh7dHlwZToic29mdGJyZWFrIixsZXZlbDpzdGF0ZS5sZXZlbH0pfX1wb3MrKzt3aGlsZShwb3M8bWF4JiZzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpPT09MzIpe3BvcysrfXN0YXRlLnBvcz1wb3M7cmV0dXJuIHRydWV9fSx7fV0sNTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBTdGF0ZUlubGluZShzcmMscGFyc2VySW5saW5lLG9wdGlvbnMsZW52LG91dFRva2Vucyl7dGhpcy5zcmM9c3JjO3RoaXMuZW52PWVudjt0aGlzLm9wdGlvbnM9b3B0aW9uczt0aGlzLnBhcnNlcj1wYXJzZXJJbmxpbmU7dGhpcy50b2tlbnM9b3V0VG9rZW5zO3RoaXMucG9zPTA7dGhpcy5wb3NNYXg9dGhpcy5zcmMubGVuZ3RoO3RoaXMubGV2ZWw9MDt0aGlzLnBlbmRpbmc9IiI7dGhpcy5wZW5kaW5nTGV2ZWw9MDt0aGlzLmNhY2hlPVtdO3RoaXMuaXNJbkxhYmVsPWZhbHNlO3RoaXMubGlua0xldmVsPTA7dGhpcy5saW5rQ29udGVudD0iIjt0aGlzLmxhYmVsVW5tYXRjaGVkU2NvcGVzPTB9U3RhdGVJbmxpbmUucHJvdG90eXBlLnB1c2hQZW5kaW5nPWZ1bmN0aW9uKCl7dGhpcy50b2tlbnMucHVzaCh7dHlwZToidGV4dCIsY29udGVudDp0aGlzLnBlbmRpbmcsbGV2ZWw6dGhpcy5wZW5kaW5nTGV2ZWx9KTt0aGlzLnBlbmRpbmc9IiJ9O1N0YXRlSW5saW5lLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHRva2VuKXtpZih0aGlzLnBlbmRpbmcpe3RoaXMucHVzaFBlbmRpbmcoKX10aGlzLnRva2Vucy5wdXNoKHRva2VuKTt0aGlzLnBlbmRpbmdMZXZlbD10aGlzLmxldmVsfTtTdGF0ZUlubGluZS5wcm90b3R5cGUuY2FjaGVTZXQ9ZnVuY3Rpb24oa2V5LHZhbCl7Zm9yKHZhciBpPXRoaXMuY2FjaGUubGVuZ3RoO2k8PWtleTtpKyspe3RoaXMuY2FjaGUucHVzaCgwKX10aGlzLmNhY2hlW2tleV09dmFsfTtTdGF0ZUlubGluZS5wcm90b3R5cGUuY2FjaGVHZXQ9ZnVuY3Rpb24oa2V5KXtyZXR1cm4ga2V5PHRoaXMuY2FjaGUubGVuZ3RoP3RoaXMuY2FjaGVba2V5XTowfTttb2R1bGUuZXhwb3J0cz1TdGF0ZUlubGluZX0se31dLDYwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIFVORVNDQVBFX1JFPS9cXChbIFxcISIjJCUmJygpKissLlwvOjs8PT4/QFtcXV5fYHt8fX4tXSkvZzttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBzdWIoc3RhdGUsc2lsZW50KXt2YXIgZm91bmQsY29udGVudCxtYXg9c3RhdGUucG9zTWF4LHN0YXJ0PXN0YXRlLnBvcztpZihzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGFydCkhPT0xMjYpe3JldHVybiBmYWxzZX1pZihzaWxlbnQpe3JldHVybiBmYWxzZX1pZihzdGFydCsyPj1tYXgpe3JldHVybiBmYWxzZX1pZihzdGF0ZS5sZXZlbD49c3RhdGUub3B0aW9ucy5tYXhOZXN0aW5nKXtyZXR1cm4gZmFsc2V9c3RhdGUucG9zPXN0YXJ0KzE7d2hpbGUoc3RhdGUucG9zPG1heCl7aWYoc3RhdGUuc3JjLmNoYXJDb2RlQXQoc3RhdGUucG9zKT09PTEyNil7Zm91bmQ9dHJ1ZTticmVha31zdGF0ZS5wYXJzZXIuc2tpcFRva2VuKHN0YXRlKX1pZighZm91bmR8fHN0YXJ0KzE9PT1zdGF0ZS5wb3Mpe3N0YXRlLnBvcz1zdGFydDtyZXR1cm4gZmFsc2V9Y29udGVudD1zdGF0ZS5zcmMuc2xpY2Uoc3RhcnQrMSxzdGF0ZS5wb3MpO2lmKGNvbnRlbnQubWF0Y2goLyhefFteXFxdKShcXFxcKSpccy8pKXtzdGF0ZS5wb3M9c3RhcnQ7cmV0dXJuIGZhbHNlfXN0YXRlLnBvc01heD1zdGF0ZS5wb3M7c3RhdGUucG9zPXN0YXJ0KzE7aWYoIXNpbGVudCl7c3RhdGUucHVzaCh7dHlwZToic3ViIixsZXZlbDpzdGF0ZS5sZXZlbCxjb250ZW50OmNvbnRlbnQucmVwbGFjZShVTkVTQ0FQRV9SRSwiJDEiKX0pfXN0YXRlLnBvcz1zdGF0ZS5wb3NNYXgrMTtzdGF0ZS5wb3NNYXg9bWF4O3JldHVybiB0cnVlfX0se31dLDYxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsidXNlIHN0cmljdCI7dmFyIFVORVNDQVBFX1JFPS9cXChbIFxcISIjJCUmJygpKissLlwvOjs8PT4/QFtcXV5fYHt8fX4tXSkvZzttb2R1bGUuZXhwb3J0cz1mdW5jdGlvbiBzdXAoc3RhdGUsc2lsZW50KXt2YXIgZm91bmQsY29udGVudCxtYXg9c3RhdGUucG9zTWF4LHN0YXJ0PXN0YXRlLnBvcztpZihzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGFydCkhPT05NCl7cmV0dXJuIGZhbHNlfWlmKHNpbGVudCl7cmV0dXJuIGZhbHNlfWlmKHN0YXJ0KzI+PW1heCl7cmV0dXJuIGZhbHNlfWlmKHN0YXRlLmxldmVsPj1zdGF0ZS5vcHRpb25zLm1heE5lc3Rpbmcpe3JldHVybiBmYWxzZX1zdGF0ZS5wb3M9c3RhcnQrMTt3aGlsZShzdGF0ZS5wb3M8bWF4KXtpZihzdGF0ZS5zcmMuY2hhckNvZGVBdChzdGF0ZS5wb3MpPT09OTQpe2ZvdW5kPXRydWU7YnJlYWt9c3RhdGUucGFyc2VyLnNraXBUb2tlbihzdGF0ZSl9aWYoIWZvdW5kfHxzdGFydCsxPT09c3RhdGUucG9zKXtzdGF0ZS5wb3M9c3RhcnQ7cmV0dXJuIGZhbHNlfWNvbnRlbnQ9c3RhdGUuc3JjLnNsaWNlKHN0YXJ0KzEsc3RhdGUucG9zKTtpZihjb250ZW50Lm1hdGNoKC8oXnxbXlxcXSkoXFxcXCkqXHMvKSl7c3RhdGUucG9zPXN0YXJ0O3JldHVybiBmYWxzZX1zdGF0ZS5wb3NNYXg9c3RhdGUucG9zO3N0YXRlLnBvcz1zdGFydCsxO2lmKCFzaWxlbnQpe3N0YXRlLnB1c2goe3R5cGU6InN1cCIsbGV2ZWw6c3RhdGUubGV2ZWwsY29udGVudDpjb250ZW50LnJlcGxhY2UoVU5FU0NBUEVfUkUsIiQxIil9KX1zdGF0ZS5wb3M9c3RhdGUucG9zTWF4KzE7c3RhdGUucG9zTWF4PW1heDtyZXR1cm4gdHJ1ZX19LHt9XSw2MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGlzVGVybWluYXRvckNoYXIoY2gpe3N3aXRjaChjaCl7Y2FzZSAxMDpjYXNlIDkyOmNhc2UgOTY6Y2FzZSA0MjpjYXNlIDk1OmNhc2UgOTQ6Y2FzZSA5MTpjYXNlIDkzOmNhc2UgMzM6Y2FzZSAzODpjYXNlIDYwOmNhc2UgNjI6Y2FzZSAxMjM6Y2FzZSAxMjU6Y2FzZSAzNjpjYXNlIDM3OmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA0MzpjYXNlIDYxOmNhc2UgNTg6cmV0dXJuIHRydWU7ZGVmYXVsdDpyZXR1cm4gZmFsc2V9fW1vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIHRleHQoc3RhdGUsc2lsZW50KXt2YXIgcG9zPXN0YXRlLnBvczt3aGlsZShwb3M8c3RhdGUucG9zTWF4JiYhaXNUZXJtaW5hdG9yQ2hhcihzdGF0ZS5zcmMuY2hhckNvZGVBdChwb3MpKSl7cG9zKyt9aWYocG9zPT09c3RhdGUucG9zKXtyZXR1cm4gZmFsc2V9aWYoIXNpbGVudCl7c3RhdGUucGVuZGluZys9c3RhdGUuc3JjLnNsaWNlKHN0YXRlLnBvcyxwb3MpfXN0YXRlLnBvcz1wb3M7cmV0dXJuIHRydWV9fSx7fV0sNjM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIHBhcnNlTWFya2Rvd24odGV4dCl7dmFyIFJlbWFya2FibGU9cmVxdWlyZSgicmVtYXJrYWJsZSIpO3ZhciBtZD1uZXcgUmVtYXJrYWJsZTt2YXIgdG9rZW5zPW1kLnBhcnNlKHRleHQse30pO3ZhciBoZWFkaW5ncz1bXTtmb3IodmFyIGk9MDtpPHRva2Vucy5sZW5ndGg7aSs9MSl7aWYodG9rZW5zW2ldLnR5cGU9PT0iaGVhZGluZ19vcGVuIil7aGVhZGluZ3MucHVzaCh7ZGVwdGg6dG9rZW5zW2ldLmhMZXZlbCxsaW5lOnRva2Vuc1tpXS5saW5lc1swXSxuYW1lOnRva2Vuc1tpKzFdLmNvbnRlbnR9KTtpKz0xfX1yZXR1cm4gaGVhZGluZ3N9fSx7cmVtYXJrYWJsZTozfV0sNjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe21vZHVsZS5leHBvcnRzPWZ1bmN0aW9uIHRyYW5zZm9ybUhlYWRpbmdzKGhlYWRpbmdzKXt2YXIgcm9vdD17bmFtZToicm9vdCIsZGVwdGg6MCxjaGlsZHJlbjpbXX07dmFyIG5vZGU9cm9vdDt2YXIgc3RhY2s9W107dmFyIHRtcDtoZWFkaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKGgpe3doaWxlKGguZGVwdGg8bm9kZS5kZXB0aCsxKXtub2RlPXN0YWNrLnBvcCgpfXdoaWxlKGguZGVwdGg+bm9kZS5kZXB0aCsxKXtpZighbm9kZS5jaGlsZHJlbnx8bm9kZS5jaGlsZHJlbi5sZW5ndGg9PT0wKXt0bXA9e25hbWU6IiIsZGVwdGg6bm9kZS5kZXB0aCsxfTtub2RlLmNoaWxkcmVuPW5vZGUuY2hpbGRyZW58fFtdO25vZGUuY2hpbGRyZW4ucHVzaCh0bXApfXN0YWNrLnB1c2gobm9kZSk7bm9kZT1ub2RlLmNoaWxkcmVuW25vZGUuY2hpbGRyZW4ubGVuZ3RoLTFdfW5vZGUuY2hpbGRyZW49bm9kZS5jaGlsZHJlbnx8W107bm9kZS5jaGlsZHJlbi5wdXNoKGgpfSk7aWYocm9vdC5jaGlsZHJlbi5sZW5ndGg9PT0xKXtyb290PXJvb3QuY2hpbGRyZW5bMF19cmV0dXJuIHJvb3Q7Cn19LHt9XX0se30sWzFdKSgxKX0pOw=="></script>
<script src="data:application/x-javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CgogICAgbmFtZSA6ICdtYXJrbWFwJywKICAgIHR5cGUgOiAnb3V0cHV0JywKICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgLy8gdGhpcyBtYWtlcyB0aGUgc3ZnIG9iamVjdCBhbmQgYXR0YWNoZXMgaXQgdG8gdGhlCiAgICAgICAgLy9pbnN0YW5jZSB2YXJpYWJsZSB3ZSBjYWxsICJ0aGVDaGFydCIgaW4gcmVuZGVyVmFsdWUoKQogICAgICAgIHZhciBzdmcgPSBkMy5zZWxlY3QoZWwpLmFwcGVuZCgic3ZnIikKICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgInJvb3QiKQogICAgICAgICAgICAuYXR0cignd2lkdGgnLCB3aWR0aCkKICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCkKICAgICAgICAgICAgLmF0dHIoImlkIiwibWluZG1hcCIpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHN2ZzpzdmcKICAgICAgICB9OwoKICAgIH0sIC8vd2l0aCBpbml0aWFsaXplCgogICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4KSB7CiAgICAgICAgdmFyIGVsZW1lbnRJZCA9IGVsLmlkOwogICAgICAgIC8vY29uc29sZS5sb2coeC5kYXRhKTsKICAgICAgICB2YXIgZGF0YSA9IHBhcnNlbWQoeC5kYXRhKTsKICAgICAgICAvLyBzZWxlY3QgdGhlIHN2ZyBlbGVtZW50IGFuZCByZW1vdmUgZXhpc3RpbmcgY2hpbGRyZW4KICAgICAgICB2YXIgc3ZnID0gZDMuc2VsZWN0KGVsKS5zZWxlY3QoInN2ZyIpOwogICAgICAgIHN2Zy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTsKICAgICAgICBtYXJrbWFwKCJzdmcjbWluZG1hcCIsIGRhdGEseC5vcHRpb25zKTsKICAgIH0sCiAgICByZXNpemUgOiBmdW5jdGlvbihlbCx3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgZDMuc2VsZWN0KGVsKS5zZWxlY3QoInN2ZyIpCiAgICAgICAgICAgIC5hdHRyKCJ3aWR0aCIsIHdpZHRoKQogICAgICAgICAgICAuYXR0cigiaGVpZ2h0IiwgaGVpZ2h0KTsKICAgIH0KCn0pOwo="></script>
</head>
<body style="background-color:white;">
<div id="htmlwidget_container">
<div id="htmlwidget-57a2b3e93756f4dab5f8" style="width:100%;height:400px;" class="markmap html-widget"></div>
</div>
<script type="application/json" data-for="htmlwidget-57a2b3e93756f4dab5f8">{"x":{"data":"#TOC {\n#TOC {\n# Introduction\n#### Miscellaneous\n# Basics\n## Standard modeling\n## Exploring Results\n## Comparing models\n## Optimization\n# Linear models and GLM \n## Extensions\n### Interactions and Variable transformations\n### Categorical variable\n#### Predictors\n#### Ordinal target\n#### Multinomial\n### Other distributions\n#### Censored, truncated, bounded, and related\n### Miscellaneous\n## GLM list of packages\n## GLM recommended reading\n# Regularization\n## Regularization list of packages\n# Mixed models\n## nlme\n## lme4\n### lme4 extensions\n## The mixed model object\n## Related models\n## Still other packages\n## Mixed models list of packages\n## Mixed models recommended reading\n# Additive models\n## Extensions and other considerations\n## Additive models list of packages\n## GAM recommended reading\n# Survival analysis\n## Survival analysis list of packages\n## Survival analysis recommended reading\n# Survey weighting\n## Survey analysis list of packages\n## Survey analysis recommended reading\n# Principal components & Factor analysis\n## PCA\n## Factor analysis\n## PCA/FA list of packages\n## PCA/FA recommended reading\n# Mixture models and cluster analysis\n## Mixture models\n## Traditional cluster analysis\n## Cluster analysis list of packages\n## Cluster analysis recommended reading\n# Structural Equation Modeling\n## Path Analysis\n## Confirmatory Factor Analysis\n## SEM\n### lavaan extensions\n### Beyond lavaan\n## SEM analysis list of packages\n## SEM recommended reading\n# Graphical models\n### Bayesian networks\n### Network analysis\n## Graphical models list of packages\n## Graphical models recommended reading\n# Time series\n## Time series list of packages\n## Time series recommended reading\n# Spatial models\n### Other tools\n## Spatial list of packages\n## Spatial recommended reading\n# Machine learning\n## Machine Learning list of packages\n## Machine Learning recommended reading\n# Bayesian\n## Miscellaneous packages\n## Stan\n## Other\n## Bayesian list of packages\n## Bayesian recommended reading\n# Text analysis\n## Text analysis list of packages\n## Text analysis recommended reading\n# Discipline specific\n# Modeling frameworks and helpers\n# Misc to do\n# References","options":{"nodeHeight":20,"nodeWidth":200,"spacingVertical":20,"spacingHorizontal":5,"duration":750,"layout":"tree","color":"category20b","linkShape":"diagonal","renderer":"boxed","autoFit":true}},"evals":[],"jsHooks":[]}</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-57a2b3e93756f4dab5f8">{"viewer":{"width":"100%","height":400,"padding":0,"fill":true},"browser":{"width":"100%","height":400,"padding":0,"fill":true}}</script>
</body>
</html>