-
Notifications
You must be signed in to change notification settings - Fork 4
/
ggiraph_scatter_plot.html
20 lines (19 loc) · 417 KB
/
ggiraph_scatter_plot.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/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZyBWZXJzaW9uIDQuMy4wLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suCihmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/bihleHBvcnRzKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxuKTpuKHQuZDM9dC5kM3x8e30pfSkodGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gTXModChuKSxlKX19ZnVuY3Rpb24gZSh0LG4sZSl7dmFyIHI9TWF0aC5hYnMobi10KS9NYXRoLm1heCgwLGUpLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApKSxvPXIvaTtyZXR1cm4gbz49RnM/aSo9MTA6bz49SXM/aSo9NTpvPj1ZcyYmKGkqPTIpLG48dD8taTppfWZ1bmN0aW9uIHIodCl7cmV0dXJuIHQubGVuZ3RofWZ1bmN0aW9uIGkoKXt9ZnVuY3Rpb24gbyh0LG4pe3ZhciBlPW5ldyBpO2lmKHQgaW5zdGFuY2VvZiBpKXQuZWFjaChmdW5jdGlvbih0LG4pe2Uuc2V0KG4sdCl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByLG89LTEsdT10Lmxlbmd0aDtpZihudWxsPT1uKWZvcig7KytvPHU7KWUuc2V0KG8sdFtvXSk7ZWxzZSBmb3IoOysrbzx1OyllLnNldChuKHI9dFtvXSxvLHQpLHIpfWVsc2UgaWYodClmb3IodmFyIGEgaW4gdCllLnNldChhLHRbYV0pO3JldHVybiBlfWZ1bmN0aW9uIHUoKXtyZXR1cm57fX1mdW5jdGlvbiBhKHQsbixlKXt0W25dPWV9ZnVuY3Rpb24gYygpe3JldHVybiBvKCl9ZnVuY3Rpb24gcyh0LG4sZSl7dC5zZXQobixlKX1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGwodCxuKXt2YXIgZT1uZXcgZjtpZih0IGluc3RhbmNlb2YgZil0LmVhY2goZnVuY3Rpb24odCl7ZS5hZGQodCl9KTtlbHNlIGlmKHQpe3ZhciByPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09bilmb3IoOysrcjxpOyllLmFkZCh0W3JdKTtlbHNlIGZvcig7KytyPGk7KWUuYWRkKG4odFtyXSxyLHQpKX1yZXR1cm4gZX1mdW5jdGlvbiBoKHQpe3JldHVybit0fWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBkKHQpe3JldHVybiB0KigyLXQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24geSh0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gZyh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn1mdW5jdGlvbiBtKHQpe3JldHVybiAxLU1hdGguY29zKHQqVGYpfWZ1bmN0aW9uIHgodCl7cmV0dXJuIE1hdGguc2luKHQqVGYpfWZ1bmN0aW9uIGIodCl7cmV0dXJuKDEtTWF0aC5jb3MoTWYqdCkpLzJ9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gTWF0aC5wb3coMiwxMCp0LTEwKX1mdW5jdGlvbiBNKHQpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKnQpfWZ1bmN0aW9uIFQodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiBOKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tdCp0KX1mdW5jdGlvbiBTKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIEEodCl7cmV0dXJuIDEtRSgxLXQpfWZ1bmN0aW9uIEUodCl7cmV0dXJuKHQ9K3QpPE5mP0xmKnQqdDp0PFNmP0xmKih0LT1rZikqdCtBZjp0PENmP0xmKih0LT1FZikqdCt6ZjpMZioodC09UGYpKnQrcWZ9ZnVuY3Rpb24gQyh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtRSgxLXQpOkUodC0xKSsxKS8yfWZ1bmN0aW9uIHoodCxuKXtyZXR1cm4gdFswXS1uWzBdfHx0WzFdLW5bMV19ZnVuY3Rpb24gUCh0KXtmb3IodmFyIG49dC5sZW5ndGgsZT1bMCwxXSxyPTIsaT0yO2k8bjsrK2kpe2Zvcig7cj4xJiZXZih0W2Vbci0yXV0sdFtlW3ItMV1dLHRbaV0pPD0wOyktLXI7ZVtyKytdPWl9cmV0dXJuIGUuc2xpY2UoMCxyKX1mdW5jdGlvbiBxKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89W119ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgcX1mdW5jdGlvbiBSKHQsbixlLHIpe2lmKGlzTmFOKG4pfHxpc05hTihlKSlyZXR1cm4gdDt2YXIgaSxvLHUsYSxjLHMsZixsLGgscD10Ll9yb290LGQ9e2RhdGE6cn0sdj10Ll94MCxfPXQuX3kwLHk9dC5feDEsZz10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKHM9bj49KG89KHYreSkvMikpP3Y9bzp5PW8sKGY9ZT49KHU9KF8rZykvMikpP189dTpnPXUsaT1wLCEocD1wW2w9Zjw8MXxzXSkpcmV0dXJuIGlbbF09ZCx0O2lmKGE9K3QuX3guY2FsbChudWxsLHAuZGF0YSksYz0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxuPT09YSYmZT09PWMpcmV0dXJuIGQubmV4dD1wLGk/aVtsXT1kOnQuX3Jvb3Q9ZCx0O2RvIGk9aT9pW2xdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwocz1uPj0obz0odit5KS8yKSk/dj1vOnk9bywoZj1lPj0odT0oXytnKS8yKSk/Xz11Omc9dTt3aGlsZSgobD1mPDwxfHMpPT09KGg9KGM+PXUpPDwxfGE+PW8pKTtyZXR1cm4gaVtoXT1wLGlbbF09ZCx0fWZ1bmN0aW9uIFUodCl7dmFyIG4sZSxyLGksbz10Lmxlbmd0aCx1PW5ldyBBcnJheShvKSxhPW5ldyBBcnJheShvKSxjPTEvMCxzPTEvMCxmPS0oMS8wKSxsPS0oMS8wKTtmb3IoZT0wO2U8bzsrK2UpaXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsbj10W2VdKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLG4pKXx8KHVbZV09cixhW2VdPWkscjxjJiYoYz1yKSxyPmYmJihmPXIpLGk8cyYmKHM9aSksaT5sJiYobD1pKSk7Zm9yKGY8YyYmKGM9dGhpcy5feDAsZj10aGlzLl94MSksbDxzJiYocz10aGlzLl95MCxsPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGMscykuY292ZXIoZixsKSxlPTA7ZTxvOysrZSlSKHRoaXMsdVtlXSxhW2VdLHRbZV0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIEQodCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aDtuPGU7KytuKXRoaXMucmVtb3ZlKHRbbl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gRih0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBJKHQsbixlKXt2YXIgcj1uZXcgWShudWxsPT1uP086bixudWxsPT1lP0Y6ZSxOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9ZnVuY3Rpb24gWSh0LG4sZSxyLGksbyl7dGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIEIodCl7Zm9yKHZhciBuPXtkYXRhOnQuZGF0YX0sZT1uO3Q9dC5uZXh0OyllPWUubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBufWZ1bmN0aW9uIGoodCl7aWYoISh0Pj0xKSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5fc2l6ZT10LHRoaXMuX2NhbGw9dGhpcy5fZXJyb3I9bnVsbCx0aGlzLl90YXNrcz1bXSx0aGlzLl9kYXRhPVtdLHRoaXMuX3dhaXRpbmc9dGhpcy5fYWN0aXZlPXRoaXMuX2VuZGVkPXRoaXMuX3N0YXJ0PTB9ZnVuY3Rpb24gSCh0KXtpZighdC5fc3RhcnQpdHJ5e1godCl9Y2F0Y2gobil7aWYodC5fdGFza3NbdC5fZW5kZWQrdC5fYWN0aXZlLTFdKVcodCxuKTtlbHNlIGlmKCF0Ll9kYXRhKXRocm93IG59fWZ1bmN0aW9uIFgodCl7Zm9yKDt0Ll9zdGFydD10Ll93YWl0aW5nJiZ0Ll9hY3RpdmU8dC5fc2l6ZTspe3ZhciBuPXQuX2VuZGVkK3QuX2FjdGl2ZSxlPXQuX3Rhc2tzW25dLHI9ZS5sZW5ndGgtMSxpPWVbcl07ZVtyXT1WKHQsbiksLS10Ll93YWl0aW5nLCsrdC5fYWN0aXZlLGU9aS5hcHBseShudWxsLGUpLHQuX3Rhc2tzW25dJiYodC5fdGFza3Nbbl09ZXx8X2wpfX1mdW5jdGlvbiBWKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUscil7dC5fdGFza3Nbbl0mJigtLXQuX2FjdGl2ZSwrK3QuX2VuZGVkLHQuX3Rhc2tzW25dPW51bGwsbnVsbD09dC5fZXJyb3ImJihudWxsIT1lP1codCxlKToodC5fZGF0YVtuXT1yLHQuX3dhaXRpbmc/SCh0KTokKHQpKSkpfX1mdW5jdGlvbiBXKHQsbil7dmFyIGUscj10Ll90YXNrcy5sZW5ndGg7Zm9yKHQuX2Vycm9yPW4sdC5fZGF0YT12b2lkIDAsdC5fd2FpdGluZz1OYU47LS1yPj0wOylpZigoZT10Ll90YXNrc1tyXSkmJih0Ll90YXNrc1tyXT1udWxsLGUuYWJvcnQpKXRyeXtlLmFib3J0KCl9Y2F0Y2godCl7fXQuX2FjdGl2ZT1OYU4sJCh0KX1mdW5jdGlvbiAkKHQpe2lmKCF0Ll9hY3RpdmUmJnQuX2NhbGwpe3ZhciBuPXQuX2RhdGE7dC5fZGF0YT12b2lkIDAsdC5fY2FsbCh0Ll9lcnJvcixuKX19ZnVuY3Rpb24gWih0KXtyZXR1cm4gbmV3IGooYXJndW1lbnRzLmxlbmd0aD8rdDoxLzApfWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gSih0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBRKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gSyh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiB0dCh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBudCh0KXtyZXR1cm4gdD49MT94bDp0PD0tMT8teGw6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGV0KHQsbixlLHIsaSxvLHUsYSl7dmFyIGM9ZS10LHM9ci1uLGY9dS1pLGw9YS1vLGg9KGYqKG4tbyktbCoodC1pKSkvKGwqYy1mKnMpO3JldHVyblt0K2gqYyxuK2gqc119ZnVuY3Rpb24gcnQodCxuLGUscixpLG8sdSl7dmFyIGE9dC1lLGM9bi1yLHM9KHU/bzotbykvTWF0aC5zcXJ0KGEqYStjKmMpLGY9cypjLGw9LXMqYSxoPXQrZixwPW4rbCxkPWUrZix2PXIrbCxfPShoK2QpLzIseT0ocCt2KS8yLGc9ZC1oLG09di1wLHg9ZypnK20qbSxiPWktbyx3PWgqdi1kKnAsTT0obTwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLGIqYip4LXcqdykpLFQ9KHcqbS1nKk0pL3gsTj0oLXcqZy1tKk0pL3gsaz0odyptK2cqTSkveCxTPSgtdypnK20qTSkveCxBPVQtXyxFPU4teSxDPWstXyx6PVMteTtyZXR1cm4gQSpBK0UqRT5DKkMreip6JiYoVD1rLE49Uykse2N4OlQsY3k6Tix4MDE6LWYseTAxOi1sLHgxMTpUKihpL2ItMSkseTExOk4qKGkvYi0xKX19ZnVuY3Rpb24gaXQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIG90KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHV0KHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGF0KHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gY3QodCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbmV3IGF0KHQobikpfXJldHVybiBuLl9jdXJ2ZT10LG59ZnVuY3Rpb24gc3QodCl7dmFyIG49dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oY3QodCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gZnQodCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStuKS82LCh0Ll95MCs0KnQuX3kxK2UpLzYpfWZ1bmN0aW9uIGx0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBodCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gcHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGR0KHQsbil7dGhpcy5fYmFzaXM9bmV3IGx0KHQpLHRoaXMuX2JldGE9bn1mdW5jdGlvbiB2dCh0LG4sZSl7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtbiksdC5feTIrdC5fayoodC5feTEtZSksdC5feDIsdC5feTIpfWZ1bmN0aW9uIF90KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1mdW5jdGlvbiB5dCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9ZnVuY3Rpb24gZ3QodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fWZ1bmN0aW9uIG10KHQsbixlKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsdT10Ll95MjtpZih0Ll9sMDFfYT5nbCl7dmFyIGE9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ociphLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2MsaT0oaSphLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2N9aWYodC5fbDIzX2E+Z2wpe3ZhciBzPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGY9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qcyt0Ll94MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2YsdT0odSpzK3QuX3kxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvZn10Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sdSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24geHQodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1mdW5jdGlvbiBidCh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufWZ1bmN0aW9uIHd0KHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59ZnVuY3Rpb24gTXQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFR0KHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBOdCh0LG4sZSl7dmFyIHI9dC5feDEtdC5feDAsaT1uLXQuX3gxLG89KHQuX3kxLXQuX3kwKS8ocnx8aTwwJiYtMCksdT0oZS10Ll95MSkvKGl8fHI8MCYmLTApLGE9KG8qaSt1KnIpLyhyK2kpO3JldHVybihUdChvKStUdCh1KSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnModSksLjUqTWF0aC5hYnMoYSkpfHwwfWZ1bmN0aW9uIGt0KHQsbil7dmFyIGU9dC5feDEtdC5feDA7cmV0dXJuIGU/KDMqKHQuX3kxLXQuX3kwKS9lLW4pLzI6bn1mdW5jdGlvbiBTdCh0LG4sZSl7dmFyIHI9dC5feDAsaT10Ll95MCxvPXQuX3gxLHU9dC5feTEsYT0oby1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK2EsaSthKm4sby1hLHUtYSplLG8sdSl9ZnVuY3Rpb24gQXQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEV0KHQpe3RoaXMuX2NvbnRleHQ9bmV3IEN0KHQpfWZ1bmN0aW9uIEN0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB6dCh0KXtyZXR1cm4gbmV3IEF0KHQpfWZ1bmN0aW9uIFB0KHQpe3JldHVybiBuZXcgRXQodCl9ZnVuY3Rpb24gcXQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEx0KHQpe3ZhciBuLGUscj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLHU9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsb1swXT0yLHVbMF09dFswXSsyKnRbMV0sbj0xO248ci0xOysrbilpW25dPTEsb1tuXT00LHVbbl09NCp0W25dKzIqdFtuKzFdO2ZvcihpW3ItMV09MixvW3ItMV09Nyx1W3ItMV09OCp0W3ItMV0rdFtyXSxuPTE7bjxyOysrbillPWlbbl0vb1tuLTFdLG9bbl0tPWUsdVtuXS09ZSp1W24tMV07Zm9yKGlbci0xXT11W3ItMV0vb1tyLTFdLG49ci0yO24+PTA7LS1uKWlbbl09KHVbbl0taVtuKzFdKS9vW25dO2ZvcihvW3ItMV09KHRbcl0raVtyLTFdKS8yLG49MDtuPHItMTsrK24pb1tuXT0yKnRbbisxXS1pW24rMV07cmV0dXJuW2ksb119ZnVuY3Rpb24gUnQodCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1ufWZ1bmN0aW9uIFV0KHQpe3JldHVybiBuZXcgUnQodCwwKX1mdW5jdGlvbiBEdCh0KXtyZXR1cm4gbmV3IFJ0KHQsMSl9ZnVuY3Rpb24gT3QodCxuKXtyZXR1cm4gdFtuXX1mdW5jdGlvbiBGdCh0KXtmb3IodmFyIG4sZT0wLHI9LTEsaT10Lmxlbmd0aDsrK3I8aTspKG49K3Rbcl1bMV0pJiYoZSs9bik7cmV0dXJuIGV9ZnVuY3Rpb24gSXQodCxuKXt2YXIgZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gbillW3JdPW5bcl07cmV0dXJuIGV9ZnVuY3Rpb24gWXQoKXt9ZnVuY3Rpb24gQnQodCl7dmFyIG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChuPWtoLmV4ZWModCkpPyhuPXBhcnNlSW50KG5bMV0sMTYpLG5ldyBXdChuPj44JjE1fG4+PjQmMjQwLG4+PjQmMTV8MjQwJm4sKDE1Jm4pPDw0fDE1Jm4sMSkpOihuPVNoLmV4ZWModCkpP2p0KHBhcnNlSW50KG5bMV0sMTYpKToobj1BaC5leGVjKHQpKT9uZXcgV3QoblsxXSxuWzJdLG5bM10sMSk6KG49RWguZXhlYyh0KSk/bmV3IFd0KDI1NSpuWzFdLzEwMCwyNTUqblsyXS8xMDAsMjU1Km5bM10vMTAwLDEpOihuPUNoLmV4ZWModCkpP0h0KG5bMV0sblsyXSxuWzNdLG5bNF0pOihuPXpoLmV4ZWModCkpP0h0KDI1NSpuWzFdLzEwMCwyNTUqblsyXS8xMDAsMjU1Km5bM10vMTAwLG5bNF0pOihuPVBoLmV4ZWModCkpPyR0KG5bMV0sblsyXS8xMDAsblszXS8xMDAsMSk6KG49cWguZXhlYyh0KSk/JHQoblsxXSxuWzJdLzEwMCxuWzNdLzEwMCxuWzRdKTpMaC5oYXNPd25Qcm9wZXJ0eSh0KT9qdChMaFt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IFd0KE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24ganQodCl7cmV0dXJuIG5ldyBXdCh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gSHQodCxuLGUscil7cmV0dXJuIHI8PTAmJih0PW49ZT1OYU4pLG5ldyBXdCh0LG4sZSxyKX1mdW5jdGlvbiBYdCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFl0fHwodD1CdCh0KSksdD8odD10LnJnYigpLG5ldyBXdCh0LnIsdC5nLHQuYix0Lm9wYWNpdHkpKTpuZXcgV3R9ZnVuY3Rpb24gVnQodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1h0KHQpOm5ldyBXdCh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gV3QodCxuLGUscil7dGhpcy5yPSt0LHRoaXMuZz0rbix0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uICR0KHQsbixlLHIpe3JldHVybiByPD0wP3Q9bj1lPU5hTjplPD0wfHxlPj0xP3Q9bj1OYU46bjw9MCYmKHQ9TmFOKSxuZXcgSnQodCxuLGUscil9ZnVuY3Rpb24gWnQodCl7aWYodCBpbnN0YW5jZW9mIEp0KXJldHVybiBuZXcgSnQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgWXR8fCh0PUJ0KHQpKSwhdClyZXR1cm4gbmV3IEp0O2lmKHQgaW5zdGFuY2VvZiBKdClyZXR1cm4gdDt0PXQucmdiKCk7dmFyIG49dC5yLzI1NSxlPXQuZy8yNTUscj10LmIvMjU1LGk9TWF0aC5taW4obixlLHIpLG89TWF0aC5tYXgobixlLHIpLHU9TmFOLGE9by1pLGM9KG8raSkvMjtyZXR1cm4gYT8odT1uPT09bz8oZS1yKS9hKzYqKGU8cik6ZT09PW8/KHItbikvYSsyOihuLWUpL2ErNCxhLz1jPC41P28raToyLW8taSx1Kj02MCk6YT1jPjAmJmM8MT8wOnUsbmV3IEp0KHUsYSxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gR3QodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1p0KHQpOm5ldyBKdCh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gSnQodCxuLGUscil7dGhpcy5oPSt0LHRoaXMucz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFF0KHQsbixlKXtyZXR1cm4gMjU1Kih0PDYwP24rKGUtbikqdC82MDp0PDE4MD9lOnQ8MjQwP24rKGUtbikqKDI0MC10KS82MDpuKX1mdW5jdGlvbiBLdCh0KXtpZih0IGluc3RhbmNlb2Ygbm4pcmV0dXJuIG5ldyBubih0LmwsdC5hLHQuYix0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBzbil7dmFyIG49dC5oKlJoO3JldHVybiBuZXcgbm4odC5sLE1hdGguY29zKG4pKnQuYyxNYXRoLnNpbihuKSp0LmMsdC5vcGFjaXR5KX10IGluc3RhbmNlb2YgV3R8fCh0PVh0KHQpKTt2YXIgZT11bih0LnIpLHI9dW4odC5nKSxpPXVuKHQuYiksbz1lbigoLjQxMjQ1NjQqZSsuMzU3NTc2MSpyKy4xODA0Mzc1KmkpL09oKSx1PWVuKCguMjEyNjcyOSplKy43MTUxNTIyKnIrLjA3MjE3NSppKS9GaCksYT1lbigoLjAxOTMzMzkqZSsuMTE5MTkyKnIrLjk1MDMwNDEqaSkvSWgpO3JldHVybiBuZXcgbm4oMTE2KnUtMTYsNTAwKihvLXUpLDIwMCoodS1hKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHRuKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9LdCh0KTpuZXcgbm4odCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIG5uKHQsbixlLHIpe3RoaXMubD0rdCx0aGlzLmE9K24sdGhpcy5iPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBlbih0KXtyZXR1cm4gdD5IaD9NYXRoLnBvdyh0LDEvMyk6dC9qaCtZaH1mdW5jdGlvbiBybih0KXtyZXR1cm4gdD5CaD90KnQqdDpqaCoodC1ZaCl9ZnVuY3Rpb24gb24odCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiB1bih0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBhbih0KXtpZih0IGluc3RhbmNlb2Ygc24pcmV0dXJuIG5ldyBzbih0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBubnx8KHQ9S3QodCkpO3ZhciBuPU1hdGguYXRhbjIodC5iLHQuYSkqVWg7cmV0dXJuIG5ldyBzbihuPDA/biszNjA6bixNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBjbih0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/YW4odCk6bmV3IHNuKHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBzbih0LG4sZSxyKXt0aGlzLmg9K3QsdGhpcy5jPStuLHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gZm4odCl7aWYodCBpbnN0YW5jZW9mIGhuKXJldHVybiBuZXcgaG4odC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgV3R8fCh0PVh0KHQpKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT0oUWgqcitHaCpuLUpoKmUpLyhRaCtHaC1KaCksbz1yLWksdT0oWmgqKGUtaSktV2gqbykvJGgsYT1NYXRoLnNxcnQodSp1K28qbykvKFpoKmkqKDEtaSkpLGM9YT9NYXRoLmF0YW4yKHUsbykqVWgtMTIwOk5hTjtyZXR1cm4gbmV3IGhuKGM8MD9jKzM2MDpjLGEsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGxuKHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mbih0KTpuZXcgaG4odCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGhuKHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBwbih0LG4sZSxyLGkpe3ZhciBvPXQqdCx1PW8qdDtyZXR1cm4oKDEtMyp0KzMqby11KSpuKyg0LTYqbyszKnUpKmUrKDErMyp0KzMqby0zKnUpKnIrdSppKS82fWZ1bmN0aW9uIGRuKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0K2Uqbn19ZnVuY3Rpb24gdm4odCxuLGUpe3JldHVybiB0PU1hdGgucG93KHQsZSksbj1NYXRoLnBvdyhuLGUpLXQsZT0xL2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrcipuLGUpfX1mdW5jdGlvbiBfbih0LG4pe3ZhciBlPW4tdDtyZXR1cm4gZT9kbih0LGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6b3AoaXNOYU4odCk/bjp0KX1mdW5jdGlvbiB5bih0KXtyZXR1cm4gMT09PSh0PSt0KT9nbjpmdW5jdGlvbihuLGUpe3JldHVybiBlLW4/dm4obixlLHQpOm9wKGlzTmFOKG4pP2U6bil9fWZ1bmN0aW9uIGduKHQsbil7dmFyIGU9bi10O3JldHVybiBlP2RuKHQsZSk6b3AoaXNOYU4odCk/bjp0KX1mdW5jdGlvbiBtbih0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGUscixpPW4ubGVuZ3RoLG89bmV3IEFycmF5KGkpLHU9bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpO2ZvcihlPTA7ZTxpOysrZSlyPVZ0KG5bZV0pLG9bZV09ci5yfHwwLHVbZV09ci5nfHwwLGFbZV09ci5ifHwwO3JldHVybiBvPXQobyksdT10KHUpLGE9dChhKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPW8odCksci5nPXUodCksci5iPWEodCkscisiIn19fWZ1bmN0aW9uIHhuKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBibih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9fWZ1bmN0aW9uIHduKHQpe3JldHVybiJub25lIj09PXQ/bXA6KEtofHwoS2g9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdHA9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG5wPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxLaC5zdHlsZS50cmFuc2Zvcm09dCx0PW5wLmdldENvbXB1dGVkU3R5bGUodHAuYXBwZW5kQ2hpbGQoS2gpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHRwLnJlbW92ZUNoaWxkKEtoKSx0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSx4cCgrdFswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfWZ1bmN0aW9uIE1uKHQpe3JldHVybiBudWxsPT10P21wOihlcHx8KGVwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGVwLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1lcC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT8odD10Lm1hdHJpeCx4cCh0LmEsdC5iLHQuYyx0LmQsdC5lLHQuZikpOm1wKX1mdW5jdGlvbiBUbih0LG4sZSxyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKHQscixpLG8sdSxhKXtpZih0IT09aXx8ciE9PW8pe3ZhciBjPXUucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxuLG51bGwsZSk7YS5wdXNoKHtpOmMtNCx4OmxwKHQsaSl9LHtpOmMtMix4OmxwKHIsbyl9KX1lbHNlKGl8fG8pJiZ1LnB1c2goInRyYW5zbGF0ZSgiK2krbitvK2UpfWZ1bmN0aW9uIHUodCxuLGUsbyl7dCE9PW4/KHQtbj4xODA/bis9MzYwOm4tdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTplLnB1c2goaShlKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6bHAodCxuKX0pKTpuJiZlLnB1c2goaShlKSsicm90YXRlKCIrbityKX1mdW5jdGlvbiBhKHQsbixlLG8pe3QhPT1uP28ucHVzaCh7aTplLnB1c2goaShlKSsic2tld1goIixudWxsLHIpLTIseDpscCh0LG4pfSk6biYmZS5wdXNoKGkoZSkrInNrZXdYKCIrbityKX1mdW5jdGlvbiBjKHQsbixlLHIsbyx1KXtpZih0IT09ZXx8biE9PXIpe3ZhciBhPW8ucHVzaChpKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTt1LnB1c2goe2k6YS00LHg6bHAodCxlKX0se2k6YS0yLHg6bHAobixyKX0pfWVsc2UgMT09PWUmJjE9PT1yfHxvLnB1c2goaShvKSsic2NhbGUoIitlKyIsIityKyIpIil9cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9W10saT1bXTtyZXR1cm4gbj10KG4pLGU9dChlKSxvKG4udHJhbnNsYXRlWCxuLnRyYW5zbGF0ZVksZS50cmFuc2xhdGVYLGUudHJhbnNsYXRlWSxyLGkpLHUobi5yb3RhdGUsZS5yb3RhdGUscixpKSxhKG4uc2tld1gsZS5za2V3WCxyLGkpLGMobi5zY2FsZVgsbi5zY2FsZVksZS5zY2FsZVgsZS5zY2FsZVkscixpKSxuPWU9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxvPWkubGVuZ3RoOysrZTxvOylyWyhuPWlbZV0pLmldPW4ueCh0KTtyZXR1cm4gci5qb2luKCIiKX19fWZ1bmN0aW9uIE5uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIGtuKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfWZ1bmN0aW9uIFNuKHQpe3JldHVybigodD1NYXRoLmV4cCgyKnQpKS0xKS8odCsxKX1mdW5jdGlvbiBBbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPUd0KG4pKS5oLChlPUd0KGUpKS5oKSxpPWduKG4ucyxlLnMpLG89Z24obi5sLGUubCksdT1nbihuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4ucz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT11KHQpLG4rIiJ9fX1mdW5jdGlvbiBFbih0LG4pe3ZhciBlPWduKCh0PXRuKHQpKS5sLChuPXRuKG4pKS5sKSxyPWduKHQuYSxuLmEpLGk9Z24odC5iLG4uYiksbz1nbih0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQubD1lKG4pLHQuYT1yKG4pLHQuYj1pKG4pLHQub3BhY2l0eT1vKG4pLHQrIiJ9fWZ1bmN0aW9uIENuKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49Y24obikpLmgsKGU9Y24oZSkpLmgpLGk9Z24obi5jLGUuYyksbz1nbihuLmwsZS5sKSx1PWduKG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5jPWkodCksbi5sPW8odCksbi5vcGFjaXR5PXUodCksbisiIn19fWZ1bmN0aW9uIHpuKHQpe3JldHVybiBmdW5jdGlvbiBuKGUpe2Z1bmN0aW9uIHIobixyKXt2YXIgaT10KChuPWxuKG4pKS5oLChyPWxuKHIpKS5oKSxvPWduKG4ucyxyLnMpLHU9Z24obi5sLHIubCksYT1nbihuLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1pKHQpLG4ucz1vKHQpLG4ubD11KE1hdGgucG93KHQsZSkpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fXJldHVybiBlPStlLHIuZ2FtbWE9bixyfSgxKX1mdW5jdGlvbiBQbigpe2Zvcih2YXIgdCxuPTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9e307bjxlOysrbil7aWYoISh0PWFyZ3VtZW50c1tuXSsiIil8fHQgaW4gcil0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgcW4ocil9ZnVuY3Rpb24gcW4odCl7dGhpcy5fPXR9ZnVuY3Rpb24gTG4odCxuKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLHI9dC5pbmRleE9mKCIuIik7aWYocj49MCYmKGU9dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhbi5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6ZX19KX1mdW5jdGlvbiBSbih0LG4pe2Zvcih2YXIgZSxyPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKChlPXRbcl0pLm5hbWU9PT1uKXJldHVybiBlLnZhbHVlfWZ1bmN0aW9uIFVuKHQsbixlKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09bil7dFtyXT1ScCx0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9ZSYmdC5wdXNoKHtuYW1lOm4sdmFsdWU6ZX0pLHR9ZnVuY3Rpb24gRG4odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrbisiXSJ9KS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBPbih0LG4pe3ZhciBlPURuKHQpO3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBuKGUociksaSx0KX19ZnVuY3Rpb24gRm4odCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxlPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBufHxlLnB1c2gobltyXT1yKX0pLGV9ZnVuY3Rpb24gSW4odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dChudWxsPT1uP2U6bnVsbCl9fWZ1bmN0aW9uIFluKHQpe3ZhciBuPXQucmVzcG9uc2VUeXBlO3JldHVybiBuJiYidGV4dCIhPT1uP3QucmVzcG9uc2U6dC5yZXNwb25zZVRleHR9ZnVuY3Rpb24gQm4odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5yZXNwb25zZVRleHQsbil9fWZ1bmN0aW9uIGpuKCl7cmV0dXJuIHNkfHwoaGQoSG4pLHNkPWxkLm5vdygpK2ZkKX1mdW5jdGlvbiBIbigpe3NkPTB9ZnVuY3Rpb24gWG4oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFZuKHQsbixlKXt2YXIgcj1uZXcgWG47cmV0dXJuIHIucmVzdGFydCh0LG4sZSkscn1mdW5jdGlvbiBXbigpe2puKCksKytpZDtmb3IodmFyIHQsbj1VcDtuOykodD1zZC1uLl90aW1lKT49MCYmbi5fY2FsbC5jYWxsKG51bGwsdCksbj1uLl9uZXh0Oy0taWR9ZnVuY3Rpb24gJG4oKXtzZD0oY2Q9bGQubm93KCkpK2ZkLGlkPW9kPTA7dHJ5e1duKCl9ZmluYWxseXtpZD0wLEduKCksc2Q9MH19ZnVuY3Rpb24gWm4oKXt2YXIgdD1sZC5ub3coKSxuPXQtY2Q7bj5hZCYmKGZkLT1uLGNkPXQpfWZ1bmN0aW9uIEduKCl7Zm9yKHZhciB0LG4sZT1VcCxyPTEvMDtlOyllLl9jYWxsPyhyPmUuX3RpbWUmJihyPWUuX3RpbWUpLHQ9ZSxlPWUuX25leHQpOihuPWUuX25leHQsZS5fbmV4dD1udWxsLGU9dD90Ll9uZXh0PW46VXA9bik7RHA9dCxKbihyKX1mdW5jdGlvbiBKbih0KXtpZighaWQpe29kJiYob2Q9Y2xlYXJUaW1lb3V0KG9kKSk7dmFyIG49dC1zZDtuPjI0Pyh0PDEvMCYmKG9kPXNldFRpbWVvdXQoJG4sbikpLHVkJiYodWQ9Y2xlYXJJbnRlcnZhbCh1ZCkpKToodWR8fCh1ZD1zZXRJbnRlcnZhbChabixhZCkpLGlkPTEsaGQoJG4pKX19ZnVuY3Rpb24gUW4odCxuLGUscil7ZnVuY3Rpb24gaShuKXtyZXR1cm4gdChuPW5ldyBEYXRlKCtuKSksbn1yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKGUtMSkpLG4oZSwxKSx0KGUpLGV9LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIG49aSh0KSxlPWkuY2VpbCh0KTtyZXR1cm4gdC1uPGUtdD9uOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odD1uZXcgRGF0ZSgrdCksbnVsbD09ZT8xOk1hdGguZmxvb3IoZSkpLHR9LGkucmFuZ2U9ZnVuY3Rpb24oZSxyLG8pe3ZhciB1PVtdO2lmKGU9aS5jZWlsKGUpLG89bnVsbD09bz8xOk1hdGguZmxvb3IobyksIShlPHImJm8+MCkpcmV0dXJuIHU7ZG8gdS5wdXNoKG5ldyBEYXRlKCtlKSk7d2hpbGUobihlLG8pLHQoZSksZTxyKTtyZXR1cm4gdX0saS5maWx0ZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFFuKGZ1bmN0aW9uKG4pe2lmKG4+PW4pZm9yKDt0KG4pLCFlKG4pOyluLnNldFRpbWUobi0xKX0sZnVuY3Rpb24odCxyKXtpZih0Pj10KWZvcig7LS1yPj0wOylmb3IoO24odCwxKSwhZSh0KTspO30pfSxlJiYoaS5jb3VudD1mdW5jdGlvbihuLHIpe3JldHVybiB2ZC5zZXRUaW1lKCtuKSxfZC5zZXRUaW1lKCtyKSx0KHZkKSx0KF9kKSxNYXRoLmZsb29yKGUodmQsX2QpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24obil7cmV0dXJuIHIobikldD09PTB9OmZ1bmN0aW9uKG4pe3JldHVybiBpLmNvdW50KDAsbikldD09PTB9KTppOm51bGx9KSxpfWZ1bmN0aW9uIEtuKHQpe3JldHVybiBRbihmdW5jdGlvbihuKXtuLnNldERhdGUobi5nZXREYXRlKCktKG4uZ2V0RGF5KCkrNy10KSU3KSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQtKG4uZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnhkKS9NZH0pfWZ1bmN0aW9uIHRlKHQpe3JldHVybiBRbihmdW5jdGlvbihuKXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCktKG4uZ2V0VVRDRGF5KCkrNy10KSU3KSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3Km4pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL01kfSl9ZnVuY3Rpb24gbmUodCl7aWYoIShuPUF2LmV4ZWModCkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrdCk7dmFyIG4sZT1uWzFdfHwiICIscj1uWzJdfHwiPiIsaT1uWzNdfHwiLSIsbz1uWzRdfHwiIix1PSEhbls1XSxhPW5bNl0mJituWzZdLGM9ISFuWzddLHM9bls4XSYmK25bOF0uc2xpY2UoMSksZj1uWzldfHwiIjsibiI9PT1mPyhjPSEwLGY9ImciKTpTdltmXXx8KGY9IiIpLCh1fHwiMCI9PT1lJiYiPSI9PT1yKSYmKHU9ITAsZT0iMCIscj0iPSIpLHRoaXMuZmlsbD1lLHRoaXMuYWxpZ249cix0aGlzLnNpZ249aSx0aGlzLnN5bWJvbD1vLHRoaXMuemVybz11LHRoaXMud2lkdGg9YSx0aGlzLmNvbW1hPWMsdGhpcy5wcmVjaXNpb249cyx0aGlzLnR5cGU9Zn1mdW5jdGlvbiBlZSh0KXtyZXR1cm4gdH1mdW5jdGlvbiByZShuKXtyZXR1cm4gQ3Y9UHYobiksdC5mb3JtYXQ9Q3YuZm9ybWF0LHQuZm9ybWF0UHJlZml4PUN2LmZvcm1hdFByZWZpeCxDdn1mdW5jdGlvbiBpZSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBuPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gb2UodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBuLnNldFVUQ0Z1bGxZZWFyKHQueSksbn1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gdWUodCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gYWUodCl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLG8sdT1bXSxhPS0xLGM9MCxzPXQubGVuZ3RoO2ZvcihlIGluc3RhbmNlb2YgRGF0ZXx8KGU9bmV3IERhdGUoK2UpKTsrK2E8czspMzc9PT10LmNoYXJDb2RlQXQoYSkmJih1LnB1c2godC5zbGljZShjLGEpKSxudWxsIT0oaT1EdltyPXQuY2hhckF0KCsrYSldKT9yPXQuY2hhckF0KCsrYSk6aT0iZSI9PT1yPyIgIjoiMCIsKG89bltyXSkmJihyPW8oZSxpKSksdS5wdXNoKHIpLGM9YSsxKTtyZXR1cm4gdS5wdXNoKHQuc2xpY2UoYyxhKSksdS5qb2luKCIiKX19ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT11ZSgxOTAwKSxvPXIoaSx0LGUrPSIiLDApO2lmKG8hPWUubGVuZ3RoKXJldHVybiBudWxsO2lmKCJwImluIGkmJihpLkg9aS5IJTEyKzEyKmkucCksIlciaW4gaXx8IlUiaW4gaSl7InciaW4gaXx8KGkudz0iVyJpbiBpPzE6MCk7dmFyIHU9IloiaW4gaT9vZSh1ZShpLnkpKS5nZXRVVENEYXkoKTpuKHVlKGkueSkpLmdldERheSgpO2kubT0wLGkuZD0iVyJpbiBpPyhpLncrNiklNys3KmkuVy0odSs1KSU3Omkudys3KmkuVS0odSs2KSU3fXJldHVybiJaImluIGk/KGkuSCs9aS5aLzEwMHwwLGkuTSs9aS5aJTEwMCxvZShpKSk6bihpKX19ZnVuY3Rpb24gcih0LG4sZSxyKXtmb3IodmFyIGksbyx1PTAsYT1uLmxlbmd0aCxjPWUubGVuZ3RoO3U8YTspe2lmKHI+PWMpcmV0dXJuLTE7aWYoaT1uLmNoYXJDb2RlQXQodSsrKSwzNz09PWkpe2lmKGk9bi5jaGFyQXQodSsrKSxvPUJbaSBpbiBEdj9uLmNoYXJBdCh1KyspOmldLCFvfHwocj1vKHQsZSxyKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPWUuY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfWZ1bmN0aW9uIGkodCxuLGUpe3ZhciByPUMuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5wPXpbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKHQsbixlKXt2YXIgcj1MLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1SW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdSh0LG4sZSl7dmFyIHI9UC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9cVtyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGEodCxuLGUpe3ZhciByPU8uZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5tPUZbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjKHQsbixlKXt2YXIgcj1VLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQubT1EW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcyh0LG4sZSl7cmV0dXJuIHIodCx3LG4sZSl9ZnVuY3Rpb24gZih0LG4sZSl7cmV0dXJuIHIodCxNLG4sZSl9ZnVuY3Rpb24gbCh0LG4sZSl7cmV0dXJuIHIodCxULG4sZSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gU1t0LmdldERheSgpXX1mdW5jdGlvbiBwKHQpe3JldHVybiBrW3QuZ2V0RGF5KCldfWZ1bmN0aW9uIGQodCl7cmV0dXJuIEVbdC5nZXRNb250aCgpXX1mdW5jdGlvbiB2KHQpe3JldHVybiBBW3QuZ2V0TW9udGgoKV19ZnVuY3Rpb24gXyh0KXtyZXR1cm4gTlsrKHQuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiB5KHQpe3JldHVybiBTW3QuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIGcodCl7cmV0dXJuIGtbdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbSh0KXtyZXR1cm4gRVt0LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIHgodCl7cmV0dXJuIEFbdC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBiKHQpe3JldHVybiBOWysodC5nZXRVVENIb3VycygpPj0xMildfXZhciB3PXQuZGF0ZVRpbWUsTT10LmRhdGUsVD10LnRpbWUsTj10LnBlcmlvZHMsaz10LmRheXMsUz10LnNob3J0RGF5cyxBPXQubW9udGhzLEU9dC5zaG9ydE1vbnRocyxDPWZlKE4pLHo9bGUoTiksUD1mZShrKSxxPWxlKGspLEw9ZmUoUyksUj1sZShTKSxVPWZlKEEpLEQ9bGUoQSksTz1mZShFKSxGPWxlKEUpLEk9e2E6aCxBOnAsYjpkLEI6dixjOm51bGwsZDprZSxlOmtlLEg6U2UsSTpBZSxqOkVlLEw6Q2UsbTp6ZSxNOlBlLHA6XyxTOnFlLFU6TGUsdzpSZSxXOlVlLHg6bnVsbCxYOm51bGwseTpEZSxZOk9lLFo6RmUsIiUiOnRyfSxZPXthOnksQTpnLGI6bSxCOngsYzpudWxsLGQ6SWUsZTpJZSxIOlllLEk6QmUsajpqZSxMOkhlLG06WGUsTTpWZSxwOmIsUzpXZSxVOiRlLHc6WmUsVzpHZSx4Om51bGwsWDpudWxsLHk6SmUsWTpRZSxaOktlLCIlIjp0cn0sQj17YTpvLEE6dSxiOmEsQjpjLGM6cyxkOm1lLGU6bWUsSDpiZSxJOmJlLGo6eGUsTDpUZSxtOmdlLE06d2UscDppLFM6TWUsVTpwZSx3OmhlLFc6ZGUseDpmLFg6bCx5Ol9lLFk6dmUsWjp5ZSwiJSI6TmV9O3JldHVybiBJLng9bihNLEkpLEkuWD1uKFQsSSksSS5jPW4odyxJKSxZLng9bihNLFkpLFkuWD1uKFQsWSksWS5jPW4odyxZKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPW4odCs9IiIsSSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIG49ZSh0Kz0iIixpZSk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPW4odCs9IiIsWSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LG9lKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufX19ZnVuY3Rpb24gY2UodCxuLGUpe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixvPWkubGVuZ3RoO3JldHVybiByKyhvPGU/bmV3IEFycmF5KGUtbysxKS5qb2luKG4pK2k6aSl9ZnVuY3Rpb24gc2UodCl7cmV0dXJuIHQucmVwbGFjZShJdiwiXFwkJiIpfWZ1bmN0aW9uIGZlKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChzZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIGxlKHQpe2Zvcih2YXIgbj17fSxlPS0xLHI9dC5sZW5ndGg7KytlPHI7KW5bdFtlXS50b0xvd2VyQ2FzZSgpXT1lO3JldHVybiBufWZ1bmN0aW9uIGhlKHQsbixlKXt2YXIgcj1Pdi5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBlKHQsbixlKXt2YXIgcj1Pdi5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LlU9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZGUodCxuLGUpe3ZhciByPU92LmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQuVz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2ZSh0LG4sZSl7dmFyIHI9T3YuZXhlYyhuLnNsaWNlKGUsZSs0KSk7cmV0dXJuIHI/KHQueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfZSh0LG4sZSl7dmFyIHI9T3YuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHllKHQsbixlKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86XDo/KFxkXGQpKT8vLmV4ZWMobi5zbGljZShlLGUrNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdlKHQsbixlKXt2YXIgcj1Pdi5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBtZSh0LG4sZSl7dmFyIHI9T3YuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4ZSh0LG4sZSl7dmFyIHI9T3YuZXhlYyhuLnNsaWNlKGUsZSszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiZSh0LG4sZSl7dmFyIHI9T3YuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB3ZSh0LG4sZSl7dmFyIHI9T3YuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBNZSh0LG4sZSl7dmFyIHI9T3YuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUZSh0LG4sZSl7dmFyIHI9T3YuZXhlYyhuLnNsaWNlKGUsZSszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOZSh0LG4sZSl7dmFyIHI9RnYuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/ZStyWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBrZSh0LG4pe3JldHVybiBjZSh0LmdldERhdGUoKSxuLDIpfWZ1bmN0aW9uIFNlKHQsbil7cmV0dXJuIGNlKHQuZ2V0SG91cnMoKSxuLDIpfWZ1bmN0aW9uIEFlKHQsbil7cmV0dXJuIGNlKHQuZ2V0SG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiBFZSh0LG4pe3JldHVybiBjZSgxK0NkLmNvdW50KCRkKHQpLHQpLG4sMyl9ZnVuY3Rpb24gQ2UodCxuKXtyZXR1cm4gY2UodC5nZXRNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIHplKHQsbil7cmV0dXJuIGNlKHQuZ2V0TW9udGgoKSsxLG4sMil9ZnVuY3Rpb24gUGUodCxuKXtyZXR1cm4gY2UodC5nZXRNaW51dGVzKCksbiwyKX1mdW5jdGlvbiBxZSh0LG4pe3JldHVybiBjZSh0LmdldFNlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIExlKHQsbil7cmV0dXJuIGNlKFBkLmNvdW50KCRkKHQpLHQpLG4sMil9ZnVuY3Rpb24gUmUodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gVWUodCxuKXtyZXR1cm4gY2UocWQuY291bnQoJGQodCksdCksbiwyKX1mdW5jdGlvbiBEZSh0LG4pe3JldHVybiBjZSh0LmdldEZ1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gT2UodCxuKXtyZXR1cm4gY2UodC5nZXRGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIEZlKHQpe3ZhciBuPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4obj4wPyItIjoobio9LTEsIisiKSkrY2Uobi82MHwwLCIwIiwyKStjZShuJTYwLCIwIiwyKX1mdW5jdGlvbiBJZSh0LG4pe3JldHVybiBjZSh0LmdldFVUQ0RhdGUoKSxuLDIpfWZ1bmN0aW9uIFllKHQsbil7cmV0dXJuIGNlKHQuZ2V0VVRDSG91cnMoKSxuLDIpfWZ1bmN0aW9uIEJlKHQsbil7cmV0dXJuIGNlKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiBqZSh0LG4pe3JldHVybiBjZSgxK3R2LmNvdW50KGd2KHQpLHQpLG4sMyl9ZnVuY3Rpb24gSGUodCxuKXtyZXR1cm4gY2UodC5nZXRVVENNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIFhlKHQsbil7cmV0dXJuIGNlKHQuZ2V0VVRDTW9udGgoKSsxLG4sMil9ZnVuY3Rpb24gVmUodCxuKXtyZXR1cm4gY2UodC5nZXRVVENNaW51dGVzKCksbiwyKX1mdW5jdGlvbiBXZSh0LG4pe3JldHVybiBjZSh0LmdldFVUQ1NlY29uZHMoKSxuLDIpfWZ1bmN0aW9uICRlKHQsbil7cmV0dXJuIGNlKGV2LmNvdW50KGd2KHQpLHQpLG4sMil9ZnVuY3Rpb24gWmUodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gR2UodCxuKXtyZXR1cm4gY2UocnYuY291bnQoZ3YodCksdCksbiwyKX1mdW5jdGlvbiBKZSh0LG4pe3JldHVybiBjZSh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gUWUodCxuKXtyZXR1cm4gY2UodC5nZXRVVENGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIEtlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiB0cigpe3JldHVybiIlIn1mdW5jdGlvbiBucihuKXtyZXR1cm4gcXY9YWUobiksdC50aW1lRm9ybWF0PXF2LmZvcm1hdCx0LnRpbWVQYXJzZT1xdi5wYXJzZSx0LnV0Y0Zvcm1hdD1xdi51dGNGb3JtYXQsdC51dGNQYXJzZT1xdi51dGNQYXJzZSxxdn1mdW5jdGlvbiBlcih0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIHJyKHQpe3ZhciBuPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihuKT9udWxsOm59ZnVuY3Rpb24gaXIodCl7ZnVuY3Rpb24gbihuKXt2YXIgbz1uKyIiLHU9ZS5nZXQobyk7aWYoIXUpe2lmKGkhPT1XdilyZXR1cm4gaTtlLnNldChvLHU9ci5wdXNoKG4pKX1yZXR1cm4gdFsodS0xKSV0Lmxlbmd0aF19dmFyIGU9bygpLHI9W10saT1XdjtyZXR1cm4gdD1udWxsPT10P1tdOlZ2LmNhbGwodCksbi5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIuc2xpY2UoKTtyPVtdLGU9bygpO2Zvcih2YXIgaSx1LGE9LTEsYz10Lmxlbmd0aDsrK2E8YzspZS5oYXModT0oaT10W2FdKSsiIil8fGUuc2V0KHUsci5wdXNoKGkpKTtyZXR1cm4gbn0sbi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1Wdi5jYWxsKGUpLG4pOnQuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGlyKCkuZG9tYWluKHIpLnJhbmdlKHQpLnVua25vd24oaSl9LG59ZnVuY3Rpb24gb3IoKXtmdW5jdGlvbiB0KCl7dmFyIHQ9aSgpLmxlbmd0aCxyPXVbMV08dVswXSxsPXVbci0wXSxoPXVbMS1yXTtuPShoLWwpL01hdGgubWF4KDEsdC1jKzIqcyksYSYmKG49TWF0aC5mbG9vcihuKSksbCs9KGgtbC1uKih0LWMpKSpmLGU9biooMS1jKSxhJiYobD1NYXRoLnJvdW5kKGwpLGU9TWF0aC5yb3VuZChlKSk7dmFyIHA9T3ModCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBsK24qdH0pO3JldHVybiBvKHI/cC5yZXZlcnNlKCk6cCl9dmFyIG4sZSxyPWlyKCkudW5rbm93bih2b2lkIDApLGk9ci5kb21haW4sbz1yLnJhbmdlLHU9WzAsMV0sYT0hMSxjPTAscz0wLGY9LjU7cmV0dXJuIGRlbGV0ZSByLnVua25vd24sci5kb21haW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkobiksdCgpKTppKCl9LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9WytuWzBdLCtuWzFdXSx0KCkpOnUuc2xpY2UoKX0sci5yYW5nZVJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiB1PVsrblswXSwrblsxXV0sYT0hMCx0KCl9LHIuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuc3RlcD1mdW5jdGlvbigpe3JldHVybiBufSxyLnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhbix0KCkpOmF9LHIucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1zPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSksdCgpKTpjfSxyLnBhZGRpbmdJbm5lcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLHQoKSk6Y30sci5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSx0KCkpOnN9LHIuYWxpZ249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSx0KCkpOmZ9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBvcigpLmRvbWFpbihpKCkpLnJhbmdlKHUpLnJvdW5kKGEpLnBhZGRpbmdJbm5lcihjKS5wYWRkaW5nT3V0ZXIocykuYWxpZ24oZil9LHQoKX1mdW5jdGlvbiB1cih0KXt2YXIgbj10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiB1cihuKCkpfSx0fWZ1bmN0aW9uIGFyKCl7cmV0dXJuIHVyKG9yKCkucGFkZGluZ0lubmVyKDEpKX1mdW5jdGlvbiBjcih0LG4pe3JldHVybihuLT10PSt0KT9mdW5jdGlvbihlKXtyZXR1cm4oZS10KS9ufTokdihuKX1mdW5jdGlvbiBzcih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KG49K24sZT0rZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD1uPzA6dD49ZT8xOnIodCl9fX1mdW5jdGlvbiBmcih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KG49K24sZT0rZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wP246dD49MT9lOnIodCl9fX1mdW5jdGlvbiBscih0LG4sZSxyKXt2YXIgaT10WzBdLG89dFsxXSx1PW5bMF0sYT1uWzFdO3JldHVybiBvPGk/KGk9ZShvLGkpLHU9cihhLHUpKTooaT1lKGksbyksdT1yKHUsYSkpLGZ1bmN0aW9uKHQpe3JldHVybiB1KGkodCkpfX1mdW5jdGlvbiBocih0LG4sZSxyKXt2YXIgaT1NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCktMSxvPW5ldyBBcnJheShpKSx1PW5ldyBBcnJheShpKSxhPS0xO2Zvcih0W2ldPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksbj1uLnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8aTspb1thXT1lKHRbYV0sdFthKzFdKSx1W2FdPXIoblthXSxuW2ErMV0pO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1rcyh0LG4sMSxpKS0xO3JldHVybiB1W2VdKG9bZV0obikpfX1mdW5jdGlvbiBwcih0LG4pe3JldHVybiBuLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKX1mdW5jdGlvbiBkcih0LG4pe2Z1bmN0aW9uIGUoKXtyZXR1cm4gaT1NYXRoLm1pbihhLmxlbmd0aCxjLmxlbmd0aCk+Mj9ocjpscixvPXU9bnVsbCxyfWZ1bmN0aW9uIHIobil7cmV0dXJuKG98fChvPWkoYSxjLGY/c3IodCk6dCxzKSkpKCtuKX12YXIgaSxvLHUsYT1HdixjPUd2LHM9X3AsZj0hMTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuKHV8fCh1PWkoYyxhLGNyLGY/ZnIobik6bikpKSgrdCl9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPVh2LmNhbGwodCxadiksZSgpKTphLnNsaWNlKCl9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9VnYuY2FsbCh0KSxlKCkpOmMuc2xpY2UoKX0sci5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBjPVZ2LmNhbGwodCkscz15cCxlKCl9LHIuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ISF0LGUoKSk6Zn0sci5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUoKSk6c30sZSgpfWZ1bmN0aW9uIHZyKHQpe3ZhciBuPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPW4oKTtyZXR1cm4gQnMoZVswXSxlW2UubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBKdihuKCksdCxlKX0sdC5uaWNlPWZ1bmN0aW9uKHIpe3ZhciBpPW4oKSxvPWkubGVuZ3RoLTEsdT1udWxsPT1yPzEwOnIsYT1pWzBdLGM9aVtvXSxzPWUoYSxjLHUpO3JldHVybiBzJiYocz1lKE1hdGguZmxvb3IoYS9zKSpzLE1hdGguY2VpbChjL3MpKnMsdSksaVswXT1NYXRoLmZsb29yKGEvcykqcyxpW29dPU1hdGguY2VpbChjL3MpKnMsbihpKSksdH0sdH1mdW5jdGlvbiBfcigpe3ZhciB0PWRyKGNyLGxwKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHByKHQsX3IoKSl9LHZyKHQpfWZ1bmN0aW9uIHlyKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4rdH12YXIgbj1bMCwxXTtyZXR1cm4gdC5pbnZlcnQ9dCx0LmRvbWFpbj10LnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVh2LmNhbGwoZSxadiksdCk6bi5zbGljZSgpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4geXIoKS5kb21haW4obil9LHZyKHQpfWZ1bmN0aW9uIGdyKHQsbil7cmV0dXJuKG49TWF0aC5sb2cobi90KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUvdCkvbn06JHYobil9ZnVuY3Rpb24gbXIodCxuKXtyZXR1cm4gdDwwP2Z1bmN0aW9uKGUpe3JldHVybi1NYXRoLnBvdygtbixlKSpNYXRoLnBvdygtdCwxLWUpfTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3cobixlKSpNYXRoLnBvdyh0LDEtZSl9fWZ1bmN0aW9uIHhyKHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBicih0KXtyZXR1cm4gMTA9PT10P3hyOnQ9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQsbil9fWZ1bmN0aW9uIHdyKHQpe3JldHVybiB0PT09TWF0aC5FP01hdGgubG9nOjEwPT09dCYmTWF0aC5sb2cxMHx8Mj09PXQmJk1hdGgubG9nMnx8KHQ9TWF0aC5sb2codCksZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubG9nKG4pL3R9KX1mdW5jdGlvbiBNcih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuLXQoLW4pfX1mdW5jdGlvbiBUcigpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbz13cihpKSx1PWJyKGkpLHIoKVswXTwwJiYobz1NcihvKSx1PU1yKHUpKSxlfXZhciBlPWRyKGdyLG1yKS5kb21haW4oWzEsMTBdKSxyPWUuZG9tYWluLGk9MTAsbz13cigxMCksdT1icigxMCk7cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxuKCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHQpLG4oKSk6cigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuLGU9cigpLGE9ZVswXSxjPWVbZS5sZW5ndGgtMV07KG49YzxhKSYmKGg9YSxhPWMsYz1oKTt2YXIgcyxmLGwsaD1vKGEpLHA9byhjKSxkPW51bGw9PXQ/MTA6K3Qsdj1bXTtpZighKGklMSkmJnAtaDxkKXtpZihoPU1hdGgucm91bmQoaCktMSxwPU1hdGgucm91bmQocCkrMSxhPjApe2Zvcig7aDxwOysraClmb3IoZj0xLHM9dShoKTtmPGk7KytmKWlmKGw9cypmLCEobDxhKSl7aWYobD5jKWJyZWFrO3YucHVzaChsKX19ZWxzZSBmb3IoO2g8cDsrK2gpZm9yKGY9aS0xLHM9dShoKTtmPj0xOy0tZilpZihsPXMqZiwhKGw8YSkpe2lmKGw+YylicmVhazt2LnB1c2gobCl9fWVsc2Ugdj1CcyhoLHAsTWF0aC5taW4ocC1oLGQpKS5tYXAodSk7cmV0dXJuIG4/di5yZXZlcnNlKCk6dn0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKG4scil7aWYobnVsbD09ciYmKHI9MTA9PT1pPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIHImJihyPXQuZm9ybWF0KHIpKSxuPT09MS8wKXJldHVybiByO251bGw9PW4mJihuPTEwKTt2YXIgYT1NYXRoLm1heCgxLGkqbi9lLnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC91KE1hdGgucm91bmQobyh0KSkpO3JldHVybiBuKmk8aS0uNSYmKG4qPWkpLG48PWE/cih0KToiIn19LGUubmljZT1mdW5jdGlvbigpe3JldHVybiByKFF2KHIoKSx7Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIHUoTWF0aC5mbG9vcihvKHQpKSl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuIHUoTWF0aC5jZWlsKG8odCkpKX19KSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBwcihlLFRyKCkuYmFzZShpKSl9LGV9ZnVuY3Rpb24gTnIodCxuKXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxuKTpNYXRoLnBvdyh0LG4pfWZ1bmN0aW9uIGtyKCl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybihuPU5yKG4sZSktKHQ9TnIodCxlKSkpP2Z1bmN0aW9uKHIpe3JldHVybihOcihyLGUpLXQpL259OiR2KG4pfWZ1bmN0aW9uIG4odCxuKXtyZXR1cm4gbj1OcihuLGUpLSh0PU5yKHQsZSkpLGZ1bmN0aW9uKHIpe3JldHVybiBOcih0K24qciwxL2UpfX12YXIgZT0xLHI9ZHIodCxuKSxpPXIuZG9tYWluO3JldHVybiByLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkoaSgpKSk6ZX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHByKHIsa3IoKS5leHBvbmVudChlKSl9LHZyKHIpfWZ1bmN0aW9uIFNyKCl7cmV0dXJuIGtyKCkuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEFyKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PTAsbz1NYXRoLm1heCgxLHIubGVuZ3RoKTtmb3IoaT1uZXcgQXJyYXkoby0xKTsrK3Q8bzspaVt0LTFdPVhzKGUsdC9vKTtyZXR1cm4gbn1mdW5jdGlvbiBuKHQpe2lmKCFpc05hTih0PSt0KSlyZXR1cm4gcltrcyhpLHQpXX12YXIgZT1bXSxyPVtdLGk9W107cmV0dXJuIG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPXIuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP2lbbi0xXTplWzBdLG48aS5sZW5ndGg/aVtuXTplW2UubGVuZ3RoLTFdXX0sbi5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgcixpPTAsbz1uLmxlbmd0aDtpPG87KytpKXI9bltpXSxudWxsPT1yfHxpc05hTihyPStyKXx8ZS5wdXNoKHIpO3JldHVybiBlLnNvcnQoTXMpLHQoKX0sbi5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1Wdi5jYWxsKG4pLHQoKSk6ci5zbGljZSgpfSxuLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpLnNsaWNlKCl9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBBcigpLmRvbWFpbihlKS5yYW5nZShyKX0sbn1mdW5jdGlvbiBFcigpe2Z1bmN0aW9uIHQodCl7aWYodDw9dClyZXR1cm4gdVtrcyhvLHQsMCxpKV19ZnVuY3Rpb24gbigpe3ZhciBuPS0xO2ZvcihvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT0oKG4rMSkqci0obi1pKSplKS8oaSsxKTtyZXR1cm4gdH12YXIgZT0wLHI9MSxpPTEsbz1bLjVdLHU9WzAsMV07cmV0dXJuIHQuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0sbigpKTpbZSxyXX0sdC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1Wdi5jYWxsKHQpKS5sZW5ndGgtMSxuKCkpOnUuc2xpY2UoKX0sdC5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG49dS5pbmRleE9mKHQpO3JldHVybiBuPDA/W05hTixOYU5dOm48MT9bZSxvWzBdXTpuPj1pP1tvW2ktMV0scl06W29bbi0xXSxvW25dXX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEVyKCkuZG9tYWluKFtlLHJdKS5yYW5nZSh1KX0sdnIodCl9ZnVuY3Rpb24gQ3IoKXtmdW5jdGlvbiB0KHQpe2lmKHQ8PXQpcmV0dXJuIGVba3Mobix0LDAscildfXZhciBuPVsuNV0sZT1bMCwxXSxyPTE7cmV0dXJuIHQuZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVZ2LmNhbGwoaSkscj1NYXRoLm1pbihuLmxlbmd0aCxlLmxlbmd0aC0xKSx0KTpuLnNsaWNlKCl9LHQucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VnYuY2FsbChpKSxyPU1hdGgubWluKG4ubGVuZ3RoLGUubGVuZ3RoLTEpLHQpOmUuc2xpY2UoKX0sdC5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9ZS5pbmRleE9mKHQpO3JldHVybltuW3ItMV0sbltyXV19LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBDcigpLmRvbWFpbihuKS5yYW5nZShlKX0sdH1mdW5jdGlvbiB6cih0KXtyZXR1cm4gbmV3IERhdGUodCk7Cn1mdW5jdGlvbiBQcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBxcih0LG4scixpLG8sdSxhLGMscyl7ZnVuY3Rpb24gZihlKXtyZXR1cm4oYShlKTxlP3Y6dShlKTxlP186byhlKTxlP3k6aShlKTxlP2c6bihlKTxlP3IoZSk8ZT9tOng6dChlKTxlP2I6dykoZSl9ZnVuY3Rpb24gbChuLHIsaSxvKXtpZihudWxsPT1uJiYobj0xMCksIm51bWJlciI9PXR5cGVvZiBuKXt2YXIgdT1NYXRoLmFicyhpLXIpL24sYT1UcyhmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pLnJpZ2h0KE0sdSk7YT09PU0ubGVuZ3RoPyhvPWUoci9vXyxpL29fLG4pLG49dCk6YT8oYT1NW3UvTVthLTFdWzJdPE1bYV1bMl0vdT9hLTE6YV0sbz1hWzFdLG49YVswXSk6KG89ZShyLGksbiksbj1jKX1yZXR1cm4gbnVsbD09bz9uOm4uZXZlcnkobyl9dmFyIGg9ZHIoY3IsbHApLHA9aC5pbnZlcnQsZD1oLmRvbWFpbix2PXMoIi4lTCIpLF89cygiOiVTIikseT1zKCIlSTolTSIpLGc9cygiJUkgJXAiKSxtPXMoIiVhICVkIikseD1zKCIlYiAlZCIpLGI9cygiJUIiKSx3PXMoIiVZIiksTT1bW2EsMSxLdl0sW2EsNSw1Kkt2XSxbYSwxNSwxNSpLdl0sW2EsMzAsMzAqS3ZdLFt1LDEsdF9dLFt1LDUsNSp0X10sW3UsMTUsMTUqdF9dLFt1LDMwLDMwKnRfXSxbbywxLG5fXSxbbywzLDMqbl9dLFtvLDYsNipuX10sW28sMTIsMTIqbl9dLFtpLDEsZV9dLFtpLDIsMiplX10sW3IsMSxyX10sW24sMSxpX10sW24sMywzKmlfXSxbdCwxLG9fXV07cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShwKHQpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZChYdi5jYWxsKHQsUHIpKTpkKCkubWFwKHpyKX0saC50aWNrcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9ZCgpLGk9clswXSxvPXJbci5sZW5ndGgtMV0sdT1vPGk7cmV0dXJuIHUmJihlPWksaT1vLG89ZSksZT1sKHQsaSxvLG4pLGU9ZT9lLnJhbmdlKGksbysxKTpbXSx1P2UucmV2ZXJzZSgpOmV9LGgudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1uP2Y6cyhuKX0saC5uaWNlPWZ1bmN0aW9uKHQsbil7dmFyIGU9ZCgpO3JldHVybih0PWwodCxlWzBdLGVbZS5sZW5ndGgtMV0sbikpP2QoUXYoZSx0KSk6aH0saC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHByKGgscXIodCxuLHIsaSxvLHUsYSxjLHMpKX0saH1mdW5jdGlvbiBMcih0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihuLTEsTWF0aC5mbG9vcihlKm4pKSldfX1mdW5jdGlvbiBScih0KXtmdW5jdGlvbiBuKG4pe3ZhciBvPShuLWUpLyhyLWUpO3JldHVybiB0KGk/TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTpvKX12YXIgZT0wLHI9MSxpPSExO3JldHVybiBuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLG4pOltlLHJdfSxuLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEhdCxuKTppfSxuLmludGVycG9sYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBScih0KS5kb21haW4oW2Uscl0pLmNsYW1wKGkpfSx2cihuKX1mdW5jdGlvbiBVcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PXdfJiZuLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT13Xz9uLmNyZWF0ZUVsZW1lbnQodCk6bi5jcmVhdGVFbGVtZW50TlMoZSx0KX19ZnVuY3Rpb24gRHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gT3IoKXtyZXR1cm4gbmV3IEZyfWZ1bmN0aW9uIEZyKCl7dGhpcy5fPSJAIisoKytrXykudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIElyKHQsbixlKXtyZXR1cm4gdD1Zcih0LG4sZSksZnVuY3Rpb24obil7dmFyIGU9bi5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFlyKG4sZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89dC5ldmVudDt0LmV2ZW50PWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxyKX1maW5hbGx5e3QuZXZlbnQ9b319fWZ1bmN0aW9uIEJyKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIG49IiIsZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKG49dC5zbGljZShlKzEpLHQ9dC5zbGljZSgwLGUpKSx7dHlwZTp0LG5hbWU6bn19KX1mdW5jdGlvbiBqcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fb247aWYobil7Zm9yKHZhciBlLHI9MCxpPS0xLG89bi5sZW5ndGg7cjxvOysrcillPW5bcl0sdC50eXBlJiZlLnR5cGUhPT10LnR5cGV8fGUubmFtZSE9PXQubmFtZT9uWysraV09ZTp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZS50eXBlLGUubGlzdGVuZXIsZS5jYXB0dXJlKTsrK2k/bi5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSHIodCxuLGUpe3ZhciByPXpfLmhhc093blByb3BlcnR5KHQudHlwZSk/SXI6WXI7cmV0dXJuIGZ1bmN0aW9uKGksbyx1KXt2YXIgYSxjPXRoaXMuX19vbixzPXIobixvLHUpO2lmKGMpZm9yKHZhciBmPTAsbD1jLmxlbmd0aDtmPGw7KytmKWlmKChhPWNbZl0pLnR5cGU9PT10LnR5cGUmJmEubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEudHlwZSxhLmxpc3RlbmVyLGEuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGEudHlwZSxhLmxpc3RlbmVyPXMsYS5jYXB0dXJlPWUpLHZvaWQoYS52YWx1ZT1uKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLHMsZSksYT17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6bixsaXN0ZW5lcjpzLGNhcHR1cmU6ZX0sYz9jLnB1c2goYSk6dGhpcy5fX29uPVthXX19ZnVuY3Rpb24gWHIobixlLHIsaSl7dmFyIG89dC5ldmVudDtuLnNvdXJjZUV2ZW50PXQuZXZlbnQsdC5ldmVudD1uO3RyeXtyZXR1cm4gZS5hcHBseShyLGkpfWZpbmFsbHl7dC5ldmVudD1vfX1mdW5jdGlvbiBWcigpe31mdW5jdGlvbiBXcigpe3JldHVybltdfWZ1bmN0aW9uICRyKHQsbil7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1ufWZ1bmN0aW9uIFpyKHQsbixlLHIsaSxvKXtmb3IodmFyIHUsYT0wLGM9bi5sZW5ndGgscz1vLmxlbmd0aDthPHM7KythKSh1PW5bYV0pPyh1Ll9fZGF0YV9fPW9bYV0sclthXT11KTplW2FdPW5ldyAkcih0LG9bYV0pO2Zvcig7YTxjOysrYSkodT1uW2FdKSYmKGlbYV09dSl9ZnVuY3Rpb24gR3IodCxuLGUscixpLG8sdSl7dmFyIGEsYyxzLGY9e30sbD1uLmxlbmd0aCxoPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGwpO2ZvcihhPTA7YTxsOysrYSkoYz1uW2FdKSYmKHBbYV09cz1YXyt1LmNhbGwoYyxjLl9fZGF0YV9fLGEsbikscyBpbiBmP2lbYV09YzpmW3NdPWMpO2ZvcihhPTA7YTxoOysrYSlzPVhfK3UuY2FsbCh0LG9bYV0sYSxvKSwoYz1mW3NdKT8oclthXT1jLGMuX19kYXRhX189b1thXSxmW3NdPW51bGwpOmVbYV09bmV3ICRyKHQsb1thXSk7Zm9yKGE9MDthPGw7KythKShjPW5bYV0pJiZmW3BbYV1dPT09YyYmKGlbYV09Yyl9ZnVuY3Rpb24gSnIodCxuKXtyZXR1cm4gdDxuPy0xOnQ+bj8xOnQ+PW4/MDpOYU59ZnVuY3Rpb24gUXIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIEtyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gdGkodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBuaSh0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBlaSh0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX19ZnVuY3Rpb24gcmkodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gaWkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gb2kodCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLGUpfX1mdW5jdGlvbiB1aSh0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLGUpfX1mdW5jdGlvbiBhaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gY2kodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW3RdPW59fWZ1bmN0aW9uIHNpKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPWV9fWZ1bmN0aW9uIGZpKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBsaSh0KXtyZXR1cm4gdC5jbGFzc0xpc3R8fG5ldyBoaSh0KX1mdW5jdGlvbiBoaSh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9ZmkodC5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBwaSh0LG4pe2Zvcih2YXIgZT1saSh0KSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUuYWRkKG5bcl0pfWZ1bmN0aW9uIGRpKHQsbil7Zm9yKHZhciBlPWxpKHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5yZW1vdmUobltyXSl9ZnVuY3Rpb24gdmkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cGkodGhpcyx0KX19ZnVuY3Rpb24gX2kodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGkodGhpcyx0KX19ZnVuY3Rpb24geWkodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXsobi5hcHBseSh0aGlzLGFyZ3VtZW50cyk/cGk6ZGkpKHRoaXMsdCl9fWZ1bmN0aW9uIGdpKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBtaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIHhpKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09bj8iIjpufX1mdW5jdGlvbiBiaSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHdpKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIE1pKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gVGkoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTmkoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBraSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFNpKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gQWkodCxuLGUpe3ZhciByPWl5KHQpLGk9ci5DdXN0b21FdmVudDtpP2k9bmV3IGkobixlKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KGkuaW5pdEV2ZW50KG4sZS5idWJibGVzLGUuY2FuY2VsYWJsZSksaS5kZXRhaWw9ZS5kZXRhaWwpOmkuaW5pdEV2ZW50KG4sITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gRWkodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQWkodGhpcyx0LG4pfX1mdW5jdGlvbiBDaSh0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBaSh0aGlzLHQsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiB6aSh0LG4pe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bn1mdW5jdGlvbiBQaSgpe3JldHVybiBuZXcgemkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx5eSl9ZnVuY3Rpb24gcWkodCxuKXt2YXIgZT10Ll9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbbl0pfHxlLnN0YXRlPlR5KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGUiKTtyZXR1cm4gZX1mdW5jdGlvbiBMaSh0LG4pe3ZhciBlPXQuX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVtuXSl8fGUuc3RhdGU+a3kpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZSIpO3JldHVybiBlfWZ1bmN0aW9uIFJpKHQsbil7dmFyIGU9dC5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW25dKSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlIik7cmV0dXJuIGV9ZnVuY3Rpb24gVWkodCxuLGUpe2Z1bmN0aW9uIHIodCl7ZS5zdGF0ZT1OeSxlLnRpbWVyLnJlc3RhcnQoaSxlLmRlbGF5LGUudGltZSksZS5kZWxheTw9dCYmaSh0LWUuZGVsYXkpfWZ1bmN0aW9uIGkocil7dmFyIHMsZixsLGg7aWYoZS5zdGF0ZSE9PU55KXJldHVybiB1KCk7Zm9yKHMgaW4gYylpZihoPWNbc10saC5uYW1lPT09ZS5uYW1lKXtpZihoLnN0YXRlPT09U3kpcmV0dXJuIHBkKGkpO2guc3RhdGU9PT1BeT8oaC5zdGF0ZT1DeSxoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGNbc10pOitzPG4mJihoLnN0YXRlPUN5LGgudGltZXIuc3RvcCgpLGRlbGV0ZSBjW3NdKX1pZihwZChmdW5jdGlvbigpe2Uuc3RhdGU9PT1TeSYmKGUuc3RhdGU9QXksZS50aW1lci5yZXN0YXJ0KG8sZS5kZWxheSxlLnRpbWUpLG8ocikpfSksZS5zdGF0ZT1reSxlLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09a3kpe2ZvcihlLnN0YXRlPVN5LGE9bmV3IEFycmF5KGw9ZS50d2Vlbi5sZW5ndGgpLHM9MCxmPS0xO3M8bDsrK3MpKGg9ZS50d2VlbltzXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKGFbKytmXT1oKTthLmxlbmd0aD1mKzF9fWZ1bmN0aW9uIG8obil7Zm9yKHZhciByPW48ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLG4vZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydCh1KSxlLnN0YXRlPUV5LDEpLGk9LTEsbz1hLmxlbmd0aDsrK2k8bzspYVtpXS5jYWxsKG51bGwscik7ZS5zdGF0ZT09PUV5JiYoZS5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLHUoKSl9ZnVuY3Rpb24gdSgpe2Uuc3RhdGU9Q3ksZS50aW1lci5zdG9wKCksZGVsZXRlIGNbbl07Zm9yKHZhciByIGluIGMpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn12YXIgYSxjPXQuX190cmFuc2l0aW9uO2Nbbl09ZSxlLnRpbWVyPVZuKHIsMCxlLnRpbWUpfWZ1bmN0aW9uIERpKHQsbil7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1MaSh0aGlzLHQpLG89aS50d2VlbjtpZihvIT09ZSl7cj1lPW87Zm9yKHZhciB1PTAsYT1yLmxlbmd0aDt1PGE7Kyt1KWlmKHJbdV0ubmFtZT09PW4pe3I9ci5zbGljZSgpLHIuc3BsaWNlKHUsMSk7YnJlYWt9fWkudHdlZW49cn19ZnVuY3Rpb24gT2kodCxuLGUpe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUxpKHRoaXMsdCksdT1vLnR3ZWVuO2lmKHUhPT1yKXtpPShyPXUpLnNsaWNlKCk7Zm9yKHZhciBhPXtuYW1lOm4sdmFsdWU6ZX0sYz0wLHM9aS5sZW5ndGg7YzxzOysrYylpZihpW2NdLm5hbWU9PT1uKXtpW2NdPWE7YnJlYWt9Yz09PXMmJmkucHVzaChhKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIEZpKHQsbixlKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9TGkodGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtuXT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBSaSh0LHIpLnZhbHVlW25dfX1mdW5jdGlvbiBJaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gWWkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBCaSh0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fWZ1bmN0aW9uIGppKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fWZ1bmN0aW9uIEhpKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHUsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6KHU9dGhpcy5nZXRBdHRyaWJ1dGUodCksdT09PWE/bnVsbDp1PT09ciYmYT09PWk/bzpvPW4ocj11LGk9YSkpfX1mdW5jdGlvbiBYaSh0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciB1LGE9ZSh0aGlzKTtyZXR1cm4gbnVsbD09YT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKToodT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCksdT09PWE/bnVsbDp1PT09ciYmYT09PWk/bzpvPW4ocj11LGk9YSkpfX1mdW5jdGlvbiBWaSh0LG4pe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLHI9bi5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe2Uuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLHIobikpfX1yZXR1cm4gZS5fdmFsdWU9bixlfWZ1bmN0aW9uIFdpKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGUodCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX1mdW5jdGlvbiAkaSh0LG4pe3JldHVybiBmdW5jdGlvbigpe3FpKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBaaSh0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7cWkodGhpcyx0KS5kZWxheT1ufX1mdW5jdGlvbiBHaSh0LG4pe3JldHVybiBmdW5jdGlvbigpe0xpKHRoaXMsdCkuZHVyYXRpb249K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBKaSh0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7TGkodGhpcyx0KS5kdXJhdGlvbj1ufX1mdW5jdGlvbiBRaSh0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtMaSh0aGlzLHQpLmVhc2U9bn19ZnVuY3Rpb24gS2kodCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8InN0YXJ0Ij09PXR9KX1mdW5jdGlvbiB0byh0LG4sZSl7dmFyIHIsaSxvPUtpKG4pP3FpOkxpO3JldHVybiBmdW5jdGlvbigpe3ZhciB1PW8odGhpcyx0KSxhPXUub247YSE9PXImJihpPShyPWEpLmNvcHkoKSkub24obixlKSx1Lm9uPWl9fWZ1bmN0aW9uIG5vKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGUgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2UhPT10KXJldHVybjtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBlbyh0LG4pe3ZhciBlLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1peSh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCksdT1vLmdldFByb3BlcnR5VmFsdWUodCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxvLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiB1PT09YT9udWxsOnU9PT1lJiZhPT09cj9pOmk9bihlPXUscj1hKX19ZnVuY3Rpb24gcm8odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gaW8odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89aXkodGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX1mdW5jdGlvbiBvbyh0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciB1PWl5KHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKSxhPXUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxjPWUodGhpcyk7cmV0dXJuIG51bGw9PWMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9dS5nZXRQcm9wZXJ0eVZhbHVlKHQpKSxhPT09Yz9udWxsOmE9PT1yJiZjPT09aT9vOm89bihyPWEsaT1jKX19ZnVuY3Rpb24gdW8odCxuLGUpe2Z1bmN0aW9uIHIoKXt2YXIgcj10aGlzLGk9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKG4pe3Iuc3R5bGUuc2V0UHJvcGVydHkodCxpKG4pLGUpfX1yZXR1cm4gci5fdmFsdWU9bixyfWZ1bmN0aW9uIGFvKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gY28odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gc28odCxuLGUscil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1uLHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1yfWZ1bmN0aW9uIGZvKHQpe3JldHVybiBQaSgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gbG8oKXtyZXR1cm4rK0t5fWZ1bmN0aW9uIGhvKHQsbil7Zm9yKHZhciBlOyEoZT10Ll9fdHJhbnNpdGlvbil8fCEoZT1lW25dKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIG5nLnRpbWU9am4oKSxuZztyZXR1cm4gZX1mdW5jdGlvbiBwbyh0LG4sZSl7dmFyIHI9dChlKTtyZXR1cm4idHJhbnNsYXRlKCIrKGlzRmluaXRlKHIpP3I6bihlKSkrIiwwKSJ9ZnVuY3Rpb24gdm8odCxuLGUpe3ZhciByPXQoZSk7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGlzRmluaXRlKHIpP3I6bihlKSkrIikifWZ1bmN0aW9uIF9vKHQpe3ZhciBuPXQuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdC5yb3VuZCgpJiYobj1NYXRoLnJvdW5kKG4pKSxmdW5jdGlvbihlKXtyZXR1cm4gdChlKStufX1mdW5jdGlvbiB5bygpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBnbyh0LG4pe2Z1bmN0aW9uIGUoZSl7dmFyIHMsZj1udWxsPT1pP24udGlja3M/bi50aWNrcy5hcHBseShuLHIpOm4uZG9tYWluKCk6aSxsPW51bGw9PW8/bi50aWNrRm9ybWF0P24udGlja0Zvcm1hdC5hcHBseShuLHIpOnVnOm8saD1NYXRoLm1heCh1LDApK2MscD10PT09YWd8fHQ9PT1zZz9wbzp2byxkPW4ucmFuZ2UoKSx2PWRbMF0rLjUsXz1kW2QubGVuZ3RoLTFdKy41LHk9KG4uYmFuZHdpZHRoP19vOnVnKShuLmNvcHkoKSksZz1lLnNlbGVjdGlvbj9lLnNlbGVjdGlvbigpOmUsbT1nLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSx4PWcuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZixuKS5vcmRlcigpLGI9eC5leGl0KCksdz14LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksTT14LnNlbGVjdCgibGluZSIpLFQ9eC5zZWxlY3QoInRleHQiKSxOPXQ9PT1hZ3x8dD09PWZnPy0xOjEsaz10PT09Zmd8fHQ9PT1jZz8ocz0ieCIsInkiKToocz0ieSIsIngiKTttPW0ubWVyZ2UobS5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCIjMDAwIikpLHg9eC5tZXJnZSh3KSxNPU0ubWVyZ2Uody5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cihzKyIyIixOKnUpLmF0dHIoaysiMSIsLjUpLmF0dHIoaysiMiIsLjUpKSxUPVQubWVyZ2Uody5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIocyxOKmgpLmF0dHIoaywuNSkuYXR0cigiZHkiLHQ9PT1hZz8iMGVtIjp0PT09c2c/IjAuNzFlbSI6IjAuMzJlbSIpKSxlIT09ZyYmKG09bS50cmFuc2l0aW9uKGUpLHg9eC50cmFuc2l0aW9uKGUpLE09TS50cmFuc2l0aW9uKGUpLFQ9VC50cmFuc2l0aW9uKGUpLGI9Yi50cmFuc2l0aW9uKGUpLmF0dHIoIm9wYWNpdHkiLGxnKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiBwKHksdGhpcy5wYXJlbnROb2RlLl9fYXhpc3x8eSx0KX0pLHcuYXR0cigib3BhY2l0eSIsbGcpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIHAodGhpcy5wYXJlbnROb2RlLl9fYXhpc3x8eSx5LHQpfSkpLGIucmVtb3ZlKCksbS5hdHRyKCJkIix0PT09Zmd8fHQ9PWNnPyJNIitOKmErIiwiK3YrIkgwLjVWIitfKyJIIitOKmE6Ik0iK3YrIiwiK04qYSsiVjAuNUgiK18rIlYiK04qYSkseC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiBwKHkseSx0KX0pLE0uYXR0cihzKyIyIixOKnUpLFQuYXR0cihzLE4qaCkudGV4dChsKSxnLmZpbHRlcih5bykuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdD09PWNnPyJzdGFydCI6dD09PWZnPyJlbmQiOiJtaWRkbGUiKSxnLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz15fSl9dmFyIHI9W10saT1udWxsLG89bnVsbCx1PTYsYT02LGM9MztyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1vZy5jYWxsKGFyZ3VtZW50cyksZX0sZS50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/W106b2cuY2FsbCh0KSxlKTpyLnNsaWNlKCl9LGUudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6b2cuY2FsbCh0KSxlKTppJiZpLnNsaWNlKCl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGUpOm99LGUudGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9YT0rdCxlKTp1fSxlLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsZSk6dX0sZS50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGUpOmF9LGUudGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsZSk6Y30sZX1mdW5jdGlvbiBtbyh0KXtyZXR1cm4gZ28oYWcsdCl9ZnVuY3Rpb24geG8odCl7cmV0dXJuIGdvKGNnLHQpfWZ1bmN0aW9uIGJvKHQpe3JldHVybiBnbyhzZyx0KX1mdW5jdGlvbiB3byh0KXtyZXR1cm4gZ28oZmcsdCl9ZnVuY3Rpb24gTW8odCxuKXtyZXR1cm4gdC5wYXJlbnQ9PT1uLnBhcmVudD8xOjJ9ZnVuY3Rpb24gVG8odCl7cmV0dXJuIHQucmVkdWNlKE5vLDApL3QubGVuZ3RofWZ1bmN0aW9uIE5vKHQsbil7cmV0dXJuIHQrbi54fWZ1bmN0aW9uIGtvKHQpe3JldHVybiAxK3QucmVkdWNlKFNvLDApfWZ1bmN0aW9uIFNvKHQsbil7cmV0dXJuIE1hdGgubWF4KHQsbi55KX1mdW5jdGlvbiBBbyh0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bMF07cmV0dXJuIHR9ZnVuY3Rpb24gRW8odCl7Zm9yKHZhciBuO249dC5jaGlsZHJlbjspdD1uW24ubGVuZ3RoLTFdO3JldHVybiB0fWZ1bmN0aW9uIENvKHQsbil7aWYodD09PW4pcmV0dXJuIHQ7dmFyIGU9dC5hbmNlc3RvcnMoKSxyPW4uYW5jZXN0b3JzKCksaT1udWxsO2Zvcih0PWUucG9wKCksbj1yLnBvcCgpO3Q9PT1uOylpPXQsdD1lLnBvcCgpLG49ci5wb3AoKTtyZXR1cm4gaX1mdW5jdGlvbiB6byh0LG4pe3ZhciBlLHIsaSxvLHUsYT1uZXcgVW8odCksYz0rdC52YWx1ZSYmKGEudmFsdWU9dC52YWx1ZSkscz1bYV07Zm9yKG51bGw9PW4mJihuPXFvKTtlPXMucG9wKCk7KWlmKGMmJihlLnZhbHVlPStlLmRhdGEudmFsdWUpLChpPW4oZS5kYXRhKSkmJih1PWkubGVuZ3RoKSlmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkodSksbz11LTE7bz49MDstLW8pcy5wdXNoKHI9ZS5jaGlsZHJlbltvXT1uZXcgVW8oaVtvXSkpLHIucGFyZW50PWUsci5kZXB0aD1lLmRlcHRoKzE7cmV0dXJuIGEuZWFjaEJlZm9yZShSbyl9ZnVuY3Rpb24gUG8oKXtyZXR1cm4gem8odGhpcykuZWFjaEJlZm9yZShMbyl9ZnVuY3Rpb24gcW8odCl7cmV0dXJuIHQuY2hpbGRyZW59ZnVuY3Rpb24gTG8odCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIFJvKHQpe3ZhciBuPTA7ZG8gdC5oZWlnaHQ9bjt3aGlsZSgodD10LnBhcmVudCkmJnQuaGVpZ2h0PCsrbil9ZnVuY3Rpb24gVW8odCl7dGhpcy5kYXRhPXQsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9ZnVuY3Rpb24gRG8odCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGx9ZnVuY3Rpb24gT28odCxuKXt2YXIgZT1uLngtdC54LHI9bi55LXQueSxpPXQuci1uLnI7cmV0dXJuIGkqaSsxZS02PmUqZStyKnJ9ZnVuY3Rpb24gRm8odCxuKXt2YXIgZSxyLGksbz1udWxsLHU9dC5oZWFkO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOmU9SW8oblswXSk7YnJlYWs7Y2FzZSAyOmU9WW8oblswXSxuWzFdKTticmVhaztjYXNlIDM6ZT1CbyhuWzBdLG5bMV0sblsyXSl9Zm9yKDt1OylpPXUuXyxyPXUubmV4dCxlJiZPbyhlLGkpP289dToobz8odC50YWlsPW8sby5uZXh0PW51bGwpOnQuaGVhZD10LnRhaWw9bnVsbCxuLnB1c2goaSksZT1Gbyh0LG4pLG4ucG9wKCksdC5oZWFkPyh1Lm5leHQ9dC5oZWFkLHQuaGVhZD11KToodS5uZXh0PW51bGwsdC5oZWFkPXQudGFpbD11KSxvPXQudGFpbCxvLm5leHQ9ciksdT1yO3JldHVybiB0LnRhaWw9byxlfWZ1bmN0aW9uIElvKHQpe3JldHVybnt4OnQueCx5OnQueSxyOnQucn19ZnVuY3Rpb24gWW8odCxuKXt2YXIgZT10Lngscj10LnksaT10LnIsbz1uLngsdT1uLnksYT1uLnIsYz1vLWUscz11LXIsZj1hLWksbD1NYXRoLnNxcnQoYypjK3Mqcyk7cmV0dXJue3g6KGUrbytjL2wqZikvMix5OihyK3Urcy9sKmYpLzIscjoobCtpK2EpLzJ9fWZ1bmN0aW9uIEJvKHQsbixlKXt2YXIgcj10LngsaT10Lnksbz10LnIsdT1uLngsYT1uLnksYz1uLnIscz1lLngsZj1lLnksbD1lLnIsaD0yKihyLXUpLHA9MiooaS1hKSxkPTIqKGMtbyksdj1yKnIraSppLW8qby11KnUtYSphK2MqYyxfPTIqKHItcykseT0yKihpLWYpLGc9MioobC1vKSxtPXIqcitpKmktbypvLXMqcy1mKmYrbCpsLHg9XypwLWgqeSxiPShwKm0teSp2KS94LXIsdz0oeSpkLXAqZykveCxNPShfKnYtaCptKS94LWksVD0oaCpnLV8qZCkveCxOPXcqdytUKlQtMSxrPTIqKGIqdytNKlQrbyksUz1iKmIrTSpNLW8qbyxBPSgtay1NYXRoLnNxcnQoayprLTQqTipTKSkvKDIqTik7cmV0dXJue3g6Yit3KkErcix5Ok0rVCpBK2kscjpBfX1mdW5jdGlvbiBqbyh0LG4sZSl7dmFyIHI9dC54LGk9dC55LG89bi5yK2Uucix1PXQucitlLnIsYT1uLngtcixjPW4ueS1pLHM9YSphK2MqYztpZihzKXt2YXIgZj0uNSsoKHUqPXUpLShvKj1vKSkvKDIqcyksbD1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKm8qKHUrcyktKHUtPXMpKnUtbypvKSkvKDIqcyk7ZS54PXIrZiphK2wqYyxlLnk9aStmKmMtbCphfWVsc2UgZS54PXIrdSxlLnk9aX1mdW5jdGlvbiBIbyh0LG4pe3ZhciBlPW4ueC10Lngscj1uLnktdC55LGk9dC5yK24ucjtyZXR1cm4gaSppPmUqZStyKnJ9ZnVuY3Rpb24gWG8odCxuLGUpe3ZhciByPXQueC1uLGk9dC55LWU7cmV0dXJuIHIqcitpKml9ZnVuY3Rpb24gVm8odCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFdvKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIG4sZSxyLGk7aWYobj10WzBdLG4ueD0wLG4ueT0wLCEoaT4xKSlyZXR1cm4gbi5yO2lmKGU9dFsxXSxuLng9LWUucixlLng9bi5yLGUueT0wLCEoaT4yKSlyZXR1cm4gbi5yK2UucjtqbyhlLG4scj10WzJdKTt2YXIgbyx1LGEsYyxzLGYsbCxoPW4ucipuLnIscD1lLnIqZS5yLGQ9ci5yKnIucix2PWgrcCtkLF89aCpuLngrcCplLngrZCpyLngseT1oKm4ueStwKmUueStkKnIueTtuPW5ldyBWbyhuKSxlPW5ldyBWbyhlKSxyPW5ldyBWbyhyKSxuLm5leHQ9ci5wcmV2aW91cz1lLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bjt0OmZvcihhPTM7YTxpOysrYSl7aWYoam8obi5fLGUuXyxyPXRbYV0pLHI9bmV3IFZvKHIpLChzPW4ucHJldmlvdXMpPT09KGM9ZS5uZXh0KSl7aWYoSG8oYy5fLHIuXykpe249ZSxlPWMsLS1hO2NvbnRpbnVlIHR9fWVsc2V7Zj1jLl8ucixsPXMuXy5yO2RvIGlmKGY8PWwpe2lmKEhvKGMuXyxyLl8pKXtlPWMsbi5uZXh0PWUsZS5wcmV2aW91cz1uLC0tYTtjb250aW51ZSB0fWM9Yy5uZXh0LGYrPWMuXy5yfWVsc2V7aWYoSG8ocy5fLHIuXykpe249cyxuLm5leHQ9ZSxlLnByZXZpb3VzPW4sLS1hO2NvbnRpbnVlIHR9cz1zLnByZXZpb3VzLGwrPXMuXy5yfXdoaWxlKGMhPT1zLm5leHQpfWZvcihyLnByZXZpb3VzPW4sci5uZXh0PWUsbi5uZXh0PWUucHJldmlvdXM9ZT1yLHYrPWQ9ci5fLnIqci5fLnIsXys9ZCpyLl8ueCx5Kz1kKnIuXy55LGg9WG8obi5fLG89Xy92LHU9eS92KTsocj1yLm5leHQpIT09ZTspKGQ9WG8oci5fLG8sdSkpPGgmJihuPXIsaD1kKTtlPW4ubmV4dH1mb3Iobj1bZS5fXSxyPWU7KHI9ci5uZXh0KSE9PWU7KW4ucHVzaChyLl8pO2ZvcihyPVRnKG4pLGE9MDthPGk7KythKW49dFthXSxuLngtPXIueCxuLnktPXIueTtyZXR1cm4gci5yfWZ1bmN0aW9uICRvKHQpe3JldHVybiBudWxsPT10P251bGw6Wm8odCl9ZnVuY3Rpb24gWm8odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIEdvKCl7cmV0dXJuIDB9ZnVuY3Rpb24gSm8odCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX1mdW5jdGlvbiBRbyh0KXtyZXR1cm4gZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8KG4ucj1NYXRoLm1heCgwLCt0KG4pfHwwKSl9fWZ1bmN0aW9uIEtvKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHI9ZS5jaGlsZHJlbil7dmFyIHIsaSxvLHU9ci5sZW5ndGgsYT10KGUpKm58fDA7aWYoYSlmb3IoaT0wO2k8dTsrK2kpcltpXS5yKz1hO2lmKG89V28ociksYSlmb3IoaT0wO2k8dTsrK2kpcltpXS5yLT1hO2Uucj1vK2F9fX1mdW5jdGlvbiB0dSh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9bi5wYXJlbnQ7bi5yKj10LGUmJihuLng9ZS54K3Qqbi54LG4ueT1lLnkrdCpuLnkpfX1mdW5jdGlvbiBudSh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBldSh0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBydSh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiBpdSh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bMF06dC50fWZ1bmN0aW9uIG91KHQpe3ZhciBuPXQuY2hpbGRyZW47cmV0dXJuIG4/bltuLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gdXUodCxuLGUpe3ZhciByPWUvKG4uaS10LmkpO24uYy09cixuLnMrPWUsdC5jKz1yLG4ueis9ZSxuLm0rPWV9ZnVuY3Rpb24gYXUodCl7Zm9yKHZhciBuLGU9MCxyPTAsaT10LmNoaWxkcmVuLG89aS5sZW5ndGg7LS1vPj0wOyluPWlbb10sbi56Kz1lLG4ubSs9ZSxlKz1uLnMrKHIrPW4uYyl9ZnVuY3Rpb24gY3UodCxuLGUpe3JldHVybiB0LmEucGFyZW50PT09bi5wYXJlbnQ/dC5hOmV9ZnVuY3Rpb24gc3UodCxuKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9bn1mdW5jdGlvbiBmdSh0KXtmb3IodmFyIG4sZSxyLGksbyx1PW5ldyBzdSh0LDApLGE9W3VdO249YS5wb3AoKTspaWYocj1uLl8uY2hpbGRyZW4pZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KG89ci5sZW5ndGgpLGk9by0xO2k+PTA7LS1pKWEucHVzaChlPW4uY2hpbGRyZW5baV09bmV3IHN1KHJbaV0saSkpLGUucGFyZW50PW47cmV0dXJuKHUucGFyZW50PW5ldyBzdShudWxsLDApKS5jaGlsZHJlbj1bdV0sdX1mdW5jdGlvbiBsdSh0LG4sZSxyLGksbyl7Zm9yKHZhciB1LGEsYyxzLGYsbCxoLHAsZCx2LF8seSxnPVtdLG09bi5jaGlsZHJlbix4PTAsYj1tLmxlbmd0aCx3PW4udmFsdWU7eDxiOyl7Zm9yKHM9aS1lLGY9by1yLGg9cD1sPW1beF0udmFsdWUsXz1NYXRoLm1heChmL3Mscy9mKS8odyp0KSx5PWwqbCpfLHY9TWF0aC5tYXgocC95LHkvaCksYz14KzE7YzxiOysrYyl7aWYobCs9YT1tW2NdLnZhbHVlLGE8aCYmKGg9YSksYT5wJiYocD1hKSx5PWwqbCpfLGQ9TWF0aC5tYXgocC95LHkvaCksZD52KXtsLT1hO2JyZWFrfXY9ZH1nLnB1c2godT17dmFsdWU6bCxkaWNlOnM8ZixjaGlsZHJlbjptLnNsaWNlKHgsYyl9KSx1LmRpY2U/RWcodSxlLHIsaSx3P3IrPWYqbC93Om8pOlVnKHUsZSxyLHc/ZSs9cypsL3c6aSxvKSx3LT1sLHg9Y31yZXR1cm4gZ31mdW5jdGlvbiBodSh0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gcHUodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGR1KHQsbil7cmV0dXJuIG59ZnVuY3Rpb24gdnUodCxuKXt2YXIgZT10LmdldChuKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrbik7cmV0dXJuIGV9ZnVuY3Rpb24gX3UodCl7cmV0dXJuIHQueH1mdW5jdGlvbiB5dSh0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIGd1KCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBtdSh0LG4pe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9Z3kodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtuJiYoci5vbigiY2xpY2suZHJhZyIsdG0sITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGU/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGUuc3R5bGUuTW96VXNlclNlbGVjdD1lLl9fbm9zZWxlY3QsZGVsZXRlIGUuX19ub3NlbGVjdCl9ZnVuY3Rpb24geHUodCxuLGUscixpLG8sdSxhLGMscyl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnN1YmplY3Q9ZSx0aGlzLmlkZW50aWZpZXI9cix0aGlzLmFjdGl2ZT1pLHRoaXMueD1vLHRoaXMueT11LHRoaXMuZHg9YSx0aGlzLmR5PWMsdGhpcy5fPXN9ZnVuY3Rpb24gYnUoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gd3UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIE11KG4pe3JldHVybiBudWxsPT1uP3t4OnQuZXZlbnQueCx5OnQuZXZlbnQueX06bn1mdW5jdGlvbiBUdSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBOdSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBrdSgpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIFN1KHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gQXUodCxuKXt2YXIgZT1uLHI9bi5SLGk9ZS5VO2k/aS5MPT09ZT9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxlLlU9cixlLlI9ci5MLGUuUiYmKGUuUi5VPWUpLHIuTD1lfWZ1bmN0aW9uIEV1KHQsbil7dmFyIGU9bixyPW4uTCxpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksZS5VPXIsZS5MPXIuUixlLkwmJihlLkwuVT1lKSxyLlI9ZX1mdW5jdGlvbiBDdSh0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24genUodCxuLGUscil7dmFyIGk9W251bGwsbnVsbF0sbz1zbS5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9bixlJiZxdShpLHQsbixlKSxyJiZxdShpLG4sdCxyKSxhbVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxhbVtuLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIFB1KHQsbixlKXt2YXIgcj1bbixlXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBxdSh0LG4sZSxyKXt0WzBdfHx0WzFdP3QubGVmdD09PWU/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1uLHQucmlnaHQ9ZSl9ZnVuY3Rpb24gTHUodCxuLGUscixpKXt2YXIgbyx1PXRbMF0sYT10WzFdLGM9dVswXSxzPXVbMV0sZj1hWzBdLGw9YVsxXSxoPTAscD0xLGQ9Zi1jLHY9bC1zO2lmKG89bi1jLGR8fCEobz4wKSl7aWYoby89ZCxkPDApe2lmKG88aClyZXR1cm47bzxwJiYocD1vKX1lbHNlIGlmKGQ+MCl7aWYobz5wKXJldHVybjtvPmgmJihoPW8pfWlmKG89ci1jLGR8fCEobzwwKSl7aWYoby89ZCxkPDApe2lmKG8+cClyZXR1cm47bz5oJiYoaD1vKX1lbHNlIGlmKGQ+MCl7aWYobzxoKXJldHVybjtvPHAmJihwPW8pfWlmKG89ZS1zLHZ8fCEobz4wKSl7aWYoby89dix2PDApe2lmKG88aClyZXR1cm47bzxwJiYocD1vKX1lbHNlIGlmKHY+MCl7aWYobz5wKXJldHVybjtvPmgmJihoPW8pfWlmKG89aS1zLHZ8fCEobzwwKSl7aWYoby89dix2PDApe2lmKG8+cClyZXR1cm47bz5oJiYoaD1vKX1lbHNlIGlmKHY+MCl7aWYobzxoKXJldHVybjtvPHAmJihwPW8pfXJldHVybiEoaD4wfHxwPDEpfHwoaD4wJiYodFswXT1bYytoKmQscytoKnZdKSxwPDEmJih0WzFdPVtjK3AqZCxzK3Aqdl0pLCEwKX19fX19ZnVuY3Rpb24gUnUodCxuLGUscixpKXt2YXIgbz10WzFdO2lmKG8pcmV0dXJuITA7dmFyIHUsYSxjPXRbMF0scz10LmxlZnQsZj10LnJpZ2h0LGw9c1swXSxoPXNbMV0scD1mWzBdLGQ9ZlsxXSx2PShsK3ApLzIsXz0oaCtkKS8yO2lmKGQ9PT1oKXtpZih2PG58fHY+PXIpcmV0dXJuO2lmKGw+cCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVt2LGVdO289W3YsaV19ZWxzZXtpZihjKXtpZihjWzFdPGUpcmV0dXJufWVsc2UgYz1bdixpXTtvPVt2LGVdfX1lbHNlIGlmKHU9KGwtcCkvKGQtaCksYT1fLXUqdix1PC0xfHx1PjEpaWYobD5wKXtpZihjKXtpZihjWzFdPj1pKXJldHVybn1lbHNlIGM9WyhlLWEpL3UsZV07bz1bKGktYSkvdSxpXX1lbHNle2lmKGMpe2lmKGNbMV08ZSlyZXR1cm59ZWxzZSBjPVsoaS1hKS91LGldO289WyhlLWEpL3UsZV19ZWxzZSBpZihoPGQpe2lmKGMpe2lmKGNbMF0+PXIpcmV0dXJufWVsc2UgYz1bbix1Km4rYV07bz1bcix1KnIrYV19ZWxzZXtpZihjKXtpZihjWzBdPG4pcmV0dXJufWVsc2UgYz1bcix1KnIrYV07bz1bbix1Km4rYV19cmV0dXJuIHRbMF09Yyx0WzFdPW8sITB9ZnVuY3Rpb24gVXUodCxuLGUscil7Zm9yKHZhciBpLG89c20ubGVuZ3RoO28tLTspUnUoaT1zbVtvXSx0LG4sZSxyKSYmTHUoaSx0LG4sZSxyKSYmKE1hdGguYWJzKGlbMF1bMF0taVsxXVswXSk+aG18fE1hdGguYWJzKGlbMF1bMV0taVsxXVsxXSk+aG0pfHxkZWxldGUgc21bb119ZnVuY3Rpb24gRHUodCl7cmV0dXJuIGFtW3QuaW5kZXhdPXtzaXRlOnQsaGFsZmVkZ2VzOltdfX1mdW5jdGlvbiBPdSh0LG4pe3ZhciBlPXQuc2l0ZSxyPW4ubGVmdCxpPW4ucmlnaHQ7cmV0dXJuIGU9PT1pJiYoaT1yLHI9ZSksaT9NYXRoLmF0YW4yKGlbMV0tclsxXSxpWzBdLXJbMF0pOihlPT09cj8ocj1uWzFdLGk9blswXSk6KHI9blswXSxpPW5bMV0pLE1hdGguYXRhbjIoclswXS1pWzBdLGlbMV0tclsxXSkpfWZ1bmN0aW9uIEZ1KHQsbil7cmV0dXJuIG5bKyhuLmxlZnQhPT10LnNpdGUpXX1mdW5jdGlvbiBJdSh0LG4pe3JldHVybiBuWysobi5sZWZ0PT09dC5zaXRlKV19ZnVuY3Rpb24gWXUoKXtmb3IodmFyIHQsbixlLHIsaT0wLG89YW0ubGVuZ3RoO2k8bzsrK2kpaWYoKHQ9YW1baV0pJiYocj0obj10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIHU9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxyOysrZSl1W2VdPWUsYVtlXT1PdSh0LHNtW25bZV1dKTtmb3IodS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGFbbl0tYVt0XX0pLGU9MDtlPHI7KytlKWFbZV09blt1W2VdXTtmb3IoZT0wO2U8cjsrK2UpbltlXT1hW2VdfX1mdW5jdGlvbiBCdSh0LG4sZSxyKXt2YXIgaSxvLHUsYSxjLHMsZixsLGgscCxkLHYsXz1hbS5sZW5ndGgseT0hMDtmb3IoaT0wO2k8XzsrK2kpaWYobz1hbVtpXSl7Zm9yKHU9by5zaXRlLGM9by5oYWxmZWRnZXMsYT1jLmxlbmd0aDthLS07KXNtW2NbYV1dfHxjLnNwbGljZShhLDEpO2ZvcihhPTAscz1jLmxlbmd0aDthPHM7KXA9SXUobyxzbVtjW2FdXSksZD1wWzBdLHY9cFsxXSxmPUZ1KG8sc21bY1srK2Elc11dKSxsPWZbMF0saD1mWzFdLChNYXRoLmFicyhkLWwpPmhtfHxNYXRoLmFicyh2LWgpPmhtKSYmKGMuc3BsaWNlKGEsMCxzbS5wdXNoKFB1KHUscCxNYXRoLmFicyhkLXQpPGhtJiZyLXY+aG0/W3QsTWF0aC5hYnMobC10KTxobT9oOnJdOk1hdGguYWJzKHYtcik8aG0mJmUtZD5obT9bTWF0aC5hYnMoaC1yKTxobT9sOmUscl06TWF0aC5hYnMoZC1lKTxobSYmdi1uPmhtP1tlLE1hdGguYWJzKGwtZSk8aG0/aDpuXTpNYXRoLmFicyh2LW4pPGhtJiZkLXQ+aG0/W01hdGguYWJzKGgtbik8aG0/bDp0LG5dOm51bGwpKS0xKSwrK3MpO3MmJih5PSExKX1pZih5KXt2YXIgZyxtLHgsYj0xLzA7Zm9yKGk9MCx5PW51bGw7aTxfOysraSkobz1hbVtpXSkmJih1PW8uc2l0ZSxnPXVbMF0tdCxtPXVbMV0tbix4PWcqZyttKm0seDxiJiYoYj14LHk9bykpO2lmKHkpe3ZhciB3PVt0LG5dLE09W3Qscl0sVD1bZSxyXSxOPVtlLG5dO3kuaGFsZmVkZ2VzLnB1c2goc20ucHVzaChQdSh1PXkuc2l0ZSx3LE0pKS0xLHNtLnB1c2goUHUodSxNLFQpKS0xLHNtLnB1c2goUHUodSxULE4pKS0xLHNtLnB1c2goUHUodSxOLHcpKS0xKX19Zm9yKGk9MDtpPF87KytpKShvPWFtW2ldKSYmKG8uaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIGFtW2ldKX1mdW5jdGlvbiBqdSgpe1N1KHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBIdSh0KXt2YXIgbj10LlAsZT10Lk47aWYobiYmZSl7dmFyIHI9bi5zaXRlLGk9dC5zaXRlLG89ZS5zaXRlO2lmKHIhPT1vKXt2YXIgdT1pWzBdLGE9aVsxXSxjPXJbMF0tdSxzPXJbMV0tYSxmPW9bMF0tdSxsPW9bMV0tYSxoPTIqKGMqbC1zKmYpO2lmKCEoaD49LXBtKSl7dmFyIHA9YypjK3MqcyxkPWYqZitsKmwsdj0obCpwLXMqZCkvaCxfPShjKmQtZipwKS9oLHk9Zm0ucG9wKCl8fG5ldyBqdTt5LmFyYz10LHkuc2l0ZT1pLHkueD12K3UseS55PSh5LmN5PV8rYSkrTWF0aC5zcXJ0KHYqditfKl8pLHQuY2lyY2xlPXk7Zm9yKHZhciBnPW51bGwsbT1jbS5fO207KWlmKHkueTxtLnl8fHkueT09PW0ueSYmeS54PD1tLngpe2lmKCFtLkwpe2c9bS5QO2JyZWFrfW09bS5MfWVsc2V7aWYoIW0uUil7Zz1tO2JyZWFrfW09bS5SfWNtLmluc2VydChnLHkpLGd8fChvbT15KX19fX1mdW5jdGlvbiBYdSh0KXt2YXIgbj10LmNpcmNsZTtuJiYobi5QfHwob209bi5OKSxjbS5yZW1vdmUobiksZm0ucHVzaChuKSxTdShuKSx0LmNpcmNsZT1udWxsKX1mdW5jdGlvbiBWdSgpe1N1KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBXdSh0KXt2YXIgbj1sbS5wb3AoKXx8bmV3IFZ1O3JldHVybiBuLnNpdGU9dCxufWZ1bmN0aW9uICR1KHQpe1h1KHQpLHVtLnJlbW92ZSh0KSxsbS5wdXNoKHQpLFN1KHQpfWZ1bmN0aW9uIFp1KHQpe3ZhciBuPXQuY2lyY2xlLGU9bi54LHI9bi5jeSxpPVtlLHJdLG89dC5QLHU9dC5OLGE9W3RdOyR1KHQpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPGhtJiZNYXRoLmFicyhyLWMuY2lyY2xlLmN5KTxobTspbz1jLlAsYS51bnNoaWZ0KGMpLCR1KGMpLGM9bzthLnVuc2hpZnQoYyksWHUoYyk7Zm9yKHZhciBzPXU7cy5jaXJjbGUmJk1hdGguYWJzKGUtcy5jaXJjbGUueCk8aG0mJk1hdGguYWJzKHItcy5jaXJjbGUuY3kpPGhtOyl1PXMuTixhLnB1c2gocyksJHUocykscz11O2EucHVzaChzKSxYdShzKTt2YXIgZixsPWEubGVuZ3RoO2ZvcihmPTE7ZjxsOysrZilzPWFbZl0sYz1hW2YtMV0scXUocy5lZGdlLGMuc2l0ZSxzLnNpdGUsaSk7Yz1hWzBdLHM9YVtsLTFdLHMuZWRnZT16dShjLnNpdGUscy5zaXRlLG51bGwsaSksSHUoYyksSHUocyl9ZnVuY3Rpb24gR3UodCl7Zm9yKHZhciBuLGUscixpLG89dFswXSx1PXRbMV0sYT11bS5fO2E7KWlmKHI9SnUoYSx1KS1vLHI+aG0pYT1hLkw7ZWxzZXtpZihpPW8tUXUoYSx1KSwhKGk+aG0pKXtyPi1obT8obj1hLlAsZT1hKTppPi1obT8obj1hLGU9YS5OKTpuPWU9YTticmVha31pZighYS5SKXtuPWE7YnJlYWt9YT1hLlJ9RHUodCk7dmFyIGM9V3UodCk7aWYodW0uaW5zZXJ0KG4sYyksbnx8ZSl7aWYobj09PWUpcmV0dXJuIFh1KG4pLGU9V3Uobi5zaXRlKSx1bS5pbnNlcnQoYyxlKSxjLmVkZ2U9ZS5lZGdlPXp1KG4uc2l0ZSxjLnNpdGUpLEh1KG4pLHZvaWQgSHUoZSk7aWYoIWUpcmV0dXJuIHZvaWQoYy5lZGdlPXp1KG4uc2l0ZSxjLnNpdGUpKTtYdShuKSxYdShlKTt2YXIgcz1uLnNpdGUsZj1zWzBdLGw9c1sxXSxoPXRbMF0tZixwPXRbMV0tbCxkPWUuc2l0ZSx2PWRbMF0tZixfPWRbMV0tbCx5PTIqKGgqXy1wKnYpLGc9aCpoK3AqcCxtPXYqditfKl8seD1bKF8qZy1wKm0pL3krZiwoaCptLXYqZykveStsXTtxdShlLmVkZ2UscyxkLHgpLGMuZWRnZT16dShzLHQsbnVsbCx4KSxlLmVkZ2U9enUodCxkLG51bGwseCksSHUobiksSHUoZSl9fWZ1bmN0aW9uIEp1KHQsbil7dmFyIGU9dC5zaXRlLHI9ZVswXSxpPWVbMV0sbz1pLW47aWYoIW8pcmV0dXJuIHI7dmFyIHU9dC5QO2lmKCF1KXJldHVybi0oMS8wKTtlPXUuc2l0ZTt2YXIgYT1lWzBdLGM9ZVsxXSxzPWMtbjtpZighcylyZXR1cm4gYTt2YXIgZj1hLXIsbD0xL28tMS9zLGg9Zi9zO3JldHVybiBsPygtaCtNYXRoLnNxcnQoaCpoLTIqbCooZipmLygtMipzKS1jK3MvMitpLW8vMikpKS9sK3I6KHIrYSkvMn1mdW5jdGlvbiBRdSh0LG4pe3ZhciBlPXQuTjtpZihlKXJldHVybiBKdShlLG4pO3ZhciByPXQuc2l0ZTtyZXR1cm4gclsxXT09PW4/clswXToxLzB9ZnVuY3Rpb24gS3UodCxuLGUpe3JldHVybih0WzBdLWVbMF0pKihuWzFdLXRbMV0pLSh0WzBdLW5bMF0pKihlWzFdLXRbMV0pfWZ1bmN0aW9uIHRhKHQsbil7cmV0dXJuIG5bMV0tdFsxXXx8blswXS10WzBdfWZ1bmN0aW9uIG5hKHQsbil7dmFyIGUscixpLG89dC5zb3J0KHRhKS5wb3AoKTtmb3Ioc209W10sYW09bmV3IEFycmF5KHQubGVuZ3RoKSx1bT1uZXcga3UsY209bmV3IGt1OzspaWYoaT1vbSxvJiYoIWl8fG9bMV08aS55fHxvWzFdPT09aS55JiZvWzBdPGkueCkpb1swXT09PWUmJm9bMV09PT1yfHwoR3UobyksZT1vWzBdLHI9b1sxXSksbz10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7WnUoaS5hcmMpfWlmKFl1KCksbil7dmFyIHU9K25bMF1bMF0sYT0rblswXVsxXSxjPStuWzFdWzBdLHM9K25bMV1bMV07VXUodSxhLGMscyksQnUodSxhLGMscyl9dGhpcy5lZGdlcz1zbSx0aGlzLmNlbGxzPWFtLHVtPWNtPXNtPWFtPW51bGx9ZnVuY3Rpb24gZWEodCxuLGUpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy50cmFuc2Zvcm09ZX1mdW5jdGlvbiByYSh0LG4sZSl7dGhpcy5rPXQsdGhpcy54PW4sdGhpcy55PWV9ZnVuY3Rpb24gaWEodCl7cmV0dXJuIHQuX196b29tfHxfbX1mdW5jdGlvbiBvYSgpe3QuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gdWEoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24gYWEoKXt2YXIgdCxuLGU9dGhpcztyZXR1cm4gZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KGU9ZS5vd25lclNWR0VsZW1lbnR8fGUsdD1lLndpZHRoLmJhc2VWYWwudmFsdWUsbj1lLmhlaWdodC5iYXNlVmFsLnZhbHVlKToodD1lLmNsaWVudFdpZHRoLG49ZS5jbGllbnRIZWlnaHQpLFtbMCwwXSxbdCxuXV19ZnVuY3Rpb24gY2EoKXtyZXR1cm4gdGhpcy5fX3pvb218fF9tfWZ1bmN0aW9uIHNhKCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmYSh0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBsYSgpe3JldHVybiF0LmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBoYSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBwYSh0KXtmb3IoOyF0Ll9fYnJ1c2g7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdC5fX2JydXNofWZ1bmN0aW9uIGRhKHQpe3JldHVybiB0WzBdWzBdPT09dFsxXVswXXx8dFswXVsxXT09PXRbMV1bMV19ZnVuY3Rpb24gdmEodCl7dmFyIG49dC5fX2JydXNoO3JldHVybiBuP24uZGltLm91dHB1dChuLnNlbGVjdGlvbik6bnVsbH1mdW5jdGlvbiBfYSgpe3JldHVybiBnYShrbSl9ZnVuY3Rpb24geWEoKXtyZXR1cm4gZ2EoU20pfWZ1bmN0aW9uIGdhKG4pe2Z1bmN0aW9uIGUodCl7dmFyIGU9dC5wcm9wZXJ0eSgiX19icnVzaCIsYSkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW2ZhKCJvdmVybGF5IildKTtlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLEVtLm92ZXJsYXkpLm1lcmdlKGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1wYSh0aGlzKS5leHRlbnQ7Z3kodGhpcykuYXR0cigieCIsdFswXVswXSkuYXR0cigieSIsdFswXVsxXSkuYXR0cigid2lkdGgiLHRbMV1bMF0tdFswXVswXSkuYXR0cigiaGVpZ2h0Iix0WzFdWzFdLXRbMF1bMV0pfSksdC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5kYXRhKFtmYSgic2VsZWN0aW9uIildKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwic2VsZWN0aW9uIikuYXR0cigiY3Vyc29yIixFbS5zZWxlY3Rpb24pLmF0dHIoImZpbGwiLCIjNzc3IikuYXR0cigiZmlsbC1vcGFjaXR5IiwuMykuYXR0cigic3Ryb2tlIiwiI2ZmZiIpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKTt2YXIgaT10LnNlbGVjdEFsbCgiLmhhbmRsZSIpLmRhdGEobi5oYW5kbGVzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJoYW5kbGUgaGFuZGxlLS0iK3QudHlwZX0pLmF0dHIoImN1cnNvciIsZnVuY3Rpb24odCl7cmV0dXJuIEVtW3QudHlwZV19KSx0LmVhY2gocikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCB0b3VjaHN0YXJ0LmJydXNoIix1KX1mdW5jdGlvbiByKCl7dmFyIHQ9Z3kodGhpcyksbj1wYSh0aGlzKS5zZWxlY3Rpb247bj8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsblswXVswXSkuYXR0cigieSIsblswXVsxXSkuYXR0cigid2lkdGgiLG5bMV1bMF0tblswXVswXSkuYXR0cigiaGVpZ2h0IixuWzFdWzFdLW5bMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZVt0LnR5cGUubGVuZ3RoLTFdP25bMV1bMF0taC8yOm5bMF1bMF0taC8yfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP25bMV1bMV0taC8yOm5bMF1bMV0taC8yfSkuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiJuIj09PXQudHlwZXx8InMiPT09dC50eXBlP25bMV1bMF0tblswXVswXStoOmh9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiJlIj09PXQudHlwZXx8InciPT09dC50eXBlP25bMV1bMV0tblswXVsxXStoOmh9KSk6dC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGkodCxuKXtyZXR1cm4gdC5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBvKHQsbil9ZnVuY3Rpb24gbyh0LG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1uLHRoaXMuc3RhdGU9dC5fX2JydXNoLHRoaXMuYWN0aXZlPTB9ZnVuY3Rpb24gdSgpe2Z1bmN0aW9uIGUoKXt2YXIgdD1VXyhUKTshVXx8d3x8TXx8KE1hdGguYWJzKHRbMF0tT1swXSk+TWF0aC5hYnModFsxXS1PWzFdKT9NPSEwOnc9ITApLE89dCxiPSEwLGJtKCksbygpfWZ1bmN0aW9uIG8oKXt2YXIgdDtzd2l0Y2gobT1PWzBdLURbMF0seD1PWzFdLURbMV0sayl7Y2FzZSBNbTpjYXNlIHdtOlMmJihtPU1hdGgubWF4KFAtbCxNYXRoLm1pbihMLXYsbSkpLGg9bCttLF89dittKSxBJiYoeD1NYXRoLm1heChxLXAsTWF0aC5taW4oUi15LHgpKSxkPXAreCxnPXkreCk7YnJlYWs7Y2FzZSBUbTpTPDA/KG09TWF0aC5tYXgoUC1sLE1hdGgubWluKEwtbCxtKSksaD1sK20sXz12KTpTPjAmJihtPU1hdGgubWF4KFAtdixNYXRoLm1pbihMLXYsbSkpLGg9bCxfPXYrbSksQTwwPyh4PU1hdGgubWF4KHEtcCxNYXRoLm1pbihSLXAseCkpLGQ9cCt4LGc9eSk6QT4wJiYoeD1NYXRoLm1heChxLXksTWF0aC5taW4oUi15LHgpKSxkPXAsZz15K3gpO2JyZWFrO2Nhc2UgTm06UyYmKGg9TWF0aC5tYXgoUCxNYXRoLm1pbihMLGwtbSpTKSksXz1NYXRoLm1heChQLE1hdGgubWluKEwsdittKlMpKSksQSYmKGQ9TWF0aC5tYXgocSxNYXRoLm1pbihSLHAteCpBKSksZz1NYXRoLm1heChxLE1hdGgubWluKFIseSt4KkEpKSl9XzxoJiYoUyo9LTEsdD1sLGw9dix2PXQsdD1oLGg9XyxfPXQsTiBpbiBDbSYmWS5hdHRyKCJjdXJzb3IiLEVtW049Q21bTl1dKSksZzxkJiYoQSo9LTEsdD1wLHA9eSx5PXQsdD1kLGQ9ZyxnPXQsTiBpbiB6bSYmWS5hdHRyKCJjdXJzb3IiLEVtW049em1bTl1dKSksRS5zZWxlY3Rpb24mJih6PUUuc2VsZWN0aW9uKSx3JiYoaD16WzBdWzBdLF89elsxXVswXSksTSYmKGQ9elswXVsxXSxnPXpbMV1bMV0pLHpbMF1bMF09PT1oJiZ6WzBdWzFdPT09ZCYmelsxXVswXT09PV8mJnpbMV1bMV09PT1nfHwoRS5zZWxlY3Rpb249W1toLGRdLFtfLGddXSxyLmNhbGwoVCksRi5icnVzaCgpKX1mdW5jdGlvbiB1KCl7aWYoc2EoKSx0LmV2ZW50LnRvdWNoZXMpe2lmKHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO2MmJmNsZWFyVGltZW91dChjKSxjPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjPW51bGx9LDUwMCksSS5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIG11KHQuZXZlbnQudmlldyxiKSxCLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtJLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksWS5hdHRyKCJjdXJzb3IiLEVtLm92ZXJsYXkpLEUuc2VsZWN0aW9uJiYoej1FLnNlbGVjdGlvbiksZGEoeikmJihFLnNlbGVjdGlvbj1udWxsLHIuY2FsbChUKSksRi5lbmQoKX1mdW5jdGlvbiBhKCl7c3dpdGNoKHQuZXZlbnQua2V5Q29kZSl7Y2FzZSAxNjpVPVMmJkE7YnJlYWs7Y2FzZSAxODprPT09VG0mJihTJiYodj1fLW0qUyxsPWgrbSpTKSxBJiYoeT1nLXgqQSxwPWQreCpBKSxrPU5tLG8oKSk7YnJlYWs7Y2FzZSAzMjprIT09VG0mJmshPT1ObXx8KFM8MD92PV8tbTpTPjAmJihsPWgtbSksQTwwP3k9Zy14OkE+MCYmKHA9ZC14KSxrPU1tLFkuYXR0cigiY3Vyc29yIixFbS5zZWxlY3Rpb24pLG8oKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59Ym0oKX1mdW5jdGlvbiBzKCl7c3dpdGNoKHQuZXZlbnQua2V5Q29kZSl7Y2FzZSAxNjpVJiYodz1NPVU9ITEsbygpKTticmVhaztjYXNlIDE4Oms9PT1ObSYmKFM8MD92PV86Uz4wJiYobD1oKSxBPDA/eT1nOkE+MCYmKHA9ZCksaz1UbSxvKCkpO2JyZWFrO2Nhc2UgMzI6az09PU1tJiYodC5ldmVudC5hbHRLZXk/KFMmJih2PV8tbSpTLGw9aCttKlMpLEEmJih5PWcteCpBLHA9ZCt4KkEpLGs9Tm0pOihTPDA/dj1fOlM+MCYmKGw9aCksQTwwP3k9ZzpBPjAmJihwPWQpLGs9VG0pLFkuYXR0cigiY3Vyc29yIixFbVtOXSksbygpKTticmVhaztkZWZhdWx0OnJldHVybn1ibSgpfWlmKHQuZXZlbnQudG91Y2hlcyl7aWYodC5ldmVudC5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg8dC5ldmVudC50b3VjaGVzLmxlbmd0aClyZXR1cm4gYm0oKX1lbHNlIGlmKGMpcmV0dXJuO2lmKGYuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbCxoLHAsZCx2LF8seSxnLG0seCxiLHcsTSxUPXRoaXMsTj10LmV2ZW50LnRhcmdldC5fX2RhdGFfXy50eXBlLGs9InNlbGVjdGlvbiI9PT0odC5ldmVudC5tZXRhS2V5P049Im92ZXJsYXkiOk4pP3dtOnQuZXZlbnQuYWx0S2V5P05tOlRtLFM9bj09PVNtP251bGw6UG1bTl0sQT1uPT09a20/bnVsbDpxbVtOXSxFPXBhKFQpLEM9RS5leHRlbnQsej1FLnNlbGVjdGlvbixQPUNbMF1bMF0scT1DWzBdWzFdLEw9Q1sxXVswXSxSPUNbMV1bMV0sVT1TJiZBJiZ0LmV2ZW50LnNoaWZ0S2V5LEQ9VV8oVCksTz1ELEY9aShULGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT1OP0Uuc2VsZWN0aW9uPXo9W1tsPW49PT1TbT9QOkRbMF0scD1uPT09a20/cTpEWzFdXSxbdj1uPT09U20/TDpsLHk9bj09PWttP1I6cF1dOihsPXpbMF1bMF0scD16WzBdWzFdLHY9elsxXVswXSx5PXpbMV1bMV0pLGg9bCxkPXAsXz12LGc9eTt2YXIgST1neShUKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxZPUkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsRW1bTl0pO2lmKHQuZXZlbnQudG91Y2hlcylJLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGUsITApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsdSwhMCk7ZWxzZXt2YXIgQj1neSh0LmV2ZW50LnZpZXcpLm9uKCJrZXlkb3duLmJydXNoIixhLCEwKS5vbigia2V5dXAuYnJ1c2giLHMsITApLm9uKCJtb3VzZW1vdmUuYnJ1c2giLGUsITApLm9uKCJtb3VzZXVwLmJydXNoIix1LCEwKTtubSh0LmV2ZW50LnZpZXcpfXNhKCksUHkoVCksci5jYWxsKFQpLEYuc3RhcnQoKX19ZnVuY3Rpb24gYSgpe3ZhciB0PXRoaXMuX19icnVzaHx8e3NlbGVjdGlvbjpudWxsfTtyZXR1cm4gdC5leHRlbnQ9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC5kaW09bix0fXZhciBjLHM9aGEsZj1sYSxsPVBuKGUsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxoPTY7cmV0dXJuIGUubW92ZT1mdW5jdGlvbih0LGUpe3Quc2VsZWN0aW9uP3Qub24oInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe2kodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIixmdW5jdGlvbigpe2kodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oImJydXNoIixmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dS5zZWxlY3Rpb249MT09PXQmJmRhKHMpP251bGw6Zih0KSxyLmNhbGwobyksYS5icnVzaCgpfXZhciBvPXRoaXMsdT1vLl9fYnJ1c2gsYT1pKG8sYXJndW1lbnRzKSxjPXUuc2VsZWN0aW9uLHM9bi5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLHUuZXh0ZW50KSxmPV9wKGMscyk7CnJldHVybiBjJiZzP3Q6dCgxKX0pOnQuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbz1hcmd1bWVudHMsdT10Ll9fYnJ1c2gsYT1uLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxvKTplLHUuZXh0ZW50KSxjPWkodCxvKS5iZWZvcmVzdGFydCgpO1B5KHQpLHUuc2VsZWN0aW9uPW51bGw9PWF8fGRhKGEpP251bGw6YSxyLmNhbGwodCksYy5zdGFydCgpLmJydXNoKCkuZW5kKCl9KX0sby5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZyYmKHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe1hyKG5ldyB4bShlLHQsbi5vdXRwdXQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pKSxsLmFwcGx5LGwsW3QsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sZS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptbShbWyt0WzBdWzBdLCt0WzBdWzFdXSxbK3RbMV1bMF0sK3RbMV1bMV1dXSksZSk6c30sZS5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptbSghIXQpLGUpOmZ9LGUuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxlKTpofSxlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9bC5vbi5hcHBseShsLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1sP2U6dH0sZX1mdW5jdGlvbiBtYSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gdChuLnNvdXJjZS52YWx1ZStuLnRhcmdldC52YWx1ZSxlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uIHhhKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBiYSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gd2EodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIE1hKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gVGEodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gTmEoKXt0aGlzLnJlc2V0KCl9ZnVuY3Rpb24ga2EodCxuLGUpe3ZhciByPXQucz1uK2UsaT1yLW4sbz1yLWk7dC50PW4tbysoZS1pKX1mdW5jdGlvbiBTYSh0KXtyZXR1cm4gdD4xPzA6dDwtMT9reDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gQWEodCl7cmV0dXJuIHQ+MT9TeDp0PC0xPy1TeDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRWEodCl7cmV0dXJuKHQ9SXgodC8yKSkqdH1mdW5jdGlvbiBDYSgpe31mdW5jdGlvbiB6YSh0LG4pe3QmJlh4Lmhhc093blByb3BlcnR5KHQudHlwZSkmJlh4W3QudHlwZV0odCxuKX1mdW5jdGlvbiBQYSh0LG4sZSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoLWU7Zm9yKG4ubGluZVN0YXJ0KCk7KytpPG87KXI9dFtpXSxuLnBvaW50KHJbMF0sclsxXSxyWzJdKTtuLmxpbmVFbmQoKX1mdW5jdGlvbiBxYSh0LG4pe3ZhciBlPS0xLHI9dC5sZW5ndGg7Zm9yKG4ucG9seWdvblN0YXJ0KCk7KytlPHI7KVBhKHRbZV0sbiwxKTtuLnBvbHlnb25FbmQoKX1mdW5jdGlvbiBMYSgpe1p4LnBvaW50PVVhfWZ1bmN0aW9uIFJhKCl7RGEoVm0sV20pfWZ1bmN0aW9uIFVhKHQsbil7WngucG9pbnQ9RGEsVm09dCxXbT1uLHQqPXp4LG4qPXp4LCRtPXQsWm09Ungobj1uLzIrQXgpLEdtPUl4KG4pfWZ1bmN0aW9uIERhKHQsbil7dCo9engsbio9engsbj1uLzIrQXg7dmFyIGU9dC0kbSxyPWU+PTA/MTotMSxpPXIqZSxvPVJ4KG4pLHU9SXgobiksYT1HbSp1LGM9Wm0qbythKlJ4KGkpLHM9YSpyKkl4KGkpO1d4LmFkZChMeChzLGMpKSwkbT10LFptPW8sR209dX1mdW5jdGlvbiBPYSh0KXtyZXR1cm5bTHgodFsxXSx0WzBdKSxBYSh0WzJdKV19ZnVuY3Rpb24gRmEodCl7dmFyIG49dFswXSxlPXRbMV0scj1SeChlKTtyZXR1cm5bcipSeChuKSxyKkl4KG4pLEl4KGUpXX1mdW5jdGlvbiBJYSh0LG4pe3JldHVybiB0WzBdKm5bMF0rdFsxXSpuWzFdK3RbMl0qblsyXX1mdW5jdGlvbiBZYSh0LG4pe3JldHVyblt0WzFdKm5bMl0tdFsyXSpuWzFdLHRbMl0qblswXS10WzBdKm5bMl0sdFswXSpuWzFdLXRbMV0qblswXV19ZnVuY3Rpb24gQmEodCxuKXt0WzBdKz1uWzBdLHRbMV0rPW5bMV0sdFsyXSs9blsyXX1mdW5jdGlvbiBqYSh0LG4pe3JldHVyblt0WzBdKm4sdFsxXSpuLHRbMl0qbl19ZnVuY3Rpb24gSGEodCl7dmFyIG49QngodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPW4sdFsxXS89bix0WzJdLz1ufWZ1bmN0aW9uIFhhKHQsbil7b3gucHVzaCh1eD1bSm09dCxLbT10XSksbjxRbSYmKFFtPW4pLG4+dHgmJih0eD1uKX1mdW5jdGlvbiBWYSh0LG4pe3ZhciBlPUZhKFt0Knp4LG4qenhdKTtpZihpeCl7dmFyIHI9WWEoaXgsZSksaT1bclsxXSwtclswXSwwXSxvPVlhKGkscik7SGEobyksbz1PYShvKTt2YXIgdSxhPXQtbngsYz1hPjA/MTotMSxzPW9bMF0qQ3gqYyxmPVB4KGEpPjE4MDtmXihjKm54PHMmJnM8Yyp0KT8odT1vWzFdKkN4LHU+dHgmJih0eD11KSk6KHM9KHMrMzYwKSUzNjAtMTgwLGZeKGMqbng8cyYmczxjKnQpPyh1PS1vWzFdKkN4LHU8UW0mJihRbT11KSk6KG48UW0mJihRbT1uKSxuPnR4JiYodHg9bikpKSxmP3Q8bng/UWEoSm0sdCk+UWEoSm0sS20pJiYoS209dCk6UWEodCxLbSk+UWEoSm0sS20pJiYoSm09dCk6S20+PUptPyh0PEptJiYoSm09dCksdD5LbSYmKEttPXQpKTp0Pm54P1FhKEptLHQpPlFhKEptLEttKSYmKEttPXQpOlFhKHQsS20pPlFhKEptLEttKSYmKEptPXQpfWVsc2UgWGEodCxuKTtpeD1lLG54PXR9ZnVuY3Rpb24gV2EoKXtReC5wb2ludD1WYX1mdW5jdGlvbiAkYSgpe3V4WzBdPUptLHV4WzFdPUttLFF4LnBvaW50PVhhLGl4PW51bGx9ZnVuY3Rpb24gWmEodCxuKXtpZihpeCl7dmFyIGU9dC1ueDtKeC5hZGQoUHgoZSk+MTgwP2UrKGU+MD8zNjA6LTM2MCk6ZSl9ZWxzZSBleD10LHJ4PW47WngucG9pbnQodCxuKSxWYSh0LG4pfWZ1bmN0aW9uIEdhKCl7WngubGluZVN0YXJ0KCl9ZnVuY3Rpb24gSmEoKXtaYShleCxyeCksWngubGluZUVuZCgpLFB4KEp4KT5UeCYmKEptPS0oS209MTgwKSksdXhbMF09Sm0sdXhbMV09S20saXg9bnVsbH1mdW5jdGlvbiBRYSh0LG4pe3JldHVybihuLT10KTwwP24rMzYwOm59ZnVuY3Rpb24gS2EodCxuKXtyZXR1cm4gdFswXS1uWzBdfWZ1bmN0aW9uIHRjKHQsbil7cmV0dXJuIHRbMF08PXRbMV0/dFswXTw9biYmbjw9dFsxXTpuPHRbMF18fHRbMV08bn1mdW5jdGlvbiBuYyh0LG4pe3QqPXp4LG4qPXp4O3ZhciBlPVJ4KG4pO2VjKGUqUngodCksZSpJeCh0KSxJeChuKSl9ZnVuY3Rpb24gZWModCxuLGUpeysrYXgsc3grPSh0LXN4KS9heCxmeCs9KG4tZngpL2F4LGx4Kz0oZS1seCkvYXh9ZnVuY3Rpb24gcmMoKXt0Yi5wb2ludD1pY31mdW5jdGlvbiBpYyh0LG4pe3QqPXp4LG4qPXp4O3ZhciBlPVJ4KG4pO3h4PWUqUngodCksYng9ZSpJeCh0KSx3eD1JeChuKSx0Yi5wb2ludD1vYyxlYyh4eCxieCx3eCl9ZnVuY3Rpb24gb2ModCxuKXt0Kj16eCxuKj16eDt2YXIgZT1SeChuKSxyPWUqUngodCksaT1lKkl4KHQpLG89SXgobiksdT1MeChCeCgodT1ieCpvLXd4KmkpKnUrKHU9d3gqci14eCpvKSp1Kyh1PXh4KmktYngqcikqdSkseHgqcitieCppK3d4Km8pO2N4Kz11LGh4Kz11Kih4eCsoeHg9cikpLHB4Kz11KihieCsoYng9aSkpLGR4Kz11Kih3eCsod3g9bykpLGVjKHh4LGJ4LHd4KX1mdW5jdGlvbiB1Yygpe3RiLnBvaW50PW5jfWZ1bmN0aW9uIGFjKCl7dGIucG9pbnQ9c2N9ZnVuY3Rpb24gY2MoKXtmYyhneCxteCksdGIucG9pbnQ9bmN9ZnVuY3Rpb24gc2ModCxuKXtneD10LG14PW4sdCo9engsbio9engsdGIucG9pbnQ9ZmM7dmFyIGU9Ungobik7eHg9ZSpSeCh0KSxieD1lKkl4KHQpLHd4PUl4KG4pLGVjKHh4LGJ4LHd4KX1mdW5jdGlvbiBmYyh0LG4pe3QqPXp4LG4qPXp4O3ZhciBlPVJ4KG4pLHI9ZSpSeCh0KSxpPWUqSXgodCksbz1JeChuKSx1PWJ4Km8td3gqaSxhPXd4KnIteHgqbyxjPXh4KmktYngqcixzPUJ4KHUqdSthKmErYypjKSxmPXh4KnIrYngqaSt3eCpvLGw9cyYmLVNhKGYpL3MsaD1MeChzLGYpO3Z4Kz1sKnUsX3grPWwqYSx5eCs9bCpjLGN4Kz1oLGh4Kz1oKih4eCsoeHg9cikpLHB4Kz1oKihieCsoYng9aSkpLGR4Kz1oKih3eCsod3g9bykpLGVjKHh4LGJ4LHd4KX1mdW5jdGlvbiBsYyh0LG4pe3JldHVyblt0Pmt4P3QtRXg6dDwta3g/dCtFeDp0LG5dfWZ1bmN0aW9uIGhjKHQsbixlKXtyZXR1cm4odCU9RXgpP258fGU/cmIoZGModCksdmMobixlKSk6ZGModCk6bnx8ZT92YyhuLGUpOmxjfWZ1bmN0aW9uIHBjKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVybiBuKz10LFtuPmt4P24tRXg6bjwta3g/bitFeDpuLGVdfX1mdW5jdGlvbiBkYyh0KXt2YXIgbj1wYyh0KTtyZXR1cm4gbi5pbnZlcnQ9cGMoLXQpLG59ZnVuY3Rpb24gdmModCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9UngobiksYT1SeCh0KSplLGM9SXgodCkqZSxzPUl4KG4pLGY9cypyK2EqaTtyZXR1cm5bTHgoYypvLWYqdSxhKnItcyppKSxBYShmKm8rYyp1KV19dmFyIHI9UngodCksaT1JeCh0KSxvPVJ4KG4pLHU9SXgobik7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9UngobiksYT1SeCh0KSplLGM9SXgodCkqZSxzPUl4KG4pLGY9cypvLWMqdTtyZXR1cm5bTHgoYypvK3MqdSxhKnIrZippKSxBYShmKnItYSppKV19LGV9ZnVuY3Rpb24gX2ModCxuLGUscixpLG8pe2lmKGUpe3ZhciB1PVJ4KG4pLGE9SXgobiksYz1yKmU7bnVsbD09aT8oaT1uK3IqRXgsbz1uLWMvMik6KGk9eWModSxpKSxvPXljKHUsbyksKHI+MD9pPG86aT5vKSYmKGkrPXIqRXgpKTtmb3IodmFyIHMsZj1pO3I+MD9mPm86ZjxvO2YtPWMpcz1PYShbdSwtYSpSeChmKSwtYSpJeChmKV0pLHQucG9pbnQoc1swXSxzWzFdKX19ZnVuY3Rpb24geWModCxuKXtuPUZhKG4pLG5bMF0tPXQsSGEobik7dmFyIGU9U2EoLW5bMV0pO3JldHVybigoLW5bMl08MD8tZTplKStFeC1UeCklRXh9ZnVuY3Rpb24gZ2ModCxuLGUscil7dGhpcy54PXQsdGhpcy56PW4sdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBtYyh0KXtpZihuPXQubGVuZ3RoKXtmb3IodmFyIG4sZSxyPTAsaT10WzBdOysrcjxuOylpLm49ZT10W3JdLGUucD1pLGk9ZTtpLm49ZT10WzBdLGUucD1pfX1mdW5jdGlvbiB4Yyh0LG4sZSxyKXtmdW5jdGlvbiBpKGksbyl7cmV0dXJuIHQ8PWkmJmk8PWUmJm48PW8mJm88PXJ9ZnVuY3Rpb24gbyhpLG8sYSxzKXt2YXIgZj0wLGw9MDtpZihudWxsPT1pfHwoZj11KGksYSkpIT09KGw9dShvLGEpKXx8YyhpLG8pPDBeYT4wKXtkbyBzLnBvaW50KDA9PT1mfHwzPT09Zj90OmUsZj4xP3I6bik7d2hpbGUoKGY9KGYrYSs0KSU0KSE9PWwpfWVsc2Ugcy5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIHUocixpKXtyZXR1cm4gUHgoclswXS10KTxUeD9pPjA/MDozOlB4KHJbMF0tZSk8VHg/aT4wPzI6MTpQeChyWzFdLW4pPFR4P2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBhKHQsbil7cmV0dXJuIGModC54LG4ueCl9ZnVuY3Rpb24gYyh0LG4pe3ZhciBlPXUodCwxKSxyPXUobiwxKTtyZXR1cm4gZSE9PXI/ZS1yOjA9PT1lP25bMV0tdFsxXToxPT09ZT90WzBdLW5bMF06Mj09PWU/dFsxXS1uWzFdOm5bMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24odSl7ZnVuY3Rpb24gYyh0LG4pe2kodCxuKSYmay5wb2ludCh0LG4pfWZ1bmN0aW9uIHMoKXtmb3IodmFyIG49MCxlPTAsaT1fLmxlbmd0aDtlPGk7KytlKWZvcih2YXIgbyx1LGE9X1tlXSxjPTEscz1hLmxlbmd0aCxmPWFbMF0sbD1mWzBdLGg9ZlsxXTtjPHM7KytjKW89bCx1PWgsZj1hW2NdLGw9ZlswXSxoPWZbMV0sdTw9cj9oPnImJihsLW8pKihyLXUpPihoLXUpKih0LW8pJiYrK246aDw9ciYmKGwtbykqKHItdSk8KGgtdSkqKHQtbykmJi0tbjtyZXR1cm4gbn1mdW5jdGlvbiBmKCl7az1TLHY9W10sXz1bXSxOPSEwfWZ1bmN0aW9uIGwoKXt2YXIgdD1zKCksbj1OJiZ0LGU9KHY9SnModikpLmxlbmd0aDsobnx8ZSkmJih1LnBvbHlnb25TdGFydCgpLG4mJih1LmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsdSksdS5saW5lRW5kKCkpLGUmJnhiKHYsYSx0LG8sdSksdS5wb2x5Z29uRW5kKCkpLGs9dSx2PV89eT1udWxsfWZ1bmN0aW9uIGgoKXtBLnBvaW50PWQsXyYmXy5wdXNoKHk9W10pLFQ9ITAsTT0hMSxiPXc9TmFOfWZ1bmN0aW9uIHAoKXt2JiYoZChnLG0pLHgmJk0mJlMucmVqb2luKCksdi5wdXNoKFMucmVzdWx0KCkpKSxBLnBvaW50PWMsTSYmay5saW5lRW5kKCl9ZnVuY3Rpb24gZChvLHUpe3ZhciBhPWkobyx1KTtpZihfJiZ5LnB1c2goW28sdV0pLFQpZz1vLG09dSx4PWEsVD0hMSxhJiYoay5saW5lU3RhcnQoKSxrLnBvaW50KG8sdSkpO2Vsc2UgaWYoYSYmTSlrLnBvaW50KG8sdSk7ZWxzZXt2YXIgYz1bYj1NYXRoLm1heCh3YixNYXRoLm1pbihiYixiKSksdz1NYXRoLm1heCh3YixNYXRoLm1pbihiYix3KSldLHM9W289TWF0aC5tYXgod2IsTWF0aC5taW4oYmIsbykpLHU9TWF0aC5tYXgod2IsTWF0aC5taW4oYmIsdSkpXTtnYihjLHMsdCxuLGUscik/KE18fChrLmxpbmVTdGFydCgpLGsucG9pbnQoY1swXSxjWzFdKSksay5wb2ludChzWzBdLHNbMV0pLGF8fGsubGluZUVuZCgpLE49ITEpOmEmJihrLmxpbmVTdGFydCgpLGsucG9pbnQobyx1KSxOPSExKX1iPW8sdz11LE09YX12YXIgdixfLHksZyxtLHgsYix3LE0sVCxOLGs9dSxTPXliKCksQT17cG9pbnQ6YyxsaW5lU3RhcnQ6aCxsaW5lRW5kOnAscG9seWdvblN0YXJ0OmYscG9seWdvbkVuZDpsfTtyZXR1cm4gQX19ZnVuY3Rpb24gYmMoKXtOYi5wb2ludD1NYyxOYi5saW5lRW5kPXdjfWZ1bmN0aW9uIHdjKCl7TmIucG9pbnQ9TmIubGluZUVuZD1DYX1mdW5jdGlvbiBNYyh0LG4pe3QqPXp4LG4qPXp4LGliPXQsb2I9SXgobiksdWI9UngobiksTmIucG9pbnQ9VGN9ZnVuY3Rpb24gVGModCxuKXt0Kj16eCxuKj16eDt2YXIgZT1JeChuKSxyPVJ4KG4pLGk9UHgodC1pYiksbz1SeChpKSx1PUl4KGkpLGE9cip1LGM9dWIqZS1vYipyKm8scz1vYiplK3ViKnIqbztUYi5hZGQoTHgoQngoYSphK2MqYykscykpLGliPXQsb2I9ZSx1Yj1yfWZ1bmN0aW9uIE5jKHQsbixlKXt2YXIgcj1Pcyh0LG4tVHgsZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24ga2ModCxuLGUpe3ZhciByPU9zKHQsbi1UeCxlKS5jb25jYXQobik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcChmdW5jdGlvbihuKXtyZXR1cm5bbix0XX0pfX1mdW5jdGlvbiBTYygpe2Z1bmN0aW9uIHQoKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpuKCl9fWZ1bmN0aW9uIG4oKXtyZXR1cm4gT3MoVXgoby9fKSpfLGksXykubWFwKGgpLmNvbmNhdChPcyhVeChzL3kpKnksYyx5KS5tYXAocCkpLmNvbmNhdChPcyhVeChyL2QpKmQsZSxkKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIFB4KHQlXyk+VHh9KS5tYXAoZikpLmNvbmNhdChPcyhVeChhL3YpKnYsdSx2KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIFB4KHQleSk+VHh9KS5tYXAobCkpfXZhciBlLHIsaSxvLHUsYSxjLHMsZixsLGgscCxkPTEwLHY9ZCxfPTkwLHk9MzYwLGc9Mi41O3JldHVybiB0LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOnR9fSl9LHQub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaChvKS5jb25jYXQocChjKS5zbGljZSgxKSxoKGkpLnJldmVyc2UoKS5zbGljZSgxKSxwKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sdC5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5leHRlbnRNYWpvcihuKS5leHRlbnRNaW5vcihuKTp0LmV4dGVudE1pbm9yKCl9LHQuZXh0ZW50TWFqb3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K25bMF1bMF0saT0rblsxXVswXSxzPStuWzBdWzFdLGM9K25bMV1bMV0sbz5pJiYobj1vLG89aSxpPW4pLHM+YyYmKG49cyxzPWMsYz1uKSx0LnByZWNpc2lvbihnKSk6W1tvLHNdLFtpLGNdXX0sdC5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rblswXVswXSxlPStuWzFdWzBdLGE9K25bMF1bMV0sdT0rblsxXVsxXSxyPmUmJihuPXIscj1lLGU9biksYT51JiYobj1hLGE9dSx1PW4pLHQucHJlY2lzaW9uKGcpKTpbW3IsYV0sW2UsdV1dfSx0LnN0ZXA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5zdGVwTWFqb3Iobikuc3RlcE1pbm9yKG4pOnQuc3RlcE1pbm9yKCl9LHQuc3RlcE1ham9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPStuWzBdLHk9K25bMV0sdCk6W18seV19LHQuc3RlcE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPStuWzBdLHY9K25bMV0sdCk6W2Qsdl19LHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuLGY9TmMoYSx1LDkwKSxsPWtjKHIsZSxnKSxoPU5jKHMsYyw5MCkscD1rYyhvLGksZyksdCk6Z30sdC5leHRlbnRNYWpvcihbWy0xODAsLTkwK1R4XSxbMTgwLDkwLVR4XV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAtVHhdLFsxODAsODArVHhdXSl9ZnVuY3Rpb24gQWMoKXtyZXR1cm4gU2MoKSgpfWZ1bmN0aW9uIEVjKCl7TGIucG9pbnQ9Q2N9ZnVuY3Rpb24gQ2ModCxuKXtMYi5wb2ludD16YyxhYj1zYj10LGNiPWZiPW59ZnVuY3Rpb24gemModCxuKXtxYi5hZGQoZmIqdC1zYipuKSxzYj10LGZiPW59ZnVuY3Rpb24gUGMoKXt6YyhhYixjYil9ZnVuY3Rpb24gcWModCxuKXt0PFJiJiYoUmI9dCksdD5EYiYmKERiPXQpLG48VWImJihVYj1uKSxuPk9iJiYoT2I9bil9ZnVuY3Rpb24gTGModCxuKXtJYis9dCxZYis9biwrK0JifWZ1bmN0aW9uIFJjKCl7WmIucG9pbnQ9VWN9ZnVuY3Rpb24gVWModCxuKXtaYi5wb2ludD1EYyxMYyhwYj10LGRiPW4pfWZ1bmN0aW9uIERjKHQsbil7dmFyIGU9dC1wYixyPW4tZGIsaT1CeChlKmUrcipyKTtqYis9aSoocGIrdCkvMixIYis9aSooZGIrbikvMixYYis9aSxMYyhwYj10LGRiPW4pfWZ1bmN0aW9uIE9jKCl7WmIucG9pbnQ9TGN9ZnVuY3Rpb24gRmMoKXtaYi5wb2ludD1ZY31mdW5jdGlvbiBJYygpe0JjKGxiLGhiKX1mdW5jdGlvbiBZYyh0LG4pe1piLnBvaW50PUJjLExjKGxiPXBiPXQsaGI9ZGI9bil9ZnVuY3Rpb24gQmModCxuKXt2YXIgZT10LXBiLHI9bi1kYixpPUJ4KGUqZStyKnIpO2piKz1pKihwYit0KS8yLEhiKz1pKihkYituKS8yLFhiKz1pLGk9ZGIqdC1wYipuLFZiKz1pKihwYit0KSxXYis9aSooZGIrbiksJGIrPTMqaSxMYyhwYj10LGRiPW4pfWZ1bmN0aW9uIGpjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBIYygpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBYYyh0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1mdW5jdGlvbiBWYyh0KXtyZXR1cm4gdC5sZW5ndGg+MX1mdW5jdGlvbiBXYyh0LG4pe3JldHVybigodD10LngpWzBdPDA/dFsxXS1TeC1UeDpTeC10WzFdKS0oKG49bi54KVswXTwwP25bMV0tU3gtVHg6U3gtblsxXSl9ZnVuY3Rpb24gJGModCl7dmFyIG4sZT1OYU4scj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksbj0xfSxwb2ludDpmdW5jdGlvbihvLHUpe3ZhciBhPW8+MD9reDota3gsYz1QeChvLWUpO1B4KGMta3gpPFR4Pyh0LnBvaW50KGUscj0ocit1KS8yPjA/U3g6LVN4KSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KGEsciksdC5wb2ludChvLHIpLG49MCk6aSE9PWEmJmM+PWt4JiYoUHgoZS1pKTxUeCYmKGUtPWkqVHgpLFB4KG8tYSk8VHgmJihvLT1hKlR4KSxyPVpjKGUscixvLHUpLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQoYSxyKSxuPTApLHQucG9pbnQoZT1vLHI9dSksaT1hfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksZT1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1ufX19ZnVuY3Rpb24gWmModCxuLGUscil7dmFyIGksbyx1PUl4KHQtZSk7cmV0dXJuIFB4KHUpPlR4P3F4KChJeChuKSoobz1SeChyKSkqSXgoZSktSXgocikqKGk9UngobikpKkl4KHQpKS8oaSpvKnUpKToobityKS8yfWZ1bmN0aW9uIEdjKHQsbixlLHIpe3ZhciBpO2lmKG51bGw9PXQpaT1lKlN4LHIucG9pbnQoLWt4LGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KGt4LGkpLHIucG9pbnQoa3gsMCksci5wb2ludChreCwtaSksci5wb2ludCgwLC1pKSxyLnBvaW50KC1reCwtaSksci5wb2ludCgta3gsMCksci5wb2ludCgta3gsaSk7ZWxzZSBpZihQeCh0WzBdLW5bMF0pPlR4KXt2YXIgbz10WzBdPG5bMF0/a3g6LWt4O2k9ZSpvLzIsci5wb2ludCgtbyxpKSxyLnBvaW50KDAsaSksci5wb2ludChvLGkpfWVsc2Ugci5wb2ludChuWzBdLG5bMV0pfWZ1bmN0aW9uIEpjKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1uZXcgUWM7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdO3JldHVybiBlLnN0cmVhbT1uLGV9fWZ1bmN0aW9uIFFjKCl7fWZ1bmN0aW9uIEtjKHQsbixlKXt2YXIgcj1uWzFdWzBdLW5bMF1bMF0saT1uWzFdWzFdLW5bMF1bMV0sbz10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3Quc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG51bGwhPW8mJnQuY2xpcEV4dGVudChudWxsKSxWeChlLHQuc3RyZWFtKEZiKSk7dmFyIHU9RmIucmVzdWx0KCksYT1NYXRoLm1pbihyLyh1WzFdWzBdLXVbMF1bMF0pLGkvKHVbMV1bMV0tdVswXVsxXSkpLGM9K25bMF1bMF0rKHItYSoodVsxXVswXSt1WzBdWzBdKSkvMixzPStuWzBdWzFdKyhpLWEqKHVbMV1bMV0rdVswXVsxXSkpLzI7cmV0dXJuIG51bGwhPW8mJnQuY2xpcEV4dGVudChvKSx0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW2Msc10pfWZ1bmN0aW9uIHRzKHQsbixlKXtyZXR1cm4gS2ModCxbWzAsMF0sbl0sZSl9ZnVuY3Rpb24gbnModCl7cmV0dXJuIEpjKHtwb2ludDpmdW5jdGlvbihuLGUpe249dChuLGUpLHRoaXMuc3RyZWFtLnBvaW50KG5bMF0sblsxXSl9fSl9ZnVuY3Rpb24gZXModCxuKXtmdW5jdGlvbiBlKHIsaSxvLHUsYSxjLHMsZixsLGgscCxkLHYsXyl7dmFyIHk9cy1yLGc9Zi1pLG09eSp5K2cqZztpZihtPjQqbiYmdi0tKXt2YXIgeD11K2gsYj1hK3Asdz1jK2QsTT1CeCh4KngrYipiK3cqdyksVD1BYSh3Lz1NKSxOPVB4KFB4KHcpLTEpPFR4fHxQeChvLWwpPFR4PyhvK2wpLzI6THgoYix4KSxrPXQoTixUKSxTPWtbMF0sQT1rWzFdLEU9Uy1yLEM9QS1pLHo9ZypFLXkqQzsoeip6L20+bnx8UHgoKHkqRStnKkMpL20tLjUpPi4zfHx1KmgrYSpwK2MqZDxpdykmJihlKHIsaSxvLHUsYSxjLFMsQSxOLHgvPU0sYi89TSx3LHYsXyksXy5wb2ludChTLEEpLGUoUyxBLE4seCxiLHcscyxmLGwsaCxwLGQsdixfKSl9fXJldHVybiBmdW5jdGlvbihuKXtmdW5jdGlvbiByKGUscil7ZT10KGUsciksbi5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGkoKXt5PU5hTix3LnBvaW50PW8sbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBvKHIsaSl7dmFyIG89RmEoW3IsaV0pLHU9dChyLGkpO2UoeSxnLF8sbSx4LGIseT11WzBdLGc9dVsxXSxfPXIsbT1vWzBdLHg9b1sxXSxiPW9bMl0scncsbiksbi5wb2ludCh5LGcpfWZ1bmN0aW9uIHUoKXt3LnBvaW50PXIsbi5saW5lRW5kKCl9ZnVuY3Rpb24gYSgpe2koKSx3LnBvaW50PWMsdy5saW5lRW5kPXN9ZnVuY3Rpb24gYyh0LG4pe28oZj10LG4pLGw9eSxoPWcscD1tLGQ9eCx2PWIsdy5wb2ludD1vfWZ1bmN0aW9uIHMoKXtlKHksZyxfLG0seCxiLGwsaCxmLHAsZCx2LHJ3LG4pLHcubGluZUVuZD11LHUoKX12YXIgZixsLGgscCxkLHYsXyx5LGcsbSx4LGIsdz17cG9pbnQ6cixsaW5lU3RhcnQ6aSxsaW5lRW5kOnUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSx3LmxpbmVTdGFydD1hfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksdy5saW5lU3RhcnQ9aX19O3JldHVybiB3fX1mdW5jdGlvbiBycyh0KXtyZXR1cm4gaXMoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKCl9ZnVuY3Rpb24gaXModCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdD1mKHRbMF0qengsdFsxXSp6eCksW3RbMF0qXythLGMtdFsxXSpfXX1mdW5jdGlvbiBlKHQpe3JldHVybiB0PWYuaW52ZXJ0KCh0WzBdLWEpL18sKGMtdFsxXSkvXyksdCYmW3RbMF0qQ3gsdFsxXSpDeF19ZnVuY3Rpb24gcih0LG4pe3JldHVybiB0PXUodCxuKSxbdFswXSpfK2EsYy10WzFdKl9dfWZ1bmN0aW9uIGkoKXtmPXJiKHM9aGMoYix3LE0pLHUpO3ZhciB0PXUobSx4KTtyZXR1cm4gYT15LXRbMF0qXyxjPWcrdFsxXSpfLG8oKX1mdW5jdGlvbiBvKCl7cmV0dXJuIGQ9dj1udWxsLG59dmFyIHUsYSxjLHMsZixsLGgscCxkLHYsXz0xNTAseT00ODAsZz0yNTAsbT0wLHg9MCxiPTAsdz0wLE09MCxUPW51bGwsTj10dyxrPW51bGwsUz16YixBPS41LEU9b3cocixBKTtyZXR1cm4gbi5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGQmJnY9PT10P2Q6ZD11dyhOKHMsRShTKHY9dCkpKSl9LG4uY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhOPSt0P253KFQ9dCp6eCw2Knp4KTooVD1udWxsLHR3KSxvKCkpOlQqQ3h9LG4uY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1udWxsPT10PyhrPWw9aD1wPW51bGwsemIpOnhjKGs9K3RbMF1bMF0sbD0rdFswXVsxXSxoPSt0WzFdWzBdLHA9K3RbMV1bMV0pLG8oKSk6bnVsbD09az9udWxsOltbayxsXSxbaCxwXV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89K3QsaSgpKTpffSxuLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rdFswXSxnPSt0WzFdLGkoKSk6W3ksZ119LG4uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXRbMF0lMzYwKnp4LHg9dFsxXSUzNjAqengsaSgpKTpbbSpDeCx4KkN4XX0sbi5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9dFswXSUzNjAqengsdz10WzFdJTM2MCp6eCxNPXQubGVuZ3RoPjI/dFsyXSUzNjAqeng6MCxpKCkpOltiKkN4LHcqQ3gsTSpDeF19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW93KHIsQT10KnQpLG8oKSk6QngoQSl9LG4uZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEtjKG4sdCxlKX0sbi5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRzKG4sdCxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gdT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmludmVydD11LmludmVydCYmZSxpKCl9fWZ1bmN0aW9uIG9zKHQpe3ZhciBuPTAsZT1reC8zLHI9aXModCksaT1yKG4sZSk7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Iobj10WzBdKnp4LGU9dFsxXSp6eCk6W24qQ3gsZSpDeF19LGl9ZnVuY3Rpb24gdXModCl7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsSXgobikvZV19dmFyIGU9UngodCk7cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSxBYShuKmUpXX0sbn1mdW5jdGlvbiBhcyh0LG4pe2Z1bmN0aW9uIGUodCxuKXt2YXIgZT1CeChvLTIqaSpJeChuKSkvaTtyZXR1cm5bZSpJeCh0Kj1pKSx1LWUqUngodCldfXZhciByPUl4KHQpLGk9KHIrSXgobikpLzI7aWYoUHgoaSk8VHgpcmV0dXJuIHVzKHQpO3ZhciBvPTErciooMippLXIpLHU9QngobykvaTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT11LW47cmV0dXJuW0x4KHQsUHgoZSkpL2kqWXgoZSksQWEoKG8tKHQqdCtlKmUpKmkqaSkvKDIqaSkpXX0sZX1mdW5jdGlvbiBjcyh0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIGk9LTE7KytpPG47KXRbaV0ucG9pbnQoZSxyKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPS0xOysrZTxuOyl0W2VdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0ucG9seWdvbkVuZCgpfX19ZnVuY3Rpb24gc3ModCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9UngobiksaT1SeChlKSxvPXQocippKTtyZXR1cm5bbyppKkl4KG4pLG8qSXgoZSldfX1mdW5jdGlvbiBmcyh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1CeChuKm4rZSplKSxpPXQociksbz1JeChpKSx1PVJ4KGkpO3JldHVybltMeChuKm8scip1KSxBYShyJiZlKm8vcildfX1mdW5jdGlvbiBscyh0LG4pe3JldHVyblt0LE94KGp4KChTeCtuKS8yKSldfWZ1bmN0aW9uIGhzKHQpe3ZhciBuLGU9cnModCkscj1lLnNjYWxlLGk9ZS50cmFuc2xhdGUsbz1lLmNsaXBFeHRlbnQ7cmV0dXJuIGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksbiYmZS5jbGlwRXh0ZW50KG51bGwpLGUpOnIoKX0sZS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksbiYmZS5jbGlwRXh0ZW50KG51bGwpLGUpOmkoKX0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuP251bGw6bygpO2lmKG49bnVsbD09dCl7dmFyIHU9a3gqcigpLGE9aSgpO3Q9W1thWzBdLXUsYVsxXS11XSxbYVswXSt1LGFbMV0rdV1dfXJldHVybiBvKHQpLGV9LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBwcyh0KXtyZXR1cm4gangoKFN4K3QpLzIpfWZ1bmN0aW9uIGRzKHQsbil7ZnVuY3Rpb24gZSh0LG4pe28+MD9uPC1TeCtUeCYmKG49LVN4K1R4KTpuPlN4LVR4JiYobj1TeC1UeCk7dmFyIGU9by9GeChwcyhuKSxpKTtyZXR1cm5bZSpJeChpKnQpLG8tZSpSeChpKnQpXX12YXIgcj1SeCh0KSxpPXQ9PT1uP0l4KHQpOk94KHIvUngobikpL094KHBzKG4pL3BzKHQpKSxvPXIqRngocHModCksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1vLW4scj1ZeChpKSpCeCh0KnQrZSplKTtyZXR1cm5bTHgodCxQeChlKSkvaSpZeChlKSwyKnF4KEZ4KG8vciwxL2kpKS1TeF19LGUpOmxzfWZ1bmN0aW9uIHZzKHQsbil7cmV0dXJuW3Qsbl19ZnVuY3Rpb24gX3ModCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9by1uLHI9aSp0O3JldHVybltlKkl4KHIpLG8tZSpSeChyKV19dmFyIHI9UngodCksaT10PT09bj9JeCh0KTooci1SeChuKSkvKG4tdCksbz1yL2krdDtyZXR1cm4gUHgoaSk8VHg/dnM6KGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uO3JldHVybltMeCh0LFB4KGUpKS9pKll4KGUpLG8tWXgoaSkqQngodCp0K2UqZSldfSxlKX1mdW5jdGlvbiB5cyh0LG4pe3ZhciBlPVJ4KG4pLHI9UngodCkqZTtyZXR1cm5bZSpJeCh0KS9yLEl4KG4pL3JdfWZ1bmN0aW9uIGdzKHQsbixlKXtyZXR1cm4gMT09PXQmJjA9PT1uJiYwPT09ZT96YjpKYyh7cG9pbnQ6ZnVuY3Rpb24ocixpKXt0aGlzLnN0cmVhbS5wb2ludChyKnQrbixpKnQrZSl9fSl9ZnVuY3Rpb24gbXModCxuKXtyZXR1cm5bUngobikqSXgodCksSXgobildfWZ1bmN0aW9uIHhzKHQsbil7dmFyIGU9Ungobikscj0xK1J4KHQpKmU7cmV0dXJuW2UqSXgodCkvcixJeChuKS9yXX1mdW5jdGlvbiBicyh0LG4pe3JldHVybltPeChqeCgoU3grbikvMikpLC10XX12YXIgd3M9IjQuMy4wIixNcz1mdW5jdGlvbih0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn0sVHM9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQ9bih0KSkse2xlZnQ6ZnVuY3Rpb24obixlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPW4ubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QobltvXSxlKTwwP3I9bysxOmk9b31yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24obixlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPW4ubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QobltvXSxlKT4wP2k9bzpyPW8rMX1yZXR1cm4gcn19fSxOcz1UcyhNcyksa3M9TnMucmlnaHQsU3M9TnMubGVmdCxBcz1mdW5jdGlvbih0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn0sRXM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0sQ3M9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9dC5sZW5ndGgsbz0wLHU9MCxhPS0xLGM9MDtpZihudWxsPT1uKWZvcig7KythPGk7KWlzTmFOKGU9RXModFthXSkpfHwocj1lLW8sbys9ci8rK2MsdSs9ciooZS1vKSk7ZWxzZSBmb3IoOysrYTxpOylpc05hTihlPUVzKG4odFthXSxhLHQpKSl8fChyPWUtbyxvKz1yLysrYyx1Kz1yKihlLW8pKTtpZihjPjEpcmV0dXJuIHUvKGMtMSl9LHpzPWZ1bmN0aW9uKHQsbil7dmFyIGU9Q3ModCxuKTtyZXR1cm4gZT9NYXRoLnNxcnQoZSk6ZX0sUHM9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz0tMSx1PXQubGVuZ3RoO2lmKG51bGw9PW4pe2Zvcig7KytvPHU7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKXtlPWk9cjticmVha31mb3IoOysrbzx1OyludWxsIT0ocj10W29dKSYmKGU+ciYmKGU9ciksaTxyJiYoaT1yKSl9ZWxzZXtmb3IoOysrbzx1OylpZihudWxsIT0ocj1uKHRbb10sbyx0KSkmJnI+PXIpe2U9aT1yO2JyZWFrfWZvcig7KytvPHU7KW51bGwhPShyPW4odFtvXSxvLHQpKSYmKGU+ciYmKGU9ciksaTxyJiYoaT1yKSl9cmV0dXJuW2UsaV19LHFzPUFycmF5LnByb3RvdHlwZSxMcz1xcy5zbGljZSxScz1xcy5tYXAsVXM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxEcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sT3M9ZnVuY3Rpb24odCxuLGUpe3Q9K3Qsbj0rbixlPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KG49dCx0PTAsMSk6aTwzPzE6K2U7Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgobi10KS9lKSksbz1uZXcgQXJyYXkoaSk7KytyPGk7KW9bcl09dCtyKmU7cmV0dXJuIG99LEZzPU1hdGguc3FydCg1MCksSXM9TWF0aC5zcXJ0KDEwKSxZcz1NYXRoLnNxcnQoMiksQnM9ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUodCxuLHIpO3JldHVybiBPcyhNYXRoLmNlaWwodC9pKSppLE1hdGguZmxvb3Iobi9pKSppK2kvMixpKX0sanM9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LEhzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgaSxvLHU9dC5sZW5ndGgsYT1uZXcgQXJyYXkodSk7Zm9yKGk9MDtpPHU7KytpKWFbaV09bih0W2ldLGksdCk7dmFyIGM9ZShhKSxzPWNbMF0sZj1jWzFdLGw9cihhLHMsZik7QXJyYXkuaXNBcnJheShsKXx8KGw9QnMocyxmLGwpKTtmb3IodmFyIGg9bC5sZW5ndGg7bFswXTw9czspbC5zaGlmdCgpLC0taDtmb3IoO2xbaC0xXT49ZjspbC5wb3AoKSwtLWg7dmFyIHAsZD1uZXcgQXJyYXkoaCsxKTtmb3IoaT0wO2k8PWg7KytpKXA9ZFtpXT1bXSxwLngwPWk+MD9sW2ktMV06cyxwLngxPWk8aD9sW2ldOmY7Zm9yKGk9MDtpPHU7KytpKW89YVtpXSxzPD1vJiZvPD1mJiZkW2tzKGwsbywwLGgpXS5wdXNoKHRbaV0pO3JldHVybiBkfXZhciBuPURzLGU9UHMscj1qcztyZXR1cm4gdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlVzKGUpLHQpOm59LHQuZG9tYWluPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246VXMoW25bMF0sblsxXV0pLHQpOmV9LHQudGhyZXNob2xkcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlVzKEFycmF5LmlzQXJyYXkobik/THMuY2FsbChuKTpuKSx0KTpyfSx0fSxYcz1mdW5jdGlvbih0LG4sZSl7aWYobnVsbD09ZSYmKGU9RXMpLHI9dC5sZW5ndGgpe2lmKChuPStuKTw9MHx8cjwyKXJldHVybitlKHRbMF0sMCx0KTtpZihuPj0xKXJldHVybitlKHRbci0xXSxyLTEsdCk7dmFyIHIsaT0oci0xKSpuLG89TWF0aC5mbG9vcihpKSx1PStlKHRbb10sbyx0KSxhPStlKHRbbysxXSxvKzEsdCk7cmV0dXJuIHUrKGEtdSkqKGktbyl9fSxWcz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9UnMuY2FsbCh0LEVzKS5zb3J0KE1zKSxNYXRoLmNlaWwoKGUtbikvKDIqKFhzKHQsLjc1KS1Ycyh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LFdzPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5jZWlsKChlLW4pLygzLjUqenModCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sJHM9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKXtmb3IoOysraTxvOylpZihudWxsIT0ocj10W2ldKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShyPXRbaV0pJiZyPmUmJihlPXIpfWVsc2V7Zm9yKDsrK2k8bzspaWYobnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPmUmJihlPXIpfXJldHVybiBlfSxacz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9MCxpPXQubGVuZ3RoLG89LTEsdT1pO2lmKG51bGw9PW4pZm9yKDsrK288aTspaXNOYU4oZT1Fcyh0W29dKSk/LS11OnIrPWU7ZWxzZSBmb3IoOysrbzxpOylpc05hTihlPUVzKG4odFtvXSxvLHQpKSk/LS11OnIrPWU7aWYodSlyZXR1cm4gci91fSxHcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9W10saT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PW4pZm9yKDsrK288aTspaXNOYU4oZT1Fcyh0W29dKSl8fHIucHVzaChlKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKGU9RXMobih0W29dLG8sdCkpKXx8ci5wdXNoKGUpO3JldHVybiBYcyhyLnNvcnQoTXMpLC41KX0sSnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscixpPXQubGVuZ3RoLG89LTEsdT0wOysrbzxpOyl1Kz10W29dLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkodSk7LS1pPj0wOylmb3Iocj10W2ldLG49ci5sZW5ndGg7LS1uPj0wOyllWy0tdV09cltuXTtyZXR1cm4gZX0sUXM9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKXtmb3IoOysraTxvOylpZihudWxsIT0ocj10W2ldKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShyPXRbaV0pJiZlPnImJihlPXIpfWVsc2V7Zm9yKDsrK2k8bzspaWYobnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9bih0W2ldLGksdCkpJiZlPnImJihlPXIpfXJldHVybiBlfSxLcz1mdW5jdGlvbih0KXtmb3IodmFyIG49MCxlPXQubGVuZ3RoLTEscj10WzBdLGk9bmV3IEFycmF5KGU8MD8wOmUpO248ZTspaVtuXT1bcixyPXRbKytuXV07cmV0dXJuIGl9LHRmPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT10W25bZV1dO3JldHVybiByfSxuZj1mdW5jdGlvbih0LG4pe2lmKGU9dC5sZW5ndGgpe3ZhciBlLHIsaT0wLG89MCx1PXRbb107Zm9yKG58fChuPU1zKTsrK2k8ZTspKG4ocj10W2ldLHUpPDB8fDAhPT1uKHUsdSkpJiYodT1yLG89aSk7cmV0dXJuIDA9PT1uKHUsdSk/bzp2b2lkIDB9fSxlZj1mdW5jdGlvbih0LG4sZSl7Zm9yKHZhciByLGksbz0obnVsbD09ZT90Lmxlbmd0aDplKS0obj1udWxsPT1uPzA6K24pO287KWk9TWF0aC5yYW5kb20oKSpvLS18MCxyPXRbbytuXSx0W28rbl09dFtpK25dLHRbaStuXT1yO3JldHVybiB0fSxyZj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9MCxpPXQubGVuZ3RoLG89LTE7aWYobnVsbD09bilmb3IoOysrbzxpOykoZT0rdFtvXSkmJihyKz1lKTtlbHNlIGZvcig7KytvPGk7KShlPStuKHRbb10sbyx0KSkmJihyKz1lKTtyZXR1cm4gcn0sb2Y9ZnVuY3Rpb24odCl7aWYoIShvPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIG49LTEsZT1Rcyh0LHIpLGk9bmV3IEFycmF5KGUpOysrbjxlOylmb3IodmFyIG8sdT0tMSxhPWlbbl09bmV3IEFycmF5KG8pOysrdTxvOylhW3VdPXRbdV1bbl07cmV0dXJuIGl9LHVmPWZ1bmN0aW9uKCl7cmV0dXJuIG9mKGFyZ3VtZW50cyl9LGFmPSIkIjtpLnByb3RvdHlwZT1vLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIGFmK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2FmK3RdfSxzZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdGhpc1thZit0XT1uLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgbj1hZit0O3JldHVybiBuIGluIHRoaXMmJmRlbGV0ZSB0aGlzW25dfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1hZiYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09YWYmJnQucHVzaChuLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBuIGluIHRoaXMpblswXT09PWFmJiZ0LnB1c2godGhpc1tuXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09YWYmJnQucHVzaCh7a2V5Om4uc2xpY2UoMSksdmFsdWU6dGhpc1tuXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09YWYmJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZih0WzBdPT09YWYpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PWFmJiZ0KHRoaXNbbl0sbi5zbGljZSgxKSx0aGlzKX19O3ZhciBjZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobixpLHUsYSl7aWYoaT49Zi5sZW5ndGgpcmV0dXJuIG51bGwhPXI/cihuKTpudWxsIT1lP24uc29ydChlKTpuO2Zvcih2YXIgYyxzLGwsaD0tMSxwPW4ubGVuZ3RoLGQ9ZltpKytdLHY9bygpLF89dSgpOysraDxwOykobD12LmdldChjPWQocz1uW2hdKSsiIikpP2wucHVzaChzKTp2LnNldChjLFtzXSk7cmV0dXJuIHYuZWFjaChmdW5jdGlvbihuLGUpe2EoXyxlLHQobixpLHUsYSkpfSksX31mdW5jdGlvbiBuKHQsZSl7aWYoKytlPmYubGVuZ3RoKXJldHVybiB0O3ZhciBpLG89bFtlLTFdO3JldHVybiBudWxsIT1yJiZlPj1mLmxlbmd0aD9pPXQuZW50cmllcygpOihpPVtdLHQuZWFjaChmdW5jdGlvbih0LHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOm4odCxlKX0pfSkpLG51bGwhPW8/aS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIG8odC5rZXksbi5rZXkpfSk6aX12YXIgZSxyLGksZj1bXSxsPVtdO3JldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24obil7cmV0dXJuIHQobiwwLHUsYSl9LG1hcDpmdW5jdGlvbihuKXtyZXR1cm4gdChuLDAsYyxzKX0sZW50cmllczpmdW5jdGlvbihlKXtyZXR1cm4gbih0KGUsMCxjLHMpLDApfSxrZXk6ZnVuY3Rpb24odCl7cmV0dXJuIGYucHVzaCh0KSxpfSxzb3J0S2V5czpmdW5jdGlvbih0KXtyZXR1cm4gbFtmLmxlbmd0aC0xXT10LGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxpfSxyb2xsdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxpfX19LHNmPW8ucHJvdG90eXBlO2YucHJvdG90eXBlPWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmLGhhczpzZi5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0Kz0iIix0aGlzW2FmK3RdPXQsdGhpc30scmVtb3ZlOnNmLnJlbW92ZSxjbGVhcjpzZi5jbGVhcix2YWx1ZXM6c2Yua2V5cyxzaXplOnNmLnNpemUsZW1wdHk6c2YuZW1wdHksZWFjaDpzZi5lYWNofTt2YXIgZmY9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKGUpO3JldHVybiBufSxsZj1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2godFtlXSk7cmV0dXJuIG59LGhmPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaCh7a2V5OmUsdmFsdWU6dFtlXX0pO3JldHVybiBufSxwZj1mdW5jdGlvbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpKm4rdH19LGRmPWZ1bmN0aW9uKHQsbil7dmFyIGUscjtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgaTtpZihudWxsIT1lKWk9ZSxlPW51bGw7ZWxzZSBkbyBlPTIqTWF0aC5yYW5kb20oKS0xLGk9MipNYXRoLnJhbmRvbSgpLTEscj1lKmUraSppO3doaWxlKCFyfHxyPjEpO3JldHVybiB0K24qaSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cocikvcil9fSx2Zj1mdW5jdGlvbigpe3ZhciB0PWRmLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19LF9mPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj0wLGU9MDtlPHQ7KytlKW4rPU1hdGgucmFuZG9tKCk7cmV0dXJuIG59fSx5Zj1mdW5jdGlvbih0KXt2YXIgbj1fZih0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fSxnZj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1NYXRoLnJhbmRvbSgpKS90fX0sbWY9Myx4Zj1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIE1hdGgucG93KHQsbil9cmV0dXJuIG49K24sZS5leHBvbmVudD10LGV9KG1mKSxiZj1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LG4pfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfShtZiksd2Y9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxuKToyLU1hdGgucG93KDItdCxuKSkvMn1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0obWYpLE1mPU1hdGguUEksVGY9TWYvMixOZj00LzExLGtmPTYvMTEsU2Y9OC8xMSxBZj0uNzUsRWY9OS8xMSxDZj0xMC8xMSx6Zj0uOTM3NSxQZj0yMS8yMixxZj02My82NCxMZj0xL05mL05mLFJmPTEuNzAxNTgsVWY9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0KnQqKChuKzEpKnQtbil9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfShSZiksRGY9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybi0tdCp0KigobisxKSp0K24pKzF9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfShSZiksT2Y9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybigodCo9Mik8MT90KnQqKChuKzEpKnQtbik6KHQtPTIpKnQqKChuKzEpKnQrbikrMikvMn1yZXR1cm4gbj0rbixlLm92ZXJzaG9vdD10LGV9KFJmKSxGZj0yKk1hdGguUEksSWY9MSxZZj0uMyxCZj1mdW5jdGlvbiB0KG4sZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbipNYXRoLnBvdygyLDEwKi0tdCkqTWF0aC5zaW4oKGktdCkvZSl9dmFyIGk9TWF0aC5hc2luKDEvKG49TWF0aC5tYXgoMSxuKSkpKihlLz1GZik7cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4sZSpGZil9LHIucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSl9LHJ9KElmLFlmKSxqZj1mdW5jdGlvbiB0KG4sZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gMS1uKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQraSkvZSl9dmFyIGk9TWF0aC5hc2luKDEvKG49TWF0aC5tYXgoMSxuKSkpKihlLz1GZik7cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4sZSpGZil9LHIucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSl9LHJ9KElmLFlmKSxIZj1mdW5jdGlvbiB0KG4sZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4oKHQ9Mip0LTEpPDA/bipNYXRoLnBvdygyLDEwKnQpKk1hdGguc2luKChpLXQpL2UpOjItbipNYXRoLnBvdygyLC0xMCp0KSpNYXRoLnNpbigoaSt0KS9lKSkvMn12YXIgaT1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPUZmKTtyZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKkZmKX0sci5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0scn0oSWYsWWYpLFhmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sbz0wOysrZTxyOyluPWksaT10W2VdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn0sVmY9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj0tMSxpPXQubGVuZ3RoLG89MCx1PTAsYT10W2ktMV0sYz0wOysrcjxpOyluPWEsYT10W3JdLGMrPWU9blswXSphWzFdLWFbMF0qblsxXSxvKz0oblswXSthWzBdKSplLHUrPShuWzFdK2FbMV0pKmU7cmV0dXJuIGMqPTMsW28vYyx1L2NdfSxXZj1mdW5jdGlvbih0LG4sZSl7cmV0dXJuKG5bMF0tdFswXSkqKGVbMV0tdFsxXSktKG5bMV0tdFsxXSkqKGVbMF0tdFswXSl9LCRmPWZ1bmN0aW9uKHQpe2lmKChlPXQubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciBuLGUscj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkoZSk7Zm9yKG49MDtuPGU7KytuKXJbbl09Wyt0W25dWzBdLCt0W25dWzFdLG5dO2ZvcihyLnNvcnQoeiksbj0wO248ZTsrK24paVtuXT1bcltuXVswXSwtcltuXVsxXV07dmFyIG89UChyKSx1PVAoaSksYT11WzBdPT09b1swXSxjPXVbdS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLHM9W107Zm9yKG49by5sZW5ndGgtMTtuPj0wOy0tbilzLnB1c2godFtyW29bbl1dWzJdXSk7Zm9yKG49K2E7bjx1Lmxlbmd0aC1jOysrbilzLnB1c2godFtyW3Vbbl1dWzJdXSk7cmV0dXJuIHN9LFpmPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHIsaT10Lmxlbmd0aCxvPXRbaS0xXSx1PW5bMF0sYT1uWzFdLGM9b1swXSxzPW9bMV0sZj0hMSxsPTA7bDxpOysrbClvPXRbbF0sZT1vWzBdLHI9b1sxXSxyPmEhPXM+YSYmdTwoYy1lKSooYS1yKS8ocy1yKStlJiYoZj0hZiksYz1lLHM9cjtyZXR1cm4gZn0sR2Y9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj0tMSxpPXQubGVuZ3RoLG89dFtpLTFdLHU9b1swXSxhPW9bMV0sYz0wOysrcjxpOyluPXUsZT1hLG89dFtyXSx1PW9bMF0sYT1vWzFdLG4tPXUsZS09YSxjKz1NYXRoLnNxcnQobipuK2UqZSk7cmV0dXJuIGN9LEpmPU1hdGguUEksUWY9MipKZixLZj0xZS02LHRsPVFmLUtmO3EucHJvdG90eXBlPUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpxLG1vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuXy5wdXNoKCJNIix0aGlzLl94MD10aGlzLl94MT0rdCwiLCIsdGhpcy5feTA9dGhpcy5feTE9K24pfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8ucHVzaCgiWiIpKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fLnB1c2goIkwiLHRoaXMuX3gxPSt0LCIsIix0aGlzLl95MT0rbil9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxuLGUscil7dGhpcy5fLnB1c2goIlEiLCt0LCIsIiwrbiwiLCIsdGhpcy5feDE9K2UsIiwiLHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fLnB1c2goIkMiLCt0LCIsIiwrbiwiLCIsK2UsIiwiLCtyLCIsIix0aGlzLl94MT0raSwiLCIsdGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LG4sZSxyLGkpe3Q9K3Qsbj0rbixlPStlLHI9K3IsaT0raTt2YXIgbz10aGlzLl94MSx1PXRoaXMuX3kxLGE9ZS10LGM9ci1uLHM9by10LGY9dS1uLGw9cypzK2YqZjtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXy5wdXNoKCJNIix0aGlzLl94MT10LCIsIix0aGlzLl95MT1uKTtlbHNlIGlmKGw+S2YpaWYoTWF0aC5hYnMoZiphLWMqcyk+S2YmJmkpe3ZhciBoPWUtbyxwPXItdSxkPWEqYStjKmMsdj1oKmgrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGwpLGc9aSpNYXRoLnRhbigoSmYtTWF0aC5hY29zKChkK2wtdikvKDIqXyp5KSkpLzIpLG09Zy95LHg9Zy9fO01hdGguYWJzKG0tMSk+S2YmJnRoaXMuXy5wdXNoKCJMIix0K20qcywiLCIsbittKmYpLHRoaXMuXy5wdXNoKCJBIixpLCIsIixpLCIsMCwwLCIsKyhmKmg+cypwKSwiLCIsdGhpcy5feDE9dCt4KmEsIiwiLHRoaXMuX3kxPW4reCpjKX1lbHNlIHRoaXMuXy5wdXNoKCJMIix0aGlzLl94MT10LCIsIix0aGlzLl95MT1uKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0PSt0LG49K24sZT0rZTt2YXIgdT1lKk1hdGguY29zKHIpLGE9ZSpNYXRoLnNpbihyKSxjPXQrdSxzPW4rYSxmPTFebyxsPW8/ci1pOmktcjtpZihlPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrZSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXy5wdXNoKCJNIixjLCIsIixzKTooTWF0aC5hYnModGhpcy5feDEtYyk+S2Z8fE1hdGguYWJzKHRoaXMuX3kxLXMpPktmKSYmdGhpcy5fLnB1c2goIkwiLGMsIiwiLHMpLGUmJihsPnRsP3RoaXMuXy5wdXNoKCJBIixlLCIsIixlLCIsMCwxLCIsZiwiLCIsdC11LCIsIixuLWEsIkEiLGUsIiwiLGUsIiwwLDEsIixmLCIsIix0aGlzLl94MT1jLCIsIix0aGlzLl95MT1zKToobDwwJiYobD1sJVFmK1FmKSx0aGlzLl8ucHVzaCgiQSIsZSwiLCIsZSwiLDAsIiwrKGw+PUpmKSwiLCIsZiwiLCIsdGhpcy5feDE9dCtlKk1hdGguY29zKGkpLCIsIix0aGlzLl95MT1uK2UqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxuLGUscil7dGhpcy5fLnB1c2goIk0iLHRoaXMuX3gwPXRoaXMuX3gxPSt0LCIsIix0aGlzLl95MD10aGlzLl95MT0rbiwiaCIsK2UsInYiLCtyLCJoIiwtZSwiWiIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uam9pbigiIil9fTt2YXIgbmw9ZnVuY3Rpb24odCl7dmFyIG49K3RoaXMuX3guY2FsbChudWxsLHQpLGU9K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBSKHRoaXMuY292ZXIobixlKSxuLGUsdCl9LGVsPWZ1bmN0aW9uKHQsbil7aWYoaXNOYU4odD0rdCl8fGlzTmFOKG49K24pKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKGUpKWk9KGU9TWF0aC5mbG9vcih0KSkrMSxvPShyPU1hdGguZmxvb3IobikpKzE7ZWxzZXtpZighKGU+dHx8dD5pfHxyPm58fG4+bykpcmV0dXJuIHRoaXM7dmFyIHUsYSxjPWktZSxzPXRoaXMuX3Jvb3Q7c3dpdGNoKGE9KG48KHIrbykvMik8PDF8dDwoZStpKS8yKXtjYXNlIDA6ZG8gdT1uZXcgQXJyYXkoNCksdVthXT1zLHM9dTt3aGlsZShjKj0yLGk9ZStjLG89citjLHQ+aXx8bj5vKTticmVhaztjYXNlIDE6ZG8gdT1uZXcgQXJyYXkoNCksdVthXT1zLHM9dTt3aGlsZShjKj0yLGU9aS1jLG89citjLGU+dHx8bj5vKTticmVhaztjYXNlIDI6ZG8gdT1uZXcgQXJyYXkoNCksdVthXT1zLHM9dTt3aGlsZShjKj0yLGk9ZStjLHI9by1jLHQ+aXx8cj5uKTticmVhaztjYXNlIDM6ZG8gdT1uZXcgQXJyYXkoNCksdVthXT1zLHM9dTt3aGlsZShjKj0yLGU9aS1jLHI9by1jLGU+dHx8cj5uKX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPWUsdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc30scmw9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihuKXtpZighbi5sZW5ndGgpZG8gdC5wdXNoKG4uZGF0YSk7d2hpbGUobj1uLm5leHQpfSksdH0saWw9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LG9sPWZ1bmN0aW9uKHQsbixlLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1uLHRoaXMueTA9ZSx0aGlzLngxPXIsdGhpcy55MT1pfSx1bD1mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvLHUsYSxjLHMsZj10aGlzLl94MCxsPXRoaXMuX3kwLGg9dGhpcy5feDEscD10aGlzLl95MSxkPVtdLHY9dGhpcy5fcm9vdDtmb3IodiYmZC5wdXNoKG5ldyBvbCh2LGYsbCxoLHApKSxudWxsPT1lP2U9MS8wOihmPXQtZSxsPW4tZSxoPXQrZSxwPW4rZSxlKj1lKTtjPWQucG9wKCk7KWlmKCEoISh2PWMubm9kZSl8fChpPWMueDApPmh8fChvPWMueTApPnB8fCh1PWMueDEpPGZ8fChhPWMueTEpPGwpKWlmKHYubGVuZ3RoKXt2YXIgXz0oaSt1KS8yLHk9KG8rYSkvMjtkLnB1c2gobmV3IG9sKHZbM10sXyx5LHUsYSksbmV3IG9sKHZbMl0saSx5LF8sYSksbmV3IG9sKHZbMV0sXyxvLHUseSksbmV3IG9sKHZbMF0saSxvLF8seSkpLChzPShuPj15KTw8MXx0Pj1fKSYmKGM9ZFtkLmxlbmd0aC0xXSxkW2QubGVuZ3RoLTFdPWRbZC5sZW5ndGgtMS1zXSxkW2QubGVuZ3RoLTEtc109Yyl9ZWxzZXt2YXIgZz10LSt0aGlzLl94LmNhbGwobnVsbCx2LmRhdGEpLG09bi0rdGhpcy5feS5jYWxsKG51bGwsdi5kYXRhKSx4PWcqZyttKm07aWYoeDxlKXt2YXIgYj1NYXRoLnNxcnQoZT14KTtmPXQtYixsPW4tYixoPXQrYixwPW4rYixyPXYuZGF0YX19cmV0dXJuIHJ9LGFsPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKG89K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4odT0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBuLGUscixpLG8sdSxhLGMscyxmLGwsaCxwPXRoaXMuX3Jvb3QsZD10aGlzLl94MCx2PXRoaXMuX3kwLF89dGhpcy5feDEseT10aGlzLl95MTtpZighcClyZXR1cm4gdGhpcztpZihwLmxlbmd0aClmb3IoOzspe2lmKChzPW8+PShhPShkK18pLzIpKT9kPWE6Xz1hLChmPXU+PShjPSh2K3kpLzIpKT92PWM6eT1jLG49cCwhKHA9cFtsPWY8PDF8c10pKXJldHVybiB0aGlzO2lmKCFwLmxlbmd0aClicmVhazsobltsKzEmM118fG5bbCsyJjNdfHxuW2wrMyYzXSkmJihlPW4saD1sKX1mb3IoO3AuZGF0YSE9PXQ7KWlmKHI9cCwhKHA9cC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1wLm5leHQpJiZkZWxldGUgcC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTpuPyhpP25bbF09aTpkZWxldGUgbltsXSwocD1uWzBdfHxuWzFdfHxuWzJdfHxuWzNdKSYmcD09PShuWzNdfHxuWzJdfHxuWzFdfHxuWzBdKSYmIXAubGVuZ3RoJiYoZT9lW2hdPXA6dGhpcy5fcm9vdD1wKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxjbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxzbD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKWRvKyt0O3doaWxlKG49bi5uZXh0KX0pLHR9LGZsPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sdSxhPVtdLGM9dGhpcy5fcm9vdDtmb3IoYyYmYS5wdXNoKG5ldyBvbChjLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7bj1hLnBvcCgpOylpZighdChjPW4ubm9kZSxyPW4ueDAsaT1uLnkwLG89bi54MSx1PW4ueTEpJiZjLmxlbmd0aCl7dmFyIHM9KHIrbykvMixmPShpK3UpLzI7KGU9Y1szXSkmJmEucHVzaChuZXcgb2woZSxzLGYsbyx1KSksKGU9Y1syXSkmJmEucHVzaChuZXcgb2woZSxyLGYscyx1KSksKGU9Y1sxXSkmJmEucHVzaChuZXcgb2woZSxzLGksbyxmKSksKGU9Y1swXSkmJmEucHVzaChuZXcgb2woZSxyLGkscyxmKSl9cmV0dXJuIHRoaXN9LGxsPWZ1bmN0aW9uKHQpe3ZhciBuLGU9W10scj1bXTtmb3IodGhpcy5fcm9vdCYmZS5wdXNoKG5ldyBvbCh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7bj1lLnBvcCgpOyl7dmFyIGk9bi5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgbyx1PW4ueDAsYT1uLnkwLGM9bi54MSxzPW4ueTEsZj0odStjKS8yLGw9KGErcykvMjsobz1pWzBdKSYmZS5wdXNoKG5ldyBvbChvLHUsYSxmLGwpKSwobz1pWzFdKSYmZS5wdXNoKG5ldyBvbChvLGYsYSxjLGwpKSwobz1pWzJdKSYmZS5wdXNoKG5ldyBvbChvLHUsbCxmLHMpKSwobz1pWzNdKSYmZS5wdXNoKG5ldyBvbChvLGYsbCxjLHMpKX1yLnB1c2gobil9Zm9yKDtuPXIucG9wKCk7KXQobi5ub2RlLG4ueDAsbi55MCxuLngxLG4ueTEpO3JldHVybiB0aGlzfSxobD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LHBsPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sZGw9SS5wcm90b3R5cGU9WS5wcm90b3R5cGU7ZGwuY29weT1mdW5jdGlvbigpe3ZhciB0LG4sZT1uZXcgWSh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHI9dGhpcy5fcm9vdDtpZighcilyZXR1cm4gZTtpZighci5sZW5ndGgpcmV0dXJuIGUuX3Jvb3Q9QihyKSxlO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0OmUuX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShuPXIuc291cmNlW2ldKSYmKG4ubGVuZ3RoP3QucHVzaCh7c291cmNlOm4sdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPUIobikpO3JldHVybiBlfSxkbC5hZGQ9bmwsZGwuYWRkQWxsPVUsZGwuY292ZXI9ZWwsZGwuZGF0YT1ybCxkbC5leHRlbnQ9aWwsZGwuZmluZD11bCxkbC5yZW1vdmU9YWwsZGwucmVtb3ZlQWxsPUQsZGwucm9vdD1jbCxkbC5zaXplPXNsLGRsLnZpc2l0PWZsLGRsLnZpc2l0QWZ0ZXI9bGwsZGwueD1obCxkbC55PXBsO3ZhciB2bD1bXS5zbGljZSxfbD17fTtqLnByb3RvdHlwZT1aLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aixkZWZlcjpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8dGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3I7aWYobnVsbCE9dGhpcy5fZXJyb3IpcmV0dXJuIHRoaXM7dmFyIG49dmwuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIG4ucHVzaCh0KSwrK3RoaXMuX3dhaXRpbmcsdGhpcy5fdGFza3MucHVzaChuKSxIKHRoaXMpLHRoaXN9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMuX2Vycm9yJiZXKHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8dGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuX2NhbGw9ZnVuY3Rpb24obixlKXt0LmFwcGx5KG51bGwsW25dLmNvbmNhdChlKSl9LCQodGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLl9jYWxsPXQsJCh0aGlzKSx0aGlzfX07dmFyIHlsPWZ1bmN0aW9uKHQpewpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGdsPTFlLTEyLG1sPU1hdGguUEkseGw9bWwvMixibD0yKm1sLHdsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LHMsZj0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS14bCxwPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpLXhsLGQ9TWF0aC5hYnMocC1oKSx2PXA+aDtpZihjfHwoYz10PUwoKSksbDxmJiYocz1sLGw9ZixmPXMpLGw+Z2wpaWYoZD5ibC1nbCljLm1vdmVUbyhsKk1hdGguY29zKGgpLGwqTWF0aC5zaW4oaCkpLGMuYXJjKDAsMCxsLGgscCwhdiksZj5nbCYmKGMubW92ZVRvKGYqTWF0aC5jb3MocCksZipNYXRoLnNpbihwKSksYy5hcmMoMCwwLGYscCxoLHYpKTtlbHNle3ZhciBfLHksZz1oLG09cCx4PWgsYj1wLHc9ZCxNPWQsVD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLE49VD5nbCYmKGk/K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOk1hdGguc3FydChmKmYrbCpsKSksaz1NYXRoLm1pbihNYXRoLmFicyhsLWYpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxTPWssQT1rO2lmKE4+Z2wpe3ZhciBFPW50KE4vZipNYXRoLnNpbihUKSksQz1udChOL2wqTWF0aC5zaW4oVCkpOyh3LT0yKkUpPmdsPyhFKj12PzE6LTEseCs9RSxiLT1FKToodz0wLHg9Yj0oaCtwKS8yKSwoTS09MipDKT5nbD8oQyo9dj8xOi0xLGcrPUMsbS09Qyk6KE09MCxnPW09KGgrcCkvMil9dmFyIHo9bCpNYXRoLmNvcyhnKSxQPWwqTWF0aC5zaW4oZykscT1mKk1hdGguY29zKGIpLFI9ZipNYXRoLnNpbihiKTtpZihrPmdsKXt2YXIgVT1sKk1hdGguY29zKG0pLEQ9bCpNYXRoLnNpbihtKSxPPWYqTWF0aC5jb3MoeCksRj1mKk1hdGguc2luKHgpO2lmKGQ8bWwpe3ZhciBJPXc+Z2w/ZXQoeixQLE8sRixVLEQscSxSKTpbcSxSXSxZPXotSVswXSxCPVAtSVsxXSxqPVUtSVswXSxIPUQtSVsxXSxYPTEvTWF0aC5zaW4oTWF0aC5hY29zKChZKmorQipIKS8oTWF0aC5zcXJ0KFkqWStCKkIpKk1hdGguc3FydChqKmorSCpIKSkpLzIpLFY9TWF0aC5zcXJ0KElbMF0qSVswXStJWzFdKklbMV0pO1M9TWF0aC5taW4oaywoZi1WKS8oWC0xKSksQT1NYXRoLm1pbihrLChsLVYpLyhYKzEpKX19TT5nbD9BPmdsPyhfPXJ0KE8sRix6LFAsbCxBLHYpLHk9cnQoVSxELHEsUixsLEEsdiksYy5tb3ZlVG8oXy5jeCtfLngwMSxfLmN5K18ueTAxKSxBPGs/Yy5hcmMoXy5jeCxfLmN5LEEsTWF0aC5hdGFuMihfLnkwMSxfLngwMSksTWF0aC5hdGFuMih5LnkwMSx5LngwMSksIXYpOihjLmFyYyhfLmN4LF8uY3ksQSxNYXRoLmF0YW4yKF8ueTAxLF8ueDAxKSxNYXRoLmF0YW4yKF8ueTExLF8ueDExKSwhdiksYy5hcmMoMCwwLGwsTWF0aC5hdGFuMihfLmN5K18ueTExLF8uY3grXy54MTEpLE1hdGguYXRhbjIoeS5jeSt5LnkxMSx5LmN4K3kueDExKSwhdiksYy5hcmMoeS5jeCx5LmN5LEEsTWF0aC5hdGFuMih5LnkxMSx5LngxMSksTWF0aC5hdGFuMih5LnkwMSx5LngwMSksIXYpKSk6KGMubW92ZVRvKHosUCksYy5hcmMoMCwwLGwsZyxtLCF2KSk6Yy5tb3ZlVG8oeixQKSxmPmdsJiZ3PmdsP1M+Z2w/KF89cnQocSxSLFUsRCxmLC1TLHYpLHk9cnQoeixQLE8sRixmLC1TLHYpLGMubGluZVRvKF8uY3grXy54MDEsXy5jeStfLnkwMSksUzxrP2MuYXJjKF8uY3gsXy5jeSxTLE1hdGguYXRhbjIoXy55MDEsXy54MDEpLE1hdGguYXRhbjIoeS55MDEseS54MDEpLCF2KTooYy5hcmMoXy5jeCxfLmN5LFMsTWF0aC5hdGFuMihfLnkwMSxfLngwMSksTWF0aC5hdGFuMihfLnkxMSxfLngxMSksIXYpLGMuYXJjKDAsMCxmLE1hdGguYXRhbjIoXy5jeStfLnkxMSxfLmN4K18ueDExKSxNYXRoLmF0YW4yKHkuY3kreS55MTEseS5jeCt5LngxMSksdiksYy5hcmMoeS5jeCx5LmN5LFMsTWF0aC5hdGFuMih5LnkxMSx5LngxMSksTWF0aC5hdGFuMih5LnkwMSx5LngwMSksIXYpKSk6Yy5hcmMoMCwwLGYsYix4LHYpOmMubGluZVRvKHEsUil9ZWxzZSBjLm1vdmVUbygwLDApO2lmKGMuY2xvc2VQYXRoKCksdClyZXR1cm4gYz1udWxsLHQrIiJ8fG51bGx9dmFyIG49RyxlPUoscj15bCgwKSxpPW51bGwsbz1RLHU9SyxhPXR0LGM9bnVsbDtyZXR1cm4gdC5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciB0PSgrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgrby5hcHBseSh0aGlzLGFyZ3VtZW50cykrICt1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1tbC8yO3JldHVybltNYXRoLmNvcyhyKSp0LE1hdGguc2luKHIpKnRdfSx0LmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eWwoK2UpLHQpOm59LHQub3V0ZXJSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5bCgrbiksdCk6ZX0sdC5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5bCgrbiksdCk6cn0sdC5wYWRSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09bj9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiBuP246eWwoK24pLHQpOml9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnlsKCtuKSx0KTpvfSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eWwoK24pLHQpOnV9LHQucGFkQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5bCgrbiksdCk6YX0sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW51bGw9PW4/bnVsbDpuLHQpOmN9LHR9O2l0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pfX19O3ZhciBNbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGl0KHQpfSxUbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGEsYyxzLGY9dC5sZW5ndGgsbD0hMTtmb3IobnVsbD09aSYmKHU9byhzPUwoKSkpLGE9MDthPD1mOysrYSkhKGE8ZiYmcihjPXRbYV0sYSx0KSk9PT1sJiYoKGw9IWwpP3UubGluZVN0YXJ0KCk6dS5saW5lRW5kKCkpLGwmJnUucG9pbnQoK24oYyxhLHQpLCtlKGMsYSx0KSk7aWYocylyZXR1cm4gdT1udWxsLHMrIiJ8fG51bGx9dmFyIG49b3QsZT11dCxyPXlsKCEwKSxpPW51bGwsbz1NbCx1PW51bGw7cmV0dXJuIHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnlsKCtlKSx0KTpufSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5bCgrbiksdCk6ZX0sdC5kZWZpbmVkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eWwoISFuKSx0KTpyfSx0LmN1cnZlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sbnVsbCE9aSYmKHU9byhpKSksdCk6b30sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP2k9dT1udWxsOnU9byhpPW4pLHQpOml9LHR9LE5sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbixmLGwsaCxwLGQ9dC5sZW5ndGgsdj0hMSxfPW5ldyBBcnJheShkKSx5PW5ldyBBcnJheShkKTtmb3IobnVsbD09YSYmKHM9YyhwPUwoKSkpLG49MDtuPD1kOysrbil7aWYoIShuPGQmJnUoaD10W25dLG4sdCkpPT09dilpZih2PSF2KWY9bixzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxsPW4tMTtsPj1mOy0tbClzLnBvaW50KF9bbF0seVtsXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9diYmKF9bbl09K2UoaCxuLHQpLHlbbl09K2koaCxuLHQpLHMucG9pbnQocj8rcihoLG4sdCk6X1tuXSxvPytvKGgsbix0KTp5W25dKSl9aWYocClyZXR1cm4gcz1udWxsLHArIiJ8fG51bGx9ZnVuY3Rpb24gbigpe3JldHVybiBUbCgpLmRlZmluZWQodSkuY3VydmUoYykuY29udGV4dChhKX12YXIgZT1vdCxyPW51bGwsaT15bCgwKSxvPXV0LHU9eWwoITApLGE9bnVsbCxjPU1sLHM9bnVsbDtyZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eWwoK24pLHI9bnVsbCx0KTplfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eWwoK24pLHQpOmV9LHQueDE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09bj9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiBuP246eWwoK24pLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnlsKCtuKSxvPW51bGwsdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnlsKCtuKSx0KTppfSx0LnkxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PW4/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnlsKCtuKSx0KTpvfSx0LmxpbmVYMD10LmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBuKCkueChlKS55KGkpfSx0LmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBuKCkueChlKS55KG8pfSx0LmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBuKCkueChyKS55KGkpfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5bCghIW4pLHQpOnV9LHQuY3VydmU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bixudWxsIT1hJiYocz1jKGEpKSx0KTpjfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/YT1zPW51bGw6cz1jKGE9biksdCk6YX0sdH0sa2w9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59LFNsPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxBbD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGEsYyxzLGYsbCxoPXQubGVuZ3RoLHA9MCxkPW5ldyBBcnJheShoKSx2PW5ldyBBcnJheShoKSxfPStpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5PU1hdGgubWluKGJsLE1hdGgubWF4KC1ibCxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1fKSksZz1NYXRoLm1pbihNYXRoLmFicyh5KS9oLHUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxtPWcqKHk8MD8tMToxKTtmb3IoYT0wO2E8aDsrK2EpKGw9dltkW2FdPWFdPStuKHRbYV0sYSx0KSk+MCYmKHArPWwpO2ZvcihudWxsIT1lP2Quc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlKHZbdF0sdltuXSl9KTpudWxsIT1yJiZkLnNvcnQoZnVuY3Rpb24obixlKXtyZXR1cm4gcih0W25dLHRbZV0pfSksYT0wLHM9cD8oeS1oKm0pL3A6MDthPGg7KythLF89ZiljPWRbYV0sbD12W2NdLGY9XysobD4wP2wqczowKSttLHZbY109e2RhdGE6dFtjXSxpbmRleDphLHZhbHVlOmwsc3RhcnRBbmdsZTpfLGVuZEFuZ2xlOmYscGFkQW5nbGU6Z307cmV0dXJuIHZ9dmFyIG49U2wsZT1rbCxyPW51bGwsaT15bCgwKSxvPXlsKGJsKSx1PXlsKDApO3JldHVybiB0LnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eWwoK2UpLHQpOm59LHQuc29ydFZhbHVlcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHI9bnVsbCx0KTplfSx0LnNvcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bixlPW51bGwsdCk6cn0sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246eWwoK24pLHQpOml9LHQuZW5kQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5bCgrbiksdCk6b30sdC5wYWRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnlsKCtuKSx0KTp1fSx0fSxFbD1jdChNbCk7YXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5fY3VydmUucG9pbnQobipNYXRoLnNpbih0KSxuKi1NYXRoLmNvcyh0KSl9fTt2YXIgQ2w9ZnVuY3Rpb24oKXtyZXR1cm4gc3QoVGwoKS5jdXJ2ZShFbCkpfSx6bD1mdW5jdGlvbigpe3ZhciB0PU5sKCkuY3VydmUoRWwpLG49dC5jdXJ2ZSxlPXQubGluZVgwLHI9dC5saW5lWDEsaT10LmxpbmVZMCxvPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gc3QoZSgpKX0sZGVsZXRlIHQubGluZVgwLHQubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIHN0KHIoKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBzdChpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gc3QobygpKX0sZGVsZXRlIHQubGluZVkxLHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihjdCh0KSk6bigpLl9jdXJ2ZX0sdH0sUGw9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi9tbCk7dC5tb3ZlVG8oZSwwKSx0LmFyYygwLDAsZSwwLGJsKX19LHFsPXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vNSkvMjt0Lm1vdmVUbygtMyplLC1lKSx0LmxpbmVUbygtZSwtZSksdC5saW5lVG8oLWUsLTMqZSksdC5saW5lVG8oZSwtMyplKSx0LmxpbmVUbyhlLC1lKSx0LmxpbmVUbygzKmUsLWUpLHQubGluZVRvKDMqZSxlKSx0LmxpbmVUbyhlLGUpLHQubGluZVRvKGUsMyplKSx0LmxpbmVUbygtZSwzKmUpLHQubGluZVRvKC1lLGUpLHQubGluZVRvKC0zKmUsZSksdC5jbG9zZVBhdGgoKX19LExsPU1hdGguc3FydCgxLzMpLFJsPTIqTGwsVWw9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi9SbCkscj1lKkxsO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsMCksdC5saW5lVG8oMCxlKSx0LmxpbmVUbygtciwwKSx0LmNsb3NlUGF0aCgpfX0sRGw9Ljg5MDgxMzA5MTUyOTI4NTIsT2w9TWF0aC5zaW4obWwvMTApL01hdGguc2luKDcqbWwvMTApLEZsPU1hdGguc2luKGJsLzEwKSpPbCxJbD0tTWF0aC5jb3MoYmwvMTApKk9sLFlsPXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4qRGwpLHI9RmwqZSxpPUlsKmU7dC5tb3ZlVG8oMCwtZSksdC5saW5lVG8ocixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgdT1ibCpvLzUsYT1NYXRoLmNvcyh1KSxjPU1hdGguc2luKHUpO3QubGluZVRvKGMqZSwtYSplKSx0LmxpbmVUbyhhKnItYyppLGMqcithKmkpfXQuY2xvc2VQYXRoKCl9fSxCbD17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuKSxyPS1lLzI7dC5yZWN0KHIscixlLGUpfX0samw9TWF0aC5zcXJ0KDMpLEhsPXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9LU1hdGguc3FydChuLygzKmpsKSk7dC5tb3ZlVG8oMCwyKmUpLHQubGluZVRvKC1qbCplLC1lKSx0LmxpbmVUbyhqbCplLC1lKSx0LmNsb3NlUGF0aCgpfX0sWGw9LS41LFZsPU1hdGguc3FydCgzKS8yLFdsPTEvTWF0aC5zcXJ0KDEyKSwkbD0zKihXbC8yKzEpLFpsPXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vJGwpLHI9ZS8yLGk9ZSpXbCxvPXIsdT1lKldsK2UsYT0tbyxjPXU7dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhvLHUpLHQubGluZVRvKGEsYyksdC5saW5lVG8oWGwqci1WbCppLFZsKnIrWGwqaSksdC5saW5lVG8oWGwqby1WbCp1LFZsKm8rWGwqdSksdC5saW5lVG8oWGwqYS1WbCpjLFZsKmErWGwqYyksdC5saW5lVG8oWGwqcitWbCppLFhsKmktVmwqciksdC5saW5lVG8oWGwqbytWbCp1LFhsKnUtVmwqbyksdC5saW5lVG8oWGwqYStWbCpjLFhsKmMtVmwqYSksdC5jbG9zZVBhdGgoKX19LEdsPVtQbCxxbCxVbCxCbCxZbCxIbCxabF0sSmw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ7aWYocnx8KHI9dD1MKCkpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcociwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHQpcmV0dXJuIHI9bnVsbCx0KyIifHxudWxsfXZhciBuPXlsKFBsKSxlPXlsKDY0KSxyPW51bGw7cmV0dXJuIHQudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnlsKGUpLHQpOm59LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOnlsKCtuKSx0KTplfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09bj9udWxsOm4sdCk6cn0sdH0sUWw9ZnVuY3Rpb24oKXt9O2x0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6ZnQodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6ZnQodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19O3ZhciBLbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGx0KHQpfTtodC5wcm90b3R5cGU9e2FyZWFTdGFydDpRbCxhcmVhRW5kOlFsLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1uLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErbikvNik7YnJlYWs7ZGVmYXVsdDpmdCh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX07dmFyIHRoPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaHQodCl9O3B0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBlPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStuKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSxyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6ZnQodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19O3ZhciBuaD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHB0KHQpfTtkdC5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsbj10aGlzLl95LGU9dC5sZW5ndGgtMTtpZihlPjApZm9yKHZhciByLGk9dFswXSxvPW5bMF0sdT10W2VdLWksYT1uW2VdLW8sYz0tMTsrK2M8PWU7KXI9Yy9lLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKnUpLHRoaXMuX2JldGEqbltjXSsoMS10aGlzLl9iZXRhKSoobytyKmEpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX07dmFyIGVoPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gMT09PW4/bmV3IGx0KHQpOm5ldyBkdCh0LG4pfXJldHVybiBlLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguODUpO190LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp2dCh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1uO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6dnQodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciByaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBfdCh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTt5dC5wcm90b3R5cGU9e2FyZWFTdGFydDpRbCxhcmVhRW5kOlFsLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6dnQodGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBpaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyB5dCh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtndC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDp2dCh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIG9oPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IGd0KHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO3h0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6bXQodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgdWg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyB4dCh0LG4pOm5ldyBfdCh0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO2J0LnByb3RvdHlwZT17YXJlYVN0YXJ0OlFsLGFyZWFFbmQ6UWwsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6bXQodGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgYWg9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyBidCh0LG4pOm5ldyB5dCh0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO3d0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDptdCh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBjaD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IHd0KHQsbik6bmV3IGd0KHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7TXQucHJvdG90eXBlPXthcmVhU3RhcnQ6UWwsYXJlYUVuZDpRbCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dD0rdCxuPStuLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKSl9fTt2YXIgc2g9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNdCh0KX07QXQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOlN0KHRoaXMsdGhpcy5fdDAsa3QodGhpcyx0aGlzLl90MCkpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt2YXIgZT1OYU47aWYodD0rdCxuPStuLHQhPT10aGlzLl94MXx8biE9PXRoaXMuX3kxKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLFN0KHRoaXMsa3QodGhpcyxlPU50KHRoaXMsdCxuKSksZSk7YnJlYWs7ZGVmYXVsdDpTdCh0aGlzLHRoaXMuX3QwLGU9TnQodGhpcyx0LG4pKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW4sdGhpcy5fdDA9ZX19fSwoRXQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQXQucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24odCxuKXtBdC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLG4sdCl9LEN0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fY29udGV4dC5tb3ZlVG8obix0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fY29udGV4dC5saW5lVG8obix0KX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4sdCxyLGUsbyxpKX19LHF0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsbj10aGlzLl95LGU9dC5sZW5ndGg7aWYoZSlpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRbMF0sblswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odFswXSxuWzBdKSwyPT09ZSl0aGlzLl9jb250ZXh0LmxpbmVUbyh0WzFdLG5bMV0pO2Vsc2UgZm9yKHZhciByPUx0KHQpLGk9THQobiksbz0wLHU9MTt1PGU7KytvLCsrdSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oclswXVtvXSxpWzBdW29dLHJbMV1bb10saVsxXVtvXSx0W3VdLG5bdV0pOyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PWUpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtuKX19O3ZhciBmaD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHF0KHQpfTtSdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LG4pLHRoaXMuX2NvbnRleHQubGluZVRvKHQsbik7ZWxzZXt2YXIgZT10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsbil9fXRoaXMuX3g9dCx0aGlzLl95PW59fTt2YXIgbGg9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBSdCh0LC41KX0saGg9QXJyYXkucHJvdG90eXBlLnNsaWNlLHBoPWZ1bmN0aW9uKHQsbil7aWYoKHI9dC5sZW5ndGgpPjEpZm9yKHZhciBlLHIsaT0xLG89dFtuWzBdXSx1PW8ubGVuZ3RoO2k8cjsrK2kpe2U9byxvPXRbbltpXV07Zm9yKHZhciBhPTA7YTx1OysrYSlvW2FdWzFdKz1vW2FdWzBdPWlzTmFOKGVbYV1bMV0pP2VbYV1bMF06ZVthXVsxXX19LGRoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10Lmxlbmd0aCxlPW5ldyBBcnJheShuKTstLW4+PTA7KWVbbl09bjtyZXR1cm4gZX0sdmg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBvLHUsYT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjPXQubGVuZ3RoLHM9YS5sZW5ndGgsZj1uZXcgQXJyYXkocyk7Zm9yKG89MDtvPHM7KytvKXtmb3IodmFyIGwsaD1hW29dLHA9ZltvXT1uZXcgQXJyYXkoYyksZD0wO2Q8YzsrK2QpcFtkXT1sPVswLCtpKHRbZF0saCxkLHQpXSxsLmRhdGE9dFtkXTtwLmtleT1ofWZvcihvPTAsdT1lKGYpO288czsrK28pZlt1W29dXS5pbmRleD1vO3JldHVybiByKGYsdSksZn12YXIgbj15bChbXSksZT1kaCxyPXBoLGk9T3Q7cmV0dXJuIHQua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnlsKGhoLmNhbGwoZSkpLHQpOm59LHQudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjp5bCgrbiksdCk6aX0sdC5vcmRlcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT1uP2RoOiJmdW5jdGlvbiI9PXR5cGVvZiBuP246eWwoaGguY2FsbChuKSksdCk6ZX0sdC5vZmZzZXQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09bj9waDpuLHQpOnJ9LHR9LF9oPWZ1bmN0aW9uKHQsbil7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgZSxyLGksbz0wLHU9dFswXS5sZW5ndGg7bzx1Oysrbyl7Zm9yKGk9ZT0wO2U8cjsrK2UpaSs9dFtlXVtvXVsxXXx8MDtpZihpKWZvcihlPTA7ZTxyOysrZSl0W2VdW29dWzFdLz1pfXBoKHQsbil9fSx5aD1mdW5jdGlvbih0LG4pe2lmKChlPXQubGVuZ3RoKT4wKXtmb3IodmFyIGUscj0wLGk9dFtuWzBdXSxvPWkubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgdT0wLGE9MDt1PGU7Kyt1KWErPXRbdV1bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tYS8yfXBoKHQsbil9fSxnaD1mdW5jdGlvbih0LG4pe2lmKChpPXQubGVuZ3RoKT4wJiYocj0oZT10W25bMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgZSxyLGksbz0wLHU9MTt1PHI7Kyt1KXtmb3IodmFyIGE9MCxjPTAscz0wO2E8aTsrK2Epe2Zvcih2YXIgZj10W25bYV1dLGw9Zlt1XVsxXXx8MCxoPWZbdS0xXVsxXXx8MCxwPShsLWgpLzIsZD0wO2Q8YTsrK2Qpe3ZhciB2PXRbbltkXV0sXz12W3VdWzFdfHwwLHk9dlt1LTFdWzFdfHwwO3ArPV8teX1jKz1sLHMrPXAqbH1lW3UtMV1bMV0rPWVbdS0xXVswXT1vLGMmJihvLT1zL2MpfWVbdS0xXVsxXSs9ZVt1LTFdWzBdPW8scGgodCxuKX19LG1oPWZ1bmN0aW9uKHQpe3ZhciBuPXQubWFwKEZ0KTtyZXR1cm4gZGgodCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBuW3RdLW5bZV19KX0seGg9ZnVuY3Rpb24odCl7cmV0dXJuIG1oKHQpLnJldmVyc2UoKX0sYmg9ZnVuY3Rpb24odCl7dmFyIG4sZSxyPXQubGVuZ3RoLGk9dC5tYXAoRnQpLG89ZGgodCkuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBpW25dLWlbdF19KSx1PTAsYT0wLGM9W10scz1bXTtmb3Iobj0wO248cjsrK24pZT1vW25dLHU8YT8odSs9aVtlXSxjLnB1c2goZSkpOihhKz1pW2VdLHMucHVzaChlKSk7cmV0dXJuIHMucmV2ZXJzZSgpLmNvbmNhdChjKX0sd2g9ZnVuY3Rpb24odCl7cmV0dXJuIGRoKHQpLnJldmVyc2UoKX0sTWg9ZnVuY3Rpb24odCxuLGUpe3QucHJvdG90eXBlPW4ucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj10fSxUaD0uNyxOaD0xL1RoLGtoPS9eIyhbMC05YS1mXXszfSkkLyxTaD0vXiMoWzAtOWEtZl17Nn0pJC8sQWg9L15yZ2JcKFxzKihbLStdP1xkKylccyosXHMqKFstK10/XGQrKVxzKixccyooWy0rXT9cZCspXHMqXCkkLyxFaD0vXnJnYlwoXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccypcKSQvLENoPS9ecmdiYVwoXHMqKFstK10/XGQrKVxzKixccyooWy0rXT9cZCspXHMqLFxzKihbLStdP1xkKylccyosXHMqKFstK10/XGQrKD86XC5cZCspPylccypcKSQvLHpoPS9ecmdiYVwoXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPylccypcKSQvLFBoPS9eaHNsXChccyooWy0rXT9cZCsoPzpcLlxkKyk/KVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPyklXHMqXCkkLyxxaD0vXmhzbGFcKFxzKihbLStdP1xkKyg/OlwuXGQrKT8pXHMqLFxzKihbLStdP1xkKyg/OlwuXGQrKT8pJVxzKixccyooWy0rXT9cZCsoPzpcLlxkKyk/KSVccyosXHMqKFstK10/XGQrKD86XC5cZCspPylccypcKSQvLExoPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O01oKFl0LEJ0LHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksTWgoV3QsVnQsSXQoWXQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Tmg6TWF0aC5wb3coTmgsdCksbmV3IFd0KHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1RoOk1hdGgucG93KFRoLHQpLG5ldyBXdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybiB0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSwoMT09PXQ/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKSxNaChKdCxHdCxJdChZdCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9OaDpNYXRoLnBvdyhOaCx0KSxuZXcgSnQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9UaDpNYXRoLnBvdyhUaCx0KSxuZXcgSnQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLG49aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsZT10aGlzLmwscj1lKyhlPC41P2U6MS1lKSpuLGk9MiplLXI7cmV0dXJuIG5ldyBXdChRdCh0Pj0yNDA/dC0yNDA6dCsxMjAsaSxyKSxRdCh0LGksciksUXQodDwxMjA/dCsyNDA6dC0xMjAsaSxyKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX19KSk7dmFyIFJoPU1hdGguUEkvMTgwLFVoPTE4MC9NYXRoLlBJLERoPTE4LE9oPS45NTA0NyxGaD0xLEloPTEuMDg4ODMsWWg9NC8yOSxCaD02LzI5LGpoPTMqQmgqQmgsSGg9QmgqQmgqQmg7TWgobm4sdG4sSXQoWXQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbm4odGhpcy5sK0RoKihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBubih0aGlzLmwtRGgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixuPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsZT1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiB0PUZoKnJuKHQpLG49T2gqcm4obiksZT1JaCpybihlKSxuZXcgV3Qob24oMy4yNDA0NTQyKm4tMS41MzcxMzg1KnQtLjQ5ODUzMTQqZSksb24oLS45NjkyNjYqbisxLjg3NjAxMDgqdCsuMDQxNTU2KmUpLG9uKC4wNTU2NDM0Km4tLjIwNDAyNTkqdCsxLjA1NzIyNTIqZSksdGhpcy5vcGFjaXR5KX19KSksTWgoc24sY24sSXQoWXQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgc24odGhpcy5oLHRoaXMuYyx0aGlzLmwrRGgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzbih0aGlzLmgsdGhpcy5jLHRoaXMubC1EaCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBLdCh0aGlzKS5yZ2IoKX19KSk7dmFyIFhoPS0uMTQ4NjEsVmg9MS43ODI3NyxXaD0tLjI5MjI3LCRoPS0uOTA2NDksWmg9MS45NzI5NCxHaD1aaCokaCxKaD1aaCpWaCxRaD1WaCpXaC0kaCpYaDtNaChobixsbixJdChZdCx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9OaDpNYXRoLnBvdyhOaCx0KSxuZXcgaG4odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9UaDpNYXRoLnBvdyhUaCx0KSxuZXcgaG4odGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKlJoLG49K3RoaXMubCxlPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqbiooMS1uKSxyPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBXdCgyNTUqKG4rZSooWGgqcitWaCppKSksMjU1KihuK2UqKFdoKnIrJGgqaSkpLDI1NSoobitlKihaaCpyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIEtoLHRwLG5wLGVwLHJwPWZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPWU8PTA/ZT0wOmU+PTE/KGU9MSxuLTEpOk1hdGguZmxvb3IoZSpuKSxpPXRbcl0sbz10W3IrMV0sdT1yPjA/dFtyLTFdOjIqaS1vLGE9cjxuLTE/dFtyKzJdOjIqby1pO3JldHVybiBwbigoZS1yL24pKm4sdSxpLG8sYSl9fSxpcD1mdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKm4pLGk9dFsocituLTEpJW5dLG89dFtyJW5dLHU9dFsocisxKSVuXSxhPXRbKHIrMiklbl07cmV0dXJuIHBuKChlLXIvbikqbixpLG8sdSxhKX19LG9wPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sdXA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9cigodD1WdCh0KSkuciwobj1WdChuKSkuciksaT1yKHQuZyxuLmcpLG89cih0LmIsbi5iKSx1PXIodC5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0LnI9ZShuKSx0Lmc9aShuKSx0LmI9byhuKSx0Lm9wYWNpdHk9dShuKSx0KyIifX12YXIgcj15bihuKTtyZXR1cm4gZS5nYW1tYT10LGV9KDEpLGFwPW1uKHJwKSxjcD1tbihpcCksc3A9ZnVuY3Rpb24odCxuKXt2YXIgZSxyPW4/bi5sZW5ndGg6MCxpPXQ/TWF0aC5taW4ocix0Lmxlbmd0aCk6MCxvPW5ldyBBcnJheShyKSx1PW5ldyBBcnJheShyKTtmb3IoZT0wO2U8aTsrK2Upb1tlXT1fcCh0W2VdLG5bZV0pO2Zvcig7ZTxyOysrZSl1W2VdPW5bZV07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihlPTA7ZTxpOysrZSl1W2VdPW9bZV0odCk7cmV0dXJuIHV9fSxmcD1mdW5jdGlvbih0LG4pe3ZhciBlPW5ldyBEYXRlO3JldHVybiB0PSt0LG4tPXQsZnVuY3Rpb24ocil7cmV0dXJuIGUuc2V0VGltZSh0K24qciksZX19LGxwPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihlKXtyZXR1cm4gdCtuKmV9fSxocD1mdW5jdGlvbih0LG4pe3ZhciBlLHI9e30saT17fTtudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fHwodD17fSksbnVsbCE9PW4mJiJvYmplY3QiPT10eXBlb2Ygbnx8KG49e30pO2ZvcihlIGluIG4pZSBpbiB0P3JbZV09X3AodFtlXSxuW2VdKTppW2VdPW5bZV07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihlIGluIHIpaVtlXT1yW2VdKHQpO3JldHVybiBpfX0scHA9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGRwPW5ldyBSZWdFeHAocHAuc291cmNlLCJnIiksdnA9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz1wcC5sYXN0SW5kZXg9ZHAubGFzdEluZGV4PTAsdT0tMSxhPVtdLGM9W107Zm9yKHQrPSIiLG4rPSIiOyhlPXBwLmV4ZWModCkpJiYocj1kcC5leGVjKG4pKTspKGk9ci5pbmRleCk+byYmKGk9bi5zbGljZShvLGkpLGFbdV0/YVt1XSs9aTphWysrdV09aSksKGU9ZVswXSk9PT0ocj1yWzBdKT9hW3VdP2FbdV0rPXI6YVsrK3VdPXI6KGFbKyt1XT1udWxsLGMucHVzaCh7aTp1LHg6bHAoZSxyKX0pKSxvPWRwLmxhc3RJbmRleDtyZXR1cm4gbzxuLmxlbmd0aCYmKGk9bi5zbGljZShvKSxhW3VdP2FbdV0rPWk6YVsrK3VdPWkpLGEubGVuZ3RoPDI/Y1swXT9ibihjWzBdLngpOnhuKG4pOihuPWMubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPTA7cjxuOysrcilhWyhlPWNbcl0pLmldPWUueCh0KTtyZXR1cm4gYS5qb2luKCIiKX0pfSxfcD1mdW5jdGlvbih0LG4pe3ZhciBlLHI9dHlwZW9mIG47cmV0dXJuIG51bGw9PW58fCJib29sZWFuIj09PXI/b3Aobik6KCJudW1iZXIiPT09cj9scDoic3RyaW5nIj09PXI/KGU9QnQobikpPyhuPWUsdXApOnZwOm4gaW5zdGFuY2VvZiBCdD91cDpuIGluc3RhbmNlb2YgRGF0ZT9mcDpBcnJheS5pc0FycmF5KG4pP3NwOmlzTmFOKG4pP2hwOmxwKSh0LG4pfSx5cD1mdW5jdGlvbih0LG4pe3JldHVybiB0PSt0LG4tPXQsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQodCtuKmUpfX0sZ3A9MTgwL01hdGguUEksbXA9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX0seHA9ZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciB1LGEsYztyZXR1cm4odT1NYXRoLnNxcnQodCp0K24qbikpJiYodC89dSxuLz11KSwoYz10KmUrbipyKSYmKGUtPXQqYyxyLT1uKmMpLChhPU1hdGguc3FydChlKmUrcipyKSkmJihlLz1hLHIvPWEsYy89YSksdCpyPG4qZSYmKHQ9LXQsbj0tbixjPS1jLHU9LXUpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKG4sdCkqZ3Asc2tld1g6TWF0aC5hdGFuKGMpKmdwLHNjYWxlWDp1LHNjYWxlWTphfX0sYnA9VG4od24sInB4LCAiLCJweCkiLCJkZWcpIiksd3A9VG4oTW4sIiwgIiwiKSIsIikiKSxNcD1NYXRoLlNRUlQyLFRwPTIsTnA9NCxrcD0xZS0xMixTcD1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaT10WzBdLG89dFsxXSx1PXRbMl0sYT1uWzBdLGM9blsxXSxzPW5bMl0sZj1hLWksbD1jLW8saD1mKmYrbCpsO2lmKGg8a3Apcj1NYXRoLmxvZyhzL3UpL01wLGU9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCpmLG8rdCpsLHUqTWF0aC5leHAoTXAqdCpyKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGgpLGQ9KHMqcy11KnUrTnAqaCkvKDIqdSpUcCpwKSx2PShzKnMtdSp1LU5wKmgpLygyKnMqVHAqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KHYqdisxKS12KTtyPSh5LV8pL01wLGU9ZnVuY3Rpb24odCl7dmFyIG49dCpyLGU9Tm4oXyksYT11LyhUcCpwKSooZSpTbihNcCpuK18pLWtuKF8pKTtyZXR1cm5baSthKmYsbythKmwsdSplL05uKE1wKm4rXyldfX1yZXR1cm4gZS5kdXJhdGlvbj0xZTMqcixlfSxBcD1BbihfbiksRXA9QW4oZ24pLENwPUNuKF9uKSx6cD1DbihnbiksUHA9em4oX24pLHFwPXpuKGduKSxMcD1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT1uZXcgQXJyYXkobikscj0wO3I8bjsrK3IpZVtyXT10KHIvKG4tMSkpOwpyZXR1cm4gZX0sUnA9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07cW4ucHJvdG90eXBlPVBuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cW4sb246ZnVuY3Rpb24odCxuKXt2YXIgZSxyPXRoaXMuXyxpPUxuKHQrIiIsciksbz0tMSx1PWkubGVuZ3RoO3tpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPW4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtmb3IoOysrbzx1OylpZihlPSh0PWlbb10pLnR5cGUpcltlXT1VbihyW2VdLHQubmFtZSxuKTtlbHNlIGlmKG51bGw9PW4pZm9yKGUgaW4gcilyW2VdPVVuKHJbZV0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytvPHU7KWlmKChlPSh0PWlbb10pLnR5cGUpJiYoZT1SbihyW2VdLHQubmFtZSkpKXJldHVybiBlfX0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LG49dGhpcy5fO2Zvcih2YXIgZSBpbiBuKXRbZV09bltlXS5zbGljZSgpO3JldHVybiBuZXcgcW4odCl9LGNhbGw6ZnVuY3Rpb24odCxuKXtpZigoZT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlLHIsaT1uZXcgQXJyYXkoZSksbz0wO288ZTsrK28paVtvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihyPXRoaXMuX1t0XSxvPTAsZT1yLmxlbmd0aDtvPGU7KytvKXJbb10udmFsdWUuYXBwbHkobixpKX0sYXBwbHk6ZnVuY3Rpb24odCxuLGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXJbaV0udmFsdWUuYXBwbHkobixlKX19O3ZhciBVcCxEcCxPcD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaSxvPWUodCxmdW5jdGlvbih0LGUpe3JldHVybiByP3IodCxlLTEpOihpPXQsdm9pZChyPW4/T24odCxuKTpEbih0KSkpfSk7cmV0dXJuIG8uY29sdW1ucz1pLG99ZnVuY3Rpb24gZSh0LG4pe2Z1bmN0aW9uIGUoKXtpZihmPj1zKXJldHVybiB1O2lmKGkpcmV0dXJuIGk9ITEsbzt2YXIgbixlPWY7aWYoMzQ9PT10LmNoYXJDb2RlQXQoZSkpe2Zvcih2YXIgcj1lO3IrKzxzOylpZigzND09PXQuY2hhckNvZGVBdChyKSl7aWYoMzQhPT10LmNoYXJDb2RlQXQocisxKSlicmVhazsrK3J9cmV0dXJuIGY9cisyLG49dC5jaGFyQ29kZUF0KHIrMSksMTM9PT1uPyhpPSEwLDEwPT09dC5jaGFyQ29kZUF0KHIrMikmJisrZik6MTA9PT1uJiYoaT0hMCksdC5zbGljZShlKzEscikucmVwbGFjZSgvIiIvZywnIicpfWZvcig7ZjxzOyl7dmFyIGE9MTtpZihuPXQuY2hhckNvZGVBdChmKyspLDEwPT09bilpPSEwO2Vsc2UgaWYoMTM9PT1uKWk9ITAsMTA9PT10LmNoYXJDb2RlQXQoZikmJigrK2YsKythKTtlbHNlIGlmKG4hPT1jKWNvbnRpbnVlO3JldHVybiB0LnNsaWNlKGUsZi1hKX1yZXR1cm4gdC5zbGljZShlKX1mb3IodmFyIHIsaSxvPXt9LHU9e30sYT1bXSxzPXQubGVuZ3RoLGY9MCxsPTA7KHI9ZSgpKSE9PXU7KXtmb3IodmFyIGg9W107ciE9PW8mJnIhPT11OyloLnB1c2gocikscj1lKCk7biYmbnVsbD09KGg9bihoLGwrKykpfHxhLnB1c2goaCl9cmV0dXJuIGF9ZnVuY3Rpb24gcihuLGUpe3JldHVybiBudWxsPT1lJiYoZT1GbihuKSksW2UubWFwKHUpLmpvaW4odCldLmNvbmNhdChuLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHUoblt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5tYXAobykuam9pbigiXG4iKX1mdW5jdGlvbiBvKG4pe3JldHVybiBuLm1hcCh1KS5qb2luKHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG51bGw9PXQ/IiI6YS50ZXN0KHQrPSIiKT8nIicrdC5yZXBsYWNlKC9cIi9nLCciIicpKyciJzp0fXZhciBhPW5ldyBSZWdFeHAoJ1siJyt0KyJcbl0iKSxjPXQuY2hhckNvZGVBdCgwKTtyZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6ZSxmb3JtYXQ6cixmb3JtYXRSb3dzOml9fSxGcD1PcCgiLCIpLElwPUZwLnBhcnNlLFlwPUZwLnBhcnNlUm93cyxCcD1GcC5mb3JtYXQsanA9RnAuZm9ybWF0Um93cyxIcD1PcCgiXHQiKSxYcD1IcC5wYXJzZSxWcD1IcC5wYXJzZVJvd3MsV3A9SHAuZm9ybWF0LCRwPUhwLmZvcm1hdFJvd3MsWnA9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKHQpe3ZhciBuLGU9Zi5zdGF0dXM7aWYoIWUmJlluKGYpfHxlPj0yMDAmJmU8MzAwfHwzMDQ9PT1lKXtpZih1KXRyeXtuPXUuY2FsbChyLGYpfWNhdGNoKHQpe3JldHVybiB2b2lkIGMuY2FsbCgiZXJyb3IiLHIsdCl9ZWxzZSBuPWY7Yy5jYWxsKCJsb2FkIixyLG4pfWVsc2UgYy5jYWxsKCJlcnJvciIscix0KX12YXIgcixpLHUsYSxjPVBuKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxzPW8oKSxmPW5ldyBYTUxIdHRwUmVxdWVzdCxsPW51bGwsaD1udWxsLHA9MDtpZigidW5kZWZpbmVkIj09dHlwZW9mIFhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGZ8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3QodCl8fChmPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBmP2Yub25sb2FkPWYub25lcnJvcj1mLm9udGltZW91dD1lOmYub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKHQpe2YucmVhZHlTdGF0ZT4zJiZlKHQpfSxmLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24odCl7Yy5jYWxsKCJwcm9ncmVzcyIscix0KX0scj17aGVhZGVyOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP3MuZ2V0KHQpOihudWxsPT1uP3MucmVtb3ZlKHQpOnMuc2V0KHQsbisiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp0KyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LHIpOmF9LHRpbWVvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3Qscik6cH0sdXNlcjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP2w6KGw9bnVsbD09dD9udWxsOnQrIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/aDooaD1udWxsPT10P251bGw6dCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHU9dCxyfSxnZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gci5zZW5kKCJHRVQiLHQsbil9LHBvc3Q6ZnVuY3Rpb24odCxuKXtyZXR1cm4gci5zZW5kKCJQT1NUIix0LG4pfSxzZW5kOmZ1bmN0aW9uKG4sZSxvKXtyZXR1cm4gZi5vcGVuKG4sdCwhMCxsLGgpLG51bGw9PWl8fHMuaGFzKCJhY2NlcHQiKXx8cy5zZXQoImFjY2VwdCIsaSsiLCovKiIpLGYuc2V0UmVxdWVzdEhlYWRlciYmcy5lYWNoKGZ1bmN0aW9uKHQsbil7Zi5zZXRSZXF1ZXN0SGVhZGVyKG4sdCl9KSxudWxsIT1pJiZmLm92ZXJyaWRlTWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZShpKSxudWxsIT1hJiYoZi5yZXNwb25zZVR5cGU9YSkscD4wJiYoZi50aW1lb3V0PXApLG51bGw9PW8mJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYobz1lLGU9bnVsbCksbnVsbCE9byYmMT09PW8ubGVuZ3RoJiYobz1JbihvKSksbnVsbCE9byYmci5vbigiZXJyb3IiLG8pLm9uKCJsb2FkIixmdW5jdGlvbih0KXtvKG51bGwsdCl9KSxjLmNhbGwoImJlZm9yZXNlbmQiLHIsZiksZi5zZW5kKG51bGw9PWU/bnVsbDplKSxyfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiBmLmFib3J0KCkscn0sb246ZnVuY3Rpb24oKXt2YXIgdD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gdD09PWM/cjp0fX0sbnVsbCE9bil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK24pO3JldHVybiByLmdldChuKX1yZXR1cm4gcn0sR3A9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgaT1acChlKS5taW1lVHlwZSh0KS5yZXNwb25zZShuKTtpZihudWxsIT1yKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrcik7cmV0dXJuIGkuZ2V0KHIpfXJldHVybiBpfX0sSnA9R3AoInRleHQvaHRtbCIsZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHQucmVzcG9uc2VUZXh0KX0pLFFwPUdwKCJhcHBsaWNhdGlvbi9qc29uIixmdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9KSxLcD1HcCgidGV4dC9wbGFpbiIsZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VUZXh0fSksdGQ9R3AoImFwcGxpY2F0aW9uL3htbCIsZnVuY3Rpb24odCl7dmFyIG49dC5yZXNwb25zZVhNTDtpZighbil0aHJvdyBuZXcgRXJyb3IoInBhcnNlIGVycm9yIik7cmV0dXJuIG59KSxuZD1mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlLHIsaSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoaT1yLHI9bnVsbCk7dmFyIG89WnAoZSkubWltZVR5cGUodCk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UoQm4obixyPXQpKTpyfSxvLnJvdyhyKSxpP28uZ2V0KGkpOm99fSxlZD1uZCgidGV4dC9jc3YiLElwKSxyZD1uZCgidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIsWHApLGlkPTAsb2Q9MCx1ZD0wLGFkPTFlMyxjZD0wLHNkPTAsZmQ9MCxsZD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxoZD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3JlcXVlc3RBbmltYXRpb25GcmFtZTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtYbi5wcm90b3R5cGU9Vm4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYbixyZXN0YXJ0OmZ1bmN0aW9uKHQsbixlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KG51bGw9PWU/am4oKTorZSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8RHA9PT10aGlzfHwoRHA/RHAuX25leHQ9dGhpczpVcD10aGlzLERwPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWUsSm4oKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsSm4oKSl9fTt2YXIgcGQ9ZnVuY3Rpb24odCxuLGUpe3ZhciByPW5ldyBYbjtyZXR1cm4gbj1udWxsPT1uPzA6K24sci5yZXN0YXJ0KGZ1bmN0aW9uKGUpe3Iuc3RvcCgpLHQoZStuKX0sbixlKSxyfSxkZD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bmV3IFhuLGk9bjtyZXR1cm4gbnVsbD09bj8oci5yZXN0YXJ0KHQsbixlKSxyKToobj0rbixlPW51bGw9PWU/am4oKTorZSxyLnJlc3RhcnQoZnVuY3Rpb24gbyh1KXt1Kz1pLHIucmVzdGFydChvLGkrPW4sZSksdCh1KX0sbixlKSxyKX0sdmQ9bmV3IERhdGUsX2Q9bmV3IERhdGUseWQ9UW4oZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLXR9KTt5ZC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP1FuKGZ1bmN0aW9uKG4pe24uc2V0VGltZShNYXRoLmZsb29yKG4vdCkqdCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRUaW1lKCtuK2UqdCl9LGZ1bmN0aW9uKG4sZSl7cmV0dXJuKGUtbikvdH0pOnlkOm51bGx9O3ZhciBnZD15ZC5yYW5nZSxtZD0xZTMseGQ9NmU0LGJkPTM2ZTUsd2Q9ODY0ZTUsTWQ9NjA0OGU1LFRkPVFuKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbWQpKm1kKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbiptZCl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvbWR9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pLE5kPVRkLnJhbmdlLGtkPVFuKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQveGQpKnhkKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3Qrbip4ZCl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkveGR9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLFNkPWtkLnJhbmdlLEFkPVFuKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSp4ZCViZDtuPDAmJihuKz1iZCksdC5zZXRUaW1lKE1hdGguZmxvb3IoKCt0LW4pL2JkKSpiZCtuKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipiZCl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvYmR9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxFZD1BZC5yYW5nZSxDZD1RbihmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0RGF0ZSh0LmdldERhdGUoKStuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp4ZCkvd2R9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksemQ9Q2QucmFuZ2UsUGQ9S24oMCkscWQ9S24oMSksTGQ9S24oMiksUmQ9S24oMyksVWQ9S24oNCksRGQ9S24oNSksT2Q9S24oNiksRmQ9UGQucmFuZ2UsSWQ9cWQucmFuZ2UsWWQ9TGQucmFuZ2UsQmQ9UmQucmFuZ2UsamQ9VWQucmFuZ2UsSGQ9RGQucmFuZ2UsWGQ9T2QucmFuZ2UsVmQ9UW4oZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksV2Q9VmQucmFuZ2UsJGQ9UW4oZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KTskZC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1FuKGZ1bmN0aW9uKG4pe24uc2V0RnVsbFllYXIoTWF0aC5mbG9vcihuLmdldEZ1bGxZZWFyKCkvdCkqdCksbi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrZSp0KX0pOm51bGx9O3ZhciBaZD0kZC5yYW5nZSxHZD1RbihmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3Qrbip4ZCl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkveGR9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pLEpkPUdkLnJhbmdlLFFkPVFuKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qYmQpfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL2JkfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSksS2Q9UWQucmFuZ2UsdHY9UW4oZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvd2R9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSksbnY9dHYucmFuZ2UsZXY9dGUoMCkscnY9dGUoMSksaXY9dGUoMiksb3Y9dGUoMyksdXY9dGUoNCksYXY9dGUoNSksY3Y9dGUoNiksc3Y9ZXYucmFuZ2UsZnY9cnYucmFuZ2UsbHY9aXYucmFuZ2UsaHY9b3YucmFuZ2UscHY9dXYucmFuZ2UsZHY9YXYucmFuZ2UsdnY9Y3YucmFuZ2UsX3Y9UW4oZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKG4uZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkseXY9X3YucmFuZ2UsZ3Y9UW4oZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KTtndi5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP1FuKGZ1bmN0aW9uKG4pe24uc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihuLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksbi5zZXRVVENNb250aCgwLDEpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRVVENGdWxsWWVhcihuLmdldFVUQ0Z1bGxZZWFyKCkrZSp0KX0pOm51bGx9O3ZhciBtdix4dj1ndi5yYW5nZSxidj1mdW5jdGlvbih0LG4pe2lmKChlPSh0PW4/dC50b0V4cG9uZW50aWFsKG4tMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxyPXQuc2xpY2UoMCxlKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShlKzEpXX0sd3Y9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9YnYoTWF0aC5hYnModCkpLHQ/dFsxXTpOYU59LE12PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUscil7Zm9yKHZhciBpPWUubGVuZ3RoLG89W10sdT0wLGE9dFswXSxjPTA7aT4wJiZhPjAmJihjK2ErMT5yJiYoYT1NYXRoLm1heCgxLHItYykpLG8ucHVzaChlLnN1YnN0cmluZyhpLT1hLGkrYSkpLCEoKGMrPWErMSk+cikpOylhPXRbdT0odSsxKSV0Lmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4obil9fSxUdj1mdW5jdGlvbih0LG4pe3Q9dC50b1ByZWNpc2lvbihuKTt0OmZvcih2YXIgZSxyPXQubGVuZ3RoLGk9MSxvPS0xO2k8cjsrK2kpc3dpdGNoKHRbaV0pe2Nhc2UiLiI6bz1lPWk7YnJlYWs7Y2FzZSIwIjowPT09byYmKG89aSksZT1pO2JyZWFrO2Nhc2UiZSI6YnJlYWsgdDtkZWZhdWx0Om8+MCYmKG89MCl9cmV0dXJuIG8+MD90LnNsaWNlKDAsbykrdC5zbGljZShlKzEpOnR9LE52PWZ1bmN0aW9uKHQsbil7dmFyIGU9YnYodCxuKTtpZighZSlyZXR1cm4gdCsiIjt2YXIgcj1lWzBdLGk9ZVsxXSxvPWktKG12PTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSkrMSx1PXIubGVuZ3RoO3JldHVybiBvPT09dT9yOm8+dT9yK25ldyBBcnJheShvLXUrMSkuam9pbigiMCIpOm8+MD9yLnNsaWNlKDAsbykrIi4iK3Iuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrYnYodCxNYXRoLm1heCgwLG4rby0xKSlbMF19LGt2PWZ1bmN0aW9uKHQsbil7dmFyIGU9YnYodCxuKTtpZighZSlyZXR1cm4gdCsiIjt2YXIgcj1lWzBdLGk9ZVsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX0sU3Y9eyIiOlR2LCIlIjpmdW5jdGlvbih0LG4pe3JldHVybigxMDAqdCkudG9GaXhlZChuKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKG4pfSxmOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9GaXhlZChuKX0sZzpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvUHJlY2lzaW9uKG4pfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGt2KDEwMCp0LG4pfSxyOmt2LHM6TnYsWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxBdj0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC1cKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyhbYS16JV0pPyQvaSxFdj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG5lKHQpfTtuZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsobnVsbD09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKG51bGw9PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSt0aGlzLnR5cGV9O3ZhciBDdix6dj1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0sUHY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBuKHQpe3ZhciBuLGksYyxnPWQsbT12O2lmKCJjIj09PXApbT1fKHQpK20sdD0iIjtlbHNle3Q9K3Q7dmFyIHg9KHQ8MHx8MS90PDApJiYodCo9LTEsITApO2lmKHQ9Xyh0LGgpLHgpZm9yKG49LTEsaT10Lmxlbmd0aCx4PSExOysrbjxpOylpZihjPXQuY2hhckNvZGVBdChuKSw0ODxjJiZjPDU4fHwieCI9PT1wJiY5NjxjJiZjPDEwM3x8IlgiPT09cCYmNjQ8YyYmYzw3MSl7eD0hMDticmVha31pZihnPSh4PyIoIj09PWE/YToiLSI6Ii0iPT09YXx8IigiPT09YT8iIjphKStnLG09bSsoInMiPT09cD96dls4K212LzNdOiIiKSsoeCYmIigiPT09YT8iKSI6IiIpLHkpZm9yKG49LTEsaT10Lmxlbmd0aDsrK248aTspaWYoYz10LmNoYXJDb2RlQXQobiksNDg+Y3x8Yz41Nyl7bT0oNDY9PT1jP28rdC5zbGljZShuKzEpOnQuc2xpY2UobikpK20sdD10LnNsaWNlKDAsbik7YnJlYWt9fWwmJiFzJiYodD1yKHQsMS8wKSk7dmFyIGI9Zy5sZW5ndGgrdC5sZW5ndGgrbS5sZW5ndGgsdz1iPGY/bmV3IEFycmF5KGYtYisxKS5qb2luKGUpOiIiO3N3aXRjaChsJiZzJiYodD1yKHcrdCx3Lmxlbmd0aD9mLW0ubGVuZ3RoOjEvMCksdz0iIiksdSl7Y2FzZSI8IjpyZXR1cm4gZyt0K20rdztjYXNlIj0iOnJldHVybiBnK3crdCttO2Nhc2UiXiI6cmV0dXJuIHcuc2xpY2UoMCxiPXcubGVuZ3RoPj4xKStnK3QrbSt3LnNsaWNlKGIpfXJldHVybiB3K2crdCttfXQ9RXYodCk7dmFyIGU9dC5maWxsLHU9dC5hbGlnbixhPXQuc2lnbixjPXQuc3ltYm9sLHM9dC56ZXJvLGY9dC53aWR0aCxsPXQuY29tbWEsaD10LnByZWNpc2lvbixwPXQudHlwZSxkPSIkIj09PWM/aVswXToiIyI9PT1jJiYvW2JveFhdLy50ZXN0KHApPyIwIitwLnRvTG93ZXJDYXNlKCk6IiIsdj0iJCI9PT1jP2lbMV06L1slcF0vLnRlc3QocCk/IiUiOiIiLF89U3ZbcF0seT0hcHx8L1tkZWZncHJzJV0vLnRlc3QocCk7cmV0dXJuIGg9bnVsbD09aD9wPzY6MTI6L1tncHJzXS8udGVzdChwKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGgpKSxuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LG59ZnVuY3Rpb24gZSh0LGUpe3ZhciByPW4oKHQ9RXYodCksdC50eXBlPSJmIix0KSksaT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih3dihlKS8zKSkpLG89TWF0aC5wb3coMTAsLWkpLHU9enZbOCtpLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcihvKnQpK3V9fXZhciByPXQuZ3JvdXBpbmcmJnQudGhvdXNhbmRzP012KHQuZ3JvdXBpbmcsdC50aG91c2FuZHMpOmVlLGk9dC5jdXJyZW5jeSxvPXQuZGVjaW1hbDtyZXR1cm57Zm9ybWF0Om4sZm9ybWF0UHJlZml4OmV9fTtyZSh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTt2YXIgcXYsTHY9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsLXd2KE1hdGguYWJzKHQpKSl9LFJ2PWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3Iod3YobikvMykpKS13dihNYXRoLmFicyh0KSkpfSxVdj1mdW5jdGlvbih0LG4pe3JldHVybiB0PU1hdGguYWJzKHQpLG49TWF0aC5hYnMobiktdCxNYXRoLm1heCgwLHd2KG4pLXd2KHQpKSsxfSxEdj17Ii0iOiIiLF86IiAiLDA6IjAifSxPdj0vXlxzKlxkKy8sRnY9L14lLyxJdj0vW1xcXF5cJFwqXCtcP1x8XFtcXVwoXClcLlx7XH1dL2c7bnIoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgWXY9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIsQnY9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZXI6dC51dGNGb3JtYXQoWXYpLGp2PStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/cnI6dC51dGNQYXJzZShZdiksSHY9QXJyYXkucHJvdG90eXBlLFh2PUh2Lm1hcCxWdj1Idi5zbGljZSxXdj17bmFtZToiaW1wbGljaXQifSwkdj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LFp2PWZ1bmN0aW9uKHQpe3JldHVybit0fSxHdj1bMCwxXSxKdj1mdW5jdGlvbihuLHIsaSl7dmFyIG8sdT1uWzBdLGE9bltuLmxlbmd0aC0xXSxjPWUodSxhLG51bGw9PXI/MTA6cik7c3dpdGNoKGk9RXYobnVsbD09aT8iLGYiOmkpLGkudHlwZSl7Y2FzZSJzIjp2YXIgcz1NYXRoLm1heChNYXRoLmFicyh1KSxNYXRoLmFicyhhKSk7cmV0dXJuIG51bGwhPWkucHJlY2lzaW9ufHxpc05hTihvPVJ2KGMscykpfHwoaS5wcmVjaXNpb249byksdC5mb3JtYXRQcmVmaXgoaSxzKTtjYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjpudWxsIT1pLnByZWNpc2lvbnx8aXNOYU4obz1VdihjLE1hdGgubWF4KE1hdGguYWJzKHUpLE1hdGguYWJzKGEpKSkpfHwoaS5wcmVjaXNpb249by0oImUiPT09aS50eXBlKSk7YnJlYWs7Y2FzZSJmIjpjYXNlIiUiOm51bGwhPWkucHJlY2lzaW9ufHxpc05hTihvPUx2KGMpKXx8KGkucHJlY2lzaW9uPW8tMiooIiUiPT09aS50eXBlKSl9cmV0dXJuIHQuZm9ybWF0KGkpfSxRdj1mdW5jdGlvbih0LG4pe3Q9dC5zbGljZSgpO3ZhciBlLHI9MCxpPXQubGVuZ3RoLTEsbz10W3JdLHU9dFtpXTtyZXR1cm4gdTxvJiYoZT1yLHI9aSxpPWUsZT1vLG89dSx1PWUpLHRbcl09bi5mbG9vcihvKSx0W2ldPW4uY2VpbCh1KSx0fSxLdj0xZTMsdF89NjAqS3Ysbl89NjAqdF8sZV89MjQqbl8scl89NyplXyxpXz0zMCplXyxvXz0zNjUqZV8sdV89ZnVuY3Rpb24oKXtyZXR1cm4gcXIoJGQsVmQsUGQsQ2QsQWQsa2QsVGQseWQsdC50aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9LGFfPWZ1bmN0aW9uKCl7cmV0dXJuIHFyKGd2LF92LGV2LHR2LFFkLEdkLFRkLHlkLHQudXRjRm9ybWF0KS5kb21haW4oW0RhdGUuVVRDKDJlMywwLDEpLERhdGUuVVRDKDJlMywwLDIpXSl9LGNfPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hdGNoKC8uezZ9L2cpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iIyIrdH0pfSxzXz1jXygiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksZl89Y18oIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpLGxfPWNfKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKSxoXz1jXygiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1IikscF89cXAobG4oMzAwLC41LDApLGxuKC0yNDAsLjUsMSkpLGRfPXFwKGxuKC0xMDAsLjc1LC4zNSksbG4oODAsMS41LC44KSksdl89cXAobG4oMjYwLC43NSwuMzUpLGxuKDgwLDEuNSwuOCkpLF9fPWxuKCkseV89ZnVuY3Rpb24odCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBuPU1hdGguYWJzKHQtLjUpO3JldHVybiBfXy5oPTM2MCp0LTEwMCxfXy5zPTEuNS0xLjUqbixfXy5sPS44LS45Km4sX18rIiJ9LGdfPUxyKGNfKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksbV89THIoY18oIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSx4Xz1McihjXygiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLGJfPUxyKGNfKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSksd189Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLE1fPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Xyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LFRfPWZ1bmN0aW9uKHQpe3ZhciBuPXQrPSIiLGU9bi5pbmRleE9mKCI6Iik7cmV0dXJuIGU+PTAmJiJ4bWxucyIhPT0obj10LnNsaWNlKDAsZSkpJiYodD10LnNsaWNlKGUrMSkpLE1fLmhhc093blByb3BlcnR5KG4pP3tzcGFjZTpNX1tuXSxsb2NhbDp0fTp0fSxOXz1mdW5jdGlvbih0KXt2YXIgbj1UXyh0KTtyZXR1cm4obi5sb2NhbD9EcjpVcikobil9LGtfPTA7RnIucHJvdG90eXBlPU9yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RnIsZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl87IShuIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbbl19LHNldDpmdW5jdGlvbih0LG4pe3JldHVybiB0W3RoaXMuX109bn0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIFNfPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgQV89ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKCFBXy5tYXRjaGVzKXt2YXIgRV89QV8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxBXy5tc01hdGNoZXNTZWxlY3Rvcnx8QV8ubW96TWF0Y2hlc1NlbGVjdG9yfHxBXy5vTWF0Y2hlc1NlbGVjdG9yO1NfPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBFXy5jYWxsKHRoaXMsdCl9fX19dmFyIENfPVNfLHpfPXt9O2lmKHQuZXZlbnQ9bnVsbCwidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgUF89ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OyJvbm1vdXNlZW50ZXIiaW4gUF98fCh6Xz17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KX12YXIgcV89ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbz1Ccih0KyIiKSx1PW8ubGVuZ3RoO3tpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihhPW4/SHI6anIsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPHU7KytyKXRoaXMuZWFjaChhKG9bcl0sbixlKSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKWZvcih2YXIgYyxzPTAsZj1hLmxlbmd0aDtzPGY7KytzKWZvcihyPTAsYz1hW3NdO3I8dTsrK3IpaWYoKGk9b1tyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfX0sTF89ZnVuY3Rpb24oKXtmb3IodmFyIG4sZT10LmV2ZW50O249ZS5zb3VyY2VFdmVudDspZT1uO3JldHVybiBlfSxSXz1mdW5jdGlvbih0LG4pe3ZhciBlPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKGUuY3JlYXRlU1ZHUG9pbnQpe3ZhciByPWUuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PW4uY2xpZW50WCxyLnk9bi5jbGllbnRZLHI9ci5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtyLngsci55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltuLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxuLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfSxVXz1mdW5jdGlvbih0KXt2YXIgbj1MXygpO3JldHVybiBuLmNoYW5nZWRUb3VjaGVzJiYobj1uLmNoYW5nZWRUb3VjaGVzWzBdKSxSXyh0LG4pfSxEXz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9WcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fSxPXz1mdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9RF8odCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIG8sdSxhPW5baV0sYz1hLmxlbmd0aCxzPXJbaV09bmV3IEFycmF5KGMpLGY9MDtmPGM7KytmKShvPWFbZl0pJiYodT10LmNhbGwobyxvLl9fZGF0YV9fLGYsYSkpJiYoIl9fZGF0YV9fImluIG8mJih1Ll9fZGF0YV9fPW8uX19kYXRhX18pLHNbZl09dSk7cmV0dXJuIG5ldyB6aShyLHRoaXMuX3BhcmVudHMpfSxGXz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9XcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxJXz1mdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Rl8odCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPVtdLGk9W10sbz0wO288ZTsrK28pZm9yKHZhciB1LGE9bltvXSxjPWEubGVuZ3RoLHM9MDtzPGM7KytzKSh1PWFbc10pJiYoci5wdXNoKHQuY2FsbCh1LHUuX19kYXRhX18scyxhKSksaS5wdXNoKHUpKTtyZXR1cm4gbmV3IHppKHIsaSl9LFlfPWZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1DXyh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyx1PW5baV0sYT11Lmxlbmd0aCxjPXJbaV09W10scz0wO3M8YTsrK3MpKG89dVtzXSkmJnQuY2FsbChvLG8uX19kYXRhX18scyx1KSYmYy5wdXNoKG8pO3JldHVybiBuZXcgemkocix0aGlzLl9wYXJlbnRzKX0sQl89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9LGpfPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6aSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChCXyksdGhpcy5fcGFyZW50cyl9OyRyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6JHIsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxuKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07dmFyIEhfPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sWF89IiQiLFZfPWZ1bmN0aW9uKHQsbil7aWYoIXQpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxzPS0xLHRoaXMuZWFjaChmdW5jdGlvbih0KXtwWysrc109dH0pLHA7dmFyIGU9bj9HcjpacixyPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUhfKHQpKTtmb3IodmFyIG89aS5sZW5ndGgsdT1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyksYz1uZXcgQXJyYXkobykscz0wO3M8bzsrK3Mpe3ZhciBmPXJbc10sbD1pW3NdLGg9bC5sZW5ndGgscD10LmNhbGwoZixmJiZmLl9fZGF0YV9fLHMsciksZD1wLmxlbmd0aCx2PWFbc109bmV3IEFycmF5KGQpLF89dVtzXT1uZXcgQXJyYXkoZCkseT1jW3NdPW5ldyBBcnJheShoKTtlKGYsbCx2LF8seSxwLG4pO2Zvcih2YXIgZyxtLHg9MCxiPTA7eDxkOysreClpZihnPXZbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEobT1fW2JdKSYmKytiPGQ7KTtnLl9uZXh0PW18fG51bGx9fXJldHVybiB1PW5ldyB6aSh1LHIpLHUuX2VudGVyPWEsdS5fZXhpdD1jLHV9LFdfPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB6aSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKEJfKSx0aGlzLl9wYXJlbnRzKX0sJF89ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPXQuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz1NYXRoLm1pbihyLGkpLHU9bmV3IEFycmF5KHIpLGE9MDthPG87KythKWZvcih2YXIgYyxzPW5bYV0sZj1lW2FdLGw9cy5sZW5ndGgsaD11W2FdPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCkoYz1zW3BdfHxmW3BdKSYmKGhbcF09Yyk7Zm9yKDthPHI7KythKXVbYV09blthXTtyZXR1cm4gbmV3IHppKHUsdGhpcy5fcGFyZW50cyl9LFpfPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxuPS0xLGU9dC5sZW5ndGg7KytuPGU7KWZvcih2YXIgcixpPXRbbl0sbz1pLmxlbmd0aC0xLHU9aVtvXTstLW8+PTA7KShyPWlbb10pJiYodSYmdSE9PXIubmV4dFNpYmxpbmcmJnUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocix1KSx1PXIpO3JldHVybiB0aGlzfSxHXz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4sZSl7cmV0dXJuIG4mJmU/dChuLl9fZGF0YV9fLGUuX19kYXRhX18pOiFuLSFlfXR8fCh0PUpyKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgdSxhPWVbb10sYz1hLmxlbmd0aCxzPWlbb109bmV3IEFycmF5KGMpLGY9MDtmPGM7KytmKSh1PWFbZl0pJiYoc1tmXT11KTtzLnNvcnQobil9cmV0dXJuIG5ldyB6aShpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LEpfPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxRXz1mdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksbj0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dFsrK25dPXRoaXN9KSx0fSxLXz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0wLGU9dC5sZW5ndGg7bjxlOysrbilmb3IodmFyIHI9dFtuXSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgdT1yW2ldO2lmKHUpcmV0dXJuIHV9cmV0dXJuIG51bGx9LHR5PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sbnk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGV5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIGksbz1uW2VdLHU9MCxhPW8ubGVuZ3RoO3U8YTsrK3UpKGk9b1t1XSkmJnQuY2FsbChpLGkuX19kYXRhX18sdSxvKTtyZXR1cm4gdGhpc30scnk9ZnVuY3Rpb24odCxuKXt2YXIgZT1UXyh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2UubG9jYWw/S3I6UXI6ImZ1bmN0aW9uIj09dHlwZW9mIG4/ZS5sb2NhbD9yaTplaTplLmxvY2FsP25pOnRpKShlLG4pKX0saXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fSxveT1mdW5jdGlvbih0LG4sZSl7dmFyIHI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/aWk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/dWk6b2kpKHQsbixudWxsPT1lPyIiOmUpKTppeShyPXRoaXMubm9kZSgpKS5nZXRDb21wdXRlZFN0eWxlKHIsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX0sdXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bj9haToiZnVuY3Rpb24iPT10eXBlb2Ygbj9zaTpjaSkodCxuKSk6dGhpcy5ub2RlKClbdF19O2hpLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWVzLmluZGV4T2YodCk7bjwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgYXk9ZnVuY3Rpb24odCxuKXt2YXIgZT1maSh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1saSh0aGlzLm5vZGUoKSksaT0tMSxvPWUubGVuZ3RoOysraTxvOylpZighci5jb250YWlucyhlW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj95aTpuP3ZpOl9pKShlLG4pKX0sY3k9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/Z2k6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3hpOm1pKSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LHN5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT10P2JpOigiZnVuY3Rpb24iPT10eXBlb2YgdD9NaTp3aSkodCkpOnRoaXMubm9kZSgpLmlubmVySFRNTH0sZnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFRpKX0sbHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKE5pKX0saHk9ZnVuY3Rpb24odCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOXyh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0scHk9ZnVuY3Rpb24odCxuKXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok5fKHQpLHI9bnVsbD09bj9raToiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkRfKG4pO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0sZHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKFNpKX0sdnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLHQpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxfeT1mdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBuP0NpOkVpKSh0LG4pKX0seXk9W251bGxdO3ppLnByb3RvdHlwZT1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnppLHNlbGVjdDpPXyxzZWxlY3RBbGw6SV8sZmlsdGVyOllfLGRhdGE6Vl8sZW50ZXI6al8sZXhpdDpXXyxtZXJnZTokXyxvcmRlcjpaXyxzb3J0OkdfLGNhbGw6Sl8sbm9kZXM6UV8sbm9kZTpLXyxzaXplOnR5LGVtcHR5Om55LGVhY2g6ZXksYXR0cjpyeSxzdHlsZTpveSxwcm9wZXJ0eTp1eSxjbGFzc2VkOmF5LHRleHQ6Y3ksaHRtbDpzeSxyYWlzZTpmeSxsb3dlcjpseSxhcHBlbmQ6aHksaW5zZXJ0OnB5LHJlbW92ZTpkeSxkYXR1bTp2eSxvbjpxXyxkaXNwYXRjaDpfeX07dmFyIGd5PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgemkoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB6aShbW3RdXSx5eSl9LG15PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgemkoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgemkoW251bGw9PXQ/W106dF0seXkpfSx4eT1mdW5jdGlvbih0LG4sZSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoZT1uLG49TF8oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxvPW4/bi5sZW5ndGg6MDtpPG87KytpKWlmKChyPW5baV0pLmlkZW50aWZpZXI9PT1lKXJldHVybiBSXyh0LHIpO3JldHVybiBudWxsfSxieT1mdW5jdGlvbih0LG4pe251bGw9PW4mJihuPUxfKCkudG91Y2hlcyk7Zm9yKHZhciBlPTAscj1uP24ubGVuZ3RoOjAsaT1uZXcgQXJyYXkocik7ZTxyOysrZSlpW2VdPVJfKHQsbltlXSk7cmV0dXJuIGl9LHd5PVBuKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLE15PVtdLFR5PTAsTnk9MSxreT0yLFN5PTMsQXk9NCxFeT01LEN5PTYsenk9ZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciB1PXQuX190cmFuc2l0aW9uO2lmKHUpe2lmKGUgaW4gdSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTtVaSh0LGUse25hbWU6bixpbmRleDpyLGdyb3VwOmksb246d3ksdHdlZW46TXksdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VHl9KX0sUHk9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz10Ll9fdHJhbnNpdGlvbix1PSEwO2lmKG8pe249bnVsbD09bj9udWxsOm4rIiI7Zm9yKGkgaW4gbykoZT1vW2ldKS5uYW1lPT09bj8ocj1lLnN0YXRlPmt5JiZlLnN0YXRlPEV5LGUuc3RhdGU9Q3ksZS50aW1lci5zdG9wKCksciYmZS5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGRlbGV0ZSBvW2ldKTp1PSExO3UmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19LHF5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtQeSh0aGlzLHQpfSl9LEx5PWZ1bmN0aW9uKHQsbil7dmFyIGU9dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1SaSh0aGlzLm5vZGUoKSxlKS50d2VlbixvPTAsdT1pLmxlbmd0aDtvPHU7KytvKWlmKChyPWlbb10pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PW4/RGk6T2kpKGUsdCxuKSl9LFJ5PWZ1bmN0aW9uKHQsbil7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2Ygbj9scDpuIGluc3RhbmNlb2YgQnQ/dXA6KGU9QnQobikpPyhuPWUsdXApOnZwKSh0LG4pfSxVeT1mdW5jdGlvbih0LG4pe3ZhciBlPVRfKHQpLHI9InRyYW5zZm9ybSI9PT1lP3dwOlJ5O3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBuPyhlLmxvY2FsP1hpOkhpKShlLHIsRmkodGhpcywiYXR0ci4iK3QsbikpOm51bGw9PW4/KGUubG9jYWw/WWk6SWkpKGUpOihlLmxvY2FsP2ppOkJpKShlLHIsbikpfSxEeT1mdW5jdGlvbih0LG4pe3ZhciBlPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dmFyIHI9VF8odCk7cmV0dXJuIHRoaXMudHdlZW4oZSwoci5sb2NhbD9WaTpXaSkocixuKSl9LE95PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/JGk6WmkpKG4sdCkpOlJpKHRoaXMubm9kZSgpLG4pLmRlbGF5fSxGeT1mdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P0dpOkppKShuLHQpKTpSaSh0aGlzLm5vZGUoKSxuKS5kdXJhdGlvbn0sSXk9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKFFpKG4sdCkpOlJpKHRoaXMubm9kZSgpLG4pLmVhc2V9LFl5PWZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1DXyh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyx1PW5baV0sYT11Lmxlbmd0aCxjPXJbaV09W10scz0wO3M8YTsrK3MpKG89dVtzXSkmJnQuY2FsbChvLG8uX19kYXRhX18scyx1KSYmYy5wdXNoKG8pO3JldHVybiBuZXcgc28ocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxCeT1mdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9dC5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPU1hdGgubWluKHIsaSksdT1uZXcgQXJyYXkociksYT0wO2E8bzsrK2EpZm9yKHZhciBjLHM9blthXSxmPWVbYV0sbD1zLmxlbmd0aCxoPXVbYV09bmV3IEFycmF5KGwpLHA9MDtwPGw7KytwKShjPXNbcF18fGZbcF0pJiYoaFtwXT1jKTtmb3IoO2E8cjsrK2EpdVthXT1uW2FdO3JldHVybiBuZXcgc28odSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxqeT1mdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/UmkodGhpcy5ub2RlKCksZSkub24ub24odCk6dGhpcy5lYWNoKHRvKGUsdCxuKSl9LEh5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLG5vKHRoaXMuX2lkKSl9LFh5PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9RF8odCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSx1PTA7dTxpOysrdSlmb3IodmFyIGEsYyxzPXJbdV0sZj1zLmxlbmd0aCxsPW9bdV09bmV3IEFycmF5KGYpLGg9MDtoPGY7KytoKShhPXNbaF0pJiYoYz10LmNhbGwoYSxhLl9fZGF0YV9fLGgscykpJiYoIl9fZGF0YV9fImluIGEmJihjLl9fZGF0YV9fPWEuX19kYXRhX18pLGxbaF09Yyx6eShsW2hdLG4sZSxoLGwsUmkoYSxlKSkpO3JldHVybiBuZXcgc28obyx0aGlzLl9wYXJlbnRzLG4sZSl9LFZ5PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Rl8odCkpOwpmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1bXSx1PVtdLGE9MDthPGk7KythKWZvcih2YXIgYyxzPXJbYV0sZj1zLmxlbmd0aCxsPTA7bDxmOysrbClpZihjPXNbbF0pe2Zvcih2YXIgaCxwPXQuY2FsbChjLGMuX19kYXRhX18sbCxzKSxkPVJpKGMsZSksdj0wLF89cC5sZW5ndGg7djxfOysrdikoaD1wW3ZdKSYmenkoaCxuLGUsdixwLGQpO28ucHVzaChwKSx1LnB1c2goYyl9cmV0dXJuIG5ldyBzbyhvLHUsbixlKX0sV3k9UGkucHJvdG90eXBlLmNvbnN0cnVjdG9yLCR5PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LFp5PWZ1bmN0aW9uKHQsbixlKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9icDpSeTtyZXR1cm4gbnVsbD09bj90aGlzLnN0eWxlVHdlZW4odCxlbyh0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxybyh0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIG4/b28odCxyLEZpKHRoaXMsInN0eWxlLiIrdCxuKSk6aW8odCxyLG4pLGUpfSxHeT1mdW5jdGlvbih0LG4sZSl7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocix1byh0LG4sbnVsbD09ZT8iIjplKSl9LEp5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9jbyhGaSh0aGlzLCJ0ZXh0Iix0KSk6YW8obnVsbD09dD8iIjp0KyIiKSl9LFF5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsbj10aGlzLl9pZCxlPWxvKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIHUsYT1yW29dLGM9YS5sZW5ndGgscz0wO3M8YzsrK3MpaWYodT1hW3NdKXt2YXIgZj1SaSh1LG4pO3p5KHUsdCxlLHMsYSx7dGltZTpmLnRpbWUrZi5kZWxheStmLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246Zi5kdXJhdGlvbixlYXNlOmYuZWFzZX0pfXJldHVybiBuZXcgc28ocix0aGlzLl9wYXJlbnRzLHQsZSl9LEt5PTAsdGc9UGkucHJvdG90eXBlO3NvLnByb3RvdHlwZT1mby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnNvLHNlbGVjdDpYeSxzZWxlY3RBbGw6VnksZmlsdGVyOll5LG1lcmdlOkJ5LHNlbGVjdGlvbjokeSx0cmFuc2l0aW9uOlF5LGNhbGw6dGcuY2FsbCxub2Rlczp0Zy5ub2Rlcyxub2RlOnRnLm5vZGUsc2l6ZTp0Zy5zaXplLGVtcHR5OnRnLmVtcHR5LGVhY2g6dGcuZWFjaCxvbjpqeSxhdHRyOlV5LGF0dHJUd2VlbjpEeSxzdHlsZTpaeSxzdHlsZVR3ZWVuOkd5LHRleHQ6SnkscmVtb3ZlOkh5LHR3ZWVuOkx5LGRlbGF5Ok95LGR1cmF0aW9uOkZ5LGVhc2U6SXl9O3ZhciBuZz17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6Z30sZWc9ZnVuY3Rpb24odCl7dmFyIG4sZTt0IGluc3RhbmNlb2Ygc28/KG49dC5faWQsdD10Ll9uYW1lKToobj1sbygpLChlPW5nKS50aW1lPWpuKCksdD1udWxsPT10P251bGw6dCsiIik7Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgdSxhPXJbb10sYz1hLmxlbmd0aCxzPTA7czxjOysrcykodT1hW3NdKSYmenkodSx0LG4scyxhLGV8fGhvKHUsbikpO3JldHVybiBuZXcgc28ocix0aGlzLl9wYXJlbnRzLHQsbil9O1BpLnByb3RvdHlwZS5pbnRlcnJ1cHQ9cXksUGkucHJvdG90eXBlLnRyYW5zaXRpb249ZWc7dmFyIHJnPVtudWxsXSxpZz1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaT10Ll9fdHJhbnNpdGlvbjtpZihpKXtuPW51bGw9PW4/bnVsbDpuKyIiO2ZvcihyIGluIGkpaWYoKGU9aVtyXSkuc3RhdGU+TnkmJmUubmFtZT09PW4pcmV0dXJuIG5ldyBzbyhbW3RdXSxyZyxuLCtyKX1yZXR1cm4gbnVsbH0sb2c9QXJyYXkucHJvdG90eXBlLnNsaWNlLHVnPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxhZz0xLGNnPTIsc2c9MyxmZz00LGxnPTFlLTYsaGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBvLHU9MDt0LmVhY2hBZnRlcihmdW5jdGlvbih0KXt2YXIgZT10LmNoaWxkcmVuO2U/KHQueD1UbyhlKSx0Lnk9a28oZSkpOih0Lng9bz91Kz1uKHQsbyk6MCx0Lnk9MCxvPXQpfSk7dmFyIGE9QW8odCksYz1Fbyh0KSxzPWEueC1uKGEsYykvMixmPWMueCtuKGMsYSkvMjtyZXR1cm4gdC5lYWNoQWZ0ZXIoaT9mdW5jdGlvbihuKXtuLng9KG4ueC10LngpKmUsbi55PSh0Lnktbi55KSpyfTpmdW5jdGlvbihuKXtuLng9KG4ueC1zKS8oZi1zKSplLG4ueT0oMS0odC55P24ueS90Lnk6MSkpKnJ9KX12YXIgbj1NbyxlPTEscj0xLGk9ITE7cmV0dXJuIHQuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHQpOm59LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hMSxlPStuWzBdLHI9K25bMV0sdCk6aT9udWxsOltlLHJdfSx0Lm5vZGVTaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEwLGU9K25bMF0scj0rblsxXSx0KTppP1tlLHJdOm51bGx9LHR9LHBnPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG89dGhpcyx1PVtvXTtkbyBmb3Iobj11LnJldmVyc2UoKSx1PVtdO289bi5wb3AoKTspaWYodChvKSxlPW8uY2hpbGRyZW4pZm9yKHI9MCxpPWUubGVuZ3RoO3I8aTsrK3IpdS5wdXNoKGVbcl0pO3doaWxlKHUubGVuZ3RoKTtyZXR1cm4gdGhpc30sZGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxuPXIuY2hpbGRyZW4pZm9yKGU9bi5sZW5ndGgtMTtlPj0wOy0tZSlpLnB1c2gobltlXSk7cmV0dXJuIHRoaXN9LHZnPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHIsaT10aGlzLG89W2ldLHU9W107aT1vLnBvcCgpOylpZih1LnB1c2goaSksbj1pLmNoaWxkcmVuKWZvcihlPTAscj1uLmxlbmd0aDtlPHI7KytlKW8ucHVzaChuW2VdKTtmb3IoO2k9dS5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sX2c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGZ1bmN0aW9uKG4pe2Zvcih2YXIgZT0rdChuLmRhdGEpfHwwLHI9bi5jaGlsZHJlbixpPXImJnIubGVuZ3RoOy0taT49MDspZSs9cltpXS52YWx1ZTtuLnZhbHVlPWV9KX0seWc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiZuLmNoaWxkcmVuLnNvcnQodCl9KX0sZ2c9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMsZT1DbyhuLHQpLHI9W25dO24hPT1lOyluPW4ucGFyZW50LHIucHVzaChuKTtmb3IodmFyIGk9ci5sZW5ndGg7dCE9PWU7KXIuc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiByfSxtZz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLG49W3RdO3Q9dC5wYXJlbnQ7KW4ucHVzaCh0KTtyZXR1cm4gbn0seGc9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3QucHVzaChuKX0pLHR9LGJnPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihuKXtuLmNoaWxkcmVufHx0LnB1c2gobil9KSx0fSx3Zz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1bXTtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKGUpe2UhPT10JiZuLnB1c2goe3NvdXJjZTplLnBhcmVudCx0YXJnZXQ6ZX0pfSksbn07VW8ucHJvdG90eXBlPXpvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sZWFjaDpwZyxlYWNoQWZ0ZXI6dmcsZWFjaEJlZm9yZTpkZyxzdW06X2csc29ydDp5ZyxwYXRoOmdnLGFuY2VzdG9yczptZyxkZXNjZW5kYW50czp4ZyxsZWF2ZXM6YmcsbGlua3M6d2csY29weTpQb307dmFyIE1nPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPSh0PXQuc2xpY2UoKSkubGVuZ3RoLHI9bnVsbCxpPXI7ZTspe3ZhciBvPW5ldyBEbyh0W2UtMV0pO2k9aT9pLm5leHQ9bzpyPW8sdFtuXT10Wy0tZV19cmV0dXJue2hlYWQ6cix0YWlsOml9fSxUZz1mdW5jdGlvbih0KXtyZXR1cm4gRm8oTWcodCksW10pfSxOZz1mdW5jdGlvbih0KXtyZXR1cm4gV28odCksdH0sa2c9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxTZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQueD1lLzIsdC55PXIvMixuP3QuZWFjaEJlZm9yZShRbyhuKSkuZWFjaEFmdGVyKEtvKGksLjUpKS5lYWNoQmVmb3JlKHR1KDEpKTp0LmVhY2hCZWZvcmUoUW8oSm8pKS5lYWNoQWZ0ZXIoS28oR28sMSkpLmVhY2hBZnRlcihLbyhpLHQuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZSh0dShNYXRoLm1pbihlLHIpLygyKnQucikpKSx0fXZhciBuPW51bGwsZT0xLHI9MSxpPUdvO3JldHVybiB0LnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0kbyhlKSx0KTpufSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K25bMF0scj0rblsxXSx0KTpbZSxyXX0sdC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246a2coK24pLHQpOml9LHR9LEFnPWZ1bmN0aW9uKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX0sRWc9ZnVuY3Rpb24odCxuLGUscixpKXtmb3IodmFyIG8sdT10LmNoaWxkcmVuLGE9LTEsYz11Lmxlbmd0aCxzPXQudmFsdWUmJihyLW4pL3QudmFsdWU7KythPGM7KW89dVthXSxvLnkwPWUsby55MT1pLG8ueDA9bixvLngxPW4rPW8udmFsdWUqc30sQ2c9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciB1PXQuaGVpZ2h0KzE7cmV0dXJuIHQueDA9dC55MD1pLHQueDE9ZSx0LnkxPXIvdSx0LmVhY2hCZWZvcmUobihyLHUpKSxvJiZ0LmVhY2hCZWZvcmUoQWcpLHR9ZnVuY3Rpb24gbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZFZyhlLGUueDAsdCooZS5kZXB0aCsxKS9uLGUueDEsdCooZS5kZXB0aCsyKS9uKTt2YXIgcj1lLngwLG89ZS55MCx1PWUueDEtaSxhPWUueTEtaTt1PHImJihyPXU9KHIrdSkvMiksYTxvJiYobz1hPShvK2EpLzIpLGUueDA9cixlLnkwPW8sZS54MT11LGUueTE9YX19dmFyIGU9MSxyPTEsaT0wLG89ITE7cmV0dXJuIHQucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFuLHQpOm99LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rblswXSxyPStuWzFdLHQpOltlLHJdfSx0LnBhZGRpbmc9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K24sdCk6aX0sdH0semc9IiQiLFBnPXtkZXB0aDotMX0scWc9e30sTGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciByLGksbyx1LGEsYyxzLGY9dC5sZW5ndGgsbD1uZXcgQXJyYXkoZiksaD17fTtmb3IoaT0wO2k8ZjsrK2kpcj10W2ldLGE9bFtpXT1uZXcgVW8ociksbnVsbCE9KGM9bihyLGksdCkpJiYoYys9IiIpJiYocz16ZysoYS5pZD1jKSxoW3NdPXMgaW4gaD9xZzphKTtmb3IoaT0wO2k8ZjsrK2kpaWYoYT1sW2ldLGM9ZSh0W2ldLGksdCksbnVsbCE9YyYmKGMrPSIiKSl7aWYodT1oW3pnK2NdLCF1KXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitjKTtpZih1PT09cWcpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIrYyk7dS5jaGlsZHJlbj91LmNoaWxkcmVuLnB1c2goYSk6dS5jaGlsZHJlbj1bYV0sYS5wYXJlbnQ9dX1lbHNle2lmKG8pdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO289YX1pZighbyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihvLnBhcmVudD1QZyxvLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tZn0pLmVhY2hCZWZvcmUoUm8pLG8ucGFyZW50PW51bGwsZj4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gb312YXIgbj1udSxlPWV1O3JldHVybiB0LmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVpvKGUpLHQpOm59LHQucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Wm8obiksdCk6ZX0sdH07c3UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVW8ucHJvdG90eXBlKTt2YXIgUmc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciByPWZ1KHQpO2lmKHIuZWFjaEFmdGVyKG4pLHIucGFyZW50Lm09LXIueixyLmVhY2hCZWZvcmUoZSksYyl0LmVhY2hCZWZvcmUoaSk7ZWxzZXt2YXIgcz10LGY9dCxsPXQ7dC5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QueDxzLngmJihzPXQpLHQueD5mLngmJihmPXQpLHQuZGVwdGg+bC5kZXB0aCYmKGw9dCl9KTt2YXIgaD1zPT09Zj8xOm8ocyxmKS8yLHA9aC1zLngsZD11LyhmLngraCtwKSx2PWEvKGwuZGVwdGh8fDEpO3QuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng9KHQueCtwKSpkLHQueT10LmRlcHRoKnZ9KX1yZXR1cm4gdH1mdW5jdGlvbiBuKHQpe3ZhciBuPXQuY2hpbGRyZW4sZT10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9lW3QuaS0xXTpudWxsO2lmKG4pe2F1KHQpO3ZhciB1PShuWzBdLnorbltuLmxlbmd0aC0xXS56KS8yO2k/KHQuej1pLnorbyh0Ll8saS5fKSx0Lm09dC56LXUpOnQuej11fWVsc2UgaSYmKHQuej1pLnorbyh0Ll8saS5fKSk7dC5wYXJlbnQuQT1yKHQsaSx0LnBhcmVudC5BfHxlWzBdKX1mdW5jdGlvbiBlKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiByKHQsbixlKXtpZihuKXtmb3IodmFyIHIsaT10LHU9dCxhPW4sYz1pLnBhcmVudC5jaGlsZHJlblswXSxzPWkubSxmPXUubSxsPWEubSxoPWMubTthPW91KGEpLGk9aXUoaSksYSYmaTspYz1pdShjKSx1PW91KHUpLHUuYT10LHI9YS56K2wtaS56LXMrbyhhLl8saS5fKSxyPjAmJih1dShjdShhLHQsZSksdCxyKSxzKz1yLGYrPXIpLGwrPWEubSxzKz1pLm0saCs9Yy5tLGYrPXUubTthJiYhb3UodSkmJih1LnQ9YSx1Lm0rPWwtZiksaSYmIWl1KGMpJiYoYy50PWksYy5tKz1zLWgsZT10KX1yZXR1cm4gZX1mdW5jdGlvbiBpKHQpe3QueCo9dSx0Lnk9dC5kZXB0aCphfXZhciBvPXJ1LHU9MSxhPTEsYz1udWxsO3JldHVybiB0LnNlcGFyYXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bix0KTpvfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ITEsdT0rblswXSxhPStuWzFdLHQpOmM/bnVsbDpbdSxhXX0sdC5ub2RlU2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0hMCx1PStuWzBdLGE9K25bMV0sdCk6Yz9bdSxhXTpudWxsfSx0fSxVZz1mdW5jdGlvbih0LG4sZSxyLGkpe2Zvcih2YXIgbyx1PXQuY2hpbGRyZW4sYT0tMSxjPXUubGVuZ3RoLHM9dC52YWx1ZSYmKGktZSkvdC52YWx1ZTsrK2E8Yzspbz11W2FdLG8ueDA9bixvLngxPXIsby55MD1lLG8ueTE9ZSs9by52YWx1ZSpzfSxEZz0oMStNYXRoLnNxcnQoNSkpLzIsT2c9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7bHUobix0LGUscixpLG8pfXJldHVybiBlLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiB0KChuPStuKT4xP246MSl9LGV9KERnKSxGZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9aSx0LnkxPW8sdC5lYWNoQmVmb3JlKG4pLHU9WzBdLHImJnQuZWFjaEJlZm9yZShBZyksdH1mdW5jdGlvbiBuKHQpe3ZhciBuPXVbdC5kZXB0aF0scj10LngwK24saT10LnkwK24sbz10LngxLW4saD10LnkxLW47bzxyJiYocj1vPShyK28pLzIpLGg8aSYmKGk9aD0oaStoKS8yKSx0LngwPXIsdC55MD1pLHQueDE9byx0LnkxPWgsdC5jaGlsZHJlbiYmKG49dVt0LmRlcHRoKzFdPWEodCkvMixyKz1sKHQpLW4saSs9Yyh0KS1uLG8tPXModCktbixoLT1mKHQpLW4sbzxyJiYocj1vPShyK28pLzIpLGg8aSYmKGk9aD0oaStoKS8yKSxlKHQscixpLG8saCkpfXZhciBlPU9nLHI9ITEsaT0xLG89MSx1PVswXSxhPUdvLGM9R28scz1HbyxmPUdvLGw9R287cmV0dXJuIHQucm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISFuLHQpOnJ9LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rblswXSxvPStuWzFdLHQpOltpLG9dfSx0LnRpbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Wm8obiksdCk6ZX0sdC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QucGFkZGluZ0lubmVyKG4pLnBhZGRpbmdPdXRlcihuKTp0LnBhZGRpbmdJbm5lcigpfSx0LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmtnKCtuKSx0KTphfSx0LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LnBhZGRpbmdUb3AobikucGFkZGluZ1JpZ2h0KG4pLnBhZGRpbmdCb3R0b20obikucGFkZGluZ0xlZnQobik6dC5wYWRkaW5nVG9wKCl9LHQucGFkZGluZ1RvcD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmtnKCtuKSx0KTpjfSx0LnBhZGRpbmdSaWdodD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmtnKCtuKSx0KTpzfSx0LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjprZygrbiksdCk6Zn0sdC5wYWRkaW5nTGVmdD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmtnKCtuKSx0KTpsfSx0fSxJZz1mdW5jdGlvbih0LG4sZSxyLGkpe2Z1bmN0aW9uIG8odCxuLGUscixpLHUsYSl7aWYodD49bi0xKXt2YXIgcz1jW3RdO3JldHVybiBzLngwPXIscy55MD1pLHMueDE9dSxzLnkxPWEsdm9pZCAwfWZvcih2YXIgbD1mW3RdLGg9ZS8yK2wscD10KzEsZD1uLTE7cDxkOyl7dmFyIHY9cCtkPj4+MTtmW3ZdPGg/cD12KzE6ZD12fXZhciBfPWZbcF0tbCx5PWUtXztpZihhLWk+dS1yKXt2YXIgZz0oaSp5K2EqXykvZTtvKHQscCxfLHIsaSx1LGcpLG8ocCxuLHkscixnLHUsYSl9ZWxzZXt2YXIgbT0ocip5K3UqXykvZTtvKHQscCxfLHIsaSxtLGEpLG8ocCxuLHksbSxpLHUsYSl9fXZhciB1LGEsYz10LmNoaWxkcmVuLHM9Yy5sZW5ndGgsZj1uZXcgQXJyYXkocysxKTtmb3IoZlswXT1hPXU9MDt1PHM7Kyt1KWZbdSsxXT1hKz1jW3VdLnZhbHVlO28oMCxzLHQudmFsdWUsbixlLHIsaSl9LFlnPWZ1bmN0aW9uKHQsbixlLHIsaSl7KDEmdC5kZXB0aD9VZzpFZykodCxuLGUscixpKX0sQmc9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQsZSxyLGksbyl7aWYoKHU9dC5fc3F1YXJpZnkpJiZ1LnJhdGlvPT09bilmb3IodmFyIHUsYSxjLHMsZixsPS0xLGg9dS5sZW5ndGgscD10LnZhbHVlOysrbDxoOyl7Zm9yKGE9dVtsXSxjPWEuY2hpbGRyZW4scz1hLnZhbHVlPTAsZj1jLmxlbmd0aDtzPGY7KytzKWEudmFsdWUrPWNbc10udmFsdWU7YS5kaWNlP0VnKGEsZSxyLGkscis9KG8tcikqYS52YWx1ZS9wKTpVZyhhLGUscixlKz0oaS1lKSphLnZhbHVlL3AsbykscC09YS52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PXU9bHUobix0LGUscixpLG8pLHUucmF0aW89bn1yZXR1cm4gZS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxlfShEZyksamc9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKCl7dmFyIGUsaSxvPXIubGVuZ3RoLHU9MCxhPTA7Zm9yKGU9MDtlPG87KytlKWk9cltlXSx1Kz1pLngsYSs9aS55O2Zvcih1PXUvby10LGE9YS9vLW4sZT0wO2U8bzsrK2UpaT1yW2VdLGkueC09dSxpLnktPWF9dmFyIHI7cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PW4mJihuPTApLGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXR9LGUueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rbixlKTp0fSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sZX0sSGc9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxYZz1mdW5jdGlvbigpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX0sVmc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbigpe2Z1bmN0aW9uIHQodCxlLHIsaSxvKXt2YXIgYT10LmRhdGEscD10LnIsZD1sK3A7e2lmKCFhKXJldHVybiBlPnMrZHx8aTxzLWR8fHI+ZitkfHxvPGYtZDtpZihhLmluZGV4Pm4pe3ZhciB2PXMtYS54LWEudngsXz1mLWEueS1hLnZ5LHk9dip2K18qXzt5PGQqZCYmKDA9PT12JiYodj1YZygpLHkrPXYqdiksMD09PV8mJihfPVhnKCkseSs9XypfKSx5PShkLSh5PU1hdGguc3FydCh5KSkpL3kqdSxjLnZ4Kz0odio9eSkqKGQ9KHAqPXApLyhoK3ApKSxjLnZ5Kz0oXyo9eSkqZCxhLnZ4LT12KihkPTEtZCksYS52eS09XypkKX19fWZvcih2YXIgbixyLGMscyxmLGwsaCxwPWkubGVuZ3RoLGQ9MDtkPGE7KytkKWZvcihyPUkoaSxodSxwdSkudmlzaXRBZnRlcihlKSxuPTA7bjxwOysrbiljPWlbbl0sbD1vW25dLGg9bCpsLHM9Yy54K2MudngsZj1jLnkrYy52eSxyLnZpc2l0KHQpfWZ1bmN0aW9uIGUodCl7aWYodC5kYXRhKXJldHVybiB0LnI9b1t0LmRhdGEuaW5kZXhdO2Zvcih2YXIgbj10LnI9MDtuPDQ7KytuKXRbbl0mJnRbbl0ucj50LnImJih0LnI9dFtuXS5yKX1mdW5jdGlvbiByKCl7aWYoaSl7dmFyIG4sZT1pLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pb1tuXT0rdChpW25dLG4saSl9fXZhciBpLG8sdT0xLGE9MTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SGcobnVsbD09dD8xOit0KSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxyKCl9LG4uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxuKTphfSxuLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LG4pOnV9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6SGcoK2UpLHIoKSxuKTp0fSxufSxXZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiAxL01hdGgubWluKGZbdC5zb3VyY2UuaW5kZXhdLGZbdC50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBlKG4pe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTx2OysrZSlmb3IodmFyIGksbyx1LHMsZixoLHAsZD0wO2Q8cjsrK2QpaT10W2RdLG89aS5zb3VyY2UsdT1pLnRhcmdldCxzPXUueCt1LnZ4LW8ueC1vLnZ4fHxYZygpLGY9dS55K3Uudnktby55LW8udnl8fFhnKCksaD1NYXRoLnNxcnQocypzK2YqZiksaD0oaC1jW2RdKS9oKm4qYVtkXSxzKj1oLGYqPWgsdS52eC09cyoocD1sW2RdKSx1LnZ5LT1mKnAsby52eCs9cyoocD0xLXApLG8udnkrPWYqcH1mdW5jdGlvbiByKCl7aWYocyl7dmFyIG4sZSxyPXMubGVuZ3RoLHA9dC5sZW5ndGgsZD1vKHMsaCk7Zm9yKG49MCxmPW5ldyBBcnJheShyKTtuPHI7KytuKWZbbl09MDtmb3Iobj0wO248cDsrK24pZT10W25dLGUuaW5kZXg9biwib2JqZWN0IiE9dHlwZW9mIGUuc291cmNlJiYoZS5zb3VyY2U9dnUoZCxlLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgZS50YXJnZXQmJihlLnRhcmdldD12dShkLGUudGFyZ2V0KSksKytmW2Uuc291cmNlLmluZGV4XSwrK2ZbZS50YXJnZXQuaW5kZXhdO2ZvcihuPTAsbD1uZXcgQXJyYXkocCk7bjxwOysrbillPXRbbl0sbFtuXT1mW2Uuc291cmNlLmluZGV4XS8oZltlLnNvdXJjZS5pbmRleF0rZltlLnRhcmdldC5pbmRleF0pO2E9bmV3IEFycmF5KHApLGkoKSxjPW5ldyBBcnJheShwKSx1KCl9fWZ1bmN0aW9uIGkoKXtpZihzKWZvcih2YXIgbj0wLGU9dC5sZW5ndGg7bjxlOysrbilhW25dPStwKHRbbl0sbix0KX1mdW5jdGlvbiB1KCl7aWYocylmb3IodmFyIG49MCxlPXQubGVuZ3RoO248ZTsrK24pY1tuXT0rZCh0W25dLG4sdCl9dmFyIGEsYyxzLGYsbCxoPWR1LHA9bixkPUhnKDMwKSx2PTE7cmV0dXJuIG51bGw9PXQmJih0PVtdKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cz10LHIoKX0sZS5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLHIoKSxlKTp0fSxlLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQsZSk6aH0sZS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PSt0LGUpOnZ9LGUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIZygrdCksaSgpLGUpOnB9LGUuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIZygrdCksdSgpLGUpOmR9LGV9LCRnPTEwLFpnPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxHZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7ZSgpLGQuY2FsbCgidGljayIsdSksYTxjJiYocC5zdG9wKCksZC5jYWxsKCJlbmQiLHUpKX1mdW5jdGlvbiBlKCl7dmFyIG4sZSxyPXQubGVuZ3RoO2ZvcihhKz0oZi1hKSpzLGguZWFjaChmdW5jdGlvbih0KXt0KGEpfSksbj0wO248cjsrK24pZT10W25dLG51bGw9PWUuZng/ZS54Kz1lLnZ4Kj1sOihlLng9ZS5meCxlLnZ4PTApLG51bGw9PWUuZnk/ZS55Kz1lLnZ5Kj1sOihlLnk9ZS5meSxlLnZ5PTApfWZ1bmN0aW9uIHIoKXtmb3IodmFyIG4sZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl7aWYobj10W2VdLG4uaW5kZXg9ZSxpc05hTihuLngpfHxpc05hTihuLnkpKXt2YXIgaT0kZypNYXRoLnNxcnQoZSksbz1lKlpnO24ueD1pKk1hdGguY29zKG8pLG4ueT1pKk1hdGguc2luKG8pfShpc05hTihuLnZ4KXx8aXNOYU4obi52eSkpJiYobi52eD1uLnZ5PTApfX1mdW5jdGlvbiBpKG4pe3JldHVybiBuLmluaXRpYWxpemUmJm4uaW5pdGlhbGl6ZSh0KSxufXZhciB1LGE9MSxjPS4wMDEscz0xLU1hdGgucG93KGMsMS8zMDApLGY9MCxsPS42LGg9bygpLHA9Vm4obiksZD1QbigidGljayIsImVuZCIpO3JldHVybiBudWxsPT10JiYodD1bXSkscigpLHU9e3RpY2s6ZSxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHAucmVzdGFydChuKSx1fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHAuc3RvcCgpLHV9LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scigpLGguZWFjaChpKSx1KTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCx1KTphfSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCx1KTpjfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHUpOitzfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCx1KTpmfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTEtdCx1KToxLWx9LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9oLnJlbW92ZSh0KTpoLnNldCh0LGkobikpLHUpOmguZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKG4sZSxyKXt2YXIgaSxvLHUsYSxjLHM9MCxmPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIscz0wO3M8ZjsrK3MpYT10W3NdLGk9bi1hLngsbz1lLWEueSx1PWkqaStvKm8sdTxyJiYoYz1hLHI9dSk7cmV0dXJuIGN9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZC5vbih0LG4pLHUpOmQub24odCl9fX0sSmc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBuLGE9aS5sZW5ndGgsYz1JKGksX3UseXUpLnZpc2l0QWZ0ZXIoZSk7Zm9yKHU9dCxuPTA7bjxhOysrbilvPWlbbl0sYy52aXNpdChyKX1mdW5jdGlvbiBuKCl7aWYoaSl7dmFyIHQsbj1pLmxlbmd0aDtmb3IoYT1uZXcgQXJyYXkobiksdD0wO3Q8bjsrK3QpYVt0XT0rYyhpW3RdLHQsaSl9fWZ1bmN0aW9uIGUodCl7dmFyIG4sZSxyLGksbyx1PTA7aWYodC5sZW5ndGgpe2ZvcihyPWk9bz0wO288NDsrK28pKG49dFtvXSkmJihlPW4udmFsdWUpJiYodSs9ZSxyKz1lKm4ueCxpKz1lKm4ueSk7dC54PXIvdSx0Lnk9aS91fWVsc2V7bj10LG4ueD1uLmRhdGEueCxuLnk9bi5kYXRhLnk7ZG8gdSs9YVtuLmRhdGEuaW5kZXhdO3doaWxlKG49bi5uZXh0KX10LnZhbHVlPXV9ZnVuY3Rpb24gcih0LG4sZSxyKXtpZighdC52YWx1ZSlyZXR1cm4hMDt2YXIgaT10Lngtby54LGM9dC55LW8ueSxoPXItbixwPWkqaStjKmM7aWYoaCpoL2w8cClyZXR1cm4gcDxmJiYoMD09PWkmJihpPVhnKCkscCs9aSppKSwwPT09YyYmKGM9WGcoKSxwKz1jKmMpLHA8cyYmKHA9TWF0aC5zcXJ0KHMqcCkpLG8udngrPWkqdC52YWx1ZSp1L3Asby52eSs9Yyp0LnZhbHVlKnUvcCksITA7aWYoISh0Lmxlbmd0aHx8cD49Zikpeyh0LmRhdGEhPT1vfHx0Lm5leHQpJiYoMD09PWkmJihpPVhnKCkscCs9aSppKSwwPT09YyYmKGM9WGcoKSxwKz1jKmMpLHA8cyYmKHA9TWF0aC5zcXJ0KHMqcCkpKTtkbyB0LmRhdGEhPT1vJiYoaD1hW3QuZGF0YS5pbmRleF0qdS9wLG8udngrPWkqaCxvLnZ5Kz1jKmgpO3doaWxlKHQ9dC5uZXh0KX19dmFyIGksbyx1LGEsYz1IZygtMzApLHM9MSxmPTEvMCxsPS44MTtyZXR1cm4gdC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxuKCl9LHQuc3RyZW5ndGg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpIZygrZSksbigpLHQpOmN9LHQuZGlzdGFuY2VNaW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bipuLHQpOk1hdGguc3FydChzKX0sdC5kaXN0YW5jZU1heD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uKm4sdCk6TWF0aC5zcXJ0KGYpfSx0LnRoZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4qbix0KTpNYXRoLnNxcnQobCl9LHR9LFFnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBuLGU9MCx1PXIubGVuZ3RoO2U8dTsrK2Upbj1yW2VdLG4udngrPShvW2VdLW4ueCkqaVtlXSp0fWZ1bmN0aW9uIGUoKXtpZihyKXt2YXIgbixlPXIubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilpW25dPWlzTmFOKG9bbl09K3QocltuXSxuLHIpKT8wOit1KHJbbl0sbixyKX19dmFyIHIsaSxvLHU9SGcoLjEpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1IZyhudWxsPT10PzA6K3QpKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGUoKX0sbi5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhnKCt0KSxlKCksbik6dX0sbi54PWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiByP3I6SGcoK3IpLGUoKSxuKTp0fSxufSxLZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgbixlPTAsdT1yLmxlbmd0aDtlPHU7KytlKW49cltlXSxuLnZ5Kz0ob1tlXS1uLnkpKmlbZV0qdH1mdW5jdGlvbiBlKCl7aWYocil7dmFyIG4sZT1yLmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24paVtuXT1pc05hTihvW25dPSt0KHJbbl0sbixyKSk/MDordShyW25dLG4scil9fXZhciByLGksbyx1PUhnKC4xKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SGcobnVsbD09dD8wOit0KSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxlKCl9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIZygrdCksZSgpLG4pOnV9LG4ueT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOkhnKCtyKSxlKCksbik6dH0sbn0sdG09ZnVuY3Rpb24oKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sbm09ZnVuY3Rpb24odCl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT1neSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLHRtLCEwKTsib25zZWxlY3RzdGFydCJpbiBuP2Uub24oInNlbGVjdHN0YXJ0LmRyYWciLHRtLCEwKToobi5fX25vc2VsZWN0PW4uc3R5bGUuTW96VXNlclNlbGVjdCxuLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX0sZW09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTt4dS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgcm09ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQpe3Qub24oIm1vdXNlZG93bi5kcmFnIixlKS5vbigidG91Y2hzdGFydC5kcmFnIixvKS5vbigidG91Y2htb3ZlLmRyYWciLHUpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGEpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gZSgpe2lmKCFmJiZsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG49YygibW91c2UiLGguYXBwbHkodGhpcyxhcmd1bWVudHMpLFVfLHRoaXMsYXJndW1lbnRzKTtuJiYoZ3kodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLHIsITApLm9uKCJtb3VzZXVwLmRyYWciLGksITApLG5tKHQuZXZlbnQudmlldyksZ3UoKSxzPSExLG4oInN0YXJ0IikpfX1mdW5jdGlvbiByKCl7dG0oKSxzPSEwLGQubW91c2UoImRyYWciKX1mdW5jdGlvbiBpKCl7Z3kodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxtdSh0LmV2ZW50LnZpZXcscyksdG0oKSxkLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBvKCl7aWYobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9aC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1yLmxlbmd0aDtmb3Iobj0wO248bzsrK24pKGU9YyhyW25dLmlkZW50aWZpZXIsaSx4eSx0aGlzLGFyZ3VtZW50cykpJiYoZ3UoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gdSgpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKG49MDtuPGk7KytuKShlPWRbcltuXS5pZGVudGlmaWVyXSkmJih0bSgpLGUoImRyYWciKSl9ZnVuY3Rpb24gYSgpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKGYmJmNsZWFyVGltZW91dChmKSxmPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmPW51bGx9LDUwMCksbj0wO248aTsrK24pKGU9ZFtyW25dLmlkZW50aWZpZXJdKSYmKGd1KCksZSgiZW5kIikpfWZ1bmN0aW9uIGMoZSxyLGksbyx1KXt2YXIgYSxjLHMsZj1pKHIsZSksbD12LmNvcHkoKTtpZihYcihuZXcgeHUobiwiYmVmb3Jlc3RhcnQiLGEsZSxfLGZbMF0sZlsxXSwwLDAsbCksZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHQuZXZlbnQuc3ViamVjdD1hPXAuYXBwbHkobyx1KSkmJihjPWEueC1mWzBdfHwwLHM9YS55LWZbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIHQoaCl7dmFyIHAsdj1mO3N3aXRjaChoKXtjYXNlInN0YXJ0IjpkW2VdPXQscD1fKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBkW2VdLC0tXztjYXNlImRyYWciOmY9aShyLGUpLHA9X31YcihuZXcgeHUobixoLGEsZSxwLGZbMF0rYyxmWzFdK3MsZlswXS12WzBdLGZbMV0tdlsxXSxsKSxsLmFwcGx5LGwsW2gsbyx1XSl9fXZhciBzLGYsbD1idSxoPXd1LHA9TXUsZD17fSx2PVBuKCJzdGFydCIsImRyYWciLCJlbmQiKSxfPTA7cmV0dXJuIG4uZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZW0oISF0KSxuKTpsfSxuLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVtKHQpLG4pOmh9LG4uc3ViamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmVtKHQpLG4pOnB9LG4ub249ZnVuY3Rpb24oKXt2YXIgdD12Lm9uLmFwcGx5KHYsYXJndW1lbnRzKTtyZXR1cm4gdD09PXY/bjp0fSxufSxpbT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2t1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6a3UsaW5zZXJ0OmZ1bmN0aW9uKHQsbil7dmFyIGUscixpO2lmKHQpe2lmKG4uUD10LG4uTj10Lk4sdC5OJiYodC5OLlA9biksdC5OPW4sdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9bn1lbHNlIHQuUj1uO2U9dH1lbHNlIHRoaXMuXz8odD1DdSh0aGlzLl8pLG4uUD1udWxsLG4uTj10LHQuUD10Lkw9bixlPXQpOihuLlA9bi5OPW51bGwsdGhpcy5fPW4sZT1udWxsKTtmb3Iobi5MPW4uUj1udWxsLG4uVT1lLG4uQz0hMCx0PW47ZSYmZS5DOylyPWUuVSxlPT09ci5MPyhpPXIuUixpJiZpLkM/KGUuQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1lLlImJihBdSh0aGlzLGUpLHQ9ZSxlPXQuVSksZS5DPSExLHIuQz0hMCxFdSh0aGlzLHIpKSk6KGk9ci5MLGkmJmkuQz8oZS5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PWUuTCYmKEV1KHRoaXMsZSksdD1lLGU9dC5VKSxlLkM9ITEsci5DPSEwLEF1KHRoaXMscikpKSxlPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIG4sZSxyLGk9dC5VLG89dC5MLHU9dC5SO2lmKGU9bz91P0N1KHUpOm86dSxpP2kuTD09PXQ/aS5MPWU6aS5SPWU6dGhpcy5fPWUsbyYmdT8ocj1lLkMsZS5DPXQuQyxlLkw9byxvLlU9ZSxlIT09dT8oaT1lLlUsZS5VPXQuVSx0PWUuUixpLkw9dCxlLlI9dSx1LlU9ZSk6KGUuVT1pLGk9ZSx0PWUuUikpOihyPXQuQyx0PWUpLHQmJih0LlU9aSksIXIpe2lmKHQmJnQuQylyZXR1cm4gdm9pZCh0LkM9ITEpO2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYobj1pLlIsbi5DJiYobi5DPSExLGkuQz0hMCxBdSh0aGlzLGkpLG49aS5SKSxuLkwmJm4uTC5DfHxuLlImJm4uUi5DKXtuLlImJm4uUi5DfHwobi5MLkM9ITEsbi5DPSEwLEV1KHRoaXMsbiksbj1pLlIpLG4uQz1pLkMsaS5DPW4uUi5DPSExLEF1KHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYobj1pLkwsbi5DJiYobi5DPSExLGkuQz0hMCxFdSh0aGlzLGkpLG49aS5MKSxuLkwmJm4uTC5DfHxuLlImJm4uUi5DKXtuLkwmJm4uTC5DfHwobi5SLkM9ITEsbi5DPSEwLEF1KHRoaXMsbiksbj1pLkwpLG4uQz1pLkMsaS5DPW4uTC5DPSExLEV1KHRoaXMsaSksdD10aGlzLl87YnJlYWt9bi5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgb20sdW0sYW0sY20sc20sZm09W10sbG09W10saG09MWUtNixwbT0xZS0xMjtuYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5hLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24obil7dmFyIGU9bi5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBGdShuLHRbZV0pfSk7cmV0dXJuIGUuZGF0YT1uLnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciB0PVtdLG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBpLG89ZS5zaXRlLHU9ZS5oYWxmZWRnZXMsYT0tMSxjPXUubGVuZ3RoLHM9blt1W2MtMV1dLGY9cy5sZWZ0PT09bz9zLnJpZ2h0OnMubGVmdDsrK2E8YzspaT1mLHM9blt1W2FdXSxmPXMubGVmdD09PW8/cy5yaWdodDpzLmxlZnQsaSYmZiYmcjxpLmluZGV4JiZyPGYuaW5kZXgmJkt1KG8saSxmKTwwJiZ0LnB1c2goW28uZGF0YSxpLmRhdGEsZi5kYXRhXSl9KSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24odCxuLGUpe3ZhciByLGk9dGhpcyxvPWkuX2ZvdW5kfHwwLHU9aS5jZWxsc1tvXXx8aS5jZWxsc1tvPTBdLGE9dC11LnNpdGVbMF0sYz1uLXUuc2l0ZVsxXSxzPWEqYStjKmM7ZG8gdT1pLmNlbGxzW3I9b10sbz1udWxsLHUuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9aS5lZGdlc1tlXSxhPXIubGVmdDtpZihhIT09dS5zaXRlJiZhfHwoYT1yLnJpZ2h0KSl7dmFyIGM9dC1hWzBdLGY9bi1hWzFdLGw9YypjK2YqZjtsPHMmJihzPWwsbz1hLmluZGV4KX19KTt3aGlsZShudWxsIT09byk7cmV0dXJuIGkuX2ZvdW5kPXIsbnVsbD09ZXx8czw9ZSplP3Uuc2l0ZTpudWxsfX07dmFyIGRtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gbmV3IG5hKHQubWFwKGZ1bmN0aW9uKHIsaSl7dmFyIG89W01hdGgucm91bmQobihyLGksdCkvaG0pKmhtLE1hdGgucm91bmQoZShyLGksdCkvaG0pKmhtXTtyZXR1cm4gby5pbmRleD1pLG8uZGF0YT1yLG99KSxyKX12YXIgbj1UdSxlPU51LHI9bnVsbDtyZXR1cm4gdC5wb2x5Z29ucz1mdW5jdGlvbihuKXtyZXR1cm4gdChuKS5wb2x5Z29ucygpfSx0LmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4pLmxpbmtzKCl9LHQudHJpYW5nbGVzPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4pLnRyaWFuZ2xlcygpfSx0Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTppbSgrZSksdCk6bn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246aW0oK24pLHQpOmV9LHQuZXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/bnVsbDpbWytuWzBdWzBdLCtuWzBdWzFdXSxbK25bMV1bMF0sK25bMV1bMV1dXSx0KTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09bj9udWxsOltbMCwwXSxbK25bMF0sK25bMV1dXSx0KTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LHR9LHZtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07cmEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyYSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/dGhpczpuZXcgcmEodGhpcy5rKnQsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LG4pe3JldHVybiAwPT09dCYwPT09bj90aGlzOm5ldyByYSh0aGlzLmssdGhpcy54K3RoaXMuayp0LHRoaXMueSt0aGlzLmsqbil9LGFwcGx5OmZ1bmN0aW9uKHQpe3JldHVyblt0WzBdKnRoaXMuayt0aGlzLngsdFsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24odCl7cmV0dXJuWyh0WzBdLXRoaXMueCkvdGhpcy5rLCh0WzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSxyZXNjYWxlWTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O3ZhciBfbT1uZXcgcmEoMSwwLDApO2lhLnByb3RvdHlwZT1yYS5wcm90b3R5cGU7dmFyIHltPWZ1bmN0aW9uKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGdtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0KXt0Lm9uKCJ3aGVlbC56b29tIixzKS5vbigibW91c2Vkb3duLnpvb20iLGYpLm9uKCJkYmxjbGljay56b29tIixsKS5vbigidG91Y2hzdGFydC56b29tIixoKS5vbigidG91Y2htb3ZlLnpvb20iLHApLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLGQpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikucHJvcGVydHkoIl9fem9vbSIsY2EpfWZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gbj1NYXRoLm1heChtLE1hdGgubWluKHgsbikpLG49PT10Lms/dDpuZXcgcmEobix0LngsdC55KX1mdW5jdGlvbiByKHQsbixlKXt2YXIgcj1uWzBdLWVbMF0qdC5rLGk9blsxXS1lWzFdKnQuaztyZXR1cm4gcj09PXQueCYmaT09PXQueT90Om5ldyByYSh0LmsscixpKX1mdW5jdGlvbiBpKHQsbil7dmFyIGU9TWF0aC5taW4oMCx0LmludmVydFgoblswXVswXSktYil8fE1hdGgubWF4KDAsdC5pbnZlcnRYKG5bMV1bMF0pLXcpLHI9TWF0aC5taW4oMCx0LmludmVydFkoblswXVsxXSktTSl8fE1hdGgubWF4KDAsdC5pbnZlcnRZKG5bMV1bMV0pLVQpO3JldHVybiBlfHxyP3QudHJhbnNsYXRlKGUscik6dH1mdW5jdGlvbiBvKHQpe3JldHVyblsoK3RbMF1bMF0rICt0WzFdWzBdKS8yLCgrdFswXVsxXSsgK3RbMV1bMV0pLzJdfWZ1bmN0aW9uIHUodCxuLGUpe3Qub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7YSh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXthKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMsaT1hKHQsciksdT1nLmFwcGx5KHQsciksYz1lfHxvKHUpLHM9TWF0aC5tYXgodVsxXVswXS11WzBdWzBdLHVbMV1bMV0tdVswXVsxXSksZj10Ll9fem9vbSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxyKTpuLGg9U3AoZi5pbnZlcnQoYykuY29uY2F0KHMvZi5rKSxsLmludmVydChjKS5jb25jYXQocy9sLmspKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMT09PXQpdD1sO2Vsc2V7dmFyIG49aCh0KSxlPXMvblsyXTt0PW5ldyByYShlLGNbMF0tblswXSplLGNbMV0tblsxXSplKX1pLnpvb20obnVsbCx0KX19KX1mdW5jdGlvbiBhKHQsbil7Zm9yKHZhciBlLHI9MCxpPWsubGVuZ3RoO3I8aTsrK3IpaWYoKGU9a1tyXSkudGhhdD09PXQpcmV0dXJuIGU7cmV0dXJuIG5ldyBjKHQsbil9ZnVuY3Rpb24gYyh0LG4pe3RoaXMudGhhdD10LHRoaXMuYXJncz1uLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD1nLmFwcGx5KHQsbil9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIG4oKXtvLndoZWVsPW51bGwsby5lbmQoKX1pZih5LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG89YSh0aGlzLGFyZ3VtZW50cyksdT10aGlzLl9fem9vbSxjPU1hdGgubWF4KG0sTWF0aC5taW4oeCx1LmsqTWF0aC5wb3coMiwtdC5ldmVudC5kZWx0YVkqKHQuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKS81MDApKSkscz1VXyh0aGlzKTtpZihvLndoZWVsKW8ubW91c2VbMF1bMF09PT1zWzBdJiZvLm1vdXNlWzBdWzFdPT09c1sxXXx8KG8ubW91c2VbMV09dS5pbnZlcnQoby5tb3VzZVswXT1zKSksY2xlYXJUaW1lb3V0KG8ud2hlZWwpO2Vsc2V7aWYodS5rPT09YylyZXR1cm47by5tb3VzZT1bcyx1LmludmVydChzKV0sUHkodGhpcyksby5zdGFydCgpfXltKCksby53aGVlbD1zZXRUaW1lb3V0KG4sRSksby56b29tKCJtb3VzZSIsaShyKGUodSxjKSxvLm1vdXNlWzBdLG8ubW91c2VbMV0pLG8uZXh0ZW50KSl9fWZ1bmN0aW9uIGYoKXtmdW5jdGlvbiBuKCl7eW0oKSxvLm1vdmVkPSEwLG8uem9vbSgibW91c2UiLGkocihvLnRoYXQuX196b29tLG8ubW91c2VbMF09VV8oby50aGF0KSxvLm1vdXNlWzFdKSxvLmV4dGVudCkpfWZ1bmN0aW9uIGUoKXt1Lm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLG11KHQuZXZlbnQudmlldyxvLm1vdmVkKSx5bSgpLG8uZW5kKCl9aWYoIV8mJnkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbz1hKHRoaXMsYXJndW1lbnRzKSx1PWd5KHQuZXZlbnQudmlldykub24oIm1vdXNlbW92ZS56b29tIixuLCEwKS5vbigibW91c2V1cC56b29tIixlLCEwKSxjPVVfKHRoaXMpO25tKHQuZXZlbnQudmlldyksb2EoKSxvLm1vdXNlPVtjLHRoaXMuX196b29tLmludmVydChjKV0sUHkodGhpcyksby5zdGFydCgpfX1mdW5jdGlvbiBsKCl7aWYoeS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBvPXRoaXMuX196b29tLGE9VV8odGhpcyksYz1vLmludmVydChhKSxzPW8uayoodC5ldmVudC5zaGlmdEtleT8uNToyKSxmPWkocihlKG8scyksYSxjKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7eW0oKSxOPjA/Z3kodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKE4pLmNhbGwodSxmLGEpOmd5KHRoaXMpLmNhbGwobi50cmFuc2Zvcm0sZil9fWZ1bmN0aW9uIGgoKXtpZih5LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4sZSxyLGk9YSh0aGlzLGFyZ3VtZW50cyksbz10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLHU9by5sZW5ndGg7Zm9yKG9hKCksbj0wO248dTsrK24pZT1vW25dLHI9eHkodGhpcyxvLGUuaWRlbnRpZmllcikscj1bcix0aGlzLl9fem9vbS5pbnZlcnQociksZS5pZGVudGlmaWVyXSxpLnRvdWNoMD9pLnRvdWNoMXx8KGkudG91Y2gxPXIpOmkudG91Y2gwPXI7cmV0dXJuIHYmJih2PWNsZWFyVGltZW91dCh2KSwhaS50b3VjaDEpPyhpLmVuZCgpLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKTp2b2lkKHQuZXZlbnQudG91Y2hlcy5sZW5ndGg9PT11JiYodj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dj1udWxsfSxBKSxQeSh0aGlzKSxpLnN0YXJ0KCkpKX19ZnVuY3Rpb24gcCgpe3ZhciBuLG8sdSxjLHM9YSh0aGlzLGFyZ3VtZW50cyksZj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGw9Zi5sZW5ndGg7Zm9yKHltKCksdiYmKHY9Y2xlYXJUaW1lb3V0KHYpKSxuPTA7bjxsOysrbilvPWZbbl0sdT14eSh0aGlzLGYsby5pZGVudGlmaWVyKSxzLnRvdWNoMCYmcy50b3VjaDBbMl09PT1vLmlkZW50aWZpZXI/cy50b3VjaDBbMF09dTpzLnRvdWNoMSYmcy50b3VjaDFbMl09PT1vLmlkZW50aWZpZXImJihzLnRvdWNoMVswXT11KTtpZihvPXMudGhhdC5fX3pvb20scy50b3VjaDEpe3ZhciBoPXMudG91Y2gwWzBdLHA9cy50b3VjaDBbMV0sZD1zLnRvdWNoMVswXSxfPXMudG91Y2gxWzFdLHk9KHk9ZFswXS1oWzBdKSp5Kyh5PWRbMV0taFsxXSkqeSxnPShnPV9bMF0tcFswXSkqZysoZz1fWzFdLXBbMV0pKmc7bz1lKG8sTWF0aC5zcXJ0KHkvZykpLHU9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl0sYz1bKHBbMF0rX1swXSkvMiwocFsxXStfWzFdKS8yXX1lbHNle2lmKCFzLnRvdWNoMClyZXR1cm47dT1zLnRvdWNoMFswXSxjPXMudG91Y2gwWzFdfXMuem9vbSgidG91Y2giLGkocihvLHUsYykscy5leHRlbnQpKX1mdW5jdGlvbiBkKCl7dmFyIG4sZSxyPWEodGhpcyxhcmd1bWVudHMpLGk9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxvPWkubGVuZ3RoO2ZvcihvYSgpLF8mJmNsZWFyVGltZW91dChfKSxfPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtfPW51bGx9LEEpLG49MDtuPG87KytuKWU9aVtuXSxyLnRvdWNoMCYmci50b3VjaDBbMl09PT1lLmlkZW50aWZpZXI/ZGVsZXRlIHIudG91Y2gwOnIudG91Y2gxJiZyLnRvdWNoMVsyXT09PWUuaWRlbnRpZmllciYmZGVsZXRlIHIudG91Y2gxO3IudG91Y2gxJiYhci50b3VjaDAmJihyLnRvdWNoMD1yLnRvdWNoMSxkZWxldGUgci50b3VjaDEpLHIudG91Y2gwfHxyLmVuZCgpfXZhciB2LF8seT11YSxnPWFhLG09MCx4PTEvMCxiPS14LHc9eCxNPWIsVD13LE49MjUwLGs9W10sUz1Qbigic3RhcnQiLCJ6b29tIiwiZW5kIiksQT01MDAsRT0xNTA7cmV0dXJuIG4udHJhbnNmb3JtPWZ1bmN0aW9uKHQsbil7dmFyIGU9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O2UucHJvcGVydHkoIl9fem9vbSIsY2EpLHQhPT1lP3UodCxuKTplLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXthKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKS5lbmQoKX0pfSxuLnNjYWxlQnk9ZnVuY3Rpb24odCxlKXtuLnNjYWxlVG8odCxmdW5jdGlvbigpe3ZhciB0PXRoaXMuX196b29tLmssbj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplO3JldHVybiB0Km59KX0sbi5zY2FsZVRvPWZ1bmN0aW9uKHQsdSl7bi50cmFuc2Zvcm0odCxmdW5jdGlvbigpe3ZhciB0PWcuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49dGhpcy5fX3pvb20sYT1vKHQpLGM9bi5pbnZlcnQoYSkscz0iZnVuY3Rpb24iPT10eXBlb2YgdT91LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp1O3JldHVybiBpKHIoZShuLHMpLGEsYyksdCl9KX0sbi50cmFuc2xhdGVCeT1mdW5jdGlvbih0LGUscil7bi50cmFuc2Zvcm0odCxmdW5jdGlvbigpe3JldHVybiBpKHRoaXMuX196b29tLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLCJmdW5jdGlvbiI9PXR5cGVvZiByP3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOnIpLGcuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxjLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSsrdGhpcy5hY3RpdmUmJih0aGlzLmluZGV4PWsucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09dCYmKHRoaXMubW91c2VbMV09bi5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gwWzFdPW4uaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDFbMV09bi5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPW4sdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0tLXRoaXMuYWN0aXZlJiYoay5zcGxpY2UodGhpcy5pbmRleCwxKSx0aGlzLmluZGV4PS0xLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7WHIobmV3IGVhKG4sdCx0aGlzLnRoYXQuX196b29tKSxTLmFwcGx5LFMsW3QsdGhpcy50aGF0LHRoaXMuYXJnc10pfX0sbi5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp2bSghIXQpLG4pOnl9LG4uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dm0oW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLG4pOmd9LG4uc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3RbMF0seD0rdFsxXSxuKTpbbSx4XX0sbi50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K3RbMF1bMF0sdz0rdFsxXVswXSxNPSt0WzBdWzFdLFQ9K3RbMV1bMV0sbik6W1tiLE1dLFt3LFRdXX0sbi5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj0rdCxuKTpOfSxuLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Uy5vbi5hcHBseShTLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1TP246dH0sbn0sbW09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSx4bT1mdW5jdGlvbih0LG4sZSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnNlbGVjdGlvbj1lfSxibT1mdW5jdGlvbigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSx3bT17bmFtZToiZHJhZyJ9LE1tPXtuYW1lOiJzcGFjZSJ9LFRtPXtuYW1lOiJoYW5kbGUifSxObT17bmFtZToiY2VudGVyIn0sa209e25hbWU6IngiLGhhbmRsZXM6WyJlIiwidyJdLm1hcChmYSksaW5wdXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCYmW1t0WzBdLG5bMF1bMV1dLFt0WzFdLG5bMV1bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVswXSx0WzFdWzBdXX19LFNtPXtuYW1lOiJ5IixoYW5kbGVzOlsibiIsInMiXS5tYXAoZmEpLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQmJltbblswXVswXSx0WzBdXSxbblsxXVswXSx0WzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMV0sdFsxXVsxXV19fSxBbT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZmEpLGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxFbT17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sQ209e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LHptPXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxQbT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxxbT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfSxMbT1mdW5jdGlvbigpe3JldHVybiBnYShBbSl9LFJtPU1hdGguY29zLFVtPU1hdGguc2luLERtPU1hdGguUEksT209RG0vMixGbT0yKkRtLEltPU1hdGgubWF4LFltPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbyx1LGEsYyxzLGYsbD10Lmxlbmd0aCxoPVtdLHA9T3MobCksZD1bXSx2PVtdLF89di5ncm91cHM9bmV3IEFycmF5KGwpLHk9bmV3IEFycmF5KGwqbCk7Zm9yKG89MCxzPS0xOysrczxsOyl7Zm9yKHU9MCxmPS0xOysrZjxsOyl1Kz10W3NdW2ZdO2gucHVzaCh1KSxkLnB1c2goT3MobCkpLG8rPXV9Zm9yKGUmJnAuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlKGhbdF0saFtuXSl9KSxyJiZkLmZvckVhY2goZnVuY3Rpb24obixlKXtuLnNvcnQoZnVuY3Rpb24obixpKXtyZXR1cm4gcih0W2VdW25dLHRbZV1baV0pfSl9KSxvPUltKDAsRm0tbipsKS9vLGM9bz9uOkZtL2wsdT0wLHM9LTE7KytzPGw7KXtmb3IoYT11LGY9LTE7KytmPGw7KXt2YXIgZz1wW3NdLG09ZFtnXVtmXSx4PXRbZ11bbV0sYj11LHc9dSs9eCpvO3lbbSpsK2ddPXtpbmRleDpnLHN1YmluZGV4Om0sc3RhcnRBbmdsZTpiLGVuZEFuZ2xlOncsdmFsdWU6eH19X1tnXT17aW5kZXg6ZyxzdGFydEFuZ2xlOmEsZW5kQW5nbGU6dSx2YWx1ZTpoW2ddfSx1Kz1jfWZvcihzPS0xOysrczxsOylmb3IoZj1zLTE7KytmPGw7KXt2YXIgTT15W2YqbCtzXSxUPXlbcypsK2ZdOyhNLnZhbHVlfHxULnZhbHVlKSYmdi5wdXNoKE0udmFsdWU8VC52YWx1ZT97c291cmNlOlQsdGFyZ2V0Ok19Ontzb3VyY2U6TSx0YXJnZXQ6VH0pfXJldHVybiBpP3Yuc29ydChpKTp2fXZhciBuPTAsZT1udWxsLHI9bnVsbCxpPW51bGw7cmV0dXJuIHQucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49SW0oMCxlKSx0KTpufSx0LnNvcnRHcm91cHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0LnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0KTpyfSx0LnNvcnRDaG9yZHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/aT1udWxsOihpPW1hKG4pKS5fPW4sdCk6aSYmaS5ffSx0fSxCbT1BcnJheS5wcm90b3R5cGUuc2xpY2Usam09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxIbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgdCxhPUJtLmNhbGwoYXJndW1lbnRzKSxjPW4uYXBwbHkodGhpcyxhKSxzPWUuYXBwbHkodGhpcyxhKSxmPStyLmFwcGx5KHRoaXMsKGFbMF09YyxhKSksbD1pLmFwcGx5KHRoaXMsYSktT20saD1vLmFwcGx5KHRoaXMsYSktT20scD1mKlJtKGwpLGQ9ZipVbShsKSx2PStyLmFwcGx5KHRoaXMsKGFbMF09cyxhKSksXz1pLmFwcGx5KHRoaXMsYSktT20seT1vLmFwcGx5KHRoaXMsYSktT207aWYodXx8KHU9dD1MKCkpLHUubW92ZVRvKHAsZCksdS5hcmMoMCwwLGYsbCxoKSxsPT09XyYmaD09PXl8fCh1LnF1YWRyYXRpY0N1cnZlVG8oMCwwLHYqUm0oXyksdipVbShfKSksdS5hcmMoMCwwLHYsXyx5KSksdS5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwLGQpLHUuY2xvc2VQYXRoKCksdClyZXR1cm4gdT1udWxsLHQrIiJ8fG51bGx9dmFyIG49eGEsZT1iYSxyPXdhLGk9TWEsbz1UYSx1PW51bGw7cmV0dXJuIHQucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246am0oK24pLHQpOnJ9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmptKCtuKSx0KTppfSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246am0oK24pLHQpOm99LHQuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC50YXJnZXQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09bj9udWxsOm4sdCk6dX0sdH0sWG09ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE5hfTtOYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk5hLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24odCl7a2EoTXgsdCx0aGlzLnQpLGthKHRoaXMsTXgucyx0aGlzLnMpLHRoaXMucz90aGlzLnQrPU14LnQ6dGhpcy5zPU14LnR9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfX07dmFyIFZtLFdtLCRtLFptLEdtLEptLFFtLEttLHR4LG54LGV4LHJ4LGl4LG94LHV4LGF4LGN4LHN4LGZ4LGx4LGh4LHB4LGR4LHZ4LF94LHl4LGd4LG14LHh4LGJ4LHd4LE14PW5ldyBOYSxUeD0xZS02LE54PTFlLTEyLGt4PU1hdGguUEksU3g9a3gvMixBeD1reC80LEV4PTIqa3gsQ3g9MTgwL2t4LHp4PWt4LzE4MCxQeD1NYXRoLmFicyxxeD1NYXRoLmF0YW4sTHg9TWF0aC5hdGFuMixSeD1NYXRoLmNvcyxVeD1NYXRoLmNlaWwsRHg9TWF0aC5leHAsT3g9TWF0aC5sb2csRng9TWF0aC5wb3csSXg9TWF0aC5zaW4sWXg9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjA7Cn0sQng9TWF0aC5zcXJ0LGp4PU1hdGgudGFuLEh4PXtGZWF0dXJlOmZ1bmN0aW9uKHQsbil7emEodC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXphKGVbcl0uZ2VvbWV0cnksbil9fSxYeD17U3BoZXJlOmZ1bmN0aW9uKHQsbil7bi5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxuKXt0PXQuY29vcmRpbmF0ZXMsbi5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXQ9ZVtyXSxuLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe1BhKHQuY29vcmRpbmF0ZXMsbiwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylQYShlW3JdLG4sMCl9LFBvbHlnb246ZnVuY3Rpb24odCxuKXtxYSh0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXFhKGVbcl0sbil9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10Lmdlb21ldHJpZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyl6YShlW3JdLG4pfX0sVng9ZnVuY3Rpb24odCxuKXt0JiZIeC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0h4W3QudHlwZV0odCxuKTp6YSh0LG4pfSxXeD1YbSgpLCR4PVhtKCksWng9e3BvaW50OkNhLGxpbmVTdGFydDpDYSxsaW5lRW5kOkNhLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1d4LnJlc2V0KCksWngubGluZVN0YXJ0PUxhLFp4LmxpbmVFbmQ9UmF9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rV3g7JHguYWRkKHQ8MD9FeCt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PUNhfSxzcGhlcmU6ZnVuY3Rpb24oKXskeC5hZGQoRXgpfX0sR3g9ZnVuY3Rpb24odCl7cmV0dXJuICR4LnJlc2V0KCksVngodCxaeCksMiokeH0sSng9WG0oKSxReD17cG9pbnQ6WGEsbGluZVN0YXJ0OldhLGxpbmVFbmQ6JGEscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7UXgucG9pbnQ9WmEsUXgubGluZVN0YXJ0PUdhLFF4LmxpbmVFbmQ9SmEsSngucmVzZXQoKSxaeC5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1p4LnBvbHlnb25FbmQoKSxReC5wb2ludD1YYSxReC5saW5lU3RhcnQ9V2EsUXgubGluZUVuZD0kYSxXeDwwPyhKbT0tKEttPTE4MCksUW09LSh0eD05MCkpOkp4PlR4P3R4PTkwOkp4PC1UeCYmKFFtPS05MCksdXhbMF09Sm0sdXhbMV09S219fSxLeD1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvLHUsYTtpZih0eD1LbT0tKEptPVFtPTEvMCksb3g9W10sVngodCxReCksZT1veC5sZW5ndGgpe2ZvcihveC5zb3J0KEthKSxuPTEscj1veFswXSxvPVtyXTtuPGU7KytuKWk9b3hbbl0sdGMocixpWzBdKXx8dGMocixpWzFdKT8oUWEoclswXSxpWzFdKT5RYShyWzBdLHJbMV0pJiYoclsxXT1pWzFdKSxRYShpWzBdLHJbMV0pPlFhKHJbMF0sclsxXSkmJihyWzBdPWlbMF0pKTpvLnB1c2gocj1pKTtmb3IodT0tKDEvMCksZT1vLmxlbmd0aC0xLG49MCxyPW9bZV07bjw9ZTtyPWksKytuKWk9b1tuXSwoYT1RYShyWzFdLGlbMF0pKT51JiYodT1hLEptPWlbMF0sS209clsxXSl9cmV0dXJuIG94PXV4PW51bGwsSm09PT0xLzB8fFFtPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW0ptLFFtXSxbS20sdHhdXX0sdGI9e3NwaGVyZTpDYSxwb2ludDpuYyxsaW5lU3RhcnQ6cmMsbGluZUVuZDp1Yyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0Yi5saW5lU3RhcnQ9YWMsdGIubGluZUVuZD1jY30scG9seWdvbkVuZDpmdW5jdGlvbigpe3RiLmxpbmVTdGFydD1yYyx0Yi5saW5lRW5kPXVjfX0sbmI9ZnVuY3Rpb24odCl7YXg9Y3g9c3g9Zng9bHg9aHg9cHg9ZHg9dng9X3g9eXg9MCxWeCh0LHRiKTt2YXIgbj12eCxlPV94LHI9eXgsaT1uKm4rZSplK3IqcjtyZXR1cm4gaTxOeCYmKG49aHgsZT1weCxyPWR4LGN4PFR4JiYobj1zeCxlPWZ4LHI9bHgpLGk9bipuK2UqZStyKnIsaTxOeCk/W05hTixOYU5dOltMeChlLG4pKkN4LEFhKHIvQngoaSkpKkN4XX0sZWI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxyYj1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZT10KGUsciksbihlWzBdLGVbMV0pfXJldHVybiB0LmludmVydCYmbi5pbnZlcnQmJihlLmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybiBlPW4uaW52ZXJ0KGUsciksZSYmdC5pbnZlcnQoZVswXSxlWzFdKX0pLGV9O2xjLmludmVydD1sYzt2YXIgaWIsb2IsdWIsYWIsY2Isc2IsZmIsbGIsaGIscGIsZGIsdmI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbj10KG5bMF0qengsblsxXSp6eCksblswXSo9Q3gsblsxXSo9Q3gsbn1yZXR1cm4gdD1oYyh0WzBdKnp4LHRbMV0qengsdC5sZW5ndGg+Mj90WzJdKnp4OjApLG4uaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBuPXQuaW52ZXJ0KG5bMF0qengsblsxXSp6eCksblswXSo9Q3gsblsxXSo9Q3gsbn0sbn0sX2I9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbil7ZS5wdXNoKHQ9cih0LG4pKSx0WzBdKj1DeCx0WzFdKj1DeH1mdW5jdGlvbiBuKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp6eCxjPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpKnp4O3JldHVybiBlPVtdLHI9aGMoLXRbMF0qengsLXRbMV0qengsMCkuaW52ZXJ0LF9jKGEsbixjLDEpLHQ9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltlXX0sZT1yPW51bGwsdH12YXIgZSxyLGk9ZWIoWzAsMF0pLG89ZWIoOTApLHU9ZWIoNiksYT17cG9pbnQ6dH07cmV0dXJuIG4uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZWIoWyt0WzBdLCt0WzFdXSksbik6aX0sbi5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplYigrdCksbik6b30sbi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDplYigrdCksbik6dX0sbn0seWI9ZnVuY3Rpb24oKXt2YXIgdCxuPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihuLGUpe3QucHVzaChbbixlXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24ucHVzaCh0PVtdKX0sbGluZUVuZDpDYSxyZWpvaW46ZnVuY3Rpb24oKXtuLmxlbmd0aD4xJiZuLnB1c2gobi5wb3AoKS5jb25jYXQobi5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW47cmV0dXJuIG49W10sdD1udWxsLGV9fX0sZ2I9ZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciB1LGE9dFswXSxjPXRbMV0scz1uWzBdLGY9blsxXSxsPTAsaD0xLHA9cy1hLGQ9Zi1jO2lmKHU9ZS1hLHB8fCEodT4wKSl7aWYodS89cCxwPDApe2lmKHU8bClyZXR1cm47dTxoJiYoaD11KX1lbHNlIGlmKHA+MCl7aWYodT5oKXJldHVybjt1PmwmJihsPXUpfWlmKHU9aS1hLHB8fCEodTwwKSl7aWYodS89cCxwPDApe2lmKHU+aClyZXR1cm47dT5sJiYobD11KX1lbHNlIGlmKHA+MCl7aWYodTxsKXJldHVybjt1PGgmJihoPXUpfWlmKHU9ci1jLGR8fCEodT4wKSl7aWYodS89ZCxkPDApe2lmKHU8bClyZXR1cm47dTxoJiYoaD11KX1lbHNlIGlmKGQ+MCl7aWYodT5oKXJldHVybjt1PmwmJihsPXUpfWlmKHU9by1jLGR8fCEodTwwKSl7aWYodS89ZCxkPDApe2lmKHU+aClyZXR1cm47dT5sJiYobD11KX1lbHNlIGlmKGQ+MCl7aWYodTxsKXJldHVybjt1PGgmJihoPXUpfXJldHVybiBsPjAmJih0WzBdPWErbCpwLHRbMV09YytsKmQpLGg8MSYmKG5bMF09YStoKnAsblsxXT1jK2gqZCksITB9fX19fSxtYj1mdW5jdGlvbih0LG4pe3JldHVybiBQeCh0WzBdLW5bMF0pPFR4JiZQeCh0WzFdLW5bMV0pPFR4fSx4Yj1mdW5jdGlvbih0LG4sZSxyLGkpe3ZhciBvLHUsYT1bXSxjPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChuPXQubGVuZ3RoLTEpPD0wKSl7dmFyIG4sZSxyPXRbMF0sdT10W25dO2lmKG1iKHIsdSkpe2ZvcihpLmxpbmVTdGFydCgpLG89MDtvPG47KytvKWkucG9pbnQoKHI9dFtvXSlbMF0sclsxXSk7cmV0dXJuIHZvaWQgaS5saW5lRW5kKCl9YS5wdXNoKGU9bmV3IGdjKHIsdCxudWxsLCEwKSksYy5wdXNoKGUubz1uZXcgZ2MocixudWxsLGUsITEpKSxhLnB1c2goZT1uZXcgZ2ModSx0LG51bGwsITEpKSxjLnB1c2goZS5vPW5ldyBnYyh1LG51bGwsZSwhMCkpfX0pLGEubGVuZ3RoKXtmb3IoYy5zb3J0KG4pLG1jKGEpLG1jKGMpLG89MCx1PWMubGVuZ3RoO288dTsrK28pY1tvXS5lPWU9IWU7Zm9yKHZhciBzLGYsbD1hWzBdOzspe2Zvcih2YXIgaD1sLHA9ITA7aC52OylpZigoaD1oLm4pPT09bClyZXR1cm47cz1oLnosaS5saW5lU3RhcnQoKTtkb3tpZihoLnY9aC5vLnY9ITAsaC5lKXtpZihwKWZvcihvPTAsdT1zLmxlbmd0aDtvPHU7KytvKWkucG9pbnQoKGY9c1tvXSlbMF0sZlsxXSk7ZWxzZSByKGgueCxoLm4ueCwxLGkpO2g9aC5ufWVsc2V7aWYocClmb3Iocz1oLnAueixvPXMubGVuZ3RoLTE7bz49MDstLW8paS5wb2ludCgoZj1zW29dKVswXSxmWzFdKTtlbHNlIHIoaC54LGgucC54LC0xLGkpO2g9aC5wfWg9aC5vLHM9aC56LHA9IXB9d2hpbGUoIWgudik7aS5saW5lRW5kKCl9fX0sYmI9MWU5LHdiPS1iYixNYj1mdW5jdGlvbigpe3ZhciB0LG4sZSxyPTAsaT0wLG89OTYwLHU9NTAwO3JldHVybiBlPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6dD14YyhyLGksbyx1KShuPWUpfSxleHRlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2FbMF1bMF0saT0rYVswXVsxXSxvPSthWzFdWzBdLHU9K2FbMV1bMV0sdD1uPW51bGwsZSk6W1tyLGldLFtvLHVdXX19fSxUYj1YbSgpLE5iPXtzcGhlcmU6Q2EscG9pbnQ6Q2EsbGluZVN0YXJ0OmJjLGxpbmVFbmQ6Q2EscG9seWdvblN0YXJ0OkNhLHBvbHlnb25FbmQ6Q2F9LGtiPWZ1bmN0aW9uKHQpe3JldHVybiBUYi5yZXNldCgpLFZ4KHQsTmIpLCtUYn0sU2I9W251bGwsbnVsbF0sQWI9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOlNifSxFYj1mdW5jdGlvbih0LG4pe3JldHVybiBTYlswXT10LFNiWzFdPW4sa2IoQWIpfSxDYj1mdW5jdGlvbih0LG4pe3ZhciBlPXRbMF0qengscj10WzFdKnp4LGk9blswXSp6eCxvPW5bMV0qengsdT1SeChyKSxhPUl4KHIpLGM9Ungobykscz1JeChvKSxmPXUqUngoZSksbD11Kkl4KGUpLGg9YypSeChpKSxwPWMqSXgoaSksZD0yKkFhKEJ4KEVhKG8tcikrdSpjKkVhKGktZSkpKSx2PUl4KGQpLF89ZD9mdW5jdGlvbih0KXt2YXIgbj1JeCh0Kj1kKS92LGU9SXgoZC10KS92LHI9ZSpmK24qaCxpPWUqbCtuKnAsbz1lKmErbipzO3JldHVybltMeChpLHIpKkN4LEx4KG8sQngocipyK2kqaSkpKkN4XX06ZnVuY3Rpb24oKXtyZXR1cm5bZSpDeCxyKkN4XX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffSx6Yj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sUGI9WG0oKSxxYj1YbSgpLExiPXtwb2ludDpDYSxsaW5lU3RhcnQ6Q2EsbGluZUVuZDpDYSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtMYi5saW5lU3RhcnQ9RWMsTGIubGluZUVuZD1QY30scG9seWdvbkVuZDpmdW5jdGlvbigpe0xiLmxpbmVTdGFydD1MYi5saW5lRW5kPUxiLnBvaW50PUNhLFBiLmFkZChQeChxYikpLHFiLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVBiLzI7cmV0dXJuIFBiLnJlc2V0KCksdH19LFJiPTEvMCxVYj1SYixEYj0tUmIsT2I9RGIsRmI9e3BvaW50OnFjLGxpbmVTdGFydDpDYSxsaW5lRW5kOkNhLHBvbHlnb25TdGFydDpDYSxwb2x5Z29uRW5kOkNhLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbUmIsVWJdLFtEYixPYl1dO3JldHVybiBEYj1PYj0tKFViPVJiPTEvMCksdH19LEliPTAsWWI9MCxCYj0wLGpiPTAsSGI9MCxYYj0wLFZiPTAsV2I9MCwkYj0wLFpiPXtwb2ludDpMYyxsaW5lU3RhcnQ6UmMsbGluZUVuZDpPYyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtaYi5saW5lU3RhcnQ9RmMsWmIubGluZUVuZD1JY30scG9seWdvbkVuZDpmdW5jdGlvbigpe1piLnBvaW50PUxjLFpiLmxpbmVTdGFydD1SYyxaYi5saW5lRW5kPU9jfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0kYj9bVmIvJGIsV2IvJGJdOlhiP1tqYi9YYixIYi9YYl06QmI/W0liL0JiLFliL0JiXTpbTmFOLE5hTl07cmV0dXJuIEliPVliPUJiPWpiPUhiPVhiPVZiPVdiPSRiPTAsdH19O2pjLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbiksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLG4pLHRoaXMuX2NvbnRleHQuYXJjKHQsbix0aGlzLl9yYWRpdXMsMCxFeCl9fSxyZXN1bHQ6Q2F9LEhjLnByb3RvdHlwZT17X2NpcmNsZTpYYyg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jaXJjbGU9WGModCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLG4pLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixuKTticmVhaztkZWZhdWx0OnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixuLHRoaXMuX2NpcmNsZSl9fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgdD10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSx0fX19O3ZhciBHYj1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cygrby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFZ4KHQscihpKSkpLGkucmVzdWx0KCl9dmFyIHIsaSxvPTQuNTtyZXR1cm4gZS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBWeCh0LHIoTGIpKSxMYi5yZXN1bHQoKX0sZS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIFZ4KHQscihGYikpLEZiLnJlc3VsdCgpfSxlLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBWeCh0LHIoWmIpKSxaYi5yZXN1bHQoKX0sZS5wcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PSh0PW4pP3piOm4uc3RyZWFtLGUpOnR9LGUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9uZXcgSGM6bmV3IGpjKHQpLCJmdW5jdGlvbiIhPXR5cGVvZiBvJiZpLnBvaW50UmFkaXVzKG8pLGUpOm59LGUucG9pbnRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDooaS5wb2ludFJhZGl1cygrdCksK3QpLGUpOm99LGUucHJvamVjdGlvbih0KS5jb250ZXh0KG4pfSxKYj1YbSgpLFFiPWZ1bmN0aW9uKHQsbil7dmFyIGU9blswXSxyPW5bMV0saT1bSXgoZSksLVJ4KGUpLDBdLG89MCx1PTA7SmIucmVzZXQoKTtmb3IodmFyIGE9MCxjPXQubGVuZ3RoO2E8YzsrK2EpaWYoZj0ocz10W2FdKS5sZW5ndGgpZm9yKHZhciBzLGYsbD1zW2YtMV0saD1sWzBdLHA9bFsxXS8yK0F4LGQ9SXgocCksdj1SeChwKSxfPTA7XzxmOysrXyxoPWcsZD14LHY9YixsPXkpe3ZhciB5PXNbX10sZz15WzBdLG09eVsxXS8yK0F4LHg9SXgobSksYj1SeChtKSx3PWctaCxNPXc+PTA/MTotMSxUPU0qdyxOPVQ+a3gsaz1kKng7aWYoSmIuYWRkKEx4KGsqTSpJeChUKSx2KmIraypSeChUKSkpLG8rPU4/dytNKkV4OncsTl5oPj1lXmc+PWUpe3ZhciBTPVlhKEZhKGwpLEZhKHkpKTtIYShTKTt2YXIgQT1ZYShpLFMpO0hhKEEpO3ZhciBFPShOXnc+PTA/LTE6MSkqQWEoQVsyXSk7KHI+RXx8cj09PUUmJihTWzBdfHxTWzFdKSkmJih1Kz1OXnc+PTA/MTotMSl9fXJldHVybihvPC1UeHx8bzxUeCYmSmI8LVR4KV4xJnV9LEtiPWZ1bmN0aW9uKHQsbixlLHIpe3JldHVybiBmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHUobixlKXt2YXIgcj1pKG4sZSk7dChuPXJbMF0sZT1yWzFdKSYmby5wb2ludChuLGUpfWZ1bmN0aW9uIGEodCxuKXt2YXIgZT1pKHQsbik7Xy5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGMoKXtiLnBvaW50PWEsXy5saW5lU3RhcnQoKX1mdW5jdGlvbiBzKCl7Yi5wb2ludD11LF8ubGluZUVuZCgpfWZ1bmN0aW9uIGYodCxuKXt2LnB1c2goW3Qsbl0pO3ZhciBlPWkodCxuKTttLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gbCgpe20ubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiBoKCl7Zih2WzBdWzBdLHZbMF1bMV0pLG0ubGluZUVuZCgpO3ZhciB0LG4sZSxyLGk9bS5jbGVhbigpLHU9Zy5yZXN1bHQoKSxhPXUubGVuZ3RoO2lmKHYucG9wKCkscC5wdXNoKHYpLHY9bnVsbCxhKWlmKDEmaSl7aWYoZT11WzBdLChuPWUubGVuZ3RoLTEpPjApe2Zvcih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpLHQ9MDt0PG47Kyt0KW8ucG9pbnQoKHI9ZVt0XSlbMF0sclsxXSk7by5saW5lRW5kKCl9fWVsc2UgYT4xJiYyJmkmJnUucHVzaCh1LnBvcCgpLmNvbmNhdCh1LnNoaWZ0KCkpKSxkLnB1c2godS5maWx0ZXIoVmMpKX12YXIgcCxkLHYsXz1uKG8pLHk9aS5pbnZlcnQoclswXSxyWzFdKSxnPXliKCksbT1uKGcpLHg9ITEsYj17cG9pbnQ6dSxsaW5lU3RhcnQ6YyxsaW5lRW5kOnMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yi5wb2ludD1mLGIubGluZVN0YXJ0PWwsYi5saW5lRW5kPWgsZD1bXSxwPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Yi5wb2ludD11LGIubGluZVN0YXJ0PWMsYi5saW5lRW5kPXMsZD1KcyhkKTt2YXIgdD1RYihwLHkpO2QubGVuZ3RoPyh4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSx4YihkLFdjLHQsZSxvKSk6dCYmKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSkseCYmKG8ucG9seWdvbkVuZCgpLHg9ITEpLGQ9cD1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtvLnBvbHlnb25TdGFydCgpLG8ubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSxvLnBvbHlnb25FbmQoKX19O3JldHVybiBifX0sdHc9S2IoZnVuY3Rpb24oKXtyZXR1cm4hMH0sJGMsR2MsWy1reCwtU3hdKSxudz1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUoZSxyLGksbyl7X2Mobyx0LG4saSxlLHIpfWZ1bmN0aW9uIHIodCxuKXtyZXR1cm4gUngodCkqUngobik+YX1mdW5jdGlvbiBpKHQpe3ZhciBuLGUsaSxhLGY7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2E9aT0hMSxmPTF9LHBvaW50OmZ1bmN0aW9uKGwsaCl7dmFyIHAsZD1bbCxoXSx2PXIobCxoKSxfPWM/dj8wOnUobCxoKTp2P3UobCsobDwwP2t4Oi1reCksaCk6MDtpZighbiYmKGE9aT12KSYmdC5saW5lU3RhcnQoKSx2IT09aSYmKHA9byhuLGQpLChtYihuLHApfHxtYihkLHApKSYmKGRbMF0rPVR4LGRbMV0rPVR4LHY9cihkWzBdLGRbMV0pKSksdiE9PWkpZj0wLHY/KHQubGluZVN0YXJ0KCkscD1vKGQsbiksdC5wb2ludChwWzBdLHBbMV0pKToocD1vKG4sZCksdC5wb2ludChwWzBdLHBbMV0pLHQubGluZUVuZCgpKSxuPXA7ZWxzZSBpZihzJiZuJiZjXnYpe3ZhciB5O18mZXx8ISh5PW8oZCxuLCEwKSl8fChmPTAsYz8odC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSksdC5wb2ludCh5WzFdWzBdLHlbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludCh5WzFdWzBdLHlbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh5WzBdWzBdLHlbMF1bMV0pKSl9IXZ8fG4mJm1iKG4sZCl8fHQucG9pbnQoZFswXSxkWzFdKSxuPWQsaT12LGU9X30sbGluZUVuZDpmdW5jdGlvbigpe2kmJnQubGluZUVuZCgpLG49bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZnwoYSYmaSk8PDF9fX1mdW5jdGlvbiBvKHQsbixlKXt2YXIgcj1GYSh0KSxpPUZhKG4pLG89WzEsMCwwXSx1PVlhKHIsaSksYz1JYSh1LHUpLHM9dVswXSxmPWMtcypzO2lmKCFmKXJldHVybiFlJiZ0O3ZhciBsPWEqYy9mLGg9LWEqcy9mLHA9WWEobyx1KSxkPWphKG8sbCksdj1qYSh1LGgpO0JhKGQsdik7dmFyIF89cCx5PUlhKGQsXyksZz1JYShfLF8pLG09eSp5LWcqKElhKGQsZCktMSk7aWYoIShtPDApKXt2YXIgeD1CeChtKSxiPWphKF8sKC15LXgpL2cpO2lmKEJhKGIsZCksYj1PYShiKSwhZSlyZXR1cm4gYjt2YXIgdyxNPXRbMF0sVD1uWzBdLE49dFsxXSxrPW5bMV07VDxNJiYodz1NLE09VCxUPXcpO3ZhciBTPVQtTSxBPVB4KFMta3gpPFR4LEU9QXx8UzxUeDtpZighQSYmazxOJiYodz1OLE49ayxrPXcpLEU/QT9OK2s+MF5iWzFdPChQeChiWzBdLU0pPFR4P046ayk6Tjw9YlsxXSYmYlsxXTw9azpTPmt4XihNPD1iWzBdJiZiWzBdPD1UKSl7dmFyIEM9amEoXywoLXkreCkvZyk7cmV0dXJuIEJhKEMsZCksW2IsT2EoQyldfX19ZnVuY3Rpb24gdShuLGUpe3ZhciByPWM/dDpreC10LGk9MDtyZXR1cm4gbjwtcj9pfD0xOm4+ciYmKGl8PTIpLGU8LXI/aXw9NDplPnImJihpfD04KSxpfXZhciBhPVJ4KHQpLGM9YT4wLHM9UHgoYSk+VHg7cmV0dXJuIEtiKHIsaSxlLGM/WzAsLXRdOlsta3gsdC1reF0pfSxldz1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOkpjKHQpfX07UWMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpRYyxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuc3RyZWFtLnBvaW50KHQsbil9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fTt2YXIgcnc9MTYsaXc9UngoMzAqengpLG93PWZ1bmN0aW9uKHQsbil7cmV0dXJuK24/ZXModCxuKTpucyh0KX0sdXc9SmMoe3BvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5zdHJlYW0ucG9pbnQodCp6eCxuKnp4KX19KSxhdz1mdW5jdGlvbigpe3JldHVybiBvcyhhcykuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX0sY3c9ZnVuY3Rpb24oKXtyZXR1cm4gYXcoKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX0sc3c9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBuPXRbMF0sZT10WzFdO3JldHVybiBhPW51bGwsaS5wb2ludChuLGUpLGF8fChvLnBvaW50KG4sZSksYSl8fCh1LnBvaW50KG4sZSksYSl9ZnVuY3Rpb24gbigpe3JldHVybiBlPXI9bnVsbCx0fXZhciBlLHIsaSxvLHUsYSxjPWN3KCkscz1hdygpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksZj1hdygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxsPXtwb2ludDpmdW5jdGlvbih0LG4pe2E9W3Qsbl19fTtyZXR1cm4gdC5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIG49Yy5zY2FsZSgpLGU9Yy50cmFuc2xhdGUoKSxyPSh0WzBdLWVbMF0pL24saT0odFsxXS1lWzFdKS9uO3JldHVybihpPj0uMTImJmk8LjIzNCYmcj49LS40MjUmJnI8LS4yMTQ/czppPj0uMTY2JiZpPC4yMzQmJnI+PS0uMjE0JiZyPC0uMTE1P2Y6YykuaW52ZXJ0KHQpfSx0LnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gZSYmcj09PXQ/ZTplPWNzKFtjLnN0cmVhbShyPXQpLHMuc3RyZWFtKHQpLGYuc3RyZWFtKHQpXSl9LHQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjLnByZWNpc2lvbih0KSxzLnByZWNpc2lvbih0KSxmLnByZWNpc2lvbih0KSxuKCkpOmMucHJlY2lzaW9uKCl9LHQuc2NhbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMuc2NhbGUobikscy5zY2FsZSguMzUqbiksZi5zY2FsZShuKSx0LnRyYW5zbGF0ZShjLnRyYW5zbGF0ZSgpKSk6Yy5zY2FsZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYy50cmFuc2xhdGUoKTt2YXIgZT1jLnNjYWxlKCkscj0rdFswXSxhPSt0WzFdO3JldHVybiBpPWMudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1tyLS40NTUqZSxhLS4yMzgqZV0sW3IrLjQ1NSplLGErLjIzOCplXV0pLnN0cmVhbShsKSxvPXMudHJhbnNsYXRlKFtyLS4zMDcqZSxhKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1tyLS40MjUqZStUeCxhKy4xMiplK1R4XSxbci0uMjE0KmUtVHgsYSsuMjM0KmUtVHhdXSkuc3RyZWFtKGwpLHU9Zi50cmFuc2xhdGUoW3ItLjIwNSplLGErLjIxMiplXSkuY2xpcEV4dGVudChbW3ItLjIxNCplK1R4LGErLjE2NiplK1R4XSxbci0uMTE1KmUtVHgsYSsuMjM0KmUtVHhdXSkuc3RyZWFtKGwpLG4oKX0sdC5maXRFeHRlbnQ9ZnVuY3Rpb24obixlKXtyZXR1cm4gS2ModCxuLGUpfSx0LmZpdFNpemU9ZnVuY3Rpb24obixlKXtyZXR1cm4gdHModCxuLGUpfSx0LnNjYWxlKDEwNzApfSxmdz1zcyhmdW5jdGlvbih0KXtyZXR1cm4gQngoMi8oMSt0KSl9KTtmdy5pbnZlcnQ9ZnMoZnVuY3Rpb24odCl7cmV0dXJuIDIqQWEodC8yKX0pO3ZhciBsdz1mdW5jdGlvbigpe3JldHVybiBycyhmdykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LGh3PXNzKGZ1bmN0aW9uKHQpe3JldHVybih0PVNhKHQpKSYmdC9JeCh0KX0pO2h3LmludmVydD1mcyhmdW5jdGlvbih0KXtyZXR1cm4gdH0pO3ZhciBwdz1mdW5jdGlvbigpe3JldHVybiBycyhodykuc2NhbGUoNzkuNDE4OCkuY2xpcEFuZ2xlKDE3OS45OTkpfTtscy5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bdCwyKnF4KER4KG4pKS1TeF19O3ZhciBkdz1mdW5jdGlvbigpe3JldHVybiBocyhscykuc2NhbGUoOTYxL0V4KX0sdnc9ZnVuY3Rpb24oKXtyZXR1cm4gb3MoZHMpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9O3ZzLmludmVydD12czt2YXIgX3c9ZnVuY3Rpb24oKXtyZXR1cm4gcnModnMpLnNjYWxlKDE1Mi42Myl9LHl3PWZ1bmN0aW9uKCl7cmV0dXJuIG9zKF9zKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfTt5cy5pbnZlcnQ9ZnMocXgpO3ZhciBndz1mdW5jdGlvbigpe3JldHVybiBycyh5cykuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDYwKX0sbXc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJuIGk9bz1udWxsLHV9dmFyIG4sZSxyLGksbyx1LGE9MSxjPTAscz0wLGY9emIsbD1udWxsLGg9emI7cmV0dXJuIHU9e3N0cmVhbTpmdW5jdGlvbih0KXtyZXR1cm4gaSYmbz09PXQ/aTppPWYoaChvPXQpKX0sY2xpcEV4dGVudDpmdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1udWxsPT1pPyhsPW49ZT1yPW51bGwsemIpOnhjKGw9K2lbMF1bMF0sbj0raVswXVsxXSxlPStpWzFdWzBdLHI9K2lbMV1bMV0pLHQoKSk6bnVsbD09bD9udWxsOltbbCxuXSxbZSxyXV19LHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPWdzKGE9K24sYyxzKSx0KCkpOmF9LHRyYW5zbGF0ZTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1ncyhhLGM9K25bMF0scz0rblsxXSksdCgpKTpbYyxzXX0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsbil7cmV0dXJuIEtjKHUsdCxuKX0sZml0U2l6ZTpmdW5jdGlvbih0LG4pe3JldHVybiB0cyh1LHQsbil9fX07bXMuaW52ZXJ0PWZzKEFhKTt2YXIgeHc9ZnVuY3Rpb24oKXtyZXR1cm4gcnMobXMpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArVHgpfTt4cy5pbnZlcnQ9ZnMoZnVuY3Rpb24odCl7cmV0dXJuIDIqcXgodCl9KTt2YXIgYnc9ZnVuY3Rpb24oKXtyZXR1cm4gcnMoeHMpLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9O2JzLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblstbiwyKnF4KER4KHQpKS1TeF19O3ZhciB3dz1mdW5jdGlvbigpe3ZhciB0PWhzKGJzKSxuPXQuY2VudGVyLGU9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oWy10WzFdLHRbMF1dKToodD1uKCksW3RbMV0sLXRbMF1dKX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOih0PWUoKSxbdFswXSx0WzFdLHRbMl0tOTBdKX0sZShbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9O3QudmVyc2lvbj13cyx0LmJpc2VjdD1rcyx0LmJpc2VjdFJpZ2h0PWtzLHQuYmlzZWN0TGVmdD1Tcyx0LmFzY2VuZGluZz1Ncyx0LmJpc2VjdG9yPVRzLHQuZGVzY2VuZGluZz1Bcyx0LmRldmlhdGlvbj16cyx0LmV4dGVudD1Qcyx0Lmhpc3RvZ3JhbT1Icyx0LnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM9VnMsdC50aHJlc2hvbGRTY290dD1Xcyx0LnRocmVzaG9sZFN0dXJnZXM9anMsdC5tYXg9JHMsdC5tZWFuPVpzLHQubWVkaWFuPUdzLHQubWVyZ2U9SnMsdC5taW49UXMsdC5wYWlycz1Lcyx0LnBlcm11dGU9dGYsdC5xdWFudGlsZT1Ycyx0LnJhbmdlPU9zLHQuc2Nhbj1uZix0LnNodWZmbGU9ZWYsdC5zdW09cmYsdC50aWNrcz1Ccyx0LnRpY2tTdGVwPWUsdC50cmFuc3Bvc2U9b2YsdC52YXJpYW5jZT1Dcyx0LnppcD11Zix0LmVudHJpZXM9aGYsdC5rZXlzPWZmLHQudmFsdWVzPWxmLHQubWFwPW8sdC5zZXQ9bCx0Lm5lc3Q9Y2YsdC5yYW5kb21Vbmlmb3JtPXBmLHQucmFuZG9tTm9ybWFsPWRmLHQucmFuZG9tTG9nTm9ybWFsPXZmLHQucmFuZG9tQmF0ZXM9eWYsdC5yYW5kb21JcndpbkhhbGw9X2YsdC5yYW5kb21FeHBvbmVudGlhbD1nZix0LmVhc2VMaW5lYXI9aCx0LmVhc2VRdWFkPXYsdC5lYXNlUXVhZEluPXAsdC5lYXNlUXVhZE91dD1kLHQuZWFzZVF1YWRJbk91dD12LHQuZWFzZUN1YmljPWcsdC5lYXNlQ3ViaWNJbj1fLHQuZWFzZUN1YmljT3V0PXksdC5lYXNlQ3ViaWNJbk91dD1nLHQuZWFzZVBvbHk9d2YsdC5lYXNlUG9seUluPXhmLHQuZWFzZVBvbHlPdXQ9YmYsdC5lYXNlUG9seUluT3V0PXdmLHQuZWFzZVNpbj1iLHQuZWFzZVNpbkluPW0sdC5lYXNlU2luT3V0PXgsdC5lYXNlU2luSW5PdXQ9Yix0LmVhc2VFeHA9VCx0LmVhc2VFeHBJbj13LHQuZWFzZUV4cE91dD1NLHQuZWFzZUV4cEluT3V0PVQsdC5lYXNlQ2lyY2xlPVMsdC5lYXNlQ2lyY2xlSW49Tix0LmVhc2VDaXJjbGVPdXQ9ayx0LmVhc2VDaXJjbGVJbk91dD1TLHQuZWFzZUJvdW5jZT1FLHQuZWFzZUJvdW5jZUluPUEsdC5lYXNlQm91bmNlT3V0PUUsdC5lYXNlQm91bmNlSW5PdXQ9Qyx0LmVhc2VCYWNrPU9mLHQuZWFzZUJhY2tJbj1VZix0LmVhc2VCYWNrT3V0PURmLHQuZWFzZUJhY2tJbk91dD1PZix0LmVhc2VFbGFzdGljPWpmLHQuZWFzZUVsYXN0aWNJbj1CZix0LmVhc2VFbGFzdGljT3V0PWpmLHQuZWFzZUVsYXN0aWNJbk91dD1IZix0LnBvbHlnb25BcmVhPVhmLHQucG9seWdvbkNlbnRyb2lkPVZmLHQucG9seWdvbkh1bGw9JGYsdC5wb2x5Z29uQ29udGFpbnM9WmYsdC5wb2x5Z29uTGVuZ3RoPUdmLHQucGF0aD1MLHQucXVhZHRyZWU9SSx0LnF1ZXVlPVosdC5hcmM9d2wsdC5hcmVhPU5sLHQubGluZT1UbCx0LnBpZT1BbCx0LnJhZGlhbEFyZWE9emwsdC5yYWRpYWxMaW5lPUNsLHQuc3ltYm9sPUpsLHQuc3ltYm9scz1HbCx0LnN5bWJvbENpcmNsZT1QbCx0LnN5bWJvbENyb3NzPXFsLHQuc3ltYm9sRGlhbW9uZD1VbCx0LnN5bWJvbFNxdWFyZT1CbCx0LnN5bWJvbFN0YXI9WWwsdC5zeW1ib2xUcmlhbmdsZT1IbCx0LnN5bWJvbFd5ZT1abCx0LmN1cnZlQmFzaXNDbG9zZWQ9dGgsdC5jdXJ2ZUJhc2lzT3Blbj1uaCx0LmN1cnZlQmFzaXM9S2wsdC5jdXJ2ZUJ1bmRsZT1laCx0LmN1cnZlQ2FyZGluYWxDbG9zZWQ9aWgsdC5jdXJ2ZUNhcmRpbmFsT3Blbj1vaCx0LmN1cnZlQ2FyZGluYWw9cmgsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9YWgsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPWNoLHQuY3VydmVDYXRtdWxsUm9tPXVoLHQuY3VydmVMaW5lYXJDbG9zZWQ9c2gsdC5jdXJ2ZUxpbmVhcj1NbCx0LmN1cnZlTW9ub3RvbmVYPXp0LHQuY3VydmVNb25vdG9uZVk9UHQsdC5jdXJ2ZU5hdHVyYWw9ZmgsdC5jdXJ2ZVN0ZXA9bGgsdC5jdXJ2ZVN0ZXBBZnRlcj1EdCx0LmN1cnZlU3RlcEJlZm9yZT1VdCx0LnN0YWNrPXZoLHQuc3RhY2tPZmZzZXRFeHBhbmQ9X2gsdC5zdGFja09mZnNldE5vbmU9cGgsdC5zdGFja09mZnNldFNpbGhvdWV0dGU9eWgsdC5zdGFja09mZnNldFdpZ2dsZT1naCx0LnN0YWNrT3JkZXJBc2NlbmRpbmc9bWgsdC5zdGFja09yZGVyRGVzY2VuZGluZz14aCx0LnN0YWNrT3JkZXJJbnNpZGVPdXQ9YmgsdC5zdGFja09yZGVyTm9uZT1kaCx0LnN0YWNrT3JkZXJSZXZlcnNlPXdoLHQuY29sb3I9QnQsdC5yZ2I9VnQsdC5oc2w9R3QsdC5sYWI9dG4sdC5oY2w9Y24sdC5jdWJlaGVsaXg9bG4sdC5pbnRlcnBvbGF0ZT1fcCx0LmludGVycG9sYXRlQXJyYXk9c3AsdC5pbnRlcnBvbGF0ZURhdGU9ZnAsdC5pbnRlcnBvbGF0ZU51bWJlcj1scCx0LmludGVycG9sYXRlT2JqZWN0PWhwLHQuaW50ZXJwb2xhdGVSb3VuZD15cCx0LmludGVycG9sYXRlU3RyaW5nPXZwLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9YnAsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz13cCx0LmludGVycG9sYXRlWm9vbT1TcCx0LmludGVycG9sYXRlUmdiPXVwLHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz1hcCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9Y3AsdC5pbnRlcnBvbGF0ZUhzbD1BcCx0LmludGVycG9sYXRlSHNsTG9uZz1FcCx0LmludGVycG9sYXRlTGFiPUVuLHQuaW50ZXJwb2xhdGVIY2w9Q3AsdC5pbnRlcnBvbGF0ZUhjbExvbmc9enAsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1QcCx0LmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZz1xcCx0LmludGVycG9sYXRlQmFzaXM9cnAsdC5pbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkPWlwLHQucXVhbnRpemU9THAsdC5kaXNwYXRjaD1Qbix0LmRzdkZvcm1hdD1PcCx0LmNzdlBhcnNlPUlwLHQuY3N2UGFyc2VSb3dzPVlwLHQuY3N2Rm9ybWF0PUJwLHQuY3N2Rm9ybWF0Um93cz1qcCx0LnRzdlBhcnNlPVhwLHQudHN2UGFyc2VSb3dzPVZwLHQudHN2Rm9ybWF0PVdwLHQudHN2Rm9ybWF0Um93cz0kcCx0LnJlcXVlc3Q9WnAsdC5odG1sPUpwLHQuanNvbj1RcCx0LnRleHQ9S3AsdC54bWw9dGQsdC5jc3Y9ZWQsdC50c3Y9cmQsdC5ub3c9am4sdC50aW1lcj1Wbix0LnRpbWVyRmx1c2g9V24sdC50aW1lb3V0PXBkLHQuaW50ZXJ2YWw9ZGQsdC50aW1lSW50ZXJ2YWw9UW4sdC50aW1lTWlsbGlzZWNvbmQ9eWQsdC50aW1lTWlsbGlzZWNvbmRzPWdkLHQudGltZVNlY29uZD1UZCx0LnRpbWVTZWNvbmRzPU5kLHQudGltZU1pbnV0ZT1rZCx0LnRpbWVNaW51dGVzPVNkLHQudGltZUhvdXI9QWQsdC50aW1lSG91cnM9RWQsdC50aW1lRGF5PUNkLHQudGltZURheXM9emQsdC50aW1lV2Vlaz1QZCx0LnRpbWVXZWVrcz1GZCx0LnRpbWVTdW5kYXk9UGQsdC50aW1lU3VuZGF5cz1GZCx0LnRpbWVNb25kYXk9cWQsdC50aW1lTW9uZGF5cz1JZCx0LnRpbWVUdWVzZGF5PUxkLHQudGltZVR1ZXNkYXlzPVlkO3QudGltZVdlZG5lc2RheT1SZDt0LnRpbWVXZWRuZXNkYXlzPUJkLHQudGltZVRodXJzZGF5PVVkLHQudGltZVRodXJzZGF5cz1qZCx0LnRpbWVGcmlkYXk9RGQsdC50aW1lRnJpZGF5cz1IZCx0LnRpbWVTYXR1cmRheT1PZCx0LnRpbWVTYXR1cmRheXM9WGQsdC50aW1lTW9udGg9VmQsdC50aW1lTW9udGhzPVdkLHQudGltZVllYXI9JGQsdC50aW1lWWVhcnM9WmQsdC51dGNNaWxsaXNlY29uZD15ZCx0LnV0Y01pbGxpc2Vjb25kcz1nZCx0LnV0Y1NlY29uZD1UZCx0LnV0Y1NlY29uZHM9TmQsdC51dGNNaW51dGU9R2QsdC51dGNNaW51dGVzPUpkLHQudXRjSG91cj1RZCx0LnV0Y0hvdXJzPUtkLHQudXRjRGF5PXR2LHQudXRjRGF5cz1udix0LnV0Y1dlZWs9ZXYsdC51dGNXZWVrcz1zdix0LnV0Y1N1bmRheT1ldix0LnV0Y1N1bmRheXM9c3YsdC51dGNNb25kYXk9cnYsdC51dGNNb25kYXlzPWZ2LHQudXRjVHVlc2RheT1pdix0LnV0Y1R1ZXNkYXlzPWx2LHQudXRjV2VkbmVzZGF5PW92LHQudXRjV2VkbmVzZGF5cz1odix0LnV0Y1RodXJzZGF5PXV2LHQudXRjVGh1cnNkYXlzPXB2LHQudXRjRnJpZGF5PWF2LHQudXRjRnJpZGF5cz1kdix0LnV0Y1NhdHVyZGF5PWN2LHQudXRjU2F0dXJkYXlzPXZ2LHQudXRjTW9udGg9X3YsdC51dGNNb250aHM9eXYsdC51dGNZZWFyPWd2LHQudXRjWWVhcnM9eHYsdC5mb3JtYXRMb2NhbGU9UHYsdC5mb3JtYXREZWZhdWx0TG9jYWxlPXJlLHQuZm9ybWF0U3BlY2lmaWVyPUV2LHQucHJlY2lzaW9uRml4ZWQ9THYsdC5wcmVjaXNpb25QcmVmaXg9UnYsdC5wcmVjaXNpb25Sb3VuZD1Vdix0Lmlzb0Zvcm1hdD1Cdix0Lmlzb1BhcnNlPWp2LHQudGltZUZvcm1hdExvY2FsZT1hZSx0LnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPW5yLHQuc2NhbGVCYW5kPW9yLHQuc2NhbGVQb2ludD1hcix0LnNjYWxlSWRlbnRpdHk9eXIsdC5zY2FsZUxpbmVhcj1fcix0LnNjYWxlTG9nPVRyLHQuc2NhbGVPcmRpbmFsPWlyLHQuc2NhbGVJbXBsaWNpdD1Xdix0LnNjYWxlUG93PWtyLHQuc2NhbGVTcXJ0PVNyLHQuc2NhbGVRdWFudGlsZT1Bcix0LnNjYWxlUXVhbnRpemU9RXIsdC5zY2FsZVRocmVzaG9sZD1Dcix0LnNjYWxlVGltZT11Xyx0LnNjYWxlVXRjPWFfLHQuc2NoZW1lQ2F0ZWdvcnkxMD1zXyx0LnNjaGVtZUNhdGVnb3J5MjBiPWZfLHQuc2NoZW1lQ2F0ZWdvcnkyMGM9bF8sdC5zY2hlbWVDYXRlZ29yeTIwPWhfLHQuc2NhbGVTZXF1ZW50aWFsPVJyLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0PXBfLHQuaW50ZXJwb2xhdGVSYWluYm93PXlfLHQuaW50ZXJwb2xhdGVXYXJtPWRfLHQuaW50ZXJwb2xhdGVDb29sPXZfLHQuaW50ZXJwb2xhdGVWaXJpZGlzPWdfLHQuaW50ZXJwb2xhdGVNYWdtYT1tXyx0LmludGVycG9sYXRlSW5mZXJubz14Xyx0LmludGVycG9sYXRlUGxhc21hPWJfLHQuY3JlYXRvcj1OXyx0LmN1c3RvbUV2ZW50PVhyLHQubG9jYWw9T3IsdC5tYXRjaGVyPUNfLHQubW91c2U9VV8sdC5uYW1lc3BhY2U9VF8sdC5uYW1lc3BhY2VzPU1fLHQuc2VsZWN0PWd5LHQuc2VsZWN0QWxsPW15LHQuc2VsZWN0aW9uPVBpLHQuc2VsZWN0b3I9RF8sdC5zZWxlY3RvckFsbD1GXyx0LnRvdWNoPXh5LHQudG91Y2hlcz1ieSx0LndpbmRvdz1peSx0LmFjdGl2ZT1pZyx0LmludGVycnVwdD1QeSx0LnRyYW5zaXRpb249Zm8sdC5heGlzVG9wPW1vLHQuYXhpc1JpZ2h0PXhvLHQuYXhpc0JvdHRvbT1ibyx0LmF4aXNMZWZ0PXdvLHQuY2x1c3Rlcj1oZyx0LmhpZXJhcmNoeT16byx0LnBhY2s9U2csdC5wYWNrU2libGluZ3M9TmcsdC5wYWNrRW5jbG9zZT1UZyx0LnBhcnRpdGlvbj1DZyx0LnN0cmF0aWZ5PUxnLHQudHJlZT1SZyx0LnRyZWVtYXA9RmcsdC50cmVlbWFwQmluYXJ5PUlnLHQudHJlZW1hcERpY2U9RWcsdC50cmVlbWFwU2xpY2U9VWcsdC50cmVlbWFwU2xpY2VEaWNlPVlnLHQudHJlZW1hcFNxdWFyaWZ5PU9nLHQudHJlZW1hcFJlc3F1YXJpZnk9QmcsdC5mb3JjZUNlbnRlcj1qZyx0LmZvcmNlQ29sbGlkZT1WZyx0LmZvcmNlTGluaz1XZyx0LmZvcmNlTWFueUJvZHk9SmcsdC5mb3JjZVNpbXVsYXRpb249R2csdC5mb3JjZVg9UWcsdC5mb3JjZVk9S2csdC5kcmFnPXJtLHQuZHJhZ0Rpc2FibGU9bm0sdC5kcmFnRW5hYmxlPW11LHQudm9yb25vaT1kbSx0Lnpvb209Z20sdC56b29tSWRlbnRpdHk9X20sdC56b29tVHJhbnNmb3JtPWlhLHQuYnJ1c2g9TG0sdC5icnVzaFg9X2EsdC5icnVzaFk9eWEsdC5icnVzaFNlbGVjdGlvbj12YSx0LmNob3JkPVltLHQucmliYm9uPUhtLHQuZ2VvQWxiZXJzPWN3LHQuZ2VvQWxiZXJzVXNhPXN3LHQuZ2VvQXJlYT1HeCx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYT1sdyx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdz1mdyx0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50PXB3LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc9aHcsdC5nZW9Cb3VuZHM9S3gsdC5nZW9DZW50cm9pZD1uYix0Lmdlb0NpcmNsZT1fYix0Lmdlb0NsaXBFeHRlbnQ9TWIsdC5nZW9Db25pY0NvbmZvcm1hbD12dyx0Lmdlb0NvbmljQ29uZm9ybWFsUmF3PWRzLHQuZ2VvQ29uaWNFcXVhbEFyZWE9YXcsdC5nZW9Db25pY0VxdWFsQXJlYVJhdz1hcyx0Lmdlb0NvbmljRXF1aWRpc3RhbnQ9eXcsdC5nZW9Db25pY0VxdWlkaXN0YW50UmF3PV9zLHQuZ2VvRGlzdGFuY2U9RWIsdC5nZW9FcXVpcmVjdGFuZ3VsYXI9X3csdC5nZW9FcXVpcmVjdGFuZ3VsYXJSYXc9dnMsdC5nZW9Hbm9tb25pYz1ndyx0Lmdlb0dub21vbmljUmF3PXlzLHQuZ2VvR3JhdGljdWxlPVNjLHQuZ2VvR3JhdGljdWxlMTA9QWMsdC5nZW9JZGVudGl0eT1tdyx0Lmdlb0ludGVycG9sYXRlPUNiLHQuZ2VvTGVuZ3RoPWtiLHQuZ2VvTWVyY2F0b3I9ZHcsdC5nZW9NZXJjYXRvclJhdz1scyx0Lmdlb09ydGhvZ3JhcGhpYz14dyx0Lmdlb09ydGhvZ3JhcGhpY1Jhdz1tcyx0Lmdlb1BhdGg9R2IsdC5nZW9Qcm9qZWN0aW9uPXJzLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9aXMsdC5nZW9Sb3RhdGlvbj12Yix0Lmdlb1N0ZXJlb2dyYXBoaWM9YncsdC5nZW9TdGVyZW9ncmFwaGljUmF3PXhzLHQuZ2VvU3RyZWFtPVZ4LHQuZ2VvVHJhbnNmb3JtPWV3LHQuZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yPXd3LHQuZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3PWJzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pOw=="></script>
<link href="data:text/css;charset=utf-8,%2Esvgcontainer%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Aposition%3A%20relative%3B%0Apadding%2Dbottom%3A%20100%25%3B%0Avertical%2Dalign%3A%20top%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Esvg%2Dcontent%2Dresponsive%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Aposition%3A%20absolute%3B%0Atop%3A%200px%3B%0Aleft%3A%200%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,"></script>
<script src="data:application/x-javascript;base64,ZnVuY3Rpb24gZDNfc2V0X2F0dHIoc2VsZWN0aW9uLCBuYW1lLCB2YWx1ZSkgewogIHNlbGVjdGlvbi5hdHRyKG5hbWUsIHZhbHVlKTsKfQoKZnVuY3Rpb24gem9vbWVkKCkgewogICAgZDMuc2VsZWN0KHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsIGQzLmV2ZW50LnRyYW5zZm9ybSk7Cn0KCmZ1bmN0aW9uIHNlbGVjdF9kYXRhX2lkX3NpbmdsZShzZWxlY3Rpb24sIGpzX3Zhcm5hbWUsIHN2Z19pZCkgewogIHNlbGVjdGlvbi5vbigiY2xpY2siLCBmdW5jdGlvbihkLGkpIHsKICAgIGQzLnNlbGVjdEFsbChzdmdfaWQgKyAnICpbZGF0YS1pZF0nKS5jbGFzc2VkKCdzZWxlY3RlZF8nLCBmYWxzZSk7CiAgICB2YXIgZGF0YWlkID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoImRhdGEtaWQiKTsKCiAgICBpZiggd2luZG93W2pzX3Zhcm5hbWVdWzBdID09IGRhdGFpZCApewogICAgICB3aW5kb3dbanNfdmFybmFtZV0gPSBbXTsKICAgIH0KICAgIGVsc2UgewogICAgICB3aW5kb3dbanNfdmFybmFtZV0gPSBbZGF0YWlkXTsKICAgICAgZDMuc2VsZWN0QWxsKHN2Z19pZCArICcgKltkYXRhLWlkPSInICsgZGF0YWlkICsgJyJdJykuY2xhc3NlZCgnc2VsZWN0ZWRfJywgdHJ1ZSk7CiAgICB9CiAgICBTaGlueS5vbklucHV0Q2hhbmdlKGpzX3Zhcm5hbWUsIHdpbmRvd1tqc192YXJuYW1lXSk7CiAgfSk7Cn0KCmZ1bmN0aW9uIHNlbGVjdF9kYXRhX2lkX211bHRpcGxlKHNlbGVjdGlvbiwganNfdmFybmFtZSwgc3ZnX2lkKSB7CiAgc2VsZWN0aW9uLm9uKCJjbGljayIsIGZ1bmN0aW9uKGQsaSkgewoKICAgIHZhciBkYXRhaWQgPSBkMy5zZWxlY3QodGhpcykuYXR0cigiZGF0YS1pZCIpOwogICAgdmFyIGluZGV4ID0gd2luZG93W2pzX3Zhcm5hbWVdLmluZGV4T2YoZGF0YWlkKTsKICAgIGlmKCBpbmRleCA8IDAgKXsKICAgICAgd2luZG93W2pzX3Zhcm5hbWVdLnB1c2goIGRhdGFpZCApOwogICAgICBkMy5zZWxlY3RBbGwoc3ZnX2lkICsgJyAqW2RhdGEtaWQ9IicgKyBkYXRhaWQgKyAnIl0nKS5jbGFzc2VkKCdzZWxlY3RlZF8nLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHdpbmRvd1tqc192YXJuYW1lXS5zcGxpY2UoaW5kZXgsMSk7CiAgICAgIGQzLnNlbGVjdEFsbChzdmdfaWQgKyAnICpbZGF0YS1pZD0iJyArIGRhdGFpZCArICciXScpLmNsYXNzZWQoJ3NlbGVjdGVkXycsIGZhbHNlKTsKICAgIH0KCiAgICBTaGlueS5vbklucHV0Q2hhbmdlKGpzX3Zhcm5hbWUsIHdpbmRvd1tqc192YXJuYW1lXSk7CiAgfSk7Cn0KCkhUTUxXaWRnZXRzLndpZGdldCh7CgogIG5hbWU6ICJnZ2lyYXBoIiwKCiAgdHlwZTogIm91dHB1dCIsCgogIGZhY3Rvcnk6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CgogICAgLy8gY3JlYXRlIG91ciBzaWdtYSBvYmplY3QgYW5kIGJpbmQgaXQgdG8gdGhlIGVsZW1lbnQKCiAgICByZXR1cm4gewogICAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oeCkgewogICAgICAgIGVsLmlubmVySFRNTCA9IHguaHRtbDsKICAgICAgICB2YXIgZm4gPSBGdW5jdGlvbih4LmNvZGUpOwogICAgICAgIGZuKCk7CgogICAgICAgIHZhciBzdmdfaWQgPSAnI3N2Z18nICsgeC5jYW52YXNfaWQ7CiAgICAgICAgdmFyIHNlbGVjdGVkX2lkID0gZWwuaWQgKyAnX3NlbGVjdGVkJzsKICAgICAgICB3aW5kb3dbZWwuaWQgKyAnX2NhbnZhcyddID0gJyNzdmdfJyArIHguY2FudmFzX2lkOwogICAgICAgIGQzLnNlbGVjdChlbCkuYXR0cigic3R5bGUiLCAidGV4dC1hbGlnbjpjZW50ZXI7Iik7CiAgICAgICAgd2luZG93W2VsLmlkICsgJ19pZCddID0gc3ZnX2lkOwogICAgICAgIHZhciB0b29sdGlwX2NsYXNzID0gInRvb2x0aXAiICsgeC5jYW52YXNfaWQ7CgogICAgICAgIC8vIGdlbmVyYXRlIGNzcyBlbGVtZW50cwogICAgICAgIHZhciBkYXRhX2lkX2NzcyA9ICIuIiArIHguZGF0YV9pZF9jbGFzcyArICAiOnt9LiIgKwogICAgICAgICAgeC5kYXRhX2lkX2NsYXNzICsgICI6aG92ZXJ7IiArIHguaG92ZXJfY3NzICsgIn0iOwoKICAgICAgICB2YXIgdG9vbHRpcF9jc3MgPSAiZGl2LiIgKyB0b29sdGlwX2NsYXNzICsKICAgICAgICAgICIge3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDo5OTk7IjsKICAgICAgICB0b29sdGlwX2NzcyArPSB4LnRvb2x0aXBfZXh0cmFfY3NzOwogICAgICAgIHRvb2x0aXBfY3NzICs9ICJ9IjsKCiAgICAgICAgdmFyIHNlbGVjdGVkX2NzcyA9ICIuc2VsZWN0ZWRfeyIgKyB4LnNlbGVjdGVkX2NzcyArICJ9IjsKCiAgICAgICAgLy8gYWRkIGNzcyB0byBwYWdlCiAgICAgICAgdmFyIHNoZWV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKICAgICAgICBzaGVldC5pbm5lckhUTUwgPSBkYXRhX2lkX2NzcyArIHRvb2x0aXBfY3NzICsgc2VsZWN0ZWRfY3NzOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2hlZXQpOwoKICAgICAgICB2YXIgZGl2ID0gZDMuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKQogICAgICAgICAgLmF0dHIoImNsYXNzIiwgdG9vbHRpcF9jbGFzcykKICAgICAgICAgIC5zdHlsZSgib3BhY2l0eSIsIDApOwoKICAgICAgICB2YXIgc2VsX2RhdGFfaWQgPSBkMy5zZWxlY3RBbGwoc3ZnX2lkICsgJyAqW2RhdGEtaWRdJyk7CiAgICAgICAgc2VsX2RhdGFfaWQuY2FsbChkM19zZXRfYXR0ciwgImNsYXNzIiwgeC5kYXRhX2lkX2NsYXNzKTsKCiAgICAgICAgaWYoIEhUTUxXaWRnZXRzLnNoaW55TW9kZSApewoKICAgICAgICAgIGlmKCAhKCBlbC5pZCArICJfc2VsZWN0ZWQiIGluIHdpbmRvdyApICkKICAgICAgICAgICAgd2luZG93W2VsLmlkICsgIl9zZWxlY3RlZCJdID0gW107CiAgICAgICAgICBpZiggeC5zZWxlY3Rpb25fdHlwZSA9PSAic2luZ2xlIikKICAgICAgICAgICAgc2VsX2RhdGFfaWQuY2FsbChzZWxlY3RfZGF0YV9pZF9zaW5nbGUsIHNlbGVjdGVkX2lkLCBzdmdfaWQpOwogICAgICAgICAgZWxzZSBpZiggeC5zZWxlY3Rpb25fdHlwZSA9PSAibXVsdGlwbGUiKQogICAgICAgICAgICBzZWxfZGF0YV9pZC5jYWxsKHNlbGVjdF9kYXRhX2lkX211bHRpcGxlLCBzZWxlY3RlZF9pZCwgc3ZnX2lkKTsKCiAgICAgICAgICBkMy5zZWxlY3RBbGwod2luZG93W2VsLmlkICsgIl9zZWxlY3RlZCJdKS5lYWNoKGZ1bmN0aW9uKGQsIGkpIHsKICAgICAgICAgICAgZDMuc2VsZWN0QWxsKHN2Z19pZCArICcgKltkYXRhLWlkPVwiJysgd2luZG93W2VsLmlkICsgIl9zZWxlY3RlZCJdW2ldICsgJ1wiXScpLmNsYXNzZWQoJ3NlbGVjdGVkXycsIHRydWUpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgfQoKICAgICAgICB2YXIgc2VsX3Rvb2x0aXBlZCA9IGQzLnNlbGVjdEFsbChzdmdfaWQgKyAnICpbdGl0bGVdJyk7CiAgICAgICAgc2VsX3Rvb2x0aXBlZC5vbigibW91c2VvdmVyIiwgZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgICAgZGl2LnRyYW5zaXRpb24oKQogICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbigyMDApCiAgICAgICAgICAgICAgICAgICAgLnN0eWxlKCJvcGFjaXR5IiwgeC50b29sdGlwX29wYWNpdHkpOwogICAgICAgICAgICAgICAgZGl2Lmh0bWwoZDMuc2VsZWN0KHRoaXMpLmF0dHIoInRpdGxlIikpCiAgICAgICAgICAgICAgICAgICAgLnN0eWxlKCJsZWZ0IiwgKGQzLmV2ZW50LnBhZ2VYICsgeC50b29sdGlwX29mZnggKSArICJweCIpCiAgICAgICAgICAgICAgICAgICAgLnN0eWxlKCJ0b3AiLCAoZDMuZXZlbnQucGFnZVkgKyB4LnRvb2x0aXBfb2ZmeSApICsgInB4Iik7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24oZCkgewogICAgICAgICAgICAgICAgZGl2LnRyYW5zaXRpb24oKQogICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbig1MDApCiAgICAgICAgICAgICAgICAgICAgLnN0eWxlKCJvcGFjaXR5IiwgMCk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICBkMy5zZWxlY3QoJyNzdmdfJyArIHguY2FudmFzX2lkKQogICAgICAgICAgLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCAieE1pbllNaW4gbWVldCIpCiAgICAgICAgICAuY2xhc3NlZCgic3ZnLWNvbnRlbnQtcmVzcG9uc2l2ZSIsIHRydWUpCiAgICAgICAgICAuYXR0cigid2lkdGgiLCAiMTAwJSIpLmF0dHIoImhlaWdodCIsICIxMDAlIik7CiAgICAgICAgaWYoeC56b29tcGFuPT09dHJ1ZSkgewogICAgICAgICAgZDMuc2VsZWN0KCcjc3ZnXycgKyB4LmNhbnZhc19pZCArICcgZycpLmNhbGwoZDMuem9vbSgpCiAgICAgICAgICAgICAgICAuc2NhbGVFeHRlbnQoWzEsIHguem9vbV9tYXhdKQogICAgICAgICAgICAgICAgLm9uKCJ6b29tIiwgem9vbWVkKSk7CiAgICAgICAgfQogICAgICAgIGQzLnNlbGVjdChlbCkKICAgICAgICAgICAgLnN0eWxlKCAicG9zaXRpb24iLCAicmVsYXRpdmUiKQogICAgICAgICAgICAuc3R5bGUoICJwYWRkaW5nLWJvdHRvbSIsIHgucGFkZGluZ19ib3R0b20pCiAgICAgICAgICAgIC5zdHlsZSggInZlcnRpY2FsLWFsaWduIiwgInRvcCIpCiAgICAgICAgICAgIC5zdHlsZSggIm1hcmdpbiIsICJhdXRvIikKICAgICAgICAgICAgLnN0eWxlKCAib3ZlcmZsb3ciLCAiaGlkZGVuIikKICAgICAgICAgICAgLnN0eWxlKCAid2lkdGgiLCB4LndpZHRoKTsKICAgICAgfSwKCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24od2lkdGgsIGhlaWdodCkgewoKICAgICAgfQoKICAgIH07CiAgfQp9KTs="></script>
</head>
<body style="background-color:white;">
<div id="htmlwidget_container">
<div id="htmlwidget-2044620361de577b997e" class="ggiraph html-widget" style="width:960px;height:500px;">
</div>
</div>
<script type="application/json" data-for="htmlwidget-2044620361de577b997e">{"x":{"html":"<?xml version='1.0' encoding='UTF-8'?><svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='svg_1' viewBox='0 0 576.00 432.00' width='576.00' height='432.00'><g><defs><clipPath id='cl1_0'><rect x='0.00' y='432.00' width='0.00' height='144.00'/><\/clipPath><\/defs><rect x='0.00' y='0.00' width='576.00' height='432.00' id='1' clip-path='url(#cl1_0)' fill=\"#FFFFFF\" fill-opacity=\"1\" stroke-width=\"0.75\" stroke=\"#FFFFFF\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><defs><clipPath id='cl1_1'><rect x='0.00' y='0.00' width='576.00' height='432.00'/><\/clipPath><\/defs><defs><clipPath id='cl1_2'><rect x='42.62' y='47.88' width='526.41' height='291.36'/><\/clipPath><\/defs><polyline points='42.62,302.38 569.03,302.38' id='2' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='42.62,218.03 569.03,218.03' id='3' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='42.62,133.67 569.03,133.67' id='4' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='42.62,49.32 569.03,49.32' id='5' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='46.46,339.25 46.46,47.88' id='6' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='158.02,339.25 158.02,47.88' id='7' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='269.57,339.25 269.57,47.88' id='8' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='381.12,339.25 381.12,47.88' id='9' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='492.67,339.25 492.67,47.88' id='10' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"0.533489\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='42.62,260.21 569.03,260.21' id='11' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"1.06698\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='42.62,175.85 569.03,175.85' id='12' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"1.06698\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='42.62,91.50 569.03,91.50' id='13' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"1.06698\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='102.24,339.25 102.24,47.88' id='14' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"1.06698\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='213.79,339.25 213.79,47.88' id='15' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"1.06698\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='325.34,339.25 325.34,47.88' id='16' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"1.06698\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='436.89,339.25 436.89,47.88' id='17' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"1.06698\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><polyline points='548.44,339.25 548.44,47.88' id='18' clip-path='url(#cl1_2)' fill=\"none\" stroke-width=\"1.06698\" stroke=\"#EBEBEB\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"butt\"/><circle cx='89.97' cy='202.84' r='1.47pt' id='19' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='174.75' cy='229.84' r='1.47pt' id='20' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='137.94' cy='236.59' r='1.47pt' id='21' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='96.66' cy='192.72' r='1.47pt' id='22' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='161.36' cy='241.65' r='1.47pt' id='23' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='160.25' cy='307.44' r='1.47pt' id='24' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='132.36' cy='236.59' r='1.47pt' id='25' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='121.20' cy='177.54' r='1.47pt' id='26' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='163.59' cy='283.82' r='1.47pt' id='27' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='116.74' cy='223.09' r='1.47pt' id='28' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='145.74' cy='253.46' r='1.47pt' id='29' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='96.66' cy='157.29' r='1.47pt' id='30' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='118.97' cy='251.77' r='1.47pt' id='31' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='114.51' cy='175.85' r='1.47pt' id='32' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='116.74' cy='182.60' r='1.47pt' id='33' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='385.58' cy='150.54' r='1.47pt' id='34' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='112.28' cy='153.92' r='1.47pt' id='35' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='115.63' cy='185.97' r='1.47pt' id='36' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='127.90' cy='197.78' r='1.47pt' id='37' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='85.51' cy='165.73' r='1.47pt' id='38' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='98.89' cy='180.91' r='1.47pt' id='39' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='152.44' cy='239.96' r='1.47pt' id='40' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='162.48' cy='245.02' r='1.47pt' id='41' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='217.14' cy='258.52' r='1.47pt' id='42' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='93.32' cy='184.29' r='1.47pt' id='43' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='84.39' cy='184.29' r='1.47pt' id='44' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='220.48' cy='312.50' r='1.47pt' id='45' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='113.40' cy='104.99' r='1.47pt' id='46' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='116.74' cy='142.11' r='1.47pt' id='47' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='120.09' cy='229.84' r='1.47pt' id='48' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='93.32' cy='218.03' r='1.47pt' id='49' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='66.54' cy='197.78' r='1.47pt' id='50' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='110.05' cy='204.53' r='1.47pt' id='51' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='144.63' cy='238.27' r='1.47pt' id='52' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='129.01' cy='207.91' r='1.47pt' id='53' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='223.83' cy='297.32' r='1.47pt' id='54' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='111.16' cy='175.85' r='1.47pt' id='55' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='87.74' cy='191.03' r='1.47pt' id='56' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='113.40' cy='322.63' r='1.47pt' id='57' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='97.78' cy='251.77' r='1.47pt' id='58' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='122.32' cy='94.87' r='1.47pt' id='59' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='144.63' cy='201.16' r='1.47pt' id='60' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='88.85' cy='172.48' r='1.47pt' id='61' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='207.10' cy='290.57' r='1.47pt' id='62' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='101.12' cy='268.64' r='1.47pt' id='63' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='110.05' cy='185.97' r='1.47pt' id='64' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='102.24' cy='191.03' r='1.47pt' id='65' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='106.70' cy='206.22' r='1.47pt' id='66' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='124.55' cy='182.60' r='1.47pt' id='67' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='106.70' cy='214.65' r='1.47pt' id='68' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='152.44' cy='182.60' r='1.47pt' id='69' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='152.44' cy='326.00' r='1.47pt' id='70' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='126.78' cy='194.41' r='1.47pt' id='71' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='137.94' cy='202.84' r='1.47pt' id='72' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='152.44' cy='191.03' r='1.47pt' id='73' clip-path='url(#cl1_2)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='371.08' cy='214.65' r='1.47pt' id='74' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='213.79' cy='248.40' r='1.47pt' id='75' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='396.74' cy='182.60' r='1.47pt' id='76' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='446.93' cy='184.29' r='1.47pt' id='77' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='489.32' cy='157.29' r='1.47pt' id='78' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='277.38' cy='248.40' r='1.47pt' id='79' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='372.19' cy='108.37' r='1.47pt' id='80' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='502.71' cy='115.12' r='1.47pt' id='81' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='383.35' cy='206.22' r='1.47pt' id='82' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='151.32' cy='189.35' r='1.47pt' id='83' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='467.01' cy='113.43' r='1.47pt' id='84' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='400.08' cy='238.27' r='1.47pt' id='85' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='358.81' cy='223.09' r='1.47pt' id='86' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='467.01' cy='206.22' r='1.47pt' id='87' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='402.31' cy='174.16' r='1.47pt' id='88' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='409.01' cy='137.05' r='1.47pt' id='89' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='276.26' cy='199.47' r='1.47pt' id='90' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='380.00' cy='204.53' r='1.47pt' id='91' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='386.70' cy='209.59' r='1.47pt' id='92' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='377.77' cy='226.46' r='1.47pt' id='93' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='434.66' cy='192.72' r='1.47pt' id='94' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='516.10' cy='155.61' r='1.47pt' id='95' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='424.62' cy='145.48' r='1.47pt' id='96' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='182.56' cy='202.84' r='1.47pt' id='97' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='224.95' cy='233.21' r='1.47pt' id='98' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='545.10' cy='172.48' r='1.47pt' id='99' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='383.35' cy='236.59' r='1.47pt' id='100' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='398.97' cy='61.13' r='1.47pt' id='101' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='479.28' cy='130.30' r='1.47pt' id='102' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='358.81' cy='243.33' r='1.47pt' id='103' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='396.74' cy='182.60' r='1.47pt' id='104' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='472.59' cy='189.35' r='1.47pt' id='105' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='427.97' cy='212.97' r='1.47pt' id='106' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='339.84' cy='179.22' r='1.47pt' id='107' clip-path='url(#cl1_2)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='143.51' cy='131.99' r='1.47pt' id='108' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='209.33' cy='234.90' r='1.47pt' id='109' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='277.38' cy='226.46' r='1.47pt' id='110' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='214.91' cy='256.83' r='1.47pt' id='111' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='406.77' cy='162.35' r='1.47pt' id='112' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='410.12' cy='174.16' r='1.47pt' id='113' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='398.97' cy='131.99' r='1.47pt' id='114' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='297.45' cy='196.10' r='1.47pt' id='115' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='249.49' cy='236.59' r='1.47pt' id='116' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='214.91' cy='233.21' r='1.47pt' id='117' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='139.05' cy='150.54' r='1.47pt' id='118' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='335.38' cy='207.91' r='1.47pt' id='119' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='336.50' cy='256.83' r='1.47pt' id='120' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='217.14' cy='211.28' r='1.47pt' id='121' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='278.49' cy='268.64' r='1.47pt' id='122' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='218.25' cy='211.28' r='1.47pt' id='123' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='200.41' cy='239.96' r='1.47pt' id='124' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='250.60' cy='206.22' r='1.47pt' id='125' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='292.99' cy='233.21' r='1.47pt' id='126' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='289.65' cy='231.52' r='1.47pt' id='127' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='297.45' cy='106.68' r='1.47pt' id='128' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='371.08' cy='212.97' r='1.47pt' id='129' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='252.83' cy='241.65' r='1.47pt' id='130' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='243.91' cy='231.52' r='1.47pt' id='131' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='243.91' cy='236.59' r='1.47pt' id='132' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='243.91' cy='263.58' r='1.47pt' id='133' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='450.28' cy='143.80' r='1.47pt' id='134' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='271.80' cy='221.40' r='1.47pt' id='135' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='313.07' cy='214.65' r='1.47pt' id='136' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='255.07' cy='263.58' r='1.47pt' id='137' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='262.87' cy='245.02' r='1.47pt' id='138' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='125.67' cy='135.36' r='1.47pt' id='139' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='282.95' cy='256.83' r='1.47pt' id='140' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='368.85' cy='234.90' r='1.47pt' id='141' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='411.24' cy='226.46' r='1.47pt' id='142' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='334.27' cy='253.46' r='1.47pt' id='143' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='393.39' cy='157.29' r='1.47pt' id='144' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='190.37' cy='233.21' r='1.47pt' id='145' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='364.39' cy='212.97' r='1.47pt' id='146' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='324.23' cy='145.48' r='1.47pt' id='147' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='258.41' cy='285.51' r='1.47pt' id='148' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='390.04' cy='243.33' r='1.47pt' id='149' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='111.16' cy='89.81' r='1.47pt' id='150' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='230.52' cy='236.59' r='1.47pt' id='151' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='287.41' cy='268.64' r='1.47pt' id='152' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='163.59' cy='246.71' r='1.47pt' id='153' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='337.61' cy='231.52' r='1.47pt' id='154' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='468.13' cy='180.91' r='1.47pt' id='155' clip-path='url(#cl1_2)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='134.59' cy='185.97' r='1.47pt' id='156' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='261.76' cy='248.40' r='1.47pt' id='157' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='482.63' cy='110.05' r='1.47pt' id='158' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='178.09' cy='216.34' r='1.47pt' id='159' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='189.25' cy='238.27' r='1.47pt' id='160' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='113.40' cy='116.80' r='1.47pt' id='161' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='251.72' cy='277.08' r='1.47pt' id='162' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='91.08' cy='185.97' r='1.47pt' id='163' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='253.95' cy='223.09' r='1.47pt' id='164' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='156.90' cy='241.65' r='1.47pt' id='165' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='97.78' cy='104.99' r='1.47pt' id='166' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='139.05' cy='223.09' r='1.47pt' id='167' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='200.41' cy='273.70' r='1.47pt' id='168' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='156.90' cy='260.21' r='1.47pt' id='169' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='159.13' cy='270.33' r='1.47pt' id='170' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='96.66' cy='201.16' r='1.47pt' id='171' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='164.71' cy='223.09' r='1.47pt' id='172' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='222.72' cy='245.02' r='1.47pt' id='173' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='222.72' cy='255.14' r='1.47pt' id='174' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='218.25' cy='228.15' r='1.47pt' id='175' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='346.54' cy='192.72' r='1.47pt' id='176' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='205.98' cy='228.15' r='1.47pt' id='177' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='101.12' cy='125.24' r='1.47pt' id='178' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='200.41' cy='258.52' r='1.47pt' id='179' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='337.61' cy='263.58' r='1.47pt' id='180' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='191.48' cy='224.78' r='1.47pt' id='181' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='291.88' cy='282.14' r='1.47pt' id='182' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='219.37' cy='180.91' r='1.47pt' id='183' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='140.17' cy='270.33' r='1.47pt' id='184' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='221.60' cy='273.70' r='1.47pt' id='185' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='188.13' cy='260.21' r='1.47pt' id='186' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='236.10' cy='285.51' r='1.47pt' id='187' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='294.11' cy='233.21' r='1.47pt' id='188' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='118.97' cy='219.71' r='1.47pt' id='189' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='195.94' cy='255.14' r='1.47pt' id='190' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='120.09' cy='184.29' r='1.47pt' id='191' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='280.72' cy='248.40' r='1.47pt' id='192' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='285.18' cy='285.51' r='1.47pt' id='193' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='112.28' cy='245.02' r='1.47pt' id='194' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='207.10' cy='260.21' r='1.47pt' id='195' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='210.44' cy='270.33' r='1.47pt' id='196' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='105.59' cy='145.48' r='1.47pt' id='197' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='162.48' cy='226.46' r='1.47pt' id='198' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='172.52' cy='234.90' r='1.47pt' id='199' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='98.89' cy='143.80' r='1.47pt' id='200' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='175.86' cy='231.52' r='1.47pt' id='201' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='223.83' cy='157.29' r='1.47pt' id='202' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='188.13' cy='266.95' r='1.47pt' id='203' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='104.47' cy='216.34' r='1.47pt' id='204' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='110.05' cy='185.97' r='1.47pt' id='205' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='275.14' cy='231.52' r='1.47pt' id='206' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='182.56' cy='251.77' r='1.47pt' id='207' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='178.09' cy='248.40' r='1.47pt' id='208' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='228.29' cy='196.10' r='1.47pt' id='209' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='253.95' cy='197.78' r='1.47pt' id='210' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='211.56' cy='263.58' r='1.47pt' id='211' clip-path='url(#cl1_2)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><script type='text/javascript'><![CDATA[document.querySelectorAll('#svg_1')[0].getElementById('19').setAttribute('title','Andorra: 8.9, 8.4');document.querySelectorAll('#svg_1')[0].getElementById('20').setAttribute('title','Antigua and Barbuda: 16.5, 6.8');document.querySelectorAll('#svg_1')[0].getElementById('21').setAttribute('title','Australia: 13.2, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('22').setAttribute('title','Austria: 9.5, 9');document.querySelectorAll('#svg_1')[0].getElementById('23').setAttribute('title','Bahamas: 15.3, 6.1');document.querySelectorAll('#svg_1')[0].getElementById('24').setAttribute('title','Bahrain: 15.2, 2.2');document.querySelectorAll('#svg_1')[0].getElementById('25').setAttribute('title','Barbados: 12.7, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('26').setAttribute('title','Belgium: 11.7, 9.9');document.querySelectorAll('#svg_1')[0].getElementById('27').setAttribute('title','Brunei Darussalam: 15.5, 3.6');document.querySelectorAll('#svg_1')[0].getElementById('28').setAttribute('title','Canada: 11.3, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('29').setAttribute('title','Chile: 13.9, 5.4');document.querySelectorAll('#svg_1')[0].getElementById('30').setAttribute('title','Croatia: 9.5, 11.1');document.querySelectorAll('#svg_1')[0].getElementById('31').setAttribute('title','Cyprus: 11.5, 5.5');document.querySelectorAll('#svg_1')[0].getElementById('32').setAttribute('title','Czechia: 11.1, 10');document.querySelectorAll('#svg_1')[0].getElementById('33').setAttribute('title','Denmark: 11.3, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('34').setAttribute('title','Equatorial Guinea: 35.4, 11.5');document.querySelectorAll('#svg_1')[0].getElementById('35').setAttribute('title','Estonia: 10.9, 11.3');document.querySelectorAll('#svg_1')[0].getElementById('36').setAttribute('title','Finland: 11.2, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('37').setAttribute('title','France: 12.3, 8.7');document.querySelectorAll('#svg_1')[0].getElementById('38').setAttribute('title','Germany: 8.5, 10.6');document.querySelectorAll('#svg_1')[0].getElementById('39').setAttribute('title','Greece: 9.7, 9.7');document.querySelectorAll('#svg_1')[0].getElementById('40').setAttribute('title','Iceland: 14.5, 6.2');document.querySelectorAll('#svg_1')[0].getElementById('41').setAttribute('title','Ireland: 15.4, 5.9');document.querySelectorAll('#svg_1')[0].getElementById('42').setAttribute('title','Israel: 20.3, 5.1');document.querySelectorAll('#svg_1')[0].getElementById('43').setAttribute('title','Italy: 9.2, 9.5');document.querySelectorAll('#svg_1')[0].getElementById('44').setAttribute('title','Japan: 8.4, 9.5');document.querySelectorAll('#svg_1')[0].getElementById('45').setAttribute('title','Kuwait: 20.6, 1.9');document.querySelectorAll('#svg_1')[0].getElementById('46').setAttribute('title','Latvia: 11, 14.2');document.querySelectorAll('#svg_1')[0].getElementById('47').setAttribute('title','Lithuania: 11.3, 12');document.querySelectorAll('#svg_1')[0].getElementById('48').setAttribute('title','Luxembourg: 11.6, 6.8');document.querySelectorAll('#svg_1')[0].getElementById('49').setAttribute('title','Malta: 9.2, 7.5');document.querySelectorAll('#svg_1')[0].getElementById('50').setAttribute('title','Monaco: 6.8, 8.7');document.querySelectorAll('#svg_1')[0].getElementById('51').setAttribute('title','Netherlands: 10.7, 8.3');document.querySelectorAll('#svg_1')[0].getElementById('52').setAttribute('title','New Zealand: 13.8, 6.3');document.querySelectorAll('#svg_1')[0].getElementById('53').setAttribute('title','Norway: 12.4, 8.1');document.querySelectorAll('#svg_1')[0].getElementById('54').setAttribute('title','Oman: 20.9, 2.8');document.querySelectorAll('#svg_1')[0].getElementById('55').setAttribute('title','Poland: 10.8, 10');document.querySelectorAll('#svg_1')[0].getElementById('56').setAttribute('title','Portugal: 8.7, 9.1');document.querySelectorAll('#svg_1')[0].getElementById('57').setAttribute('title','Qatar: 11, 1.3');document.querySelectorAll('#svg_1')[0].getElementById('58').setAttribute('title','Republic of Korea: 9.6, 5.5');document.querySelectorAll('#svg_1')[0].getElementById('59').setAttribute('title','Russian Federation: 11.8, 14.8');document.querySelectorAll('#svg_1')[0].getElementById('60').setAttribute('title','Saint Kitts and Nevis: 13.8, 8.5');document.querySelectorAll('#svg_1')[0].getElementById('61').setAttribute('title','San Marino: 8.8, 10.2');document.querySelectorAll('#svg_1')[0].getElementById('62').setAttribute('title','Saudi Arabia: 19.4, 3.2');document.querySelectorAll('#svg_1')[0].getElementById('63').setAttribute('title','Singapore: 9.9, 4.5');document.querySelectorAll('#svg_1')[0].getElementById('64').setAttribute('title','Slovakia: 10.7, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('65').setAttribute('title','Slovenia: 10, 9.1');document.querySelectorAll('#svg_1')[0].getElementById('66').setAttribute('title','Spain: 10.4, 8.2');document.querySelectorAll('#svg_1')[0].getElementById('67').setAttribute('title','Sweden: 12, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('68').setAttribute('title','Switzerland: 10.4, 7.7');document.querySelectorAll('#svg_1')[0].getElementById('69').setAttribute('title','Trinidad and Tobago: 14.5, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('70').setAttribute('title','United Arab Emirates: 14.5, 1.1');document.querySelectorAll('#svg_1')[0].getElementById('71').setAttribute('title','United Kingdom of Great Britain and Northern Ireland: 12.2, 8.9');document.querySelectorAll('#svg_1')[0].getElementById('72').setAttribute('title','United States of America: 13.2, 8.4');document.querySelectorAll('#svg_1')[0].getElementById('73').setAttribute('title','Uruguay: 14.5, 9.1');document.querySelectorAll('#svg_1')[0].getElementById('74').setAttribute('title','Afghanistan: 34.1, 7.7');document.querySelectorAll('#svg_1')[0].getElementById('75').setAttribute('title','Bangladesh: 20, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('76').setAttribute('title','Benin: 36.4, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('77').setAttribute('title','Burkina Faso: 40.9, 9.5');document.querySelectorAll('#svg_1')[0].getElementById('78').setAttribute('title','Burundi: 44.7, 11.1');document.querySelectorAll('#svg_1')[0].getElementById('79').setAttribute('title','Cambodia: 25.7, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('80').setAttribute('title','Central African Republic: 34.2, 14');document.querySelectorAll('#svg_1')[0].getElementById('81').setAttribute('title','Chad: 45.9, 13.6');document.querySelectorAll('#svg_1')[0].getElementById('82').setAttribute('title','Comoros: 35.2, 8.2');document.querySelectorAll('#svg_1')[0].getElementById('83').setAttribute('title','Democratic People's Republic of Korea: 14.4, 9.2');document.querySelectorAll('#svg_1')[0].getElementById('84').setAttribute('title','Democratic Republic of the Congo: 42.7, 13.7');document.querySelectorAll('#svg_1')[0].getElementById('85').setAttribute('title','Eritrea: 36.7, 6.3');document.querySelectorAll('#svg_1')[0].getElementById('86').setAttribute('title','Ethiopia: 33, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('87').setAttribute('title','Gambia: 42.7, 8.2');document.querySelectorAll('#svg_1')[0].getElementById('88').setAttribute('title','Guinea: 36.9, 10.1');document.querySelectorAll('#svg_1')[0].getElementById('89').setAttribute('title','Guinea-Bissau: 37.5, 12.3');document.querySelectorAll('#svg_1')[0].getElementById('90').setAttribute('title','Haiti: 25.6, 8.6');document.querySelectorAll('#svg_1')[0].getElementById('91').setAttribute('title','Kenya: 34.9, 8.3');document.querySelectorAll('#svg_1')[0].getElementById('92').setAttribute('title','Liberia: 35.5, 8');document.querySelectorAll('#svg_1')[0].getElementById('93').setAttribute('title','Madagascar: 34.7, 7');document.querySelectorAll('#svg_1')[0].getElementById('94').setAttribute('title','Malawi: 39.8, 9');document.querySelectorAll('#svg_1')[0].getElementById('95').setAttribute('title','Mali: 47.1, 11.2');document.querySelectorAll('#svg_1')[0].getElementById('96').setAttribute('title','Mozambique: 38.9, 11.8');document.querySelectorAll('#svg_1')[0].getElementById('97').setAttribute('title','Myanmar: 17.2, 8.4');document.querySelectorAll('#svg_1')[0].getElementById('98').setAttribute('title','Nepal: 21, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('99').setAttribute('title','Niger: 49.7, 10.2');document.querySelectorAll('#svg_1')[0].getElementById('100').setAttribute('title','Rwanda: 35.2, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('101').setAttribute('title','Sierra Leone: 36.6, 16.8');document.querySelectorAll('#svg_1')[0].getElementById('102').setAttribute('title','Somalia: 43.8, 12.7');document.querySelectorAll('#svg_1')[0].getElementById('103').setAttribute('title','Tajikistan: 33, 6');document.querySelectorAll('#svg_1')[0].getElementById('104').setAttribute('title','Togo: 36.4, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('105').setAttribute('title','Uganda: 43.2, 9.2');document.querySelectorAll('#svg_1')[0].getElementById('106').setAttribute('title','United Republic of Tanzania: 39.2, 7.8');document.querySelectorAll('#svg_1')[0].getElementById('107').setAttribute('title','Zimbabwe: 31.3, 9.8');document.querySelectorAll('#svg_1')[0].getElementById('108').setAttribute('title','Armenia: 13.7, 12.6');document.querySelectorAll('#svg_1')[0].getElementById('109').setAttribute('title','Bhutan: 19.6, 6.5');document.querySelectorAll('#svg_1')[0].getElementById('110').setAttribute('title','Bolivia (Plurinational State of): 25.7, 7');document.querySelectorAll('#svg_1')[0].getElementById('111').setAttribute('title','Cabo Verde: 20.1, 5.2');document.querySelectorAll('#svg_1')[0].getElementById('112').setAttribute('title','Cameroon: 37.3, 10.8');document.querySelectorAll('#svg_1')[0].getElementById('113').setAttribute('title','Congo: 37.6, 10.1');document.querySelectorAll('#svg_1')[0].getElementById('114').setAttribute('title','Côte d'Ivoire: 36.6, 12.6');document.querySelectorAll('#svg_1')[0].getElementById('115').setAttribute('title','Djibouti: 27.5, 8.8');document.querySelectorAll('#svg_1')[0].getElementById('116').setAttribute('title','Egypt: 23.2, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('117').setAttribute('title','El Salvador: 20.1, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('118').setAttribute('title','Georgia: 13.3, 11.5');document.querySelectorAll('#svg_1')[0].getElementById('119').setAttribute('title','Ghana: 30.9, 8.1');document.querySelectorAll('#svg_1')[0].getElementById('120').setAttribute('title','Guatemala: 31, 5.2');document.querySelectorAll('#svg_1')[0].getElementById('121').setAttribute('title','Guyana: 20.3, 7.9');document.querySelectorAll('#svg_1')[0].getElementById('122').setAttribute('title','Honduras: 25.8, 4.5');document.querySelectorAll('#svg_1')[0].getElementById('123').setAttribute('title','India: 20.4, 7.9');document.querySelectorAll('#svg_1')[0].getElementById('124').setAttribute('title','Indonesia: 18.8, 6.2');document.querySelectorAll('#svg_1')[0].getElementById('125').setAttribute('title','Kiribati: 23.3, 8.2');document.querySelectorAll('#svg_1')[0].getElementById('126').setAttribute('title','Kyrgyzstan: 27.1, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('127').setAttribute('title','Lao People's Democratic Republic: 26.8, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('128').setAttribute('title','Lesotho: 27.5, 14.1');document.querySelectorAll('#svg_1')[0].getElementById('129').setAttribute('title','Mauritania: 34.1, 7.8');document.querySelectorAll('#svg_1')[0].getElementById('130').setAttribute('title','Micronesia (Federated States of): 23.5, 6.1');document.querySelectorAll('#svg_1')[0].getElementById('131').setAttribute('title','Mongolia: 22.7, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('132').setAttribute('title','Morocco: 22.7, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('133').setAttribute('title','Nicaragua: 22.7, 4.8');document.querySelectorAll('#svg_1')[0].getElementById('134').setAttribute('title','Nigeria: 41.2, 11.9');document.querySelectorAll('#svg_1')[0].getElementById('135').setAttribute('title','Pakistan: 25.2, 7.3');document.querySelectorAll('#svg_1')[0].getElementById('136').setAttribute('title','Papua New Guinea: 28.9, 7.7');document.querySelectorAll('#svg_1')[0].getElementById('137').setAttribute('title','Paraguay: 23.7, 4.8');document.querySelectorAll('#svg_1')[0].getElementById('138').setAttribute('title','Philippines: 24.4, 5.9');document.querySelectorAll('#svg_1')[0].getElementById('139').setAttribute('title','Republic of Moldova: 12.1, 12.4');document.querySelectorAll('#svg_1')[0].getElementById('140').setAttribute('title','Samoa: 26.2, 5.2');document.querySelectorAll('#svg_1')[0].getElementById('141').setAttribute('title','Sao Tome and Principe: 33.9, 6.5');document.querySelectorAll('#svg_1')[0].getElementById('142').setAttribute('title','Senegal: 37.7, 7');document.querySelectorAll('#svg_1')[0].getElementById('143').setAttribute('title','Solomon Islands: 30.8, 5.4');document.querySelectorAll('#svg_1')[0].getElementById('144').setAttribute('title','South Sudan: 36.1, 11.1');document.querySelectorAll('#svg_1')[0].getElementById('145').setAttribute('title','Sri Lanka: 17.9, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('146').setAttribute('title','Sudan: 33.5, 7.8');document.querySelectorAll('#svg_1')[0].getElementById('147').setAttribute('title','Swaziland: 29.9, 11.8');document.querySelectorAll('#svg_1')[0].getElementById('148').setAttribute('title','Syrian Arab Republic: 24, 3.5');document.querySelectorAll('#svg_1')[0].getElementById('149').setAttribute('title','Timor-Leste: 35.8, 6');document.querySelectorAll('#svg_1')[0].getElementById('150').setAttribute('title','Ukraine: 10.8, 15.1');document.querySelectorAll('#svg_1')[0].getElementById('151').setAttribute('title','Uzbekistan: 21.5, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('152').setAttribute('title','Vanuatu: 26.6, 4.5');document.querySelectorAll('#svg_1')[0].getElementById('153').setAttribute('title','Viet Nam: 15.5, 5.8');document.querySelectorAll('#svg_1')[0].getElementById('154').setAttribute('title','Yemen: 31.1, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('155').setAttribute('title','Zambia: 42.8, 9.7');document.querySelectorAll('#svg_1')[0].getElementById('156').setAttribute('title','Albania: 12.9, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('157').setAttribute('title','Algeria: 24.3, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('158').setAttribute('title','Angola: 44.1, 13.9');document.querySelectorAll('#svg_1')[0].getElementById('159').setAttribute('title','Argentina: 16.8, 7.6');document.querySelectorAll('#svg_1')[0].getElementById('160').setAttribute('title','Azerbaijan: 17.8, 6.3');document.querySelectorAll('#svg_1')[0].getElementById('161').setAttribute('title','Belarus: 11, 13.5');document.querySelectorAll('#svg_1')[0].getElementById('162').setAttribute('title','Belize: 23.4, 4');document.querySelectorAll('#svg_1')[0].getElementById('163').setAttribute('title','Bosnia and Herzegovina: 9, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('164').setAttribute('title','Botswana: 23.6, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('165').setAttribute('title','Brazil: 14.9, 6.1');document.querySelectorAll('#svg_1')[0].getElementById('166').setAttribute('title','Bulgaria: 9.6, 14.2');document.querySelectorAll('#svg_1')[0].getElementById('167').setAttribute('title','China: 13.3, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('168').setAttribute('title','Colombia: 18.8, 4.2');document.querySelectorAll('#svg_1')[0].getElementById('169').setAttribute('title','Cook Islands: 14.9, 5');document.querySelectorAll('#svg_1')[0].getElementById('170').setAttribute('title','Costa Rica: 15.1, 4.4');document.querySelectorAll('#svg_1')[0].getElementById('171').setAttribute('title','Cuba: 9.5, 8.5');document.querySelectorAll('#svg_1')[0].getElementById('172').setAttribute('title','Dominica: 15.6, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('173').setAttribute('title','Dominican Republic: 20.8, 5.9');document.querySelectorAll('#svg_1')[0].getElementById('174').setAttribute('title','Ecuador: 20.8, 5.3');document.querySelectorAll('#svg_1')[0].getElementById('175').setAttribute('title','Fiji: 20.4, 6.9');document.querySelectorAll('#svg_1')[0].getElementById('176').setAttribute('title','Gabon: 31.9, 9');document.querySelectorAll('#svg_1')[0].getElementById('177').setAttribute('title','Grenada: 19.3, 6.9');document.querySelectorAll('#svg_1')[0].getElementById('178').setAttribute('title','Hungary: 9.9, 13');document.querySelectorAll('#svg_1')[0].getElementById('179').setAttribute('title','Iran (Islamic Republic of): 18.8, 5.1');document.querySelectorAll('#svg_1')[0].getElementById('180').setAttribute('title','Iraq: 31.1, 4.8');document.querySelectorAll('#svg_1')[0].getElementById('181').setAttribute('title','Jamaica: 18, 7.1');document.querySelectorAll('#svg_1')[0].getElementById('182').setAttribute('title','Jordan: 27, 3.7');document.querySelectorAll('#svg_1')[0].getElementById('183').setAttribute('title','Kazakhstan: 20.5, 9.7');document.querySelectorAll('#svg_1')[0].getElementById('184').setAttribute('title','Lebanon: 13.4, 4.4');document.querySelectorAll('#svg_1')[0].getElementById('185').setAttribute('title','Libya: 20.7, 4.2');document.querySelectorAll('#svg_1')[0].getElementById('186').setAttribute('title','Malaysia: 17.7, 5');document.querySelectorAll('#svg_1')[0].getElementById('187').setAttribute('title','Maldives: 22, 3.5');document.querySelectorAll('#svg_1')[0].getElementById('188').setAttribute('title','Marshall Islands: 27.2, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('189').setAttribute('title','Mauritius: 11.5, 7.4');document.querySelectorAll('#svg_1')[0].getElementById('190').setAttribute('title','Mexico: 18.4, 5.3');document.querySelectorAll('#svg_1')[0].getElementById('191').setAttribute('title','Montenegro: 11.6, 9.5');document.querySelectorAll('#svg_1')[0].getElementById('192').setAttribute('title','Namibia: 26, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('193').setAttribute('title','Nauru: 26.4, 3.5');document.querySelectorAll('#svg_1')[0].getElementById('194').setAttribute('title','Palau: 10.9, 5.9');document.querySelectorAll('#svg_1')[0].getElementById('195').setAttribute('title','Panama: 19.4, 5');document.querySelectorAll('#svg_1')[0].getElementById('196').setAttribute('title','Peru: 19.7, 4.4');document.querySelectorAll('#svg_1')[0].getElementById('197').setAttribute('title','Romania: 10.3, 11.8');document.querySelectorAll('#svg_1')[0].getElementById('198').setAttribute('title','Saint Lucia: 15.4, 7');document.querySelectorAll('#svg_1')[0].getElementById('199').setAttribute('title','Saint Vincent and the Grenadines: 16.3, 6.5');document.querySelectorAll('#svg_1')[0].getElementById('200').setAttribute('title','Serbia: 9.7, 11.9');document.querySelectorAll('#svg_1')[0].getElementById('201').setAttribute('title','Seychelles: 16.6, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('202').setAttribute('title','South Africa: 20.9, 11.1');document.querySelectorAll('#svg_1')[0].getElementById('203').setAttribute('title','Suriname: 17.7, 4.6');document.querySelectorAll('#svg_1')[0].getElementById('204').setAttribute('title','Thailand: 10.2, 7.6');document.querySelectorAll('#svg_1')[0].getElementById('205').setAttribute('title','The former Yugoslav republic of Macedonia: 10.7, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('206').setAttribute('title','Tonga: 25.5, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('207').setAttribute('title','Tunisia: 17.2, 5.5');document.querySelectorAll('#svg_1')[0].getElementById('208').setAttribute('title','Turkey: 16.8, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('209').setAttribute('title','Turkmenistan: 21.3, 8.8');document.querySelectorAll('#svg_1')[0].getElementById('210').setAttribute('title','Tuvalu: 23.6, 8.7');document.querySelectorAll('#svg_1')[0].getElementById('211').setAttribute('title','Venezuela (Bolivarian Republic of): 19.8, 4.8');]]><\/script><defs><clipPath id='cl1_3'><rect x='0.00' y='0.00' width='576.00' height='432.00'/><\/clipPath><\/defs><g clip-path='url(#cl1_3)'><text x='30.22' y='264.14' id='212' font-size='8.40pt' fill=\"#4D4D4D\" fill-opacity=\"1\" font-family='Arial'>5<\/text><\/g><g clip-path='url(#cl1_3)'><text x='24.10' y='179.79' id='213' font-size='8.40pt' fill=\"#4D4D4D\" fill-opacity=\"1\" font-family='Arial'>10<\/text><\/g><g clip-path='url(#cl1_3)'><text x='24.10' y='95.43' id='214' font-size='8.40pt' fill=\"#4D4D4D\" fill-opacity=\"1\" font-family='Arial'>15<\/text><\/g><g clip-path='url(#cl1_3)'><text x='96.12' y='353.40' id='215' font-size='8.40pt' fill=\"#4D4D4D\" fill-opacity=\"1\" font-family='Arial'>10<\/text><\/g><g clip-path='url(#cl1_3)'><text x='207.67' y='353.40' id='216' font-size='8.40pt' fill=\"#4D4D4D\" fill-opacity=\"1\" font-family='Arial'>20<\/text><\/g><g clip-path='url(#cl1_3)'><text x='319.22' y='353.40' id='217' font-size='8.40pt' fill=\"#4D4D4D\" fill-opacity=\"1\" font-family='Arial'>30<\/text><\/g><g clip-path='url(#cl1_3)'><text x='430.78' y='353.40' id='218' font-size='8.40pt' fill=\"#4D4D4D\" fill-opacity=\"1\" font-family='Arial'>40<\/text><\/g><g clip-path='url(#cl1_3)'><text x='542.33' y='353.40' id='219' font-size='8.40pt' fill=\"#4D4D4D\" fill-opacity=\"1\" font-family='Arial'>50<\/text><\/g><g clip-path='url(#cl1_3)'><text x='257.19' y='370.39' id='220' font-size='10.50pt' font-family='Arial'>Crude birth rate<\/text><\/g><g clip-path='url(#cl1_3)'><text transform='translate(16.99,246.10) rotate(-90)' id='221' font-size='10.50pt' font-family='Arial'>Crude death rate<\/text><\/g><g clip-path='url(#cl1_3)'><text x='91.63' y='401.18' id='222' font-size='10.50pt' font-family='Arial'>World Bank Income Group<\/text><\/g><circle cx='269.55' cy='396.17' r='1.47pt' id='223' clip-path='url(#cl1_3)' fill=\"#1B9E77\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#1B9E77\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='313.78' cy='396.17' r='1.47pt' id='224' clip-path='url(#cl1_3)' fill=\"#D95F02\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#D95F02\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='401.40' cy='396.17' r='1.47pt' id='225' clip-path='url(#cl1_3)' fill=\"#7570B3\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#7570B3\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><circle cx='489.03' cy='396.17' r='1.47pt' id='226' clip-path='url(#cl1_3)' fill=\"#E7298A\" fill-opacity=\"1\" stroke-width=\"0.708661\" stroke=\"#E7298A\" stroke-opacity=\"1\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/><g clip-path='url(#cl1_3)'><text x='280.35' y='400.11' id='227' font-size='8.40pt' font-family='Arial'>High<\/text><\/g><g clip-path='url(#cl1_3)'><text x='324.58' y='400.11' id='228' font-size='8.40pt' font-family='Arial'>Upper-middle<\/text><\/g><g clip-path='url(#cl1_3)'><text x='412.20' y='400.11' id='229' font-size='8.40pt' font-family='Arial'>Lower-middle<\/text><\/g><g clip-path='url(#cl1_3)'><text x='499.83' y='400.11' id='230' font-size='8.40pt' font-family='Arial'>Low<\/text><\/g><g clip-path='url(#cl1_3)'><text x='228.48' y='39.22' id='231' font-size='9.45pt' font-family='Arial'>2013; per 1,000 population<\/text><\/g><g clip-path='url(#cl1_3)'><text x='218.40' y='19.15' id='232' font-size='12.60pt' font-family='Arial'>Global population rates<\/text><\/g><g clip-path='url(#cl1_3)'><text x='318.23' y='422.49' id='233' font-size='6.00pt' font-family='Arial'>Source: UN World Population Prospects (https://esa.un.org/unpd/wpp/)<\/text><\/g><\/g><\/svg>","code":"document.querySelectorAll('#svg_1')[0].getElementById('19').setAttribute('title','Andorra: 8.9, 8.4');document.querySelectorAll('#svg_1')[0].getElementById('20').setAttribute('title','Antigua and Barbuda: 16.5, 6.8');document.querySelectorAll('#svg_1')[0].getElementById('21').setAttribute('title','Australia: 13.2, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('22').setAttribute('title','Austria: 9.5, 9');document.querySelectorAll('#svg_1')[0].getElementById('23').setAttribute('title','Bahamas: 15.3, 6.1');document.querySelectorAll('#svg_1')[0].getElementById('24').setAttribute('title','Bahrain: 15.2, 2.2');document.querySelectorAll('#svg_1')[0].getElementById('25').setAttribute('title','Barbados: 12.7, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('26').setAttribute('title','Belgium: 11.7, 9.9');document.querySelectorAll('#svg_1')[0].getElementById('27').setAttribute('title','Brunei Darussalam: 15.5, 3.6');document.querySelectorAll('#svg_1')[0].getElementById('28').setAttribute('title','Canada: 11.3, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('29').setAttribute('title','Chile: 13.9, 5.4');document.querySelectorAll('#svg_1')[0].getElementById('30').setAttribute('title','Croatia: 9.5, 11.1');document.querySelectorAll('#svg_1')[0].getElementById('31').setAttribute('title','Cyprus: 11.5, 5.5');document.querySelectorAll('#svg_1')[0].getElementById('32').setAttribute('title','Czechia: 11.1, 10');document.querySelectorAll('#svg_1')[0].getElementById('33').setAttribute('title','Denmark: 11.3, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('34').setAttribute('title','Equatorial Guinea: 35.4, 11.5');document.querySelectorAll('#svg_1')[0].getElementById('35').setAttribute('title','Estonia: 10.9, 11.3');document.querySelectorAll('#svg_1')[0].getElementById('36').setAttribute('title','Finland: 11.2, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('37').setAttribute('title','France: 12.3, 8.7');document.querySelectorAll('#svg_1')[0].getElementById('38').setAttribute('title','Germany: 8.5, 10.6');document.querySelectorAll('#svg_1')[0].getElementById('39').setAttribute('title','Greece: 9.7, 9.7');document.querySelectorAll('#svg_1')[0].getElementById('40').setAttribute('title','Iceland: 14.5, 6.2');document.querySelectorAll('#svg_1')[0].getElementById('41').setAttribute('title','Ireland: 15.4, 5.9');document.querySelectorAll('#svg_1')[0].getElementById('42').setAttribute('title','Israel: 20.3, 5.1');document.querySelectorAll('#svg_1')[0].getElementById('43').setAttribute('title','Italy: 9.2, 9.5');document.querySelectorAll('#svg_1')[0].getElementById('44').setAttribute('title','Japan: 8.4, 9.5');document.querySelectorAll('#svg_1')[0].getElementById('45').setAttribute('title','Kuwait: 20.6, 1.9');document.querySelectorAll('#svg_1')[0].getElementById('46').setAttribute('title','Latvia: 11, 14.2');document.querySelectorAll('#svg_1')[0].getElementById('47').setAttribute('title','Lithuania: 11.3, 12');document.querySelectorAll('#svg_1')[0].getElementById('48').setAttribute('title','Luxembourg: 11.6, 6.8');document.querySelectorAll('#svg_1')[0].getElementById('49').setAttribute('title','Malta: 9.2, 7.5');document.querySelectorAll('#svg_1')[0].getElementById('50').setAttribute('title','Monaco: 6.8, 8.7');document.querySelectorAll('#svg_1')[0].getElementById('51').setAttribute('title','Netherlands: 10.7, 8.3');document.querySelectorAll('#svg_1')[0].getElementById('52').setAttribute('title','New Zealand: 13.8, 6.3');document.querySelectorAll('#svg_1')[0].getElementById('53').setAttribute('title','Norway: 12.4, 8.1');document.querySelectorAll('#svg_1')[0].getElementById('54').setAttribute('title','Oman: 20.9, 2.8');document.querySelectorAll('#svg_1')[0].getElementById('55').setAttribute('title','Poland: 10.8, 10');document.querySelectorAll('#svg_1')[0].getElementById('56').setAttribute('title','Portugal: 8.7, 9.1');document.querySelectorAll('#svg_1')[0].getElementById('57').setAttribute('title','Qatar: 11, 1.3');document.querySelectorAll('#svg_1')[0].getElementById('58').setAttribute('title','Republic of Korea: 9.6, 5.5');document.querySelectorAll('#svg_1')[0].getElementById('59').setAttribute('title','Russian Federation: 11.8, 14.8');document.querySelectorAll('#svg_1')[0].getElementById('60').setAttribute('title','Saint Kitts and Nevis: 13.8, 8.5');document.querySelectorAll('#svg_1')[0].getElementById('61').setAttribute('title','San Marino: 8.8, 10.2');document.querySelectorAll('#svg_1')[0].getElementById('62').setAttribute('title','Saudi Arabia: 19.4, 3.2');document.querySelectorAll('#svg_1')[0].getElementById('63').setAttribute('title','Singapore: 9.9, 4.5');document.querySelectorAll('#svg_1')[0].getElementById('64').setAttribute('title','Slovakia: 10.7, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('65').setAttribute('title','Slovenia: 10, 9.1');document.querySelectorAll('#svg_1')[0].getElementById('66').setAttribute('title','Spain: 10.4, 8.2');document.querySelectorAll('#svg_1')[0].getElementById('67').setAttribute('title','Sweden: 12, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('68').setAttribute('title','Switzerland: 10.4, 7.7');document.querySelectorAll('#svg_1')[0].getElementById('69').setAttribute('title','Trinidad and Tobago: 14.5, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('70').setAttribute('title','United Arab Emirates: 14.5, 1.1');document.querySelectorAll('#svg_1')[0].getElementById('71').setAttribute('title','United Kingdom of Great Britain and Northern Ireland: 12.2, 8.9');document.querySelectorAll('#svg_1')[0].getElementById('72').setAttribute('title','United States of America: 13.2, 8.4');document.querySelectorAll('#svg_1')[0].getElementById('73').setAttribute('title','Uruguay: 14.5, 9.1');document.querySelectorAll('#svg_1')[0].getElementById('74').setAttribute('title','Afghanistan: 34.1, 7.7');document.querySelectorAll('#svg_1')[0].getElementById('75').setAttribute('title','Bangladesh: 20, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('76').setAttribute('title','Benin: 36.4, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('77').setAttribute('title','Burkina Faso: 40.9, 9.5');document.querySelectorAll('#svg_1')[0].getElementById('78').setAttribute('title','Burundi: 44.7, 11.1');document.querySelectorAll('#svg_1')[0].getElementById('79').setAttribute('title','Cambodia: 25.7, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('80').setAttribute('title','Central African Republic: 34.2, 14');document.querySelectorAll('#svg_1')[0].getElementById('81').setAttribute('title','Chad: 45.9, 13.6');document.querySelectorAll('#svg_1')[0].getElementById('82').setAttribute('title','Comoros: 35.2, 8.2');document.querySelectorAll('#svg_1')[0].getElementById('83').setAttribute('title','Democratic People's Republic of Korea: 14.4, 9.2');document.querySelectorAll('#svg_1')[0].getElementById('84').setAttribute('title','Democratic Republic of the Congo: 42.7, 13.7');document.querySelectorAll('#svg_1')[0].getElementById('85').setAttribute('title','Eritrea: 36.7, 6.3');document.querySelectorAll('#svg_1')[0].getElementById('86').setAttribute('title','Ethiopia: 33, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('87').setAttribute('title','Gambia: 42.7, 8.2');document.querySelectorAll('#svg_1')[0].getElementById('88').setAttribute('title','Guinea: 36.9, 10.1');document.querySelectorAll('#svg_1')[0].getElementById('89').setAttribute('title','Guinea-Bissau: 37.5, 12.3');document.querySelectorAll('#svg_1')[0].getElementById('90').setAttribute('title','Haiti: 25.6, 8.6');document.querySelectorAll('#svg_1')[0].getElementById('91').setAttribute('title','Kenya: 34.9, 8.3');document.querySelectorAll('#svg_1')[0].getElementById('92').setAttribute('title','Liberia: 35.5, 8');document.querySelectorAll('#svg_1')[0].getElementById('93').setAttribute('title','Madagascar: 34.7, 7');document.querySelectorAll('#svg_1')[0].getElementById('94').setAttribute('title','Malawi: 39.8, 9');document.querySelectorAll('#svg_1')[0].getElementById('95').setAttribute('title','Mali: 47.1, 11.2');document.querySelectorAll('#svg_1')[0].getElementById('96').setAttribute('title','Mozambique: 38.9, 11.8');document.querySelectorAll('#svg_1')[0].getElementById('97').setAttribute('title','Myanmar: 17.2, 8.4');document.querySelectorAll('#svg_1')[0].getElementById('98').setAttribute('title','Nepal: 21, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('99').setAttribute('title','Niger: 49.7, 10.2');document.querySelectorAll('#svg_1')[0].getElementById('100').setAttribute('title','Rwanda: 35.2, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('101').setAttribute('title','Sierra Leone: 36.6, 16.8');document.querySelectorAll('#svg_1')[0].getElementById('102').setAttribute('title','Somalia: 43.8, 12.7');document.querySelectorAll('#svg_1')[0].getElementById('103').setAttribute('title','Tajikistan: 33, 6');document.querySelectorAll('#svg_1')[0].getElementById('104').setAttribute('title','Togo: 36.4, 9.6');document.querySelectorAll('#svg_1')[0].getElementById('105').setAttribute('title','Uganda: 43.2, 9.2');document.querySelectorAll('#svg_1')[0].getElementById('106').setAttribute('title','United Republic of Tanzania: 39.2, 7.8');document.querySelectorAll('#svg_1')[0].getElementById('107').setAttribute('title','Zimbabwe: 31.3, 9.8');document.querySelectorAll('#svg_1')[0].getElementById('108').setAttribute('title','Armenia: 13.7, 12.6');document.querySelectorAll('#svg_1')[0].getElementById('109').setAttribute('title','Bhutan: 19.6, 6.5');document.querySelectorAll('#svg_1')[0].getElementById('110').setAttribute('title','Bolivia (Plurinational State of): 25.7, 7');document.querySelectorAll('#svg_1')[0].getElementById('111').setAttribute('title','Cabo Verde: 20.1, 5.2');document.querySelectorAll('#svg_1')[0].getElementById('112').setAttribute('title','Cameroon: 37.3, 10.8');document.querySelectorAll('#svg_1')[0].getElementById('113').setAttribute('title','Congo: 37.6, 10.1');document.querySelectorAll('#svg_1')[0].getElementById('114').setAttribute('title','Côte d'Ivoire: 36.6, 12.6');document.querySelectorAll('#svg_1')[0].getElementById('115').setAttribute('title','Djibouti: 27.5, 8.8');document.querySelectorAll('#svg_1')[0].getElementById('116').setAttribute('title','Egypt: 23.2, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('117').setAttribute('title','El Salvador: 20.1, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('118').setAttribute('title','Georgia: 13.3, 11.5');document.querySelectorAll('#svg_1')[0].getElementById('119').setAttribute('title','Ghana: 30.9, 8.1');document.querySelectorAll('#svg_1')[0].getElementById('120').setAttribute('title','Guatemala: 31, 5.2');document.querySelectorAll('#svg_1')[0].getElementById('121').setAttribute('title','Guyana: 20.3, 7.9');document.querySelectorAll('#svg_1')[0].getElementById('122').setAttribute('title','Honduras: 25.8, 4.5');document.querySelectorAll('#svg_1')[0].getElementById('123').setAttribute('title','India: 20.4, 7.9');document.querySelectorAll('#svg_1')[0].getElementById('124').setAttribute('title','Indonesia: 18.8, 6.2');document.querySelectorAll('#svg_1')[0].getElementById('125').setAttribute('title','Kiribati: 23.3, 8.2');document.querySelectorAll('#svg_1')[0].getElementById('126').setAttribute('title','Kyrgyzstan: 27.1, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('127').setAttribute('title','Lao People's Democratic Republic: 26.8, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('128').setAttribute('title','Lesotho: 27.5, 14.1');document.querySelectorAll('#svg_1')[0].getElementById('129').setAttribute('title','Mauritania: 34.1, 7.8');document.querySelectorAll('#svg_1')[0].getElementById('130').setAttribute('title','Micronesia (Federated States of): 23.5, 6.1');document.querySelectorAll('#svg_1')[0].getElementById('131').setAttribute('title','Mongolia: 22.7, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('132').setAttribute('title','Morocco: 22.7, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('133').setAttribute('title','Nicaragua: 22.7, 4.8');document.querySelectorAll('#svg_1')[0].getElementById('134').setAttribute('title','Nigeria: 41.2, 11.9');document.querySelectorAll('#svg_1')[0].getElementById('135').setAttribute('title','Pakistan: 25.2, 7.3');document.querySelectorAll('#svg_1')[0].getElementById('136').setAttribute('title','Papua New Guinea: 28.9, 7.7');document.querySelectorAll('#svg_1')[0].getElementById('137').setAttribute('title','Paraguay: 23.7, 4.8');document.querySelectorAll('#svg_1')[0].getElementById('138').setAttribute('title','Philippines: 24.4, 5.9');document.querySelectorAll('#svg_1')[0].getElementById('139').setAttribute('title','Republic of Moldova: 12.1, 12.4');document.querySelectorAll('#svg_1')[0].getElementById('140').setAttribute('title','Samoa: 26.2, 5.2');document.querySelectorAll('#svg_1')[0].getElementById('141').setAttribute('title','Sao Tome and Principe: 33.9, 6.5');document.querySelectorAll('#svg_1')[0].getElementById('142').setAttribute('title','Senegal: 37.7, 7');document.querySelectorAll('#svg_1')[0].getElementById('143').setAttribute('title','Solomon Islands: 30.8, 5.4');document.querySelectorAll('#svg_1')[0].getElementById('144').setAttribute('title','South Sudan: 36.1, 11.1');document.querySelectorAll('#svg_1')[0].getElementById('145').setAttribute('title','Sri Lanka: 17.9, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('146').setAttribute('title','Sudan: 33.5, 7.8');document.querySelectorAll('#svg_1')[0].getElementById('147').setAttribute('title','Swaziland: 29.9, 11.8');document.querySelectorAll('#svg_1')[0].getElementById('148').setAttribute('title','Syrian Arab Republic: 24, 3.5');document.querySelectorAll('#svg_1')[0].getElementById('149').setAttribute('title','Timor-Leste: 35.8, 6');document.querySelectorAll('#svg_1')[0].getElementById('150').setAttribute('title','Ukraine: 10.8, 15.1');document.querySelectorAll('#svg_1')[0].getElementById('151').setAttribute('title','Uzbekistan: 21.5, 6.4');document.querySelectorAll('#svg_1')[0].getElementById('152').setAttribute('title','Vanuatu: 26.6, 4.5');document.querySelectorAll('#svg_1')[0].getElementById('153').setAttribute('title','Viet Nam: 15.5, 5.8');document.querySelectorAll('#svg_1')[0].getElementById('154').setAttribute('title','Yemen: 31.1, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('155').setAttribute('title','Zambia: 42.8, 9.7');document.querySelectorAll('#svg_1')[0].getElementById('156').setAttribute('title','Albania: 12.9, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('157').setAttribute('title','Algeria: 24.3, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('158').setAttribute('title','Angola: 44.1, 13.9');document.querySelectorAll('#svg_1')[0].getElementById('159').setAttribute('title','Argentina: 16.8, 7.6');document.querySelectorAll('#svg_1')[0].getElementById('160').setAttribute('title','Azerbaijan: 17.8, 6.3');document.querySelectorAll('#svg_1')[0].getElementById('161').setAttribute('title','Belarus: 11, 13.5');document.querySelectorAll('#svg_1')[0].getElementById('162').setAttribute('title','Belize: 23.4, 4');document.querySelectorAll('#svg_1')[0].getElementById('163').setAttribute('title','Bosnia and Herzegovina: 9, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('164').setAttribute('title','Botswana: 23.6, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('165').setAttribute('title','Brazil: 14.9, 6.1');document.querySelectorAll('#svg_1')[0].getElementById('166').setAttribute('title','Bulgaria: 9.6, 14.2');document.querySelectorAll('#svg_1')[0].getElementById('167').setAttribute('title','China: 13.3, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('168').setAttribute('title','Colombia: 18.8, 4.2');document.querySelectorAll('#svg_1')[0].getElementById('169').setAttribute('title','Cook Islands: 14.9, 5');document.querySelectorAll('#svg_1')[0].getElementById('170').setAttribute('title','Costa Rica: 15.1, 4.4');document.querySelectorAll('#svg_1')[0].getElementById('171').setAttribute('title','Cuba: 9.5, 8.5');document.querySelectorAll('#svg_1')[0].getElementById('172').setAttribute('title','Dominica: 15.6, 7.2');document.querySelectorAll('#svg_1')[0].getElementById('173').setAttribute('title','Dominican Republic: 20.8, 5.9');document.querySelectorAll('#svg_1')[0].getElementById('174').setAttribute('title','Ecuador: 20.8, 5.3');document.querySelectorAll('#svg_1')[0].getElementById('175').setAttribute('title','Fiji: 20.4, 6.9');document.querySelectorAll('#svg_1')[0].getElementById('176').setAttribute('title','Gabon: 31.9, 9');document.querySelectorAll('#svg_1')[0].getElementById('177').setAttribute('title','Grenada: 19.3, 6.9');document.querySelectorAll('#svg_1')[0].getElementById('178').setAttribute('title','Hungary: 9.9, 13');document.querySelectorAll('#svg_1')[0].getElementById('179').setAttribute('title','Iran (Islamic Republic of): 18.8, 5.1');document.querySelectorAll('#svg_1')[0].getElementById('180').setAttribute('title','Iraq: 31.1, 4.8');document.querySelectorAll('#svg_1')[0].getElementById('181').setAttribute('title','Jamaica: 18, 7.1');document.querySelectorAll('#svg_1')[0].getElementById('182').setAttribute('title','Jordan: 27, 3.7');document.querySelectorAll('#svg_1')[0].getElementById('183').setAttribute('title','Kazakhstan: 20.5, 9.7');document.querySelectorAll('#svg_1')[0].getElementById('184').setAttribute('title','Lebanon: 13.4, 4.4');document.querySelectorAll('#svg_1')[0].getElementById('185').setAttribute('title','Libya: 20.7, 4.2');document.querySelectorAll('#svg_1')[0].getElementById('186').setAttribute('title','Malaysia: 17.7, 5');document.querySelectorAll('#svg_1')[0].getElementById('187').setAttribute('title','Maldives: 22, 3.5');document.querySelectorAll('#svg_1')[0].getElementById('188').setAttribute('title','Marshall Islands: 27.2, 6.6');document.querySelectorAll('#svg_1')[0].getElementById('189').setAttribute('title','Mauritius: 11.5, 7.4');document.querySelectorAll('#svg_1')[0].getElementById('190').setAttribute('title','Mexico: 18.4, 5.3');document.querySelectorAll('#svg_1')[0].getElementById('191').setAttribute('title','Montenegro: 11.6, 9.5');document.querySelectorAll('#svg_1')[0].getElementById('192').setAttribute('title','Namibia: 26, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('193').setAttribute('title','Nauru: 26.4, 3.5');document.querySelectorAll('#svg_1')[0].getElementById('194').setAttribute('title','Palau: 10.9, 5.9');document.querySelectorAll('#svg_1')[0].getElementById('195').setAttribute('title','Panama: 19.4, 5');document.querySelectorAll('#svg_1')[0].getElementById('196').setAttribute('title','Peru: 19.7, 4.4');document.querySelectorAll('#svg_1')[0].getElementById('197').setAttribute('title','Romania: 10.3, 11.8');document.querySelectorAll('#svg_1')[0].getElementById('198').setAttribute('title','Saint Lucia: 15.4, 7');document.querySelectorAll('#svg_1')[0].getElementById('199').setAttribute('title','Saint Vincent and the Grenadines: 16.3, 6.5');document.querySelectorAll('#svg_1')[0].getElementById('200').setAttribute('title','Serbia: 9.7, 11.9');document.querySelectorAll('#svg_1')[0].getElementById('201').setAttribute('title','Seychelles: 16.6, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('202').setAttribute('title','South Africa: 20.9, 11.1');document.querySelectorAll('#svg_1')[0].getElementById('203').setAttribute('title','Suriname: 17.7, 4.6');document.querySelectorAll('#svg_1')[0].getElementById('204').setAttribute('title','Thailand: 10.2, 7.6');document.querySelectorAll('#svg_1')[0].getElementById('205').setAttribute('title','The former Yugoslav republic of Macedonia: 10.7, 9.4');document.querySelectorAll('#svg_1')[0].getElementById('206').setAttribute('title','Tonga: 25.5, 6.7');document.querySelectorAll('#svg_1')[0].getElementById('207').setAttribute('title','Tunisia: 17.2, 5.5');document.querySelectorAll('#svg_1')[0].getElementById('208').setAttribute('title','Turkey: 16.8, 5.7');document.querySelectorAll('#svg_1')[0].getElementById('209').setAttribute('title','Turkmenistan: 21.3, 8.8');document.querySelectorAll('#svg_1')[0].getElementById('210').setAttribute('title','Tuvalu: 23.6, 8.7');document.querySelectorAll('#svg_1')[0].getElementById('211').setAttribute('title','Venezuela (Bolivarian Republic of): 19.8, 4.8');","canvas_id":1,"data_id_class":"cl_data_id_1","tooltip_extra_css":"padding:5px;background:black;color:white;border-radius:2px 2px 2px 2px;","hover_css":"fill:orange;","tooltip_opacity":0.7,"tooltip_offx":10,"tooltip_offy":0,"zoom_max":1,"zoompan":false,"selection_type":"multiple","selected_css":"fill:orange;","width":"70%","padding_bottom":"52%"},"evals":[],"jsHooks":[]}</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-2044620361de577b997e">{"viewer":{"width":450,"height":350,"padding":15,"fill":true},"browser":{"width":960,"height":500,"padding":40,"fill":false}}</script>
</body>
</html>