Skip to content

Instantly share code, notes, and snippets.

@timelyportfolio
Last active September 19, 2017 01:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timelyportfolio/bd3c17b1af8c44ec652a40bf7ce0b8e8 to your computer and use it in GitHub Desktop.
Save timelyportfolio/bd3c17b1af8c44ec652a40bf7ce0b8e8 to your computer and use it in GitHub Desktop.
rpivotTable with subtotals
license: mit
# for now only a pull request
#  https://github.com/smartinsightsfromdata/rpivotTable/pull/75
# so please install with devtools
# devtools::install_github("timelyportfolio/rpivotTable@subtotals")

library(rpivotTable)
rpivotTable(
  Titanic,
  subtotals=TRUE,
  aggregatorName = "Sum",
  vals = "Freq"
)
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
<script src="data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMS4yIHwgKGMpIDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8NCiFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWMuc2xpY2UsZT1jLmNvbmNhdCxmPWMucHVzaCxnPWMuaW5kZXhPZixoPXt9LGk9aC50b1N0cmluZyxqPWguaGFzT3duUHJvcGVydHksaz17fSxsPSIxLjExLjIiLG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IG0uZm4uaW5pdChhLGIpfSxuPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxvPS9eLW1zLS8scD0vLShbXGRhLXpdKS9naSxxPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX07bS5mbj1tLnByb3RvdHlwZT17anF1ZXJ5OmwsY29uc3RydWN0b3I6bSxzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06ZC5jYWxsKHRoaXMpfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bS5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10aGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBtLmVhY2godGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG0ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6Zixzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG0uZXh0ZW5kPW0uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgrKyksIm9iamVjdCI9PXR5cGVvZiBnfHxtLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxoPT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW2hdKSlmb3IoZCBpbiBlKWE9Z1tkXSxjPWVbZF0sZyE9PWMmJihqJiZjJiYobS5pc1BsYWluT2JqZWN0KGMpfHwoYj1tLmlzQXJyYXkoYykpKT8oYj8oYj0hMSxmPWEmJm0uaXNBcnJheShhKT9hOltdKTpmPWEmJm0uaXNQbGFpbk9iamVjdChhKT9hOnt9LGdbZF09bS5leHRlbmQoaixmLGMpKTp2b2lkIDAhPT1jJiYoZ1tkXT1jKSk7cmV0dXJuIGd9LG0uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhsK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1tLnR5cGUoYSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuImFycmF5Ij09PW0udHlwZShhKX0saXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIW0uaXNBcnJheShhKSYmYS1wYXJzZUZsb2F0KGEpKzE+PTB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZighYXx8Im9iamVjdCIhPT1tLnR5cGUoYSl8fGEubm9kZVR5cGV8fG0uaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFqLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWouY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWlmKGsub3duTGFzdClmb3IoYiBpbiBhKXJldHVybiBqLmNhbGwoYSxiKTtmb3IoYiBpbiBhKTtyZXR1cm4gdm9pZCAwPT09Ynx8ai5jYWxsKGEsYil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2hbaS5jYWxsKGEpXXx8Im9iamVjdCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmbS50cmltKGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKG8sIm1zLSIpLnJlcGxhY2UocCxxKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPTAsZj1hLmxlbmd0aCxnPXIoYSk7aWYoYyl7aWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgaWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6KGErIiIpLnJlcGxhY2UobiwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYocihPYmplY3QoYSkpP20ubWVyZ2UoYywic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpOmYuY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihnKXJldHVybiBnLmNhbGwoYixhLGMpO2ZvcihkPWIubGVuZ3RoLGM9Yz8wPmM/TWF0aC5tYXgoMCxkK2MpOmM6MDtkPmM7YysrKWlmKGMgaW4gYiYmYltjXT09PWEpcmV0dXJuIGN9cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGEsYil7dmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO3doaWxlKGM+ZClhW2UrK109YltkKytdO2lmKGMhPT1jKXdoaWxlKHZvaWQgMCE9PWJbZF0pYVtlKytdPWJbZCsrXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj0wLGc9YS5sZW5ndGgsaD1yKGEpLGk9W107aWYoaClmb3IoO2c+ZjtmKyspZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7ZWxzZSBmb3IoZiBpbiBhKWQ9YihhW2ZdLGYsYyksbnVsbCE9ZCYmaS5wdXNoKGQpO3JldHVybiBlLmFwcGx5KFtdLGkpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoZj1hW2JdLGI9YSxhPWYpLG0uaXNGdW5jdGlvbihhKT8oYz1kLmNhbGwoYXJndW1lbnRzLDIpLGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShifHx0aGlzLGMuY29uY2F0KGQuY2FsbChhcmd1bWVudHMpKSl9LGUuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxtLmd1aWQrKyxlKTp2b2lkIDB9LG5vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sc3VwcG9ydDprfSksbS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiByKGEpe3ZhciBiPWEubGVuZ3RoLGM9bS50eXBlKGEpO3JldHVybiJmdW5jdGlvbiI9PT1jfHxtLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZiPyEwOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAmJmItMSBpbiBhfXZhciBzPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrMSpuZXcgRGF0ZSx2PWEuZG9jdW1lbnQsdz0wLHg9MCx5PWhiKCksej1oYigpLEE9aGIoKSxCPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1iJiYobD0hMCksMH0sQz0xPDwzMSxEPXt9Lmhhc093blByb3BlcnR5LEU9W10sRj1FLnBvcCxHPUUucHVzaCxIPUUucHVzaCxJPUUuc2xpY2UsSj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKylpZihhW2NdPT09YilyZXR1cm4gYztyZXR1cm4tMX0sSz0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLEw9IltcXHgyMFxcdFxcclxcblxcZl0iLE09Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIixOPU0ucmVwbGFjZSgidyIsIncjIiksTz0iXFxbIitMKyIqKCIrTSsiKSg/OiIrTCsiKihbKl4kfCF+XT89KSIrTCsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK04rIikpfCkiK0wrIipcXF0iLFA9IjooIitNKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitPKyIpKil8LiopXFwpfCkiLFE9bmV3IFJlZ0V4cChMKyIrIiwiZyIpLFI9bmV3IFJlZ0V4cCgiXiIrTCsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitMKyIrJCIsImciKSxTPW5ldyBSZWdFeHAoIl4iK0wrIiosIitMKyIqIiksVD1uZXcgUmVnRXhwKCJeIitMKyIqKFs+K35dfCIrTCsiKSIrTCsiKiIpLFU9bmV3IFJlZ0V4cCgiPSIrTCsiKihbXlxcXSdcIl0qPykiK0wrIipcXF0iLCJnIiksVj1uZXcgUmVnRXhwKFApLFc9bmV3IFJlZ0V4cCgiXiIrTisiJCIpLFg9e0lEOm5ldyBSZWdFeHAoIl4jKCIrTSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitNKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitNLnJlcGxhY2UoInciLCJ3KiIpKyIpIiksQVRUUjpuZXcgUmVnRXhwKCJeIitPKSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrUCksQ0hJTEQ6bmV3IFJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIitMKyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIitMKyIqKD86KFsrLV18KSIrTCsiKihcXGQrKXwpKSIrTCsiKlxcKXwpIiwiaSIpLGJvb2w6bmV3IFJlZ0V4cCgiXig/OiIrSysiKSQiLCJpIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoIl4iK0wrIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrTCsiKigoPzotXFxkKT9cXGQqKSIrTCsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sWT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFo9L15oXGQkL2ksJD0vXltee10rXHtccypcW25hdGl2ZSBcdy8sXz0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGFiPS9bK35dLyxiYj0vJ3xcXC9nLGNiPW5ldyBSZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrTCsiP3woIitMKyIpfC4pIiwiaWciKSxkYj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9IjB4IitiLTY1NTM2O3JldHVybiBkIT09ZHx8Yz9iOjA+ZD9TdHJpbmcuZnJvbUNoYXJDb2RlKGQrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUoZD4+MTB8NTUyOTYsMTAyMyZkfDU2MzIwKX0sZWI9ZnVuY3Rpb24oKXttKCl9O3RyeXtILmFwcGx5KEU9SS5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxFW3YuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGZiKXtIPXthcHBseTpFLmxlbmd0aD9mdW5jdGlvbihhLGIpe0cuYXBwbHkoYSxJLmNhbGwoYikpfTpmdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109YltkKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBnYihhLGIsZCxlKXt2YXIgZixoLGosayxsLG8scixzLHcseDtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixkPWR8fFtdLGs9Yi5ub2RlVHlwZSwic3RyaW5nIiE9dHlwZW9mIGF8fCFhfHwxIT09ayYmOSE9PWsmJjExIT09aylyZXR1cm4gZDtpZighZSYmcCl7aWYoMTEhPT1rJiYoZj1fLmV4ZWMoYSkpKWlmKGo9ZlsxXSl7aWYoOT09PWspe2lmKGg9Yi5nZXRFbGVtZW50QnlJZChqKSwhaHx8IWgucGFyZW50Tm9kZSlyZXR1cm4gZDtpZihoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZSBpZihiLm93bmVyRG9jdW1lbnQmJihoPWIub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChqKSkmJnQoYixoKSYmaC5pZD09PWopcmV0dXJuIGQucHVzaChoKSxkfWVsc2V7aWYoZlsyXSlyZXR1cm4gSC5hcHBseShkLGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSkpLGQ7aWYoKGo9ZlszXSkmJmMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gSC5hcHBseShkLGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShqKSksZH1pZihjLnFzYSYmKCFxfHwhcS50ZXN0KGEpKSl7aWYocz1yPXUsdz1iLHg9MSE9PWsmJmEsMT09PWsmJiJvYmplY3QiIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtvPWcoYSksKHI9Yi5nZXRBdHRyaWJ1dGUoImlkIikpP3M9ci5yZXBsYWNlKGJiLCJcXCQmIik6Yi5zZXRBdHRyaWJ1dGUoImlkIixzKSxzPSJbaWQ9JyIrcysiJ10gIixsPW8ubGVuZ3RoO3doaWxlKGwtLSlvW2xdPXMrcmIob1tsXSk7dz1hYi50ZXN0KGEpJiZwYihiLnBhcmVudE5vZGUpfHxiLHg9by5qb2luKCIsIil9aWYoeCl0cnl7cmV0dXJuIEguYXBwbHkoZCx3LnF1ZXJ5U2VsZWN0b3JBbGwoeCkpLGR9Y2F0Y2goeSl7fWZpbmFsbHl7cnx8Yi5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gaShhLnJlcGxhY2UoUiwiJDEiKSxiLGQsZSl9ZnVuY3Rpb24gaGIoKXt2YXIgYT1bXTtmdW5jdGlvbiBiKGMsZSl7cmV0dXJuIGEucHVzaChjKyIgIik+ZC5jYWNoZUxlbmd0aCYmZGVsZXRlIGJbYS5zaGlmdCgpXSxiW2MrIiAiXT1lfXJldHVybiBifWZ1bmN0aW9uIGliKGEpe3JldHVybiBhW3VdPSEwLGF9ZnVuY3Rpb24gamIoYSl7dmFyIGI9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfX1mdW5jdGlvbiBrYihhLGIpe3ZhciBjPWEuc3BsaXQoInwiKSxlPWEubGVuZ3RoO3doaWxlKGUtLSlkLmF0dHJIYW5kbGVbY1tlXV09Yn1mdW5jdGlvbiBsYihhLGIpe3ZhciBjPWImJmEsZD1jJiYxPT09YS5ub2RlVHlwZSYmMT09PWIubm9kZVR5cGUmJih+Yi5zb3VyY2VJbmRleHx8QyktKH5hLnNvdXJjZUluZGV4fHxDKTtpZihkKXJldHVybiBkO2lmKGMpd2hpbGUoYz1jLm5leHRTaWJsaW5nKWlmKGM9PT1iKXJldHVybi0xO3JldHVybiBhPzE6LTF9ZnVuY3Rpb24gbWIoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YyYmYi50eXBlPT09YX19ZnVuY3Rpb24gbmIoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PWN8fCJidXR0b24iPT09YykmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG9iKGEpe3JldHVybiBpYihmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixpYihmdW5jdGlvbihjLGQpe3ZhciBlLGY9YShbXSxjLmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9ZltnXV0mJihjW2VdPSEoZFtlXT1jW2VdKSl9KX0pfWZ1bmN0aW9uIHBiKGEpe3JldHVybiBhJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmF9Yz1nYi5zdXBwb3J0PXt9LGY9Z2IuaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9YSYmKGEub3duZXJEb2N1bWVudHx8YSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiPyJIVE1MIiE9PWIubm9kZU5hbWU6ITF9LG09Z2Iuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZSxnPWE/YS5vd25lckRvY3VtZW50fHxhOnY7cmV0dXJuIGchPT1uJiY5PT09Zy5ub2RlVHlwZSYmZy5kb2N1bWVudEVsZW1lbnQ/KG49ZyxvPWcuZG9jdW1lbnRFbGVtZW50LGU9Zy5kZWZhdWx0VmlldyxlJiZlIT09ZS50b3AmJihlLmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLGViLCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZWIpKSxwPSFmKGcpLGMuYXR0cmlidXRlcz1qYihmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc05hbWU9ImkiLCFhLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxjLmdldEVsZW1lbnRzQnlUYWdOYW1lPWpiKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKGcuY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPSQudGVzdChnLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGMuZ2V0QnlJZD1qYihmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFnLmdldEVsZW1lbnRzQnlOYW1lfHwhZy5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50QnlJZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYixkYik7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRlbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGNiLGRiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lP2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk6Yy5xc2E/Yi5xdWVyeVNlbGVjdG9yQWxsKGEpOnZvaWQgMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9kZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNTPWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4gcD9iLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSk6dm9pZCAwfSxyPVtdLHE9W10sKGMucXNhPSQudGVzdChnLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGpiKGZ1bmN0aW9uKGEpe28uYXBwZW5kQ2hpbGQoYSkuaW5uZXJIVE1MPSI8YSBpZD0nIit1KyInPjwvYT48c2VsZWN0IGlkPSciK3UrIi1cZl0nIG1zYWxsb3djYXB0dXJlPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixhLnF1ZXJ5U2VsZWN0b3JBbGwoIlttc2FsbG93Y2FwdHVyZV49JyddIikubGVuZ3RoJiZxLnB1c2goIlsqXiRdPSIrTCsiKig/OicnfFwiXCIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxxLnB1c2goIlxcWyIrTCsiKig/OnZhbHVlfCIrSysiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW2lkfj0iK3UrIi1dIikubGVuZ3RofHxxLnB1c2goIn49IiksYS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8cS5wdXNoKCI6Y2hlY2tlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiYSMiK3UrIisqIikubGVuZ3RofHxxLnB1c2goIi4jLitbK35dIil9KSxqYihmdW5jdGlvbihhKXt2YXIgYj1nLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNldEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK0wrIipbKl4kfCF+XT89IiksYS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEucHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj0kLnRlc3Qocz1vLm1hdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxlY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJmpiKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRpdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixQKX0pLHE9cS5sZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBSZWdFeHAoci5qb2luKCJ8IikpLGI9JC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHQ9Ynx8JC50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFyIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFyZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMuY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEsYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDtyZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEpPT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpPT09ZD9hPT09Z3x8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEpPy0xOmI9PT1nfHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0ooayxhKS1KKGssYik6MDo0JmQ/LTE6MSl9OmZ1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgYyxkPTAsZT1hLnBhcmVudE5vZGUsZj1iLnBhcmVudE5vZGUsaD1bYV0saT1bYl07aWYoIWV8fCFmKXJldHVybiBhPT09Zz8tMTpiPT09Zz8xOmU/LTE6Zj8xOms/SihrLGEpLUooayxiKTowO2lmKGU9PT1mKXJldHVybiBsYihhLGIpO2M9YTt3aGlsZShjPWMucGFyZW50Tm9kZSloLnVuc2hpZnQoYyk7Yz1iO3doaWxlKGM9Yy5wYXJlbnROb2RlKWkudW5zaGlmdChjKTt3aGlsZShoW2RdPT09aVtkXSlkKys7cmV0dXJuIGQ/bGIoaFtkXSxpW2RdKTpoW2RdPT09dj8tMTppW2RdPT09dj8xOjB9LGcpOm59LGdiLm1hdGNoZXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZ2IoYSxudWxsLG51bGwsYil9LGdiLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe2lmKChhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSxiPWIucmVwbGFjZShVLCI9JyQxJ10iKSwhKCFjLm1hdGNoZXNTZWxlY3Rvcnx8IXB8fHImJnIudGVzdChiKXx8cSYmcS50ZXN0KGIpKSl0cnl7dmFyIGQ9cy5jYWxsKGEsYik7aWYoZHx8Yy5kaXNjb25uZWN0ZWRNYXRjaHx8YS5kb2N1bWVudCYmMTEhPT1hLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBkfWNhdGNoKGUpe31yZXR1cm4gZ2IoYixuLG51bGwsW2FdKS5sZW5ndGg+MH0sZ2IuY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSksdChhLGIpfSxnYi5hdHRyPWZ1bmN0aW9uKGEsYil7KGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpO3ZhciBlPWQuYXR0ckhhbmRsZVtiLnRvTG93ZXJDYXNlKCldLGY9ZSYmRC5jYWxsKGQuYXR0ckhhbmRsZSxiLnRvTG93ZXJDYXNlKCkpP2UoYSxiLCFwKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PWY/ZjpjLmF0dHJpYnV0ZXN8fCFwP2EuZ2V0QXR0cmlidXRlKGIpOihmPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmYuc3BlY2lmaWVkP2YudmFsdWU6bnVsbH0sZ2IuZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2EpfSxnYi51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe3ZhciBiLGQ9W10sZT0wLGY9MDtpZihsPSFjLmRldGVjdER1cGxpY2F0ZXMsaz0hYy5zb3J0U3RhYmxlJiZhLnNsaWNlKDApLGEuc29ydChCKSxsKXt3aGlsZShiPWFbZisrXSliPT09YVtmXSYmKGU9ZC5wdXNoKGYpKTt3aGlsZShlLS0pYS5zcGxpY2UoZFtlXSwxKX1yZXR1cm4gaz1udWxsLGF9LGU9Z2IuZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYixjPSIiLGQ9MCxmPWEubm9kZVR5cGU7aWYoZil7aWYoMT09PWZ8fDk9PT1mfHwxMT09PWYpe2lmKCJzdHJpbmciPT10eXBlb2YgYS50ZXh0Q29udGVudClyZXR1cm4gYS50ZXh0Q29udGVudDtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpYys9ZShhKX1lbHNlIGlmKDM9PT1mfHw0PT09ZilyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSB3aGlsZShiPWFbZCsrXSljKz1lKGIpO3JldHVybiBjfSxkPWdiLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmliLG1hdGNoOlgsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0ucmVwbGFjZShjYixkYiksYVszXT0oYVszXXx8YVs0XXx8YVs1XXx8IiIpLnJlcGxhY2UoY2IsZGIpLCJ+PSI9PT1hWzJdJiYoYVszXT0iICIrYVszXSsiICIpLGEuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09YVsxXS5zbGljZSgwLDMpPyhhWzNdfHxnYi5lcnJvcihhWzBdKSxhWzRdPSsoYVs0XT9hWzVdKyhhWzZdfHwxKToyKigiZXZlbiI9PT1hWzNdfHwib2RkIj09PWFbM10pKSxhWzVdPSsoYVs3XSthWzhdfHwib2RkIj09PWFbM10pKTphWzNdJiZnYi5lcnJvcihhWzBdKSxhfSxQU0VVRE86ZnVuY3Rpb24oYSl7dmFyIGIsYz0hYVs2XSYmYVsyXTtyZXR1cm4gWC5DSElMRC50ZXN0KGFbMF0pP251bGw6KGFbM10/YVsyXT1hWzRdfHxhWzVdfHwiIjpjJiZWLnRlc3QoYykmJihiPWcoYywhMCkpJiYoYj1jLmluZGV4T2YoIikiLGMubGVuZ3RoLWIpLWMubGVuZ3RoKSYmKGFbMF09YVswXS5zbGljZSgwLGIpLGFbMl09Yy5zbGljZSgwLGIpKSxhLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGNiLGRiKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWE/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9fSxDTEFTUzpmdW5jdGlvbihhKXt2YXIgYj15W2ErIiAiXTtyZXR1cm4gYnx8KGI9bmV3IFJlZ0V4cCgiKF58IitMKyIpIithKyIoIitMKyJ8JCkiKSkmJnkoYSxmdW5jdGlvbihhKXtyZXR1cm4gYi50ZXN0KCJzdHJpbmciPT10eXBlb2YgYS5jbGFzc05hbWUmJmEuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0QXR0cmlidXRlJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihkKXt2YXIgZT1nYi5hdHRyKGQsYSk7cmV0dXJuIG51bGw9PWU/IiE9Ij09PWI6Yj8oZSs9IiIsIj0iPT09Yj9lPT09YzoiIT0iPT09Yj9lIT09YzoiXj0iPT09Yj9jJiYwPT09ZS5pbmRleE9mKGMpOiIqPSI9PT1iP2MmJmUuaW5kZXhPZihjKT4tMToiJD0iPT09Yj9jJiZlLnNsaWNlKC1jLmxlbmd0aCk9PT1jOiJ+PSI9PT1iPygiICIrZS5yZXBsYWNlKFEsIiAiKSsiICIpLmluZGV4T2YoYyk+LTE6Inw9Ij09PWI/ZT09PWN8fGUuc2xpY2UoMCxjLmxlbmd0aCsxKT09PWMrIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9Im50aCIhPT1hLnNsaWNlKDAsMyksZz0ibGFzdCIhPT1hLnNsaWNlKC00KSxoPSJvZi10eXBlIj09PWI7cmV0dXJuIDE9PT1kJiYwPT09ZT9mdW5jdGlvbihhKXtyZXR1cm4hIWEucGFyZW50Tm9kZX06ZnVuY3Rpb24oYixjLGkpe3ZhciBqLGssbCxtLG4sbyxwPWYhPT1nPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIscT1iLnBhcmVudE5vZGUscj1oJiZiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkscz0haSYmIWg7aWYocSl7aWYoZil7d2hpbGUocCl7bD1iO3doaWxlKGw9bFtwXSlpZihoP2wubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PWwubm9kZVR5cGUpcmV0dXJuITE7bz1wPSJvbmx5Ij09PWEmJiFvJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKG89W2c/cS5maXJzdENoaWxkOnEubGFzdENoaWxkXSxnJiZzKXtrPXFbdV18fChxW3VdPXt9KSxqPWtbYV18fFtdLG49alswXT09PXcmJmpbMV0sbT1qWzBdPT09dyYmalsyXSxsPW4mJnEuY2hpbGROb2Rlc1tuXTt3aGlsZShsPSsrbiYmbCYmbFtwXXx8KG09bj0wKXx8by5wb3AoKSlpZigxPT09bC5ub2RlVHlwZSYmKyttJiZsPT09Yil7a1thXT1bdyxuLG1dO2JyZWFrfX1lbHNlIGlmKHMmJihqPShiW3VdfHwoYlt1XT17fSkpW2FdKSYmalswXT09PXcpbT1qWzFdO2Vsc2Ugd2hpbGUobD0rK24mJmwmJmxbcF18fChtPW49MCl8fG8ucG9wKCkpaWYoKGg/bC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSkmJisrbSYmKHMmJigobFt1XXx8KGxbdV09e30pKVthXT1bdyxtXSksbD09PWIpKWJyZWFrO3JldHVybiBtLT1lLG09PT1kfHxtJWQ9PT0wJiZtL2Q+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGEsYil7dmFyIGMsZT1kLnBzZXVkb3NbYV18fGQuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldfHxnYi5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLCIiLGJdLGQuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpP2liKGZ1bmN0aW9uKGEsYyl7dmFyIGQsZj1lKGEsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pZD1KKGEsZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLDAsYyl9KTplfX0scHNldWRvczp7bm90OmliKGZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9W10sZD1oKGEucmVwbGFjZShSLCIkMSIpKTtyZXR1cm4gZFt1XT9pYihmdW5jdGlvbihhLGIsYyxlKXt2YXIgZixnPWQoYSxudWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdbaF0pJiYoYVtoXT0hKGJbaF09ZikpfSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChiLG51bGwsZixjKSxiWzBdPW51bGwsIWMucG9wKCl9fSksaGFzOmliKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZ2IoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczppYihmdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoY2IsZGIpLGZ1bmN0aW9uKGIpe3JldHVybihiLnRleHRDb250ZW50fHxiLmlubmVyVGV4dHx8ZShiKSkuaW5kZXhPZihhKT4tMX19KSxsYW5nOmliKGZ1bmN0aW9uKGEpe3JldHVybiBXLnRlc3QoYXx8IiIpfHxnYi5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIithKSxhPWEucmVwbGFjZShjYixkYikudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXt2YXIgYztkbyBpZihjPXA/Yi5sYW5nOmIuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxiLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBjPWMudG9Mb3dlckNhc2UoKSxjPT09YXx8MD09PWMuaW5kZXhPZihhKyItIik7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmMT09PWIubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihiKXt2YXIgYz1hLmxvY2F0aW9uJiZhLmxvY2F0aW9uLmhhc2g7cmV0dXJuIGMmJmMuc2xpY2UoMSk9PT1iLmlkfSxyb290OmZ1bmN0aW9uKGEpe3JldHVybiBhPT09b30sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1uLmFjdGl2ZUVsZW1lbnQmJighbi5oYXNGb2N1c3x8bi5oYXNGb2N1cygpKSYmISEoYS50eXBlfHxhLmhyZWZ8fH5hLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmISFhLmNoZWNrZWR8fCJvcHRpb24iPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFoudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFkudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmImJ1dHRvbiI9PT1hLnR5cGV8fCJidXR0b24iPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4iaW5wdXQiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1hLnR5cGUmJihudWxsPT0oYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09Yi50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6b2IoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Om9iKGZ1bmN0aW9uKGEsYil7cmV0dXJuW2ItMV19KSxlcTpvYihmdW5jdGlvbihhLGIsYyl7cmV0dXJuWzA+Yz9jK2I6Y119KSxldmVuOm9iKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksb2RkOm9iKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksbHQ6b2IoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7LS1kPj0wOylhLnB1c2goZCk7cmV0dXJuIGF9KSxndDpvYihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzsrK2Q8YjspYS5wdXNoKGQpO3JldHVybiBhfSl9fSxkLnBzZXVkb3MubnRoPWQucHNldWRvcy5lcTtmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlkLnBzZXVkb3NbYl09bWIoYik7Zm9yKGIgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlkLnBzZXVkb3NbYl09bmIoYik7ZnVuY3Rpb24gcWIoKXt9cWIucHJvdG90eXBlPWQuZmlsdGVycz1kLnBzZXVkb3MsZC5zZXRGaWx0ZXJzPW5ldyBxYixnPWdiLnRva2VuaXplPWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz16W2ErIiAiXTtpZihrKXJldHVybiBiPzA6ay5zbGljZSgwKTtoPWEsaT1bXSxqPWQucHJlRmlsdGVyO3doaWxlKGgpeyghY3x8KGU9Uy5leGVjKGgpKSkmJihlJiYoaD1oLnNsaWNlKGVbMF0ubGVuZ3RoKXx8aCksaS5wdXNoKGY9W10pKSxjPSExLChlPVQuZXhlYyhoKSkmJihjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTplWzBdLnJlcGxhY2UoUiwiICIpfSksaD1oLnNsaWNlKGMubGVuZ3RoKSk7Zm9yKGcgaW4gZC5maWx0ZXIpIShlPVhbZ10uZXhlYyhoKSl8fGpbZ10mJiEoZT1qW2ddKGUpKXx8KGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmcsbWF0Y2hlczplfSksaD1oLnNsaWNlKGMubGVuZ3RoKSk7aWYoIWMpYnJlYWt9cmV0dXJuIGI/aC5sZW5ndGg6aD9nYi5lcnJvcihhKTp6KGEsaSkuc2xpY2UoMCl9O2Z1bmN0aW9uIHJiKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGgsZD0iIjtjPmI7YisrKWQrPWFbYl0udmFsdWU7cmV0dXJuIGR9ZnVuY3Rpb24gc2IoYSxiLGMpe3ZhciBkPWIuZGlyLGU9YyYmInBhcmVudE5vZGUiPT09ZCxmPXgrKztyZXR1cm4gYi5maXJzdD9mdW5jdGlvbihiLGMsZil7d2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXJldHVybiBhKGIsYyxmKX06ZnVuY3Rpb24oYixjLGcpe3ZhciBoLGksaj1bdyxmXTtpZihnKXt3aGlsZShiPWJbZF0paWYoKDE9PT1iLm5vZGVUeXBlfHxlKSYmYShiLGMsZykpcmV0dXJuITB9ZWxzZSB3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpe2lmKGk9Ylt1XXx8KGJbdV09e30pLChoPWlbZF0pJiZoWzBdPT09dyYmaFsxXT09PWYpcmV0dXJuIGpbMl09aFsyXTtpZihpW2RdPWosalsyXT1hKGIsYyxnKSlyZXR1cm4hMH19fWZ1bmN0aW9uIHRiKGEpe3JldHVybiBhLmxlbmd0aD4xP2Z1bmN0aW9uKGIsYyxkKXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0paWYoIWFbZV0oYixjLGQpKXJldHVybiExO3JldHVybiEwfTphWzBdfWZ1bmN0aW9uIHViKGEsYixjKXtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspZ2IoYSxiW2RdLGMpO3JldHVybiBjfWZ1bmN0aW9uIHZiKGEsYixjLGQsZSl7Zm9yKHZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1udWxsIT1iO2k+aDtoKyspKGY9YVtoXSkmJighY3x8YyhmLGQsZSkpJiYoZy5wdXNoKGYpLGomJmIucHVzaChoKSk7cmV0dXJuIGd9ZnVuY3Rpb24gd2IoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFt1XSYmKGQ9d2IoZCkpLGUmJiFlW3VdJiYoZT13YihlLGYpKSxpYihmdW5jdGlvbihmLGcsaCxpKXt2YXIgaixrLGwsbT1bXSxuPVtdLG89Zy5sZW5ndGgscD1mfHx1YihifHwiKiIsaC5ub2RlVHlwZT9baF06aCxbXSkscT0hYXx8IWYmJmI/cDp2YihwLG0sYSxoLGkpLHI9Yz9lfHwoZj9hOm98fGQpP1tdOmc6cTtpZihjJiZjKHEscixoLGkpLGQpe2o9dmIocixuKSxkKGosW10saCxpKSxrPWoubGVuZ3RoO3doaWxlKGstLSkobD1qW2tdKSYmKHJbbltrXV09IShxW25ba11dPWwpKX1pZihmKXtpZihlfHxhKXtpZihlKXtqPVtdLGs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiZqLnB1c2gocVtrXT1sKTtlKG51bGwscj1bXSxqLGkpfWs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiYoaj1lP0ooZixsKTptW2tdKT4tMSYmKGZbal09IShnW2pdPWwpKX19ZWxzZSByPXZiKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTpILmFwcGx5KGcscil9KX1mdW5jdGlvbiB4YihhKXtmb3IodmFyIGIsYyxlLGY9YS5sZW5ndGgsZz1kLnJlbGF0aXZlW2FbMF0udHlwZV0saD1nfHxkLnJlbGF0aXZlWyIgIl0saT1nPzE6MCxrPXNiKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saCwhMCksbD1zYihmdW5jdGlvbihhKXtyZXR1cm4gSihiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7dmFyIGU9IWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSk7cmV0dXJuIGI9bnVsbCxlfV07Zj5pO2krKylpZihjPWQucmVsYXRpdmVbYVtpXS50eXBlXSltPVtzYih0YihtKSxjKV07ZWxzZXtpZihjPWQuZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCxhW2ldLm1hdGNoZXMpLGNbdV0pe2ZvcihlPSsraTtmPmU7ZSsrKWlmKGQucmVsYXRpdmVbYVtlXS50eXBlXSlicmVhaztyZXR1cm4gd2IoaT4xJiZ0YihtKSxpPjEmJnJiKGEuc2xpY2UoMCxpLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09YVtpLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoUiwiJDEiKSxjLGU+aSYmeGIoYS5zbGljZShpLGUpKSxmPmUmJnhiKGE9YS5zbGljZShlKSksZj5lJiZyYihhKSl9bS5wdXNoKGMpfXJldHVybiB0YihtKX1mdW5jdGlvbiB5YihhLGIpe3ZhciBjPWIubGVuZ3RoPjAsZT1hLmxlbmd0aD4wLGY9ZnVuY3Rpb24oZixnLGgsaSxrKXt2YXIgbCxtLG8scD0wLHE9IjAiLHI9ZiYmW10scz1bXSx0PWosdT1mfHxlJiZkLmZpbmQuVEFHKCIqIixrKSx2PXcrPW51bGw9PXQ/MTpNYXRoLnJhbmRvbSgpfHwuMSx4PXUubGVuZ3RoO2ZvcihrJiYoaj1nIT09biYmZyk7cSE9PXgmJm51bGwhPShsPXVbcV0pO3ErKyl7aWYoZSYmbCl7bT0wO3doaWxlKG89YVttKytdKWlmKG8obCxnLGgpKXtpLnB1c2gobCk7YnJlYWt9ayYmKHc9dil9YyYmKChsPSFvJiZsKSYmcC0tLGYmJnIucHVzaChsKSl9aWYocCs9cSxjJiZxIT09cCl7bT0wO3doaWxlKG89YlttKytdKW8ocixzLGcsaCk7aWYoZil7aWYocD4wKXdoaWxlKHEtLSlyW3FdfHxzW3FdfHwoc1txXT1GLmNhbGwoaSkpO3M9dmIocyl9SC5hcHBseShpLHMpLGsmJiFmJiZzLmxlbmd0aD4wJiZwK2IubGVuZ3RoPjEmJmdiLnVuaXF1ZVNvcnQoaSl9cmV0dXJuIGsmJih3PXYsaj10KSxyfTtyZXR1cm4gYz9pYihmKTpmfXJldHVybiBoPWdiLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1BW2ErIiAiXTtpZighZil7Ynx8KGI9ZyhhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj14YihiW2NdKSxmW3VdP2QucHVzaChmKTplLnB1c2goZik7Zj1BKGEseWIoZSxkKSksZi5zZWxlY3Rvcj1hfXJldHVybiBmfSxpPWdiLnNlbGVjdD1mdW5jdGlvbihhLGIsZSxmKXt2YXIgaSxqLGssbCxtLG49ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEsbz0hZiYmZyhhPW4uc2VsZWN0b3J8fGEpO2lmKGU9ZXx8W10sMT09PW8ubGVuZ3RoKXtpZihqPW9bMF09b1swXS5zbGljZSgwKSxqLmxlbmd0aD4yJiYiSUQiPT09KGs9alswXSkudHlwZSYmYy5nZXRCeUlkJiY5PT09Yi5ub2RlVHlwZSYmcCYmZC5yZWxhdGl2ZVtqWzFdLnR5cGVdKXtpZihiPShkLmZpbmQuSUQoay5tYXRjaGVzWzBdLnJlcGxhY2UoY2IsZGIpLGIpfHxbXSlbMF0sIWIpcmV0dXJuIGU7biYmKGI9Yi5wYXJlbnROb2RlKSxhPWEuc2xpY2Uoai5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1YLm5lZWRzQ29udGV4dC50ZXN0KGEpPzA6ai5sZW5ndGg7d2hpbGUoaS0tKXtpZihrPWpbaV0sZC5yZWxhdGl2ZVtsPWsudHlwZV0pYnJlYWs7aWYoKG09ZC5maW5kW2xdKSYmKGY9bShrLm1hdGNoZXNbMF0ucmVwbGFjZShjYixkYiksYWIudGVzdChqWzBdLnR5cGUpJiZwYihiLnBhcmVudE5vZGUpfHxiKSkpe2lmKGouc3BsaWNlKGksMSksYT1mLmxlbmd0aCYmcmIoaiksIWEpcmV0dXJuIEguYXBwbHkoZSxmKSxlO2JyZWFrfX19cmV0dXJuKG58fGgoYSxvKSkoZixiLCFwLGUsYWIudGVzdChhKSYmcGIoYi5wYXJlbnROb2RlKXx8YiksZX0sYy5zb3J0U3RhYmxlPXUuc3BsaXQoIiIpLnNvcnQoQikuam9pbigiIik9PT11LGMuZGV0ZWN0RHVwbGljYXRlcz0hIWwsbSgpLGMuc29ydERldGFjaGVkPWpiKGZ1bmN0aW9uKGEpe3JldHVybiAxJmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24obi5jcmVhdGVFbGVtZW50KCJkaXYiKSl9KSxqYihmdW5jdGlvbihhKXtyZXR1cm4gYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxrYigidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP3ZvaWQgMDphLmdldEF0dHJpYnV0ZShiLCJ0eXBlIj09PWIudG9Mb3dlckNhc2UoKT8xOjIpfSksYy5hdHRyaWJ1dGVzJiZqYihmdW5jdGlvbihhKXtyZXR1cm4gYS5pbm5lckhUTUw9IjxpbnB1dC8+IixhLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxrYigidmFsdWUiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY3x8ImlucHV0IiE9PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT92b2lkIDA6YS5kZWZhdWx0VmFsdWV9KSxqYihmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8a2IoSyxmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOmFbYl09PT0hMD9iLnRvTG93ZXJDYXNlKCk6KGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZC5zcGVjaWZpZWQ/ZC52YWx1ZTpudWxsfSksZ2J9KGEpO20uZmluZD1zLG0uZXhwcj1zLnNlbGVjdG9ycyxtLmV4cHJbIjoiXT1tLmV4cHIucHNldWRvcyxtLnVuaXF1ZT1zLnVuaXF1ZVNvcnQsbS50ZXh0PXMuZ2V0VGV4dCxtLmlzWE1MRG9jPXMuaXNYTUwsbS5jb250YWlucz1zLmNvbnRhaW5zO3ZhciB0PW0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsdT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLHY9L14uW146I1xbXC4sXSokLztmdW5jdGlvbiB3KGEsYixjKXtpZihtLmlzRnVuY3Rpb24oYikpcmV0dXJuIG0uZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuISFiLmNhbGwoYSxkLGEpIT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIG0uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09YiE9PWN9KTtpZigic3RyaW5nIj09dHlwZW9mIGIpe2lmKHYudGVzdChiKSlyZXR1cm4gbS5maWx0ZXIoYixhLGMpO2I9bS5maWx0ZXIoYixhKX1yZXR1cm4gbS5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIG0uaW5BcnJheShhLGIpPj0wIT09Y30pfW0uZmlsdGVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iWzBdO3JldHVybiBjJiYoYT0iOm5vdCgiK2ErIikiKSwxPT09Yi5sZW5ndGgmJjE9PT1kLm5vZGVUeXBlP20uZmluZC5tYXRjaGVzU2VsZWN0b3IoZCxhKT9bZF06W106bS5maW5kLm1hdGNoZXMoYSxtLmdyZXAoYixmdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5cGV9KSl9LG0uZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZD10aGlzLGU9ZC5sZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBhKXJldHVybiB0aGlzLnB1c2hTdGFjayhtKGEpLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZT5iO2IrKylpZihtLmNvbnRhaW5zKGRbYl0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKGI9MDtlPmI7YisrKW0uZmluZChhLGRbYl0sYyk7cmV0dXJuIGM9dGhpcy5wdXNoU3RhY2soZT4xP20udW5pcXVlKGMpOmMpLGMuc2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj90aGlzLnNlbGVjdG9yKyIgIithOmEsY30sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayh3KHRoaXMsYXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayh3KHRoaXMsYXx8W10sITApKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISF3KHRoaXMsInN0cmluZyI9PXR5cGVvZiBhJiZ0LnRlc3QoYSk/bShhKTphfHxbXSwhMSkubGVuZ3RofX0pO3ZhciB4LHk9YS5kb2N1bWVudCx6PS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sQT1tLmZuLmluaXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkO2lmKCFhKXJldHVybiB0aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgYSl7aWYoYz0iPCI9PT1hLmNoYXJBdCgwKSYmIj4iPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJmEubGVuZ3RoPj0zP1tudWxsLGEsbnVsbF06ei5leGVjKGEpLCFjfHwhY1sxXSYmYilyZXR1cm4hYnx8Yi5qcXVlcnk/KGJ8fHgpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpO2lmKGNbMV0pe2lmKGI9YiBpbnN0YW5jZW9mIG0/YlswXTpiLG0ubWVyZ2UodGhpcyxtLnBhcnNlSFRNTChjWzFdLGImJmIubm9kZVR5cGU/Yi5vd25lckRvY3VtZW50fHxiOnksITApKSx1LnRlc3QoY1sxXSkmJm0uaXNQbGFpbk9iamVjdChiKSlmb3IoYyBpbiBiKW0uaXNGdW5jdGlvbih0aGlzW2NdKT90aGlzW2NdKGJbY10pOnRoaXMuYXR0cihjLGJbY10pO3JldHVybiB0aGlzfWlmKGQ9eS5nZXRFbGVtZW50QnlJZChjWzJdKSxkJiZkLnBhcmVudE5vZGUpe2lmKGQuaWQhPT1jWzJdKXJldHVybiB4LmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWR9cmV0dXJuIHRoaXMuY29udGV4dD15LHRoaXMuc2VsZWN0b3I9YSx0aGlzfXJldHVybiBhLm5vZGVUeXBlPyh0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTEsdGhpcyk6bS5pc0Z1bmN0aW9uKGEpPyJ1bmRlZmluZWQiIT10eXBlb2YgeC5yZWFkeT94LnJlYWR5KGEpOmEobSk6KHZvaWQgMCE9PWEuc2VsZWN0b3ImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCksbS5tYWtlQXJyYXkoYSx0aGlzKSl9O0EucHJvdG90eXBlPW0uZm4seD1tKHkpO3ZhciBCPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLEM9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07bS5leHRlbmQoe2RpcjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZT1hW2JdO3doaWxlKGUmJjkhPT1lLm5vZGVUeXBlJiYodm9pZCAwPT09Y3x8MSE9PWUubm9kZVR5cGV8fCFtKGUpLmlzKGMpKSkxPT09ZS5ub2RlVHlwZSYmZC5wdXNoKGUpLGU9ZVtiXTtyZXR1cm4gZH0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY319KSxtLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9bShhLHRoaXMpLGQ9Yy5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGI9MDtkPmI7YisrKWlmKG0uY29udGFpbnModGhpcyxjW2JdKSlyZXR1cm4hMH0pfSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9MCxlPXRoaXMubGVuZ3RoLGY9W10sZz10LnRlc3QoYSl8fCJzdHJpbmciIT10eXBlb2YgYT9tKGEsYnx8dGhpcy5jb250ZXh0KTowO2U+ZDtkKyspZm9yKGM9dGhpc1tkXTtjJiZjIT09YjtjPWMucGFyZW50Tm9kZSlpZihjLm5vZGVUeXBlPDExJiYoZz9nLmluZGV4KGMpPi0xOjE9PT1jLm5vZGVUeXBlJiZtLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGMsYSkpKXtmLnB1c2goYyk7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGYubGVuZ3RoPjE/bS51bmlxdWUoZik6Zil9LGluZGV4OmZ1bmN0aW9uKGEpe3JldHVybiBhPyJzdHJpbmciPT10eXBlb2YgYT9tLmluQXJyYXkodGhpc1swXSxtKGEpKTptLmluQXJyYXkoYS5qcXVlcnk/YVswXTphLHRoaXMpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG0udW5pcXVlKG0ubWVyZ2UodGhpcy5nZXQoKSxtKGEsYikpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWE/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpfX0pO2Z1bmN0aW9uIEQoYSxiKXtkbyBhPWFbYl07d2hpbGUoYSYmMSE9PWEubm9kZVR5cGUpO3JldHVybiBhfW0uZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmMTEhPT1iLm5vZGVUeXBlP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gbS5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBtLmRpcihhLCJwYXJlbnROb2RlIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gRChhLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBEKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBtLmRpcihhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiBtLmRpcihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5kaXIoYSwibmV4dFNpYmxpbmciLGMpfSxwcmV2VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBtLmRpcihhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gbS5zaWJsaW5nKChhLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gbS5zaWJsaW5nKGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBtLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6bS5tZXJnZShbXSxhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXttLmZuW2FdPWZ1bmN0aW9uKGMsZCl7dmFyIGU9bS5tYXAodGhpcyxiLGMpO3JldHVybiJVbnRpbCIhPT1hLnNsaWNlKC01KSYmKGQ9YyksZCYmInN0cmluZyI9PXR5cGVvZiBkJiYoZT1tLmZpbHRlcihkLGUpKSx0aGlzLmxlbmd0aD4xJiYoQ1thXXx8KGU9bS51bmlxdWUoZSkpLEIudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRT0vXFMrL2csRj17fTtmdW5jdGlvbiBHKGEpe3ZhciBiPUZbYV09e307cmV0dXJuIG0uZWFjaChhLm1hdGNoKEUpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW0uQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP0ZbYV18fEcoYSk6bS5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZixnLGg9W10saT0hYS5vbmNlJiZbXSxqPWZ1bmN0aW9uKGwpe2ZvcihjPWEubWVtb3J5JiZsLGQ9ITAsZj1nfHwwLGc9MCxlPWgubGVuZ3RoLGI9ITA7aCYmZT5mO2YrKylpZihoW2ZdLmFwcGx5KGxbMF0sbFsxXSk9PT0hMSYmYS5zdG9wT25GYWxzZSl7Yz0hMTticmVha31iPSExLGgmJihpP2kubGVuZ3RoJiZqKGkuc2hpZnQoKSk6Yz9oPVtdOmsuZGlzYWJsZSgpKX0saz17YWRkOmZ1bmN0aW9uKCl7aWYoaCl7dmFyIGQ9aC5sZW5ndGg7IWZ1bmN0aW9uIGYoYil7bS5lYWNoKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1tLnR5cGUoYyk7ImZ1bmN0aW9uIj09PWQ/YS51bmlxdWUmJmsuaGFzKGMpfHxoLnB1c2goYyk6YyYmYy5sZW5ndGgmJiJzdHJpbmciIT09ZCYmZihjKX0pfShhcmd1bWVudHMpLGI/ZT1oLmxlbmd0aDpjJiYoZz1kLGooYykpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaCYmbS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGMpe3ZhciBkO3doaWxlKChkPW0uaW5BcnJheShjLGgsZCkpPi0xKWguc3BsaWNlKGQsMSksYiYmKGU+PWQmJmUtLSxmPj1kJiZmLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVybiBhP20uaW5BcnJheShhLGgpPi0xOiEoIWh8fCFoLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sZT0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gaD1pPWM9dm9pZCAwLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWh9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaT12b2lkIDAsY3x8ay5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWl9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIWh8fGQmJiFpfHwoYz1jfHxbXSxjPVthLGMuc2xpY2U/Yy5zbGljZSgpOmNdLGI/aS5wdXNoKGMpOmooYykpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWR9fTtyZXR1cm4ga30sbS5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUiLCJkb25lIixtLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLG0uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG0uQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cztyZXR1cm4gbS5EZWZlcnJlZChmdW5jdGlvbihjKXttLmVhY2goYixmdW5jdGlvbihiLGYpe3ZhciBnPW0uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0aW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbS5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpLnByb2dyZXNzKGMubm90aWZ5KTpjW2ZbMF0rIldpdGgiXSh0aGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT9tLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLG0uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlswXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlswXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUsZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZC5jYWxsKGFyZ3VtZW50cyksZT1jLmxlbmd0aCxmPTEhPT1lfHxhJiZtLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9lOjAsZz0xPT09Zj9hOm0uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZSl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0aD4xP2QuY2FsbChhcmd1bWVudHMpOmUsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6LS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihlPjEpZm9yKGk9bmV3IEFycmF5KGUpLGo9bmV3IEFycmF5KGUpLGs9bmV3IEFycmF5KGUpO2U+YjtiKyspY1tiXSYmbS5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCkuZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCkucHJvZ3Jlc3MoaChiLGosaSkpOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0pO3ZhciBIO20uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG0ucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksdGhpc30sbS5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bS5yZWFkeVdhaXQrKzptLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7aWYoYT09PSEwPyEtLW0ucmVhZHlXYWl0OiFtLmlzUmVhZHkpe2lmKCF5LmJvZHkpcmV0dXJuIHNldFRpbWVvdXQobS5yZWFkeSk7bS5pc1JlYWR5PSEwLGEhPT0hMCYmLS1tLnJlYWR5V2FpdD4wfHwoSC5yZXNvbHZlV2l0aCh5LFttXSksbS5mbi50cmlnZ2VySGFuZGxlciYmKG0oeSkudHJpZ2dlckhhbmRsZXIoInJlYWR5IiksbSh5KS5vZmYoInJlYWR5IikpKX19fSk7ZnVuY3Rpb24gSSgpe3kuYWRkRXZlbnRMaXN0ZW5lcj8oeS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixKLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEosITEpKTooeS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixKKSxhLmRldGFjaEV2ZW50KCJvbmxvYWQiLEopKX1mdW5jdGlvbiBKKCl7KHkuYWRkRXZlbnRMaXN0ZW5lcnx8ImxvYWQiPT09ZXZlbnQudHlwZXx8ImNvbXBsZXRlIj09PXkucmVhZHlTdGF0ZSkmJihJKCksbS5yZWFkeSgpKX1tLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7aWYoIUgpaWYoSD1tLkRlZmVycmVkKCksImNvbXBsZXRlIj09PXkucmVhZHlTdGF0ZSlzZXRUaW1lb3V0KG0ucmVhZHkpO2Vsc2UgaWYoeS5hZGRFdmVudExpc3RlbmVyKXkuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSiwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixKLCExKTtlbHNle3kuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSiksYS5hdHRhY2hFdmVudCgib25sb2FkIixKKTt2YXIgYz0hMTt0cnl7Yz1udWxsPT1hLmZyYW1lRWxlbWVudCYmeS5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goZCl7fWMmJmMuZG9TY3JvbGwmJiFmdW5jdGlvbiBlKCl7aWYoIW0uaXNSZWFkeSl7dHJ5e2MuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChhKXtyZXR1cm4gc2V0VGltZW91dChlLDUwKX1JKCksbS5yZWFkeSgpfX0oKX1yZXR1cm4gSC5wcm9taXNlKGIpfTt2YXIgSz0idW5kZWZpbmVkIixMO2ZvcihMIGluIG0oaykpYnJlYWs7ay5vd25MYXN0PSIwIiE9PUwsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PSExLG0oZnVuY3Rpb24oKXt2YXIgYSxiLGMsZDtjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlJiYoYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4IixjLmFwcGVuZENoaWxkKGQpLmFwcGVuZENoaWxkKGIpLHR5cGVvZiBiLnN0eWxlLnpvb20hPT1LJiYoYi5zdHlsZS5jc3NUZXh0PSJkaXNwbGF5OmlubGluZTttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjFweDt3aWR0aDoxcHg7em9vbToxIixrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9YT0zPT09Yi5vZmZzZXRXaWR0aCxhJiYoYy5zdHlsZS56b29tPTEpKSxjLnJlbW92ZUNoaWxkKGQpKX0pLGZ1bmN0aW9uKCl7dmFyIGE9eS5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZihudWxsPT1rLmRlbGV0ZUV4cGFuZG8pe2suZGVsZXRlRXhwYW5kbz0hMDt0cnl7ZGVsZXRlIGEudGVzdH1jYXRjaChiKXtrLmRlbGV0ZUV4cGFuZG89ITF9fWE9bnVsbH0oKSxtLmFjY2VwdERhdGE9ZnVuY3Rpb24oYSl7dmFyIGI9bS5ub0RhdGFbKGEubm9kZU5hbWUrIiAiKS50b0xvd2VyQ2FzZSgpXSxjPSthLm5vZGVUeXBlfHwxO3JldHVybiAxIT09YyYmOSE9PWM/ITE6IWJ8fGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9O3ZhciBNPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sTj0vKFtBLVpdKS9nO2Z1bmN0aW9uIE8oYSxiLGMpe2lmKHZvaWQgMD09PWMmJjE9PT1hLm5vZGVUeXBlKXt2YXIgZD0iZGF0YS0iK2IucmVwbGFjZShOLCItJDEiKS50b0xvd2VyQ2FzZSgpO2lmKGM9YS5nZXRBdHRyaWJ1dGUoZCksInN0cmluZyI9PXR5cGVvZiBjKXt0cnl7Yz0idHJ1ZSI9PT1jPyEwOiJmYWxzZSI9PT1jPyExOiJudWxsIj09PWM/bnVsbDorYysiIj09PWM/K2M6TS50ZXN0KGMpP20ucGFyc2VKU09OKGMpOmN9Y2F0Y2goZSl7fW0uZGF0YShhLGIsYyl9ZWxzZSBjPXZvaWQgMH1yZXR1cm4gY31mdW5jdGlvbiBQKGEpe3ZhciBiO2ZvcihiIGluIGEpaWYoKCJkYXRhIiE9PWJ8fCFtLmlzRW1wdHlPYmplY3QoYVtiXSkpJiYidG9KU09OIiE9PWIpcmV0dXJuITE7DQpyZXR1cm4hMH1mdW5jdGlvbiBRKGEsYixkLGUpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGYsZyxoPW0uZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP20uY2FjaGU6YSxrPWk/YVtoXTphW2hdJiZoO2lmKGsmJmpba10mJihlfHxqW2tdLmRhdGEpfHx2b2lkIDAhPT1kfHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIGt8fChrPWk/YVtoXT1jLnBvcCgpfHxtLmd1aWQrKzpoKSxqW2tdfHwoaltrXT1pP3t9Ont0b0pTT046bS5ub29wfSksKCJvYmplY3QiPT10eXBlb2YgYnx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoZT9qW2tdPW0uZXh0ZW5kKGpba10sYik6altrXS5kYXRhPW0uZXh0ZW5kKGpba10uZGF0YSxiKSksZz1qW2tdLGV8fChnLmRhdGF8fChnLmRhdGE9e30pLGc9Zy5kYXRhKSx2b2lkIDAhPT1kJiYoZ1ttLmNhbWVsQ2FzZShiKV09ZCksInN0cmluZyI9PXR5cGVvZiBiPyhmPWdbYl0sbnVsbD09ZiYmKGY9Z1ttLmNhbWVsQ2FzZShiKV0pKTpmPWcsZn19ZnVuY3Rpb24gUihhLGIsYyl7aWYobS5hY2NlcHREYXRhKGEpKXt2YXIgZCxlLGY9YS5ub2RlVHlwZSxnPWY/bS5jYWNoZTphLGg9Zj9hW20uZXhwYW5kb106bS5leHBhbmRvO2lmKGdbaF0pe2lmKGImJihkPWM/Z1toXTpnW2hdLmRhdGEpKXttLmlzQXJyYXkoYik/Yj1iLmNvbmNhdChtLm1hcChiLG0uY2FtZWxDYXNlKSk6YiBpbiBkP2I9W2JdOihiPW0uY2FtZWxDYXNlKGIpLGI9YiBpbiBkP1tiXTpiLnNwbGl0KCIgIikpLGU9Yi5sZW5ndGg7d2hpbGUoZS0tKWRlbGV0ZSBkW2JbZV1dO2lmKGM/IVAoZCk6IW0uaXNFbXB0eU9iamVjdChkKSlyZXR1cm59KGN8fChkZWxldGUgZ1toXS5kYXRhLFAoZ1toXSkpKSYmKGY/bS5jbGVhbkRhdGEoW2FdLCEwKTprLmRlbGV0ZUV4cGFuZG98fGchPWcud2luZG93P2RlbGV0ZSBnW2hdOmdbaF09bnVsbCl9fX1tLmV4dGVuZCh7Y2FjaGU6e30sbm9EYXRhOnsiYXBwbGV0ICI6ITAsImVtYmVkICI6ITAsIm9iamVjdCAiOiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAifSxoYXNEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiBhPWEubm9kZVR5cGU/bS5jYWNoZVthW20uZXhwYW5kb11dOmFbbS5leHBhbmRvXSwhIWEmJiFQKGEpfSxkYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUShhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUihhLGIpfSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoYSxiLGMsITApfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIpe3JldHVybiBSKGEsYiwhMCl9fSksbS5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj10aGlzWzBdLGc9ZiYmZi5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWEpe2lmKHRoaXMubGVuZ3RoJiYoZT1tLmRhdGEoZiksMT09PWYubm9kZVR5cGUmJiFtLl9kYXRhKGYsInBhcnNlZEF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1nW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bS5jYW1lbENhc2UoZC5zbGljZSg1KSksTyhmLGQsZVtkXSkpKTttLl9kYXRhKGYsInBhcnNlZEF0dHJzIiwhMCl9cmV0dXJuIGV9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhP3RoaXMuZWFjaChmdW5jdGlvbigpe20uZGF0YSh0aGlzLGEpfSk6YXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaChmdW5jdGlvbigpe20uZGF0YSh0aGlzLGEsYil9KTpmP08oZixhLG0uZGF0YShmLGEpKTp2b2lkIDB9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20ucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSksbS5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYT8oYj0oYnx8ImZ4IikrInF1ZXVlIixkPW0uX2RhdGEoYSxiKSxjJiYoIWR8fG0uaXNBcnJheShjKT9kPW0uX2RhdGEoYSxiLG0ubWFrZUFycmF5KGMpKTpkLnB1c2goYykpLGR8fFtdKTp2b2lkIDB9LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9bS5xdWV1ZShhLGIpLGQ9Yy5sZW5ndGgsZT1jLnNoaWZ0KCksZj1tLl9xdWV1ZUhvb2tzKGEsYiksZz1mdW5jdGlvbigpe20uZGVxdWV1ZShhLGIpfTsiaW5wcm9ncmVzcyI9PT1lJiYoZT1jLnNoaWZ0KCksZC0tKSxlJiYoImZ4Ij09PWImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBmLnN0b3AsZS5jYWxsKGEsZyxmKSksIWQmJmYmJmYuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihhLGIpe3ZhciBjPWIrInF1ZXVlSG9va3MiO3JldHVybiBtLl9kYXRhKGEsYyl8fG0uX2RhdGEoYSxjLHtlbXB0eTptLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXttLl9yZW1vdmVEYXRhKGEsYisicXVldWUiKSxtLl9yZW1vdmVEYXRhKGEsYyl9KX0pfX0pLG0uZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYj1hLGE9ImZ4IixjLS0pLGFyZ3VtZW50cy5sZW5ndGg8Yz9tLnF1ZXVlKHRoaXNbMF0sYSk6dm9pZCAwPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPW0ucXVldWUodGhpcyxhLGIpO20uX3F1ZXVlSG9va3ModGhpcyxhKSwiZngiPT09YSYmImlucHJvZ3Jlc3MiIT09Y1swXSYmbS5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5kZXF1ZXVlKHRoaXMsYSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MSxlPW0uRGVmZXJyZWQoKSxmPXRoaXMsZz10aGlzLmxlbmd0aCxoPWZ1bmN0aW9uKCl7LS1kfHxlLnJlc29sdmVXaXRoKGYsW2ZdKX07InN0cmluZyIhPXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxhPWF8fCJmeCI7d2hpbGUoZy0tKWM9bS5fZGF0YShmW2ddLGErInF1ZXVlSG9va3MiKSxjJiZjLmVtcHR5JiYoZCsrLGMuZW1wdHkuYWRkKGgpKTtyZXR1cm4gaCgpLGUucHJvbWlzZShiKX19KTt2YXIgUz0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxUPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sVT1mdW5jdGlvbihhLGIpe3JldHVybiBhPWJ8fGEsIm5vbmUiPT09bS5jc3MoYSwiZGlzcGxheSIpfHwhbS5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSl9LFY9bS5hY2Nlc3M9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVsbD09YztpZigib2JqZWN0Ij09PW0udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKW0uYWNjZXNzKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihlPSEwLG0uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxiPW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChtKGEpLGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0saCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMpOmZ9LFc9L14oPzpjaGVja2JveHxyYWRpbykkL2k7IWZ1bmN0aW9uKCl7dmFyIGE9eS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPXkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGIuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGsubGVhZGluZ1doaXRlc3BhY2U9Mz09PWIuZmlyc3RDaGlsZC5ub2RlVHlwZSxrLnRib2R5PSFiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxrLmh0bWxTZXJpYWxpemU9ISFiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLGsuaHRtbDVDbG9uZT0iPDpuYXY+PC86bmF2PiIhPT15LmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MLGEudHlwZT0iY2hlY2tib3giLGEuY2hlY2tlZD0hMCxjLmFwcGVuZENoaWxkKGEpLGsuYXBwZW5kQ2hlY2tlZD1hLmNoZWNrZWQsYi5pbm5lckhUTUw9Ijx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLGsubm9DbG9uZUNoZWNrZWQ9ISFiLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSxjLmFwcGVuZENoaWxkKGIpLGIuaW5uZXJIVE1MPSI8aW5wdXQgdHlwZT0ncmFkaW8nIGNoZWNrZWQ9J2NoZWNrZWQnIG5hbWU9J3QnLz4iLGsuY2hlY2tDbG9uZT1iLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxrLm5vQ2xvbmVFdmVudD0hMCxiLmF0dGFjaEV2ZW50JiYoYi5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtrLm5vQ2xvbmVFdmVudD0hMX0pLGIuY2xvbmVOb2RlKCEwKS5jbGljaygpKSxudWxsPT1rLmRlbGV0ZUV4cGFuZG8pe2suZGVsZXRlRXhwYW5kbz0hMDt0cnl7ZGVsZXRlIGIudGVzdH1jYXRjaChkKXtrLmRlbGV0ZUV4cGFuZG89ITF9fX0oKSxmdW5jdGlvbigpe3ZhciBiLGMsZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZvcihiIGlue3N1Ym1pdDohMCxjaGFuZ2U6ITAsZm9jdXNpbjohMH0pYz0ib24iK2IsKGtbYisiQnViYmxlcyJdPWMgaW4gYSl8fChkLnNldEF0dHJpYnV0ZShjLCJ0Iiksa1tiKyJCdWJibGVzIl09ZC5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMSk7ZD1udWxsfSgpO3ZhciBYPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaSxZPS9ea2V5LyxaPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudSl8Y2xpY2svLCQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLF89L14oW14uXSopKD86XC4oLispfCkkLztmdW5jdGlvbiBhYigpe3JldHVybiEwfWZ1bmN0aW9uIGJiKCl7cmV0dXJuITF9ZnVuY3Rpb24gY2IoKXt0cnl7cmV0dXJuIHkuYWN0aXZlRWxlbWVudH1jYXRjaChhKXt9fW0uZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLG8scCxxLHI9bS5fZGF0YShhKTtpZihyKXtjLmhhbmRsZXImJihpPWMsYz1pLmhhbmRsZXIsZT1pLnNlbGVjdG9yKSxjLmd1aWR8fChjLmd1aWQ9bS5ndWlkKyspLChnPXIuZXZlbnRzKXx8KGc9ci5ldmVudHM9e30pLChrPXIuaGFuZGxlKXx8KGs9ci5oYW5kbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBtPT09S3x8YSYmbS5ldmVudC50cmlnZ2VyZWQ9PT1hLnR5cGU/dm9pZCAwOm0uZXZlbnQuZGlzcGF0Y2guYXBwbHkoay5lbGVtLGFyZ3VtZW50cyl9LGsuZWxlbT1hKSxiPShifHwiIikubWF0Y2goRSl8fFsiIl0saD1iLmxlbmd0aDt3aGlsZShoLS0pZj1fLmV4ZWMoYltoXSl8fFtdLG89cT1mWzFdLHA9KGZbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvJiYoaj1tLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGU/ai5kZWxlZ2F0ZVR5cGU6ai5iaW5kVHlwZSl8fG8saj1tLmV2ZW50LnNwZWNpYWxbb118fHt9LGw9bS5leHRlbmQoe3R5cGU6byxvcmlnVHlwZTpxLGRhdGE6ZCxoYW5kbGVyOmMsZ3VpZDpjLmd1aWQsc2VsZWN0b3I6ZSxuZWVkc0NvbnRleHQ6ZSYmbS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGUpLG5hbWVzcGFjZTpwLmpvaW4oIi4iKX0saSksKG49Z1tvXSl8fChuPWdbb109W10sbi5kZWxlZ2F0ZUNvdW50PTAsai5zZXR1cCYmai5zZXR1cC5jYWxsKGEsZCxwLGspIT09ITF8fChhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKG8saywhMSk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK28saykpKSxqLmFkZCYmKGouYWRkLmNhbGwoYSxsKSxsLmhhbmRsZXIuZ3VpZHx8KGwuaGFuZGxlci5ndWlkPWMuZ3VpZCkpLGU/bi5zcGxpY2Uobi5kZWxlZ2F0ZUNvdW50KyssMCxsKTpuLnB1c2gobCksbS5ldmVudC5nbG9iYWxbb109ITApO2E9bnVsbH19LHJlbW92ZTpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG4sbyxwLHEscj1tLmhhc0RhdGEoYSkmJm0uX2RhdGEoYSk7aWYociYmKGs9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRSl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1fLmV4ZWMoYltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW0uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8byxuPWtbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxpPWY9bi5sZW5ndGg7d2hpbGUoZi0tKWc9bltmXSwhZSYmcSE9PWcub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWcuZ3VpZHx8aCYmIWgudGVzdChnLm5hbWVzcGFjZSl8fGQmJmQhPT1nLnNlbGVjdG9yJiYoIioqIiE9PWR8fCFnLnNlbGVjdG9yKXx8KG4uc3BsaWNlKGYsMSksZy5zZWxlY3RvciYmbi5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxnKSk7aSYmIW4ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEscCxyLmhhbmRsZSkhPT0hMXx8bS5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRlbGV0ZSBrW29dKX1lbHNlIGZvcihvIGluIGspbS5ldmVudC5yZW1vdmUoYSxvK2Jbal0sYyxkLCEwKTttLmlzRW1wdHlPYmplY3QoaykmJihkZWxldGUgci5oYW5kbGUsbS5fcmVtb3ZlRGF0YShhLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmLGcsaCxpLGssbCxuLG89W2R8fHldLHA9ai5jYWxsKGIsInR5cGUiKT9iLnR5cGU6YixxPWouY2FsbChiLCJuYW1lc3BhY2UiKT9iLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGg9bD1kPWR8fHksMyE9PWQubm9kZVR5cGUmJjghPT1kLm5vZGVUeXBlJiYhJC50ZXN0KHArbS5ldmVudC50cmlnZ2VyZWQpJiYocC5pbmRleE9mKCIuIik+PTAmJihxPXAuc3BsaXQoIi4iKSxwPXEuc2hpZnQoKSxxLnNvcnQoKSksZz1wLmluZGV4T2YoIjoiKTwwJiYib24iK3AsYj1iW20uZXhwYW5kb10/YjpuZXcgbS5FdmVudChwLCJvYmplY3QiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9ZT8yOjMsYi5uYW1lc3BhY2U9cS5qb2luKCIuIiksYi5uYW1lc3BhY2VfcmU9Yi5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIrcS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLGIucmVzdWx0PXZvaWQgMCxiLnRhcmdldHx8KGIudGFyZ2V0PWQpLGM9bnVsbD09Yz9bYl06bS5tYWtlQXJyYXkoYyxbYl0pLGs9bS5ldmVudC5zcGVjaWFsW3BdfHx7fSxlfHwhay50cmlnZ2VyfHxrLnRyaWdnZXIuYXBwbHkoZCxjKSE9PSExKSl7aWYoIWUmJiFrLm5vQnViYmxlJiYhbS5pc1dpbmRvdyhkKSl7Zm9yKGk9ay5kZWxlZ2F0ZVR5cGV8fHAsJC50ZXN0KGkrcCl8fChoPWgucGFyZW50Tm9kZSk7aDtoPWgucGFyZW50Tm9kZSlvLnB1c2goaCksbD1oO2w9PT0oZC5vd25lckRvY3VtZW50fHx5KSYmby5wdXNoKGwuZGVmYXVsdFZpZXd8fGwucGFyZW50V2luZG93fHxhKX1uPTA7d2hpbGUoKGg9b1tuKytdKSYmIWIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSliLnR5cGU9bj4xP2k6ay5iaW5kVHlwZXx8cCxmPShtLl9kYXRhKGgsImV2ZW50cyIpfHx7fSlbYi50eXBlXSYmbS5fZGF0YShoLCJoYW5kbGUiKSxmJiZmLmFwcGx5KGgsYyksZj1nJiZoW2ddLGYmJmYuYXBwbHkmJm0uYWNjZXB0RGF0YShoKSYmKGIucmVzdWx0PWYuYXBwbHkoaCxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO2lmKGIudHlwZT1wLCFlJiYhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKCFrLl9kZWZhdWx0fHxrLl9kZWZhdWx0LmFwcGx5KG8ucG9wKCksYyk9PT0hMSkmJm0uYWNjZXB0RGF0YShkKSYmZyYmZFtwXSYmIW0uaXNXaW5kb3coZCkpe2w9ZFtnXSxsJiYoZFtnXT1udWxsKSxtLmV2ZW50LnRyaWdnZXJlZD1wO3RyeXtkW3BdKCl9Y2F0Y2gocil7fW0uZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxsJiYoZFtnXT1sKX1yZXR1cm4gYi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXthPW0uZXZlbnQuZml4KGEpO3ZhciBiLGMsZSxmLGcsaD1bXSxpPWQuY2FsbChhcmd1bWVudHMpLGo9KG0uX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVthLnR5cGVdfHxbXSxrPW0uZXZlbnQuc3BlY2lhbFthLnR5cGVdfHx7fTtpZihpWzBdPWEsYS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFrLnByZURpc3BhdGNofHxrLnByZURpc3BhdGNoLmNhbGwodGhpcyxhKSE9PSExKXtoPW0uZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGEsaiksYj0wO3doaWxlKChmPWhbYisrXSkmJiFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2EuY3VycmVudFRhcmdldD1mLmVsZW0sZz0wO3doaWxlKChlPWYuaGFuZGxlcnNbZysrXSkmJiFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpKCFhLm5hbWVzcGFjZV9yZXx8YS5uYW1lc3BhY2VfcmUudGVzdChlLm5hbWVzcGFjZSkpJiYoYS5oYW5kbGVPYmo9ZSxhLmRhdGE9ZS5kYXRhLGM9KChtLmV2ZW50LnNwZWNpYWxbZS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGUuaGFuZGxlcikuYXBwbHkoZi5lbGVtLGkpLHZvaWQgMCE9PWMmJihhLnJlc3VsdD1jKT09PSExJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gay5wb3N0RGlzcGF0Y2gmJmsucG9zdERpc3BhdGNoLmNhbGwodGhpcyxhKSxhLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz1bXSxoPWIuZGVsZWdhdGVDb3VudCxpPWEudGFyZ2V0O2lmKGgmJmkubm9kZVR5cGUmJighYS5idXR0b258fCJjbGljayIhPT1hLnR5cGUpKWZvcig7aSE9dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZigxPT09aS5ub2RlVHlwZSYmKGkuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWEudHlwZSkpe2ZvcihlPVtdLGY9MDtoPmY7ZisrKWQ9YltmXSxjPWQuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWVbY10mJihlW2NdPWQubmVlZHNDb250ZXh0P20oYyx0aGlzKS5pbmRleChpKT49MDptLmZpbmQoYyx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGVbY10mJmUucHVzaChkKTtlLmxlbmd0aCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZX0pfXJldHVybiBoPGIubGVuZ3RoJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30sZml4OmZ1bmN0aW9uKGEpe2lmKGFbbS5leHBhbmRvXSlyZXR1cm4gYTt2YXIgYixjLGQsZT1hLnR5cGUsZj1hLGc9dGhpcy5maXhIb29rc1tlXTtnfHwodGhpcy5maXhIb29rc1tlXT1nPVoudGVzdChlKT90aGlzLm1vdXNlSG9va3M6WS50ZXN0KGUpP3RoaXMua2V5SG9va3M6e30pLGQ9Zy5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChnLnByb3BzKTp0aGlzLnByb3BzLGE9bmV3IG0uRXZlbnQoZiksYj1kLmxlbmd0aDt3aGlsZShiLS0pYz1kW2JdLGFbY109ZltjXTtyZXR1cm4gYS50YXJnZXR8fChhLnRhcmdldD1mLnNyY0VsZW1lbnR8fHkpLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT0hIWEubWV0YUtleSxnLmZpbHRlcj9nLmZpbHRlcihhLGYpOmF9LHByb3BzOiJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOiJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3JldHVybiBudWxsPT1hLndoaWNoJiYoYS53aGljaD1udWxsIT1iLmNoYXJDb2RlP2IuY2hhckNvZGU6Yi5rZXlDb2RlKSxhfX0sbW91c2VIb29rczp7cHJvcHM6ImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1iLmJ1dHRvbixnPWIuZnJvbUVsZW1lbnQ7cmV0dXJuIG51bGw9PWEucGFnZVgmJm51bGwhPWIuY2xpZW50WCYmKGQ9YS50YXJnZXQub3duZXJEb2N1bWVudHx8eSxlPWQuZG9jdW1lbnRFbGVtZW50LGM9ZC5ib2R5LGEucGFnZVg9Yi5jbGllbnRYKyhlJiZlLnNjcm9sbExlZnR8fGMmJmMuc2Nyb2xsTGVmdHx8MCktKGUmJmUuY2xpZW50TGVmdHx8YyYmYy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWIuY2xpZW50WSsoZSYmZS5zY3JvbGxUb3B8fGMmJmMuc2Nyb2xsVG9wfHwwKS0oZSYmZS5jbGllbnRUb3B8fGMmJmMuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmZyYmKGEucmVsYXRlZFRhcmdldD1nPT09YS50YXJnZXQ/Yi50b0VsZW1lbnQ6ZyksYS53aGljaHx8dm9pZCAwPT09Znx8KGEud2hpY2g9MSZmPzE6MiZmPzM6NCZmPzI6MCksYX19LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT1jYigpJiZ0aGlzLmZvY3VzKXRyeXtyZXR1cm4gdGhpcy5mb2N1cygpLCExfWNhdGNoKGEpe319LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PWNiKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9kZU5hbWUodGhpcywiaW5wdXQiKSYmImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljaz8odGhpcy5jbGljaygpLCExKTp2b2lkIDB9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe3JldHVybiBtLm5vZGVOYW1lKGEudGFyZ2V0LCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihhKXt2b2lkIDAhPT1hLnJlc3VsdCYmYS5vcmlnaW5hbEV2ZW50JiYoYS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWEucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1tLmV4dGVuZChuZXcgbS5FdmVudCxjLHt0eXBlOmEsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO2Q/bS5ldmVudC50cmlnZ2VyKGUsbnVsbCxiKTptLmV2ZW50LmRpc3BhdGNoLmNhbGwoYixlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLnByZXZlbnREZWZhdWx0KCl9fSxtLnJlbW92ZUV2ZW50PXkucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSJvbiIrYjthLmRldGFjaEV2ZW50JiYodHlwZW9mIGFbZF09PT1LJiYoYVtkXT1udWxsKSxhLmRldGFjaEV2ZW50KGQsYykpfSxtLkV2ZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtLkV2ZW50PyhhJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1hLmRlZmF1bHRQcmV2ZW50ZWQmJmEucmV0dXJuVmFsdWU9PT0hMT9hYjpiYik6dGhpcy50eXBlPWEsYiYmbS5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8bS5ub3coKSx2b2lkKHRoaXNbbS5leHBhbmRvXT0hMCkpOm5ldyBtLkV2ZW50KGEsYil9LG0uRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6YmIsaXNQcm9wYWdhdGlvblN0b3BwZWQ6YmIsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6YmIscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YWIsYSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1hYixhJiYoYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCksYS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1hYixhJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sbS5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihhLGIpe20uZXZlbnQuc3BlY2lhbFthXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGMsZD10aGlzLGU9YS5yZWxhdGVkVGFyZ2V0LGY9YS5oYW5kbGVPYmo7cmV0dXJuKCFlfHxlIT09ZCYmIW0uY29udGFpbnMoZCxlKSkmJihhLnR5cGU9Zi5vcmlnVHlwZSxjPWYuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWIpLGN9fX0pLGsuc3VibWl0QnViYmxlc3x8KG0uZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbS5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPW0ubm9kZU5hbWUoYiwiaW5wdXQiKXx8bS5ub2RlTmFtZShiLCJidXR0b24iKT9iLmZvcm06dm9pZCAwO2MmJiFtLl9kYXRhKGMsInN1Ym1pdEJ1YmJsZXMiKSYmKG0uZXZlbnQuYWRkKGMsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihhKXthLl9zdWJtaXRfYnViYmxlPSEwfSksbS5fZGF0YShjLCJzdWJtaXRCdWJibGVzIiwhMCkpfSl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihhKXthLl9zdWJtaXRfYnViYmxlJiYoZGVsZXRlIGEuX3N1Ym1pdF9idWJibGUsdGhpcy5wYXJlbnROb2RlJiYhYS5pc1RyaWdnZXImJm0uZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGEsITApKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gbS5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6dm9pZCBtLmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLGsuY2hhbmdlQnViYmxlc3x8KG0uZXZlbnQuc3BlY2lhbC5jaGFuZ2U9e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIFgudGVzdCh0aGlzLm5vZGVOYW1lKT8oKCJjaGVja2JveCI9PT10aGlzLnR5cGV8fCJyYWRpbyI9PT10aGlzLnR5cGUpJiYobS5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7ImNoZWNrZWQiPT09YS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZSYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSxtLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSksbS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLGEsITApfSkpLCExKTp2b2lkIG0uZXZlbnQuYWRkKHRoaXMsImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O1gudGVzdChiLm5vZGVOYW1lKSYmIW0uX2RhdGEoYiwiY2hhbmdlQnViYmxlcyIpJiYobS5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyF0aGlzLnBhcmVudE5vZGV8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHxtLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxhLCEwKX0pLG0uX2RhdGEoYiwiY2hhbmdlQnViYmxlcyIsITApKX0pfSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7cmV0dXJuIHRoaXMhPT1ifHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8InJhZGlvIiE9PWIudHlwZSYmImNoZWNrYm94IiE9PWIudHlwZT9hLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp2b2lkIDB9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG0uZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIiksIVgudGVzdCh0aGlzLm5vZGVOYW1lKX19KSxrLmZvY3VzaW5CdWJibGVzfHxtLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSl7bS5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LG0uZXZlbnQuZml4KGEpLCEwKX07bS5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW0uX2RhdGEoZCxiKTtlfHxkLmFkZEV2ZW50TGlzdGVuZXIoYSxjLCEwKSxtLl9kYXRhKGQsYiwoZXx8MCkrMSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9bS5fZGF0YShkLGIpLTE7ZT9tLl9kYXRhKGQsYixlKTooZC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMCksbS5fcmVtb3ZlRGF0YShkLGIpKX19fSksbS5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZztpZigib2JqZWN0Ij09dHlwZW9mIGEpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9Y3x8YixiPXZvaWQgMCk7Zm9yKGYgaW4gYSl0aGlzLm9uKGYsYixjLGFbZl0sZSk7cmV0dXJuIHRoaXN9aWYobnVsbD09YyYmbnVsbD09ZD8oZD1iLGM9Yj12b2lkIDApOm51bGw9PWQmJigic3RyaW5nIj09dHlwZW9mIGI/KGQ9YyxjPXZvaWQgMCk6KGQ9YyxjPWIsYj12b2lkIDApKSxkPT09ITEpZD1iYjtlbHNlIGlmKCFkKXJldHVybiB0aGlzO3JldHVybiAxPT09ZSYmKGc9ZCxkPWZ1bmN0aW9uKGEpe3JldHVybiBtKCkub2ZmKGEpLGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLmd1aWQ9Zy5ndWlkfHwoZy5ndWlkPW0uZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5ldmVudC5hZGQodGhpcyxhLGQsYyxiKX0pfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYSxiLGMsZCwxKX0sb2ZmOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlO2lmKGEmJmEucHJldmVudERlZmF1bHQmJmEuaGFuZGxlT2JqKXJldHVybiBkPWEuaGFuZGxlT2JqLG0oYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGQubmFtZXNwYWNlP2Qub3JpZ1R5cGUrIi4iK2QubmFtZXNwYWNlOmQub3JpZ1R5cGUsZC5zZWxlY3RvcixkLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXtmb3IoZSBpbiBhKXRoaXMub2ZmKGUsYixhW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4oYj09PSExfHwiZnVuY3Rpb24iPT10eXBlb2YgYikmJihjPWIsYj12b2lkIDApLGM9PT0hMSYmKGM9YmIpLHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bS5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7ZnVuY3Rpb24gZGIoYSl7dmFyIGI9ZWIuc3BsaXQoInwiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9dmFyIGViPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixmYj0vIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLGdiPW5ldyBSZWdFeHAoIjwoPzoiK2ViKyIpW1xccy8+XSIsImkiKSxoYj0vXlxzKy8saWI9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSxqYj0vPChbXHc6XSspLyxrYj0vPHRib2R5L2ksbGI9Lzx8JiM/XHcrOy8sbWI9LzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxuYj0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxvYj0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kscGI9L150cnVlXC8oLiopLyxxYj0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2cscmI9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxwYXJhbTpbMSwiPG9iamVjdD4iLCI8L29iamVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OmsuaHRtbFNlcmlhbGl6ZT9bMCwiIiwiIl06WzEsIlg8ZGl2PiIsIjwvZGl2PiJdfSxzYj1kYih5KSx0Yj1zYi5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtyYi5vcHRncm91cD1yYi5vcHRpb24scmIudGJvZHk9cmIudGZvb3Q9cmIuY29sZ3JvdXA9cmIuY2FwdGlvbj1yYi50aGVhZCxyYi50aD1yYi50ZDtmdW5jdGlvbiB1YihhLGIpe3ZhciBjLGQsZT0wLGY9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1LP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYnx8IioiKTp0eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsIT09Sz9hLnF1ZXJ5U2VsZWN0b3JBbGwoYnx8IioiKTp2b2lkIDA7aWYoIWYpZm9yKGY9W10sYz1hLmNoaWxkTm9kZXN8fGE7bnVsbCE9KGQ9Y1tlXSk7ZSsrKSFifHxtLm5vZGVOYW1lKGQsYik/Zi5wdXNoKGQpOm0ubWVyZ2UoZix1YihkLGIpKTtyZXR1cm4gdm9pZCAwPT09Ynx8YiYmbS5ub2RlTmFtZShhLGIpP20ubWVyZ2UoW2FdLGYpOmZ9ZnVuY3Rpb24gdmIoYSl7Vy50ZXN0KGEudHlwZSkmJihhLmRlZmF1bHRDaGVja2VkPWEuY2hlY2tlZCl9ZnVuY3Rpb24gd2IoYSxiKXtyZXR1cm4gbS5ub2RlTmFtZShhLCJ0YWJsZSIpJiZtLm5vZGVOYW1lKDExIT09Yi5ub2RlVHlwZT9iOmIuZmlyc3RDaGlsZCwidHIiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTphfWZ1bmN0aW9uIHhiKGEpe3JldHVybiBhLnR5cGU9KG51bGwhPT1tLmZpbmQuYXR0cihhLCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiB5YihhKXt2YXIgYj1wYi5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06YS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIHpiKGEsYil7Zm9yKHZhciBjLGQ9MDtudWxsIT0oYz1hW2RdKTtkKyspbS5fZGF0YShjLCJnbG9iYWxFdmFsIiwhYnx8bS5fZGF0YShiW2RdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIEFiKGEsYil7aWYoMT09PWIubm9kZVR5cGUmJm0uaGFzRGF0YShhKSl7dmFyIGMsZCxlLGY9bS5fZGF0YShhKSxnPW0uX2RhdGEoYixmKSxoPWYuZXZlbnRzO2lmKGgpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoYyBpbiBoKWZvcihkPTAsZT1oW2NdLmxlbmd0aDtlPmQ7ZCsrKW0uZXZlbnQuYWRkKGIsYyxoW2NdW2RdKX1nLmRhdGEmJihnLmRhdGE9bS5leHRlbmQoe30sZy5kYXRhKSl9fWZ1bmN0aW9uIEJiKGEsYil7dmFyIGMsZCxlO2lmKDE9PT1iLm5vZGVUeXBlKXtpZihjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwhay5ub0Nsb25lRXZlbnQmJmJbbS5leHBhbmRvXSl7ZT1tLl9kYXRhKGIpO2ZvcihkIGluIGUuZXZlbnRzKW0ucmVtb3ZlRXZlbnQoYixkLGUuaGFuZGxlKTtiLnJlbW92ZUF0dHJpYnV0ZShtLmV4cGFuZG8pfSJzY3JpcHQiPT09YyYmYi50ZXh0IT09YS50ZXh0Pyh4YihiKS50ZXh0PWEudGV4dCx5YihiKSk6Im9iamVjdCI9PT1jPyhiLnBhcmVudE5vZGUmJihiLm91dGVySFRNTD1hLm91dGVySFRNTCksay5odG1sNUNsb25lJiZhLmlubmVySFRNTCYmIW0udHJpbShiLmlubmVySFRNTCkmJihiLmlubmVySFRNTD1hLmlubmVySFRNTCkpOiJpbnB1dCI9PT1jJiZXLnRlc3QoYS50eXBlKT8oYi5kZWZhdWx0Q2hlY2tlZD1iLmNoZWNrZWQ9YS5jaGVja2VkLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKSk6Im9wdGlvbiI9PT1jP2IuZGVmYXVsdFNlbGVjdGVkPWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ6KCJpbnB1dCI9PT1jfHwidGV4dGFyZWEiPT09YykmJihiLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZSl9fW0uZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpPW0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpO2lmKGsuaHRtbDVDbG9uZXx8bS5pc1hNTERvYyhhKXx8IWdiLnRlc3QoIjwiK2Eubm9kZU5hbWUrIj4iKT9mPWEuY2xvbmVOb2RlKCEwKToodGIuaW5uZXJIVE1MPWEub3V0ZXJIVE1MLHRiLnJlbW92ZUNoaWxkKGY9dGIuZmlyc3RDaGlsZCkpLCEoay5ub0Nsb25lRXZlbnQmJmsubm9DbG9uZUNoZWNrZWR8fDEhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGV8fG0uaXNYTUxEb2MoYSkpKWZvcihkPXViKGYpLGg9dWIoYSksZz0wO251bGwhPShlPWhbZ10pOysrZylkW2ddJiZCYihlLGRbZ10pO2lmKGIpaWYoYylmb3IoaD1ofHx1YihhKSxkPWR8fHViKGYpLGc9MDtudWxsIT0oZT1oW2ddKTtnKyspQWIoZSxkW2ddKTtlbHNlIEFiKGEsZik7cmV0dXJuIGQ9dWIoZiwic2NyaXB0IiksZC5sZW5ndGg+MCYmemIoZCwhaSYmdWIoYSwic2NyaXB0IikpLGQ9aD1lPW51bGwsZn0sYnVpbGRGcmFnbWVudDpmdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGUsZixnLGgsaSxqLGwsbj1hLmxlbmd0aCxvPWRiKGIpLHA9W10scT0wO24+cTtxKyspaWYoZj1hW3FdLGZ8fDA9PT1mKWlmKCJvYmplY3QiPT09bS50eXBlKGYpKW0ubWVyZ2UocCxmLm5vZGVUeXBlP1tmXTpmKTtlbHNlIGlmKGxiLnRlc3QoZikpe2g9aHx8by5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxpPShqYi5leGVjKGYpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGw9cmJbaV18fHJiLl9kZWZhdWx0LGguaW5uZXJIVE1MPWxbMV0rZi5yZXBsYWNlKGliLCI8JDE+PC8kMj4iKStsWzJdLGU9bFswXTt3aGlsZShlLS0paD1oLmxhc3RDaGlsZDtpZighay5sZWFkaW5nV2hpdGVzcGFjZSYmaGIudGVzdChmKSYmcC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoaGIuZXhlYyhmKVswXSkpLCFrLnRib2R5KXtmPSJ0YWJsZSIhPT1pfHxrYi50ZXN0KGYpPyI8dGFibGU+IiE9PWxbMV18fGtiLnRlc3QoZik/MDpoOmguZmlyc3RDaGlsZCxlPWYmJmYuY2hpbGROb2Rlcy5sZW5ndGg7d2hpbGUoZS0tKW0ubm9kZU5hbWUoaj1mLmNoaWxkTm9kZXNbZV0sInRib2R5IikmJiFqLmNoaWxkTm9kZXMubGVuZ3RoJiZmLnJlbW92ZUNoaWxkKGopfW0ubWVyZ2UocCxoLmNoaWxkTm9kZXMpLGgudGV4dENvbnRlbnQ9IiI7d2hpbGUoaC5maXJzdENoaWxkKWgucmVtb3ZlQ2hpbGQoaC5maXJzdENoaWxkKTtoPW8ubGFzdENoaWxkfWVsc2UgcC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZikpO2gmJm8ucmVtb3ZlQ2hpbGQoaCksay5hcHBlbmRDaGVja2VkfHxtLmdyZXAodWIocCwiaW5wdXQiKSx2YikscT0wO3doaWxlKGY9cFtxKytdKWlmKCghZHx8LTE9PT1tLmluQXJyYXkoZixkKSkmJihnPW0uY29udGFpbnMoZi5vd25lckRvY3VtZW50LGYpLGg9dWIoby5hcHBlbmRDaGlsZChmKSwic2NyaXB0IiksZyYmemIoaCksYykpe2U9MDt3aGlsZShmPWhbZSsrXSlvYi50ZXN0KGYudHlwZXx8IiIpJiZjLnB1c2goZil9cmV0dXJuIGg9bnVsbCxvfSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGQsZSxmLGcsaD0wLGk9bS5leHBhbmRvLGo9bS5jYWNoZSxsPWsuZGVsZXRlRXhwYW5kbyxuPW0uZXZlbnQuc3BlY2lhbDtudWxsIT0oZD1hW2hdKTtoKyspaWYoKGJ8fG0uYWNjZXB0RGF0YShkKSkmJihmPWRbaV0sZz1mJiZqW2ZdKSl7aWYoZy5ldmVudHMpZm9yKGUgaW4gZy5ldmVudHMpbltlXT9tLmV2ZW50LnJlbW92ZShkLGUpOm0ucmVtb3ZlRXZlbnQoZCxlLGcuaGFuZGxlKTtqW2ZdJiYoZGVsZXRlIGpbZl0sbD9kZWxldGUgZFtpXTp0eXBlb2YgZC5yZW1vdmVBdHRyaWJ1dGUhPT1LP2QucmVtb3ZlQXR0cmlidXRlKGkpOmRbaV09bnVsbCxjLnB1c2goZikpfX19KSxtLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP20udGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fHkpLmNyZWF0ZVRleHROb2RlKGEpKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXdiKHRoaXMsYSk7Yi5hcHBlbmRDaGlsZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9d2IodGhpcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD1hP20uZmlsdGVyKGEsdGhpcyk6dGhpcyxlPTA7bnVsbCE9KGM9ZFtlXSk7ZSsrKWJ8fDEhPT1jLm5vZGVUeXBlfHxtLmNsZWFuRGF0YSh1YihjKSksYy5wYXJlbnROb2RlJiYoYiYmbS5jb250YWlucyhjLm93bmVyRG9jdW1lbnQsYykmJnpiKHViKGMsInNjcmlwdCIpKSxjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKXsxPT09YS5ub2RlVHlwZSYmbS5jbGVhbkRhdGEodWIoYSwhMSkpO3doaWxlKGEuZmlyc3RDaGlsZClhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5vcHRpb25zJiZtLm5vZGVOYW1lKGEsInNlbGVjdCIpJiYoYS5vcHRpb25zLmxlbmd0aD0wKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1udWxsPT1hPyExOmEsYj1udWxsPT1iP2E6Yix0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBtLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBWKHRoaXMsZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXXx8e30sYz0wLGQ9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09YSlyZXR1cm4gMT09PWIubm9kZVR5cGU/Yi5pbm5lckhUTUwucmVwbGFjZShmYiwiIik6dm9pZCAwO2lmKCEoInN0cmluZyIhPXR5cGVvZiBhfHxtYi50ZXN0KGEpfHwhay5odG1sU2VyaWFsaXplJiZnYi50ZXN0KGEpfHwhay5sZWFkaW5nV2hpdGVzcGFjZSYmaGIudGVzdChhKXx8cmJbKGpiLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKSl7YT1hLnJlcGxhY2UoaWIsIjwkMT48LyQyPiIpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7fSwxPT09Yi5ub2RlVHlwZSYmKG0uY2xlYW5EYXRhKHViKGIsITEpKSxiLmlubmVySFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxtLmNsZWFuRGF0YSh1Yih0aGlzKSksYSYmYS5yZXBsYWNlQ2hpbGQoYix0aGlzKX0pLGEmJihhLmxlbmd0aHx8YS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGIpe2E9ZS5hcHBseShbXSxhKTt2YXIgYyxkLGYsZyxoLGksaj0wLGw9dGhpcy5sZW5ndGgsbj10aGlzLG89bC0xLHA9YVswXSxxPW0uaXNGdW5jdGlvbihwKTtpZihxfHxsPjEmJiJzdHJpbmciPT10eXBlb2YgcCYmIWsuY2hlY2tDbG9uZSYmbmIudGVzdChwKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPW4uZXEoYyk7cSYmKGFbMF09cC5jYWxsKHRoaXMsYyxkLmh0bWwoKSkpLGQuZG9tTWFuaXAoYSxiKX0pO2lmKGwmJihpPW0uYnVpbGRGcmFnbWVudChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSx0aGlzKSxjPWkuZmlyc3RDaGlsZCwxPT09aS5jaGlsZE5vZGVzLmxlbmd0aCYmKGk9YyksYykpe2ZvcihnPW0ubWFwKHViKGksInNjcmlwdCIpLHhiKSxmPWcubGVuZ3RoO2w+ajtqKyspZD1pLGohPT1vJiYoZD1tLmNsb25lKGQsITAsITApLGYmJm0ubWVyZ2UoZyx1YihkLCJzY3JpcHQiKSkpLGIuY2FsbCh0aGlzW2pdLGQsaik7aWYoZilmb3IoaD1nW2cubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsbS5tYXAoZyx5Yiksaj0wO2Y+ajtqKyspZD1nW2pdLG9iLnRlc3QoZC50eXBlfHwiIikmJiFtLl9kYXRhKGQsImdsb2JhbEV2YWwiKSYmbS5jb250YWlucyhoLGQpJiYoZC5zcmM/bS5fZXZhbFVybCYmbS5fZXZhbFVybChkLnNyYyk6bS5nbG9iYWxFdmFsKChkLnRleHR8fGQudGV4dENvbnRlbnR8fGQuaW5uZXJIVE1MfHwiIikucmVwbGFjZShxYiwiIikpKTtpPWM9bnVsbH1yZXR1cm4gdGhpc319KSxtLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe20uZm5bYV09ZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9MCxlPVtdLGc9bShhKSxoPWcubGVuZ3RoLTE7aD49ZDtkKyspYz1kPT09aD90aGlzOnRoaXMuY2xvbmUoITApLG0oZ1tkXSlbYl0oYyksZi5hcHBseShlLGMuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgQ2IsRGI9e307ZnVuY3Rpb24gRWIoYixjKXt2YXIgZCxlPW0oYy5jcmVhdGVFbGVtZW50KGIpKS5hcHBlbmRUbyhjLmJvZHkpLGY9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSYmKGQ9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZShlWzBdKSk/ZC5kaXNwbGF5Om0uY3NzKGVbMF0sImRpc3BsYXkiKTtyZXR1cm4gZS5kZXRhY2goKSxmfWZ1bmN0aW9uIEZiKGEpe3ZhciBiPXksYz1EYlthXTtyZXR1cm4gY3x8KGM9RWIoYSxiKSwibm9uZSIhPT1jJiZjfHwoQ2I9KENifHxtKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikpLmFwcGVuZFRvKGIuZG9jdW1lbnRFbGVtZW50KSxiPShDYlswXS5jb250ZW50V2luZG93fHxDYlswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGIud3JpdGUoKSxiLmNsb3NlKCksYz1FYihhLGIpLENiLmRldGFjaCgpKSxEYlthXT1jKSxjfSFmdW5jdGlvbigpe3ZhciBhO2suc2hyaW5rV3JhcEJsb2Nrcz1mdW5jdGlvbigpe2lmKG51bGwhPWEpcmV0dXJuIGE7YT0hMTt2YXIgYixjLGQ7cmV0dXJuIGM9eS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGMmJmMuc3R5bGU/KGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSx0eXBlb2YgYi5zdHlsZS56b29tIT09SyYmKGIuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsYi5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zdHlsZS53aWR0aD0iNXB4IixhPTMhPT1iLm9mZnNldFdpZHRoKSxjLnJlbW92ZUNoaWxkKGQpLGEpOnZvaWQgMH19KCk7dmFyIEdiPS9ebWFyZ2luLyxIYj1uZXcgUmVnRXhwKCJeKCIrUysiKSg/IXB4KVthLXolXSskIiwiaSIpLEliLEpiLEtiPS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLzthLmdldENvbXB1dGVkU3R5bGU/KEliPWZ1bmN0aW9uKGIpe3JldHVybiBiLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcub3BlbmVyP2Iub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6YS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCl9LEpiPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8SWIoYSksZz1jP2MuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXTp2b2lkIDAsYyYmKCIiIT09Z3x8bS5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSl8fChnPW0uc3R5bGUoYSxiKSksSGIudGVzdChnKSYmR2IudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1heFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRoLGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSksdm9pZCAwPT09Zz9nOmcrIiJ9KTp5LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihJYj1mdW5jdGlvbihhKXtyZXR1cm4gYS5jdXJyZW50U3R5bGV9LEpiPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8SWIoYSksZz1jP2NbYl06dm9pZCAwLG51bGw9PWcmJmgmJmhbYl0mJihnPWhbYl0pLEhiLnRlc3QoZykmJiFLYi50ZXN0KGIpJiYoZD1oLmxlZnQsZT1hLnJ1bnRpbWVTdHlsZSxmPWUmJmUubGVmdCxmJiYoZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGgubGVmdD0iZm9udFNpemUiPT09Yj8iMWVtIjpnLGc9aC5waXhlbExlZnQrInB4IixoLmxlZnQ9ZCxmJiYoZS5sZWZ0PWYpKSx2b2lkIDA9PT1nP2c6ZysiInx8ImF1dG8ifSk7ZnVuY3Rpb24gTGIoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7dmFyIGM9YSgpO2lmKG51bGwhPWMpcmV0dXJuIGM/dm9pZCBkZWxldGUgdGhpcy5nZXQ6KHRoaXMuZ2V0PWIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSFmdW5jdGlvbigpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxjPWQmJmQuc3R5bGUpe2MuY3NzVGV4dD0iZmxvYXQ6bGVmdDtvcGFjaXR5Oi41IixrLm9wYWNpdHk9IjAuNSI9PT1jLm9wYWNpdHksay5jc3NGbG9hdD0hIWMuY3NzRmxvYXQsYi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGIuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixrLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09Yi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxrLmJveFNpemluZz0iIj09PWMuYm94U2l6aW5nfHwiIj09PWMuTW96Qm94U2l6aW5nfHwiIj09PWMuV2Via2l0Qm94U2l6aW5nLG0uZXh0ZW5kKGsse3JlbGlhYmxlSGlkZGVuT2Zmc2V0czpmdW5jdGlvbigpe3JldHVybiBudWxsPT1nJiZpKCksZ30sYm94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09ZiYmaSgpLGZ9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09ZSYmaSgpLGV9LHJlbGlhYmxlTWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09aCYmaSgpLGh9fSk7ZnVuY3Rpb24gaSgpe3ZhciBiLGMsZCxpO2M9eS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGMmJmMuc3R5bGUmJihiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksYi5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjElO3RvcDoxJTtib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjRweDtwb3NpdGlvbjphYnNvbHV0ZSIsZT1mPSExLGg9ITAsYS5nZXRDb21wdXRlZFN0eWxlJiYoZT0iMSUiIT09KGEuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpfHx7fSkudG9wLGY9IjRweCI9PT0oYS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCl8fHt3aWR0aDoiNHB4In0pLndpZHRoLGk9Yi5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxpLnN0eWxlLmNzc1RleHQ9Yi5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjAiLGkuc3R5bGUubWFyZ2luUmlnaHQ9aS5zdHlsZS53aWR0aD0iMCIsYi5zdHlsZS53aWR0aD0iMXB4IixoPSFwYXJzZUZsb2F0KChhLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKXx8e30pLm1hcmdpblJpZ2h0KSxiLnJlbW92ZUNoaWxkKGkpKSxiLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsaT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLGlbMF0uc3R5bGUuY3NzVGV4dD0ibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSIsZz0wPT09aVswXS5vZmZzZXRIZWlnaHQsZyYmKGlbMF0uc3R5bGUuZGlzcGxheT0iIixpWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGc9MD09PWlbMF0ub2Zmc2V0SGVpZ2h0KSxjLnJlbW92ZUNoaWxkKGQpKX19fSgpLG0uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIE1iPS9hbHBoYVwoW14pXSpcKS9pLE5iPS9vcGFjaXR5XHMqPVxzKihbXildKikvLE9iPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxQYj1uZXcgUmVnRXhwKCJeKCIrUysiKSguKikkIiwiaSIpLFFiPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUysiKSIsImkiKSxSYj17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU2I9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LFRiPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24gVWIoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9Yi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStiLnNsaWNlKDEpLGQ9YixlPVRiLmxlbmd0aDt3aGlsZShlLS0paWYoYj1UYltlXStjLGIgaW4gYSlyZXR1cm4gYjtyZXR1cm4gZH1mdW5jdGlvbiBWYihhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1tLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIhPT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYmVShkKSYmKGZbZ109bS5fZGF0YShkLCJvbGRkaXNwbGF5IixGYihkLm5vZGVOYW1lKSkpKTooZT1VKGQpLChjJiYibm9uZSIhPT1jfHwhZSkmJm0uX2RhdGEoZCwib2xkZGlzcGxheSIsZT9jOm0uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkmJiIiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkPVBiLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzFdLShjfHwwKSkrKGRbMl18fCJweCIpOmJ9ZnVuY3Rpb24gWGIoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yz09PShkPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09Yj8xOjAsZz0wOzQ+ZjtmKz0yKSJtYXJnaW4iPT09YyYmKGcrPW0uY3NzKGEsYytUW2ZdLCEwLGUpKSxkPygiY29udGVudCI9PT1jJiYoZy09bS5jc3MoYSwicGFkZGluZyIrVFtmXSwhMCxlKSksIm1hcmdpbiIhPT1jJiYoZy09bS5jc3MoYSwiYm9yZGVyIitUW2ZdKyJXaWR0aCIsITAsZSkpKTooZys9bS5jc3MoYSwicGFkZGluZyIrVFtmXSwhMCxlKSwicGFkZGluZyIhPT1jJiYoZys9bS5jc3MoYSwiYm9yZGVyIitUW2ZdKyJXaWR0aCIsITAsZSkpKTtyZXR1cm4gZ31mdW5jdGlvbiBZYihhLGIsYyl7dmFyIGQ9ITAsZT0id2lkdGgiPT09Yj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGY9SWIoYSksZz1rLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bS5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPUpiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksSGIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNpemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJuIGUrWGIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxmKSsicHgifW0uZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9SmIoYSwib3BhY2l0eSIpO3JldHVybiIiPT09Yz8iMSI6Y319fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjprLmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPW0uY2FtZWxDYXNlKGIpLGk9YS5zdHlsZTtpZihiPW0uY3NzUHJvcHNbaF18fChtLmNzc1Byb3BzW2hdPVViKGksaCkpLGc9bS5jc3NIb29rc1tiXXx8bS5jc3NIb29rc1toXSx2b2lkIDA9PT1jKXJldHVybiBnJiYiZ2V0ImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXTtpZihmPXR5cGVvZiBjLCJzdHJpbmciPT09ZiYmKGU9UWIuZXhlYyhjKSkmJihjPShlWzFdKzEpKmVbMl0rcGFyc2VGbG9hdChtLmNzcyhhLGIpKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiIT09Znx8bS5jc3NOdW1iZXJbaF18fChjKz0icHgiKSxrLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09Yi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChpW2JdPSJpbmhlcml0IiksIShnJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSkpKSl0cnl7aVtiXT1jfWNhdGNoKGope319fSxjc3M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGg9bS5jYW1lbENhc2UoYik7cmV0dXJuIGI9bS5jc3NQcm9wc1toXXx8KG0uY3NzUHJvcHNbaF09VWIoYS5zdHlsZSxoKSksZz1tLmNzc0hvb2tzW2JdfHxtLmNzc0hvb2tzW2hdLGcmJiJnZXQiaW4gZyYmKGY9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZiYmKGY9SmIoYSxiLGQpKSwibm9ybWFsIj09PWYmJmIgaW4gU2ImJihmPVNiW2JdKSwiIj09PWN8fGM/KGU9cGFyc2VGbG9hdChmKSxjPT09ITB8fG0uaXNOdW1lcmljKGUpP2V8fDA6Zik6Zn19KSxtLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYz9PYi50ZXN0KG0uY3NzKGEsImRpc3BsYXkiKSkmJjA9PT1hLm9mZnNldFdpZHRoP20uc3dhcChhLFJiLGZ1bmN0aW9uKCl7cmV0dXJuIFliKGEsYixkKX0pOlliKGEsYixkKTp2b2lkIDB9LHNldDpmdW5jdGlvbihhLGMsZCl7dmFyIGU9ZCYmSWIoYSk7cmV0dXJuIFdiKGEsYyxkP1hiKGEsYixkLGsuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT1tLmNzcyhhLCJib3hTaXppbmciLCExLGUpLGUpOjApfX19KSxrLm9wYWNpdHl8fChtLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBOYi50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9bS5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IisxMDAqYisiKSI6IiIsZj1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xLChiPj0xfHwiIj09PWIpJiYiIj09PW0udHJpbShmLnJlcGxhY2UoTWIsIiIpKSYmYy5yZW1vdmVBdHRyaWJ1dGUmJihjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIiksIiI9PT1ifHxkJiYhZC5maWx0ZXIpfHwoYy5maWx0ZXI9TWIudGVzdChmKT9mLnJlcGxhY2UoTWIsZSk6ZisiICIrZSl9fSksbS5jc3NIb29rcy5tYXJnaW5SaWdodD1MYihrLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9tLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sSmIsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG0uZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPSJzdHJpbmciPT10eXBlb2YgYz9jLnNwbGl0KCIgIik6W2NdOzQ+ZDtkKyspZVthK1RbZF0rYl09ZltkXXx8ZltkLTJdfHxmWzBdO3JldHVybiBlfX0sR2IudGVzdChhKXx8KG0uY3NzSG9va3NbYStiXS5zZXQ9V2IpfSksbS5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihhLGIpe3JldHVybiBWKHRoaXMsZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fSxnPTA7aWYobS5pc0FycmF5KGIpKXtmb3IoZD1JYihhKSxlPWIubGVuZ3RoO2U+ZztnKyspZltiW2ddXT1tLmNzcyhhLGJbZ10sITEsZCk7cmV0dXJuIGZ9cmV0dXJuIHZvaWQgMCE9PWM/bS5zdHlsZShhLGIsYyk6bS5jc3MoYSxiKX0sYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7VSh0aGlzKT9tKHRoaXMpLnNob3coKTptKHRoaXMpLmhpZGUoKX0pfX0pO2Z1bmN0aW9uIFpiKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBaYi5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpDQp9bS5Ud2Vlbj1aYixaYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlpiLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJzd2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChtLmNzc051bWJlcltjXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9WmIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOlpiLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPVpiLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLnBvcz1iPXRoaXMub3B0aW9ucy5kdXJhdGlvbj9tLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTphLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOlpiLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LFpiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1aYi5wcm90b3R5cGUsWmIucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxlJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1tLmNzcyhhLmVsZW0sYS5wcm9wLCIiKSxiJiYiYXV0byIhPT1iP2I6MCk6YS5lbGVtW2EucHJvcF19LHNldDpmdW5jdGlvbihhKXttLmZ4LnN0ZXBbYS5wcm9wXT9tLmZ4LnN0ZXBbYS5wcm9wXShhKTphLmVsZW0uc3R5bGUmJihudWxsIT1hLmVsZW0uc3R5bGVbbS5jc3NQcm9wc1thLnByb3BdXXx8bS5jc3NIb29rc1thLnByb3BdKT9tLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxaYi5wcm9wSG9va3Muc2Nyb2xsVG9wPVpiLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19LG0uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29zKGEqTWF0aC5QSSkvMn19LG0uZng9WmIucHJvdG90eXBlLmluaXQsbS5meC5zdGVwPXt9O3ZhciAkYixfYixhYz0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sYmM9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1MrIikoW2EteiVdKikkIiwiaSIpLGNjPS9xdWV1ZUhvb2tzJC8sZGM9W2ljXSxlYz17IioiOltmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1iYy5leGVjKGIpLGY9ZSYmZVszXXx8KG0uY3NzTnVtYmVyW2FdPyIiOiJweCIpLGc9KG0uY3NzTnVtYmVyW2FdfHwicHgiIT09ZiYmK2QpJiZiYy5leGVjKG0uY3NzKGMuZWxlbSxhKSksaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8fDE7ZG8gaD1ofHwiLjUiLGcvPWgsbS5zdHlsZShjLmVsZW0sYSxnK2YpO3doaWxlKGghPT0oaD1jLmN1cigpL2QpJiYxIT09aCYmLS1pKX1yZXR1cm4gZSYmKGc9Yy5zdGFydD0rZ3x8K2R8fDAsYy51bml0PWYsYy5lbmQ9ZVsxXT9nKyhlWzFdKzEpKmVbMl06K2VbMl0pLGN9XX07ZnVuY3Rpb24gZmMoKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpeyRiPXZvaWQgMH0pLCRiPW0ubm93KCl9ZnVuY3Rpb24gZ2MoYSxiKXt2YXIgYyxkPXtoZWlnaHQ6YX0sZT0wO2ZvcihiPWI/MTowOzQ+ZTtlKz0yLWIpYz1UW2VdLGRbIm1hcmdpbiIrY109ZFsicGFkZGluZyIrY109YTtyZXR1cm4gYiYmKGQub3BhY2l0eT1kLndpZHRoPWEpLGR9ZnVuY3Rpb24gaGMoYSxiLGMpe2Zvcih2YXIgZCxlPShlY1tiXXx8W10pLmNvbmNhdChlY1siKiJdKSxmPTAsZz1lLmxlbmd0aDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlvbiBpYyhhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosbCxuPXRoaXMsbz17fSxwPWEuc3R5bGUscT1hLm5vZGVUeXBlJiZVKGEpLHI9bS5fZGF0YShhLCJmeHNob3ciKTtjLnF1ZXVlfHwoaD1tLl9xdWV1ZUhvb2tzKGEsImZ4IiksbnVsbD09aC51bnF1ZXVlZCYmKGgudW5xdWV1ZWQ9MCxpPWguZW1wdHkuZmlyZSxoLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtoLnVucXVldWVkfHxpKCl9KSxoLnVucXVldWVkKyssbi5hbHdheXMoZnVuY3Rpb24oKXtuLmFsd2F5cyhmdW5jdGlvbigpe2gudW5xdWV1ZWQtLSxtLnF1ZXVlKGEsImZ4IikubGVuZ3RofHxoLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1hLm5vZGVUeXBlJiYoImhlaWdodCJpbiBifHwid2lkdGgiaW4gYikmJihjLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dYLHAub3ZlcmZsb3dZXSxqPW0uY3NzKGEsImRpc3BsYXkiKSxsPSJub25lIj09PWo/bS5fZGF0YShhLCJvbGRkaXNwbGF5Iil8fEZiKGEubm9kZU5hbWUpOmosImlubGluZSI9PT1sJiYibm9uZSI9PT1tLmNzcyhhLCJmbG9hdCIpJiYoay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0JiYiaW5saW5lIiE9PUZiKGEubm9kZU5hbWUpP3Auem9vbT0xOnAuZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLGMub3ZlcmZsb3cmJihwLm92ZXJmbG93PSJoaWRkZW4iLGsuc2hyaW5rV3JhcEJsb2NrcygpfHxuLmFsd2F5cyhmdW5jdGlvbigpe3Aub3ZlcmZsb3c9Yy5vdmVyZmxvd1swXSxwLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLHAub3ZlcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0sYWMuZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShxPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcnx8dm9pZCAwPT09cltkXSljb250aW51ZTtxPSEwfW9bZF09ciYmcltkXXx8bS5zdHlsZShhLGQpfWVsc2Ugaj12b2lkIDA7aWYobS5pc0VtcHR5T2JqZWN0KG8pKSJpbmxpbmUiPT09KCJub25lIj09PWo/RmIoYS5ub2RlTmFtZSk6aikmJihwLmRpc3BsYXk9aik7ZWxzZXtyPyJoaWRkZW4iaW4gciYmKHE9ci5oaWRkZW4pOnI9bS5fZGF0YShhLCJmeHNob3ciLHt9KSxmJiYoci5oaWRkZW49IXEpLHE/bShhKS5zaG93KCk6bi5kb25lKGZ1bmN0aW9uKCl7bShhKS5oaWRlKCl9KSxuLmRvbmUoZnVuY3Rpb24oKXt2YXIgYjttLl9yZW1vdmVEYXRhKGEsImZ4c2hvdyIpO2ZvcihiIGluIG8pbS5zdHlsZShhLGIsb1tiXSl9KTtmb3IoZCBpbiBvKWc9aGMocT9yW2RdOjAsZCxuKSxkIGluIHJ8fChyW2RdPWcuc3RhcnQscSYmKGcuZW5kPWcuc3RhcnQsZy5zdGFydD0id2lkdGgiPT09ZHx8ImhlaWdodCI9PT1kPzE6MCkpfX1mdW5jdGlvbiBqYyhhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4gYSlpZihkPW0uY2FtZWxDYXNlKGMpLGU9YltkXSxmPWFbY10sbS5pc0FycmF5KGYpJiYoZT1mWzFdLGY9YVtjXT1mWzBdKSxjIT09ZCYmKGFbZF09ZixkZWxldGUgYVtjXSksZz1tLmNzc0hvb2tzW2RdLGcmJiJleHBhbmQiaW4gZyl7Zj1nLmV4cGFuZChmKSxkZWxldGUgYVtkXTtmb3IoYyBpbiBmKWMgaW4gYXx8KGFbY109ZltjXSxiW2NdPWUpfWVsc2UgYltkXT1lfWZ1bmN0aW9uIGtjKGEsYixjKXt2YXIgZCxlLGY9MCxnPWRjLmxlbmd0aCxoPW0uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgaS5lbGVtfSksaT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuITE7Zm9yKHZhciBiPSRifHxmYygpLGM9TWF0aC5tYXgoMCxqLnN0YXJ0VGltZStqLmR1cmF0aW9uLWIpLGQ9Yy9qLmR1cmF0aW9ufHwwLGY9MS1kLGc9MCxpPWoudHdlZW5zLmxlbmd0aDtpPmc7ZysrKWoudHdlZW5zW2ddLnJ1bihmKTtyZXR1cm4gaC5ub3RpZnlXaXRoKGEsW2osZixjXSksMT5mJiZpP2M6KGgucmVzb2x2ZVdpdGgoYSxbal0pLCExKX0saj1oLnByb21pc2Uoe2VsZW06YSxwcm9wczptLmV4dGVuZCh7fSxiKSxvcHRzOm0uZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxjKSxvcmlnaW5hbFByb3BlcnRpZXM6YixvcmlnaW5hbE9wdGlvbnM6YyxzdGFydFRpbWU6JGJ8fGZjKCksZHVyYXRpb246Yy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oYixjKXt2YXIgZD1tLlR3ZWVuKGEsai5vcHRzLGIsYyxqLm9wdHMuc3BlY2lhbEVhc2luZ1tiXXx8ai5vcHRzLmVhc2luZyk7cmV0dXJuIGoudHdlZW5zLnB1c2goZCksZH0sc3RvcDpmdW5jdGlvbihiKXt2YXIgYz0wLGQ9Yj9qLnR3ZWVucy5sZW5ndGg6MDtpZihlKXJldHVybiB0aGlzO2ZvcihlPSEwO2Q+YztjKyspai50d2VlbnNbY10ucnVuKDEpO3JldHVybiBiP2gucmVzb2x2ZVdpdGgoYSxbaixiXSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcihqYyhrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtnPmY7ZisrKWlmKGQ9ZGNbZl0uY2FsbChqLGEsayxqLm9wdHMpKXJldHVybiBkO3JldHVybiBtLm1hcChrLGhjLGopLG0uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpJiZqLm9wdHMuc3RhcnQuY2FsbChhLGopLG0uZngudGltZXIobS5leHRlbmQoaSx7ZWxlbTphLGFuaW06aixxdWV1ZTpqLm9wdHMucXVldWV9KSksai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsai5vcHRzLmNvbXBsZXRlKS5mYWlsKGoub3B0cy5mYWlsKS5hbHdheXMoai5vcHRzLmFsd2F5cyl9bS5BbmltYXRpb249bS5leHRlbmQoa2Mse3R3ZWVuZXI6ZnVuY3Rpb24oYSxiKXttLmlzRnVuY3Rpb24oYSk/KGI9YSxhPVsiKiJdKTphPWEuc3BsaXQoIiAiKTtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyljPWFbZF0sZWNbY109ZWNbY118fFtdLGVjW2NdLnVuc2hpZnQoYil9LHByZWZpbHRlcjpmdW5jdGlvbihhLGIpe2I/ZGMudW5zaGlmdChhKTpkYy5wdXNoKGEpfX0pLG0uc3BlZWQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJiJvYmplY3QiPT10eXBlb2YgYT9tLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fG0uaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhbS5pc0Z1bmN0aW9uKGIpJiZifTtyZXR1cm4gZC5kdXJhdGlvbj1tLmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2YgZC5kdXJhdGlvbj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gbS5meC5zcGVlZHM/bS5meC5zcGVlZHNbZC5kdXJhdGlvbl06bS5meC5zcGVlZHMuX2RlZmF1bHQsKG51bGw9PWQucXVldWV8fGQucXVldWU9PT0hMCkmJihkLnF1ZXVlPSJmeCIpLGQub2xkPWQuY29tcGxldGUsZC5jb21wbGV0ZT1mdW5jdGlvbigpe20uaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZSYmbS5kZXF1ZXVlKHRoaXMsZC5xdWV1ZSl9LGR9LG0uZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKFUpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW0uaXNFbXB0eU9iamVjdChhKSxmPW0uc3BlZWQoYixjLGQpLGc9ZnVuY3Rpb24oKXt2YXIgYj1rYyh0aGlzLG0uZXh0ZW5kKHt9LGEpLGYpOyhlfHxtLl9kYXRhKHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmluaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYucXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxlPW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bS50aW1lcnMsZz1tLl9kYXRhKHRoaXMpO2lmKGUpZ1tlXSYmZ1tlXS5zdG9wJiZkKGdbZV0pO2Vsc2UgZm9yKGUgaW4gZylnW2VdJiZnW2VdLnN0b3AmJmNjLnRlc3QoZSkmJmQoZ1tlXSk7Zm9yKGU9Zi5sZW5ndGg7ZS0tOylmW2VdLmVsZW0hPT10aGlzfHxudWxsIT1hJiZmW2VdLnF1ZXVlIT09YXx8KGZbZV0uYW5pbS5zdG9wKGMpLGI9ITEsZi5zcGxpY2UoZSwxKSk7KGJ8fCFjKSYmbS5kZXF1ZXVlKHRoaXMsYSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiBhIT09ITEmJihhPWF8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiLGM9bS5fZGF0YSh0aGlzKSxkPWNbYSsicXVldWUiXSxlPWNbYSsicXVldWVIb29rcyJdLGY9bS50aW1lcnMsZz1kP2QubGVuZ3RoOjA7Zm9yKGMuZmluaXNoPSEwLG0ucXVldWUodGhpcyxhLFtdKSxlJiZlLnN0b3AmJmUuc3RvcC5jYWxsKHRoaXMsITApLGI9Zi5sZW5ndGg7Yi0tOylmW2JdLmVsZW09PT10aGlzJiZmW2JdLnF1ZXVlPT09YSYmKGZbYl0uYW5pbS5zdG9wKCEwKSxmLnNwbGljZShiLDEpKTtmb3IoYj0wO2c+YjtiKyspZFtiXSYmZFtiXS5maW5pc2gmJmRbYl0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIGMuZmluaXNofSl9fSksbS5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihhLGIpe3ZhciBjPW0uZm5bYl07bS5mbltiXT1mdW5jdGlvbihhLGQsZSl7cmV0dXJuIG51bGw9PWF8fCJib29sZWFuIj09dHlwZW9mIGE/Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGdjKGIsITApLGEsZCxlKX19KSxtLmVhY2goe3NsaWRlRG93bjpnYygic2hvdyIpLHNsaWRlVXA6Z2MoImhpZGUiKSxzbGlkZVRvZ2dsZTpnYygidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe20uZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksbS50aW1lcnM9W10sbS5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGEsYj1tLnRpbWVycyxjPTA7Zm9yKCRiPW0ubm93KCk7YzxiLmxlbmd0aDtjKyspYT1iW2NdLGEoKXx8YltjXSE9PWF8fGIuc3BsaWNlKGMtLSwxKTtiLmxlbmd0aHx8bS5meC5zdG9wKCksJGI9dm9pZCAwfSxtLmZ4LnRpbWVyPWZ1bmN0aW9uKGEpe20udGltZXJzLnB1c2goYSksYSgpP20uZnguc3RhcnQoKTptLnRpbWVycy5wb3AoKX0sbS5meC5pbnRlcnZhbD0xMyxtLmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7X2J8fChfYj1zZXRJbnRlcnZhbChtLmZ4LnRpY2ssbS5meC5pbnRlcnZhbCkpfSxtLmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKF9iKSxfYj1udWxsfSxtLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxtLmZuLmRlbGF5PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bS5meD9tLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4Iix0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxmdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU7Yj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGIuc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IiksYi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsZD1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sYz15LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGU9Yy5hcHBlbmRDaGlsZCh5LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxhPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sZC5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4IixrLmdldFNldEF0dHJpYnV0ZT0idCIhPT1iLmNsYXNzTmFtZSxrLnN0eWxlPS90b3AvLnRlc3QoZC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLGsuaHJlZk5vcm1hbGl6ZWQ9Ii9hIj09PWQuZ2V0QXR0cmlidXRlKCJocmVmIiksay5jaGVja09uPSEhYS52YWx1ZSxrLm9wdFNlbGVjdGVkPWUuc2VsZWN0ZWQsay5lbmN0eXBlPSEheS5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSxjLmRpc2FibGVkPSEwLGsub3B0RGlzYWJsZWQ9IWUuZGlzYWJsZWQsYT15LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYS5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksay5pbnB1dD0iIj09PWEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLGEudmFsdWU9InQiLGEuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxrLnJhZGlvVmFsdWU9InQiPT09YS52YWx1ZX0oKTt2YXIgbGM9L1xyL2c7bS5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkPW0uaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU7MT09PXRoaXMubm9kZVR5cGUmJihlPWQ/YS5jYWxsKHRoaXMsYyxtKHRoaXMpLnZhbCgpKTphLG51bGw9PWU/ZT0iIjoibnVtYmVyIj09dHlwZW9mIGU/ZSs9IiI6bS5pc0FycmF5KGUpJiYoZT1tLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOmErIiJ9KSksYj1tLnZhbEhvb2tzW3RoaXMudHlwZV18fG0udmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYic2V0ImluIGImJnZvaWQgMCE9PWIuc2V0KHRoaXMsZSwidmFsdWUiKXx8KHRoaXMudmFsdWU9ZSkpfSk7aWYoZSlyZXR1cm4gYj1tLnZhbEhvb2tzW2UudHlwZV18fG0udmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYiZ2V0ImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsInZhbHVlIikpP2M6KGM9ZS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIGM/Yy5yZXBsYWNlKGxjLCIiKTpudWxsPT1jPyIiOmMpfX19KSxtLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW0uZmluZC5hdHRyKGEsInZhbHVlIik7cmV0dXJuIG51bGwhPWI/YjptLnRyaW0obS50ZXh0KGEpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQ9YS5vcHRpb25zLGU9YS5zZWxlY3RlZEluZGV4LGY9InNlbGVjdC1vbmUiPT09YS50eXBlfHwwPmUsZz1mP251bGw6W10saD1mP2UrMTpkLmxlbmd0aCxpPTA+ZT9oOmY/ZTowO2g+aTtpKyspaWYoYz1kW2ldLCEoIWMuc2VsZWN0ZWQmJmkhPT1lfHwoay5vcHREaXNhYmxlZD9jLmRpc2FibGVkOm51bGwhPT1jLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSl8fGMucGFyZW50Tm9kZS5kaXNhYmxlZCYmbS5ub2RlTmFtZShjLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZihiPW0oYykudmFsKCksZilyZXR1cm4gYjtnLnB1c2goYil9cmV0dXJuIGd9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT1hLm9wdGlvbnMsZj1tLm1ha2VBcnJheShiKSxnPWUubGVuZ3RoO3doaWxlKGctLSlpZihkPWVbZ10sbS5pbkFycmF5KG0udmFsSG9va3Mub3B0aW9uLmdldChkKSxmKT49MCl0cnl7ZC5zZWxlY3RlZD1jPSEwfWNhdGNoKGgpe2Quc2Nyb2xsSGVpZ2h0fWVsc2UgZC5zZWxlY3RlZD0hMTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZX19fX0pLG0uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe20udmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBtLmlzQXJyYXkoYik/YS5jaGVja2VkPW0uaW5BcnJheShtKGEpLnZhbCgpLGIpPj0wOnZvaWQgMH19LGsuY2hlY2tPbnx8KG0udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVlfSl9KTt2YXIgbWMsbmMsb2M9bS5leHByLmF0dHJIYW5kbGUscGM9L14oPzpjaGVja2VkfHNlbGVjdGVkKSQvaSxxYz1rLmdldFNldEF0dHJpYnV0ZSxyYz1rLmlucHV0O20uZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFYodGhpcyxtLmF0dHIsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20ucmVtb3ZlQXR0cih0aGlzLGEpfSl9fSksbS5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKGEmJjMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIHR5cGVvZiBhLmdldEF0dHJpYnV0ZT09PUs/bS5wcm9wKGEsYixjKTooMT09PWYmJm0uaXNYTUxEb2MoYSl8fChiPWIudG9Mb3dlckNhc2UoKSxkPW0uYXR0ckhvb2tzW2JdfHwobS5leHByLm1hdGNoLmJvb2wudGVzdChiKT9uYzptYykpLHZvaWQgMD09PWM/ZCYmImdldCJpbiBkJiZudWxsIT09KGU9ZC5nZXQoYSxiKSk/ZTooZT1tLmZpbmQuYXR0cihhLGIpLG51bGw9PWU/dm9pZCAwOmUpOm51bGwhPT1jP2QmJiJzZXQiaW4gZCYmdm9pZCAwIT09KGU9ZC5zZXQoYSxjLGIpKT9lOihhLnNldEF0dHJpYnV0ZShiLGMrIiIpLGMpOnZvaWQgbS5yZW1vdmVBdHRyKGEsYikpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPTAsZj1iJiZiLm1hdGNoKEUpO2lmKGYmJjE9PT1hLm5vZGVUeXBlKXdoaWxlKGM9ZltlKytdKWQ9bS5wcm9wRml4W2NdfHxjLG0uZXhwci5tYXRjaC5ib29sLnRlc3QoYyk/cmMmJnFjfHwhcGMudGVzdChjKT9hW2RdPSExOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtkXT0hMTptLmF0dHIoYSxjLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZShxYz9jOmQpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFrLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1iJiZtLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLG5jPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bS5yZW1vdmVBdHRyKGEsYyk6cmMmJnFjfHwhcGMudGVzdChjKT9hLnNldEF0dHJpYnV0ZSghcWMmJm0ucHJvcEZpeFtjXXx8YyxjKTphW20uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYyldPWFbY109ITAsY319LG0uZWFjaChtLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihhLGIpe3ZhciBjPW9jW2JdfHxtLmZpbmQuYXR0cjtvY1tiXT1yYyYmcWN8fCFwYy50ZXN0KGIpP2Z1bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj1vY1tiXSxvY1tiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsb2NbYl09ZiksZX06ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP3ZvaWQgMDphW20uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYildP2IudG9Mb3dlckNhc2UoKTpudWxsfX0pLHJjJiZxY3x8KG0uYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBtLm5vZGVOYW1lKGEsImlucHV0Iik/dm9pZChhLmRlZmF1bHRWYWx1ZT1iKTptYyYmbWMuc2V0KGEsYixjKX19KSxxY3x8KG1jPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZHx8YS5zZXRBdHRyaWJ1dGVOb2RlKGQ9YS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShjKSksZC52YWx1ZT1iKz0iIiwidmFsdWUiPT09Y3x8Yj09PWEuZ2V0QXR0cmlidXRlKGMpP2I6dm9pZCAwfX0sb2MuaWQ9b2MubmFtZT1vYy5jb29yZHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiYiIiE9PWQudmFsdWU/ZC52YWx1ZTpudWxsfSxtLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9jLnZhbHVlOnZvaWQgMH0sc2V0Om1jLnNldH0sbS5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe21jLnNldChhLCIiPT09Yj8hMTpiLGMpfX0sbS5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe20uYXR0ckhvb2tzW2JdPXtzZXQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4iIj09PWM/KGEuc2V0QXR0cmlidXRlKGIsImF1dG8iKSxjKTp2b2lkIDB9fX0pKSxrLnN0eWxlfHwobS5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fHx2b2lkIDB9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9YisiIn19KTt2YXIgc2M9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksdGM9L14oPzphfGFyZWEpJC9pO20uZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFYodGhpcyxtLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9bS5wcm9wRml4W2FdfHxhLHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPXZvaWQgMCxkZWxldGUgdGhpc1thXX1jYXRjaChiKXt9fSl9fSksbS5leHRlbmQoe3Byb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1hLm5vZGVUeXBlO2lmKGEmJjMhPT1nJiY4IT09ZyYmMiE9PWcpcmV0dXJuIGY9MSE9PWd8fCFtLmlzWE1MRG9jKGEpLGYmJihiPW0ucHJvcEZpeFtiXXx8YixlPW0ucHJvcEhvb2tzW2JdKSx2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXt2YXIgYj1tLmZpbmQuYXR0cihhLCJ0YWJpbmRleCIpO3JldHVybiBiP3BhcnNlSW50KGIsMTApOnNjLnRlc3QoYS5ub2RlTmFtZSl8fHRjLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOi0xfX19fSksay5ocmVmTm9ybWFsaXplZHx8bS5lYWNoKFsiaHJlZiIsInNyYyJdLGZ1bmN0aW9uKGEsYil7bS5wcm9wSG9va3NbYl09e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoYiw0KX19fSksay5vcHRTZWxlY3RlZHx8KG0ucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpLG51bGx9fSksbS5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXttLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksay5lbmN0eXBlfHwobS5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIik7dmFyIHVjPS9bXHRcclxuXGZdL2c7bS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTAsaT10aGlzLmxlbmd0aCxqPSJzdHJpbmciPT10eXBlb2YgYSYmYTtpZihtLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXttKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGopZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aT5oO2grKylpZihjPXRoaXNbaF0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHVjLCIgIik6IiAiKSl7Zj0wO3doaWxlKGU9YltmKytdKWQuaW5kZXhPZigiICIrZSsiICIpPDAmJihkKz1lKyIgIik7Zz1tLnRyaW0oZCksYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTAsaT10aGlzLmxlbmd0aCxqPTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGEmJmE7aWYobS5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihqKWZvcihiPShhfHwiIikubWF0Y2goRSl8fFtdO2k+aDtoKyspaWYoYz10aGlzW2hdLGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oIiAiK2MuY2xhc3NOYW1lKyIgIikucmVwbGFjZSh1YywiICIpOiIiKSl7Zj0wO3doaWxlKGU9YltmKytdKXdoaWxlKGQuaW5kZXhPZigiICIrZSsiICIpPj0wKWQ9ZC5yZXBsYWNlKCIgIitlKyIgIiwiICIpO2c9YT9tLnRyaW0oZCk6IiIsYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0cmluZyI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOnRoaXMuZWFjaChtLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYyl7bSh0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfTpmdW5jdGlvbigpe2lmKCJzdHJpbmciPT09Yyl7dmFyIGIsZD0wLGU9bSh0aGlzKSxmPWEubWF0Y2goRSl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1vdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2UoYz09PUt8fCJib29sZWFuIj09PWMpJiYodGhpcy5jbGFzc05hbWUmJm0uX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxhPT09ITE/IiI6bS5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKX0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXtmb3IodmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Q+YztjKyspaWYoMT09PXRoaXNbY10ubm9kZVR5cGUmJigiICIrdGhpc1tjXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHVjLCIgIikuaW5kZXhPZihiKT49MClyZXR1cm4hMDtyZXR1cm4hMX19KSxtLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXttLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxtLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfX0pO3ZhciB2Yz1tLm5vdygpLHdjPS9cPy8seGM9LygsKXwoXFt8eyl8KH18XSl8Iig/OlteIlxcXHJcbl18XFxbIlxcXC9iZm5ydF18XFx1W1xkYS1mQS1GXXs0fSkqIlxzKjo/fHRydWV8ZmFsc2V8bnVsbHwtPyg/ITBcZClcZCsoPzpcLlxkK3wpKD86W2VFXVsrLV0/XGQrfCkvZzttLnBhcnNlSlNPTj1mdW5jdGlvbihiKXtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5KU09OLnBhcnNlKGIrIiIpO3ZhciBjLGQ9bnVsbCxlPW0udHJpbShiKyIiKTtyZXR1cm4gZSYmIW0udHJpbShlLnJlcGxhY2UoeGMsZnVuY3Rpb24oYSxiLGUsZil7cmV0dXJuIGMmJmImJihkPTApLDA9PT1kP2E6KGM9ZXx8YixkKz0hZi0hZSwiIil9KSk/RnVuY3Rpb24oInJldHVybiAiK2UpKCk6bS5lcnJvcigiSW52YWxpZCBKU09OOiAiK2IpfSxtLnBhcnNlWE1MPWZ1bmN0aW9uKGIpe3ZhciBjLGQ7aWYoIWJ8fCJzdHJpbmciIT10eXBlb2YgYilyZXR1cm4gbnVsbDt0cnl7YS5ET01QYXJzZXI/KGQ9bmV3IERPTVBhcnNlcixjPWQucGFyc2VGcm9tU3RyaW5nKGIsInRleHQveG1sIikpOihjPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MRE9NIiksYy5hc3luYz0iZmFsc2UiLGMubG9hZFhNTChiKSl9Y2F0Y2goZSl7Yz12b2lkIDB9cmV0dXJuIGMmJmMuZG9jdW1lbnRFbGVtZW50JiYhYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGh8fG0uZXJyb3IoIkludmFsaWQgWE1MOiAiK2IpLGN9O3ZhciB5Yyx6YyxBYz0vIy4qJC8sQmM9LyhbPyZdKV89W14mXSovLENjPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvZ20sRGM9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sRWM9L14oPzpHRVR8SEVBRCkkLyxGYz0vXlwvXC8vLEdjPS9eKFtcdy4rLV0rOikoPzpcL1wvKD86W15cLz8jXSpAfCkoW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLEhjPXt9LEljPXt9LEpjPSIqLyIuY29uY2F0KCIqIik7dHJ5e3pjPWxvY2F0aW9uLmhyZWZ9Y2F0Y2goS2Mpe3pjPXkuY3JlYXRlRWxlbWVudCgiYSIpLHpjLmhyZWY9IiIsemM9emMuaHJlZn15Yz1HYy5leGVjKHpjLnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlvbiBMYyhhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWIsYj0iKiIpO3ZhciBkLGU9MCxmPWIudG9Mb3dlckNhc2UoKS5tYXRjaChFKXx8W107aWYobS5pc0Z1bmN0aW9uKGMpKXdoaWxlKGQ9ZltlKytdKSIrIj09PWQuY2hhckF0KDApPyhkPWQuc2xpY2UoMSl8fCIqIiwoYVtkXT1hW2RdfHxbXSkudW5zaGlmdChjKSk6KGFbZF09YVtkXXx8W10pLnB1c2goYyl9fWZ1bmN0aW9uIE1jKGEsYixjLGQpe3ZhciBlPXt9LGY9YT09PUljO2Z1bmN0aW9uIGcoaCl7dmFyIGk7cmV0dXJuIGVbaF09ITAsbS5lYWNoKGFbaF18fFtdLGZ1bmN0aW9uKGEsaCl7dmFyIGo9aChiLGMsZCk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBqfHxmfHxlW2pdP2Y/IShpPWopOnZvaWQgMDooYi5kYXRhVHlwZXMudW5zaGlmdChqKSxnKGopLCExKX0pLGl9cmV0dXJuIGcoYi5kYXRhVHlwZXNbMF0pfHwhZVsiKiJdJiZnKCIqIil9ZnVuY3Rpb24gTmMoYSxiKXt2YXIgYyxkLGU9bS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihkIGluIGIpdm9pZCAwIT09YltkXSYmKChlW2RdP2E6Y3x8KGM9e30pKVtkXT1iW2RdKTtyZXR1cm4gYyYmbS5leHRlbmQoITAsYSxjKSxhfWZ1bmN0aW9uIE9jKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuY29udGVudHMsaT1hLmRhdGFUeXBlczt3aGlsZSgiKiI9PT1pWzBdKWkuc2hpZnQoKSx2b2lkIDA9PT1lJiYoZT1hLm1pbWVUeXBlfHxiLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYoZSlmb3IoZyBpbiBoKWlmKGhbZ10mJmhbZ10udGVzdChlKSl7aS51bnNoaWZ0KGcpO2JyZWFrfWlmKGlbMF1pbiBjKWY9aVswXTtlbHNle2ZvcihnIGluIGMpe2lmKCFpWzBdfHxhLmNvbnZlcnRlcnNbZysiICIraVswXV0pe2Y9ZzticmVha31kfHwoZD1nKX1mPWZ8fGR9cmV0dXJuIGY/KGYhPT1pWzBdJiZpLnVuc2hpZnQoZiksY1tmXSk6dm9pZCAwfWZ1bmN0aW9uIFBjKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaj17fSxrPWEuZGF0YVR5cGVzLnNsaWNlKCk7aWYoa1sxXSlmb3IoZyBpbiBhLmNvbnZlcnRlcnMpaltnLnRvTG93ZXJDYXNlKCldPWEuY29udmVydGVyc1tnXTtmPWsuc2hpZnQoKTt3aGlsZShmKWlmKGEucmVzcG9uc2VGaWVsZHNbZl0mJihjW2EucmVzcG9uc2VGaWVsZHNbZl1dPWIpLCFpJiZkJiZhLmRhdGFGaWx0ZXImJihiPWEuZGF0YUZpbHRlcihiLGEuZGF0YVR5cGUpKSxpPWYsZj1rLnNoaWZ0KCkpaWYoIioiPT09ZilmPWk7ZWxzZSBpZigiKiIhPT1pJiZpIT09Zil7aWYoZz1qW2krIiAiK2ZdfHxqWyIqICIrZl0sIWcpZm9yKGUgaW4gailpZihoPWUuc3BsaXQoIiAiKSxoWzFdPT09ZiYmKGc9altpKyIgIitoWzBdXXx8alsiKiAiK2hbMF1dKSl7Zz09PSEwP2c9altlXTpqW2VdIT09ITAmJihmPWhbMF0say51bnNoaWZ0KGhbMV0pKTticmVha31pZihnIT09ITApaWYoZyYmYVsidGhyb3dzIl0pYj1nKGIpO2Vsc2UgdHJ5e2I9ZyhiKX1jYXRjaChsKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjpnP2w6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2krIiB0byAiK2Z9fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6Yn19bS5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOnpjLHR5cGU6IkdFVCIsaXNMb2NhbDpEYy50ZXN0KHljWzFdKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7IioiOkpjLHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6bS5wYXJzZUpTT04sInRleHQgeG1sIjptLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9OYyhOYyhhLG0uYWpheFNldHRpbmdzKSxiKTpOYyhtLmFqYXhTZXR0aW5ncyxhKX0sYWpheFByZWZpbHRlcjpMYyhIYyksYWpheFRyYW5zcG9ydDpMYyhJYyksYWpheDpmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYj1ifHx7fTt2YXIgYyxkLGUsZixnLGgsaSxqLGs9bS5hamF4U2V0dXAoe30sYiksbD1rLmNvbnRleHR8fGssbj1rLmNvbnRleHQmJihsLm5vZGVUeXBlfHxsLmpxdWVyeSk/bShsKTptLmV2ZW50LG89bS5EZWZlcnJlZCgpLHA9bS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikscT1rLnN0YXR1c0NvZGV8fHt9LHI9e30scz17fSx0PTAsdT0iY2FuY2VsZWQiLHY9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dCl7aWYoIWope2o9e307d2hpbGUoYj1DYy5leGVjKGYpKWpbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9althLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT10P2Y6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdHx8KGE9c1tjXT1zW2NdfHxhLHJbYV09YiksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdHx8KGsubWltZVR5cGU9YSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dClmb3IoYiBpbiBhKXFbYl09W3FbYl0sYVtiXV07ZWxzZSB2LmFsd2F5cyhhW3Yuc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHU7cmV0dXJuIGkmJmkuYWJvcnQoYikseCgwLGIpLHRoaXN9fTtpZihvLnByb21pc2UodikuY29tcGxldGU9cC5hZGQsdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCxrLnVybD0oKGF8fGsudXJsfHx6YykrIiIpLnJlcGxhY2UoQWMsIiIpLnJlcGxhY2UoRmMseWNbMV0rIi8vIiksay50eXBlPWIubWV0aG9kfHxiLnR5cGV8fGsubWV0aG9kfHxrLnR5cGUsay5kYXRhVHlwZXM9bS50cmltKGsuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChFKXx8WyIiXSxudWxsPT1rLmNyb3NzRG9tYWluJiYoYz1HYy5leGVjKGsudXJsLnRvTG93ZXJDYXNlKCkpLGsuY3Jvc3NEb21haW49ISghY3x8Y1sxXT09PXljWzFdJiZjWzJdPT09eWNbMl0mJihjWzNdfHwoImh0dHA6Ij09PWNbMV0/IjgwIjoiNDQzIikpPT09KHljWzNdfHwoImh0dHA6Ij09PXljWzFdPyI4MCI6IjQ0MyIpKSkpLGsuZGF0YSYmay5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBrLmRhdGEmJihrLmRhdGE9bS5wYXJhbShrLmRhdGEsay50cmFkaXRpb25hbCkpLE1jKEhjLGssYix2KSwyPT09dClyZXR1cm4gdjtoPW0uZXZlbnQmJmsuZ2xvYmFsLGgmJjA9PT1tLmFjdGl2ZSsrJiZtLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGsudHlwZT1rLnR5cGUudG9VcHBlckNhc2UoKSxrLmhhc0NvbnRlbnQ9IUVjLnRlc3Qoay50eXBlKSxlPWsudXJsLGsuaGFzQ29udGVudHx8KGsuZGF0YSYmKGU9ay51cmwrPSh3Yy50ZXN0KGUpPyImIjoiPyIpK2suZGF0YSxkZWxldGUgay5kYXRhKSxrLmNhY2hlPT09ITEmJihrLnVybD1CYy50ZXN0KGUpP2UucmVwbGFjZShCYywiJDFfPSIrdmMrKyk6ZSsod2MudGVzdChlKT8iJiI6Ij8iKSsiXz0iK3ZjKyspKSxrLmlmTW9kaWZpZWQmJihtLmxhc3RNb2RpZmllZFtlXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsbS5sYXN0TW9kaWZpZWRbZV0pLG0uZXRhZ1tlXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixtLmV0YWdbZV0pKSwoay5kYXRhJiZrLmhhc0NvbnRlbnQmJmsuY29udGVudFR5cGUhPT0hMXx8Yi5jb250ZW50VHlwZSkmJnYuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixrLmNvbnRlbnRUeXBlKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsay5kYXRhVHlwZXNbMF0mJmsuYWNjZXB0c1trLmRhdGFUeXBlc1swXV0/ay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXSsoIioiIT09ay5kYXRhVHlwZXNbMF0/IiwgIitKYysiOyBxPTAuMDEiOiIiKTprLmFjY2VwdHNbIioiXSk7Zm9yKGQgaW4gay5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcihkLGsuaGVhZGVyc1tkXSk7aWYoay5iZWZvcmVTZW5kJiYoay5iZWZvcmVTZW5kLmNhbGwobCx2LGspPT09ITF8fDI9PT10KSlyZXR1cm4gdi5hYm9ydCgpO3U9ImFib3J0Ijtmb3IoZCBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl2W2RdKGtbZF0pO2lmKGk9TWMoSWMsayxiLHYpKXt2LnJlYWR5U3RhdGU9MSxoJiZuLnRyaWdnZXIoImFqYXhTZW5kIixbdixrXSksay5hc3luYyYmay50aW1lb3V0PjAmJihnPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGsudGltZW91dCkpO3RyeXt0PTEsaS5zZW5kKHIseCl9Y2F0Y2godyl7aWYoISgyPnQpKXRocm93IHc7eCgtMSx3KX19ZWxzZSB4KC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiB4KGEsYixjLGQpe3ZhciBqLHIscyx1LHcseD1iOzIhPT10JiYodD0yLGcmJmNsZWFyVGltZW91dChnKSxpPXZvaWQgMCxmPWR8fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowLGo9YT49MjAwJiYzMDA+YXx8MzA0PT09YSxjJiYodT1PYyhrLHYsYykpLHU9UGMoayx1LHYsaiksaj8oay5pZk1vZGlmaWVkJiYodz12LmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksdyYmKG0ubGFzdE1vZGlmaWVkW2VdPXcpLHc9di5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHcmJihtLmV0YWdbZV09dykpLDIwND09PWF8fCJIRUFEIj09PWsudHlwZT94PSJub2NvbnRlbnQiOjMwND09PWE/eD0ibm90bW9kaWZpZWQiOih4PXUuc3RhdGUscj11LmRhdGEscz11LmVycm9yLGo9IXMpKToocz14LChhfHwheCkmJih4PSJlcnJvciIsMD5hJiYoYT0wKSkpLHYuc3RhdHVzPWEsdi5zdGF0dXNUZXh0PShifHx4KSsiIixqP28ucmVzb2x2ZVdpdGgobCxbcix4LHZdKTpvLnJlamVjdFdpdGgobCxbdix4LHNdKSx2LnN0YXR1c0NvZGUocSkscT12b2lkIDAsaCYmbi50cmlnZ2VyKGo/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbdixrLGo/cjpzXSkscC5maXJlV2l0aChsLFt2LHhdKSxoJiYobi50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGtdKSwtLW0uYWN0aXZlfHxtLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gdn0sZ2V0SlNPTjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZ2V0KGEsYixjLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihhLGIpe3JldHVybiBtLmdldChhLHZvaWQgMCxiLCJzY3JpcHQiKX19KSxtLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxiKXttW2JdPWZ1bmN0aW9uKGEsYyxkLGUpe3JldHVybiBtLmlzRnVuY3Rpb24oYykmJihlPWV8fGQsZD1jLGM9dm9pZCAwKSxtLmFqYXgoe3VybDphLHR5cGU6YixkYXRhVHlwZTplLGRhdGE6YyxzdWNjZXNzOmR9KX19KSxtLl9ldmFsVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBtLmFqYXgoe3VybDphLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSl9LG0uZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKG0uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20odGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1tKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiYxPT09YS5maXJzdENoaWxkLm5vZGVUeXBlKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChtLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYil7bSh0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfTpmdW5jdGlvbigpe3ZhciBiPW0odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9bS5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7bSh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe20ubm9kZU5hbWUodGhpcywiYm9keSIpfHxtKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KSxtLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGg8PTAmJmEub2Zmc2V0SGVpZ2h0PD0wfHwhay5yZWxpYWJsZUhpZGRlbk9mZnNldHMoKSYmIm5vbmUiPT09KGEuc3R5bGUmJmEuc3R5bGUuZGlzcGxheXx8bS5jc3MoYSwiZGlzcGxheSIpKX0sbS5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hbS5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2YXIgUWM9LyUyMC9nLFJjPS9cW1xdJC8sU2M9L1xyP1xuL2csVGM9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFVjPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBWYyhhLGIsYyxkKXt2YXIgZTtpZihtLmlzQXJyYXkoYikpbS5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxSYy50ZXN0KGEpP2QoYSxlKTpWYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bS50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpVmMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW0ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPW0uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2b2lkIDA9PT1iJiYoYj1tLmFqYXhTZXR0aW5ncyYmbS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLG0uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFtLmlzUGxhaW5PYmplY3QoYSkpbS5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlWYyhjLGFbY10sYixlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZShRYywiKyIpfSxtLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG0ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT1tLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9tLm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFtKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmVWMudGVzdCh0aGlzLm5vZGVOYW1lKSYmIVRjLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCFXLnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bSh0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm0uaXNBcnJheShjKT9tLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoU2MsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKFNjLCJcclxuIil9fSkuZ2V0KCl9fSksbS5hamF4U2V0dGluZ3MueGhyPXZvaWQgMCE9PWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJi9eKGdldHxwb3N0fGhlYWR8cHV0fGRlbGV0ZXxvcHRpb25zKSQvaS50ZXN0KHRoaXMudHlwZSkmJlpjKCl8fCRjKCl9OlpjO3ZhciBXYz0wLFhjPXt9LFljPW0uYWpheFNldHRpbmdzLnhocigpO2EuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgYSBpbiBYYylYY1thXSh2b2lkIDAsITApfSksay5jb3JzPSEhWWMmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gWWMsWWM9ay5hamF4PSEhWWMsWWMmJm0uYWpheFRyYW5zcG9ydChmdW5jdGlvbihhKXtpZighYS5jcm9zc0RvbWFpbnx8ay5jb3JzKXt2YXIgYjtyZXR1cm57c2VuZDpmdW5jdGlvbihjLGQpe3ZhciBlLGY9YS54aHIoKSxnPSsrV2M7aWYoZi5vcGVuKGEudHlwZSxhLnVybCxhLmFzeW5jLGEudXNlcm5hbWUsYS5wYXNzd29yZCksYS54aHJGaWVsZHMpZm9yKGUgaW4gYS54aHJGaWVsZHMpZltlXT1hLnhockZpZWxkc1tlXTthLm1pbWVUeXBlJiZmLm92ZXJyaWRlTWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZShhLm1pbWVUeXBlKSxhLmNyb3NzRG9tYWlufHxjWyJYLVJlcXVlc3RlZC1XaXRoIl18fChjWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7Zm9yKGUgaW4gYyl2b2lkIDAhPT1jW2VdJiZmLnNldFJlcXVlc3RIZWFkZXIoZSxjW2VdKyIiKTtmLnNlbmQoYS5oYXNDb250ZW50JiZhLmRhdGF8fG51bGwpLGI9ZnVuY3Rpb24oYyxlKXt2YXIgaCxpLGo7aWYoYiYmKGV8fDQ9PT1mLnJlYWR5U3RhdGUpKWlmKGRlbGV0ZSBYY1tnXSxiPXZvaWQgMCxmLm9ucmVhZHlzdGF0ZWNoYW5nZT1tLm5vb3AsZSk0IT09Zi5yZWFkeVN0YXRlJiZmLmFib3J0KCk7ZWxzZXtqPXt9LGg9Zi5zdGF0dXMsInN0cmluZyI9PXR5cGVvZiBmLnJlc3BvbnNlVGV4dCYmKGoudGV4dD1mLnJlc3BvbnNlVGV4dCk7dHJ5e2k9Zi5zdGF0dXNUZXh0fWNhdGNoKGspe2k9IiJ9aHx8IWEuaXNMb2NhbHx8YS5jcm9zc0RvbWFpbj8xMjIzPT09aCYmKGg9MjA0KTpoPWoudGV4dD8yMDA6NDA0fWomJmQoaCxpLGosZi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSl9LGEuYXN5bmM/ND09PWYucmVhZHlTdGF0ZT9zZXRUaW1lb3V0KGIpOmYub25yZWFkeXN0YXRlY2hhbmdlPVhjW2ddPWI6YigpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIodm9pZCAwLCEwKX19fX0pO2Z1bmN0aW9uIFpjKCl7dHJ5e3JldHVybiBuZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChiKXt9fWZ1bmN0aW9uICRjKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319bS5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtyZXR1cm4gbS5nbG9iYWxFdmFsKGEpLGF9fX0pLG0uYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXt2b2lkIDA9PT1hLmNhY2hlJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT0iR0VUIixhLmdsb2JhbD0hMSl9KSxtLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGIsYz15LmhlYWR8fG0oImhlYWQiKVswXXx8eS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZCxlKXtiPXkuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYi5hc3luYz0hMCxhLnNjcmlwdENoYXJzZXQmJihiLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxiLnNyYz1hLnVybCxiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpeyhjfHwhYi5yZWFkeVN0YXRlfHwvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGIucmVhZHlTdGF0ZSkpJiYoYi5vbmxvYWQ9Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSxiPW51bGwsY3x8ZSgyMDAsInN1Y2Nlc3MiKSl9LGMuaW5zZXJ0QmVmb3JlKGIsYy5maXJzdENoaWxkKX0sYWJvcnQ6ZnVuY3Rpb24oKXtiJiZiLm9ubG9hZCh2b2lkIDAsITApfX19fSk7dmFyIF9jPVtdLGFkPS8oPSlcPyg/PSZ8JCl8XD9cPy87bS5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPV9jLnBvcCgpfHxtLmV4cGFuZG8rIl8iK3ZjKys7cmV0dXJuIHRoaXNbYV09ITAsYX19KSxtLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaD1iLmpzb25wIT09ITEmJihhZC50ZXN0KGIudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIGIuZGF0YSYmIShiLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJmFkLnRlc3QoYi5kYXRhKSYmImRhdGEiKTtyZXR1cm4gaHx8Impzb25wIj09PWIuZGF0YVR5cGVzWzBdPyhlPWIuanNvbnBDYWxsYmFjaz1tLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaD9iW2hdPWJbaF0ucmVwbGFjZShhZCwiJDEiK2UpOmIuanNvbnAhPT0hMSYmKGIudXJsKz0od2MudGVzdChiLnVybCk/IiYiOiI/IikrYi5qc29ucCsiPSIrZSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIGd8fG0uZXJyb3IoZSsiIHdhcyBub3QgY2FsbGVkIiksZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iLGY9YVtlXSxhW2VdPWZ1bmN0aW9uKCl7Zz1hcmd1bWVudHN9LGQuYWx3YXlzKGZ1bmN0aW9uKCl7YVtlXT1mLGJbZV0mJihiLmpzb25wQ2FsbGJhY2s9Yy5qc29ucENhbGxiYWNrLF9jLnB1c2goZSkpLGcmJm0uaXNGdW5jdGlvbihmKSYmZihnWzBdKSxnPWY9dm9pZCAwfSksInNjcmlwdCIpOnZvaWQgMH0pLG0ucGFyc2VIVE1MPWZ1bmN0aW9uKGEsYixjKXtpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIGImJihjPWIsYj0hMSksYj1ifHx5O3ZhciBkPXUuZXhlYyhhKSxlPSFjJiZbXTtyZXR1cm4gZD9bYi5jcmVhdGVFbGVtZW50KGRbMV0pXTooZD1tLmJ1aWxkRnJhZ21lbnQoW2FdLGIsZSksZSYmZS5sZW5ndGgmJm0oZSkucmVtb3ZlKCksbS5tZXJnZShbXSxkLmNoaWxkTm9kZXMpKX07dmFyIGJkPW0uZm4ubG9hZDttLmZuLmxvYWQ9ZnVuY3Rpb24oYSxiLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSYmYmQpcmV0dXJuIGJkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZCxlLGYsZz10aGlzLGg9YS5pbmRleE9mKCIgIik7cmV0dXJuIGg+PTAmJihkPW0udHJpbShhLnNsaWNlKGgsYS5sZW5ndGgpKSxhPWEuc2xpY2UoMCxoKSksbS5pc0Z1bmN0aW9uKGIpPyhjPWIsYj12b2lkIDApOmImJiJvYmplY3QiPT10eXBlb2YgYiYmKGY9IlBPU1QiKSxnLmxlbmd0aD4wJiZtLmFqYXgoe3VybDphLHR5cGU6ZixkYXRhVHlwZToiaHRtbCIsZGF0YTpifSkuZG9uZShmdW5jdGlvbihhKXtlPWFyZ3VtZW50cyxnLmh0bWwoZD9tKCI8ZGl2PiIpLmFwcGVuZChtLnBhcnNlSFRNTChhKSkuZmluZChkKTphKX0pLmNvbXBsZXRlKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGMsZXx8W2EucmVzcG9uc2VUZXh0LGIsYV0pfSksdGhpc30sbS5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oYSxiKXttLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbS5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZ3JlcChtLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07dmFyIGNkPWEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Z1bmN0aW9uIGRkKGEpe3JldHVybiBtLmlzV2luZG93KGEpP2E6OT09PWEubm9kZVR5cGU/YS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3c6ITF9bS5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaz1tLmNzcyhhLCJwb3NpdGlvbiIpLGw9bShhKSxuPXt9OyJzdGF0aWMiPT09ayYmKGEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksaD1sLm9mZnNldCgpLGY9bS5jc3MoYSwidG9wIiksaT1tLmNzcyhhLCJsZWZ0Iiksaj0oImFic29sdXRlIj09PWt8fCJmaXhlZCI9PT1rKSYmbS5pbkFycmF5KCJhdXRvIixbZixpXSk+LTEsaj8oZD1sLnBvc2l0aW9uKCksZz1kLnRvcCxlPWQubGVmdCk6KGc9cGFyc2VGbG9hdChmKXx8MCxlPXBhcnNlRmxvYXQoaSl8fDApLG0uaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxoKSksbnVsbCE9Yi50b3AmJihuLnRvcD1iLnRvcC1oLnRvcCtnKSxudWxsIT1iLmxlZnQmJihuLmxlZnQ9Yi5sZWZ0LWgubGVmdCtlKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxuKTpsLmNzcyhuKX19LG0uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXttLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXt0b3A6MCxsZWZ0OjB9LGU9dGhpc1swXSxmPWUmJmUub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LG0uY29udGFpbnMoYixlKT8odHlwZW9mIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09SyYmKGQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYz1kZChmKSx7dG9wOmQudG9wKyhjLnBhZ2VZT2Zmc2V0fHxiLnNjcm9sbFRvcCktKGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoYy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0oYi5jbGllbnRMZWZ0fHwwKX0pOmR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXt0b3A6MCxsZWZ0OjB9LGQ9dGhpc1swXTtyZXR1cm4iZml4ZWQiPT09bS5jc3MoZCwicG9zaXRpb24iKT9iPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbS5ub2RlTmFtZShhWzBdLCJodG1sIil8fChjPWEub2Zmc2V0KCkpLGMudG9wKz1tLmNzcyhhWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLGMubGVmdCs9bS5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6Yi50b3AtYy50b3AtbS5jc3MoZCwibWFyZ2luVG9wIiwhMCksbGVmdDpiLmxlZnQtYy5sZWZ0LW0uY3NzKGQsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8Y2Q7d2hpbGUoYSYmIW0ubm9kZU5hbWUoYSwiaHRtbCIpJiYic3RhdGljIj09PW0uY3NzKGEsInBvc2l0aW9uIikpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYXx8Y2R9KX19KSxtLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oYSxiKXt2YXIgYz0vWS8udGVzdChiKTttLmZuW2FdPWZ1bmN0aW9uKGQpe3JldHVybiBWKHRoaXMsZnVuY3Rpb24oYSxkLGUpe3ZhciBmPWRkKGEpO3JldHVybiB2b2lkIDA9PT1lP2Y/YiBpbiBmP2ZbYl06Zi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZF06YVtkXTp2b2lkKGY/Zi5zY3JvbGxUbyhjP20oZikuc2Nyb2xsTGVmdCgpOmUsYz9lOm0oZikuc2Nyb2xsVG9wKCkpOmFbZF09ZSl9LGEsZCxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLG0uZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihhLGIpe20uY3NzSG9va3NbYl09TGIoay5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/KGM9SmIoYSxiKSxIYi50ZXN0KGMpP20oYSkucG9zaXRpb24oKVtiXSsicHgiOmMpOnZvaWQgMH0pfSksbS5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxiKXttLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bS5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG0uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bS5jc3MoYixjLGcpOm0uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbS5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxtLmZuLmFuZFNlbGY9bS5mbi5hZGRCYWNrLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBtfSk7dmFyIGVkPWEualF1ZXJ5LGZkPWEuJDtyZXR1cm4gbS5ub0NvbmZsaWN0PWZ1bmN0aW9uKGIpe3JldHVybiBhLiQ9PT1tJiYoYS4kPWZkKSxiJiZhLmpRdWVyeT09PW0mJihhLmpRdWVyeT1lZCksbX0sdHlwZW9mIGI9PT1LJiYoYS5qUXVlcnk9YS4kPW0pLG19KTsNCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWpxdWVyeS5taW4ubWFwDQo="></script>
<link href="data:text/css;charset=utf-8,%0A%2Eui%2Dhelper%2Dhidden%7Bdisplay%3Anone%7D%2Eui%2Dhelper%2Dhidden%2Daccessible%7Bborder%3A0%3Bclip%3Arect%280%200%200%200%29%3Bheight%3A1px%3Bmargin%3A%2D1px%3Boverflow%3Ahidden%3Bpadding%3A0%3Bposition%3Aabsolute%3Bwidth%3A1px%7D%2Eui%2Dhelper%2Dreset%7Bmargin%3A0%3Bpadding%3A0%3Bborder%3A0%3Boutline%3A0%3Bline%2Dheight%3A1%2E3%3Btext%2Ddecoration%3Anone%3Bfont%2Dsize%3A100%25%3Blist%2Dstyle%3Anone%7D%2Eui%2Dhelper%2Dclearfix%3Abefore%2C%2Eui%2Dhelper%2Dclearfix%3Aafter%7Bcontent%3A%22%22%3Bdisplay%3Atable%3Bborder%2Dcollapse%3Acollapse%7D%2Eui%2Dhelper%2Dclearfix%3Aafter%7Bclear%3Aboth%7D%2Eui%2Dhelper%2Dclearfix%7Bmin%2Dheight%3A0%7D%2Eui%2Dhelper%2Dzfix%7Bwidth%3A100%25%3Bheight%3A100%25%3Btop%3A0%3Bleft%3A0%3Bposition%3Aabsolute%3Bopacity%3A0%3Bfilter%3AAlpha%28Opacity%3D0%29%7D%2Eui%2Dfront%7Bz%2Dindex%3A100%7D%2Eui%2Dstate%2Ddisabled%7Bcursor%3Adefault%21important%7D%2Eui%2Dicon%7Bdisplay%3Ablock%3Btext%2Dindent%3A%2D99999px%3Boverflow%3Ahidden%3Bbackground%2Drepeat%3Ano%2Drepeat%7D%2Eui%2Dwidget%2Doverlay%7Bposition%3Afixed%3Btop%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%7D%2Eui%2Daccordion%20%2Eui%2Daccordion%2Dheader%7Bdisplay%3Ablock%3Bcursor%3Apointer%3Bposition%3Arelative%3Bmargin%3A2px%200%200%200%3Bpadding%3A%2E5em%20%2E5em%20%2E5em%20%2E7em%3Bmin%2Dheight%3A0%3Bfont%2Dsize%3A100%25%7D%2Eui%2Daccordion%20%2Eui%2Daccordion%2Dicons%7Bpadding%2Dleft%3A2%2E2em%7D%2Eui%2Daccordion%20%2Eui%2Daccordion%2Dicons%20%2Eui%2Daccordion%2Dicons%7Bpadding%2Dleft%3A2%2E2em%7D%2Eui%2Daccordion%20%2Eui%2Daccordion%2Dheader%20%2Eui%2Daccordion%2Dheader%2Dicon%7Bposition%3Aabsolute%3Bleft%3A%2E5em%3Btop%3A50%25%3Bmargin%2Dtop%3A%2D8px%7D%2Eui%2Daccordion%20%2Eui%2Daccordion%2Dcontent%7Bpadding%3A1em%202%2E2em%3Bborder%2Dtop%3A0%3Boverflow%3Aauto%7D%2Eui%2Dautocomplete%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bcursor%3Adefault%7D%2Eui%2Dbutton%7Bdisplay%3Ainline%2Dblock%3Bposition%3Arelative%3Bpadding%3A0%3Bline%2Dheight%3Anormal%3Bmargin%2Dright%3A%2E1em%3Bcursor%3Apointer%3Bvertical%2Dalign%3Amiddle%3Btext%2Dalign%3Acenter%3Boverflow%3Avisible%7D%2Eui%2Dbutton%2C%2Eui%2Dbutton%3Alink%2C%2Eui%2Dbutton%3Avisited%2C%2Eui%2Dbutton%3Ahover%2C%2Eui%2Dbutton%3Aactive%7Btext%2Ddecoration%3Anone%7D%2Eui%2Dbutton%2Dicon%2Donly%7Bwidth%3A2%2E2em%7Dbutton%2Eui%2Dbutton%2Dicon%2Donly%7Bwidth%3A2%2E4em%7D%2Eui%2Dbutton%2Dicons%2Donly%7Bwidth%3A3%2E4em%7Dbutton%2Eui%2Dbutton%2Dicons%2Donly%7Bwidth%3A3%2E7em%7D%2Eui%2Dbutton%20%2Eui%2Dbutton%2Dtext%7Bdisplay%3Ablock%3Bline%2Dheight%3Anormal%7D%2Eui%2Dbutton%2Dtext%2Donly%20%2Eui%2Dbutton%2Dtext%7Bpadding%3A%2E4em%201em%7D%2Eui%2Dbutton%2Dicon%2Donly%20%2Eui%2Dbutton%2Dtext%2C%2Eui%2Dbutton%2Dicons%2Donly%20%2Eui%2Dbutton%2Dtext%7Bpadding%3A%2E4em%3Btext%2Dindent%3A%2D9999999px%7D%2Eui%2Dbutton%2Dtext%2Dicon%2Dprimary%20%2Eui%2Dbutton%2Dtext%2C%2Eui%2Dbutton%2Dtext%2Dicons%20%2Eui%2Dbutton%2Dtext%7Bpadding%3A%2E4em%201em%20%2E4em%202%2E1em%7D%2Eui%2Dbutton%2Dtext%2Dicon%2Dsecondary%20%2Eui%2Dbutton%2Dtext%2C%2Eui%2Dbutton%2Dtext%2Dicons%20%2Eui%2Dbutton%2Dtext%7Bpadding%3A%2E4em%202%2E1em%20%2E4em%201em%7D%2Eui%2Dbutton%2Dtext%2Dicons%20%2Eui%2Dbutton%2Dtext%7Bpadding%2Dleft%3A2%2E1em%3Bpadding%2Dright%3A2%2E1em%7Dinput%2Eui%2Dbutton%7Bpadding%3A%2E4em%201em%7D%2Eui%2Dbutton%2Dicon%2Donly%20%2Eui%2Dicon%2C%2Eui%2Dbutton%2Dtext%2Dicon%2Dprimary%20%2Eui%2Dicon%2C%2Eui%2Dbutton%2Dtext%2Dicon%2Dsecondary%20%2Eui%2Dicon%2C%2Eui%2Dbutton%2Dtext%2Dicons%20%2Eui%2Dicon%2C%2Eui%2Dbutton%2Dicons%2Donly%20%2Eui%2Dicon%7Bposition%3Aabsolute%3Btop%3A50%25%3Bmargin%2Dtop%3A%2D8px%7D%2Eui%2Dbutton%2Dicon%2Donly%20%2Eui%2Dicon%7Bleft%3A50%25%3Bmargin%2Dleft%3A%2D8px%7D%2Eui%2Dbutton%2Dtext%2Dicon%2Dprimary%20%2Eui%2Dbutton%2Dicon%2Dprimary%2C%2Eui%2Dbutton%2Dtext%2Dicons%20%2Eui%2Dbutton%2Dicon%2Dprimary%2C%2Eui%2Dbutton%2Dicons%2Donly%20%2Eui%2Dbutton%2Dicon%2Dprimary%7Bleft%3A%2E5em%7D%2Eui%2Dbutton%2Dtext%2Dicon%2Dsecondary%20%2Eui%2Dbutton%2Dicon%2Dsecondary%2C%2Eui%2Dbutton%2Dtext%2Dicons%20%2Eui%2Dbutton%2Dicon%2Dsecondary%2C%2Eui%2Dbutton%2Dicons%2Donly%20%2Eui%2Dbutton%2Dicon%2Dsecondary%7Bright%3A%2E5em%7D%2Eui%2Dbuttonset%7Bmargin%2Dright%3A7px%7D%2Eui%2Dbuttonset%20%2Eui%2Dbutton%7Bmargin%2Dleft%3A0%3Bmargin%2Dright%3A%2D%2E3em%7Dinput%2Eui%2Dbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%2Cbutton%2Eui%2Dbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bborder%3A0%3Bpadding%3A0%7D%2Eui%2Ddatepicker%7Bwidth%3A17em%3Bpadding%3A%2E2em%20%2E2em%200%3Bdisplay%3Anone%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dheader%7Bposition%3Arelative%3Bpadding%3A%2E2em%200%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dprev%2C%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dnext%7Bposition%3Aabsolute%3Btop%3A2px%3Bwidth%3A1%2E8em%3Bheight%3A1%2E8em%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dprev%2Dhover%2C%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dnext%2Dhover%7Btop%3A1px%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dprev%7Bleft%3A2px%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dnext%7Bright%3A2px%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dprev%2Dhover%7Bleft%3A1px%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dnext%2Dhover%7Bright%3A1px%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dprev%20span%2C%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dnext%20span%7Bdisplay%3Ablock%3Bposition%3Aabsolute%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D8px%3Btop%3A50%25%3Bmargin%2Dtop%3A%2D8px%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dtitle%7Bmargin%3A0%202%2E3em%3Bline%2Dheight%3A1%2E8em%3Btext%2Dalign%3Acenter%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dtitle%20select%7Bfont%2Dsize%3A1em%3Bmargin%3A1px%200%7D%2Eui%2Ddatepicker%20select%2Eui%2Ddatepicker%2Dmonth%2C%2Eui%2Ddatepicker%20select%2Eui%2Ddatepicker%2Dyear%7Bwidth%3A45%25%7D%2Eui%2Ddatepicker%20table%7Bwidth%3A100%25%3Bfont%2Dsize%3A%2E9em%3Bborder%2Dcollapse%3Acollapse%3Bmargin%3A0%200%20%2E4em%7D%2Eui%2Ddatepicker%20th%7Bpadding%3A%2E7em%20%2E3em%3Btext%2Dalign%3Acenter%3Bfont%2Dweight%3Abold%3Bborder%3A0%7D%2Eui%2Ddatepicker%20td%7Bborder%3A0%3Bpadding%3A1px%7D%2Eui%2Ddatepicker%20td%20span%2C%2Eui%2Ddatepicker%20td%20a%7Bdisplay%3Ablock%3Bpadding%3A%2E2em%3Btext%2Dalign%3Aright%3Btext%2Ddecoration%3Anone%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dbuttonpane%7Bbackground%2Dimage%3Anone%3Bmargin%3A%2E7em%200%200%200%3Bpadding%3A0%20%2E2em%3Bborder%2Dleft%3A0%3Bborder%2Dright%3A0%3Bborder%2Dbottom%3A0%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dbuttonpane%20button%7Bfloat%3Aright%3Bmargin%3A%2E5em%20%2E2em%20%2E4em%3Bcursor%3Apointer%3Bpadding%3A%2E2em%20%2E6em%20%2E3em%20%2E6em%3Bwidth%3Aauto%3Boverflow%3Avisible%7D%2Eui%2Ddatepicker%20%2Eui%2Ddatepicker%2Dbuttonpane%20button%2Eui%2Ddatepicker%2Dcurrent%7Bfloat%3Aleft%7D%2Eui%2Ddatepicker%2Eui%2Ddatepicker%2Dmulti%7Bwidth%3Aauto%7D%2Eui%2Ddatepicker%2Dmulti%20%2Eui%2Ddatepicker%2Dgroup%7Bfloat%3Aleft%7D%2Eui%2Ddatepicker%2Dmulti%20%2Eui%2Ddatepicker%2Dgroup%20table%7Bwidth%3A95%25%3Bmargin%3A0%20auto%20%2E4em%7D%2Eui%2Ddatepicker%2Dmulti%2D2%20%2Eui%2Ddatepicker%2Dgroup%7Bwidth%3A50%25%7D%2Eui%2Ddatepicker%2Dmulti%2D3%20%2Eui%2Ddatepicker%2Dgroup%7Bwidth%3A33%2E3%25%7D%2Eui%2Ddatepicker%2Dmulti%2D4%20%2Eui%2Ddatepicker%2Dgroup%7Bwidth%3A25%25%7D%2Eui%2Ddatepicker%2Dmulti%20%2Eui%2Ddatepicker%2Dgroup%2Dlast%20%2Eui%2Ddatepicker%2Dheader%2C%2Eui%2Ddatepicker%2Dmulti%20%2Eui%2Ddatepicker%2Dgroup%2Dmiddle%20%2Eui%2Ddatepicker%2Dheader%7Bborder%2Dleft%2Dwidth%3A0%7D%2Eui%2Ddatepicker%2Dmulti%20%2Eui%2Ddatepicker%2Dbuttonpane%7Bclear%3Aleft%7D%2Eui%2Ddatepicker%2Drow%2Dbreak%7Bclear%3Aboth%3Bwidth%3A100%25%3Bfont%2Dsize%3A0%7D%2Eui%2Ddatepicker%2Drtl%7Bdirection%3Artl%7D%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dprev%7Bright%3A2px%3Bleft%3Aauto%7D%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dnext%7Bleft%3A2px%3Bright%3Aauto%7D%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dprev%3Ahover%7Bright%3A1px%3Bleft%3Aauto%7D%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dnext%3Ahover%7Bleft%3A1px%3Bright%3Aauto%7D%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dbuttonpane%7Bclear%3Aright%7D%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dbuttonpane%20button%7Bfloat%3Aleft%7D%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dbuttonpane%20button%2Eui%2Ddatepicker%2Dcurrent%2C%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dgroup%7Bfloat%3Aright%7D%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dgroup%2Dlast%20%2Eui%2Ddatepicker%2Dheader%2C%2Eui%2Ddatepicker%2Drtl%20%2Eui%2Ddatepicker%2Dgroup%2Dmiddle%20%2Eui%2Ddatepicker%2Dheader%7Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dwidth%3A1px%7D%2Eui%2Ddialog%7Boverflow%3Ahidden%3Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bpadding%3A%2E2em%3Boutline%3A0%7D%2Eui%2Ddialog%20%2Eui%2Ddialog%2Dtitlebar%7Bpadding%3A%2E4em%201em%3Bposition%3Arelative%7D%2Eui%2Ddialog%20%2Eui%2Ddialog%2Dtitle%7Bfloat%3Aleft%3Bmargin%3A%2E1em%200%3Bwhite%2Dspace%3Anowrap%3Bwidth%3A90%25%3Boverflow%3Ahidden%3Btext%2Doverflow%3Aellipsis%7D%2Eui%2Ddialog%20%2Eui%2Ddialog%2Dtitlebar%2Dclose%7Bposition%3Aabsolute%3Bright%3A%2E3em%3Btop%3A50%25%3Bwidth%3A20px%3Bmargin%3A%2D10px%200%200%200%3Bpadding%3A1px%3Bheight%3A20px%7D%2Eui%2Ddialog%20%2Eui%2Ddialog%2Dcontent%7Bposition%3Arelative%3Bborder%3A0%3Bpadding%3A%2E5em%201em%3Bbackground%3Anone%3Boverflow%3Aauto%7D%2Eui%2Ddialog%20%2Eui%2Ddialog%2Dbuttonpane%7Btext%2Dalign%3Aleft%3Bborder%2Dwidth%3A1px%200%200%200%3Bbackground%2Dimage%3Anone%3Bmargin%2Dtop%3A%2E5em%3Bpadding%3A%2E3em%201em%20%2E5em%20%2E4em%7D%2Eui%2Ddialog%20%2Eui%2Ddialog%2Dbuttonpane%20%2Eui%2Ddialog%2Dbuttonset%7Bfloat%3Aright%7D%2Eui%2Ddialog%20%2Eui%2Ddialog%2Dbuttonpane%20button%7Bmargin%3A%2E5em%20%2E4em%20%2E5em%200%3Bcursor%3Apointer%7D%2Eui%2Ddialog%20%2Eui%2Dresizable%2Dse%7Bwidth%3A12px%3Bheight%3A12px%3Bright%3A%2D5px%3Bbottom%3A%2D5px%3Bbackground%2Dposition%3A16px%2016px%7D%2Eui%2Ddraggable%20%2Eui%2Ddialog%2Dtitlebar%7Bcursor%3Amove%7D%2Eui%2Ddraggable%2Dhandle%7B%2Dms%2Dtouch%2Daction%3Anone%3Btouch%2Daction%3Anone%7D%2Eui%2Dmenu%7Blist%2Dstyle%3Anone%3Bpadding%3A0%3Bmargin%3A0%3Bdisplay%3Ablock%3Boutline%3Anone%7D%2Eui%2Dmenu%20%2Eui%2Dmenu%7Bposition%3Aabsolute%7D%2Eui%2Dmenu%20%2Eui%2Dmenu%2Ditem%7Bposition%3Arelative%3Bmargin%3A0%3Bpadding%3A3px%201em%203px%20%2E4em%3Bcursor%3Apointer%3Bmin%2Dheight%3A0%3Blist%2Dstyle%2Dimage%3Aurl%28%22data%3Aimage%2Fgif%3Bbase64%2CR0lGODlhAQABAIAAAAAAAP%2F%2F%2FyH5BAEAAAAALAAAAAABAAEAAAIBRAA7%22%29%7D%2Eui%2Dmenu%20%2Eui%2Dmenu%2Ddivider%7Bmargin%3A5px%200%3Bheight%3A0%3Bfont%2Dsize%3A0%3Bline%2Dheight%3A0%3Bborder%2Dwidth%3A1px%200%200%200%7D%2Eui%2Dmenu%20%2Eui%2Dstate%2Dfocus%2C%2Eui%2Dmenu%20%2Eui%2Dstate%2Dactive%7Bmargin%3A%2D1px%7D%2Eui%2Dmenu%2Dicons%7Bposition%3Arelative%7D%2Eui%2Dmenu%2Dicons%20%2Eui%2Dmenu%2Ditem%7Bpadding%2Dleft%3A2em%7D%2Eui%2Dmenu%20%2Eui%2Dicon%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A%2E2em%3Bmargin%3Aauto%200%7D%2Eui%2Dmenu%20%2Eui%2Dmenu%2Dicon%7Bleft%3Aauto%3Bright%3A0%7D%2Eui%2Dprogressbar%7Bheight%3A2em%3Btext%2Dalign%3Aleft%3Boverflow%3Ahidden%7D%2Eui%2Dprogressbar%20%2Eui%2Dprogressbar%2Dvalue%7Bmargin%3A%2D1px%3Bheight%3A100%25%7D%2Eui%2Dprogressbar%20%2Eui%2Dprogressbar%2Doverlay%7Bbackground%3Aurl%28%22data%3Aimage%2Fgif%3Bbase64%2CR0lGODlhKAAoAIABAAAAAP%2F%2F%2FyH%2FC05FVFNDQVBFMi4wAwEAAAAh%2BQQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI%2B4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc%2Bw9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA%2BHycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd%2BT1JktP05nzPTdJZlR6vUxNWWjV%2BvUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH%2Fynlcc1uPVDZxQIR0K25%2BcICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT%2FLz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh%2BIR5aW97cHuBUXKGKXlKjn%2BDiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd%2FiO7FNWtcFWe%2BufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb%2FlCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80%2FX02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G%2F%2BXdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh%2BQQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC%2B%2FyaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ%2BBbeZfMxsexY35%2B%2FQe4J1inV0g4x3WHuMhIl2jXOKT2Q%2BVU5fgoSUI52VfZyfkJGkha6jmY%2BaaYdirq%2BlQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2%2FFu5V16Bn63r6xt97j09%2BMXSFi4BniGFae3hzbH9%2BhYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq%2B1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU%2FQUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH%2BMg2KBlpVpbluCiXmMnZ2Sh4GBqJ%2BckIOqqJ6LmKSllZmsoq6wpQAAAh%2BQQJAQABACwAAAAAKAAoAAAClYx%2FoLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2%2FgF8Gu2DY3iqs7yrq%2BxBYEkYvFSM8aSSObE%2BZgRl1BHFZNr7pRCavZ5BW2142hY3AN%2FzWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB%2Bgu%2BjG4kORTVrVhRlsnn2dJ3ZleFaptFrb%2BCXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj%2Bp5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw%3D%3D%22%29%3Bheight%3A100%25%3Bfilter%3Aalpha%28opacity%3D25%29%3Bopacity%3A0%2E25%7D%2Eui%2Dprogressbar%2Dindeterminate%20%2Eui%2Dprogressbar%2Dvalue%7Bbackground%2Dimage%3Anone%7D%2Eui%2Dresizable%7Bposition%3Arelative%7D%2Eui%2Dresizable%2Dhandle%7Bposition%3Aabsolute%3Bfont%2Dsize%3A0%2E1px%3Bdisplay%3Ablock%3B%2Dms%2Dtouch%2Daction%3Anone%3Btouch%2Daction%3Anone%7D%2Eui%2Dresizable%2Ddisabled%20%2Eui%2Dresizable%2Dhandle%2C%2Eui%2Dresizable%2Dautohide%20%2Eui%2Dresizable%2Dhandle%7Bdisplay%3Anone%7D%2Eui%2Dresizable%2Dn%7Bcursor%3An%2Dresize%3Bheight%3A7px%3Bwidth%3A100%25%3Btop%3A%2D5px%3Bleft%3A0%7D%2Eui%2Dresizable%2Ds%7Bcursor%3As%2Dresize%3Bheight%3A7px%3Bwidth%3A100%25%3Bbottom%3A%2D5px%3Bleft%3A0%7D%2Eui%2Dresizable%2De%7Bcursor%3Ae%2Dresize%3Bwidth%3A7px%3Bright%3A%2D5px%3Btop%3A0%3Bheight%3A100%25%7D%2Eui%2Dresizable%2Dw%7Bcursor%3Aw%2Dresize%3Bwidth%3A7px%3Bleft%3A%2D5px%3Btop%3A0%3Bheight%3A100%25%7D%2Eui%2Dresizable%2Dse%7Bcursor%3Ase%2Dresize%3Bwidth%3A12px%3Bheight%3A12px%3Bright%3A1px%3Bbottom%3A1px%7D%2Eui%2Dresizable%2Dsw%7Bcursor%3Asw%2Dresize%3Bwidth%3A9px%3Bheight%3A9px%3Bleft%3A%2D5px%3Bbottom%3A%2D5px%7D%2Eui%2Dresizable%2Dnw%7Bcursor%3Anw%2Dresize%3Bwidth%3A9px%3Bheight%3A9px%3Bleft%3A%2D5px%3Btop%3A%2D5px%7D%2Eui%2Dresizable%2Dne%7Bcursor%3Ane%2Dresize%3Bwidth%3A9px%3Bheight%3A9px%3Bright%3A%2D5px%3Btop%3A%2D5px%7D%2Eui%2Dselectable%7B%2Dms%2Dtouch%2Daction%3Anone%3Btouch%2Daction%3Anone%7D%2Eui%2Dselectable%2Dhelper%7Bposition%3Aabsolute%3Bz%2Dindex%3A100%3Bborder%3A1px%20dotted%20black%7D%2Eui%2Dselectmenu%2Dmenu%7Bpadding%3A0%3Bmargin%3A0%3Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bdisplay%3Anone%7D%2Eui%2Dselectmenu%2Dmenu%20%2Eui%2Dmenu%7Boverflow%3Aauto%3Boverflow%2Dx%3Ahidden%3Bpadding%2Dbottom%3A1px%7D%2Eui%2Dselectmenu%2Dmenu%20%2Eui%2Dmenu%20%2Eui%2Dselectmenu%2Doptgroup%7Bfont%2Dsize%3A1em%3Bfont%2Dweight%3Abold%3Bline%2Dheight%3A1%2E5%3Bpadding%3A2px%200%2E4em%3Bmargin%3A0%2E5em%200%200%200%3Bheight%3Aauto%3Bborder%3A0%7D%2Eui%2Dselectmenu%2Dopen%7Bdisplay%3Ablock%7D%2Eui%2Dselectmenu%2Dbutton%7Bdisplay%3Ainline%2Dblock%3Boverflow%3Ahidden%3Bposition%3Arelative%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Eui%2Dselectmenu%2Dbutton%20span%2Eui%2Dicon%7Bright%3A0%2E5em%3Bleft%3Aauto%3Bmargin%2Dtop%3A%2D8px%3Bposition%3Aabsolute%3Btop%3A50%25%7D%2Eui%2Dselectmenu%2Dbutton%20span%2Eui%2Dselectmenu%2Dtext%7Btext%2Dalign%3Aleft%3Bpadding%3A0%2E4em%202%2E1em%200%2E4em%201em%3Bdisplay%3Ablock%3Bline%2Dheight%3A1%2E4%3Boverflow%3Ahidden%3Btext%2Doverflow%3Aellipsis%3Bwhite%2Dspace%3Anowrap%7D%2Eui%2Dslider%7Bposition%3Arelative%3Btext%2Dalign%3Aleft%7D%2Eui%2Dslider%20%2Eui%2Dslider%2Dhandle%7Bposition%3Aabsolute%3Bz%2Dindex%3A2%3Bwidth%3A1%2E2em%3Bheight%3A1%2E2em%3Bcursor%3Adefault%3B%2Dms%2Dtouch%2Daction%3Anone%3Btouch%2Daction%3Anone%7D%2Eui%2Dslider%20%2Eui%2Dslider%2Drange%7Bposition%3Aabsolute%3Bz%2Dindex%3A1%3Bfont%2Dsize%3A%2E7em%3Bdisplay%3Ablock%3Bborder%3A0%3Bbackground%2Dposition%3A0%200%7D%2Eui%2Dslider%2Eui%2Dstate%2Ddisabled%20%2Eui%2Dslider%2Dhandle%2C%2Eui%2Dslider%2Eui%2Dstate%2Ddisabled%20%2Eui%2Dslider%2Drange%7Bfilter%3Ainherit%7D%2Eui%2Dslider%2Dhorizontal%7Bheight%3A%2E8em%7D%2Eui%2Dslider%2Dhorizontal%20%2Eui%2Dslider%2Dhandle%7Btop%3A%2D%2E3em%3Bmargin%2Dleft%3A%2D%2E6em%7D%2Eui%2Dslider%2Dhorizontal%20%2Eui%2Dslider%2Drange%7Btop%3A0%3Bheight%3A100%25%7D%2Eui%2Dslider%2Dhorizontal%20%2Eui%2Dslider%2Drange%2Dmin%7Bleft%3A0%7D%2Eui%2Dslider%2Dhorizontal%20%2Eui%2Dslider%2Drange%2Dmax%7Bright%3A0%7D%2Eui%2Dslider%2Dvertical%7Bwidth%3A%2E8em%3Bheight%3A100px%7D%2Eui%2Dslider%2Dvertical%20%2Eui%2Dslider%2Dhandle%7Bleft%3A%2D%2E3em%3Bmargin%2Dleft%3A0%3Bmargin%2Dbottom%3A%2D%2E6em%7D%2Eui%2Dslider%2Dvertical%20%2Eui%2Dslider%2Drange%7Bleft%3A0%3Bwidth%3A100%25%7D%2Eui%2Dslider%2Dvertical%20%2Eui%2Dslider%2Drange%2Dmin%7Bbottom%3A0%7D%2Eui%2Dslider%2Dvertical%20%2Eui%2Dslider%2Drange%2Dmax%7Btop%3A0%7D%2Eui%2Dsortable%2Dhandle%7B%2Dms%2Dtouch%2Daction%3Anone%3Btouch%2Daction%3Anone%7D%2Eui%2Dspinner%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Boverflow%3Ahidden%3Bpadding%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eui%2Dspinner%2Dinput%7Bborder%3Anone%3Bbackground%3Anone%3Bcolor%3Ainherit%3Bpadding%3A0%3Bmargin%3A%2E2em%200%3Bvertical%2Dalign%3Amiddle%3Bmargin%2Dleft%3A%2E4em%3Bmargin%2Dright%3A22px%7D%2Eui%2Dspinner%2Dbutton%7Bwidth%3A16px%3Bheight%3A50%25%3Bfont%2Dsize%3A%2E5em%3Bpadding%3A0%3Bmargin%3A0%3Btext%2Dalign%3Acenter%3Bposition%3Aabsolute%3Bcursor%3Adefault%3Bdisplay%3Ablock%3Boverflow%3Ahidden%3Bright%3A0%7D%2Eui%2Dspinner%20a%2Eui%2Dspinner%2Dbutton%7Bborder%2Dtop%3Anone%3Bborder%2Dbottom%3Anone%3Bborder%2Dright%3Anone%7D%2Eui%2Dspinner%20%2Eui%2Dicon%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A%2D8px%3Btop%3A50%25%3Bleft%3A0%7D%2Eui%2Dspinner%2Dup%7Btop%3A0%7D%2Eui%2Dspinner%2Ddown%7Bbottom%3A0%7D%2Eui%2Dspinner%20%2Eui%2Dicon%2Dtriangle%2D1%2Ds%7Bbackground%2Dposition%3A%2D65px%20%2D16px%7D%2Eui%2Dtabs%7Bposition%3Arelative%3Bpadding%3A%2E2em%7D%2Eui%2Dtabs%20%2Eui%2Dtabs%2Dnav%7Bmargin%3A0%3Bpadding%3A%2E2em%20%2E2em%200%7D%2Eui%2Dtabs%20%2Eui%2Dtabs%2Dnav%20li%7Blist%2Dstyle%3Anone%3Bfloat%3Aleft%3Bposition%3Arelative%3Btop%3A0%3Bmargin%3A1px%20%2E2em%200%200%3Bborder%2Dbottom%2Dwidth%3A0%3Bpadding%3A0%3Bwhite%2Dspace%3Anowrap%7D%2Eui%2Dtabs%20%2Eui%2Dtabs%2Dnav%20%2Eui%2Dtabs%2Danchor%7Bfloat%3Aleft%3Bpadding%3A%2E5em%201em%3Btext%2Ddecoration%3Anone%7D%2Eui%2Dtabs%20%2Eui%2Dtabs%2Dnav%20li%2Eui%2Dtabs%2Dactive%7Bmargin%2Dbottom%3A%2D1px%3Bpadding%2Dbottom%3A1px%7D%2Eui%2Dtabs%20%2Eui%2Dtabs%2Dnav%20li%2Eui%2Dtabs%2Dactive%20%2Eui%2Dtabs%2Danchor%2C%2Eui%2Dtabs%20%2Eui%2Dtabs%2Dnav%20li%2Eui%2Dstate%2Ddisabled%20%2Eui%2Dtabs%2Danchor%2C%2Eui%2Dtabs%20%2Eui%2Dtabs%2Dnav%20li%2Eui%2Dtabs%2Dloading%20%2Eui%2Dtabs%2Danchor%7Bcursor%3Atext%7D%2Eui%2Dtabs%2Dcollapsible%20%2Eui%2Dtabs%2Dnav%20li%2Eui%2Dtabs%2Dactive%20%2Eui%2Dtabs%2Danchor%7Bcursor%3Apointer%7D%2Eui%2Dtabs%20%2Eui%2Dtabs%2Dpanel%7Bdisplay%3Ablock%3Bborder%2Dwidth%3A0%3Bpadding%3A1em%201%2E4em%3Bbackground%3Anone%7D%2Eui%2Dtooltip%7Bpadding%3A8px%3Bposition%3Aabsolute%3Bz%2Dindex%3A9999%3Bmax%2Dwidth%3A300px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%200%205px%20%23aaa%3Bbox%2Dshadow%3A0%200%205px%20%23aaa%7Dbody%20%2Eui%2Dtooltip%7Bborder%2Dwidth%3A2px%7D%2Eui%2Dwidget%7Bfont%2Dfamily%3ATrebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A1%2E1em%7D%2Eui%2Dwidget%20%2Eui%2Dwidget%7Bfont%2Dsize%3A1em%7D%2Eui%2Dwidget%20input%2C%2Eui%2Dwidget%20select%2C%2Eui%2Dwidget%20textarea%2C%2Eui%2Dwidget%20button%7Bfont%2Dfamily%3ATrebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A1em%7D%2Eui%2Dwidget%2Dcontent%7Bborder%3A1px%20solid%20%23ddd%3Bbackground%3A%23eee%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAAIUlEQVQYlWP48ePHfyYGBgaGIUT8%2F%2F8fO5cSFn6J4UQAAJSgIpAFCJPdAAAAAElFTkSuQmCC%29%2050%25%20top%20repeat%2Dx%3Bcolor%3A%23333%7D%2Eui%2Dwidget%2Dcontent%20a%7Bcolor%3A%23333%7D%2Eui%2Dwidget%2Dheader%7Bborder%3A1px%20solid%20%23e78f08%3Bbackground%3A%23f6a828%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAfQAAABkCAYAAABwx8J9AAAOeUlEQVR4nO2dW44buxFAybH2k40ESNaZBSRZVr5i4CYzzIfdcU%2B5nmz2WEOfAxgjkfVi8VGSuiX3r%2F%2F862gAAADwqXn51QEAAADAdSjoAAAAG0BBBwAA2AAKOgAAwAZQ0AEAADaAgg4AALABFHQAAIANoKADAABsAAUdAABgAyjoAAAAG0BBBwAA2AAKOgAAwAZQ0AEAADaAgg4AALABFHQAAIANoKADAABsAAUdAABgAyjoAAAAG0BBBwAA2AAKOgAAwAZQ0AEAADbg0X91BAAAAHAZ3qEDAABsAAUdAABgAyjoAAAAG%2FAYY7Tev11J1x6PMd4pHP0HR%2F8h69nS9KRuJHuOQfqW9rR4NXsaMibLd7Xdi13LgzUOawxWHNbYpD1r%2FjM5tcam%2BZGxaL6lvJUXa814Y7FkrfhndTW8MWt%2BtL1hrUlrz1l59%2BZM8xFhxRqdK9Y4tPi9teHZ1NotO9UYo%2F2s%2BZqJM2PfOrcza8bqt84lGaOno%2BXJO%2Fuz9ciKKTpXvFxa%2B9DKp%2BYzqk9RHfPmQY7n%2F%2FJf%2F%2FGXuLoBAADAU8NH7gAAABtAQQcAANgACjoAAMAGPFrjEjoAAMBnh3foAAAAG0BBBwAA2IBH876T3Xtz%2Bw%2BZ1nS5jP6MfNXuKhuHjqY723b%2BHmEm11LX0tFiXTkfll35uDXf5znOSDaKKaNzZe6ytrN7YnbMkd6KtV3NiaeX9W31tTa%2F3y3bq8%2BQu866SNba562t2ydeDqt%2BruQ9W49W1aLW5s7QFWuhctafeLi9maA8merEZeWvbsRZG4eOpjvbVomjoqvFunI%2BLLtVf15OqzFldK7MXdb2TN6yPjJ6K9Z2NSfVeazancXSX32G3HXWRbIr9rmml7G3eq5X6K6KdcWZNuPLakva%2FFHQe2ttfP%2BbCiKpc%2B4%2FYop8ZGxqdrSYPFkvlkouPM7z0NvPfjU%2FMv5KHBl5T8aK93hu2fHyKf1ZOZBr9uq68XKtjSta09b6qu4dL%2BbIZzR3mRhmxpnFyk1T2s86Wr8mJ%2B1l9tMs1nrU%2FFh71stxZHPWtqZbXRtRXyZW2d6SOnJ%2BvbFnZDVdKxZp28qd1za7D72xNqfv5OvxznFlI3TxN5Kr2K%2FY1NozPmd9VJF2oueyrRpHRt6TycSn9V2xGa2l2XXjPffyPrO%2BZtdLdh1m%2FFTzVBlnlkxuZtdDZn%2Bv2reRrezaqqzpjGz1bKjO5dX9PrOHZ3IZrYXq3tdkvdzNnB8VP5Nj4aY4AACADbAL%2BhjxtZvz9Zvzv7OMh9TPxKHJarF4trR4oz5vTF581jXWjJ%2FMmKQ9LS4rX1HcmetRmRxZufZsa7nSbFoxRXmNrvl667lyfSsaszdvlly0XrQ%2B63HkX4s%2F2jdePNFajsbqxWHZ0vqtdRDFXyFaa1G%2BonFW96s13xmf1prU%2FmrxWfJe%2FjNjs%2FxkY9F0rLnw7FpjybRbPqrjGKP1r3%2F%2F88RKBQAAgGeCj9wBAAA24KW10X780zj3WbJSJvor2zI2pKz0r9nTYozGmrVr2dNsW2OL8ujlKRqDZd9DG0tmrqXfSN%2FyZelb60Jry37glJkP2R7tA82O97y6fjyf0RgysUX%2BNZlob3h2rTg9v5W9q%2F2TcVrylg3Lt%2BfPijGj65030bxm5sEbl2Yv8mfFnHluxZMZjxejtz%2BicUX6VozWeDL72JKL1%2F9Da%2FQUfFlrw1gbyLPr6WT0rBijvlm7Gb9XbEVy2ViizZvVmZlT7Xl1rBm%2FmTFGtjKyGfmZ55kD1mur9s%2BMqbovPbuR79mcezLRWrniw5Ov6Ff2Q2S7sj4yMVXiWvG8Ekd0plT2RzXPmZiuttlrk4%2FcAQAANoCCDgAAsAEUdAAAgA04%2FX%2Fo59%2FRO543pW2Ifk1Gtln2tWsBVruGZ9Maz4EXnxeDlZejzRp%2FZNeyrel5vwkYUcl7xq%2BWfysfkb4Vk7Sh%2FdVi9sZ6oK1nLUZrvZ91vTWTtaHFJMcbtXk%2BvDWq7e9orFo8GjNznWGF3at7NlpDGaz1XGFmzqJYpF7lseZfy5FXS6ycZNdLVHcqZ4uUz%2FjJykv7B9H5957TTXHVi%2Fj2hflce1W%2FajPrL6Mb2bmim%2BmPxnIlZ1571e9Q2lfMiWZD64v8ee2R7Ip5XbGusm0zcczkbvXarxazu3JftZ%2BRzdhZYSNqn81ZZl%2FPnI8zey%2Bbr8oZFp0tnr%2FMWThjR7b5dv3%2FbQ3qjNbGeL3FdG9vbcz8YlWV8dauHSwn%2Bpc1dizz%2FUsp0t5f2rv%2FshYAYBMeq87ttYzvRcXqfmsjE%2Fh4Tf1O%2FnjLFeDesnL3QSn6mbtyMpr%2BYqT33lrXbz8Zze7r%2FaWp0VrtAAAF1HfowyyEow2r0Bo6Y7y1bhXf8Xr7O86V1p%2FytQ%2FcyH%2FV1tklm1X79oJBvph4%2F8nCaO2dTO%2B9vbvHlRcJAL8dj%2FHHv9SOmTNrxVVxgN%2BdMUZrQ38xYeoE%2Fb1%2FeX%2BpQX6K0MVr%2B3f92gsMAFjKeG3vdrJ88yzPhHP%2FGG2MV66hA%2FwOjPEaVP0%2FSvb6y4%2BjY4zW%2Bov9AmC043KDiKn11l94oQCfhDdRcFtr32%2Ba%2BllWFufWfirQ4632oj0DBR0AysjDKLoPtPbpXVdfALT%2BRb135vziQsqHWLrwHIyRWFyjtebcc9WafXl3jJ8uCY%2FoHq4n5sFVNgB4LoxD3Lq35%2B0%2FdwfUhnGjo6TLSxeWvW%2BfT%2BT9K%2FKZmHp7W3rN83hB9VMs463Jotpbj29eHm8fdqdH1s9nromP1N3iAAC%2FM8mvola%2Bsrr6G%2FerdFbZzfqmAq2Dn34FAADYgMf0d3AAAADgaeAdOgAAwAbwDh0AAGADHuYtfaPZ%2F9mO%2BpNwRruUOex4MtXbDGWs1n9YM2M74zOKIYrPsrkiror%2FSNay3Qr2szIV3cz8Vudk5Vo522ytvhZn1m9mr12xo8Xk%2Bbx73Z%2F9HzFUc1CN42rcVrzH8xV%2BrXVvrcVszip7RrMZrWlrfV05x7Nn38x5ssp3BSU39ncseuKxJZ%2BxeUXG09H0u9M3i7TlxZDJX9SXxRt%2Fxkd2HBWZSKfC7PxW5%2BSO765U5kHTm9G5SrTfV6ztu2Kt2r1bPtK%2F43tVlo%2Fq%2BZ6JoVIbojXtxTmb9%2BzZN3OerPI9a%2FP7Yz5yBwAA2ABuigMAANiAB1%2FrBwAA%2BPzwDh0AAGADKOgAAAAbQEEHAADYAAo6AADABvC1NQAAgA3gHToAAMAG2D%2F9CgAAAJ8GPnIHAADYAD5yBwAA2AB%2BKQ4AAGADeIcOAACwAY%2FBNXQAAIBPz0vvrfXkne5ZuUjHsuPZn%2FE9w0fGcNiTf1fa1p7f6WeV%2Fapdbx2f85tZe1GuovEdfrx5vWMvVfbys5DNTXbuIl%2FRXruaPxmn9rzi19ONnmv%2Bq3p35cnyV7WdGUukU9G9C23s1Xh6b%2B1RVaao3%2BOLor7G7szBGMlcGd9HF%2FVZu7%2BSFefDTBG482Cf2Xt3FfUrehWbK6CoXzun%2BdoaAADABnBTHAAAwAbwtTUAAIAN4B06AADABjwaP%2BYOAADw6fn2Dl3eGDfGj7boprnMTXWWfc2H1XaW9%2BQyY5C2LBkr5oxtK34r3qpcZjxevqx5y8hpMVpxRL6yMWbybJGV8daPfByNVVsjldxYcUgdbV1asUdjrpLx4elof8%2F2Zs4eb81o9iNfmTPKWjeRveo5lD0DZ85EzZ53xmVjqOxTLxbZpsWYlfV8yH5L31v7ll5m%2F0f%2Bgjj7v%2F%2F2pws7GgAAAJ4BcQ39V9T24fgdRn8UZ6bfkxnicSYvmsxI9EU6kVz03LJjjSvrz%2BrT%2FFXXlTbv0fii2CpzmB3r8fxqbNHzyjqazbWmb%2FnPzLclY%2B1pz38kZ%2Blm57Oyhqr7yOqL8pCxo%2Fmv7vcM3hi82DQbq%2FdtJQapE9mRczSb22x%2BMjZ8W8pd7r%2FqDfvVw69qL5KZyctnK%2BqzcUV9K4q6Z9fz49m4q6hrbZ%2BpqEudFUXds%2Bm1ZfQqNmfnoRpTde%2FP%2BL6y%2F7K%2BMva19l2LutVXzW02tmtFnbvcAQAANoCCDgAAsAHff8t9tPdfXzueH2%2Ftu9ImOfSj%2FrOM5lPa6KJfk5PxWV%2FFkzKaviUnbUpdLVbNr%2BVPjlf6kXqaTUtPxibltbm1cmz1W3hyWk68WLU58mKw1pe0beVUs6HFp%2Fn18uKtQSt%2BzZ%2Blk5kTb01XZKy2SOdoj84Wb4zZNajFqu11Lz7Z58VvyUn%2Fmb3l5SfKgzcXWbvRnjjbrZxdZzvRXojOIhm7Fpvsi85oza%2F0HcVRPXOy9c3yMc7X0GVgQ3mc%2BXy%2F0u%2F5rMQh2zNxRnazNjUdL8bIZiV2z19kd%2FXzrF%2Brr5q7TAyV9ZXZB7N%2BI58r%2FWTmZXafrPAf7d2Kj%2Bwa9Px6j6M%2BK5bqWXf1rKjkbsZudu%2FPnrve44r%2Fat%2BMn%2Bz5M5PfbH2z23P%2FOUvv7dL3VWfsVX2ujrHKFf8fEbv0cfw3Plf8enFHY9LiuZqDWRvZWO6cp7t83hVzdX6fiTvOnxVk9lM2rit786OpxFNZdyvOg5W5qto9n9HJcT9siROrJz9jb%2FaHCH4VV%2Fx%2FROzRD1issFmx%2F9HxrIjlznm6y%2BddMVfn95m44%2FxZQfYHaVbZehYq8VTW3YrzYGWuqnYr8t%2F7H6P0sRUAAAA8I9zlDgAAsAEvren3BZ6J%2BrN6XbTJ55ZuL8h6%2FioyXemXMXm%2Bz7qW%2FShuLV%2BRjWgs8q9lPxqXFqtHdo4qa60S4xX7V%2BbPsx2tPet5FFs1Fk3e6oviysR0heoe1PqzedfkLZ9RLjJrtbrOIr%2FRGLP5y8pkYsrqZ3LhPY7GWR2PVbsqezNzHli2vLazv8fspsgye2BldaP2qC%2Fra7aoRzFUdVcVgOzGyMSUka%2FY%2ByxFPWNrxdqLZCoHZZbdi3qlzfL1UUU9q5vt%2BwxFPWvD29cri7qns6qoz9iXzx9tvAYuAAAA4Nn5H1zs1G5bhz0MAAAAAElFTkSuQmCC%29%2050%25%2050%25%20repeat%2Dx%3Bcolor%3A%23fff%3Bfont%2Dweight%3Abold%7D%2Eui%2Dwidget%2Dheader%20a%7Bcolor%3A%23fff%7D%2Eui%2Dstate%2Ddefault%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Ddefault%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Ddefault%7Bborder%3A1px%20solid%20%23ccc%3Bbackground%3A%23f6f6f6%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAL0lEQVQ4je3HsQ0AIBDDwIT9F%2F4igpYiAyDk5mRrZvaSJAD4liT32u7bqi0APMcBiYQKDwcroFAAAAAASUVORK5CYII%3D%29%2050%25%2050%25%20repeat%2Dx%3Bfont%2Dweight%3Abold%3Bcolor%3A%231c94c4%7D%2Eui%2Dstate%2Ddefault%20a%2C%2Eui%2Dstate%2Ddefault%20a%3Alink%2C%2Eui%2Dstate%2Ddefault%20a%3Avisited%7Bcolor%3A%231c94c4%3Btext%2Ddecoration%3Anone%7D%2Eui%2Dstate%2Dhover%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Dhover%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Dhover%2C%2Eui%2Dstate%2Dfocus%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Dfocus%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Dfocus%7Bborder%3A1px%20solid%20%23fbcb09%3Bbackground%3A%23fdf5ce%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAARElEQVQ4jWP4%2B%2FPhfyYGBgaGUWKUGCWGL%2FHnLQMTAwMjjGBkYmBiYGBiYGJgZEZlMcNlYRKMCMUQAwbcM6PEKDFKYCEAGrQJAcbElNQAAAAASUVORK5CYII%3D%29%2050%25%2050%25%20repeat%2Dx%3Bfont%2Dweight%3Abold%3Bcolor%3A%23c77405%7D%2Eui%2Dstate%2Dhover%20a%2C%2Eui%2Dstate%2Dhover%20a%3Ahover%2C%2Eui%2Dstate%2Dhover%20a%3Alink%2C%2Eui%2Dstate%2Dhover%20a%3Avisited%2C%2Eui%2Dstate%2Dfocus%20a%2C%2Eui%2Dstate%2Dfocus%20a%3Ahover%2C%2Eui%2Dstate%2Dfocus%20a%3Alink%2C%2Eui%2Dstate%2Dfocus%20a%3Avisited%7Bcolor%3A%23c77405%3Btext%2Ddecoration%3Anone%7D%2Eui%2Dstate%2Dactive%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Dactive%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Dactive%7Bborder%3A1px%20solid%20%23fbd850%3Bbackground%3A%23fff%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAMElEQVQ4je3LIQ4AIBTD0O3f%2F8wrFgmKhMy8pKJKwkhSKeVbbGuAPU9f4PIopTxgAeS0DRtI4yK0AAAAAElFTkSuQmCC%29%2050%25%2050%25%20repeat%2Dx%3Bfont%2Dweight%3Abold%3Bcolor%3A%23eb8f00%7D%2Eui%2Dstate%2Dactive%20a%2C%2Eui%2Dstate%2Dactive%20a%3Alink%2C%2Eui%2Dstate%2Dactive%20a%3Avisited%7Bcolor%3A%23eb8f00%3Btext%2Ddecoration%3Anone%7D%2Eui%2Dstate%2Dhighlight%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Dhighlight%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Dhighlight%7Bborder%3A1px%20solid%20%23fed22f%3Bbackground%3A%23ffe45c%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAAEwK2r2AAAAbklEQVQYlbWOOw7CUBADZ33%2Fa3CxSIiWhOb9sqZ5XYIUhGimWa89%2BHmzAA7IDbktiHFHQR4jAGcF9kCMB6IvKHK7%2FvsZWZDzhdhXRK5TMlyuFfwy%2Fg2cDeGOgoqcFeGKcJm6zjqvuCO7ofiHywneAMFDuRb22m0AAAAASUVORK5CYII%3D%29%2050%25%20top%20repeat%2Dx%3Bcolor%3A%23363636%7D%2Eui%2Dstate%2Dhighlight%20a%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Dhighlight%20a%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Dhighlight%20a%7Bcolor%3A%23363636%7D%2Eui%2Dstate%2Derror%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Derror%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Derror%7Bborder%3A1px%20solid%20%23cd0a0a%3Bbackground%3A%23b81900%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM%2FrhtAAAAy0lEQVRYhe3XQQrCMBSE4d8svIH0Ft5%2F5X3EG7jRTYUYk5ekackgb5alDF8LbZjT7bq8SPJ83NNLPzlfluo9e%2FSFPctyGe37AqrhIAIq4mAFquIAgjIOMh%2FJSNkRD2sCZ%2BPAeIMKOCgAVXCQASrhIAGq4SACKuJgBariAIIyDhp%2B1D1lRzxsE3DmcVgFzj6rTeBsHBhABRwUgCo48E3im6Sv7BPfJFvLfJOMllnxTdJSlotvkp6yOL5JtpSBb5Kxstb4JimV1fKXm%2BQNcHvyUkD%2FBIAAAAAASUVORK5CYII%3D%29%2050%25%2050%25%20repeat%3Bcolor%3A%23fff%7D%2Eui%2Dstate%2Derror%20a%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Derror%20a%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Derror%20a%7Bcolor%3A%23fff%7D%2Eui%2Dstate%2Derror%2Dtext%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Derror%2Dtext%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Derror%2Dtext%7Bcolor%3A%23fff%7D%2Eui%2Dpriority%2Dprimary%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dpriority%2Dprimary%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dpriority%2Dprimary%7Bfont%2Dweight%3Abold%7D%2Eui%2Dpriority%2Dsecondary%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dpriority%2Dsecondary%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dpriority%2Dsecondary%7Bopacity%3A%2E7%3Bfilter%3AAlpha%28Opacity%3D70%29%3Bfont%2Dweight%3Anormal%7D%2Eui%2Dstate%2Ddisabled%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dstate%2Ddisabled%2C%2Eui%2Dwidget%2Dheader%20%2Eui%2Dstate%2Ddisabled%7Bopacity%3A%2E35%3Bfilter%3AAlpha%28Opacity%3D35%29%3Bbackground%2Dimage%3Anone%7D%2Eui%2Dstate%2Ddisabled%20%2Eui%2Dicon%7Bfilter%3AAlpha%28Opacity%3D35%29%7D%2Eui%2Dicon%7Bwidth%3A16px%3Bheight%3A16px%7D%2Eui%2Dicon%2C%2Eui%2Dwidget%2Dcontent%20%2Eui%2Dicon%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiTww4gUAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5%2BkWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1%2FXe%2F3EGgARxPyAgRbIk2%2FhkSz4CJO4%2BHsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb%2F%2FcqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt%2B9FBl3uINQniwEiryEyw9JHqGpQdEFNi%2BB4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ%2FbEx8PEANC%2BuhbpSSggCBAVODVabpI1S%2Fk4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx%2BuMB8grZaR%2BQxl2%2FC2RkZGRkZGRk7A7rBf7J0DR5%2FLUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4%2FMzFNo97qLpFiKFYv%2FkNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x%2F%2BjaZkZGRkZGRcV%2Bx%2FrLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl%2FBJLExBWgG4RFRLFImGmIquPC%2FklEGyCG0AuAXaJJC%2BB8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5%2B4BzFi8NaoN35NRxUvL%2BJJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC%2BRZ4OT4T6gQogDFYk%2B1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY%2BHzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW%2FO16ZvDL5TM4MJIjujz%2FcHypkQuuzRwWJ93BKdIt%2BwCRAPl9kpe2Ikkb2mFgGlxh%2Fi40d3EHfdvoyMjIyMu43ylt%2FIAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN%2FPqNpTQeICvr4TLsDYC06U7BMjshS%2Bv1%2FaT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM%2BYI6vGAti4bTtizB%2BTjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg%2FgQl8MWvytzeSTjgOQBynQdh%2FiXKdxOrGJ%2FRkZGRsb9QmXihGr5%2Bg8GGg9uTh%2BKoVZuNIzV%2BCwRucFBEyr1mVjx4irOxwM1BhirB6Q%2B2eNQi4eqR%2BaF6mELtoMzCR7V9RAFe%2FZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq%2B1DQrNhkmoxS5Jq%2Bu6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp%2F6GDR0oAYfG%2FR6wJExHYZHfhygsv7fEWCOj4bYmsP5A%2BpL4MkTfAnMlD4F%2Br3bobKvTyTA2P%2Fw7PN%2BAgq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7%2FNxtOG46wWNmDtpBEkBzN7rBEvAFHp%2BYTB%2Fq97qPAN4gHFqgBi8uLsC7qPCA6mg41G%2F%2BErByPwEXDdoNxRhOx%2BM5jPEzQugS0ht%2Bb1%2FY3gEnYMAIAOIBE29%2FhIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt%2B7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT%2BjIyMjIw9x7Nn8fJSzG0TmFtO8rZT%2BXT3S3ub%2BtKJbbLd5diTVp50%2BzahyeHSslJ%2FYPrU0fuazrZO2CZ92%2FZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq%2F3divEAN6ZwM200Qjm7EJBZeWm%2FPRWVCbYK7s7u2l4XaCz%2BlzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ%2FMDbIDgPqTulJ%2FxvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy%2FfHV2joaNKu3ffsAnRcBf4K%2F6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP%2Ft%2FgmVdI24%2BG7NIe8JX6Wv3dDyldMA%2B4YB5wwTygtd%2BdwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh%2FoVtr%2BN1DEBJdhRJyd%2FBd%2Fq1z%2BcbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29%2BtiKAEIPn868ejx%2F%2F8rpWP3OEOl5On9OwpcQm0MhafP%2Fey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i%2B9XL73X3N%2Fn%2BZStOzfVfRvYXhrbdKOpEgVQTg%2FwsDuDD3kwOfQNMTJ5y%2B%2FltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0%2BwLfmi8BhZqfw3D4ww%2FwHVLnEd5%2FfgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4%2BbxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f%2BsjrXwb%2F9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd%2FnYVLmno%2BeaNUm%2FeeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9%2FSes3n37y9a0uGqFwFQZsQQbd386DogpgEk%2BdzynsAZMJXq8%2Bns9NeukJ0PYrNATGGefJQlhkLo7DTXr%2By3bNiOsDvrXTz%2FC2q1DXZH84iRNwrP88Nj%2Bu2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB%2Bt7EblWvu9geOFxSnd3ROmT%2BnJyQkhoPlsxVONc%2F3TEdBos%2BjtA%2BZzcwHgTvD1cDjaYCcItA8w9i88A8b%2BmqSjc6Pvqd998QguEQPmQMeo23ODN86%2Bp0%2Fbn1buBkT6%2BoBhNZ%2FPYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA%2Bqf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz%2F9zFAYE1gqQDMT3G6xI9pwdw%2FaIgKoHCS1YGlRnSq9yCjdXjgN3j%2BN27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF%2FPT2c602T7eA7zvhJ9dr%2FvzDjXaLp4Yc5%2B0wllzxzHv3gdmMMM7%2FCcQzKgVBqYTmFn%2BZ%2BmKm8J7k0A5F%2FjgCfjQ1WBhQyiOqD0lYuqBb%2BAyzMw9Ha2G3m6c8qQx%2BAlqnIceQp%2BSb6i9UyQWbhr54%2BAjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u%2BnF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw%2FaHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ%2FH18j97FYuw8QDN4oeKf30osvcSW2ExLo%2BVcbuAuo%2FsUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY%2BstkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt%2BcFbew%2FQRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM%2B434c2R3HeV%2FFfx6jtZu6ijl8h59T655jhR%2BrdHzDOP6beABCheb8O8%2FWFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA%2F3TLd%2BGE7qe3chA5YF5DfY0vK3adfOX%2FgyNp2BW25MHdxAB9qvRiiP3%2FXpQQFGYDU4%2BMi%2F%2F%2FXumXG8pjvaUAOsBGlf4jJt%2BYYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu%2F1%2BXl%2FK5%2Baz8jIyMhYG%2Fz5gJTMF1GtKq%2Fa3rpyCvz5gJTMl9GtKq%2Fa3rpyCmfQ4WwZmS%2BkXFVetb115ST48wEf%2FAGcfG1iw%2BtWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD%2BeYcYwDcAnewOotrZ4OtrPDucqi%2FLRX0%2FRR4qx7Nn4U8g%2BqjffvuN6Gf%2BnC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m%2BOgCn6DroAAaHPVQxKth%2FwkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k%2BDPBwQ6NdcJ%2Bk6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd%2FG1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0%2FIdJADiBNiXl3327WRGgOL%2F9HC%2F0XwlIURkRhC4tz6Z%2Ffu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs%2FwPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr%2F%2B3xgXU9oKmvsHyr7F%2FXA269%2FeveBXrsv7N9QALe%2FtvjA0kPWAXGbvebkbHn%2BD%2FJ5nMcHzx1UAAAAABJRU5ErkJggg%3D%3D%29%7D%2Eui%2Dwidget%2Dheader%20%2Eui%2Dicon%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2Fvz8%2FvywC3%2B8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5%2BkWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1%2FXe%2F3EGgARxPyAgRbIk2%2FhkSz4CJO4%2BHsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb%2F%2FcqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt%2B9FBl3uINQniwEiryEyw9JHqGpQdEFNi%2BB4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ%2FbEx8PEANC%2BuhbpSSggCBAVODVabpI1S%2Fk4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx%2BuMB8grZaR%2BQxl2%2FC2RkZGRkZGRk7A7rBf7J0DR5%2FLUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4%2FMzFNo97qLpFiKFYv%2FkNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x%2F%2BjaZkZGRkZGRcV%2Bx%2FrLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl%2FBJLExBWgG4RFRLFImGmIquPC%2FklEGyCG0AuAXaJJC%2BB8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5%2B4BzFi8NaoN35NRxUvL%2BJJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC%2BRZ4OT4T6gQogDFYk%2B1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY%2BHzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW%2FO16ZvDL5TM4MJIjujz%2FcHypkQuuzRwWJ93BKdIt%2BwCRAPl9kpe2Ikkb2mFgGlxh%2Fi40d3EHfdvoyMjIyMu43ylt%2FIAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN%2FPqNpTQeICvr4TLsDYC06U7BMjshS%2Bv1%2FaT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM%2BYI6vGAti4bTtizB%2BTjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg%2FgQl8MWvytzeSTjgOQBynQdh%2FiXKdxOrGJ%2FRkZGRsb9QmXihGr5%2Bg8GGg9uTh%2BKoVZuNIzV%2BCwRucFBEyr1mVjx4irOxwM1BhirB6Q%2B2eNQi4eqR%2BaF6mELtoMzCR7V9RAFe%2FZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq%2B1DQrNhkmoxS5Jq%2Bu6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp%2F6GDR0oAYfG%2FR6wJExHYZHfhygsv7fEWCOj4bYmsP5A%2BpL4MkTfAnMlD4F%2Br3bobKvTyTA2P%2Fw7PN%2BAgq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7%2FNxtOG46wWNmDtpBEkBzN7rBEvAFHp%2BYTB%2Fq97qPAN4gHFqgBi8uLsC7qPCA6mg41G%2F%2BErByPwEXDdoNxRhOx%2BM5jPEzQugS0ht%2Bb1%2FY3gEnYMAIAOIBE29%2FhIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt%2B7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT%2BjIyMjIw9x7Nn8fJSzG0TmFtO8rZT%2BXT3S3ub%2BtKJbbLd5diTVp50%2BzahyeHSslJ%2FYPrU0fuazrZO2CZ92%2FZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq%2F3divEAN6ZwM200Qjm7EJBZeWm%2FPRWVCbYK7s7u2l4XaCz%2BlzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ%2FMDbIDgPqTulJ%2FxvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy%2FfHV2joaNKu3ffsAnRcBf4K%2F6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP%2Ft%2FgmVdI24%2BG7NIe8JX6Wv3dDyldMA%2B4YB5wwTygtd%2BdwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh%2FoVtr%2BN1DEBJdhRJyd%2FBd%2Fq1z%2BcbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29%2BtiKAEIPn868ejx%2F%2F8rpWP3OEOl5On9OwpcQm0MhafP%2Fey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i%2B9XL73X3N%2Fn%2BZStOzfVfRvYXhrbdKOpEgVQTg%2FwsDuDD3kwOfQNMTJ5y%2B%2FltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0%2BwLfmi8BhZqfw3D4ww%2FwHVLnEd5%2FfgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4%2BbxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f%2BsjrXwb%2F9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd%2FnYVLmno%2BeaNUm%2FeeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9%2FSes3n37y9a0uGqFwFQZsQQbd386DogpgEk%2BdzynsAZMJXq8%2Bns9NeukJ0PYrNATGGefJQlhkLo7DTXr%2By3bNiOsDvrXTz%2FC2q1DXZH84iRNwrP88Nj%2Bu2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB%2Bt7EblWvu9geOFxSnd3ROmT%2BnJyQkhoPlsxVONc%2F3TEdBos%2BjtA%2BZzcwHgTvD1cDjaYCcItA8w9i88A8b%2BmqSjc6Pvqd998QguEQPmQMeo23ODN86%2Bp0%2Fbn1buBkT6%2BoBhNZ%2FPYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA%2Bqf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz%2F9zFAYE1gqQDMT3G6xI9pwdw%2FaIgKoHCS1YGlRnSq9yCjdXjgN3j%2BN27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF%2FPT2c602T7eA7zvhJ9dr%2FvzDjXaLp4Yc5%2B0wllzxzHv3gdmMMM7%2FCcQzKgVBqYTmFn%2BZ%2BmKm8J7k0A5F%2FjgCfjQ1WBhQyiOqD0lYuqBb%2BAyzMw9Ha2G3m6c8qQx%2BAlqnIceQp%2BSb6i9UyQWbhr54%2BAjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u%2BnF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw%2FaHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ%2FH18j97FYuw8QDN4oeKf30osvcSW2ExLo%2BVcbuAuo%2FsUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY%2BstkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt%2BcFbew%2FQRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM%2B434c2R3HeV%2FFfx6jtZu6ijl8h59T655jhR%2BrdHzDOP6beABCheb8O8%2FWFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA%2F3TLd%2BGE7qe3chA5YF5DfY0vK3adfOX%2FgyNp2BW25MHdxAB9qvRiiP3%2FXpQQFGYDU4%2BMi%2F%2F%2FXumXG8pjvaUAOsBGlf4jJt%2BYYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu%2F1%2BXl%2FK5%2Baz8jIyMhYG%2Fz5gJTMF1GtKq%2Fa3rpyCvz5gJTMl9GtKq%2Fa3rpyCmfQ4WwZmS%2BkXFVetb115ST48wEf%2FAGcfG1iw%2BtWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD%2BeYcYwDcAnewOotrZ4OtrPDucqi%2FLRX0%2FRR4qx7Nn4U8g%2BqjffvuN6Gf%2BnC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m%2BOgCn6DroAAaHPVQxKth%2FwkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k%2BDPBwQ6NdcJ%2Bk6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd%2FG1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0%2FIdJADiBNiXl3327WRGgOL%2F9HC%2F0XwlIURkRhC4tz6Z%2Ffu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs%2FwPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr%2F%2B3xgXU9oKmvsHyr7F%2FXA269%2FeveBXrsv7N9QALe%2FtvjA0kPWAXGbvebkbHn%2BD%2FJ5nMcHzx1UAAAAABJRU5ErkJggg%3D%3D%29%7D%2Eui%2Dstate%2Ddefault%20%2Eui%2Dicon%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEXsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgxbIsyZAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5%2BkWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1%2FXe%2F3EGgARxPyAgRbIk2%2FhkSz4CJO4%2BHsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb%2F%2FcqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt%2B9FBl3uINQniwEiryEyw9JHqGpQdEFNi%2BB4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ%2FbEx8PEANC%2BuhbpSSggCBAVODVabpI1S%2Fk4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx%2BuMB8grZaR%2BQxl2%2FC2RkZGRkZGRk7A7rBf7J0DR5%2FLUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4%2FMzFNo97qLpFiKFYv%2FkNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x%2F%2BjaZkZGRkZGRcV%2Bx%2FrLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl%2FBJLExBWgG4RFRLFImGmIquPC%2FklEGyCG0AuAXaJJC%2BB8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5%2B4BzFi8NaoN35NRxUvL%2BJJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC%2BRZ4OT4T6gQogDFYk%2B1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY%2BHzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW%2FO16ZvDL5TM4MJIjujz%2FcHypkQuuzRwWJ93BKdIt%2BwCRAPl9kpe2Ikkb2mFgGlxh%2Fi40d3EHfdvoyMjIyMu43ylt%2FIAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN%2FPqNpTQeICvr4TLsDYC06U7BMjshS%2Bv1%2FaT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM%2BYI6vGAti4bTtizB%2BTjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg%2FgQl8MWvytzeSTjgOQBynQdh%2FiXKdxOrGJ%2FRkZGRsb9QmXihGr5%2Bg8GGg9uTh%2BKoVZuNIzV%2BCwRucFBEyr1mVjx4irOxwM1BhirB6Q%2B2eNQi4eqR%2BaF6mELtoMzCR7V9RAFe%2FZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq%2B1DQrNhkmoxS5Jq%2Bu6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp%2F6GDR0oAYfG%2FR6wJExHYZHfhygsv7fEWCOj4bYmsP5A%2BpL4MkTfAnMlD4F%2Br3bobKvTyTA2P%2Fw7PN%2BAgq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7%2FNxtOG46wWNmDtpBEkBzN7rBEvAFHp%2BYTB%2Fq97qPAN4gHFqgBi8uLsC7qPCA6mg41G%2F%2BErByPwEXDdoNxRhOx%2BM5jPEzQugS0ht%2Bb1%2FY3gEnYMAIAOIBE29%2FhIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt%2B7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT%2BjIyMjIw9x7Nn8fJSzG0TmFtO8rZT%2BXT3S3ub%2BtKJbbLd5diTVp50%2BzahyeHSslJ%2FYPrU0fuazrZO2CZ92%2FZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq%2F3divEAN6ZwM200Qjm7EJBZeWm%2FPRWVCbYK7s7u2l4XaCz%2BlzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ%2FMDbIDgPqTulJ%2FxvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy%2FfHV2joaNKu3ffsAnRcBf4K%2F6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP%2Ft%2FgmVdI24%2BG7NIe8JX6Wv3dDyldMA%2B4YB5wwTygtd%2BdwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh%2FoVtr%2BN1DEBJdhRJyd%2FBd%2Fq1z%2BcbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29%2BtiKAEIPn868ejx%2F%2F8rpWP3OEOl5On9OwpcQm0MhafP%2Fey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i%2B9XL73X3N%2Fn%2BZStOzfVfRvYXhrbdKOpEgVQTg%2FwsDuDD3kwOfQNMTJ5y%2B%2FltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0%2BwLfmi8BhZqfw3D4ww%2FwHVLnEd5%2FfgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4%2BbxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f%2BsjrXwb%2F9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd%2FnYVLmno%2BeaNUm%2FeeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9%2FSes3n37y9a0uGqFwFQZsQQbd386DogpgEk%2BdzynsAZMJXq8%2Bns9NeukJ0PYrNATGGefJQlhkLo7DTXr%2By3bNiOsDvrXTz%2FC2q1DXZH84iRNwrP88Nj%2Bu2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB%2Bt7EblWvu9geOFxSnd3ROmT%2BnJyQkhoPlsxVONc%2F3TEdBos%2BjtA%2BZzcwHgTvD1cDjaYCcItA8w9i88A8b%2BmqSjc6Pvqd998QguEQPmQMeo23ODN86%2Bp0%2Fbn1buBkT6%2BoBhNZ%2FPYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA%2Bqf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz%2F9zFAYE1gqQDMT3G6xI9pwdw%2FaIgKoHCS1YGlRnSq9yCjdXjgN3j%2BN27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF%2FPT2c602T7eA7zvhJ9dr%2FvzDjXaLp4Yc5%2B0wllzxzHv3gdmMMM7%2FCcQzKgVBqYTmFn%2BZ%2BmKm8J7k0A5F%2FjgCfjQ1WBhQyiOqD0lYuqBb%2BAyzMw9Ha2G3m6c8qQx%2BAlqnIceQp%2BSb6i9UyQWbhr54%2BAjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u%2BnF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw%2FaHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ%2FH18j97FYuw8QDN4oeKf30osvcSW2ExLo%2BVcbuAuo%2FsUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY%2BstkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt%2BcFbew%2FQRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM%2B434c2R3HeV%2FFfx6jtZu6ijl8h59T655jhR%2BrdHzDOP6beABCheb8O8%2FWFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA%2F3TLd%2BGE7qe3chA5YF5DfY0vK3adfOX%2FgyNp2BW25MHdxAB9qvRiiP3%2FXpQQFGYDU4%2BMi%2F%2F%2FXumXG8pjvaUAOsBGlf4jJt%2BYYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu%2F1%2BXl%2FK5%2Baz8jIyMhYG%2Fz5gJTMF1GtKq%2Fa3rpyCvz5gJTMl9GtKq%2Fa3rpyCmfQ4WwZmS%2BkXFVetb115ST48wEf%2FAGcfG1iw%2BtWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD%2BeYcYwDcAnewOotrZ4OtrPDucqi%2FLRX0%2FRR4qx7Nn4U8g%2BqjffvuN6Gf%2BnC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m%2BOgCn6DroAAaHPVQxKth%2FwkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k%2BDPBwQ6NdcJ%2Bk6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd%2FG1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0%2FIdJADiBNiXl3327WRGgOL%2F9HC%2F0XwlIURkRhC4tz6Z%2Ffu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs%2FwPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr%2F%2B3xgXU9oKmvsHyr7F%2FXA269%2FeveBXrsv7N9QALe%2FtvjA0kPWAXGbvebkbHn%2BD%2FJ5nMcHzx1UAAAAABJRU5ErkJggg%3D%3D%29%7D%2Eui%2Dstate%2Dhover%20%2Eui%2Dicon%2C%2Eui%2Dstate%2Dfocus%20%2Eui%2Dicon%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEXsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgxbIsyZAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5%2BkWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1%2FXe%2F3EGgARxPyAgRbIk2%2FhkSz4CJO4%2BHsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb%2F%2FcqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt%2B9FBl3uINQniwEiryEyw9JHqGpQdEFNi%2BB4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ%2FbEx8PEANC%2BuhbpSSggCBAVODVabpI1S%2Fk4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx%2BuMB8grZaR%2BQxl2%2FC2RkZGRkZGRk7A7rBf7J0DR5%2FLUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4%2FMzFNo97qLpFiKFYv%2FkNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x%2F%2BjaZkZGRkZGRcV%2Bx%2FrLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl%2FBJLExBWgG4RFRLFImGmIquPC%2FklEGyCG0AuAXaJJC%2BB8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5%2B4BzFi8NaoN35NRxUvL%2BJJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC%2BRZ4OT4T6gQogDFYk%2B1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY%2BHzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW%2FO16ZvDL5TM4MJIjujz%2FcHypkQuuzRwWJ93BKdIt%2BwCRAPl9kpe2Ikkb2mFgGlxh%2Fi40d3EHfdvoyMjIyMu43ylt%2FIAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN%2FPqNpTQeICvr4TLsDYC06U7BMjshS%2Bv1%2FaT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM%2BYI6vGAti4bTtizB%2BTjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg%2FgQl8MWvytzeSTjgOQBynQdh%2FiXKdxOrGJ%2FRkZGRsb9QmXihGr5%2Bg8GGg9uTh%2BKoVZuNIzV%2BCwRucFBEyr1mVjx4irOxwM1BhirB6Q%2B2eNQi4eqR%2BaF6mELtoMzCR7V9RAFe%2FZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq%2B1DQrNhkmoxS5Jq%2Bu6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp%2F6GDR0oAYfG%2FR6wJExHYZHfhygsv7fEWCOj4bYmsP5A%2BpL4MkTfAnMlD4F%2Br3bobKvTyTA2P%2Fw7PN%2BAgq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7%2FNxtOG46wWNmDtpBEkBzN7rBEvAFHp%2BYTB%2Fq97qPAN4gHFqgBi8uLsC7qPCA6mg41G%2F%2BErByPwEXDdoNxRhOx%2BM5jPEzQugS0ht%2Bb1%2FY3gEnYMAIAOIBE29%2FhIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt%2B7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT%2BjIyMjIw9x7Nn8fJSzG0TmFtO8rZT%2BXT3S3ub%2BtKJbbLd5diTVp50%2BzahyeHSslJ%2FYPrU0fuazrZO2CZ92%2FZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq%2F3divEAN6ZwM200Qjm7EJBZeWm%2FPRWVCbYK7s7u2l4XaCz%2BlzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ%2FMDbIDgPqTulJ%2FxvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy%2FfHV2joaNKu3ffsAnRcBf4K%2F6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP%2Ft%2FgmVdI24%2BG7NIe8JX6Wv3dDyldMA%2B4YB5wwTygtd%2BdwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh%2FoVtr%2BN1DEBJdhRJyd%2FBd%2Fq1z%2BcbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29%2BtiKAEIPn868ejx%2F%2F8rpWP3OEOl5On9OwpcQm0MhafP%2Fey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i%2B9XL73X3N%2Fn%2BZStOzfVfRvYXhrbdKOpEgVQTg%2FwsDuDD3kwOfQNMTJ5y%2B%2FltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0%2BwLfmi8BhZqfw3D4ww%2FwHVLnEd5%2FfgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4%2BbxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f%2BsjrXwb%2F9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd%2FnYVLmno%2BeaNUm%2FeeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9%2FSes3n37y9a0uGqFwFQZsQQbd386DogpgEk%2BdzynsAZMJXq8%2Bns9NeukJ0PYrNATGGefJQlhkLo7DTXr%2By3bNiOsDvrXTz%2FC2q1DXZH84iRNwrP88Nj%2Bu2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB%2Bt7EblWvu9geOFxSnd3ROmT%2BnJyQkhoPlsxVONc%2F3TEdBos%2BjtA%2BZzcwHgTvD1cDjaYCcItA8w9i88A8b%2BmqSjc6Pvqd998QguEQPmQMeo23ODN86%2Bp0%2Fbn1buBkT6%2BoBhNZ%2FPYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA%2Bqf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz%2F9zFAYE1gqQDMT3G6xI9pwdw%2FaIgKoHCS1YGlRnSq9yCjdXjgN3j%2BN27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF%2FPT2c602T7eA7zvhJ9dr%2FvzDjXaLp4Yc5%2B0wllzxzHv3gdmMMM7%2FCcQzKgVBqYTmFn%2BZ%2BmKm8J7k0A5F%2FjgCfjQ1WBhQyiOqD0lYuqBb%2BAyzMw9Ha2G3m6c8qQx%2BAlqnIceQp%2BSb6i9UyQWbhr54%2BAjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u%2BnF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw%2FaHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ%2FH18j97FYuw8QDN4oeKf30osvcSW2ExLo%2BVcbuAuo%2FsUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY%2BstkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt%2BcFbew%2FQRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM%2B434c2R3HeV%2FFfx6jtZu6ijl8h59T655jhR%2BrdHzDOP6beABCheb8O8%2FWFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA%2F3TLd%2BGE7qe3chA5YF5DfY0vK3adfOX%2FgyNp2BW25MHdxAB9qvRiiP3%2FXpQQFGYDU4%2BMi%2F%2F%2FXumXG8pjvaUAOsBGlf4jJt%2BYYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu%2F1%2BXl%2FK5%2Baz8jIyMhYG%2Fz5gJTMF1GtKq%2Fa3rpyCvz5gJTMl9GtKq%2Fa3rpyCmfQ4WwZmS%2BkXFVetb115ST48wEf%2FAGcfG1iw%2BtWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD%2BeYcYwDcAnewOotrZ4OtrPDucqi%2FLRX0%2FRR4qx7Nn4U8g%2BqjffvuN6Gf%2BnC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m%2BOgCn6DroAAaHPVQxKth%2FwkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k%2BDPBwQ6NdcJ%2Bk6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd%2FG1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0%2FIdJADiBNiXl3327WRGgOL%2F9HC%2F0XwlIURkRhC4tz6Z%2Ffu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs%2FwPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr%2F%2B3xgXU9oKmvsHyr7F%2FXA269%2FeveBXrsv7N9QALe%2FtvjA0kPWAXGbvebkbHn%2BD%2FJ5nMcHzx1UAAAAABJRU5ErkJggg%3D%3D%29%7D%2Eui%2Dstate%2Dactive%20%2Eui%2Dicon%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEXsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgzsjgxbIsyZAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5%2BkWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1%2FXe%2F3EGgARxPyAgRbIk2%2FhkSz4CJO4%2BHsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb%2F%2FcqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt%2B9FBl3uINQniwEiryEyw9JHqGpQdEFNi%2BB4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ%2FbEx8PEANC%2BuhbpSSggCBAVODVabpI1S%2Fk4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx%2BuMB8grZaR%2BQxl2%2FC2RkZGRkZGRk7A7rBf7J0DR5%2FLUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4%2FMzFNo97qLpFiKFYv%2FkNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x%2F%2BjaZkZGRkZGRcV%2Bx%2FrLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl%2FBJLExBWgG4RFRLFImGmIquPC%2FklEGyCG0AuAXaJJC%2BB8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5%2B4BzFi8NaoN35NRxUvL%2BJJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC%2BRZ4OT4T6gQogDFYk%2B1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY%2BHzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW%2FO16ZvDL5TM4MJIjujz%2FcHypkQuuzRwWJ93BKdIt%2BwCRAPl9kpe2Ikkb2mFgGlxh%2Fi40d3EHfdvoyMjIyMu43ylt%2FIAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN%2FPqNpTQeICvr4TLsDYC06U7BMjshS%2Bv1%2FaT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM%2BYI6vGAti4bTtizB%2BTjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg%2FgQl8MWvytzeSTjgOQBynQdh%2FiXKdxOrGJ%2FRkZGRsb9QmXihGr5%2Bg8GGg9uTh%2BKoVZuNIzV%2BCwRucFBEyr1mVjx4irOxwM1BhirB6Q%2B2eNQi4eqR%2BaF6mELtoMzCR7V9RAFe%2FZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq%2B1DQrNhkmoxS5Jq%2Bu6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp%2F6GDR0oAYfG%2FR6wJExHYZHfhygsv7fEWCOj4bYmsP5A%2BpL4MkTfAnMlD4F%2Br3bobKvTyTA2P%2Fw7PN%2BAgq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7%2FNxtOG46wWNmDtpBEkBzN7rBEvAFHp%2BYTB%2Fq97qPAN4gHFqgBi8uLsC7qPCA6mg41G%2F%2BErByPwEXDdoNxRhOx%2BM5jPEzQugS0ht%2Bb1%2FY3gEnYMAIAOIBE29%2FhIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt%2B7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT%2BjIyMjIw9x7Nn8fJSzG0TmFtO8rZT%2BXT3S3ub%2BtKJbbLd5diTVp50%2BzahyeHSslJ%2FYPrU0fuazrZO2CZ92%2FZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq%2F3divEAN6ZwM200Qjm7EJBZeWm%2FPRWVCbYK7s7u2l4XaCz%2BlzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ%2FMDbIDgPqTulJ%2FxvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy%2FfHV2joaNKu3ffsAnRcBf4K%2F6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP%2Ft%2FgmVdI24%2BG7NIe8JX6Wv3dDyldMA%2B4YB5wwTygtd%2BdwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh%2FoVtr%2BN1DEBJdhRJyd%2FBd%2Fq1z%2BcbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29%2BtiKAEIPn868ejx%2F%2F8rpWP3OEOl5On9OwpcQm0MhafP%2Fey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i%2B9XL73X3N%2Fn%2BZStOzfVfRvYXhrbdKOpEgVQTg%2FwsDuDD3kwOfQNMTJ5y%2B%2FltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0%2BwLfmi8BhZqfw3D4ww%2FwHVLnEd5%2FfgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4%2BbxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f%2BsjrXwb%2F9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd%2FnYVLmno%2BeaNUm%2FeeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9%2FSes3n37y9a0uGqFwFQZsQQbd386DogpgEk%2BdzynsAZMJXq8%2Bns9NeukJ0PYrNATGGefJQlhkLo7DTXr%2By3bNiOsDvrXTz%2FC2q1DXZH84iRNwrP88Nj%2Bu2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB%2Bt7EblWvu9geOFxSnd3ROmT%2BnJyQkhoPlsxVONc%2F3TEdBos%2BjtA%2BZzcwHgTvD1cDjaYCcItA8w9i88A8b%2BmqSjc6Pvqd998QguEQPmQMeo23ODN86%2Bp0%2Fbn1buBkT6%2BoBhNZ%2FPYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA%2Bqf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz%2F9zFAYE1gqQDMT3G6xI9pwdw%2FaIgKoHCS1YGlRnSq9yCjdXjgN3j%2BN27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF%2FPT2c602T7eA7zvhJ9dr%2FvzDjXaLp4Yc5%2B0wllzxzHv3gdmMMM7%2FCcQzKgVBqYTmFn%2BZ%2BmKm8J7k0A5F%2FjgCfjQ1WBhQyiOqD0lYuqBb%2BAyzMw9Ha2G3m6c8qQx%2BAlqnIceQp%2BSb6i9UyQWbhr54%2BAjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u%2BnF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw%2FaHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ%2FH18j97FYuw8QDN4oeKf30osvcSW2ExLo%2BVcbuAuo%2FsUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY%2BstkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt%2BcFbew%2FQRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM%2B434c2R3HeV%2FFfx6jtZu6ijl8h59T655jhR%2BrdHzDOP6beABCheb8O8%2FWFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA%2F3TLd%2BGE7qe3chA5YF5DfY0vK3adfOX%2FgyNp2BW25MHdxAB9qvRiiP3%2FXpQQFGYDU4%2BMi%2F%2F%2FXumXG8pjvaUAOsBGlf4jJt%2BYYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu%2F1%2BXl%2FK5%2Baz8jIyMhYG%2Fz5gJTMF1GtKq%2Fa3rpyCvz5gJTMl9GtKq%2Fa3rpyCmfQ4WwZmS%2BkXFVetb115ST48wEf%2FAGcfG1iw%2BtWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD%2BeYcYwDcAnewOotrZ4OtrPDucqi%2FLRX0%2FRR4qx7Nn4U8g%2BqjffvuN6Gf%2BnC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m%2BOgCn6DroAAaHPVQxKth%2FwkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k%2BDPBwQ6NdcJ%2Bk6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd%2FG1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0%2FIdJADiBNiXl3327WRGgOL%2F9HC%2F0XwlIURkRhC4tz6Z%2Ffu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs%2FwPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr%2F%2B3xgXU9oKmvsHyr7F%2FXA269%2FeveBXrsv7N9QALe%2FtvjA0kPWAXGbvebkbHn%2BD%2FJ5nMcHzx1UAAAAABJRU5ErkJggg%3D%3D%29%7D%2Eui%2Dstate%2Dhighlight%20%2Eui%2Dicon%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvQkjvRBIJjhAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5%2BkWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1%2FXe%2F3EGgARxPyAgRbIk2%2FhkSz4CJO4%2BHsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb%2F%2FcqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt%2B9FBl3uINQniwEiryEyw9JHqGpQdEFNi%2BB4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ%2FbEx8PEANC%2BuhbpSSggCBAVODVabpI1S%2Fk4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx%2BuMB8grZaR%2BQxl2%2FC2RkZGRkZGRk7A7rBf7J0DR5%2FLUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4%2FMzFNo97qLpFiKFYv%2FkNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x%2F%2BjaZkZGRkZGRcV%2Bx%2FrLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl%2FBJLExBWgG4RFRLFImGmIquPC%2FklEGyCG0AuAXaJJC%2BB8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5%2B4BzFi8NaoN35NRxUvL%2BJJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC%2BRZ4OT4T6gQogDFYk%2B1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY%2BHzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW%2FO16ZvDL5TM4MJIjujz%2FcHypkQuuzRwWJ93BKdIt%2BwCRAPl9kpe2Ikkb2mFgGlxh%2Fi40d3EHfdvoyMjIyMu43ylt%2FIAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN%2FPqNpTQeICvr4TLsDYC06U7BMjshS%2Bv1%2FaT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM%2BYI6vGAti4bTtizB%2BTjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg%2FgQl8MWvytzeSTjgOQBynQdh%2FiXKdxOrGJ%2FRkZGRsb9QmXihGr5%2Bg8GGg9uTh%2BKoVZuNIzV%2BCwRucFBEyr1mVjx4irOxwM1BhirB6Q%2B2eNQi4eqR%2BaF6mELtoMzCR7V9RAFe%2FZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq%2B1DQrNhkmoxS5Jq%2Bu6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp%2F6GDR0oAYfG%2FR6wJExHYZHfhygsv7fEWCOj4bYmsP5A%2BpL4MkTfAnMlD4F%2Br3bobKvTyTA2P%2Fw7PN%2BAgq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7%2FNxtOG46wWNmDtpBEkBzN7rBEvAFHp%2BYTB%2Fq97qPAN4gHFqgBi8uLsC7qPCA6mg41G%2F%2BErByPwEXDdoNxRhOx%2BM5jPEzQugS0ht%2Bb1%2FY3gEnYMAIAOIBE29%2FhIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt%2B7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT%2BjIyMjIw9x7Nn8fJSzG0TmFtO8rZT%2BXT3S3ub%2BtKJbbLd5diTVp50%2BzahyeHSslJ%2FYPrU0fuazrZO2CZ92%2FZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq%2F3divEAN6ZwM200Qjm7EJBZeWm%2FPRWVCbYK7s7u2l4XaCz%2BlzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ%2FMDbIDgPqTulJ%2FxvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy%2FfHV2joaNKu3ffsAnRcBf4K%2F6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP%2Ft%2FgmVdI24%2BG7NIe8JX6Wv3dDyldMA%2B4YB5wwTygtd%2BdwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh%2FoVtr%2BN1DEBJdhRJyd%2FBd%2Fq1z%2BcbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29%2BtiKAEIPn868ejx%2F%2F8rpWP3OEOl5On9OwpcQm0MhafP%2Fey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i%2B9XL73X3N%2Fn%2BZStOzfVfRvYXhrbdKOpEgVQTg%2FwsDuDD3kwOfQNMTJ5y%2B%2FltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0%2BwLfmi8BhZqfw3D4ww%2FwHVLnEd5%2FfgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4%2BbxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f%2BsjrXwb%2F9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd%2FnYVLmno%2BeaNUm%2FeeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9%2FSes3n37y9a0uGqFwFQZsQQbd386DogpgEk%2BdzynsAZMJXq8%2Bns9NeukJ0PYrNATGGefJQlhkLo7DTXr%2By3bNiOsDvrXTz%2FC2q1DXZH84iRNwrP88Nj%2Bu2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB%2Bt7EblWvu9geOFxSnd3ROmT%2BnJyQkhoPlsxVONc%2F3TEdBos%2BjtA%2BZzcwHgTvD1cDjaYCcItA8w9i88A8b%2BmqSjc6Pvqd998QguEQPmQMeo23ODN86%2Bp0%2Fbn1buBkT6%2BoBhNZ%2FPYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA%2Bqf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz%2F9zFAYE1gqQDMT3G6xI9pwdw%2FaIgKoHCS1YGlRnSq9yCjdXjgN3j%2BN27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF%2FPT2c602T7eA7zvhJ9dr%2FvzDjXaLp4Yc5%2B0wllzxzHv3gdmMMM7%2FCcQzKgVBqYTmFn%2BZ%2BmKm8J7k0A5F%2FjgCfjQ1WBhQyiOqD0lYuqBb%2BAyzMw9Ha2G3m6c8qQx%2BAlqnIceQp%2BSb6i9UyQWbhr54%2BAjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u%2BnF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw%2FaHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ%2FH18j97FYuw8QDN4oeKf30osvcSW2ExLo%2BVcbuAuo%2FsUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY%2BstkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt%2BcFbew%2FQRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM%2B434c2R3HeV%2FFfx6jtZu6ijl8h59T655jhR%2BrdHzDOP6beABCheb8O8%2FWFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA%2F3TLd%2BGE7qe3chA5YF5DfY0vK3adfOX%2FgyNp2BW25MHdxAB9qvRiiP3%2FXpQQFGYDU4%2BMi%2F%2F%2FXumXG8pjvaUAOsBGlf4jJt%2BYYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu%2F1%2BXl%2FK5%2Baz8jIyMhYG%2Fz5gJTMF1GtKq%2Fa3rpyCvz5gJTMl9GtKq%2Fa3rpyCmfQ4WwZmS%2BkXFVetb115ST48wEf%2FAGcfG1iw%2BtWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD%2BeYcYwDcAnewOotrZ4OtrPDucqi%2FLRX0%2FRR4qx7Nn4U8g%2BqjffvuN6Gf%2BnC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m%2BOgCn6DroAAaHPVQxKth%2FwkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k%2BDPBwQ6NdcJ%2Bk6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd%2FG1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0%2FIdJADiBNiXl3327WRGgOL%2F9HC%2F0XwlIURkRhC4tz6Z%2Ffu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs%2FwPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr%2F%2B3xgXU9oKmvsHyr7F%2FXA269%2FeveBXrsv7N9QALe%2FtvjA0kPWAXGbvebkbHn%2BD%2FJ5nMcHzx1UAAAAABJRU5ErkJggg%3D%3D%29%7D%2Eui%2Dstate%2Derror%20%2Eui%2Dicon%2C%2Eui%2Dstate%2Derror%2Dtext%20%2Eui%2Dicon%7Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEX80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nz80nzkx5%2FeAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5%2BkWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1%2FXe%2F3EGgARxPyAgRbIk2%2FhkSz4CJO4%2BHsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb%2F%2FcqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt%2B9FBl3uINQniwEiryEyw9JHqGpQdEFNi%2BB4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ%2FbEx8PEANC%2BuhbpSSggCBAVODVabpI1S%2Fk4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx%2BuMB8grZaR%2BQxl2%2FC2RkZGRkZGRk7A7rBf7J0DR5%2FLUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4%2FMzFNo97qLpFiKFYv%2FkNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x%2F%2BjaZkZGRkZGRcV%2Bx%2FrLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl%2FBJLExBWgG4RFRLFImGmIquPC%2FklEGyCG0AuAXaJJC%2BB8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5%2B4BzFi8NaoN35NRxUvL%2BJJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC%2BRZ4OT4T6gQogDFYk%2B1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY%2BHzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW%2FO16ZvDL5TM4MJIjujz%2FcHypkQuuzRwWJ93BKdIt%2BwCRAPl9kpe2Ikkb2mFgGlxh%2Fi40d3EHfdvoyMjIyMu43ylt%2FIAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN%2FPqNpTQeICvr4TLsDYC06U7BMjshS%2Bv1%2FaT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM%2BYI6vGAti4bTtizB%2BTjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg%2FgQl8MWvytzeSTjgOQBynQdh%2FiXKdxOrGJ%2FRkZGRsb9QmXihGr5%2Bg8GGg9uTh%2BKoVZuNIzV%2BCwRucFBEyr1mVjx4irOxwM1BhirB6Q%2B2eNQi4eqR%2BaF6mELtoMzCR7V9RAFe%2FZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq%2B1DQrNhkmoxS5Jq%2Bu6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp%2F6GDR0oAYfG%2FR6wJExHYZHfhygsv7fEWCOj4bYmsP5A%2BpL4MkTfAnMlD4F%2Br3bobKvTyTA2P%2Fw7PN%2BAgq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7%2FNxtOG46wWNmDtpBEkBzN7rBEvAFHp%2BYTB%2Fq97qPAN4gHFqgBi8uLsC7qPCA6mg41G%2F%2BErByPwEXDdoNxRhOx%2BM5jPEzQugS0ht%2Bb1%2FY3gEnYMAIAOIBE29%2FhIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt%2B7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT%2BjIyMjIw9x7Nn8fJSzG0TmFtO8rZT%2BXT3S3ub%2BtKJbbLd5diTVp50%2BzahyeHSslJ%2FYPrU0fuazrZO2CZ92%2FZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq%2F3divEAN6ZwM200Qjm7EJBZeWm%2FPRWVCbYK7s7u2l4XaCz%2BlzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ%2FMDbIDgPqTulJ%2FxvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy%2FfHV2joaNKu3ffsAnRcBf4K%2F6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP%2Ft%2FgmVdI24%2BG7NIe8JX6Wv3dDyldMA%2B4YB5wwTygtd%2BdwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh%2FoVtr%2BN1DEBJdhRJyd%2FBd%2Fq1z%2BcbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29%2BtiKAEIPn868ejx%2F%2F8rpWP3OEOl5On9OwpcQm0MhafP%2Fey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i%2B9XL73X3N%2Fn%2BZStOzfVfRvYXhrbdKOpEgVQTg%2FwsDuDD3kwOfQNMTJ5y%2B%2FltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0%2BwLfmi8BhZqfw3D4ww%2FwHVLnEd5%2FfgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4%2BbxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f%2BsjrXwb%2F9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd%2FnYVLmno%2BeaNUm%2FeeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9%2FSes3n37y9a0uGqFwFQZsQQbd386DogpgEk%2BdzynsAZMJXq8%2Bns9NeukJ0PYrNATGGefJQlhkLo7DTXr%2By3bNiOsDvrXTz%2FC2q1DXZH84iRNwrP88Nj%2Bu2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB%2Bt7EblWvu9geOFxSnd3ROmT%2BnJyQkhoPlsxVONc%2F3TEdBos%2BjtA%2BZzcwHgTvD1cDjaYCcItA8w9i88A8b%2BmqSjc6Pvqd998QguEQPmQMeo23ODN86%2Bp0%2Fbn1buBkT6%2BoBhNZ%2FPYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA%2Bqf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz%2F9zFAYE1gqQDMT3G6xI9pwdw%2FaIgKoHCS1YGlRnSq9yCjdXjgN3j%2BN27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF%2FPT2c602T7eA7zvhJ9dr%2FvzDjXaLp4Yc5%2B0wllzxzHv3gdmMMM7%2FCcQzKgVBqYTmFn%2BZ%2BmKm8J7k0A5F%2FjgCfjQ1WBhQyiOqD0lYuqBb%2BAyzMw9Ha2G3m6c8qQx%2BAlqnIceQp%2BSb6i9UyQWbhr54%2BAjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u%2BnF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw%2FaHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ%2FH18j97FYuw8QDN4oeKf30osvcSW2ExLo%2BVcbuAuo%2FsUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY%2BstkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt%2BcFbew%2FQRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM%2B434c2R3HeV%2FFfx6jtZu6ijl8h59T655jhR%2BrdHzDOP6beABCheb8O8%2FWFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA%2F3TLd%2BGE7qe3chA5YF5DfY0vK3adfOX%2FgyNp2BW25MHdxAB9qvRiiP3%2FXpQQFGYDU4%2BMi%2F%2F%2FXumXG8pjvaUAOsBGlf4jJt%2BYYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu%2F1%2BXl%2FK5%2Baz8jIyMhYG%2Fz5gJTMF1GtKq%2Fa3rpyCvz5gJTMl9GtKq%2Fa3rpyCmfQ4WwZmS%2BkXFVetb115ST48wEf%2FAGcfG1iw%2BtWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD%2BeYcYwDcAnewOotrZ4OtrPDucqi%2FLRX0%2FRR4qx7Nn4U8g%2BqjffvuN6Gf%2BnC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m%2BOgCn6DroAAaHPVQxKth%2FwkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k%2BDPBwQ6NdcJ%2Bk6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd%2FG1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0%2FIdJADiBNiXl3327WRGgOL%2F9HC%2F0XwlIURkRhC4tz6Z%2Ffu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs%2FwPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr%2F%2B3xgXU9oKmvsHyr7F%2FXA269%2FeveBXrsv7N9QALe%2FtvjA0kPWAXGbvebkbHn%2BD%2FJ5nMcHzx1UAAAAABJRU5ErkJggg%3D%3D%29%7D%2Eui%2Dicon%2Dblank%7Bbackground%2Dposition%3A16px%2016px%7D%2Eui%2Dicon%2Dcarat%2D1%2Dn%7Bbackground%2Dposition%3A0%200%7D%2Eui%2Dicon%2Dcarat%2D1%2Dne%7Bbackground%2Dposition%3A%2D16px%200%7D%2Eui%2Dicon%2Dcarat%2D1%2De%7Bbackground%2Dposition%3A%2D32px%200%7D%2Eui%2Dicon%2Dcarat%2D1%2Dse%7Bbackground%2Dposition%3A%2D48px%200%7D%2Eui%2Dicon%2Dcarat%2D1%2Ds%7Bbackground%2Dposition%3A%2D64px%200%7D%2Eui%2Dicon%2Dcarat%2D1%2Dsw%7Bbackground%2Dposition%3A%2D80px%200%7D%2Eui%2Dicon%2Dcarat%2D1%2Dw%7Bbackground%2Dposition%3A%2D96px%200%7D%2Eui%2Dicon%2Dcarat%2D1%2Dnw%7Bbackground%2Dposition%3A%2D112px%200%7D%2Eui%2Dicon%2Dcarat%2D2%2Dn%2Ds%7Bbackground%2Dposition%3A%2D128px%200%7D%2Eui%2Dicon%2Dcarat%2D2%2De%2Dw%7Bbackground%2Dposition%3A%2D144px%200%7D%2Eui%2Dicon%2Dtriangle%2D1%2Dn%7Bbackground%2Dposition%3A0%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D1%2Dne%7Bbackground%2Dposition%3A%2D16px%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D1%2De%7Bbackground%2Dposition%3A%2D32px%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D1%2Dse%7Bbackground%2Dposition%3A%2D48px%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D1%2Ds%7Bbackground%2Dposition%3A%2D64px%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D1%2Dsw%7Bbackground%2Dposition%3A%2D80px%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D1%2Dw%7Bbackground%2Dposition%3A%2D96px%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D1%2Dnw%7Bbackground%2Dposition%3A%2D112px%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D2%2Dn%2Ds%7Bbackground%2Dposition%3A%2D128px%20%2D16px%7D%2Eui%2Dicon%2Dtriangle%2D2%2De%2Dw%7Bbackground%2Dposition%3A%2D144px%20%2D16px%7D%2Eui%2Dicon%2Darrow%2D1%2Dn%7Bbackground%2Dposition%3A0%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D1%2Dne%7Bbackground%2Dposition%3A%2D16px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D1%2De%7Bbackground%2Dposition%3A%2D32px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D1%2Dse%7Bbackground%2Dposition%3A%2D48px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D1%2Ds%7Bbackground%2Dposition%3A%2D64px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D1%2Dsw%7Bbackground%2Dposition%3A%2D80px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D1%2Dw%7Bbackground%2Dposition%3A%2D96px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D1%2Dnw%7Bbackground%2Dposition%3A%2D112px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D2%2Dn%2Ds%7Bbackground%2Dposition%3A%2D128px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D2%2Dne%2Dsw%7Bbackground%2Dposition%3A%2D144px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D2%2De%2Dw%7Bbackground%2Dposition%3A%2D160px%20%2D32px%7D%2Eui%2Dicon%2Darrow%2D2%2Dse%2Dnw%7Bbackground%2Dposition%3A%2D176px%20%2D32px%7D%2Eui%2Dicon%2Darrowstop%2D1%2Dn%7Bbackground%2Dposition%3A%2D192px%20%2D32px%7D%2Eui%2Dicon%2Darrowstop%2D1%2De%7Bbackground%2Dposition%3A%2D208px%20%2D32px%7D%2Eui%2Dicon%2Darrowstop%2D1%2Ds%7Bbackground%2Dposition%3A%2D224px%20%2D32px%7D%2Eui%2Dicon%2Darrowstop%2D1%2Dw%7Bbackground%2Dposition%3A%2D240px%20%2D32px%7D%2Eui%2Dicon%2Darrowthick%2D1%2Dn%7Bbackground%2Dposition%3A0%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D1%2Dne%7Bbackground%2Dposition%3A%2D16px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D1%2De%7Bbackground%2Dposition%3A%2D32px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D1%2Dse%7Bbackground%2Dposition%3A%2D48px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D1%2Ds%7Bbackground%2Dposition%3A%2D64px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D1%2Dsw%7Bbackground%2Dposition%3A%2D80px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D1%2Dw%7Bbackground%2Dposition%3A%2D96px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D1%2Dnw%7Bbackground%2Dposition%3A%2D112px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D2%2Dn%2Ds%7Bbackground%2Dposition%3A%2D128px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D2%2Dne%2Dsw%7Bbackground%2Dposition%3A%2D144px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D2%2De%2Dw%7Bbackground%2Dposition%3A%2D160px%20%2D48px%7D%2Eui%2Dicon%2Darrowthick%2D2%2Dse%2Dnw%7Bbackground%2Dposition%3A%2D176px%20%2D48px%7D%2Eui%2Dicon%2Darrowthickstop%2D1%2Dn%7Bbackground%2Dposition%3A%2D192px%20%2D48px%7D%2Eui%2Dicon%2Darrowthickstop%2D1%2De%7Bbackground%2Dposition%3A%2D208px%20%2D48px%7D%2Eui%2Dicon%2Darrowthickstop%2D1%2Ds%7Bbackground%2Dposition%3A%2D224px%20%2D48px%7D%2Eui%2Dicon%2Darrowthickstop%2D1%2Dw%7Bbackground%2Dposition%3A%2D240px%20%2D48px%7D%2Eui%2Dicon%2Darrowreturnthick%2D1%2Dw%7Bbackground%2Dposition%3A0%20%2D64px%7D%2Eui%2Dicon%2Darrowreturnthick%2D1%2Dn%7Bbackground%2Dposition%3A%2D16px%20%2D64px%7D%2Eui%2Dicon%2Darrowreturnthick%2D1%2De%7Bbackground%2Dposition%3A%2D32px%20%2D64px%7D%2Eui%2Dicon%2Darrowreturnthick%2D1%2Ds%7Bbackground%2Dposition%3A%2D48px%20%2D64px%7D%2Eui%2Dicon%2Darrowreturn%2D1%2Dw%7Bbackground%2Dposition%3A%2D64px%20%2D64px%7D%2Eui%2Dicon%2Darrowreturn%2D1%2Dn%7Bbackground%2Dposition%3A%2D80px%20%2D64px%7D%2Eui%2Dicon%2Darrowreturn%2D1%2De%7Bbackground%2Dposition%3A%2D96px%20%2D64px%7D%2Eui%2Dicon%2Darrowreturn%2D1%2Ds%7Bbackground%2Dposition%3A%2D112px%20%2D64px%7D%2Eui%2Dicon%2Darrowrefresh%2D1%2Dw%7Bbackground%2Dposition%3A%2D128px%20%2D64px%7D%2Eui%2Dicon%2Darrowrefresh%2D1%2Dn%7Bbackground%2Dposition%3A%2D144px%20%2D64px%7D%2Eui%2Dicon%2Darrowrefresh%2D1%2De%7Bbackground%2Dposition%3A%2D160px%20%2D64px%7D%2Eui%2Dicon%2Darrowrefresh%2D1%2Ds%7Bbackground%2Dposition%3A%2D176px%20%2D64px%7D%2Eui%2Dicon%2Darrow%2D4%7Bbackground%2Dposition%3A0%20%2D80px%7D%2Eui%2Dicon%2Darrow%2D4%2Ddiag%7Bbackground%2Dposition%3A%2D16px%20%2D80px%7D%2Eui%2Dicon%2Dextlink%7Bbackground%2Dposition%3A%2D32px%20%2D80px%7D%2Eui%2Dicon%2Dnewwin%7Bbackground%2Dposition%3A%2D48px%20%2D80px%7D%2Eui%2Dicon%2Drefresh%7Bbackground%2Dposition%3A%2D64px%20%2D80px%7D%2Eui%2Dicon%2Dshuffle%7Bbackground%2Dposition%3A%2D80px%20%2D80px%7D%2Eui%2Dicon%2Dtransfer%2De%2Dw%7Bbackground%2Dposition%3A%2D96px%20%2D80px%7D%2Eui%2Dicon%2Dtransferthick%2De%2Dw%7Bbackground%2Dposition%3A%2D112px%20%2D80px%7D%2Eui%2Dicon%2Dfolder%2Dcollapsed%7Bbackground%2Dposition%3A0%20%2D96px%7D%2Eui%2Dicon%2Dfolder%2Dopen%7Bbackground%2Dposition%3A%2D16px%20%2D96px%7D%2Eui%2Dicon%2Ddocument%7Bbackground%2Dposition%3A%2D32px%20%2D96px%7D%2Eui%2Dicon%2Ddocument%2Db%7Bbackground%2Dposition%3A%2D48px%20%2D96px%7D%2Eui%2Dicon%2Dnote%7Bbackground%2Dposition%3A%2D64px%20%2D96px%7D%2Eui%2Dicon%2Dmail%2Dclosed%7Bbackground%2Dposition%3A%2D80px%20%2D96px%7D%2Eui%2Dicon%2Dmail%2Dopen%7Bbackground%2Dposition%3A%2D96px%20%2D96px%7D%2Eui%2Dicon%2Dsuitcase%7Bbackground%2Dposition%3A%2D112px%20%2D96px%7D%2Eui%2Dicon%2Dcomment%7Bbackground%2Dposition%3A%2D128px%20%2D96px%7D%2Eui%2Dicon%2Dperson%7Bbackground%2Dposition%3A%2D144px%20%2D96px%7D%2Eui%2Dicon%2Dprint%7Bbackground%2Dposition%3A%2D160px%20%2D96px%7D%2Eui%2Dicon%2Dtrash%7Bbackground%2Dposition%3A%2D176px%20%2D96px%7D%2Eui%2Dicon%2Dlocked%7Bbackground%2Dposition%3A%2D192px%20%2D96px%7D%2Eui%2Dicon%2Dunlocked%7Bbackground%2Dposition%3A%2D208px%20%2D96px%7D%2Eui%2Dicon%2Dbookmark%7Bbackground%2Dposition%3A%2D224px%20%2D96px%7D%2Eui%2Dicon%2Dtag%7Bbackground%2Dposition%3A%2D240px%20%2D96px%7D%2Eui%2Dicon%2Dhome%7Bbackground%2Dposition%3A0%20%2D112px%7D%2Eui%2Dicon%2Dflag%7Bbackground%2Dposition%3A%2D16px%20%2D112px%7D%2Eui%2Dicon%2Dcalendar%7Bbackground%2Dposition%3A%2D32px%20%2D112px%7D%2Eui%2Dicon%2Dcart%7Bbackground%2Dposition%3A%2D48px%20%2D112px%7D%2Eui%2Dicon%2Dpencil%7Bbackground%2Dposition%3A%2D64px%20%2D112px%7D%2Eui%2Dicon%2Dclock%7Bbackground%2Dposition%3A%2D80px%20%2D112px%7D%2Eui%2Dicon%2Ddisk%7Bbackground%2Dposition%3A%2D96px%20%2D112px%7D%2Eui%2Dicon%2Dcalculator%7Bbackground%2Dposition%3A%2D112px%20%2D112px%7D%2Eui%2Dicon%2Dzoomin%7Bbackground%2Dposition%3A%2D128px%20%2D112px%7D%2Eui%2Dicon%2Dzoomout%7Bbackground%2Dposition%3A%2D144px%20%2D112px%7D%2Eui%2Dicon%2Dsearch%7Bbackground%2Dposition%3A%2D160px%20%2D112px%7D%2Eui%2Dicon%2Dwrench%7Bbackground%2Dposition%3A%2D176px%20%2D112px%7D%2Eui%2Dicon%2Dgear%7Bbackground%2Dposition%3A%2D192px%20%2D112px%7D%2Eui%2Dicon%2Dheart%7Bbackground%2Dposition%3A%2D208px%20%2D112px%7D%2Eui%2Dicon%2Dstar%7Bbackground%2Dposition%3A%2D224px%20%2D112px%7D%2Eui%2Dicon%2Dlink%7Bbackground%2Dposition%3A%2D240px%20%2D112px%7D%2Eui%2Dicon%2Dcancel%7Bbackground%2Dposition%3A0%20%2D128px%7D%2Eui%2Dicon%2Dplus%7Bbackground%2Dposition%3A%2D16px%20%2D128px%7D%2Eui%2Dicon%2Dplusthick%7Bbackground%2Dposition%3A%2D32px%20%2D128px%7D%2Eui%2Dicon%2Dminus%7Bbackground%2Dposition%3A%2D48px%20%2D128px%7D%2Eui%2Dicon%2Dminusthick%7Bbackground%2Dposition%3A%2D64px%20%2D128px%7D%2Eui%2Dicon%2Dclose%7Bbackground%2Dposition%3A%2D80px%20%2D128px%7D%2Eui%2Dicon%2Dclosethick%7Bbackground%2Dposition%3A%2D96px%20%2D128px%7D%2Eui%2Dicon%2Dkey%7Bbackground%2Dposition%3A%2D112px%20%2D128px%7D%2Eui%2Dicon%2Dlightbulb%7Bbackground%2Dposition%3A%2D128px%20%2D128px%7D%2Eui%2Dicon%2Dscissors%7Bbackground%2Dposition%3A%2D144px%20%2D128px%7D%2Eui%2Dicon%2Dclipboard%7Bbackground%2Dposition%3A%2D160px%20%2D128px%7D%2Eui%2Dicon%2Dcopy%7Bbackground%2Dposition%3A%2D176px%20%2D128px%7D%2Eui%2Dicon%2Dcontact%7Bbackground%2Dposition%3A%2D192px%20%2D128px%7D%2Eui%2Dicon%2Dimage%7Bbackground%2Dposition%3A%2D208px%20%2D128px%7D%2Eui%2Dicon%2Dvideo%7Bbackground%2Dposition%3A%2D224px%20%2D128px%7D%2Eui%2Dicon%2Dscript%7Bbackground%2Dposition%3A%2D240px%20%2D128px%7D%2Eui%2Dicon%2Dalert%7Bbackground%2Dposition%3A0%20%2D144px%7D%2Eui%2Dicon%2Dinfo%7Bbackground%2Dposition%3A%2D16px%20%2D144px%7D%2Eui%2Dicon%2Dnotice%7Bbackground%2Dposition%3A%2D32px%20%2D144px%7D%2Eui%2Dicon%2Dhelp%7Bbackground%2Dposition%3A%2D48px%20%2D144px%7D%2Eui%2Dicon%2Dcheck%7Bbackground%2Dposition%3A%2D64px%20%2D144px%7D%2Eui%2Dicon%2Dbullet%7Bbackground%2Dposition%3A%2D80px%20%2D144px%7D%2Eui%2Dicon%2Dradio%2Don%7Bbackground%2Dposition%3A%2D96px%20%2D144px%7D%2Eui%2Dicon%2Dradio%2Doff%7Bbackground%2Dposition%3A%2D112px%20%2D144px%7D%2Eui%2Dicon%2Dpin%2Dw%7Bbackground%2Dposition%3A%2D128px%20%2D144px%7D%2Eui%2Dicon%2Dpin%2Ds%7Bbackground%2Dposition%3A%2D144px%20%2D144px%7D%2Eui%2Dicon%2Dplay%7Bbackground%2Dposition%3A0%20%2D160px%7D%2Eui%2Dicon%2Dpause%7Bbackground%2Dposition%3A%2D16px%20%2D160px%7D%2Eui%2Dicon%2Dseek%2Dnext%7Bbackground%2Dposition%3A%2D32px%20%2D160px%7D%2Eui%2Dicon%2Dseek%2Dprev%7Bbackground%2Dposition%3A%2D48px%20%2D160px%7D%2Eui%2Dicon%2Dseek%2Dend%7Bbackground%2Dposition%3A%2D64px%20%2D160px%7D%2Eui%2Dicon%2Dseek%2Dstart%7Bbackground%2Dposition%3A%2D80px%20%2D160px%7D%2Eui%2Dicon%2Dseek%2Dfirst%7Bbackground%2Dposition%3A%2D80px%20%2D160px%7D%2Eui%2Dicon%2Dstop%7Bbackground%2Dposition%3A%2D96px%20%2D160px%7D%2Eui%2Dicon%2Deject%7Bbackground%2Dposition%3A%2D112px%20%2D160px%7D%2Eui%2Dicon%2Dvolume%2Doff%7Bbackground%2Dposition%3A%2D128px%20%2D160px%7D%2Eui%2Dicon%2Dvolume%2Don%7Bbackground%2Dposition%3A%2D144px%20%2D160px%7D%2Eui%2Dicon%2Dpower%7Bbackground%2Dposition%3A0%20%2D176px%7D%2Eui%2Dicon%2Dsignal%2Ddiag%7Bbackground%2Dposition%3A%2D16px%20%2D176px%7D%2Eui%2Dicon%2Dsignal%7Bbackground%2Dposition%3A%2D32px%20%2D176px%7D%2Eui%2Dicon%2Dbattery%2D0%7Bbackground%2Dposition%3A%2D48px%20%2D176px%7D%2Eui%2Dicon%2Dbattery%2D1%7Bbackground%2Dposition%3A%2D64px%20%2D176px%7D%2Eui%2Dicon%2Dbattery%2D2%7Bbackground%2Dposition%3A%2D80px%20%2D176px%7D%2Eui%2Dicon%2Dbattery%2D3%7Bbackground%2Dposition%3A%2D96px%20%2D176px%7D%2Eui%2Dicon%2Dcircle%2Dplus%7Bbackground%2Dposition%3A0%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dminus%7Bbackground%2Dposition%3A%2D16px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dclose%7Bbackground%2Dposition%3A%2D32px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dtriangle%2De%7Bbackground%2Dposition%3A%2D48px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dtriangle%2Ds%7Bbackground%2Dposition%3A%2D64px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dtriangle%2Dw%7Bbackground%2Dposition%3A%2D80px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dtriangle%2Dn%7Bbackground%2Dposition%3A%2D96px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Darrow%2De%7Bbackground%2Dposition%3A%2D112px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Darrow%2Ds%7Bbackground%2Dposition%3A%2D128px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Darrow%2Dw%7Bbackground%2Dposition%3A%2D144px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Darrow%2Dn%7Bbackground%2Dposition%3A%2D160px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dzoomin%7Bbackground%2Dposition%3A%2D176px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dzoomout%7Bbackground%2Dposition%3A%2D192px%20%2D192px%7D%2Eui%2Dicon%2Dcircle%2Dcheck%7Bbackground%2Dposition%3A%2D208px%20%2D192px%7D%2Eui%2Dicon%2Dcirclesmall%2Dplus%7Bbackground%2Dposition%3A0%20%2D208px%7D%2Eui%2Dicon%2Dcirclesmall%2Dminus%7Bbackground%2Dposition%3A%2D16px%20%2D208px%7D%2Eui%2Dicon%2Dcirclesmall%2Dclose%7Bbackground%2Dposition%3A%2D32px%20%2D208px%7D%2Eui%2Dicon%2Dsquaresmall%2Dplus%7Bbackground%2Dposition%3A%2D48px%20%2D208px%7D%2Eui%2Dicon%2Dsquaresmall%2Dminus%7Bbackground%2Dposition%3A%2D64px%20%2D208px%7D%2Eui%2Dicon%2Dsquaresmall%2Dclose%7Bbackground%2Dposition%3A%2D80px%20%2D208px%7D%2Eui%2Dicon%2Dgrip%2Ddotted%2Dvertical%7Bbackground%2Dposition%3A0%20%2D224px%7D%2Eui%2Dicon%2Dgrip%2Ddotted%2Dhorizontal%7Bbackground%2Dposition%3A%2D16px%20%2D224px%7D%2Eui%2Dicon%2Dgrip%2Dsolid%2Dvertical%7Bbackground%2Dposition%3A%2D32px%20%2D224px%7D%2Eui%2Dicon%2Dgrip%2Dsolid%2Dhorizontal%7Bbackground%2Dposition%3A%2D48px%20%2D224px%7D%2Eui%2Dicon%2Dgripsmall%2Ddiagonal%2Dse%7Bbackground%2Dposition%3A%2D64px%20%2D224px%7D%2Eui%2Dicon%2Dgrip%2Ddiagonal%2Dse%7Bbackground%2Dposition%3A%2D80px%20%2D224px%7D%2Eui%2Dcorner%2Dall%2C%2Eui%2Dcorner%2Dtop%2C%2Eui%2Dcorner%2Dleft%2C%2Eui%2Dcorner%2Dtl%7Bborder%2Dtop%2Dleft%2Dradius%3A4px%7D%2Eui%2Dcorner%2Dall%2C%2Eui%2Dcorner%2Dtop%2C%2Eui%2Dcorner%2Dright%2C%2Eui%2Dcorner%2Dtr%7Bborder%2Dtop%2Dright%2Dradius%3A4px%7D%2Eui%2Dcorner%2Dall%2C%2Eui%2Dcorner%2Dbottom%2C%2Eui%2Dcorner%2Dleft%2C%2Eui%2Dcorner%2Dbl%7Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Eui%2Dcorner%2Dall%2C%2Eui%2Dcorner%2Dbottom%2C%2Eui%2Dcorner%2Dright%2C%2Eui%2Dcorner%2Dbr%7Bborder%2Dbottom%2Dright%2Dradius%3A4px%7D%2Eui%2Dwidget%2Doverlay%7Bbackground%3A%23666%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM%2FrhtAAAAwklEQVRYhe3XXQqDMBhE0dtsIKvNwrOC%2BmIhTfNrlAzlm0eR4ShomFcI4U2WGGN%2B6Sfe%2B%2B49d%2FS5O8tKWe37AqrhIAEq4uAEquIAnDIOCh%2FJStkTD9sE7sZB4w0q4KACVMFBAaiEgwyohoMEqIiDE6iKA3DKOBj4Uc%2BUPfGwQ8Cdx2EXuPusbgJ346ABVMBBBaiCA9sktknmyj6xTXK1zDbJalkrtklGykqxTTJTlsY2yZUysE2yVjYa2yS1sl7%2BcpMcegPyrqBRcaoAAAAASUVORK5CYII%3D%29%2050%25%2050%25%20repeat%3Bopacity%3A%2E5%3Bfilter%3AAlpha%28Opacity%3D50%29%7D%2Eui%2Dwidget%2Dshadow%7Bmargin%3A%2D5px%200%200%20%2D5px%3Bpadding%3A5px%3Bbackground%3A%23000%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAeUlEQVRoge3OMQHAIBAAsQf%2FnlsJDDfAkCjImplvHrZvB04EK8FKsBKsBCvBSrASrAQrwUqwEqwEK8FKsBKsBCvBSrASrAQrwUqwEqwEK8FKsBKsBCvBSrASrAQrwUqwEqwEK8FKsBKsBCvBSrASrAQrwUqwEqwEqx92LQHHRpDUNwAAAABJRU5ErkJggg%3D%3D%29%2050%25%2050%25%20repeat%2Dx%3Bopacity%3A%2E2%3Bfilter%3AAlpha%28Opacity%3D20%29%3Bborder%2Dradius%3A5px%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE1LTAzLTExDQoqIGh0dHA6Ly9qcXVlcnl1aS5jb20NCiogSW5jbHVkZXM6IGNvcmUuanMsIHdpZGdldC5qcywgbW91c2UuanMsIHBvc2l0aW9uLmpzLCBhY2NvcmRpb24uanMsIGF1dG9jb21wbGV0ZS5qcywgYnV0dG9uLmpzLCBkYXRlcGlja2VyLmpzLCBkaWFsb2cuanMsIGRyYWdnYWJsZS5qcywgZHJvcHBhYmxlLmpzLCBlZmZlY3QuanMsIGVmZmVjdC1ibGluZC5qcywgZWZmZWN0LWJvdW5jZS5qcywgZWZmZWN0LWNsaXAuanMsIGVmZmVjdC1kcm9wLmpzLCBlZmZlY3QtZXhwbG9kZS5qcywgZWZmZWN0LWZhZGUuanMsIGVmZmVjdC1mb2xkLmpzLCBlZmZlY3QtaGlnaGxpZ2h0LmpzLCBlZmZlY3QtcHVmZi5qcywgZWZmZWN0LXB1bHNhdGUuanMsIGVmZmVjdC1zY2FsZS5qcywgZWZmZWN0LXNoYWtlLmpzLCBlZmZlY3Qtc2l6ZS5qcywgZWZmZWN0LXNsaWRlLmpzLCBlZmZlY3QtdHJhbnNmZXIuanMsIG1lbnUuanMsIHByb2dyZXNzYmFyLmpzLCByZXNpemFibGUuanMsIHNlbGVjdGFibGUuanMsIHNlbGVjdG1lbnUuanMsIHNsaWRlci5qcywgc29ydGFibGUuanMsIHNwaW5uZXIuanMsIHRhYnMuanMsIHRvb2x0aXAuanMNCiogQ29weXJpZ2h0IDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovDQoNCihmdW5jdGlvbihlKXsiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImpxdWVyeSJdLGUpOmUoalF1ZXJ5KX0pKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxzKXt2YXIgbixhLG8scj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImFyZWEiPT09cj8obj10LnBhcmVudE5vZGUsYT1uLm5hbWUsdC5ocmVmJiZhJiYibWFwIj09PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT8obz1lKCJpbWdbdXNlbWFwPScjIithKyInXSIpWzBdLCEhbyYmaShvKSk6ITEpOigvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KHIpPyF0LmRpc2FibGVkOiJhIj09PXI/dC5ocmVmfHxzOnMpJiZpKHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuZXhwci5maWx0ZXJzLnZpc2libGUodCkmJiFlKHQpLnBhcmVudHMoKS5hZGRCYWNrKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImhpZGRlbiI9PT1lLmNzcyh0aGlzLCJ2aXNpYmlsaXR5Iil9KS5sZW5ndGh9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQsaTtlLmxlbmd0aCYmZVswXSE9PWRvY3VtZW50Oyl7aWYodD1lLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PXR8fCJyZWxhdGl2ZSI9PT10fHwiZml4ZWQiPT09dCkmJihpPXBhcnNlSW50KGUuY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKGkpJiYwIT09aSkpcmV0dXJuIGk7ZT1lLnBhcmVudCgpfXJldHVybiAwfWZ1bmN0aW9uIG4oKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPSJ1aS1kYXRlcGlja2VyLWRpdiIsdGhpcy5faW5saW5lQ2xhc3M9InVpLWRhdGVwaWNrZXItaW5saW5lIix0aGlzLl9hcHBlbmRDbGFzcz0idWktZGF0ZXBpY2tlci1hcHBlbmQiLHRoaXMuX3RyaWdnZXJDbGFzcz0idWktZGF0ZXBpY2tlci10cmlnZ2VyIix0aGlzLl9kaWFsb2dDbGFzcz0idWktZGF0ZXBpY2tlci1kaWFsb2ciLHRoaXMuX2Rpc2FibGVDbGFzcz0idWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIix0aGlzLl9jdXJyZW50Q2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLHRoaXMuX2RheU92ZXJDbGFzcz0idWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsWyIiXT17Y2xvc2VUZXh0OiJEb25lIixwcmV2VGV4dDoiUHJldiIsbmV4dFRleHQ6Ik5leHQiLGN1cnJlbnRUZXh0OiJUb2RheSIsbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sd2Vla0hlYWRlcjoiV2siLGRhdGVGb3JtYXQ6Im1tL2RkL3l5IixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OiIifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOiJmb2N1cyIsc2hvd0FuaW06ImZhZGVJbiIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OiIiLGJ1dHRvblRleHQ6Ii4uLiIsYnV0dG9uSW1hZ2U6IiIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZToiYy0xMDpjKzEwIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjoiKzEwIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOiJmYXN0IixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6IiIsYWx0Rm9ybWF0OiIiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sZS5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMucmVnaW9uYWwuZW49ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMucmVnaW9uYWxbImVuLVVTIl09ZS5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbC5lbiksdGhpcy5kcERpdj1hKGUoIjxkaXYgaWQ9JyIrdGhpcy5fbWFpbkRpdklkKyInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpfWZ1bmN0aW9uIGEodCl7dmFyIGk9ImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7cmV0dXJuIHQuZGVsZWdhdGUoaSwibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKX0pLmRlbGVnYXRlKGksIm1vdXNlb3ZlciIsbyl9ZnVuY3Rpb24gbygpe2UuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIodi5pbmxpbmU/di5kcERpdi5wYXJlbnQoKVswXTp2LmlucHV0WzBdKXx8KGUodGhpcykucGFyZW50cygiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKS5maW5kKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKSl9ZnVuY3Rpb24gcih0LGkpe2UuZXh0ZW5kKHQsaSk7Zm9yKHZhciBzIGluIGkpbnVsbD09aVtzXSYmKHRbc109aVtzXSk7cmV0dXJuIHR9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQudmFsKCk7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcmVmcmVzaCgpLHQhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIpfX1lLnVpPWUudWl8fHt9LGUuZXh0ZW5kKGUudWkse3ZlcnNpb246IjEuMTEuNCIsa2V5Q29kZTp7QkFDS1NQQUNFOjgsQ09NTUE6MTg4LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixMRUZUOjM3LFBBR0VfRE9XTjozNCxQQUdFX1VQOjMzLFBFUklPRDoxOTAsUklHSFQ6MzksU1BBQ0U6MzIsVEFCOjksVVA6Mzh9fSksZS5mbi5leHRlbmQoe3Njcm9sbFBhcmVudDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmNzcygicG9zaXRpb24iKSxzPSJhYnNvbHV0ZSI9PT1pLG49dD8vKGF1dG98c2Nyb2xsfGhpZGRlbikvOi8oYXV0b3xzY3JvbGwpLyxhPXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7cmV0dXJuIHMmJiJzdGF0aWMiPT09dC5jc3MoInBvc2l0aW9uIik/ITE6bi50ZXN0KHQuY3NzKCJvdmVyZmxvdyIpK3QuY3NzKCJvdmVyZmxvdy15IikrdC5jc3MoIm92ZXJmbG93LXgiKSl9KS5lcSgwKTtyZXR1cm4iZml4ZWQiIT09aSYmYS5sZW5ndGg/YTplKHRoaXNbMF0ub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQpfSx1bmlxdWVJZDpmdW5jdGlvbigpe3ZhciBlPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuaWR8fCh0aGlzLmlkPSJ1aS1pZC0iKyArK2UpfSl9fSgpLHJlbW92ZVVuaXF1ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpey9edWktaWQtXGQrJC8udGVzdCh0aGlzLmlkKSYmZSh0aGlzKS5yZW1vdmVBdHRyKCJpZCIpfSl9fSksZS5leHRlbmQoZS5leHByWyI6Il0se2RhdGE6ZS5leHByLmNyZWF0ZVBzZXVkbz9lLmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4hIWUuZGF0YShpLHQpfX0pOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4hIWUuZGF0YSh0LHNbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24oaSl7cmV0dXJuIHQoaSwhaXNOYU4oZS5hdHRyKGksInRhYmluZGV4IikpKX0sdGFiYmFibGU6ZnVuY3Rpb24oaSl7dmFyIHM9ZS5hdHRyKGksInRhYmluZGV4Iiksbj1pc05hTihzKTtyZXR1cm4obnx8cz49MCkmJnQoaSwhbil9fSksZSgiPGE+Iikub3V0ZXJXaWR0aCgxKS5qcXVlcnl8fGUuZWFjaChbIldpZHRoIiwiSGVpZ2h0Il0sZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBzKHQsaSxzLGEpe3JldHVybiBlLmVhY2gobixmdW5jdGlvbigpe2ktPXBhcnNlRmxvYXQoZS5jc3ModCwicGFkZGluZyIrdGhpcykpfHwwLHMmJihpLT1wYXJzZUZsb2F0KGUuY3NzKHQsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDApLGEmJihpLT1wYXJzZUZsb2F0KGUuY3NzKHQsIm1hcmdpbiIrdGhpcykpfHwwKX0pLGl9dmFyIG49IldpZHRoIj09PWk/WyJMZWZ0IiwiUmlnaHQiXTpbIlRvcCIsIkJvdHRvbSJdLGE9aS50b0xvd2VyQ2FzZSgpLG89e2lubmVyV2lkdGg6ZS5mbi5pbm5lcldpZHRoLGlubmVySGVpZ2h0OmUuZm4uaW5uZXJIZWlnaHQsb3V0ZXJXaWR0aDplLmZuLm91dGVyV2lkdGgsb3V0ZXJIZWlnaHQ6ZS5mbi5vdXRlckhlaWdodH07ZS5mblsiaW5uZXIiK2ldPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P29bImlubmVyIitpXS5jYWxsKHRoaXMpOnRoaXMuZWFjaChmdW5jdGlvbigpe2UodGhpcykuY3NzKGEscyh0aGlzLHQpKyJweCIpfSl9LGUuZm5bIm91dGVyIitpXT1mdW5jdGlvbih0LG4pe3JldHVybiJudW1iZXIiIT10eXBlb2YgdD9vWyJvdXRlciIraV0uY2FsbCh0aGlzLHQpOnRoaXMuZWFjaChmdW5jdGlvbigpe2UodGhpcykuY3NzKGEscyh0aGlzLHQsITAsbikrInB4Iil9KX19KSxlLmZuLmFkZEJhY2t8fChlLmZuLmFkZEJhY2s9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfSksZSgiPGE+IikuZGF0YSgiYS1iIiwiYSIpLnJlbW92ZURhdGEoImEtYiIpLmRhdGEoImEtYiIpJiYoZS5mbi5yZW1vdmVEYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LmNhbGwodGhpcyxlLmNhbWVsQ2FzZShpKSk6dC5jYWxsKHRoaXMpfX0oZS5mbi5yZW1vdmVEYXRhKSksZS51aS5pZT0hIS9tc2llIFtcdy5dKy8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpLGUuZm4uZXh0ZW5kKHtmb2N1czpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSxzKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSh0KS5mb2N1cygpLHMmJnMuY2FsbCh0KX0saSl9KTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KGUuZm4uZm9jdXMpLGRpc2FibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT0ib25zZWxlY3RzdGFydCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKT8ic2VsZWN0c3RhcnQiOiJtb3VzZWRvd24iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmJpbmQoZSsiLnVpLWRpc2FibGVTZWxlY3Rpb24iLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0pfX0oKSxlbmFibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoIi51aS1kaXNhYmxlU2VsZWN0aW9uIil9LHpJbmRleDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT10KXJldHVybiB0aGlzLmNzcygiekluZGV4Iix0KTtpZih0aGlzLmxlbmd0aClmb3IodmFyIGkscyxuPWUodGhpc1swXSk7bi5sZW5ndGgmJm5bMF0hPT1kb2N1bWVudDspe2lmKGk9bi5jc3MoInBvc2l0aW9uIiksKCJhYnNvbHV0ZSI9PT1pfHwicmVsYXRpdmUiPT09aXx8ImZpeGVkIj09PWkpJiYocz1wYXJzZUludChuLmNzcygiekluZGV4IiksMTApLCFpc05hTihzKSYmMCE9PXMpKXJldHVybiBzO249bi5wYXJlbnQoKX1yZXR1cm4gMH19KSxlLnVpLnBsdWdpbj17YWRkOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhPWUudWlbdF0ucHJvdG90eXBlO2ZvcihuIGluIHMpYS5wbHVnaW5zW25dPWEucGx1Z2luc1tuXXx8W10sYS5wbHVnaW5zW25dLnB1c2goW2ksc1tuXV0pfSxjYWxsOmZ1bmN0aW9uKGUsdCxpLHMpe3ZhciBuLGE9ZS5wbHVnaW5zW3RdO2lmKGEmJihzfHxlLmVsZW1lbnRbMF0ucGFyZW50Tm9kZSYmMTEhPT1lLmVsZW1lbnRbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZSkpZm9yKG49MDthLmxlbmd0aD5uO24rKyllLm9wdGlvbnNbYVtuXVswXV0mJmFbbl1bMV0uYXBwbHkoZS5lbGVtZW50LGkpfX07dmFyIGw9MCx1PUFycmF5LnByb3RvdHlwZS5zbGljZTtlLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHMsbixhO2ZvcihhPTA7bnVsbCE9KG49aVthXSk7YSsrKXRyeXtzPWUuX2RhdGEobiwiZXZlbnRzIikscyYmcy5yZW1vdmUmJmUobikudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKG8pe310KGkpfX0oZS5jbGVhbkRhdGEpLGUud2lkZ2V0PWZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhLG8scixoPXt9LGw9dC5zcGxpdCgiLiIpWzBdO3JldHVybiB0PXQuc3BsaXQoIi4iKVsxXSxuPWwrIi0iK3Qsc3x8KHM9aSxpPWUuV2lkZ2V0KSxlLmV4cHJbIjoiXVtuLnRvTG93ZXJDYXNlKCldPWZ1bmN0aW9uKHQpe3JldHVybiEhZS5kYXRhKHQsbil9LGVbbF09ZVtsXXx8e30sYT1lW2xdW3RdLG89ZVtsXVt0XT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9jcmVhdGVXaWRnZXQ/KGFyZ3VtZW50cy5sZW5ndGgmJnRoaXMuX2NyZWF0ZVdpZGdldChlLHQpLHZvaWQgMCk6bmV3IG8oZSx0KX0sZS5leHRlbmQobyxhLHt2ZXJzaW9uOnMudmVyc2lvbixfcHJvdG86ZS5leHRlbmQoe30scyksX2NoaWxkQ29uc3RydWN0b3JzOltdfSkscj1uZXcgaSxyLm9wdGlvbnM9ZS53aWRnZXQuZXh0ZW5kKHt9LHIub3B0aW9ucyksZS5lYWNoKHMsZnVuY3Rpb24odCxzKXtyZXR1cm4gZS5pc0Z1bmN0aW9uKHMpPyhoW3RdPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wcm90b3R5cGVbdF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuPWZ1bmN0aW9uKGUpe3JldHVybiBpLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGUpfTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMuX3N1cGVyLGE9dGhpcy5fc3VwZXJBcHBseTtyZXR1cm4gdGhpcy5fc3VwZXI9ZSx0aGlzLl9zdXBlckFwcGx5PW4sdD1zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9zdXBlcj1pLHRoaXMuX3N1cGVyQXBwbHk9YSx0fX0oKSx2b2lkIDApOihoW3RdPXMsdm9pZCAwKX0pLG8ucHJvdG90eXBlPWUud2lkZ2V0LmV4dGVuZChyLHt3aWRnZXRFdmVudFByZWZpeDphP3Iud2lkZ2V0RXZlbnRQcmVmaXh8fHQ6dH0saCx7Y29uc3RydWN0b3I6byxuYW1lc3BhY2U6bCx3aWRnZXROYW1lOnQsd2lkZ2V0RnVsbE5hbWU6bn0pLGE/KGUuZWFjaChhLl9jaGlsZENvbnN0cnVjdG9ycyxmdW5jdGlvbih0LGkpe3ZhciBzPWkucHJvdG90eXBlO2Uud2lkZ2V0KHMubmFtZXNwYWNlKyIuIitzLndpZGdldE5hbWUsbyxpLl9wcm90byl9KSxkZWxldGUgYS5fY2hpbGRDb25zdHJ1Y3RvcnMpOmkuX2NoaWxkQ29uc3RydWN0b3JzLnB1c2gobyksZS53aWRnZXQuYnJpZGdlKHQsbyksb30sZS53aWRnZXQuZXh0ZW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxzLG49dS5jYWxsKGFyZ3VtZW50cywxKSxhPTAsbz1uLmxlbmd0aDtvPmE7YSsrKWZvcihpIGluIG5bYV0pcz1uW2FdW2ldLG5bYV0uaGFzT3duUHJvcGVydHkoaSkmJnZvaWQgMCE9PXMmJih0W2ldPWUuaXNQbGFpbk9iamVjdChzKT9lLmlzUGxhaW5PYmplY3QodFtpXSk/ZS53aWRnZXQuZXh0ZW5kKHt9LHRbaV0scyk6ZS53aWRnZXQuZXh0ZW5kKHt9LHMpOnMpO3JldHVybiB0fSxlLndpZGdldC5icmlkZ2U9ZnVuY3Rpb24odCxpKXt2YXIgcz1pLnByb3RvdHlwZS53aWRnZXRGdWxsTmFtZXx8dDtlLmZuW3RdPWZ1bmN0aW9uKG4pe3ZhciBhPSJzdHJpbmciPT10eXBlb2YgbixvPXUuY2FsbChhcmd1bWVudHMsMSkscj10aGlzO3JldHVybiBhP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpLGE9ZS5kYXRhKHRoaXMscyk7cmV0dXJuImluc3RhbmNlIj09PW4/KHI9YSwhMSk6YT9lLmlzRnVuY3Rpb24oYVtuXSkmJiJfIiE9PW4uY2hhckF0KDApPyhpPWFbbl0uYXBwbHkoYSxvKSxpIT09YSYmdm9pZCAwIT09aT8ocj1pJiZpLmpxdWVyeT9yLnB1c2hTdGFjayhpLmdldCgpKTppLCExKTp2b2lkIDApOmUuZXJyb3IoIm5vIHN1Y2ggbWV0aG9kICciK24rIicgZm9yICIrdCsiIHdpZGdldCBpbnN0YW5jZSIpOmUuZXJyb3IoImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gIit0KyIgcHJpb3IgdG8gaW5pdGlhbGl6YXRpb247ICIrImF0dGVtcHRlZCB0byBjYWxsIG1ldGhvZCAnIituKyInIil9KTooby5sZW5ndGgmJihuPWUud2lkZ2V0LmV4dGVuZC5hcHBseShudWxsLFtuXS5jb25jYXQobykpKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lLmRhdGEodGhpcyxzKTt0Pyh0Lm9wdGlvbihufHx7fSksdC5faW5pdCYmdC5faW5pdCgpKTplLmRhdGEodGhpcyxzLG5ldyBpKG4sdGhpcykpfSkpLHJ9fSxlLldpZGdldD1mdW5jdGlvbigpe30sZS5XaWRnZXQuX2NoaWxkQ29uc3RydWN0b3JzPVtdLGUuV2lkZ2V0LnByb3RvdHlwZT17d2lkZ2V0TmFtZToid2lkZ2V0Iix3aWRnZXRFdmVudFByZWZpeDoiIixkZWZhdWx0RWxlbWVudDoiPGRpdj4iLG9wdGlvbnM6e2Rpc2FibGVkOiExLGNyZWF0ZTpudWxsfSxfY3JlYXRlV2lkZ2V0OmZ1bmN0aW9uKHQsaSl7aT1lKGl8fHRoaXMuZGVmYXVsdEVsZW1lbnR8fHRoaXMpWzBdLHRoaXMuZWxlbWVudD1lKGkpLHRoaXMudXVpZD1sKyssdGhpcy5ldmVudE5hbWVzcGFjZT0iLiIrdGhpcy53aWRnZXROYW1lK3RoaXMudXVpZCx0aGlzLmJpbmRpbmdzPWUoKSx0aGlzLmhvdmVyYWJsZT1lKCksdGhpcy5mb2N1c2FibGU9ZSgpLGkhPT10aGlzJiYoZS5kYXRhKGksdGhpcy53aWRnZXRGdWxsTmFtZSx0aGlzKSx0aGlzLl9vbighMCx0aGlzLmVsZW1lbnQse3JlbW92ZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PWkmJnRoaXMuZGVzdHJveSgpfX0pLHRoaXMuZG9jdW1lbnQ9ZShpLnN0eWxlP2kub3duZXJEb2N1bWVudDppLmRvY3VtZW50fHxpKSx0aGlzLndpbmRvdz1lKHRoaXMuZG9jdW1lbnRbMF0uZGVmYXVsdFZpZXd8fHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksdGhpcy5vcHRpb25zPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMsdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLHQpLHRoaXMuX2NyZWF0ZSgpLHRoaXMuX3RyaWdnZXIoImNyZWF0ZSIsbnVsbCx0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSksdGhpcy5faW5pdCgpfSxfZ2V0Q3JlYXRlT3B0aW9uczplLm5vb3AsX2dldENyZWF0ZUV2ZW50RGF0YTplLm5vb3AsX2NyZWF0ZTplLm5vb3AsX2luaXQ6ZS5ub29wLGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95KCksdGhpcy5lbGVtZW50LnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLnJlbW92ZURhdGEoZS5jYW1lbENhc2UodGhpcy53aWRnZXRGdWxsTmFtZSkpLHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQgIisidWktc3RhdGUtZGlzYWJsZWQiKSx0aGlzLmJpbmRpbmdzLnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sX2Rlc3Ryb3k6ZS5ub29wLHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPXQ7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihvPXt9LHM9dC5zcGxpdCgiLiIpLHQ9cy5zaGlmdCgpLHMubGVuZ3RoKXtmb3Iobj1vW3RdPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnNbdF0pLGE9MDtzLmxlbmd0aC0xPmE7YSsrKW5bc1thXV09bltzW2FdXXx8e30sbj1uW3NbYV1dO2lmKHQ9cy5wb3AoKSwxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09blt0XT9udWxsOm5bdF07blt0XT1pfWVsc2V7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9uc1t0XT9udWxsOnRoaXMub3B0aW9uc1t0XTtvW3RdPWl9cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMobyksdGhpc30sX3NldE9wdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSl0aGlzLl9zZXRPcHRpb24odCxlW3RdKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9wdGlvbnNbZV09dCwiZGlzYWJsZWQiPT09ZSYmKHRoaXMud2lkZ2V0KCkudG9nZ2xlQ2xhc3ModGhpcy53aWRnZXRGdWxsTmFtZSsiLWRpc2FibGVkIiwhIXQpLHQmJih0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSkpLHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDohMX0pfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiEwfSl9LF9vbjpmdW5jdGlvbih0LGkscyl7dmFyIG4sYT10aGlzOyJib29sZWFuIiE9dHlwZW9mIHQmJihzPWksaT10LHQ9ITEpLHM/KGk9bj1lKGkpLHRoaXMuYmluZGluZ3M9dGhpcy5iaW5kaW5ncy5hZGQoaSkpOihzPWksaT10aGlzLmVsZW1lbnQsbj10aGlzLndpZGdldCgpKSxlLmVhY2gocyxmdW5jdGlvbihzLG8pe2Z1bmN0aW9uIHIoKXtyZXR1cm4gdHx8YS5vcHRpb25zLmRpc2FibGVkIT09ITAmJiFlKHRoaXMpLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpPygic3RyaW5nIj09dHlwZW9mIG8/YVtvXTpvKS5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSJzdHJpbmciIT10eXBlb2YgbyYmKHIuZ3VpZD1vLmd1aWQ9by5ndWlkfHxyLmd1aWR8fGUuZ3VpZCsrKTt2YXIgaD1zLm1hdGNoKC9eKFtcdzotXSopXHMqKC4qKSQvKSxsPWhbMV0rYS5ldmVudE5hbWVzcGFjZSx1PWhbMl07dT9uLmRlbGVnYXRlKHUsbCxyKTppLmJpbmQobCxyKX0pfSxfb2ZmOmZ1bmN0aW9uKHQsaSl7aT0oaXx8IiIpLnNwbGl0KCIgIikuam9pbih0aGlzLmV2ZW50TmFtZXNwYWNlKyIgIikrdGhpcy5ldmVudE5hbWVzcGFjZSx0LnVuYmluZChpKS51bmRlbGVnYXRlKGkpLHRoaXMuYmluZGluZ3M9ZSh0aGlzLmJpbmRpbmdzLm5vdCh0KS5nZXQoKSksdGhpcy5mb2N1c2FibGU9ZSh0aGlzLmZvY3VzYWJsZS5ub3QodCkuZ2V0KCkpLHRoaXMuaG92ZXJhYmxlPWUodGhpcy5ob3ZlcmFibGUubm90KHQpLmdldCgpKX0sX2RlbGF5OmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3JldHVybigic3RyaW5nIj09dHlwZW9mIGU/c1tlXTplKS5hcHBseShzLGFyZ3VtZW50cyl9dmFyIHM9dGhpcztyZXR1cm4gc2V0VGltZW91dChpLHR8fDApfSxfaG92ZXJhYmxlOmZ1bmN0aW9uKHQpe3RoaXMuaG92ZXJhYmxlPXRoaXMuaG92ZXJhYmxlLmFkZCh0KSx0aGlzLl9vbih0LHttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9fSl9LF9mb2N1c2FibGU6ZnVuY3Rpb24odCl7dGhpcy5mb2N1c2FibGU9dGhpcy5mb2N1c2FibGUuYWRkKHQpLHRoaXMuX29uKHQse2ZvY3VzaW46ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxmb2N1c291dDpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9fSl9LF90cmlnZ2VyOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhLG89dGhpcy5vcHRpb25zW3RdO2lmKHM9c3x8e30saT1lLkV2ZW50KGkpLGkudHlwZT0odD09PXRoaXMud2lkZ2V0RXZlbnRQcmVmaXg/dDp0aGlzLndpZGdldEV2ZW50UHJlZml4K3QpLnRvTG93ZXJDYXNlKCksaS50YXJnZXQ9dGhpcy5lbGVtZW50WzBdLGE9aS5vcmlnaW5hbEV2ZW50KWZvcihuIGluIGEpbiBpbiBpfHwoaVtuXT1hW25dKTtyZXR1cm4gdGhpcy5lbGVtZW50LnRyaWdnZXIoaSxzKSwhKGUuaXNGdW5jdGlvbihvKSYmby5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW2ldLmNvbmNhdChzKSk9PT0hMXx8aS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl9fSxlLmVhY2goe3Nob3c6ImZhZGVJbiIsaGlkZToiZmFkZU91dCJ9LGZ1bmN0aW9uKHQsaSl7ZS5XaWRnZXQucHJvdG90eXBlWyJfIit0XT1mdW5jdGlvbihzLG4sYSl7InN0cmluZyI9PXR5cGVvZiBuJiYobj17ZWZmZWN0Om59KTt2YXIgbyxyPW4/bj09PSEwfHwibnVtYmVyIj09dHlwZW9mIG4/aTpuLmVmZmVjdHx8aTp0O249bnx8e30sIm51bWJlciI9PXR5cGVvZiBuJiYobj17ZHVyYXRpb246bn0pLG89IWUuaXNFbXB0eU9iamVjdChuKSxuLmNvbXBsZXRlPWEsbi5kZWxheSYmcy5kZWxheShuLmRlbGF5KSxvJiZlLmVmZmVjdHMmJmUuZWZmZWN0cy5lZmZlY3Rbcl0/c1t0XShuKTpyIT09dCYmc1tyXT9zW3JdKG4uZHVyYXRpb24sbi5lYXNpbmcsYSk6cy5xdWV1ZShmdW5jdGlvbihpKXtlKHRoaXMpW3RdKCksYSYmYS5jYWxsKHNbMF0pLGkoKX0pfX0pLGUud2lkZ2V0O3ZhciBkPSExO2UoZG9jdW1lbnQpLm1vdXNldXAoZnVuY3Rpb24oKXtkPSExfSksZS53aWRnZXQoInVpLm1vdXNlIix7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOntjYW5jZWw6ImlucHV0LHRleHRhcmVhLGJ1dHRvbixzZWxlY3Qsb3B0aW9uIixkaXN0YW5jZToxLGRlbGF5OjB9LF9tb3VzZUluaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZWxlbWVudC5iaW5kKCJtb3VzZWRvd24uIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oZSl7cmV0dXJuIHQuX21vdXNlRG93bihlKX0pLmJpbmQoImNsaWNrLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGkpe3JldHVybiEwPT09ZS5kYXRhKGkudGFyZ2V0LHQud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50Iik/KGUucmVtb3ZlRGF0YShpLnRhcmdldCx0LndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpLGkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksITEpOnZvaWQgMH0pLHRoaXMuc3RhcnRlZD0hMX0sX21vdXNlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC51bmJpbmQoIi4iK3RoaXMud2lkZ2V0TmFtZSksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUmJnRoaXMuZG9jdW1lbnQudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpfSxfbW91c2VEb3duOmZ1bmN0aW9uKHQpe2lmKCFkKXt0aGlzLl9tb3VzZU1vdmVkPSExLHRoaXMuX21vdXNlU3RhcnRlZCYmdGhpcy5fbW91c2VVcCh0KSx0aGlzLl9tb3VzZURvd25FdmVudD10O3ZhciBpPXRoaXMscz0xPT09dC53aGljaCxuPSJzdHJpbmciPT10eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbCYmdC50YXJnZXQubm9kZU5hbWU/ZSh0LnRhcmdldCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGg6ITE7cmV0dXJuIHMmJiFuJiZ0aGlzLl9tb3VzZUNhcHR1cmUodCk/KHRoaXMubW91c2VEZWxheU1ldD0hdGhpcy5vcHRpb25zLmRlbGF5LHRoaXMubW91c2VEZWxheU1ldHx8KHRoaXMuX21vdXNlRGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5tb3VzZURlbGF5TWV0PSEwfSx0aGlzLm9wdGlvbnMuZGVsYXkpKSx0aGlzLl9tb3VzZURpc3RhbmNlTWV0KHQpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KHQpJiYodGhpcy5fbW91c2VTdGFydGVkPXRoaXMuX21vdXNlU3RhcnQodCkhPT0hMSwhdGhpcy5fbW91c2VTdGFydGVkKT8odC5wcmV2ZW50RGVmYXVsdCgpLCEwKTooITA9PT1lLmRhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSYmZS5yZW1vdmVEYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuX21vdXNlTW92ZShlKX0sdGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBpLl9tb3VzZVVwKGUpfSx0aGlzLmRvY3VtZW50LmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHQucHJldmVudERlZmF1bHQoKSxkPSEwLCEwKSk6ITB9fSxfbW91c2VNb3ZlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX21vdXNlTW92ZWQpe2lmKGUudWkuaWUmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PmRvY3VtZW50LmRvY3VtZW50TW9kZSkmJiF0LmJ1dHRvbilyZXR1cm4gdGhpcy5fbW91c2VVcCh0KTtpZighdC53aGljaClyZXR1cm4gdGhpcy5fbW91c2VVcCh0KX1yZXR1cm4odC53aGljaHx8dC5idXR0b24pJiYodGhpcy5fbW91c2VNb3ZlZD0hMCksdGhpcy5fbW91c2VTdGFydGVkPyh0aGlzLl9tb3VzZURyYWcodCksdC5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fbW91c2VEaXN0YW5jZU1ldCh0KSYmdGhpcy5fbW91c2VEZWxheU1ldCh0KSYmKHRoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNlRG93bkV2ZW50LHQpIT09ITEsdGhpcy5fbW91c2VTdGFydGVkP3RoaXMuX21vdXNlRHJhZyh0KTp0aGlzLl9tb3VzZVVwKHQpKSwhdGhpcy5fbW91c2VTdGFydGVkKX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZG9jdW1lbnQudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHRoaXMuX21vdXNlU3RhcnRlZCYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSx0LnRhcmdldD09PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmZS5kYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiwhMCksdGhpcy5fbW91c2VTdG9wKHQpKSxkPSExLCExfSxfbW91c2VEaXN0YW5jZU1ldDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVgtZS5wYWdlWCksTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVktZS5wYWdlWSkpPj10aGlzLm9wdGlvbnMuZGlzdGFuY2V9LF9tb3VzZURlbGF5TWV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oKXt9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oKXt9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSx0LGkpe3JldHVybltwYXJzZUZsb2F0KGVbMF0pKihwLnRlc3QoZVswXSk/dC8xMDA6MSkscGFyc2VGbG9hdChlWzFdKSoocC50ZXN0KGVbMV0pP2kvMTAwOjEpXX1mdW5jdGlvbiBpKHQsaSl7cmV0dXJuIHBhcnNlSW50KGUuY3NzKHQsaSksMTApfHwwfWZ1bmN0aW9uIHModCl7dmFyIGk9dFswXTtyZXR1cm4gOT09PWkubm9kZVR5cGU/e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKSxvZmZzZXQ6e3RvcDowLGxlZnQ6MH19OmUuaXNXaW5kb3coaSk/e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKSxvZmZzZXQ6e3RvcDp0LnNjcm9sbFRvcCgpLGxlZnQ6dC5zY3JvbGxMZWZ0KCl9fTppLnByZXZlbnREZWZhdWx0P3t3aWR0aDowLGhlaWdodDowLG9mZnNldDp7dG9wOmkucGFnZVksbGVmdDppLnBhZ2VYfX06e3dpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksb2Zmc2V0OnQub2Zmc2V0KCl9fWUudWk9ZS51aXx8e307dmFyIG4sYSxvPU1hdGgubWF4LHI9TWF0aC5hYnMsaD1NYXRoLnJvdW5kLGw9L2xlZnR8Y2VudGVyfHJpZ2h0Lyx1PS90b3B8Y2VudGVyfGJvdHRvbS8sZD0vW1wrXC1dXGQrKFwuW1xkXSspPyU/LyxjPS9eXHcrLyxwPS8lJC8sZj1lLmZuLnBvc2l0aW9uO2UucG9zaXRpb249e3Njcm9sbGJhcldpZHRoOmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09bilyZXR1cm4gbjt2YXIgdCxpLHM9ZSgiPGRpdiBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjsnPjxkaXYgc3R5bGU9J2hlaWdodDoxMDBweDt3aWR0aDphdXRvOyc+PC9kaXY+PC9kaXY+IiksYT1zLmNoaWxkcmVuKClbMF07cmV0dXJuIGUoImJvZHkiKS5hcHBlbmQocyksdD1hLm9mZnNldFdpZHRoLHMuY3NzKCJvdmVyZmxvdyIsInNjcm9sbCIpLGk9YS5vZmZzZXRXaWR0aCx0PT09aSYmKGk9c1swXS5jbGllbnRXaWR0aCkscy5yZW1vdmUoKSxuPXQtaX0sZ2V0U2Nyb2xsSW5mbzpmdW5jdGlvbih0KXt2YXIgaT10LmlzV2luZG93fHx0LmlzRG9jdW1lbnQ/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteCIpLHM9dC5pc1dpbmRvd3x8dC5pc0RvY3VtZW50PyIiOnQuZWxlbWVudC5jc3MoIm92ZXJmbG93LXkiKSxuPSJzY3JvbGwiPT09aXx8ImF1dG8iPT09aSYmdC53aWR0aDx0LmVsZW1lbnRbMF0uc2Nyb2xsV2lkdGgsYT0ic2Nyb2xsIj09PXN8fCJhdXRvIj09PXMmJnQuaGVpZ2h0PHQuZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ7cmV0dXJue3dpZHRoOmE/ZS5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjAsaGVpZ2h0Om4/ZS5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjB9fSxnZXRXaXRoaW5JbmZvOmZ1bmN0aW9uKHQpe3ZhciBpPWUodHx8d2luZG93KSxzPWUuaXNXaW5kb3coaVswXSksbj0hIWlbMF0mJjk9PT1pWzBdLm5vZGVUeXBlO3JldHVybntlbGVtZW50OmksaXNXaW5kb3c6cyxpc0RvY3VtZW50Om4sb2Zmc2V0Omkub2Zmc2V0KCl8fHtsZWZ0OjAsdG9wOjB9LHNjcm9sbExlZnQ6aS5zY3JvbGxMZWZ0KCksc2Nyb2xsVG9wOmkuc2Nyb2xsVG9wKCksd2lkdGg6c3x8bj9pLndpZHRoKCk6aS5vdXRlcldpZHRoKCksaGVpZ2h0OnN8fG4/aS5oZWlnaHQoKTppLm91dGVySGVpZ2h0KCl9fX0sZS5mbi5wb3NpdGlvbj1mdW5jdGlvbihuKXtpZighbnx8IW4ub2YpcmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpO249ZS5leHRlbmQoe30sbik7dmFyIHAsbSxnLHYseSxiLF89ZShuLm9mKSx4PWUucG9zaXRpb24uZ2V0V2l0aGluSW5mbyhuLndpdGhpbiksdz1lLnBvc2l0aW9uLmdldFNjcm9sbEluZm8oeCksaz0obi5jb2xsaXNpb258fCJmbGlwIikuc3BsaXQoIiAiKSxUPXt9O3JldHVybiBiPXMoXyksX1swXS5wcmV2ZW50RGVmYXVsdCYmKG4uYXQ9ImxlZnQgdG9wIiksbT1iLndpZHRoLGc9Yi5oZWlnaHQsdj1iLm9mZnNldCx5PWUuZXh0ZW5kKHt9LHYpLGUuZWFjaChbIm15IiwiYXQiXSxmdW5jdGlvbigpe3ZhciBlLHQsaT0oblt0aGlzXXx8IiIpLnNwbGl0KCIgIik7MT09PWkubGVuZ3RoJiYoaT1sLnRlc3QoaVswXSk/aS5jb25jYXQoWyJjZW50ZXIiXSk6dS50ZXN0KGlbMF0pP1siY2VudGVyIl0uY29uY2F0KGkpOlsiY2VudGVyIiwiY2VudGVyIl0pLGlbMF09bC50ZXN0KGlbMF0pP2lbMF06ImNlbnRlciIsaVsxXT11LnRlc3QoaVsxXSk/aVsxXToiY2VudGVyIixlPWQuZXhlYyhpWzBdKSx0PWQuZXhlYyhpWzFdKSxUW3RoaXNdPVtlP2VbMF06MCx0P3RbMF06MF0sblt0aGlzXT1bYy5leGVjKGlbMF0pWzBdLGMuZXhlYyhpWzFdKVswXV19KSwxPT09ay5sZW5ndGgmJihrWzFdPWtbMF0pLCJyaWdodCI9PT1uLmF0WzBdP3kubGVmdCs9bToiY2VudGVyIj09PW4uYXRbMF0mJih5LmxlZnQrPW0vMiksImJvdHRvbSI9PT1uLmF0WzFdP3kudG9wKz1nOiJjZW50ZXIiPT09bi5hdFsxXSYmKHkudG9wKz1nLzIpLHA9dChULmF0LG0sZykseS5sZWZ0Kz1wWzBdLHkudG9wKz1wWzFdLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBzLGwsdT1lKHRoaXMpLGQ9dS5vdXRlcldpZHRoKCksYz11Lm91dGVySGVpZ2h0KCksZj1pKHRoaXMsIm1hcmdpbkxlZnQiKSxiPWkodGhpcywibWFyZ2luVG9wIiksRD1kK2YraSh0aGlzLCJtYXJnaW5SaWdodCIpK3cud2lkdGgsUz1jK2IraSh0aGlzLCJtYXJnaW5Cb3R0b20iKSt3LmhlaWdodCxNPWUuZXh0ZW5kKHt9LHkpLEM9dChULm15LHUub3V0ZXJXaWR0aCgpLHUub3V0ZXJIZWlnaHQoKSk7InJpZ2h0Ij09PW4ubXlbMF0/TS5sZWZ0LT1kOiJjZW50ZXIiPT09bi5teVswXSYmKE0ubGVmdC09ZC8yKSwiYm90dG9tIj09PW4ubXlbMV0/TS50b3AtPWM6ImNlbnRlciI9PT1uLm15WzFdJiYoTS50b3AtPWMvMiksTS5sZWZ0Kz1DWzBdLE0udG9wKz1DWzFdLGF8fChNLmxlZnQ9aChNLmxlZnQpLE0udG9wPWgoTS50b3ApKSxzPXttYXJnaW5MZWZ0OmYsbWFyZ2luVG9wOmJ9LGUuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbih0LGkpe2UudWkucG9zaXRpb25ba1t0XV0mJmUudWkucG9zaXRpb25ba1t0XV1baV0oTSx7dGFyZ2V0V2lkdGg6bSx0YXJnZXRIZWlnaHQ6ZyxlbGVtV2lkdGg6ZCxlbGVtSGVpZ2h0OmMsY29sbGlzaW9uUG9zaXRpb246cyxjb2xsaXNpb25XaWR0aDpELGNvbGxpc2lvbkhlaWdodDpTLG9mZnNldDpbcFswXStDWzBdLHBbMV0rQ1sxXV0sbXk6bi5teSxhdDpuLmF0LHdpdGhpbjp4LGVsZW06dX0pfSksbi51c2luZyYmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9di5sZWZ0LU0ubGVmdCxpPXQrbS1kLHM9di50b3AtTS50b3AsYT1zK2ctYyxoPXt0YXJnZXQ6e2VsZW1lbnQ6XyxsZWZ0OnYubGVmdCx0b3A6di50b3Asd2lkdGg6bSxoZWlnaHQ6Z30sZWxlbWVudDp7ZWxlbWVudDp1LGxlZnQ6TS5sZWZ0LHRvcDpNLnRvcCx3aWR0aDpkLGhlaWdodDpjfSxob3Jpem9udGFsOjA+aT8ibGVmdCI6dD4wPyJyaWdodCI6ImNlbnRlciIsdmVydGljYWw6MD5hPyJ0b3AiOnM+MD8iYm90dG9tIjoibWlkZGxlIn07ZD5tJiZtPnIodCtpKSYmKGguaG9yaXpvbnRhbD0iY2VudGVyIiksYz5nJiZnPnIocythKSYmKGgudmVydGljYWw9Im1pZGRsZSIpLGguaW1wb3J0YW50PW8ocih0KSxyKGkpKT5vKHIocykscihhKSk/Imhvcml6b250YWwiOiJ2ZXJ0aWNhbCIsbi51c2luZy5jYWxsKHRoaXMsZSxoKX0pLHUub2Zmc2V0KGUuZXh0ZW5kKE0se3VzaW5nOmx9KSl9KX0sZS51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIGkscz10LndpdGhpbixuPXMuaXNXaW5kb3c/cy5zY3JvbGxMZWZ0OnMub2Zmc2V0LmxlZnQsYT1zLndpZHRoLHI9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCxoPW4tcixsPXIrdC5jb2xsaXNpb25XaWR0aC1hLW47dC5jb2xsaXNpb25XaWR0aD5hP2g+MCYmMD49bD8oaT1lLmxlZnQraCt0LmNvbGxpc2lvbldpZHRoLWEtbixlLmxlZnQrPWgtaSk6ZS5sZWZ0PWw+MCYmMD49aD9uOmg+bD9uK2EtdC5jb2xsaXNpb25XaWR0aDpuOmg+MD9lLmxlZnQrPWg6bD4wP2UubGVmdC09bDplLmxlZnQ9byhlLmxlZnQtcixlLmxlZnQpfSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzPXQud2l0aGluLG49cy5pc1dpbmRvdz9zLnNjcm9sbFRvcDpzLm9mZnNldC50b3AsYT10LndpdGhpbi5oZWlnaHQscj1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxoPW4tcixsPXIrdC5jb2xsaXNpb25IZWlnaHQtYS1uO3QuY29sbGlzaW9uSGVpZ2h0PmE/aD4wJiYwPj1sPyhpPWUudG9wK2grdC5jb2xsaXNpb25IZWlnaHQtYS1uLGUudG9wKz1oLWkpOmUudG9wPWw+MCYmMD49aD9uOmg+bD9uK2EtdC5jb2xsaXNpb25IZWlnaHQ6bjpoPjA/ZS50b3ArPWg6bD4wP2UudG9wLT1sOmUudG9wPW8oZS50b3AtcixlLnRvcCl9fSxmbGlwOntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuPXQud2l0aGluLGE9bi5vZmZzZXQubGVmdCtuLnNjcm9sbExlZnQsbz1uLndpZHRoLGg9bi5pc1dpbmRvdz9uLnNjcm9sbExlZnQ6bi5vZmZzZXQubGVmdCxsPWUubGVmdC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsdT1sLWgsZD1sK3QuY29sbGlzaW9uV2lkdGgtby1oLGM9ImxlZnQiPT09dC5teVswXT8tdC5lbGVtV2lkdGg6InJpZ2h0Ij09PXQubXlbMF0/dC5lbGVtV2lkdGg6MCxwPSJsZWZ0Ij09PXQuYXRbMF0/dC50YXJnZXRXaWR0aDoicmlnaHQiPT09dC5hdFswXT8tdC50YXJnZXRXaWR0aDowLGY9LTIqdC5vZmZzZXRbMF07MD51PyhpPWUubGVmdCtjK3ArZit0LmNvbGxpc2lvbldpZHRoLW8tYSwoMD5pfHxyKHUpPmkpJiYoZS5sZWZ0Kz1jK3ArZikpOmQ+MCYmKHM9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtjK3ArZi1oLChzPjB8fGQ+cihzKSkmJihlLmxlZnQrPWMrcCtmKSl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBpLHMsbj10LndpdGhpbixhPW4ub2Zmc2V0LnRvcCtuLnNjcm9sbFRvcCxvPW4uaGVpZ2h0LGg9bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsbD1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCx1PWwtaCxkPWwrdC5jb2xsaXNpb25IZWlnaHQtby1oLGM9InRvcCI9PT10Lm15WzFdLHA9Yz8tdC5lbGVtSGVpZ2h0OiJib3R0b20iPT09dC5teVsxXT90LmVsZW1IZWlnaHQ6MCxmPSJ0b3AiPT09dC5hdFsxXT90LnRhcmdldEhlaWdodDoiYm90dG9tIj09PXQuYXRbMV0/LXQudGFyZ2V0SGVpZ2h0OjAsbT0tMip0Lm9mZnNldFsxXTswPnU/KHM9ZS50b3ArcCtmK20rdC5jb2xsaXNpb25IZWlnaHQtby1hLCgwPnN8fHIodSk+cykmJihlLnRvcCs9cCtmK20pKTpkPjAmJihpPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wK3ArZittLWgsKGk+MHx8ZD5yKGkpKSYmKGUudG9wKz1wK2YrbSkpfX0sZmxpcGZpdDp7bGVmdDpmdW5jdGlvbigpe2UudWkucG9zaXRpb24uZmxpcC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnVpLnBvc2l0aW9uLmZpdC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdG9wOmZ1bmN0aW9uKCl7ZS51aS5wb3NpdGlvbi5mbGlwLnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxmdW5jdGlvbigpe3ZhciB0LGkscyxuLG8scj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHI/ImRpdiI6ImJvZHkiKSxzPXt2aXNpYmlsaXR5OiJoaWRkZW4iLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyOjAsbWFyZ2luOjAsYmFja2dyb3VuZDoibm9uZSJ9LHImJmUuZXh0ZW5kKHMse3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTEwMDBweCIsdG9wOiItMTAwMHB4In0pO2ZvcihvIGluIHMpdC5zdHlsZVtvXT1zW29dO3QuYXBwZW5kQ2hpbGQoaCksaT1yfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaS5pbnNlcnRCZWZvcmUodCxpLmZpcnN0Q2hpbGQpLGguc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMC43NDMyMjIycHg7IixuPWUoaCkub2Zmc2V0KCkubGVmdCxhPW4+MTAmJjExPm4sdC5pbm5lckhUTUw9IiIsaS5yZW1vdmVDaGlsZCh0KX0oKX0oKSxlLnVpLnBvc2l0aW9uLGUud2lkZ2V0KCJ1aS5hY2NvcmRpb24iLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2FjdGl2ZTowLGFuaW1hdGU6e30sY29sbGFwc2libGU6ITEsZXZlbnQ6ImNsaWNrIixoZWFkZXI6Ij4gbGkgPiA6Zmlyc3QtY2hpbGQsPiA6bm90KGxpKTpldmVuIixoZWlnaHRTdHlsZToiYXV0byIsaWNvbnM6e2FjdGl2ZUhlYWRlcjoidWktaWNvbi10cmlhbmdsZS0xLXMiLGhlYWRlcjoidWktaWNvbi10cmlhbmdsZS0xLWUifSxhY3RpdmF0ZTpudWxsLGJlZm9yZUFjdGl2YXRlOm51bGx9LGhpZGVQcm9wczp7Ym9yZGVyVG9wV2lkdGg6ImhpZGUiLGJvcmRlckJvdHRvbVdpZHRoOiJoaWRlIixwYWRkaW5nVG9wOiJoaWRlIixwYWRkaW5nQm90dG9tOiJoaWRlIixoZWlnaHQ6ImhpZGUifSxzaG93UHJvcHM6e2JvcmRlclRvcFdpZHRoOiJzaG93Iixib3JkZXJCb3R0b21XaWR0aDoic2hvdyIscGFkZGluZ1RvcDoic2hvdyIscGFkZGluZ0JvdHRvbToic2hvdyIsaGVpZ2h0OiJzaG93In0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9uczt0aGlzLnByZXZTaG93PXRoaXMucHJldkhpZGU9ZSgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYWNjb3JkaW9uIHVpLXdpZGdldCB1aS1oZWxwZXItcmVzZXQiKS5hdHRyKCJyb2xlIiwidGFibGlzdCIpLHQuY29sbGFwc2libGV8fHQuYWN0aXZlIT09ITEmJm51bGwhPXQuYWN0aXZlfHwodC5hY3RpdmU9MCksdGhpcy5fcHJvY2Vzc1BhbmVscygpLDA+dC5hY3RpdmUmJih0LmFjdGl2ZSs9dGhpcy5oZWFkZXJzLmxlbmd0aCksdGhpcy5fcmVmcmVzaCgpfSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2hlYWRlcjp0aGlzLmFjdGl2ZSxwYW5lbDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUubmV4dCgpOmUoKX19LF9jcmVhdGVJY29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5pY29uczt0JiYoZSgiPHNwYW4+IikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiB1aS1pY29uICIrdC5oZWFkZXIpLnByZXBlbmRUbyh0aGlzLmhlYWRlcnMpLHRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3ModC5oZWFkZXIpLmFkZENsYXNzKHQuYWN0aXZlSGVhZGVyKSx0aGlzLmhlYWRlcnMuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpKX0sX2Rlc3Ryb3lJY29uczpmdW5jdGlvbigpe3RoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1leHBhbmRlZCIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMuX2Rlc3Ryb3lJY29ucygpLGU9dGhpcy5oZWFkZXJzLm5leHQoKS5yZW1vdmVDbGFzcygidWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20gdWktYWNjb3JkaW9uLWNvbnRlbnQgdWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIikuY3NzKCJkaXNwbGF5IiwiIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlVW5pcXVlSWQoKSwiY29udGVudCIhPT10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUmJmUuY3NzKCJoZWlnaHQiLCIiKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiJhY3RpdmUiPT09ZT8odGhpcy5fYWN0aXZhdGUodCksdm9pZCAwKTooImV2ZW50Ij09PWUmJih0aGlzLm9wdGlvbnMuZXZlbnQmJnRoaXMuX29mZih0aGlzLmhlYWRlcnMsdGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEV2ZW50cyh0KSksdGhpcy5fc3VwZXIoZSx0KSwiY29sbGFwc2libGUiIT09ZXx8dHx8dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExfHx0aGlzLl9hY3RpdmF0ZSgwKSwiaWNvbnMiPT09ZSYmKHRoaXMuX2Rlc3Ryb3lJY29ucygpLHQmJnRoaXMuX2NyZWF0ZUljb25zKCkpLCJkaXNhYmxlZCI9PT1lJiYodGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIsISF0KS5hdHRyKCJhcmlhLWRpc2FibGVkIix0KSx0aGlzLmhlYWRlcnMuYWRkKHRoaXMuaGVhZGVycy5uZXh0KCkpLnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIsISF0KSksdm9pZCAwKX0sX2tleWRvd246ZnVuY3Rpb24odCl7aWYoIXQuYWx0S2V5JiYhdC5jdHJsS2V5KXt2YXIgaT1lLnVpLmtleUNvZGUscz10aGlzLmhlYWRlcnMubGVuZ3RoLG49dGhpcy5oZWFkZXJzLmluZGV4KHQudGFyZ2V0KSxhPSExO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgaS5SSUdIVDpjYXNlIGkuRE9XTjphPXRoaXMuaGVhZGVyc1sobisxKSVzXTticmVhaztjYXNlIGkuTEVGVDpjYXNlIGkuVVA6YT10aGlzLmhlYWRlcnNbKG4tMStzKSVzXTticmVhaztjYXNlIGkuU1BBQ0U6Y2FzZSBpLkVOVEVSOnRoaXMuX2V2ZW50SGFuZGxlcih0KTticmVhaztjYXNlIGkuSE9NRTphPXRoaXMuaGVhZGVyc1swXTticmVhaztjYXNlIGkuRU5EOmE9dGhpcy5oZWFkZXJzW3MtMV19YSYmKGUodC50YXJnZXQpLmF0dHIoInRhYkluZGV4IiwtMSksZShhKS5hdHRyKCJ0YWJJbmRleCIsMCksYS5mb2N1cygpLHQucHJldmVudERlZmF1bHQoKSl9fSxfcGFuZWxLZXlEb3duOmZ1bmN0aW9uKHQpe3Qua2V5Q29kZT09PWUudWkua2V5Q29kZS5VUCYmdC5jdHJsS2V5JiZlKHQuY3VycmVudFRhcmdldCkucHJldigpLmZvY3VzKCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7dGhpcy5fcHJvY2Vzc1BhbmVscygpLHQuYWN0aXZlPT09ITEmJnQuY29sbGFwc2libGU9PT0hMHx8IXRoaXMuaGVhZGVycy5sZW5ndGg/KHQuYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKSk6dC5hY3RpdmU9PT0hMT90aGlzLl9hY3RpdmF0ZSgwKTp0aGlzLmFjdGl2ZS5sZW5ndGgmJiFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy5oZWFkZXJzLmxlbmd0aD09PXRoaXMuaGVhZGVycy5maW5kKCIudWktc3RhdGUtZGlzYWJsZWQiKS5sZW5ndGg/KHQuYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKSk6dGhpcy5fYWN0aXZhdGUoTWF0aC5tYXgoMCx0LmFjdGl2ZS0xKSk6dC5hY3RpdmU9dGhpcy5oZWFkZXJzLmluZGV4KHRoaXMuYWN0aXZlKSx0aGlzLl9kZXN0cm95SWNvbnMoKSx0aGlzLl9yZWZyZXNoKCl9LF9wcm9jZXNzUGFuZWxzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oZWFkZXJzLHQ9dGhpcy5wYW5lbHM7dGhpcy5oZWFkZXJzPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oZWFkZXIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyIHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLHRoaXMucGFuZWxzPXRoaXMuaGVhZGVycy5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50IHVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuZmlsdGVyKCI6bm90KC51aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUpIikuaGlkZSgpLHQmJih0aGlzLl9vZmYoZS5ub3QodGhpcy5oZWFkZXJzKSksdGhpcy5fb2ZmKHQubm90KHRoaXMucGFuZWxzKSkpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LGk9dGhpcy5vcHRpb25zLHM9aS5oZWlnaHRTdHlsZSxuPXRoaXMuZWxlbWVudC5wYXJlbnQoKTt0aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLHRoaXMuYWN0aXZlLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikuc2hvdygpLHRoaXMuaGVhZGVycy5hdHRyKCJyb2xlIiwidGFiIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksaT10LnVuaXF1ZUlkKCkuYXR0cigiaWQiKSxzPXQubmV4dCgpLG49cy51bmlxdWVJZCgpLmF0dHIoImlkIik7dC5hdHRyKCJhcmlhLWNvbnRyb2xzIixuKSxzLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsaSl9KS5uZXh0KCkuYXR0cigicm9sZSIsInRhYnBhbmVsIiksdGhpcy5oZWFkZXJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsdGFiSW5kZXg6LTF9KS5uZXh0KCkuYXR0cih7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KS5oaWRlKCksdGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsImFyaWEtZXhwYW5kZWQiOiJ0cnVlIix0YWJJbmRleDowfSkubmV4dCgpLmF0dHIoeyJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pOnRoaXMuaGVhZGVycy5lcSgwKS5hdHRyKCJ0YWJJbmRleCIsMCksdGhpcy5fY3JlYXRlSWNvbnMoKSx0aGlzLl9zZXR1cEV2ZW50cyhpLmV2ZW50KSwiZmlsbCI9PT1zPyh0PW4uaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLHM9aS5jc3MoInBvc2l0aW9uIik7ImFic29sdXRlIiE9PXMmJiJmaXhlZCIhPT1zJiYodC09aS5vdXRlckhlaWdodCghMCkpfSksdGhpcy5oZWFkZXJzLmVhY2goZnVuY3Rpb24oKXt0LT1lKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe2UodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsdC1lKHRoaXMpLmlubmVySGVpZ2h0KCkrZSh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKCJvdmVyZmxvdyIsImF1dG8iKSk6ImF1dG8iPT09cyYmKHQ9MCx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXt0PU1hdGgubWF4KHQsZSh0aGlzKS5jc3MoImhlaWdodCIsIiIpLmhlaWdodCgpKX0pLmhlaWdodCh0KSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9maW5kQWN0aXZlKHQpWzBdO2khPT10aGlzLmFjdGl2ZVswXSYmKGk9aXx8dGhpcy5hY3RpdmVbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6ZS5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5oZWFkZXJzLmVxKHQpOmUoKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKHQpe3ZhciBpPXtrZXlkb3duOiJfa2V5ZG93biJ9O3QmJmUuZWFjaCh0LnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtpW3RdPSJfZXZlbnRIYW5kbGVyIn0pLHRoaXMuX29mZih0aGlzLmhlYWRlcnMuYWRkKHRoaXMuaGVhZGVycy5uZXh0KCkpKSx0aGlzLl9vbih0aGlzLmhlYWRlcnMsaSksdGhpcy5fb24odGhpcy5oZWFkZXJzLm5leHQoKSx7a2V5ZG93bjoiX3BhbmVsS2V5RG93biJ9KSx0aGlzLl9ob3ZlcmFibGUodGhpcy5oZWFkZXJzKSx0aGlzLl9mb2N1c2FibGUodGhpcy5oZWFkZXJzKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMscz10aGlzLmFjdGl2ZSxuPWUodC5jdXJyZW50VGFyZ2V0KSxhPW5bMF09PT1zWzBdLG89YSYmaS5jb2xsYXBzaWJsZSxyPW8/ZSgpOm4ubmV4dCgpLGg9cy5uZXh0KCksbD17b2xkSGVhZGVyOnMsb2xkUGFuZWw6aCxuZXdIZWFkZXI6bz9lKCk6bixuZXdQYW5lbDpyfTt0LnByZXZlbnREZWZhdWx0KCksYSYmIWkuY29sbGFwc2libGV8fHRoaXMuX3RyaWdnZXIoImJlZm9yZUFjdGl2YXRlIix0LGwpPT09ITF8fChpLmFjdGl2ZT1vPyExOnRoaXMuaGVhZGVycy5pbmRleChuKSx0aGlzLmFjdGl2ZT1hP2UoKTpuLHRoaXMuX3RvZ2dsZShsKSxzLnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxpLmljb25zJiZzLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3MoaS5pY29ucy5hY3RpdmVIZWFkZXIpLmFkZENsYXNzKGkuaWNvbnMuaGVhZGVyKSxhfHwobi5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcCIpLGkuaWNvbnMmJm4uY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhpLmljb25zLmhlYWRlcikuYWRkQ2xhc3MoaS5pY29ucy5hY3RpdmVIZWFkZXIpLG4ubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKSkpfSxfdG9nZ2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQubmV3UGFuZWwscz10aGlzLnByZXZTaG93Lmxlbmd0aD90aGlzLnByZXZTaG93OnQub2xkUGFuZWw7dGhpcy5wcmV2U2hvdy5hZGQodGhpcy5wcmV2SGlkZSkuc3RvcCghMCwhMCksdGhpcy5wcmV2U2hvdz1pLHRoaXMucHJldkhpZGU9cyx0aGlzLm9wdGlvbnMuYW5pbWF0ZT90aGlzLl9hbmltYXRlKGkscyx0KToocy5oaWRlKCksaS5zaG93KCksdGhpcy5fdG9nZ2xlQ29tcGxldGUodCkpLHMuYXR0cih7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxzLnByZXYoKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLGkubGVuZ3RoJiZzLmxlbmd0aD9zLnByZXYoKS5hdHRyKHt0YWJJbmRleDotMSwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pOmkubGVuZ3RoJiZ0aGlzLmhlYWRlcnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT1wYXJzZUludChlKHRoaXMpLmF0dHIoInRhYkluZGV4IiksMTApfSkuYXR0cigidGFiSW5kZXgiLC0xKSxpLmF0dHIoImFyaWEtaGlkZGVuIiwiZmFsc2UiKS5wcmV2KCkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6InRydWUiLHRhYkluZGV4OjB9KX0sX2FuaW1hdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzLG4sYSxvPXRoaXMscj0wLGg9ZS5jc3MoImJveC1zaXppbmciKSxsPWUubGVuZ3RoJiYoIXQubGVuZ3RofHxlLmluZGV4KCk8dC5pbmRleCgpKSx1PXRoaXMub3B0aW9ucy5hbmltYXRlfHx7fSxkPWwmJnUuZG93bnx8dSxjPWZ1bmN0aW9uKCl7by5fdG9nZ2xlQ29tcGxldGUoaSl9O3JldHVybiJudW1iZXIiPT10eXBlb2YgZCYmKGE9ZCksInN0cmluZyI9PXR5cGVvZiBkJiYobj1kKSxuPW58fGQuZWFzaW5nfHx1LmVhc2luZyxhPWF8fGQuZHVyYXRpb258fHUuZHVyYXRpb24sdC5sZW5ndGg/ZS5sZW5ndGg/KHM9ZS5zaG93KCkub3V0ZXJIZWlnaHQoKSx0LmFuaW1hdGUodGhpcy5oaWRlUHJvcHMse2R1cmF0aW9uOmEsZWFzaW5nOm4sc3RlcDpmdW5jdGlvbihlLHQpe3Qubm93PU1hdGgucm91bmQoZSl9fSksZS5oaWRlKCkuYW5pbWF0ZSh0aGlzLnNob3dQcm9wcyx7ZHVyYXRpb246YSxlYXNpbmc6bixjb21wbGV0ZTpjLHN0ZXA6ZnVuY3Rpb24oZSxpKXtpLm5vdz1NYXRoLnJvdW5kKGUpLCJoZWlnaHQiIT09aS5wcm9wPyJjb250ZW50LWJveCI9PT1oJiYocis9aS5ub3cpOiJjb250ZW50IiE9PW8ub3B0aW9ucy5oZWlnaHRTdHlsZSYmKGkubm93PU1hdGgucm91bmQocy10Lm91dGVySGVpZ2h0KCktcikscj0wKX19KSx2b2lkIDApOnQuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyxhLG4sYyk6ZS5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLGEsbixjKX0sX3RvZ2dsZUNvbXBsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUub2xkUGFuZWw7dC5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikucHJldigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItdG9wIikuYWRkQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0Lmxlbmd0aCYmKHQucGFyZW50KClbMF0uY2xhc3NOYW1lPXQucGFyZW50KClbMF0uY2xhc3NOYW1lKSx0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsbnVsbCxlKX19KSxlLndpZGdldCgidWkubWVudSIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6Ijx1bD4iLGRlbGF5OjMwMCxvcHRpb25zOntpY29uczp7c3VibWVudToidWktaWNvbi1jYXJhdC0xLWUifSxpdGVtczoiPiAqIixtZW51czoidWwiLHBvc2l0aW9uOntteToibGVmdC0xIHRvcCIsYXQ6InJpZ2h0IHRvcCJ9LHJvbGU6Im1lbnUiLGJsdXI6bnVsbCxmb2N1czpudWxsLHNlbGVjdDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmVNZW51PXRoaXMuZWxlbWVudCx0aGlzLm1vdXNlSGFuZGxlZD0hMSx0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQiKS50b2dnbGVDbGFzcygidWktbWVudS1pY29ucyIsISF0aGlzLmVsZW1lbnQuZmluZCgiLnVpLWljb24iKS5sZW5ndGgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsdGFiSW5kZXg6MH0pLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLmF0dHIoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIiksdGhpcy5fb24oeyJtb3VzZWRvd24gLnVpLW1lbnUtaXRlbSI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSwiY2xpY2sgLnVpLW1lbnUtaXRlbSI6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0LnRhcmdldCk7IXRoaXMubW91c2VIYW5kbGVkJiZpLm5vdCgiLnVpLXN0YXRlLWRpc2FibGVkIikubGVuZ3RoJiYodGhpcy5zZWxlY3QodCksdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpfHwodGhpcy5tb3VzZUhhbmRsZWQ9ITApLGkuaGFzKCIudWktbWVudSIpLmxlbmd0aD90aGlzLmV4cGFuZCh0KTohdGhpcy5lbGVtZW50LmlzKCI6Zm9jdXMiKSYmZSh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoIi51aS1tZW51IikubGVuZ3RoJiYodGhpcy5lbGVtZW50LnRyaWdnZXIoImZvY3VzIixbITBdKSx0aGlzLmFjdGl2ZSYmMT09PXRoaXMuYWN0aXZlLnBhcmVudHMoIi51aS1tZW51IikubGVuZ3RoJiZjbGVhclRpbWVvdXQodGhpcy50aW1lcikpKX0sIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbSI6ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJldmlvdXNGaWx0ZXIpe3ZhciBpPWUodC5jdXJyZW50VGFyZ2V0KTsNCmkuc2libGluZ3MoIi51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5mb2N1cyh0LGkpfX0sbW91c2VsZWF2ZToiY29sbGFwc2VBbGwiLCJtb3VzZWxlYXZlIC51aS1tZW51IjoiY29sbGFwc2VBbGwiLGZvY3VzOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZXEoMCk7dHx8dGhpcy5mb2N1cyhlLGkpfSxibHVyOmZ1bmN0aW9uKHQpe3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KXx8dGhpcy5jb2xsYXBzZUFsbCh0KX0pfSxrZXlkb3duOiJfa2V5ZG93biJ9KSx0aGlzLnJlZnJlc2goKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHtjbGljazpmdW5jdGlvbihlKXt0aGlzLl9jbG9zZU9uRG9jdW1lbnRDbGljayhlKSYmdGhpcy5jb2xsYXBzZUFsbChlKSx0aGlzLm1vdXNlSGFuZGxlZD0hMX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IikuZmluZCgiLnVpLW1lbnUiKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtaWNvbnMgdWktZnJvbnQiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWl0ZW0iKS5yZW1vdmVDbGFzcygidWktbWVudS1pdGVtIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikmJnQucmVtb3ZlKCl9KSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtZGl2aWRlciIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWRpdmlkZXIgdWktd2lkZ2V0LWNvbnRlbnQiKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbz0hMDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMucHJldmlvdXNQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLm5leHRQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6dGhpcy5fbW92ZSgiZmlyc3QiLCJmaXJzdCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoImxhc3QiLCJsYXN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5leHBhbmQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7ZGVmYXVsdDpvPSExLHM9dGhpcy5wcmV2aW91c0ZpbHRlcnx8IiIsbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksYT0hMSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksbj09PXM/YT0hMDpuPXMrbixpPXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhuKSxpPWEmJi0xIT09aS5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpP3RoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKTppLGkubGVuZ3RofHwobj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksaT10aGlzLl9maWx0ZXJNZW51SXRlbXMobikpLGkubGVuZ3RoPyh0aGlzLmZvY3VzKHQsaSksdGhpcy5wcmV2aW91c0ZpbHRlcj1uLHRoaXMuZmlsdGVyVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn0sMWUzKSk6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9byYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpfHwodGhpcy5hY3RpdmUuaXMoIlthcmlhLWhhc3BvcHVwPSd0cnVlJ10iKT90aGlzLmV4cGFuZChlKTp0aGlzLnNlbGVjdChlKSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcyxuPXRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LGE9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTt0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoInVpLW1lbnUtaWNvbnMiLCEhdGhpcy5lbGVtZW50LmZpbmQoIi51aS1pY29uIikubGVuZ3RoKSxhLmZpbHRlcigiOm5vdCgudWktbWVudSkiKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnQiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5wYXJlbnQoKSxzPWUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiK24pLmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIsITApO2kuYXR0cigiYXJpYS1oYXNwb3B1cCIsInRydWUiKS5wcmVwZW5kKHMpLHQuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixpLmF0dHIoImlkIikpfSksdD1hLmFkZCh0aGlzLmVsZW1lbnQpLGk9dC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcyksaS5ub3QoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtzLl9pc0RpdmlkZXIodCkmJnQuYWRkQ2xhc3MoInVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtZGl2aWRlciIpfSksaS5ub3QoIi51aS1tZW51LWl0ZW0sIC51aS1tZW51LWRpdmlkZXIiKS5hZGRDbGFzcygidWktbWVudS1pdGVtIikudW5pcXVlSWQoKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOnRoaXMuX2l0ZW1Sb2xlKCl9KSxpLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLmFjdGl2ZSYmIWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKSYmdGhpcy5ibHVyKCl9LF9pdGVtUm9sZTpmdW5jdGlvbigpe3JldHVybnttZW51OiJtZW51aXRlbSIsbGlzdGJveDoib3B0aW9uIn1bdGhpcy5vcHRpb25zLnJvbGVdfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7Imljb25zIj09PWUmJnRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUpLmFkZENsYXNzKHQuc3VibWVudSksImRpc2FibGVkIj09PWUmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5fc3VwZXIoZSx0KX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO3RoaXMuYmx1cihlLGUmJiJmb2N1cyI9PT1lLnR5cGUpLHRoaXMuX3Njcm9sbEludG9WaWV3KHQpLHRoaXMuYWN0aXZlPXQuZmlyc3QoKSxzPXRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIscy5hdHRyKCJpZCIpKSx0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGUmJiJrZXlkb3duIj09PWUudHlwZT90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxpPXQuY2hpbGRyZW4oIi51aS1tZW51IiksaS5sZW5ndGgmJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKGkpLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoImZvY3VzIixlLHtpdGVtOnR9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scjt0aGlzLl9oYXNTY3JvbGwoKSYmKGk9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLHM9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sInBhZGRpbmdUb3AiKSl8fDAsbj10Lm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLWktcyxhPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxvPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSxyPXQub3V0ZXJIZWlnaHQoKSwwPm4/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChhK24pOm4rcj5vJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKGErbi1vK3IpKX0sYmx1cjpmdW5jdGlvbihlLHQpe3R8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMuYWN0aXZlPW51bGwsdGhpcy5fdHJpZ2dlcigiYmx1ciIsZSx7aXRlbTp0aGlzLmFjdGl2ZX0pKX0sX3N0YXJ0T3BlbmluZzpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksInRydWUiPT09ZS5hdHRyKCJhcmlhLWhpZGRlbiIpJiYodGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCksdGhpcy5fb3BlbihlKX0sdGhpcy5kZWxheSkpfSxfb3BlbjpmdW5jdGlvbih0KXt2YXIgaT1lLmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpLm5vdCh0LnBhcmVudHMoIi51aS1tZW51IikpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0LnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIikucG9zaXRpb24oaSl9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKHQsaSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcz1pP3RoaXMuZWxlbWVudDplKHQmJnQudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpKTtzLmxlbmd0aHx8KHM9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShzKSx0aGlzLmJsdXIodCksdGhpcy5hY3RpdmVNZW51PXN9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7ZXx8KGU9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSxlLmZpbmQoIi51aS1tZW51IikuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLmVuZCgpLmZpbmQoIi51aS1zdGF0ZS1hY3RpdmUiKS5ub3QoIi51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0sX2Nsb3NlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudSIpLmxlbmd0aH0sX2lzRGl2aWRlcjpmdW5jdGlvbihlKXtyZXR1cm4hL1teXC1cdTIwMTRcdTIwMTNcc10vLnRlc3QoZS50ZXh0KCkpfSxjb2xsYXBzZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIsdGhpcy5lbGVtZW50KTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX2Nsb3NlKCksdGhpcy5mb2N1cyhlLHQpKX0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLW1lbnUgIikuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCk7dCYmdC5sZW5ndGgmJih0aGlzLl9vcGVuKHQucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhlLHQpfSkpfSxuZXh0OmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoIm5leHQiLCJmaXJzdCIsZSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoInByZXYiLCJsYXN0IixlKX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikubGVuZ3RofSxpc0xhc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzO3RoaXMuYWN0aXZlJiYocz0iZmlyc3QiPT09ZXx8Imxhc3QiPT09ZT90aGlzLmFjdGl2ZVsiZmlyc3QiPT09ZT8icHJldkFsbCI6Im5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKTp0aGlzLmFjdGl2ZVtlKyJBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKDApKSxzJiZzLmxlbmd0aCYmdGhpcy5hY3RpdmV8fChzPXRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcylbdF0oKSksdGhpcy5mb2N1cyhpLHMpfSxuZXh0UGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzTGFzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5uZXh0QWxsKCIudWktbWVudS1pdGVtIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBpPWUodGhpcyksMD5pLm9mZnNldCgpLnRvcC1zLW59KSx0aGlzLmZvY3VzKHQsaSkpOnRoaXMuZm9jdXModCx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW3RoaXMuYWN0aXZlPyJsYXN0IjoiZmlyc3QiXSgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LHByZXZpb3VzUGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzRmlyc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8ocz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Asbj10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaT1lKHRoaXMpLGkub2Zmc2V0KCkudG9wLXMrbj4wfSksdGhpcy5mb2N1cyh0LGkpKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maXJzdCgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoInNjcm9sbEhlaWdodCIpfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTt2YXIgaT17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKCIudWktbWVudSIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbCh0LCEwKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQsaSl9LF9maWx0ZXJNZW51SXRlbXM6ZnVuY3Rpb24odCl7dmFyIGk9dC5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCJcXCQmIikscz1SZWdFeHAoIl4iK2ksImkiKTtyZXR1cm4gdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gcy50ZXN0KGUudHJpbShlKHRoaXMpLnRleHQoKSkpfSl9fSksZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLG9wdGlvbnM6e2FwcGVuZFRvOm51bGwsYXV0b0ZvY3VzOiExLGRlbGF5OjMwMCxtaW5MZW5ndGg6MSxwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoibm9uZSJ9LHNvdXJjZTpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzcG9uc2U6bnVsbCxzZWFyY2g6bnVsbCxzZWxlY3Q6bnVsbH0scmVxdWVzdEluZGV4OjAscGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbj10aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJ0ZXh0YXJlYSI9PT1uLG89ImlucHV0Ij09PW47dGhpcy5pc011bHRpTGluZT1hPyEwOm8/ITE6dGhpcy5lbGVtZW50LnByb3AoImlzQ29udGVudEVkaXRhYmxlIiksdGhpcy52YWx1ZU1ldGhvZD10aGlzLmVsZW1lbnRbYXx8bz8idmFsIjoidGV4dCJdLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikuYXR0cigiYXV0b2NvbXBsZXRlIiwib2ZmIiksdGhpcy5fb24odGhpcy5lbGVtZW50LHtrZXlkb3duOmZ1bmN0aW9uKG4pe2lmKHRoaXMuZWxlbWVudC5wcm9wKCJyZWFkT25seSIpKXJldHVybiB0PSEwLHM9ITAsaT0hMCx2b2lkIDA7dD0hMSxzPSExLGk9ITE7dmFyIGE9ZS51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2UgYS5QQUdFX1VQOnQ9ITAsdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixuKTticmVhaztjYXNlIGEuUEFHRV9ET1dOOnQ9ITAsdGhpcy5fbW92ZSgibmV4dFBhZ2UiLG4pO2JyZWFrO2Nhc2UgYS5VUDp0PSEwLHRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIsbik7YnJlYWs7Y2FzZSBhLkRPV046dD0hMCx0aGlzLl9rZXlFdmVudCgibmV4dCIsbik7YnJlYWs7Y2FzZSBhLkVOVEVSOnRoaXMubWVudS5hY3RpdmUmJih0PSEwLG4ucHJldmVudERlZmF1bHQoKSx0aGlzLm1lbnUuc2VsZWN0KG4pKTticmVhaztjYXNlIGEuVEFCOnRoaXMubWVudS5hY3RpdmUmJnRoaXMubWVudS5zZWxlY3Qobik7YnJlYWs7Y2FzZSBhLkVTQ0FQRTp0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMuaXNNdWx0aUxpbmV8fHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5jbG9zZShuKSxuLnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2RlZmF1bHQ6aT0hMCx0aGlzLl9zZWFyY2hUaW1lb3V0KG4pfX0sa2V5cHJlc3M6ZnVuY3Rpb24ocyl7aWYodClyZXR1cm4gdD0hMSwoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKSYmcy5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMDtpZighaSl7dmFyIG49ZS51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugbi5QQUdFX1VQOnRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIscyk7YnJlYWs7Y2FzZSBuLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJuZXh0UGFnZSIscyk7YnJlYWs7Y2FzZSBuLlVQOnRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIscyk7YnJlYWs7Y2FzZSBuLkRPV046dGhpcy5fa2V5RXZlbnQoIm5leHQiLHMpfX19LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBzPyhzPSExLGUucHJldmVudERlZmF1bHQoKSx2b2lkIDApOih0aGlzLl9zZWFyY2hUaW1lb3V0KGUpLHZvaWQgMCl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnByZXZpb3VzPXRoaXMuX3ZhbHVlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix2b2lkIDApOihjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UoZSksdGhpcy5fY2hhbmdlKGUpLHZvaWQgMCl9fSksdGhpcy5faW5pdFNvdXJjZSgpLHRoaXMubWVudT1lKCI8dWw+IikuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5tZW51KCJpbnN0YW5jZSIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXJ9KTt2YXIgaT10aGlzLm1lbnUuZWxlbWVudFswXTtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RofHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kb2N1bWVudC5vbmUoIm1vdXNlZG93biIsZnVuY3Rpb24ocyl7cy50YXJnZXQ9PT10LmVsZW1lbnRbMF18fHMudGFyZ2V0PT09aXx8ZS5jb250YWlucyhpLHMudGFyZ2V0KXx8dC5jbG9zZSgpfSl9KX0sbWVudWZvY3VzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbjtyZXR1cm4gdGhpcy5pc05ld01lbnUmJih0aGlzLmlzTmV3TWVudT0hMSx0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKT8odGhpcy5tZW51LmJsdXIoKSx0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vtb3ZlIixmdW5jdGlvbigpe2UodC50YXJnZXQpLnRyaWdnZXIodC5vcmlnaW5hbEV2ZW50KX0pLHZvaWQgMCk6KG49aS5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIiksITEhPT10aGlzLl90cmlnZ2VyKCJmb2N1cyIsdCx7aXRlbTpufSkmJnQub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShuLnZhbHVlKSxzPWkuaXRlbS5hdHRyKCJhcmlhLWxhYmVsIil8fG4udmFsdWUscyYmZS50cmltKHMpLmxlbmd0aCYmKHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKCI8ZGl2PiIpLnRleHQocykuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSksdm9pZCAwKX0sbWVudXNlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBpPXQuaXRlbS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIpLHM9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXMsdGhpcy5zZWxlY3RlZEl0ZW09aX0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoInNlbGVjdCIsZSx7aXRlbTppfSkmJnRoaXMuX3ZhbHVlKGkudmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09aX19KSx0aGlzLmxpdmVSZWdpb249ZSgiPHNwYW4+Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoiYXNzZXJ0aXZlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyJ9KS5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIikuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKSx0aGlzLm1lbnUuZWxlbWVudC5yZW1vdmUoKSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJzb3VyY2UiPT09ZSYmdGhpcy5faW5pdFNvdXJjZSgpLCJhcHBlbmRUbyI9PT1lJiZ0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiZGlzYWJsZWQiPT09ZSYmdCYmdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gdCYmKHQ9dC5qcXVlcnl8fHQubm9kZVR5cGU/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodCkuZXEoMCkpLHQmJnRbMF18fCh0PXRoaXMuZWxlbWVudC5jbG9zZXN0KCIudWktZnJvbnQiKSksdC5sZW5ndGh8fCh0PXRoaXMuZG9jdW1lbnRbMF0uYm9keSksdH0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcztlLmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KHQ9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihpLHMpe3MoZS51aS5hdXRvY29tcGxldGUuZmlsdGVyKHQsaS50ZXJtKSl9KToic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U/KGk9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbih0LG4pe3MueGhyJiZzLnhoci5hYm9ydCgpLHMueGhyPWUuYWpheCh7dXJsOmksZGF0YTp0LGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGUpe24oZSl9LGVycm9yOmZ1bmN0aW9uKCl7bihbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50ZXJtPT09dGhpcy5fdmFsdWUoKSxpPXRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpLHM9ZS5hbHRLZXl8fGUuY3RybEtleXx8ZS5tZXRhS2V5fHxlLnNoaWZ0S2V5OyghdHx8dCYmIWkmJiFzKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxlKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWU/ZTp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLGUubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZSh0KTp0aGlzLl90cmlnZ2VyKCJzZWFyY2giLHQpIT09ITE/dGhpcy5fc2VhcmNoKGUpOnZvaWQgMH0sX3NlYXJjaDpmdW5jdGlvbihlKXt0aGlzLnBlbmRpbmcrKyx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06ZX0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciB0PSsrdGhpcy5yZXF1ZXN0SW5kZXg7cmV0dXJuIGUucHJveHkoZnVuY3Rpb24oZSl7dD09PXRoaXMucmVxdWVzdEluZGV4JiZ0aGlzLl9fcmVzcG9uc2UoZSksdGhpcy5wZW5kaW5nLS0sdGhpcy5wZW5kaW5nfHx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIil9LHRoaXMpfSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe2UmJihlPXRoaXMuX25vcm1hbGl6ZShlKSksdGhpcy5fdHJpZ2dlcigicmVzcG9uc2UiLG51bGwse2NvbnRlbnQ6ZX0pLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJmUmJmUubGVuZ3RoJiYhdGhpcy5jYW5jZWxTZWFyY2g/KHRoaXMuX3N1Z2dlc3QoZSksdGhpcy5fdHJpZ2dlcigib3BlbiIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZShlKX0sX2Nsb3NlOmZ1bmN0aW9uKGUpe3RoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLGUpKX0sX2NoYW5nZTpmdW5jdGlvbihlKXt0aGlzLnByZXZpb3VzIT09dGhpcy5fdmFsdWUoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlLHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdLmxhYmVsJiZ0WzBdLnZhbHVlP3Q6ZS5tYXAodCxmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/e2xhYmVsOnQsdmFsdWU6dH06ZS5leHRlbmQoe30sdCx7bGFiZWw6dC5sYWJlbHx8dC52YWx1ZSx2YWx1ZTp0LnZhbHVlfHx0LmxhYmVsfSl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTt0aGlzLl9yZW5kZXJNZW51KGksdCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5tZW51LnJlZnJlc2goKSxpLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksaS5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVudS5lbGVtZW50O2Uub3V0ZXJXaWR0aChNYXRoLm1heChlLndpZHRoKCIiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcztlLmVhY2goaSxmdW5jdGlvbihlLGkpe3MuX3JlbmRlckl0ZW1EYXRhKHQsaSl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0oZSx0KS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIsdCl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUoIjxsaT4iKS50ZXh0KGkubGFiZWwpLmFwcGVuZFRvKHQpfSxfbW92ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKT90aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSYmL15wcmV2aW91cy8udGVzdChlKXx8dGhpcy5tZW51LmlzTGFzdEl0ZW0oKSYmL15uZXh0Ly50ZXN0KGUpPyh0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMubWVudS5ibHVyKCksdm9pZCAwKToodGhpcy5tZW51W2VdKHQpLHZvaWQgMCk6KHRoaXMuc2VhcmNoKG51bGwsdCksdm9pZCAwKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudS5lbGVtZW50fSxfdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU1ldGhvZC5hcHBseSh0aGlzLmVsZW1lbnQsYXJndW1lbnRzKX0sX2tleUV2ZW50OmZ1bmN0aW9uKGUsdCl7KCF0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSkmJih0aGlzLl9tb3ZlKGUsdCksdC5wcmV2ZW50RGVmYXVsdCgpKX19KSxlLmV4dGVuZChlLnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz1SZWdFeHAoZS51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoaSksImkiKTtyZXR1cm4gZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIHMudGVzdChlLmxhYmVsfHxlLnZhbHVlfHxlKX0pfX0pLGUud2lkZ2V0KCJ1aS5hdXRvY29tcGxldGUiLGUudWkuYXV0b2NvbXBsZXRlLHtvcHRpb25zOnttZXNzYWdlczp7bm9SZXN1bHRzOiJObyBzZWFyY2ggcmVzdWx0cy4iLHJlc3VsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKGU+MT8iIHJlc3VsdHMgYXJlIjoiIHJlc3VsdCBpcyIpKyIgYXZhaWxhYmxlLCB1c2UgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBuYXZpZ2F0ZS4ifX19LF9fcmVzcG9uc2U6ZnVuY3Rpb24odCl7dmFyIGk7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8dGhpcy5jYW5jZWxTZWFyY2h8fChpPXQmJnQubGVuZ3RoP3RoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKHQubGVuZ3RoKTp0aGlzLm9wdGlvbnMubWVzc2FnZXMubm9SZXN1bHRzLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKCI8ZGl2PiIpLnRleHQoaSkuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSl9fSksZS51aS5hdXRvY29tcGxldGU7dmFyIGMscD0idWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLGY9InVpLWJ1dHRvbi1pY29ucy1vbmx5IHVpLWJ1dHRvbi1pY29uLW9ubHkgdWktYnV0dG9uLXRleHQtaWNvbnMgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IHVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IHVpLWJ1dHRvbi10ZXh0LW9ubHkiLG09ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmZpbmQoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKX0sMSl9LGc9ZnVuY3Rpb24odCl7dmFyIGk9dC5uYW1lLHM9dC5mb3JtLG49ZShbXSk7cmV0dXJuIGkmJihpPWkucmVwbGFjZSgvJy9nLCJcXCciKSxuPXM/ZShzKS5maW5kKCJbbmFtZT0nIitpKyInXVt0eXBlPXJhZGlvXSIpOmUoIltuYW1lPSciK2krIiddW3R5cGU9cmFkaW9dIix0Lm93bmVyRG9jdW1lbnQpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLmZvcm19KSksbn07ZS53aWRnZXQoInVpLmJ1dHRvbiIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxidXR0b24+IixvcHRpb25zOntkaXNhYmxlZDpudWxsLHRleHQ6ITAsbGFiZWw6bnVsbCxpY29uczp7cHJpbWFyeTpudWxsLHNlY29uZGFyeTpudWxsfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5jbG9zZXN0KCJmb3JtIikudW5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSkuYmluZCgicmVzZXQiK3RoaXMuZXZlbnROYW1lc3BhY2UsbSksImJvb2xlYW4iIT10eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkP3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hIXRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9kZXRlcm1pbmVCdXR0b25UeXBlKCksdGhpcy5oYXNUaXRsZT0hIXRoaXMuYnV0dG9uRWxlbWVudC5hdHRyKCJ0aXRsZSIpO3ZhciB0PXRoaXMsaT10aGlzLm9wdGlvbnMscz0iY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlLG49cz8iIjoidWktc3RhdGUtYWN0aXZlIjtudWxsPT09aS5sYWJlbCYmKGkubGFiZWw9ImlucHV0Ij09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQudmFsKCk6dGhpcy5idXR0b25FbGVtZW50Lmh0bWwoKSksdGhpcy5faG92ZXJhYmxlKHRoaXMuYnV0dG9uRWxlbWVudCksdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKHApLmF0dHIoInJvbGUiLCJidXR0b24iKS5iaW5kKCJtb3VzZWVudGVyIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8dGhpcz09PWMmJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgibW91c2VsZWF2ZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2kuZGlzYWJsZWR8fGUodGhpcykucmVtb3ZlQ2xhc3Mobil9KS5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXtpLmRpc2FibGVkJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSksdGhpcy5fb24oe2ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxibHVyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfX0pLHMmJnRoaXMuZWxlbWVudC5iaW5kKCJjaGFuZ2UiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0LnJlZnJlc2goKX0pLCJjaGVja2JveCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6dm9pZCAwfSk6InJhZGlvIj09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZihpLmRpc2FibGVkKXJldHVybiExO2UodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHQuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik7dmFyIHM9dC5lbGVtZW50WzBdO2cocykubm90KHMpLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOih0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6KGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGM9dGhpcyx0LmRvY3VtZW50Lm9uZSgibW91c2V1cCIsZnVuY3Rpb24oKXtjPW51bGx9KSx2b2lkIDApfSkuYmluZCgibW91c2V1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3JldHVybiBpLmRpc2FibGVkPyExOihlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx2b2lkIDApfSkuYmluZCgia2V5ZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtyZXR1cm4gaS5kaXNhYmxlZD8hMTooKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5TUEFDRXx8dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVOVEVSKSYmZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdm9pZCAwKX0pLmJpbmQoImtleXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlKyIgYmx1ciIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSksdGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0UmJmUodGhpcykuY2xpY2soKX0pKSx0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIixpLmRpc2FibGVkKSx0aGlzLl9yZXNldEJ1dHRvbigpfSxfZGV0ZXJtaW5lQnV0dG9uVHlwZTpmdW5jdGlvbigpe3ZhciBlLHQsaTt0aGlzLnR5cGU9dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKT8iY2hlY2tib3giOnRoaXMuZWxlbWVudC5pcygiW3R5cGU9cmFkaW9dIik/InJhZGlvIjp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/ImlucHV0IjoiYnV0dG9uIiwiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlPyhlPXRoaXMuZWxlbWVudC5wYXJlbnRzKCkubGFzdCgpLHQ9ImxhYmVsW2Zvcj0nIit0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSsiJ10iLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KGU9ZS5sZW5ndGg/ZS5zaWJsaW5ncygpOnRoaXMuZWxlbWVudC5zaWJsaW5ncygpLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbHRlcih0KSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwodGhpcy5idXR0b25FbGVtZW50PWUuZmluZCh0KSkpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIiksaT10aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIiksaSYmdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucHJvcCgiYXJpYS1wcmVzc2VkIixpKSk6dGhpcy5idXR0b25FbGVtZW50PXRoaXMuZWxlbWVudH0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnV0dG9uRWxlbWVudH0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhwKyIgdWktc3RhdGUtYWN0aXZlICIrZikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fc3VwZXIoZSx0KSwiZGlzYWJsZWQiPT09ZT8odGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCksdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhIXQpLHQmJigiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlP3RoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIHVpLXN0YXRlLWFjdGl2ZSIpKSx2b2lkIDApOih0aGlzLl9yZXNldEJ1dHRvbigpLHZvaWQgMCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuaXMoImlucHV0LCBidXR0b24iKT90aGlzLmVsZW1lbnQuaXMoIjpkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5oYXNDbGFzcygidWktYnV0dG9uLWRpc2FibGVkIik7dCE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdCksInJhZGlvIj09PXRoaXMudHlwZT9nKHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe2UodGhpcykuaXMoIjpjaGVja2VkIik/ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6ImNoZWNrYm94Ij09PXRoaXMudHlwZSYmKHRoaXMuZWxlbWVudC5pcygiOmNoZWNrZWQiKT90aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIikpfSxfcmVzZXRCdXR0b246ZnVuY3Rpb24oKXtpZigiaW5wdXQiPT09dGhpcy50eXBlKXJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuZWxlbWVudC52YWwodGhpcy5vcHRpb25zLmxhYmVsKSx2b2lkIDA7dmFyIHQ9dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKGYpLGk9ZSgiPHNwYW4+PC9zcGFuPiIsdGhpcy5kb2N1bWVudFswXSkuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0IikuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpLmFwcGVuZFRvKHQuZW1wdHkoKSkudGV4dCgpLHM9dGhpcy5vcHRpb25zLmljb25zLG49cy5wcmltYXJ5JiZzLnNlY29uZGFyeSxhPVtdO3MucHJpbWFyeXx8cy5zZWNvbmRhcnk/KHRoaXMub3B0aW9ucy50ZXh0JiZhLnB1c2goInVpLWJ1dHRvbi10ZXh0LWljb24iKyhuPyJzIjpzLnByaW1hcnk/Ii1wcmltYXJ5IjoiLXNlY29uZGFyeSIpKSxzLnByaW1hcnkmJnQucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiK3MucHJpbWFyeSsiJz48L3NwYW4+Iikscy5zZWNvbmRhcnkmJnQuYXBwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gIitzLnNlY29uZGFyeSsiJz48L3NwYW4+IiksdGhpcy5vcHRpb25zLnRleHR8fChhLnB1c2gobj8idWktYnV0dG9uLWljb25zLW9ubHkiOiJ1aS1idXR0b24taWNvbi1vbmx5IiksdGhpcy5oYXNUaXRsZXx8dC5hdHRyKCJ0aXRsZSIsZS50cmltKGkpKSkpOmEucHVzaCgidWktYnV0dG9uLXRleHQtb25seSIpLHQuYWRkQ2xhc3MoYS5qb2luKCIgIikpfX0pLGUud2lkZ2V0KCJ1aS5idXR0b25zZXQiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2l0ZW1zOiJidXR0b24sIGlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgaW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dLCBhLCA6ZGF0YSh1aS1idXR0b24pIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYnV0dG9uc2V0Iil9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiZGlzYWJsZWQiPT09ZSYmdGhpcy5idXR0b25zLmJ1dHRvbigib3B0aW9uIixlLHQpLHRoaXMuX3N1cGVyKGUsdCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD0icnRsIj09PXRoaXMuZWxlbWVudC5jc3MoImRpcmVjdGlvbiIpLGk9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSxzPWkuZmlsdGVyKCI6dWktYnV0dG9uIik7aS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKSxzLmJ1dHRvbigicmVmcmVzaCIpLHRoaXMuYnV0dG9ucz1pLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5maWx0ZXIoIjpmaXJzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1yaWdodCI6InVpLWNvcm5lci1sZWZ0IikuZW5kKCkuZmlsdGVyKCI6bGFzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1sZWZ0IjoidWktY29ybmVyLXJpZ2h0IikuZW5kKCkuZW5kKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b25zZXQiKSx0aGlzLmJ1dHRvbnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5idXR0b24oImRlc3Ryb3kiKX19KSxlLnVpLmJ1dHRvbixlLmV4dGVuZChlLnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOiIxLjExLjQifX0pO3ZhciB2O2UuZXh0ZW5kKG4ucHJvdG90eXBlLHttYXJrZXJDbGFzc05hbWU6Imhhc0RhdGVwaWNrZXIiLG1heFJvd3M6NCxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbihlKXtyZXR1cm4gcih0aGlzLl9kZWZhdWx0cyxlfHx7fSksdGhpc30sX2F0dGFjaERhdGVwaWNrZXI6ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGE7cz10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj0iZGl2Ij09PXN8fCJzcGFuIj09PXMsdC5pZHx8KHRoaXMudXVpZCs9MSx0LmlkPSJkcCIrdGhpcy51dWlkKSxhPXRoaXMuX25ld0luc3QoZSh0KSxuKSxhLnNldHRpbmdzPWUuZXh0ZW5kKHt9LGl8fHt9KSwiaW5wdXQiPT09cz90aGlzLl9jb25uZWN0RGF0ZXBpY2tlcih0LGEpOm4mJnRoaXMuX2lubGluZURhdGVwaWNrZXIodCxhKX0sX25ld0luc3Q6ZnVuY3Rpb24odCxpKXt2YXIgcz10WzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV9cLV0pL2csIlxcXFwkMSIpO3JldHVybntpZDpzLGlucHV0OnQsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6aSxkcERpdjppP2EoZSgiPGRpdiBjbGFzcz0nIit0aGlzLl9pbmxpbmVDbGFzcysiIHVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj4iKSk6dGhpcy5kcERpdn19LF9jb25uZWN0RGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkpe3ZhciBzPWUodCk7aS5hcHBlbmQ9ZShbXSksaS50cmlnZ2VyPWUoW10pLHMuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpfHwodGhpcy5fYXR0YWNobWVudHMocyxpKSxzLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5rZXlkb3duKHRoaXMuX2RvS2V5RG93bikua2V5cHJlc3ModGhpcy5fZG9LZXlQcmVzcykua2V5dXAodGhpcy5fZG9LZXlVcCksdGhpcy5fYXV0b1NpemUoaSksZS5kYXRhKHQsImRhdGVwaWNrZXIiLGkpLGkuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpKX0sX2F0dGFjaG1lbnRzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89dGhpcy5fZ2V0KGksImFwcGVuZFRleHQiKSxyPXRoaXMuX2dldChpLCJpc1JUTCIpO2kuYXBwZW5kJiZpLmFwcGVuZC5yZW1vdmUoKSxvJiYoaS5hcHBlbmQ9ZSgiPHNwYW4gY2xhc3M9JyIrdGhpcy5fYXBwZW5kQ2xhc3MrIic+IitvKyI8L3NwYW4+IiksdFtyPyJiZWZvcmUiOiJhZnRlciJdKGkuYXBwZW5kKSksdC51bmJpbmQoImZvY3VzIix0aGlzLl9zaG93RGF0ZXBpY2tlciksaS50cmlnZ2VyJiZpLnRyaWdnZXIucmVtb3ZlKCkscz10aGlzLl9nZXQoaSwic2hvd09uIiksKCJmb2N1cyI9PT1zfHwiYm90aCI9PT1zKSYmdC5mb2N1cyh0aGlzLl9zaG93RGF0ZXBpY2tlciksKCJidXR0b24iPT09c3x8ImJvdGgiPT09cykmJihuPXRoaXMuX2dldChpLCJidXR0b25UZXh0IiksYT10aGlzLl9nZXQoaSwiYnV0dG9uSW1hZ2UiKSxpLnRyaWdnZXI9ZSh0aGlzLl9nZXQoaSwiYnV0dG9uSW1hZ2VPbmx5Iik/ZSgiPGltZy8+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5hdHRyKHtzcmM6YSxhbHQ6bix0aXRsZTpufSk6ZSgiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuaHRtbChhP2UoIjxpbWcvPiIpLmF0dHIoe3NyYzphLGFsdDpuLHRpdGxlOm59KTpuKSksdFtyPyJiZWZvcmUiOiJhZnRlciJdKGkudHJpZ2dlciksaS50cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJmUuZGF0ZXBpY2tlci5fbGFzdElucHV0PT09dFswXT9lLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk6ZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT10WzBdPyhlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0WzBdKSk6ZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0WzBdKSwhMX0pKX0sX2F1dG9TaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2dldChlLCJhdXRvU2l6ZSIpJiYhZS5pbmxpbmUpe3ZhciB0LGkscyxuLGE9bmV3IERhdGUoMjAwOSwxMSwyMCksbz10aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpO28ubWF0Y2goL1tETV0vKSYmKHQ9ZnVuY3Rpb24oZSl7Zm9yKGk9MCxzPTAsbj0wO2UubGVuZ3RoPm47bisrKWVbbl0ubGVuZ3RoPmkmJihpPWVbbl0ubGVuZ3RoLHM9bik7cmV0dXJuIHN9LGEuc2V0TW9udGgodCh0aGlzLl9nZXQoZSxvLm1hdGNoKC9NTS8pPyJtb250aE5hbWVzIjoibW9udGhOYW1lc1Nob3J0IikpKSxhLnNldERhdGUodCh0aGlzLl9nZXQoZSxvLm1hdGNoKC9ERC8pPyJkYXlOYW1lcyI6ImRheU5hbWVzU2hvcnQiKSkrMjAtYS5nZXREYXkoKSkpLGUuaW5wdXQuYXR0cigic2l6ZSIsdGhpcy5fZm9ybWF0RGF0ZShlLGEpLmxlbmd0aCl9fSxfaW5saW5lRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGkpe3ZhciBzPWUodCk7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fChzLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5hcHBlbmQoaS5kcERpdiksZS5kYXRhKHQsImRhdGVwaWNrZXIiLGkpLHRoaXMuX3NldERhdGUoaSx0aGlzLl9nZXREZWZhdWx0RGF0ZShpKSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIodCksaS5kcERpdi5jc3MoImRpc3BsYXkiLCJibG9jayIpKX0sX2RpYWxvZ0RhdGVwaWNrZXI6ZnVuY3Rpb24odCxpLHMsbixhKXt2YXIgbyxoLGwsdSxkLGM9dGhpcy5fZGlhbG9nSW5zdDtyZXR1cm4gY3x8KHRoaXMudXVpZCs9MSxvPSJkcCIrdGhpcy51dWlkLHRoaXMuX2RpYWxvZ0lucHV0PWUoIjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nIitvKyInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPiIpLHRoaXMuX2RpYWxvZ0lucHV0LmtleWRvd24odGhpcy5fZG9LZXlEb3duKSxlKCJib2R5IikuYXBwZW5kKHRoaXMuX2RpYWxvZ0lucHV0KSxjPXRoaXMuX2RpYWxvZ0luc3Q9dGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwhMSksYy5zZXR0aW5ncz17fSxlLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sImRhdGVwaWNrZXIiLGMpKSxyKGMuc2V0dGluZ3Msbnx8e30pLGk9aSYmaS5jb25zdHJ1Y3Rvcj09PURhdGU/dGhpcy5fZm9ybWF0RGF0ZShjLGkpOmksdGhpcy5fZGlhbG9nSW5wdXQudmFsKGkpLHRoaXMuX3Bvcz1hP2EubGVuZ3RoP2E6W2EucGFnZVgsYS5wYWdlWV06bnVsbCx0aGlzLl9wb3N8fChoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsdT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsdGhpcy5fcG9zPVtoLzItMTAwK3UsbC8yLTE1MCtkXSksdGhpcy5fZGlhbG9nSW5wdXQuY3NzKCJsZWZ0Iix0aGlzLl9wb3NbMF0rMjArInB4IikuY3NzKCJ0b3AiLHRoaXMuX3Bvc1sxXSsicHgiKSxjLnNldHRpbmdzLm9uU2VsZWN0PXMsdGhpcy5faW5EaWFsb2c9ITAsdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyksdGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0pLGUuYmxvY2tVSSYmZS5ibG9ja1VJKHRoaXMuZHBEaXYpLGUuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSwiZGF0ZXBpY2tlciIsYyksdGhpc30sX2Rlc3Ryb3lEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBpLHM9ZSh0KSxuPWUuZGF0YSh0LCJkYXRlcGlja2VyIik7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlLnJlbW92ZURhdGEodCwiZGF0ZXBpY2tlciIpLCJpbnB1dCI9PT1pPyhuLmFwcGVuZC5yZW1vdmUoKSxuLnRyaWdnZXIucmVtb3ZlKCkscy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsdGhpcy5fZG9LZXlEb3duKS51bmJpbmQoImtleXByZXNzIix0aGlzLl9kb0tleVByZXNzKS51bmJpbmQoImtleXVwIix0aGlzLl9kb0tleVVwKSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJnMucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmVtcHR5KCksdj09PW4mJih2PW51bGwpKX0sX2VuYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxuPWUodCksYT1lLmRhdGEodCwiZGF0ZXBpY2tlciIpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksImlucHV0Ij09PWk/KHQuZGlzYWJsZWQ9ITEsYS50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMS4wIixjdXJzb3I6IiJ9KSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJihzPW4uY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikscy5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMSkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPWUubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD9udWxsOmV9KSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgaSxzLG49ZSh0KSxhPWUuZGF0YSh0LCJkYXRlcGlja2VyIik7bi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwiaW5wdXQiPT09aT8odC5kaXNhYmxlZD0hMCxhLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMH0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIwLjUiLGN1cnNvcjoiZGVmYXVsdCJ9KSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJihzPW4uY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikscy5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMCkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPWUubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD9udWxsOmV9KSx0aGlzLl9kaXNhYmxlZElucHV0c1t0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGhdPXQpfSxfaXNEaXNhYmxlZERhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7Zm9yKHZhciB0PTA7dGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoPnQ7dCsrKWlmKHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RdPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sX2dldEluc3Q6ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBlLmRhdGEodCwiZGF0ZXBpY2tlciIpfWNhdGNoKGkpe3Rocm93Ik1pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyIn19LF9vcHRpb25EYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhLG8saCxsPXRoaXMuX2dldEluc3QodCk7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGk/ImRlZmF1bHRzIj09PWk/ZS5leHRlbmQoe30sZS5kYXRlcGlja2VyLl9kZWZhdWx0cyk6bD8iYWxsIj09PWk/ZS5leHRlbmQoe30sbC5zZXR0aW5ncyk6dGhpcy5fZ2V0KGwsaSk6bnVsbDoobj1pfHx7fSwic3RyaW5nIj09dHlwZW9mIGkmJihuPXt9LG5baV09cyksbCYmKHRoaXMuX2N1ckluc3Q9PT1sJiZ0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLGE9dGhpcy5fZ2V0RGF0ZURhdGVwaWNrZXIodCwhMCksbz10aGlzLl9nZXRNaW5NYXhEYXRlKGwsIm1pbiIpLGg9dGhpcy5fZ2V0TWluTWF4RGF0ZShsLCJtYXgiKSxyKGwuc2V0dGluZ3MsbiksbnVsbCE9PW8mJnZvaWQgMCE9PW4uZGF0ZUZvcm1hdCYmdm9pZCAwPT09bi5taW5EYXRlJiYobC5zZXR0aW5ncy5taW5EYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxvKSksbnVsbCE9PWgmJnZvaWQgMCE9PW4uZGF0ZUZvcm1hdCYmdm9pZCAwPT09bi5tYXhEYXRlJiYobC5zZXR0aW5ncy5tYXhEYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxoKSksImRpc2FibGVkImluIG4mJihuLmRpc2FibGVkP3RoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpOnRoaXMuX2VuYWJsZURhdGVwaWNrZXIodCkpLHRoaXMuX2F0dGFjaG1lbnRzKGUodCksbCksdGhpcy5fYXV0b1NpemUobCksdGhpcy5fc2V0RGF0ZShsLGEpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShsKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGwpKSx2b2lkIDApfSxfY2hhbmdlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsaSl7dGhpcy5fb3B0aW9uRGF0ZXBpY2tlcihlLHQsaSl9LF9yZWZyZXNoRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRJbnN0KGUpO3QmJnRoaXMuX3VwZGF0ZURhdGVwaWNrZXIodCl9LF9zZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldEluc3QoZSk7aSYmKHRoaXMuX3NldERhdGUoaSx0KSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSl9LF9nZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldEluc3QoZSk7cmV0dXJuIGkmJiFpLmlubGluZSYmdGhpcy5fc2V0RGF0ZUZyb21GaWVsZChpLHQpLGk/dGhpcy5fZ2V0RGF0ZShpKTpudWxsfSxfZG9LZXlEb3duOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCksbz0hMCxyPWEuZHBEaXYuaXMoIi51aS1kYXRlcGlja2VyLXJ0bCIpO2lmKGEuX2tleUV2ZW50PSEwLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA5OmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxvPSExO2JyZWFrO2Nhc2UgMTM6cmV0dXJuIG49ZSgidGQuIitlLmRhdGVwaWNrZXIuX2RheU92ZXJDbGFzcysiOm5vdCguIitlLmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcysiKSIsYS5kcERpdiksblswXSYmZS5kYXRlcGlja2VyLl9zZWxlY3REYXkodC50YXJnZXQsYS5zZWxlY3RlZE1vbnRoLGEuc2VsZWN0ZWRZZWFyLG5bMF0pLGk9ZS5kYXRlcGlja2VyLl9nZXQoYSwib25TZWxlY3QiKSxpPyhzPWUuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShhKSxpLmFwcGx5KGEuaW5wdXQ/YS5pbnB1dFswXTpudWxsLFtzLGFdKSk6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCExO2Nhc2UgMjc6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO2JyZWFrO2Nhc2UgMzM6ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8tZS5kYXRlcGlja2VyLl9nZXQoYSwic3RlcEJpZ01vbnRocyIpOi1lLmRhdGVwaWNrZXIuX2dldChhLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM0OmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/K2UuZGF0ZXBpY2tlci5fZ2V0KGEsInN0ZXBCaWdNb250aHMiKTorZS5kYXRlcGlja2VyLl9nZXQoYSwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzNToodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2NsZWFyRGF0ZSh0LnRhcmdldCksbz10LmN0cmxLZXl8fHQubWV0YUtleTticmVhaztjYXNlIDM2Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fZ290b1RvZGF5KHQudGFyZ2V0KSxvPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzc6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHI/MTotMSwiRCIpLG89dC5jdHJsS2V5fHx0Lm1ldGFLZXksdC5vcmlnaW5hbEV2ZW50LmFsdEtleSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8tZS5kYXRlcGlja2VyLl9nZXQoYSwic3RlcEJpZ01vbnRocyIpOi1lLmRhdGVwaWNrZXIuX2dldChhLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM4Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCwtNywiRCIpLG89dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzOToodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQscj8tMToxLCJEIiksbz10LmN0cmxLZXl8fHQubWV0YUtleSx0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5PytlLmRhdGVwaWNrZXIuX2dldChhLCJzdGVwQmlnTW9udGhzIik6K2UuZGF0ZXBpY2tlci5fZ2V0KGEsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgNDA6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LDcsIkQiKSxvPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2RlZmF1bHQ6bz0hMX1lbHNlIDM2PT09dC5rZXlDb2RlJiZ0LmN0cmxLZXk/ZS5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0aGlzKTpvPSExO28mJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSl9LF9kb0tleVByZXNzOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbj1lLmRhdGVwaWNrZXIuX2dldEluc3QodC50YXJnZXQpOw0KcmV0dXJuIGUuZGF0ZXBpY2tlci5fZ2V0KG4sImNvbnN0cmFpbklucHV0Iik/KGk9ZS5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKGUuZGF0ZXBpY2tlci5fZ2V0KG4sImRhdGVGb3JtYXQiKSkscz1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PXQuY2hhckNvZGU/dC5rZXlDb2RlOnQuY2hhckNvZGUpLHQuY3RybEtleXx8dC5tZXRhS2V5fHwiICI+c3x8IWl8fGkuaW5kZXhPZihzKT4tMSk6dm9pZCAwfSxfZG9LZXlVcDpmdW5jdGlvbih0KXt2YXIgaSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7aWYocy5pbnB1dC52YWwoKSE9PXMubGFzdFZhbCl0cnl7aT1lLmRhdGVwaWNrZXIucGFyc2VEYXRlKGUuZGF0ZXBpY2tlci5fZ2V0KHMsImRhdGVGb3JtYXQiKSxzLmlucHV0P3MuaW5wdXQudmFsKCk6bnVsbCxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhzKSksaSYmKGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIocykpfWNhdGNoKG4pe31yZXR1cm4hMH0sX3Nob3dEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKHQ9dC50YXJnZXR8fHQsImlucHV0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHQ9ZSgiaW5wdXQiLHQucGFyZW50Tm9kZSlbMF0pLCFlLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKHQpJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXQpe3ZhciBpLG4sYSxvLGgsbCx1O2k9ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQpLGUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09aSYmKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxpJiZlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLG49ZS5kYXRlcGlja2VyLl9nZXQoaSwiYmVmb3JlU2hvdyIpLGE9bj9uLmFwcGx5KHQsW3QsaV0pOnt9LGEhPT0hMSYmKHIoaS5zZXR0aW5ncyxhKSxpLmxhc3RWYWw9bnVsbCxlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD10LGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChpKSxlLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYodC52YWx1ZT0iIiksZS5kYXRlcGlja2VyLl9wb3N8fChlLmRhdGVwaWNrZXIuX3Bvcz1lLmRhdGVwaWNrZXIuX2ZpbmRQb3ModCksZS5kYXRlcGlja2VyLl9wb3NbMV0rPXQub2Zmc2V0SGVpZ2h0KSxvPSExLGUodCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gb3w9ImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpLCFvfSksaD17bGVmdDplLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6ZS5kYXRlcGlja2VyLl9wb3NbMV19LGUuZGF0ZXBpY2tlci5fcG9zPW51bGwsaS5kcERpdi5lbXB0eSgpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6ImJsb2NrIix0b3A6Ii0xMDAwcHgifSksZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGkpLGg9ZS5kYXRlcGlja2VyLl9jaGVja09mZnNldChpLGgsbyksaS5kcERpdi5jc3Moe3Bvc2l0aW9uOmUuZGF0ZXBpY2tlci5faW5EaWFsb2cmJmUuYmxvY2tVST8ic3RhdGljIjpvPyJmaXhlZCI6ImFic29sdXRlIixkaXNwbGF5OiJub25lIixsZWZ0OmgubGVmdCsicHgiLHRvcDpoLnRvcCsicHgifSksaS5pbmxpbmV8fChsPWUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dBbmltIiksdT1lLmRhdGVwaWNrZXIuX2dldChpLCJkdXJhdGlvbiIpLGkuZHBEaXYuY3NzKCJ6LWluZGV4IixzKGUodCkpKzEpLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsZS5lZmZlY3RzJiZlLmVmZmVjdHMuZWZmZWN0W2xdP2kuZHBEaXYuc2hvdyhsLGUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dPcHRpb25zIiksdSk6aS5kcERpdltsfHwic2hvdyJdKGw/dTpudWxsKSxlLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoaSkmJmkuaW5wdXQuZm9jdXMoKSxlLmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpfX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dGhpcy5tYXhSb3dzPTQsdj10LHQuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKHQpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyh0KTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLG49c1sxXSxhPTE3LHI9dC5kcERpdi5maW5kKCIuIit0aGlzLl9kYXlPdmVyQ2xhc3MrIiBhIik7ci5sZW5ndGg+MCYmby5hcHBseShyLmdldCgwKSksdC5kcERpdi5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTQiKS53aWR0aCgiIiksbj4xJiZ0LmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIrbikuY3NzKCJ3aWR0aCIsYSpuKyJlbSIpLHQuZHBEaXZbKDEhPT1zWzBdfHwxIT09c1sxXT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKSx0LmRwRGl2Wyh0aGlzLl9nZXQodCwiaXNSVEwiKT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItcnRsIiksdD09PWUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KHQpJiZ0LmlucHV0LmZvY3VzKCksdC55ZWFyc2h0bWwmJihpPXQueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPT09dC55ZWFyc2h0bWwmJnQueWVhcnNodG1sJiZ0LmRwRGl2LmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLXllYXI6Zmlyc3QiKS5yZXBsYWNlV2l0aCh0LnllYXJzaHRtbCksaT10LnllYXJzaHRtbD1udWxsfSwwKSl9LF9zaG91bGRGb2N1c0lucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmlucHV0JiZlLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhZS5pbnB1dC5pcygiOmRpc2FibGVkIikmJiFlLmlucHV0LmlzKCI6Zm9jdXMiKX0sX2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj10LmRwRGl2Lm91dGVyV2lkdGgoKSxhPXQuZHBEaXYub3V0ZXJIZWlnaHQoKSxvPXQuaW5wdXQ/dC5pbnB1dC5vdXRlcldpZHRoKCk6MCxyPXQuaW5wdXQ/dC5pbnB1dC5vdXRlckhlaWdodCgpOjAsaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgrKHM/MDplKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCsocz8wOmUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTtyZXR1cm4gaS5sZWZ0LT10aGlzLl9nZXQodCwiaXNSVEwiKT9uLW86MCxpLmxlZnQtPXMmJmkubGVmdD09PXQuaW5wdXQub2Zmc2V0KCkubGVmdD9lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk6MCxpLnRvcC09cyYmaS50b3A9PT10LmlucHV0Lm9mZnNldCgpLnRvcCtyP2UoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOjAsaS5sZWZ0LT1NYXRoLm1pbihpLmxlZnQsaS5sZWZ0K24+aCYmaD5uP01hdGguYWJzKGkubGVmdCtuLWgpOjApLGkudG9wLT1NYXRoLm1pbihpLnRvcCxpLnRvcCthPmwmJmw+YT9NYXRoLmFicyhhK3IpOjApLGl9LF9maW5kUG9zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxzPXRoaXMuX2dldEluc3QodCksbj10aGlzLl9nZXQocywiaXNSVEwiKTt0JiYoImhpZGRlbiI9PT10LnR5cGV8fDEhPT10Lm5vZGVUeXBlfHxlLmV4cHIuZmlsdGVycy5oaWRkZW4odCkpOyl0PXRbbj8icHJldmlvdXNTaWJsaW5nIjoibmV4dFNpYmxpbmciXTtyZXR1cm4gaT1lKHQpLm9mZnNldCgpLFtpLmxlZnQsaS50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbz10aGlzLl9jdXJJbnN0OyFvfHx0JiZvIT09ZS5kYXRhKHQsImRhdGVwaWNrZXIiKXx8dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcmJihpPXRoaXMuX2dldChvLCJzaG93QW5pbSIpLHM9dGhpcy5fZ2V0KG8sImR1cmF0aW9uIiksbj1mdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhvKX0sZS5lZmZlY3RzJiYoZS5lZmZlY3RzLmVmZmVjdFtpXXx8ZS5lZmZlY3RzW2ldKT9vLmRwRGl2LmhpZGUoaSxlLmRhdGVwaWNrZXIuX2dldChvLCJzaG93T3B0aW9ucyIpLHMsbik6by5kcERpdlsic2xpZGVEb3duIj09PWk/InNsaWRlVXAiOiJmYWRlSW4iPT09aT8iZmFkZU91dCI6ImhpZGUiXShpP3M6bnVsbCxuKSxpfHxuKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsYT10aGlzLl9nZXQobywib25DbG9zZSIpLGEmJmEuYXBwbHkoby5pbnB1dD9vLmlucHV0WzBdOm51bGwsW28uaW5wdXQ/by5pbnB1dC52YWwoKToiIixvXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiItMTAwcHgifSksZS5ibG9ja1VJJiYoZS51bmJsb2NrVUkoKSxlKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITEpfSxfdGlkeURpYWxvZzpmdW5jdGlvbihlKXtlLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24odCl7aWYoZS5kYXRlcGlja2VyLl9jdXJJbnN0KXt2YXIgaT1lKHQudGFyZ2V0KSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdChpWzBdKTsoaVswXS5pZCE9PWUuZGF0ZXBpY2tlci5fbWFpbkRpdklkJiYwPT09aS5wYXJlbnRzKCIjIitlLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiYhaS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmIWkuY2xvc2VzdCgiLiIrZS5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCYmZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmKCFlLmRhdGVwaWNrZXIuX2luRGlhbG9nfHwhZS5ibG9ja1VJKXx8aS5oYXNDbGFzcyhlLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09cykmJmUuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX19LF9hZGp1c3REYXRlOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKHQpLGE9dGhpcy5fZ2V0SW5zdChuWzBdKTt0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihuWzBdKXx8KHRoaXMuX2FkanVzdEluc3REYXRlKGEsaSsoIk0iPT09cz90aGlzLl9nZXQoYSwic2hvd0N1cnJlbnRBdFBvcyIpOjApLHMpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoYSkpfSxfZ290b1RvZGF5OmZ1bmN0aW9uKHQpe3ZhciBpLHM9ZSh0KSxuPXRoaXMuX2dldEluc3Qoc1swXSk7dGhpcy5fZ2V0KG4sImdvdG9DdXJyZW50IikmJm4uY3VycmVudERheT8obi5zZWxlY3RlZERheT1uLmN1cnJlbnREYXksbi5kcmF3TW9udGg9bi5zZWxlY3RlZE1vbnRoPW4uY3VycmVudE1vbnRoLG4uZHJhd1llYXI9bi5zZWxlY3RlZFllYXI9bi5jdXJyZW50WWVhcik6KGk9bmV3IERhdGUsbi5zZWxlY3RlZERheT1pLmdldERhdGUoKSxuLmRyYXdNb250aD1uLnNlbGVjdGVkTW9udGg9aS5nZXRNb250aCgpLG4uZHJhd1llYXI9bi5zZWxlY3RlZFllYXI9aS5nZXRGdWxsWWVhcigpKSx0aGlzLl9ub3RpZnlDaGFuZ2UobiksdGhpcy5fYWRqdXN0RGF0ZShzKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbih0LGkscyl7dmFyIG49ZSh0KSxhPXRoaXMuX2dldEluc3QoblswXSk7YVsic2VsZWN0ZWQiKygiTSI9PT1zPyJNb250aCI6IlllYXIiKV09YVsiZHJhdyIrKCJNIj09PXM/Ik1vbnRoIjoiWWVhciIpXT1wYXJzZUludChpLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XS52YWx1ZSwxMCksdGhpcy5fbm90aWZ5Q2hhbmdlKGEpLHRoaXMuX2FkanVzdERhdGUobil9LF9zZWxlY3REYXk6ZnVuY3Rpb24odCxpLHMsbil7dmFyIGEsbz1lKHQpO2UobikuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihvWzBdKXx8KGE9dGhpcy5fZ2V0SW5zdChvWzBdKSxhLnNlbGVjdGVkRGF5PWEuY3VycmVudERheT1lKCJhIixuKS5odG1sKCksYS5zZWxlY3RlZE1vbnRoPWEuY3VycmVudE1vbnRoPWksYS5zZWxlY3RlZFllYXI9YS5jdXJyZW50WWVhcj1zLHRoaXMuX3NlbGVjdERhdGUodCx0aGlzLl9mb3JtYXREYXRlKGEsYS5jdXJyZW50RGF5LGEuY3VycmVudE1vbnRoLGEuY3VycmVudFllYXIpKSl9LF9jbGVhckRhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0KTt0aGlzLl9zZWxlY3REYXRlKGksIiIpfSxfc2VsZWN0RGF0ZTpmdW5jdGlvbih0LGkpe3ZhciBzLG49ZSh0KSxhPXRoaXMuX2dldEluc3QoblswXSk7aT1udWxsIT1pP2k6dGhpcy5fZm9ybWF0RGF0ZShhKSxhLmlucHV0JiZhLmlucHV0LnZhbChpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoYSkscz10aGlzLl9nZXQoYSwib25TZWxlY3QiKSxzP3MuYXBwbHkoYS5pbnB1dD9hLmlucHV0WzBdOm51bGwsW2ksYV0pOmEuaW5wdXQmJmEuaW5wdXQudHJpZ2dlcigiY2hhbmdlIiksYS5pbmxpbmU/dGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihhKToodGhpcy5faGlkZURhdGVwaWNrZXIoKSx0aGlzLl9sYXN0SW5wdXQ9YS5pbnB1dFswXSwib2JqZWN0IiE9dHlwZW9mIGEuaW5wdXRbMF0mJmEuaW5wdXQuZm9jdXMoKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCl9LF91cGRhdGVBbHRlcm5hdGU6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGE9dGhpcy5fZ2V0KHQsImFsdEZpZWxkIik7YSYmKGk9dGhpcy5fZ2V0KHQsImFsdEZvcm1hdCIpfHx0aGlzLl9nZXQodCwiZGF0ZUZvcm1hdCIpLHM9dGhpcy5fZ2V0RGF0ZSh0KSxuPXRoaXMuZm9ybWF0RGF0ZShpLHMsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKSxlKGEpLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLnZhbChuKX0pKX0sbm9XZWVrZW5kczpmdW5jdGlvbihlKXt2YXIgdD1lLmdldERheSgpO3JldHVyblt0PjAmJjY+dCwiIl19LGlzbzg2MDFXZWVrOmZ1bmN0aW9uKGUpe3ZhciB0LGk9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3JldHVybiBpLnNldERhdGUoaS5nZXREYXRlKCkrNC0oaS5nZXREYXkoKXx8NykpLHQ9aS5nZXRUaW1lKCksaS5zZXRNb250aCgwKSxpLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKCh0LWkpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24odCxpLHMpe2lmKG51bGw9PXR8fG51bGw9PWkpdGhyb3ciSW52YWxpZCBhcmd1bWVudHMiO2lmKGk9Im9iamVjdCI9PXR5cGVvZiBpPyIiK2k6aSsiIiwiIj09PWkpcmV0dXJuIG51bGw7dmFyIG4sYSxvLHIsaD0wLGw9KHM/cy5zaG9ydFllYXJDdXRvZmY6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZix1PSJzdHJpbmciIT10eXBlb2YgbD9sOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQobCwxMCksZD0ocz9zLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsYz0ocz9zLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxwPShzP3MubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsZj0ocz9zLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsbT0tMSxnPS0xLHY9LTEseT0tMSxiPSExLF89ZnVuY3Rpb24oZSl7dmFyIGk9dC5sZW5ndGg+bisxJiZ0LmNoYXJBdChuKzEpPT09ZTtyZXR1cm4gaSYmbisrLGl9LHg9ZnVuY3Rpb24oZSl7dmFyIHQ9XyhlKSxzPSJAIj09PWU/MTQ6IiEiPT09ZT8yMDoieSI9PT1lJiZ0PzQ6Im8iPT09ZT8zOjIsbj0ieSI9PT1lP3M6MSxhPVJlZ0V4cCgiXlxcZHsiK24rIiwiK3MrIn0iKSxvPWkuc3Vic3RyaW5nKGgpLm1hdGNoKGEpO2lmKCFvKXRocm93Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uICIraDtyZXR1cm4gaCs9b1swXS5sZW5ndGgscGFyc2VJbnQob1swXSwxMCl9LHc9ZnVuY3Rpb24odCxzLG4pe3ZhciBhPS0xLG89ZS5tYXAoXyh0KT9uOnMsZnVuY3Rpb24oZSx0KXtyZXR1cm5bW3QsZV1dfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi0oZVsxXS5sZW5ndGgtdFsxXS5sZW5ndGgpfSk7aWYoZS5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgcz10WzFdO3JldHVybiBpLnN1YnN0cihoLHMubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09cy50b0xvd2VyQ2FzZSgpPyhhPXRbMF0saCs9cy5sZW5ndGgsITEpOnZvaWQgMH0pLC0xIT09YSlyZXR1cm4gYSsxO3Rocm93IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiAiK2h9LGs9ZnVuY3Rpb24oKXtpZihpLmNoYXJBdChoKSE9PXQuY2hhckF0KG4pKXRocm93IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiK2g7aCsrfTtmb3Iobj0wO3QubGVuZ3RoPm47bisrKWlmKGIpIiciIT09dC5jaGFyQXQobil8fF8oIiciKT9rKCk6Yj0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChuKSl7Y2FzZSJkIjp2PXgoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGQsYyk7YnJlYWs7Y2FzZSJvIjp5PXgoIm8iKTticmVhaztjYXNlIm0iOmc9eCgibSIpO2JyZWFrO2Nhc2UiTSI6Zz13KCJNIixwLGYpO2JyZWFrO2Nhc2UieSI6bT14KCJ5Iik7YnJlYWs7Y2FzZSJAIjpyPW5ldyBEYXRlKHgoIkAiKSksbT1yLmdldEZ1bGxZZWFyKCksZz1yLmdldE1vbnRoKCkrMSx2PXIuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiISI6cj1uZXcgRGF0ZSgoeCgiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpLG09ci5nZXRGdWxsWWVhcigpLGc9ci5nZXRNb250aCgpKzEsdj1yLmdldERhdGUoKTticmVhaztjYXNlIiciOl8oIiciKT9rKCk6Yj0hMDticmVhaztkZWZhdWx0OmsoKX1pZihpLmxlbmd0aD5oJiYobz1pLnN1YnN0cihoKSwhL15ccysvLnRlc3QobykpKXRocm93IkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogIitvO2lmKC0xPT09bT9tPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKToxMDA+bSYmKG0rPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyh1Pj1tPzA6LTEwMCkpLHk+LTEpZm9yKGc9MSx2PXk7Oyl7aWYoYT10aGlzLl9nZXREYXlzSW5Nb250aChtLGctMSksYT49dilicmVhaztnKyssdi09YX1pZihyPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG0sZy0xLHYpKSxyLmdldEZ1bGxZZWFyKCkhPT1tfHxyLmdldE1vbnRoKCkrMSE9PWd8fHIuZ2V0RGF0ZSgpIT09dil0aHJvdyJJbnZhbGlkIGRhdGUiO3JldHVybiByfSxBVE9NOiJ5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5IixJU09fODYwMToieXktbW0tZGQiLFJGQ184MjI6IkQsIGQgTSB5IixSRkNfODUwOiJERCwgZGQtTS15IixSRkNfMTAzNjoiRCwgZCBNIHkiLFJGQ18xMTIzOiJELCBkIE0geXkiLFJGQ18yODIyOiJELCBkIE0geXkiLFJTUzoiRCwgZCBNIHkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXktbW0tZGQiLF90aWNrc1RvMTk3MDoxZTcqNjAqNjAqMjQqKDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSxmb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxpKXtpZighdClyZXR1cm4iIjt2YXIgcyxuPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxhPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLG89KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxyPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKHQpe3ZhciBpPWUubGVuZ3RoPnMrMSYmZS5jaGFyQXQocysxKT09PXQ7cmV0dXJuIGkmJnMrKyxpfSxsPWZ1bmN0aW9uKGUsdCxpKXt2YXIgcz0iIit0O2lmKGgoZSkpZm9yKDtpPnMubGVuZ3RoOylzPSIwIitzO3JldHVybiBzfSx1PWZ1bmN0aW9uKGUsdCxpLHMpe3JldHVybiBoKGUpP3NbdF06aVt0XX0sZD0iIixjPSExO2lmKHQpZm9yKHM9MDtlLmxlbmd0aD5zO3MrKylpZihjKSInIiE9PWUuY2hhckF0KHMpfHxoKCInIik/ZCs9ZS5jaGFyQXQocyk6Yz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdChzKSl7Y2FzZSJkIjpkKz1sKCJkIix0LmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOmQrPXUoIkQiLHQuZ2V0RGF5KCksbixhKTticmVhaztjYXNlIm8iOmQrPWwoIm8iLE1hdGgucm91bmQoKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlIm0iOmQrPWwoIm0iLHQuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2UiTSI6ZCs9dSgiTSIsdC5nZXRNb250aCgpLG8scik7YnJlYWs7Y2FzZSJ5IjpkKz1oKCJ5Iik/dC5nZXRGdWxsWWVhcigpOigxMD50LmdldFllYXIoKSUxMDA/IjAiOiIiKSt0LmdldFllYXIoKSUxMDA7YnJlYWs7Y2FzZSJAIjpkKz10LmdldFRpbWUoKTticmVhaztjYXNlIiEiOmQrPTFlNCp0LmdldFRpbWUoKSt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlIiciOmgoIiciKT9kKz0iJyI6Yz0hMDticmVhaztkZWZhdWx0OmQrPWUuY2hhckF0KHMpfXJldHVybiBkfSxfcG9zc2libGVDaGFyczpmdW5jdGlvbihlKXt2YXIgdCxpPSIiLHM9ITEsbj1mdW5jdGlvbihpKXt2YXIgcz1lLmxlbmd0aD50KzEmJmUuY2hhckF0KHQrMSk9PT1pO3JldHVybiBzJiZ0Kyssc307Zm9yKHQ9MDtlLmxlbmd0aD50O3QrKylpZihzKSInIiE9PWUuY2hhckF0KHQpfHxuKCInIik/aSs9ZS5jaGFyQXQodCk6cz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdCh0KSl7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJAIjppKz0iMDEyMzQ1Njc4OSI7YnJlYWs7Y2FzZSJEIjpjYXNlIk0iOnJldHVybiBudWxsO2Nhc2UiJyI6bigiJyIpP2krPSInIjpzPSEwO2JyZWFrO2RlZmF1bHQ6aSs9ZS5jaGFyQXQodCl9cmV0dXJuIGl9LF9nZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09ZS5zZXR0aW5nc1t0XT9lLnNldHRpbmdzW3RdOnRoaXMuX2RlZmF1bHRzW3RdfSxfc2V0RGF0ZUZyb21GaWVsZDpmdW5jdGlvbihlLHQpe2lmKGUuaW5wdXQudmFsKCkhPT1lLmxhc3RWYWwpe3ZhciBpPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscz1lLmxhc3RWYWw9ZS5pbnB1dD9lLmlucHV0LnZhbCgpOm51bGwsbj10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxhPW4sbz10aGlzLl9nZXRGb3JtYXRDb25maWcoZSk7dHJ5e2E9dGhpcy5wYXJzZURhdGUoaSxzLG8pfHxufWNhdGNoKHIpe3M9dD8iIjpzfWUuc2VsZWN0ZWREYXk9YS5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWEuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWEuZ2V0RnVsbFllYXIoKSxlLmN1cnJlbnREYXk9cz9hLmdldERhdGUoKTowLGUuY3VycmVudE1vbnRoPXM/YS5nZXRNb250aCgpOjAsZS5jdXJyZW50WWVhcj1zP2EuZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKGUpfX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSwiZGVmYXVsdERhdGUiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGkscyl7dmFyIG49ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSx0fSxhPWZ1bmN0aW9uKGkpe3RyeXtyZXR1cm4gZS5kYXRlcGlja2VyLnBhcnNlRGF0ZShlLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IiksaSxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0KSl9Y2F0Y2gocyl7fWZvcih2YXIgbj0oaS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pP2UuZGF0ZXBpY2tlci5fZ2V0RGF0ZSh0KTpudWxsKXx8bmV3IERhdGUsYT1uLmdldEZ1bGxZZWFyKCksbz1uLmdldE1vbnRoKCkscj1uLmdldERhdGUoKSxoPS8oWytcLV0/WzAtOV0rKVxzKihkfER8d3xXfG18TXx5fFkpPy9nLGw9aC5leGVjKGkpO2w7KXtzd2l0Y2gobFsyXXx8ImQiKXtjYXNlImQiOmNhc2UiRCI6cis9cGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZSJ3IjpjYXNlIlciOnIrPTcqcGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZSJtIjpjYXNlIk0iOm8rPXBhcnNlSW50KGxbMV0sMTApLHI9TWF0aC5taW4ocixlLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKGEsbykpO2JyZWFrO2Nhc2UieSI6Y2FzZSJZIjphKz1wYXJzZUludChsWzFdLDEwKSxyPU1hdGgubWluKHIsZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChhLG8pKX1sPWguZXhlYyhpKX1yZXR1cm4gbmV3IERhdGUoYSxvLHIpfSxvPW51bGw9PWl8fCIiPT09aT9zOiJzdHJpbmciPT10eXBlb2YgaT9hKGkpOiJudW1iZXIiPT10eXBlb2YgaT9pc05hTihpKT9zOm4oaSk6bmV3IERhdGUoaS5nZXRUaW1lKCkpO3JldHVybiBvPW8mJiJJbnZhbGlkIERhdGUiPT0iIitvP3M6byxvJiYoby5zZXRIb3VycygwKSxvLnNldE1pbnV0ZXMoMCksby5zZXRTZWNvbmRzKDApLG8uc2V0TWlsbGlzZWNvbmRzKDApKSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChvKX0sX2RheWxpZ2h0U2F2aW5nQWRqdXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlPyhlLnNldEhvdXJzKGUuZ2V0SG91cnMoKT4xMj9lLmdldEhvdXJzKCkrMjowKSxlKTpudWxsfSxfc2V0RGF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHM9IXQsbj1lLnNlbGVjdGVkTW9udGgsYT1lLnNlbGVjdGVkWWVhcixvPXRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHQsbmV3IERhdGUpKTtlLnNlbGVjdGVkRGF5PWUuY3VycmVudERheT1vLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9ZS5jdXJyZW50TW9udGg9by5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9ZS5jdXJyZW50WWVhcj1vLmdldEZ1bGxZZWFyKCksbj09PWUuc2VsZWN0ZWRNb250aCYmYT09PWUuc2VsZWN0ZWRZZWFyfHxpfHx0aGlzLl9ub3RpZnlDaGFuZ2UoZSksdGhpcy5fYWRqdXN0SW5zdERhdGUoZSksZS5pbnB1dCYmZS5pbnB1dC52YWwocz8iIjp0aGlzLl9mb3JtYXREYXRlKGUpKX0sX2dldERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUuY3VycmVudFllYXJ8fGUuaW5wdXQmJiIiPT09ZS5pbnB1dC52YWwoKT9udWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHR9LF9hdHRhY2hIYW5kbGVyczpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXQodCwic3RlcE1vbnRocyIpLHM9IiMiK3QuaWQucmVwbGFjZSgvXFxcXC9nLCJcXCIpO3QuZHBEaXYuZmluZCgiW2RhdGEtaGFuZGxlcl0iKS5tYXAoZnVuY3Rpb24oKXt2YXIgdD17cHJldjpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShzLC1pLCJNIil9LG5leHQ6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywraSwiTSIpfSxoaWRlOmZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSx0b2RheTpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5fZ290b1RvZGF5KHMpfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3REYXkocywrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEteWVhciIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsIk0iKSwhMX0sc2VsZWN0WWVhcjpmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsIlkiKSwhMX19O2UodGhpcykuYmluZCh0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1ldmVudCIpLHRbdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtaGFuZGxlciIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbihlKXt2YXIgdCxpLHMsbixhLG8scixoLGwsdSxkLGMscCxmLG0sZyx2LHksYixfLHgsdyxrLFQsRCxTLE0sQyxOLEEsUCxJLEgseixGLEUsTyxqLFcsTD1uZXcgRGF0ZSxSPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKEwuZ2V0RnVsbFllYXIoKSxMLmdldE1vbnRoKCksTC5nZXREYXRlKCkpKSxZPXRoaXMuX2dldChlLCJpc1JUTCIpLEI9dGhpcy5fZ2V0KGUsInNob3dCdXR0b25QYW5lbCIpLEo9dGhpcy5fZ2V0KGUsImhpZGVJZk5vUHJldk5leHQiKSxxPXRoaXMuX2dldChlLCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0IiksSz10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxWPXRoaXMuX2dldChlLCJzaG93Q3VycmVudEF0UG9zIiksVT10aGlzLl9nZXQoZSwic3RlcE1vbnRocyIpLFE9MSE9PUtbMF18fDEhPT1LWzFdLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoZS5jdXJyZW50RGF5P25ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLFg9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSwkPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IiksWj1lLmRyYXdNb250aC1WLGV0PWUuZHJhd1llYXI7aWYoMD5aJiYoWis9MTIsZXQtLSksJClmb3IodD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSgkLmdldEZ1bGxZZWFyKCksJC5nZXRNb250aCgpLUtbMF0qS1sxXSsxLCQuZ2V0RGF0ZSgpKSksdD1YJiZYPnQ/WDp0O3RoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosMSkpPnQ7KVotLSwwPlomJihaPTExLGV0LS0pO2ZvcihlLmRyYXdNb250aD1aLGUuZHJhd1llYXI9ZXQsaT10aGlzLl9nZXQoZSwicHJldlRleHQiKSxpPXE/dGhpcy5mb3JtYXREYXRlKGksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWi1VLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOmkscz10aGlzLl9jYW5BZGp1c3RNb250aChlLC0xLGV0LFopPyI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ncHJldicgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSciK2krIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIisoWT8iZSI6InciKSsiJz4iK2krIjwvc3Bhbj48L2E+IjpKPyIiOiI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSciK2krIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtIisoWT8iZSI6InciKSsiJz4iK2krIjwvc3Bhbj48L2E+IixuPXRoaXMuX2dldChlLCJuZXh0VGV4dCIpLG49cT90aGlzLmZvcm1hdERhdGUobix0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaK1UsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6bixhPXRoaXMuX2NhbkFkanVzdE1vbnRoKGUsMSxldCxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J25leHQnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIituKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/InciOiJlIikrIic+IituKyI8L3NwYW4+PC9hPiI6Sj8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIituKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/InciOiJlIikrIic+IituKyI8L3NwYW4+PC9hPiIsbz10aGlzLl9nZXQoZSwiY3VycmVudFRleHQiKSxyPXRoaXMuX2dldChlLCJnb3RvQ3VycmVudCIpJiZlLmN1cnJlbnREYXk/RzpSLG89cT90aGlzLmZvcm1hdERhdGUobyxyLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6byxoPWUuaW5saW5lPyIiOiI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0naGlkZScgZGF0YS1ldmVudD0nY2xpY2snPiIrdGhpcy5fZ2V0KGUsImNsb3NlVGV4dCIpKyI8L2J1dHRvbj4iLGw9Qj8iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Jz4iKyhZP2g6IiIpKyh0aGlzLl9pc0luUmFuZ2UoZSxyKT8iPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSd0b2RheScgZGF0YS1ldmVudD0nY2xpY2snPiIrbysiPC9idXR0b24+IjoiIikrKFk/IiI6aCkrIjwvZGl2PiI6IiIsdT1wYXJzZUludCh0aGlzLl9nZXQoZSwiZmlyc3REYXkiKSwxMCksdT1pc05hTih1KT8wOnUsZD10aGlzLl9nZXQoZSwic2hvd1dlZWsiKSxjPXRoaXMuX2dldChlLCJkYXlOYW1lcyIpLHA9dGhpcy5fZ2V0KGUsImRheU5hbWVzTWluIiksZj10aGlzLl9nZXQoZSwibW9udGhOYW1lcyIpLG09dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLGc9dGhpcy5fZ2V0KGUsImJlZm9yZVNob3dEYXkiKSx2PXRoaXMuX2dldChlLCJzaG93T3RoZXJNb250aHMiKSx5PXRoaXMuX2dldChlLCJzZWxlY3RPdGhlck1vbnRocyIpLGI9dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksXz0iIix3PTA7S1swXT53O3crKyl7Zm9yKGs9IiIsdGhpcy5tYXhSb3dzPTQsVD0wO0tbMV0+VDtUKyspe2lmKEQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWixlLnNlbGVjdGVkRGF5KSksUz0iIHVpLWNvcm5lci1hbGwiLE09IiIsUSl7aWYoTSs9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItZ3JvdXAiLEtbMV0+MSlzd2l0Y2goVCl7Y2FzZSAwOk0rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdCIsUz0iIHVpLWNvcm5lci0iKyhZPyJyaWdodCI6ImxlZnQiKTticmVhaztjYXNlIEtbMV0tMTpNKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCIsUz0iIHVpLWNvcm5lci0iKyhZPyJsZWZ0IjoicmlnaHQiKTticmVhaztkZWZhdWx0Ok0rPSIgdWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUiLFM9IiJ9TSs9Iic+In1mb3IoTSs9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IitTKyInPiIrKC9hbGx8bGVmdC8udGVzdChTKSYmMD09PXc/WT9hOnM6IiIpKygvYWxsfHJpZ2h0Ly50ZXN0KFMpJiYwPT09dz9ZP3M6YToiIikrdGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIoZSxaLGV0LFgsJCx3PjB8fFQ+MCxmLG0pKyI8L2Rpdj48dGFibGUgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2FsZW5kYXInPjx0aGVhZD4iKyI8dHI+IixDPWQ/Ijx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+Iit0aGlzLl9nZXQoZSwid2Vla0hlYWRlciIpKyI8L3RoPiI6IiIseD0wOzc+eDt4KyspTj0oeCt1KSU3LEMrPSI8dGggc2NvcGU9J2NvbCciKygoeCt1KzYpJTc+PTU/IiBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWVuZCciOiIiKSsiPiIrIjxzcGFuIHRpdGxlPSciK2NbTl0rIic+IitwW05dKyI8L3NwYW4+PC90aD4iO2ZvcihNKz1DKyI8L3RyPjwvdGhlYWQ+PHRib2R5PiIsQT10aGlzLl9nZXREYXlzSW5Nb250aChldCxaKSxldD09PWUuc2VsZWN0ZWRZZWFyJiZaPT09ZS5zZWxlY3RlZE1vbnRoJiYoZS5zZWxlY3RlZERheT1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LEEpKSxQPSh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgoZXQsWiktdSs3KSU3LEk9TWF0aC5jZWlsKChQK0EpLzcpLEg9UT90aGlzLm1heFJvd3M+ST90aGlzLm1heFJvd3M6STpJLHRoaXMubWF4Um93cz1ILHo9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWiwxLVApKSxGPTA7SD5GO0YrKyl7Zm9yKE0rPSI8dHI+IixFPWQ/Ijx0ZCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+Iit0aGlzLl9nZXQoZSwiY2FsY3VsYXRlV2VlayIpKHopKyI8L3RkPiI6IiIseD0wOzc+eDt4KyspTz1nP2cuYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW3pdKTpbITAsIiJdLGo9ei5nZXRNb250aCgpIT09WixXPWomJiF5fHwhT1swXXx8WCYmWD56fHwkJiZ6PiQsRSs9Ijx0ZCBjbGFzcz0nIisoKHgrdSs2KSU3Pj01PyIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZCI6IiIpKyhqPyIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aCI6IiIpKyh6LmdldFRpbWUoKT09PUQuZ2V0VGltZSgpJiZaPT09ZS5zZWxlY3RlZE1vbnRoJiZlLl9rZXlFdmVudHx8Yi5nZXRUaW1lKCk9PT16LmdldFRpbWUoKSYmYi5nZXRUaW1lKCk9PT1ELmdldFRpbWUoKT8iICIrdGhpcy5fZGF5T3ZlckNsYXNzOiIiKSsoVz8iICIrdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MrIiB1aS1zdGF0ZS1kaXNhYmxlZCI6IiIpKyhqJiYhdj8iIjoiICIrT1sxXSsoei5nZXRUaW1lKCk9PT1HLmdldFRpbWUoKT8iICIrdGhpcy5fY3VycmVudENsYXNzOiIiKSsoei5nZXRUaW1lKCk9PT1SLmdldFRpbWUoKT8iIHVpLWRhdGVwaWNrZXItdG9kYXkiOiIiKSkrIiciKyhqJiYhdnx8IU9bMl0/IiI6IiB0aXRsZT0nIitPWzJdLnJlcGxhY2UoLycvZywiJiMzOTsiKSsiJyIpKyhXPyIiOiIgZGF0YS1oYW5kbGVyPSdzZWxlY3REYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyBkYXRhLW1vbnRoPSciK3ouZ2V0TW9udGgoKSsiJyBkYXRhLXllYXI9JyIrei5nZXRGdWxsWWVhcigpKyInIikrIj4iKyhqJiYhdj8iJiN4YTA7IjpXPyI8c3BhbiBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCc+Iit6LmdldERhdGUoKSsiPC9zcGFuPiI6IjxhIGNsYXNzPSd1aS1zdGF0ZS1kZWZhdWx0Iisoei5nZXRUaW1lKCk9PT1SLmdldFRpbWUoKT8iIHVpLXN0YXRlLWhpZ2hsaWdodCI6IiIpKyh6LmdldFRpbWUoKT09PUcuZ2V0VGltZSgpPyIgdWktc3RhdGUtYWN0aXZlIjoiIikrKGo/IiB1aS1wcmlvcml0eS1zZWNvbmRhcnkiOiIiKSsiJyBocmVmPScjJz4iK3ouZ2V0RGF0ZSgpKyI8L2E+IikrIjwvdGQ+Iix6LnNldERhdGUoei5nZXREYXRlKCkrMSksej10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCh6KTtNKz1FKyI8L3RyPiJ9WisrLFo+MTEmJihaPTAsZXQrKyksTSs9IjwvdGJvZHk+PC90YWJsZT4iKyhRPyI8L2Rpdj4iKyhLWzBdPjAmJlQ9PT1LWzFdLTE/IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj4iOiIiKToiIiksays9TX1fKz1rfXJldHVybiBfKz1sLGUuX2tleUV2ZW50PSExLF99LF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjpmdW5jdGlvbihlLHQsaSxzLG4sYSxvLHIpe3ZhciBoLGwsdSxkLGMscCxmLG0sZz10aGlzLl9nZXQoZSwiY2hhbmdlTW9udGgiKSx2PXRoaXMuX2dldChlLCJjaGFuZ2VZZWFyIikseT10aGlzLl9nZXQoZSwic2hvd01vbnRoQWZ0ZXJZZWFyIiksYj0iPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+IixfPSIiO2lmKGF8fCFnKV8rPSI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCc+IitvW3RdKyI8L3NwYW4+IjtlbHNle2ZvcihoPXMmJnMuZ2V0RnVsbFllYXIoKT09PWksbD1uJiZuLmdldEZ1bGxZZWFyKCk9PT1pLF8rPSI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJyBkYXRhLWhhbmRsZXI9J3NlbGVjdE1vbnRoJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPiIsdT0wOzEyPnU7dSsrKSghaHx8dT49cy5nZXRNb250aCgpKSYmKCFsfHxuLmdldE1vbnRoKCk+PXUpJiYoXys9IjxvcHRpb24gdmFsdWU9JyIrdSsiJyIrKHU9PT10PyIgc2VsZWN0ZWQ9J3NlbGVjdGVkJyI6IiIpKyI+IityW3VdKyI8L29wdGlvbj4iKTtfKz0iPC9zZWxlY3Q+In1pZih5fHwoYis9XysoIWEmJmcmJnY/IiI6IiYjeGEwOyIpKSwhZS55ZWFyc2h0bWwpaWYoZS55ZWFyc2h0bWw9IiIsYXx8IXYpYis9IjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInPiIraSsiPC9zcGFuPiI7ZWxzZXtmb3IoZD10aGlzLl9nZXQoZSwieWVhclJhbmdlIikuc3BsaXQoIjoiKSxjPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxwPWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL2NbK1wtXS4qLyk/aStwYXJzZUludChlLnN1YnN0cmluZygxKSwxMCk6ZS5tYXRjaCgvWytcLV0uKi8pP2MrcGFyc2VJbnQoZSwxMCk6cGFyc2VJbnQoZSwxMCk7cmV0dXJuIGlzTmFOKHQpP2M6dH0sZj1wKGRbMF0pLG09TWF0aC5tYXgoZixwKGRbMV18fCIiKSksZj1zP01hdGgubWF4KGYscy5nZXRGdWxsWWVhcigpKTpmLG09bj9NYXRoLm1pbihtLG4uZ2V0RnVsbFllYXIoKSk6bSxlLnllYXJzaHRtbCs9IjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcicgZGF0YS1oYW5kbGVyPSdzZWxlY3RZZWFyJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPiI7bT49ZjtmKyspZS55ZWFyc2h0bWwrPSI8b3B0aW9uIHZhbHVlPSciK2YrIiciKyhmPT09aT8iIHNlbGVjdGVkPSdzZWxlY3RlZCciOiIiKSsiPiIrZisiPC9vcHRpb24+IjtlLnllYXJzaHRtbCs9Ijwvc2VsZWN0PiIsYis9ZS55ZWFyc2h0bWwsZS55ZWFyc2h0bWw9bnVsbH1yZXR1cm4gYis9dGhpcy5fZ2V0KGUsInllYXJTdWZmaXgiKSx5JiYoYis9KCFhJiZnJiZ2PyIiOiImI3hhMDsiKStfKSxiKz0iPC9kaXY+In0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz1lLmRyYXdZZWFyKygiWSI9PT1pP3Q6MCksbj1lLmRyYXdNb250aCsoIk0iPT09aT90OjApLGE9TWF0aC5taW4oZS5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChzLG4pKSsoIkQiPT09aT90OjApLG89dGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShzLG4sYSkpKTtlLnNlbGVjdGVkRGF5PW8uZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1vLmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1vLmdldEZ1bGxZZWFyKCksKCJNIj09PWl8fCJZIj09PWkpJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIikscz10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLG49aSYmaT50P2k6dDtyZXR1cm4gcyYmbj5zP3M6bn0sX25vdGlmeUNoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwib25DaGFuZ2VNb250aFllYXIiKTt0JiZ0LmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtlLnNlbGVjdGVkWWVhcixlLnNlbGVjdGVkTW9udGgrMSxlXSl9LF9nZXROdW1iZXJPZk1vbnRoczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwibnVtYmVyT2ZNb250aHMiKTtyZXR1cm4gbnVsbD09dD9bMSwxXToibnVtYmVyIj09dHlwZW9mIHQ/WzEsdF06dH0sX2dldE1pbk1heERhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHRoaXMuX2dldChlLHQrIkRhdGUiKSxudWxsKX0sX2dldERheXNJbk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDMyLXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUsdCwzMikpLmdldERhdGUoKX0sX2dldEZpcnN0RGF5T2ZNb250aDpmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgRGF0ZShlLHQsMSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbihlLHQsaSxzKXt2YXIgbj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxhPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGkscysoMD50P3Q6blswXSpuWzFdKSwxKSk7cmV0dXJuIDA+dCYmYS5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UoZSxhKX0sX2lzSW5SYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBpLHMsbj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1pbiIpLGE9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtYXgiKSxvPW51bGwscj1udWxsLGg9dGhpcy5fZ2V0KGUsInllYXJSYW5nZSIpO3JldHVybiBoJiYoaT1oLnNwbGl0KCI6Iikscz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksbz1wYXJzZUludChpWzBdLDEwKSxyPXBhcnNlSW50KGlbMV0sMTApLGlbMF0ubWF0Y2goL1srXC1dLiovKSYmKG8rPXMpLGlbMV0ubWF0Y2goL1srXC1dLiovKSYmKHIrPXMpKSwoIW58fHQuZ2V0VGltZSgpPj1uLmdldFRpbWUoKSkmJighYXx8dC5nZXRUaW1lKCk8PWEuZ2V0VGltZSgpKSYmKCFvfHx0LmdldEZ1bGxZZWFyKCk+PW8pJiYoIXJ8fHI+PXQuZ2V0RnVsbFllYXIoKSl9LF9nZXRGb3JtYXRDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsInNob3J0WWVhckN1dG9mZiIpO3JldHVybiB0PSJzdHJpbmciIT10eXBlb2YgdD90OihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQodCwxMCkse3Nob3J0WWVhckN1dG9mZjp0LGRheU5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsImRheU5hbWVzU2hvcnQiKSxkYXlOYW1lczp0aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxtb250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLG1vbnRoTmFtZXM6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKX19LF9mb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxpLHMpe3R8fChlLmN1cnJlbnREYXk9ZS5zZWxlY3RlZERheSxlLmN1cnJlbnRNb250aD1lLnNlbGVjdGVkTW9udGgsZS5jdXJyZW50WWVhcj1lLnNlbGVjdGVkWWVhcik7dmFyIG49dD8ib2JqZWN0Ij09dHlwZW9mIHQ/dDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShzLGksdCkpOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLG4sdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKX19KSxlLmZuLmRhdGVwaWNrZXI9ZnVuY3Rpb24odCl7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO2UuZGF0ZXBpY2tlci5pbml0aWFsaXplZHx8KGUoZG9jdW1lbnQpLm1vdXNlZG93bihlLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljayksZS5kYXRlcGlja2VyLmluaXRpYWxpemVkPSEwKSwwPT09ZSgiIyIrZS5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aCYmZSgiYm9keSIpLmFwcGVuZChlLmRhdGVwaWNrZXIuZHBEaXYpO3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHR8fCJpc0Rpc2FibGVkIiE9PXQmJiJnZXREYXRlIiE9PXQmJiJ3aWRnZXQiIT09dD8ib3B0aW9uIj09PXQmJjI9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGFyZ3VtZW50c1sxXT9lLmRhdGVwaWNrZXJbIl8iK3QrIkRhdGVwaWNrZXIiXS5hcHBseShlLmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdChpKSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7InN0cmluZyI9PXR5cGVvZiB0P2UuZGF0ZXBpY2tlclsiXyIrdCsiRGF0ZXBpY2tlciJdLmFwcGx5KGUuZGF0ZXBpY2tlcixbdGhpc10uY29uY2F0KGkpKTplLmRhdGVwaWNrZXIuX2F0dGFjaERhdGVwaWNrZXIodGhpcyx0KX0pOmUuZGF0ZXBpY2tlclsiXyIrdCsiRGF0ZXBpY2tlciJdLmFwcGx5KGUuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKX0sZS5kYXRlcGlja2VyPW5ldyBuLGUuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMSxlLmRhdGVwaWNrZXIudXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSxlLmRhdGVwaWNrZXIudmVyc2lvbj0iMS4xMS40IixlLmRhdGVwaWNrZXIsZS53aWRnZXQoInVpLmRyYWdnYWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoiZHJhZyIsb3B0aW9uczp7YWRkQ2xhc3NlczohMCxhcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RUb1NvcnRhYmxlOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaWZyYW1lRml4OiExLG9wYWNpdHk6ITEscmVmcmVzaFBvc2l0aW9uczohMSxyZXZlcnQ6ITEscmV2ZXJ0RHVyYXRpb246NTAwLHNjb3BlOiJkZWZhdWx0IixzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc25hcDohMSxzbmFwTW9kZToiYm90aCIsc25hcFRvbGVyYW5jZToyMCxzdGFjazohMSx6SW5kZXg6ITEsZHJhZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7Im9yaWdpbmFsIj09PXRoaXMub3B0aW9ucy5oZWxwZXImJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VJbml0KCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJoYW5kbGUiPT09ZSYmKHRoaXMuX3JlbW92ZUhhbmRsZUNsYXNzTmFtZSgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudCkuaXMoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKT8odGhpcy5kZXN0cm95T25DbGVhcj0hMCx2b2lkIDApOih0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZSB1aS1kcmFnZ2FibGUtZHJhZ2dpbmcgdWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VEZXN0cm95KCksdm9pZCAwKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2JsdXJBY3RpdmVFbGVtZW50KHQpLHRoaXMuaGVscGVyfHxpLmRpc2FibGVkfHxlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktcmVzaXphYmxlLWhhbmRsZSIpLmxlbmd0aD4wPyExOih0aGlzLmhhbmRsZT10aGlzLl9nZXRIYW5kbGUodCksdGhpcy5oYW5kbGU/KHRoaXMuX2Jsb2NrRnJhbWVzKGkuaWZyYW1lRml4PT09ITA/ImlmcmFtZSI6aS5pZnJhbWVGaXgpLCEwKTohMSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbih0KXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQodCkubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5hcHBlbmRUbyh0LnBhcmVudCgpKS5vdXRlcldpZHRoKHQub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodCh0Lm91dGVySGVpZ2h0KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2JsdXJBY3RpdmVFbGVtZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZG9jdW1lbnRbMF07aWYodGhpcy5oYW5kbGVFbGVtZW50LmlzKHQudGFyZ2V0KSl0cnl7aS5hY3RpdmVFbGVtZW50JiYiYm9keSIhPT1pLmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpLmFjdGl2ZUVsZW1lbnQpLmJsdXIoKX1jYXRjaChzKXt9fSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGUudWkuZGRtYW5hZ2VyJiYoZS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoITApLHRoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpLHRoaXMuaGFzRml4ZWRBbmNlc3Rvcj10aGlzLmhlbHBlci5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpfSkubGVuZ3RoPjAsdGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fcmVmcmVzaE9mZnNldHModCksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0LCExKSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxpLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGkuY3Vyc29yQXQpLHRoaXMuX3NldENvbnRhaW5tZW50KCksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQpPT09ITE/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksZS51aS5kZG1hbmFnZXImJiFpLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCksdGhpcy5fbm9ybWFsaXplUmlnaHRCb3R0b20oKSx0aGlzLl9tb3VzZURyYWcodCwhMCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLHQpLCEwKX0sX3JlZnJlc2hPZmZzZXRzOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLm1hcmdpbnMubGVmdCxzY3JvbGw6ITEscGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9LHRoaXMub2Zmc2V0LmNsaWNrPXtsZWZ0OmUucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6ZS5wYWdlWS10aGlzLm9mZnNldC50b3B9fSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQsaSl7aWYodGhpcy5oYXNGaXhlZEFuY2VzdG9yJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwhaSl7dmFyIHM9dGhpcy5fdWlIYXNoKCk7aWYodGhpcy5fdHJpZ2dlcigiZHJhZyIsdCxzKT09PSExKXJldHVybiB0aGlzLl9tb3VzZVVwKHt9KSwhMTt0aGlzLnBvc2l0aW9uPXMucG9zaXRpb259cmV0dXJuIHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIsZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyx0KSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLHM9ITE7cmV0dXJuIGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihzPWUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSksdGhpcy5kcm9wcGVkJiYocz10aGlzLmRyb3BwZWQsdGhpcy5kcm9wcGVkPSExKSwiaW52YWxpZCI9PT10aGlzLm9wdGlvbnMucmV2ZXJ0JiYhc3x8InZhbGlkIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtpLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZpLl9jbGVhcigpfSk6dGhpcy5fdHJpZ2dlcigic3RvcCIsdCkhPT0hMSYmdGhpcy5fY2xlYXIoKSwhMX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VuYmxvY2tGcmFtZXMoKSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcyx0KSx0aGlzLmhhbmRsZUVsZW1lbnQuaXModC50YXJnZXQpJiZ0aGlzLmVsZW1lbnQuZm9jdXMoKSxlLnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsdCl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpP3RoaXMuX21vdXNlVXAoe30pOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmhhbmRsZT8hIWUodC50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSkpLmxlbmd0aDohMH0sX3NldEhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudD10aGlzLm9wdGlvbnMuaGFuZGxlP3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpOnRoaXMuZWxlbWVudCx0aGlzLmhhbmRsZUVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1oYW5kbGUiKX0sX3JlbW92ZUhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlLWhhbmRsZSIpfSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucyxzPWUuaXNGdW5jdGlvbihpLmhlbHBlciksbj1zP2UoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFt0XSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmVsZW1lbnQuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gbi5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxuLmFwcGVuZFRvKCJwYXJlbnQiPT09aS5hcHBlbmRUbz90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTppLmFwcGVuZFRvKSxzJiZuWzBdPT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCksblswXT09PXRoaXMuZWxlbWVudFswXXx8LyhmaXhlZHxhYnNvbHV0ZSkvLnRlc3Qobi5jc3MoInBvc2l0aW9uIikpfHxuLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpLG59LF9zZXRQb3NpdGlvblJlbGF0aXZlOmZ1bmN0aW9uKCl7L14oPzpyfGF8ZikvLnRlc3QodGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSl8fCh0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249InJlbGF0aXZlIil9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2lzUm9vdE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuLyhodG1sfGJvZHkpL2kudGVzdChlLnRhZ05hbWUpfHxlPT09dGhpcy5kb2N1bWVudFswXX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpLGk9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4iYWJzb2x1dGUiPT09dGhpcy5jc3NQb3NpdGlvbiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1pJiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLHQudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksdGhpcy5faXNSb290Tm9kZSh0aGlzLm9mZnNldFBhcmVudFswXSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoInJlbGF0aXZlIiE9PXRoaXMuY3NzUG9zaXRpb24pcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIGU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCksdD10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrKHQ/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrKHQ/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkpfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zLGE9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4gdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1udWxsLG4uY29udGFpbm1lbnQ/IndpbmRvdyI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVtlKHdpbmRvdykuc2Nyb2xsTGVmdCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsZSh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLGUod2luZG93KS5zY3JvbGxMZWZ0KCkrZSh3aW5kb3cpLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxlKHdpbmRvdykuc2Nyb2xsVG9wKCkrKGUod2luZG93KS5oZWlnaHQoKXx8YS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSx2b2lkIDApOiJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVswLDAsZShhKS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGUoYSkuaGVpZ2h0KCl8fGEuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0sdm9pZCAwKTpuLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yPT09QXJyYXk/KHRoaXMuY29udGFpbm1lbnQ9bi5jb250YWlubWVudCx2b2lkIDApOigicGFyZW50Ij09PW4uY29udGFpbm1lbnQmJihuLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLGk9ZShuLmNvbnRhaW5tZW50KSxzPWlbMF0scyYmKHQ9LyhzY3JvbGx8YXV0bykvLnRlc3QoaS5jc3MoIm92ZXJmbG93IikpLHRoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoaS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLCh0P01hdGgubWF4KHMuc2Nyb2xsV2lkdGgscy5vZmZzZXRXaWR0aCk6cy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGkuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKHQ/TWF0aC5tYXgocy5zY3JvbGxIZWlnaHQscy5vZmZzZXRIZWlnaHQpOnMub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoaS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1pKSx2b2lkIDApOih0aGlzLmNvbnRhaW5tZW50PW51bGwsdm9pZCAwKQ0KfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24oZSx0KXt0fHwodD10aGlzLnBvc2l0aW9uKTt2YXIgaT0iYWJzb2x1dGUiPT09ZT8xOi0xLHM9dGhpcy5faXNSb290Tm9kZSh0aGlzLnNjcm9sbFBhcmVudFswXSk7cmV0dXJue3RvcDp0LnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AqaSt0aGlzLm9mZnNldC5wYXJlbnQudG9wKmktKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOnM/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSppLGxlZnQ6dC5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqaSt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCppLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cz8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KSppfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG4sYSxvPXRoaXMub3B0aW9ucyxyPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pLGg9ZS5wYWdlWCxsPWUucGFnZVk7cmV0dXJuIHImJnRoaXMub2Zmc2V0LnNjcm9sbHx8KHRoaXMub2Zmc2V0LnNjcm9sbD17dG9wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfSksdCYmKHRoaXMuY29udGFpbm1lbnQmJih0aGlzLnJlbGF0aXZlQ29udGFpbmVyPyhzPXRoaXMucmVsYXRpdmVDb250YWluZXIub2Zmc2V0KCksaT1bdGhpcy5jb250YWlubWVudFswXStzLmxlZnQsdGhpcy5jb250YWlubWVudFsxXStzLnRvcCx0aGlzLmNvbnRhaW5tZW50WzJdK3MubGVmdCx0aGlzLmNvbnRhaW5tZW50WzNdK3MudG9wXSk6aT10aGlzLmNvbnRhaW5tZW50LGUucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdDxpWzBdJiYoaD1pWzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGUucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPGlbMV0mJihsPWlbMV0rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSxlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aVsyXSYmKGg9aVsyXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5pWzNdJiYobD1pWzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCkpLG8uZ3JpZCYmKG49by5ncmlkWzFdP3RoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChsLXRoaXMub3JpZ2luYWxQYWdlWSkvby5ncmlkWzFdKSpvLmdyaWRbMV06dGhpcy5vcmlnaW5hbFBhZ2VZLGw9aT9uLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49aVsxXXx8bi10aGlzLm9mZnNldC5jbGljay50b3A+aVszXT9uOm4tdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1pWzFdP24tby5ncmlkWzFdOm4rby5ncmlkWzFdOm4sYT1vLmdyaWRbMF0/dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKGgtdGhpcy5vcmlnaW5hbFBhZ2VYKS9vLmdyaWRbMF0pKm8uZ3JpZFswXTp0aGlzLm9yaWdpbmFsUGFnZVgsaD1pP2EtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49aVswXXx8YS10aGlzLm9mZnNldC5jbGljay5sZWZ0PmlbMl0/YTphLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PWlbMF0/YS1vLmdyaWRbMF06YStvLmdyaWRbMF06YSksInkiPT09by5heGlzJiYoaD10aGlzLm9yaWdpbmFsUGFnZVgpLCJ4Ij09PW8uYXhpcyYmKGw9dGhpcy5vcmlnaW5hbFBhZ2VZKSkse3RvcDpsLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC50b3A6cj8wOnRoaXMub2Zmc2V0LnNjcm9sbC50b3ApLGxlZnQ6aC10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwubGVmdDpyPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQpfX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXIucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuaGVscGVyWzBdPT09dGhpcy5lbGVtZW50WzBdfHx0aGlzLmNhbmNlbEhlbHBlclJlbW92YWx8fHRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGwsdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsPSExLHRoaXMuZGVzdHJveU9uQ2xlYXImJnRoaXMuZGVzdHJveSgpfSxfbm9ybWFsaXplUmlnaHRCb3R0b206ZnVuY3Rpb24oKXsieSIhPT10aGlzLm9wdGlvbnMuYXhpcyYmImF1dG8iIT09dGhpcy5oZWxwZXIuY3NzKCJyaWdodCIpJiYodGhpcy5oZWxwZXIud2lkdGgodGhpcy5oZWxwZXIud2lkdGgoKSksdGhpcy5oZWxwZXIuY3NzKCJyaWdodCIsImF1dG8iKSksIngiIT09dGhpcy5vcHRpb25zLmF4aXMmJiJhdXRvIiE9PXRoaXMuaGVscGVyLmNzcygiYm90dG9tIikmJih0aGlzLmhlbHBlci5oZWlnaHQodGhpcy5oZWxwZXIuaGVpZ2h0KCkpLHRoaXMuaGVscGVyLmNzcygiYm90dG9tIiwiYXV0byIpKX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBzPXN8fHRoaXMuX3VpSGFzaCgpLGUudWkucGx1Z2luLmNhbGwodGhpcyx0LFtpLHMsdGhpc10sITApLC9eKGRyYWd8c3RhcnR8c3RvcCkvLnRlc3QodCkmJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpLHMub2Zmc2V0PXRoaXMucG9zaXRpb25BYnMpLGUuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5jYWxsKHRoaXMsdCxpLHMpfSxwbHVnaW5zOnt9LF91aUhhc2g6ZnVuY3Rpb24oKXtyZXR1cm57aGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OnRoaXMucG9zaXRpb25BYnN9fX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY29ubmVjdFRvU29ydGFibGUiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZS5leHRlbmQoe30saSx7aXRlbTpzLmVsZW1lbnR9KTtzLnNvcnRhYmxlcz1bXSxlKHMub3B0aW9ucy5jb25uZWN0VG9Tb3J0YWJsZSkuZWFjaChmdW5jdGlvbigpe3ZhciBpPWUodGhpcykuc29ydGFibGUoImluc3RhbmNlIik7aSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmKHMuc29ydGFibGVzLnB1c2goaSksaS5yZWZyZXNoUG9zaXRpb25zKCksaS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsbikpfSl9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUuZXh0ZW5kKHt9LGkse2l0ZW06cy5lbGVtZW50fSk7cy5jYW5jZWxIZWxwZXJSZW1vdmFsPSExLGUuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5pc092ZXI/KGUuaXNPdmVyPTAscy5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLGUuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSxlLl9zdG9yZWRDU1M9e3Bvc2l0aW9uOmUucGxhY2Vob2xkZXIuY3NzKCJwb3NpdGlvbiIpLHRvcDplLnBsYWNlaG9sZGVyLmNzcygidG9wIiksbGVmdDplLnBsYWNlaG9sZGVyLmNzcygibGVmdCIpfSxlLl9tb3VzZVN0b3AodCksZS5vcHRpb25zLmhlbHBlcj1lLm9wdGlvbnMuX2hlbHBlcik6KGUuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCxlLl90cmlnZ2VyKCJkZWFjdGl2YXRlIix0LG4pKX0pfSxkcmFnOmZ1bmN0aW9uKHQsaSxzKXtlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgbj0hMSxhPXRoaXM7YS5wb3NpdGlvbkFicz1zLnBvc2l0aW9uQWJzLGEuaGVscGVyUHJvcG9ydGlvbnM9cy5oZWxwZXJQcm9wb3J0aW9ucyxhLm9mZnNldC5jbGljaz1zLm9mZnNldC5jbGljayxhLl9pbnRlcnNlY3RzV2l0aChhLmNvbnRhaW5lckNhY2hlKSYmKG49ITAsZS5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyx0aGlzLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsdGhpcy5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssdGhpcyE9PWEmJnRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyQ2FjaGUpJiZlLmNvbnRhaW5zKGEuZWxlbWVudFswXSx0aGlzLmVsZW1lbnRbMF0pJiYobj0hMSksbn0pKSxuPyhhLmlzT3Zlcnx8KGEuaXNPdmVyPTEscy5fcGFyZW50PWkuaGVscGVyLnBhcmVudCgpLGEuY3VycmVudEl0ZW09aS5oZWxwZXIuYXBwZW5kVG8oYS5lbGVtZW50KS5kYXRhKCJ1aS1zb3J0YWJsZS1pdGVtIiwhMCksYS5vcHRpb25zLl9oZWxwZXI9YS5vcHRpb25zLmhlbHBlcixhLm9wdGlvbnMuaGVscGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGkuaGVscGVyWzBdfSx0LnRhcmdldD1hLmN1cnJlbnRJdGVtWzBdLGEuX21vdXNlQ2FwdHVyZSh0LCEwKSxhLl9tb3VzZVN0YXJ0KHQsITAsITApLGEub2Zmc2V0LmNsaWNrLnRvcD1zLm9mZnNldC5jbGljay50b3AsYS5vZmZzZXQuY2xpY2subGVmdD1zLm9mZnNldC5jbGljay5sZWZ0LGEub2Zmc2V0LnBhcmVudC5sZWZ0LT1zLm9mZnNldC5wYXJlbnQubGVmdC1hLm9mZnNldC5wYXJlbnQubGVmdCxhLm9mZnNldC5wYXJlbnQudG9wLT1zLm9mZnNldC5wYXJlbnQudG9wLWEub2Zmc2V0LnBhcmVudC50b3Ascy5fdHJpZ2dlcigidG9Tb3J0YWJsZSIsdCkscy5kcm9wcGVkPWEuZWxlbWVudCxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX0pLHMuY3VycmVudEl0ZW09cy5lbGVtZW50LGEuZnJvbU91dHNpZGU9cyksYS5jdXJyZW50SXRlbSYmKGEuX21vdXNlRHJhZyh0KSxpLnBvc2l0aW9uPWEucG9zaXRpb24pKTphLmlzT3ZlciYmKGEuaXNPdmVyPTAsYS5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLGEub3B0aW9ucy5fcmV2ZXJ0PWEub3B0aW9ucy5yZXZlcnQsYS5vcHRpb25zLnJldmVydD0hMSxhLl90cmlnZ2VyKCJvdXQiLHQsYS5fdWlIYXNoKGEpKSxhLl9tb3VzZVN0b3AodCwhMCksYS5vcHRpb25zLnJldmVydD1hLm9wdGlvbnMuX3JldmVydCxhLm9wdGlvbnMuaGVscGVyPWEub3B0aW9ucy5faGVscGVyLGEucGxhY2Vob2xkZXImJmEucGxhY2Vob2xkZXIucmVtb3ZlKCksaS5oZWxwZXIuYXBwZW5kVG8ocy5fcGFyZW50KSxzLl9yZWZyZXNoT2Zmc2V0cyh0KSxpLnBvc2l0aW9uPXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMCkscy5fdHJpZ2dlcigiZnJvbVNvcnRhYmxlIix0KSxzLmRyb3BwZWQ9ITEsZS5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9KSl9KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImN1cnNvciIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKCJib2R5IiksYT1zLm9wdGlvbnM7bi5jc3MoImN1cnNvciIpJiYoYS5fY3Vyc29yPW4uY3NzKCJjdXJzb3IiKSksbi5jc3MoImN1cnNvciIsYS5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7bi5fY3Vyc29yJiZlKCJib2R5IikuY3NzKCJjdXJzb3IiLG4uX2N1cnNvcil9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJvcGFjaXR5Iix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUoaS5oZWxwZXIpLGE9cy5vcHRpb25zO24uY3NzKCJvcGFjaXR5IikmJihhLl9vcGFjaXR5PW4uY3NzKCJvcGFjaXR5IikpLG4uY3NzKCJvcGFjaXR5IixhLm9wYWNpdHkpfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7bi5fb3BhY2l0eSYmZShpLmhlbHBlcikuY3NzKCJvcGFjaXR5IixuLl9vcGFjaXR5KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNjcm9sbCIse3N0YXJ0OmZ1bmN0aW9uKGUsdCxpKXtpLnNjcm9sbFBhcmVudE5vdEhpZGRlbnx8KGkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuPWkuaGVscGVyLnNjcm9sbFBhcmVudCghMSkpLGkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWzBdIT09aS5kb2N1bWVudFswXSYmIkhUTUwiIT09aS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0udGFnTmFtZSYmKGkub3ZlcmZsb3dPZmZzZXQ9aS5zY3JvbGxQYXJlbnROb3RIaWRkZW4ub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnMsYT0hMSxvPXMuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWzBdLHI9cy5kb2N1bWVudFswXTtvIT09ciYmIkhUTUwiIT09by50YWdOYW1lPyhuLmF4aXMmJiJ4Ij09PW4uYXhpc3x8KHMub3ZlcmZsb3dPZmZzZXQudG9wK28ub2Zmc2V0SGVpZ2h0LXQucGFnZVk8bi5zY3JvbGxTZW5zaXRpdml0eT9vLnNjcm9sbFRvcD1hPW8uc2Nyb2xsVG9wK24uc2Nyb2xsU3BlZWQ6dC5wYWdlWS1zLm92ZXJmbG93T2Zmc2V0LnRvcDxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoby5zY3JvbGxUb3A9YT1vLnNjcm9sbFRvcC1uLnNjcm9sbFNwZWVkKSksbi5heGlzJiYieSI9PT1uLmF4aXN8fChzLm92ZXJmbG93T2Zmc2V0LmxlZnQrby5vZmZzZXRXaWR0aC10LnBhZ2VYPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/by5zY3JvbGxMZWZ0PWE9by5zY3JvbGxMZWZ0K24uc2Nyb2xsU3BlZWQ6dC5wYWdlWC1zLm92ZXJmbG93T2Zmc2V0LmxlZnQ8bi5zY3JvbGxTZW5zaXRpdml0eSYmKG8uc2Nyb2xsTGVmdD1hPW8uc2Nyb2xsTGVmdC1uLnNjcm9sbFNwZWVkKSkpOihuLmF4aXMmJiJ4Ij09PW4uYXhpc3x8KHQucGFnZVktZShyKS5zY3JvbGxUb3AoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P2E9ZShyKS5zY3JvbGxUb3AoZShyKS5zY3JvbGxUb3AoKS1uLnNjcm9sbFNwZWVkKTplKHdpbmRvdykuaGVpZ2h0KCktKHQucGFnZVktZShyKS5zY3JvbGxUb3AoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKGE9ZShyKS5zY3JvbGxUb3AoZShyKS5zY3JvbGxUb3AoKStuLnNjcm9sbFNwZWVkKSkpLG4uYXhpcyYmInkiPT09bi5heGlzfHwodC5wYWdlWC1lKHIpLnNjcm9sbExlZnQoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P2E9ZShyKS5zY3JvbGxMZWZ0KGUocikuc2Nyb2xsTGVmdCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS53aWR0aCgpLSh0LnBhZ2VYLWUocikuc2Nyb2xsTGVmdCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoYT1lKHIpLnNjcm9sbExlZnQoZShyKS5zY3JvbGxMZWZ0KCkrbi5zY3JvbGxTcGVlZCkpKSksYSE9PSExJiZlLnVpLmRkbWFuYWdlciYmIW4uZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMocyx0KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNuYXAiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49cy5vcHRpb25zO3Muc25hcEVsZW1lbnRzPVtdLGUobi5zbmFwLmNvbnN0cnVjdG9yIT09U3RyaW5nP24uc25hcC5pdGVtc3x8IjpkYXRhKHVpLWRyYWdnYWJsZSkiOm4uc25hcCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksaT10Lm9mZnNldCgpO3RoaXMhPT1zLmVsZW1lbnRbMF0mJnMuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDp0Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5vdXRlckhlaWdodCgpLHRvcDppLnRvcCxsZWZ0OmkubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbyxyLGgsbCx1LGQsYyxwLGY9cy5vcHRpb25zLG09Zi5zbmFwVG9sZXJhbmNlLGc9aS5vZmZzZXQubGVmdCx2PWcrcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCx5PWkub2Zmc2V0LnRvcCxiPXkrcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7Zm9yKGM9cy5zbmFwRWxlbWVudHMubGVuZ3RoLTE7Yz49MDtjLS0paD1zLnNuYXBFbGVtZW50c1tjXS5sZWZ0LXMubWFyZ2lucy5sZWZ0LGw9aCtzLnNuYXBFbGVtZW50c1tjXS53aWR0aCx1PXMuc25hcEVsZW1lbnRzW2NdLnRvcC1zLm1hcmdpbnMudG9wLGQ9dStzLnNuYXBFbGVtZW50c1tjXS5oZWlnaHQsaC1tPnZ8fGc+bCttfHx1LW0+Ynx8eT5kK218fCFlLmNvbnRhaW5zKHMuc25hcEVsZW1lbnRzW2NdLml0ZW0ub3duZXJEb2N1bWVudCxzLnNuYXBFbGVtZW50c1tjXS5pdGVtKT8ocy5zbmFwRWxlbWVudHNbY10uc25hcHBpbmcmJnMub3B0aW9ucy5zbmFwLnJlbGVhc2UmJnMub3B0aW9ucy5zbmFwLnJlbGVhc2UuY2FsbChzLmVsZW1lbnQsdCxlLmV4dGVuZChzLl91aUhhc2goKSx7c25hcEl0ZW06cy5zbmFwRWxlbWVudHNbY10uaXRlbX0pKSxzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZz0hMSk6KCJpbm5lciIhPT1mLnNuYXBNb2RlJiYobj1tPj1NYXRoLmFicyh1LWIpLGE9bT49TWF0aC5hYnMoZC15KSxvPW0+PU1hdGguYWJzKGgtdikscj1tPj1NYXRoLmFicyhsLWcpLG4mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6dS1zLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3ApLGEmJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6ZCxsZWZ0OjB9KS50b3ApLG8mJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpoLXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0KSxyJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6bH0pLmxlZnQpKSxwPW58fGF8fG98fHIsIm91dGVyIiE9PWYuc25hcE1vZGUmJihuPW0+PU1hdGguYWJzKHUteSksYT1tPj1NYXRoLmFicyhkLWIpLG89bT49TWF0aC5hYnMoaC1nKSxyPW0+PU1hdGguYWJzKGwtdiksbiYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDp1LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpkLXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksbyYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0Omh9KS5sZWZ0KSxyJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6bC1zLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdCkpLCFzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZyYmKG58fGF8fG98fHJ8fHApJiZzLm9wdGlvbnMuc25hcC5zbmFwJiZzLm9wdGlvbnMuc25hcC5zbmFwLmNhbGwocy5lbGVtZW50LHQsZS5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2NdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbY10uc25hcHBpbmc9bnx8YXx8b3x8cnx8cCl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJzdGFjayIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhPXMub3B0aW9ucyxvPWUubWFrZUFycmF5KGUoYS5zdGFjaykpLnNvcnQoZnVuY3Rpb24odCxpKXtyZXR1cm4ocGFyc2VJbnQoZSh0KS5jc3MoInpJbmRleCIpLDEwKXx8MCktKHBhcnNlSW50KGUoaSkuY3NzKCJ6SW5kZXgiKSwxMCl8fDApfSk7by5sZW5ndGgmJihuPXBhcnNlSW50KGUob1swXSkuY3NzKCJ6SW5kZXgiKSwxMCl8fDAsZShvKS5lYWNoKGZ1bmN0aW9uKHQpe2UodGhpcykuY3NzKCJ6SW5kZXgiLG4rdCl9KSx0aGlzLmNzcygiekluZGV4IixuK28ubGVuZ3RoKSl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJ6SW5kZXgiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZShpLmhlbHBlciksYT1zLm9wdGlvbnM7bi5jc3MoInpJbmRleCIpJiYoYS5fekluZGV4PW4uY3NzKCJ6SW5kZXgiKSksbi5jc3MoInpJbmRleCIsYS56SW5kZXgpfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7bi5fekluZGV4JiZlKGkuaGVscGVyKS5jc3MoInpJbmRleCIsbi5fekluZGV4KX19KSxlLnVpLmRyYWdnYWJsZSxlLndpZGdldCgidWkucmVzaXphYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjExLjQiLHdpZGdldEV2ZW50UHJlZml4OiJyZXNpemUiLG9wdGlvbnM6e2Fsc29SZXNpemU6ITEsYW5pbWF0ZTohMSxhbmltYXRlRHVyYXRpb246InNsb3ciLGFuaW1hdGVFYXNpbmc6InN3aW5nIixhc3BlY3RSYXRpbzohMSxhdXRvSGlkZTohMSxjb250YWlubWVudDohMSxnaG9zdDohMSxncmlkOiExLGhhbmRsZXM6ImUscyxzZSIsaGVscGVyOiExLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjEwLG1pbldpZHRoOjEwLHpJbmRleDo5MCxyZXNpemU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX251bTpmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZSwxMCl8fDB9LF9pc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VJbnQoZSwxMCkpfSxfaGFzU2Nyb2xsOmZ1bmN0aW9uKHQsaSl7aWYoImhpZGRlbiI9PT1lKHQpLmNzcygib3ZlcmZsb3ciKSlyZXR1cm4hMTt2YXIgcz1pJiYibGVmdCI9PT1pPyJzY3JvbGxMZWZ0Ijoic2Nyb2xsVG9wIixuPSExO3JldHVybiB0W3NdPjA/ITA6KHRbc109MSxuPXRbc10+MCx0W3NdPTAsbil9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbixhLG89dGhpcyxyPXRoaXMub3B0aW9ucztpZih0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZSIpLGUuZXh0ZW5kKHRoaXMse19hc3BlY3RSYXRpbzohIXIuYXNwZWN0UmF0aW8sYXNwZWN0UmF0aW86ci5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6ci5oZWxwZXJ8fHIuZ2hvc3R8fHIuYW5pbWF0ZT9yLmhlbHBlcnx8InVpLXJlc2l6YWJsZS1oZWxwZXIiOm51bGx9KSx0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL14oY2FudmFzfHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b258aW1nKSQvaSkmJih0aGlzLmVsZW1lbnQud3JhcChlKCI8ZGl2IGNsYXNzPSd1aS13cmFwcGVyJyBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnPjwvZGl2PiIpLmNzcyh7cG9zaXRpb246dGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSx3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSx0b3A6dGhpcy5lbGVtZW50LmNzcygidG9wIiksbGVmdDp0aGlzLmVsZW1lbnQuY3NzKCJsZWZ0Iil9KSksdGhpcy5lbGVtZW50PXRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKCJ1aS1yZXNpemFibGUiLHRoaXMuZWxlbWVudC5yZXNpemFibGUoImluc3RhbmNlIikpLHRoaXMuZWxlbWVudElzV3JhcHBlcj0hMCx0aGlzLmVsZW1lbnQuY3NzKHttYXJnaW5MZWZ0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLG1hcmdpblRvcDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblRvcCIpLG1hcmdpblJpZ2h0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSxtYXJnaW5Cb3R0b206dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKX0pLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luTGVmdDowLG1hcmdpblRvcDowLG1hcmdpblJpZ2h0OjAsbWFyZ2luQm90dG9tOjB9KSx0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGU9dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsIm5vbmUiKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2godGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjoic3RhdGljIix6b29tOjEsZGlzcGxheToiYmxvY2sifSkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luIil9KSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0aGlzLmhhbmRsZXM9ci5oYW5kbGVzfHwoZSgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiLHRoaXMuZWxlbWVudCkubGVuZ3RoP3tuOiIudWktcmVzaXphYmxlLW4iLGU6Ii51aS1yZXNpemFibGUtZSIsczoiLnVpLXJlc2l6YWJsZS1zIix3OiIudWktcmVzaXphYmxlLXciLHNlOiIudWktcmVzaXphYmxlLXNlIixzdzoiLnVpLXJlc2l6YWJsZS1zdyIsbmU6Ii51aS1yZXNpemFibGUtbmUiLG53OiIudWktcmVzaXphYmxlLW53In06ImUscyxzZSIpLHRoaXMuX2hhbmRsZXM9ZSgpLHRoaXMuaGFuZGxlcy5jb25zdHJ1Y3Rvcj09PVN0cmluZylmb3IoImFsbCI9PT10aGlzLmhhbmRsZXMmJih0aGlzLmhhbmRsZXM9Im4sZSxzLHcsc2Usc3csbmUsbnciKSx0PXRoaXMuaGFuZGxlcy5zcGxpdCgiLCIpLHRoaXMuaGFuZGxlcz17fSxpPTA7dC5sZW5ndGg+aTtpKyspcz1lLnRyaW0odFtpXSksYT0idWktcmVzaXphYmxlLSIrcyxuPWUoIjxkaXYgY2xhc3M9J3VpLXJlc2l6YWJsZS1oYW5kbGUgIithKyInPjwvZGl2PiIpLG4uY3NzKHt6SW5kZXg6ci56SW5kZXh9KSwic2UiPT09cyYmbi5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSIpLHRoaXMuaGFuZGxlc1tzXT0iLnVpLXJlc2l6YWJsZS0iK3MsdGhpcy5lbGVtZW50LmFwcGVuZChuKTt0aGlzLl9yZW5kZXJBeGlzPWZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhO3Q9dHx8dGhpcy5lbGVtZW50O2ZvcihpIGluIHRoaXMuaGFuZGxlcyl0aGlzLmhhbmRsZXNbaV0uY29uc3RydWN0b3I9PT1TdHJpbmc/dGhpcy5oYW5kbGVzW2ldPXRoaXMuZWxlbWVudC5jaGlsZHJlbih0aGlzLmhhbmRsZXNbaV0pLmZpcnN0KCkuc2hvdygpOih0aGlzLmhhbmRsZXNbaV0uanF1ZXJ5fHx0aGlzLmhhbmRsZXNbaV0ubm9kZVR5cGUpJiYodGhpcy5oYW5kbGVzW2ldPWUodGhpcy5oYW5kbGVzW2ldKSx0aGlzLl9vbih0aGlzLmhhbmRsZXNbaV0se21vdXNlZG93bjpvLl9tb3VzZURvd259KSksdGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvXih0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9uKSQvaSkmJihzPWUodGhpcy5oYW5kbGVzW2ldLHRoaXMuZWxlbWVudCksYT0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KGkpP3Mub3V0ZXJIZWlnaHQoKTpzLm91dGVyV2lkdGgoKSxuPVsicGFkZGluZyIsL25lfG53fG4vLnRlc3QoaSk/IlRvcCI6L3NlfHN3fHMvLnRlc3QoaSk/IkJvdHRvbSI6L15lJC8udGVzdChpKT8iUmlnaHQiOiJMZWZ0Il0uam9pbigiIiksdC5jc3MobixhKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0aGlzLl9oYW5kbGVzPXRoaXMuX2hhbmRsZXMuYWRkKHRoaXMuaGFuZGxlc1tpXSl9LHRoaXMuX3JlbmRlckF4aXModGhpcy5lbGVtZW50KSx0aGlzLl9oYW5kbGVzPXRoaXMuX2hhbmRsZXMuYWRkKHRoaXMuZWxlbWVudC5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpKSx0aGlzLl9oYW5kbGVzLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9oYW5kbGVzLm1vdXNlb3ZlcihmdW5jdGlvbigpe28ucmVzaXppbmd8fCh0aGlzLmNsYXNzTmFtZSYmKG49dGhpcy5jbGFzc05hbWUubWF0Y2goL3VpLXJlc2l6YWJsZS0oc2V8c3d8bmV8bnd8bnxlfHN8dykvaSkpLG8uYXhpcz1uJiZuWzFdP25bMV06InNlIil9KSxyLmF1dG9IaWRlJiYodGhpcy5faGFuZGxlcy5oaWRlKCksZSh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKS5tb3VzZWVudGVyKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8KGUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLG8uX2hhbmRsZXMuc2hvdygpKX0pLm1vdXNlbGVhdmUoZnVuY3Rpb24oKXtyLmRpc2FibGVkfHxvLnJlc2l6aW5nfHwoZSh0aGlzKS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIiksby5faGFuZGxlcy5oaWRlKCkpfSkpLHRoaXMuX21vdXNlSW5pdCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciB0LGk9ZnVuY3Rpb24odCl7ZSh0KS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlIHVpLXJlc2l6YWJsZS1kaXNhYmxlZCB1aS1yZXNpemFibGUtcmVzaXppbmciKS5yZW1vdmVEYXRhKCJyZXNpemFibGUiKS5yZW1vdmVEYXRhKCJ1aS1yZXNpemFibGUiKS51bmJpbmQoIi5yZXNpemFibGUiKS5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpLnJlbW92ZSgpfTtyZXR1cm4gdGhpcy5lbGVtZW50SXNXcmFwcGVyJiYoaSh0aGlzLmVsZW1lbnQpLHQ9dGhpcy5lbGVtZW50LHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246dC5jc3MoInBvc2l0aW9uIiksd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSx0b3A6dC5jc3MoInRvcCIpLGxlZnQ6dC5jc3MoImxlZnQiKX0pLmluc2VydEFmdGVyKHQpLHQucmVtb3ZlKCkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIix0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpLGkodGhpcy5vcmlnaW5hbEVsZW1lbnQpLHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIGkscyxuPSExO2ZvcihpIGluIHRoaXMuaGFuZGxlcylzPWUodGhpcy5oYW5kbGVzW2ldKVswXSwocz09PXQudGFyZ2V0fHxlLmNvbnRhaW5zKHMsdC50YXJnZXQpKSYmKG49ITApO3JldHVybiF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJm59LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhPXRoaXMub3B0aW9ucyxvPXRoaXMuZWxlbWVudDtyZXR1cm4gdGhpcy5yZXNpemluZz0hMCx0aGlzLl9yZW5kZXJQcm94eSgpLGk9dGhpcy5fbnVtKHRoaXMuaGVscGVyLmNzcygibGVmdCIpKSxzPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoInRvcCIpKSxhLmNvbnRhaW5tZW50JiYoaSs9ZShhLmNvbnRhaW5tZW50KS5zY3JvbGxMZWZ0KCl8fDAscys9ZShhLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKXx8MCksdGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5wb3NpdGlvbj17bGVmdDppLHRvcDpzfSx0aGlzLnNpemU9dGhpcy5faGVscGVyP3t3aWR0aDp0aGlzLmhlbHBlci53aWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5oZWlnaHQoKX06e3dpZHRoOm8ud2lkdGgoKSxoZWlnaHQ6by5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFNpemU9dGhpcy5faGVscGVyP3t3aWR0aDpvLm91dGVyV2lkdGgoKSxoZWlnaHQ6by5vdXRlckhlaWdodCgpfTp7d2lkdGg6by53aWR0aCgpLGhlaWdodDpvLmhlaWdodCgpfSx0aGlzLnNpemVEaWZmPXt3aWR0aDpvLm91dGVyV2lkdGgoKS1vLndpZHRoKCksaGVpZ2h0Om8ub3V0ZXJIZWlnaHQoKS1vLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e2xlZnQ6aSx0b3A6c30sdGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb249e2xlZnQ6dC5wYWdlWCx0b3A6dC5wYWdlWX0sdGhpcy5hc3BlY3RSYXRpbz0ibnVtYmVyIj09dHlwZW9mIGEuYXNwZWN0UmF0aW8/YS5hc3BlY3RSYXRpbzp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aC90aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHR8fDEsbj1lKCIudWktcmVzaXphYmxlLSIrdGhpcy5heGlzKS5jc3MoImN1cnNvciIpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsImF1dG8iPT09bj90aGlzLmF4aXMrIi1yZXNpemUiOm4pLG8uYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RhcnQiLHQpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbj10aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbixhPXRoaXMuYXhpcyxvPXQucGFnZVgtbi5sZWZ0fHwwLHI9dC5wYWdlWS1uLnRvcHx8MCxoPXRoaXMuX2NoYW5nZVthXTtyZXR1cm4gdGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKSxoPyhpPWguYXBwbHkodGhpcyxbdCxvLHJdKSx0aGlzLl91cGRhdGVWaXJ0dWFsQm91bmRhcmllcyh0LnNoaWZ0S2V5KSwodGhpcy5fYXNwZWN0UmF0aW98fHQuc2hpZnRLZXkpJiYoaT10aGlzLl91cGRhdGVSYXRpbyhpLHQpKSxpPXRoaXMuX3Jlc3BlY3RTaXplKGksdCksdGhpcy5fdXBkYXRlQ2FjaGUoaSksdGhpcy5fcHJvcGFnYXRlKCJyZXNpemUiLHQpLHM9dGhpcy5fYXBwbHlDaGFuZ2VzKCksIXRoaXMuX2hlbHBlciYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCksZS5pc0VtcHR5T2JqZWN0KHMpfHwodGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKSx0aGlzLl90cmlnZ2VyKCJyZXNpemUiLHQsdGhpcy51aSgpKSx0aGlzLl9hcHBseUNoYW5nZXMoKSksITEpOiExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3RoaXMucmVzaXppbmc9ITE7dmFyIGkscyxuLGEsbyxyLGgsbD10aGlzLm9wdGlvbnMsdT10aGlzO3JldHVybiB0aGlzLl9oZWxwZXImJihpPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMscz1pLmxlbmd0aCYmL3RleHRhcmVhL2kudGVzdChpWzBdLm5vZGVOYW1lKSxuPXMmJnRoaXMuX2hhc1Njcm9sbChpWzBdLCJsZWZ0Iik/MDp1LnNpemVEaWZmLmhlaWdodCxhPXM/MDp1LnNpemVEaWZmLndpZHRoLG89e3dpZHRoOnUuaGVscGVyLndpZHRoKCktYSxoZWlnaHQ6dS5oZWxwZXIuaGVpZ2h0KCktbn0scj1wYXJzZUludCh1LmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApKyh1LnBvc2l0aW9uLmxlZnQtdS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGg9cGFyc2VJbnQodS5lbGVtZW50LmNzcygidG9wIiksMTApKyh1LnBvc2l0aW9uLnRvcC11Lm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbCxsLmFuaW1hdGV8fHRoaXMuZWxlbWVudC5jc3MoZS5leHRlbmQobyx7dG9wOmgsbGVmdDpyfSkpLHUuaGVscGVyLmhlaWdodCh1LnNpemUuaGVpZ2h0KSx1LmhlbHBlci53aWR0aCh1LnNpemUud2lkdGgpLHRoaXMuX2hlbHBlciYmIWwuYW5pbWF0ZSYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksZSgiYm9keSIpLmNzcygiY3Vyc29yIiwiYXV0byIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIiksdGhpcy5fcHJvcGFnYXRlKCJzdG9wIix0KSx0aGlzLl9oZWxwZXImJnRoaXMuaGVscGVyLnJlbW92ZSgpLCExfSxfdXBkYXRlUHJldlByb3BlcnRpZXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZQb3NpdGlvbj17dG9wOnRoaXMucG9zaXRpb24udG9wLGxlZnQ6dGhpcy5wb3NpdGlvbi5sZWZ0fSx0aGlzLnByZXZTaXplPXt3aWR0aDp0aGlzLnNpemUud2lkdGgsaGVpZ2h0OnRoaXMuc2l6ZS5oZWlnaHR9fSxfYXBwbHlDaGFuZ2VzOmZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIHRoaXMucG9zaXRpb24udG9wIT09dGhpcy5wcmV2UG9zaXRpb24udG9wJiYoZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArInB4IiksdGhpcy5wb3NpdGlvbi5sZWZ0IT09dGhpcy5wcmV2UG9zaXRpb24ubGVmdCYmKGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IiksdGhpcy5zaXplLndpZHRoIT09dGhpcy5wcmV2U2l6ZS53aWR0aCYmKGUud2lkdGg9dGhpcy5zaXplLndpZHRoKyJweCIpLHRoaXMuc2l6ZS5oZWlnaHQhPT10aGlzLnByZXZTaXplLmhlaWdodCYmKGUuaGVpZ2h0PXRoaXMuc2l6ZS5oZWlnaHQrInB4IiksdGhpcy5oZWxwZXIuY3NzKGUpLGV9LF91cGRhdGVWaXJ0dWFsQm91bmRhcmllczpmdW5jdGlvbihlKXt2YXIgdCxpLHMsbixhLG89dGhpcy5vcHRpb25zO2E9e21pbldpZHRoOnRoaXMuX2lzTnVtYmVyKG8ubWluV2lkdGgpP28ubWluV2lkdGg6MCxtYXhXaWR0aDp0aGlzLl9pc051bWJlcihvLm1heFdpZHRoKT9vLm1heFdpZHRoOjEvMCxtaW5IZWlnaHQ6dGhpcy5faXNOdW1iZXIoby5taW5IZWlnaHQpP28ubWluSGVpZ2h0OjAsbWF4SGVpZ2h0OnRoaXMuX2lzTnVtYmVyKG8ubWF4SGVpZ2h0KT9vLm1heEhlaWdodDoxLzB9LCh0aGlzLl9hc3BlY3RSYXRpb3x8ZSkmJih0PWEubWluSGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8scz1hLm1pbldpZHRoL3RoaXMuYXNwZWN0UmF0aW8saT1hLm1heEhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLG49YS5tYXhXaWR0aC90aGlzLmFzcGVjdFJhdGlvLHQ+YS5taW5XaWR0aCYmKGEubWluV2lkdGg9dCkscz5hLm1pbkhlaWdodCYmKGEubWluSGVpZ2h0PXMpLGEubWF4V2lkdGg+aSYmKGEubWF4V2lkdGg9aSksYS5tYXhIZWlnaHQ+biYmKGEubWF4SGVpZ2h0PW4pKSx0aGlzLl92Qm91bmRhcmllcz1hfSxfdXBkYXRlQ2FjaGU6ZnVuY3Rpb24oZSl7dGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5faXNOdW1iZXIoZS5sZWZ0KSYmKHRoaXMucG9zaXRpb24ubGVmdD1lLmxlZnQpLHRoaXMuX2lzTnVtYmVyKGUudG9wKSYmKHRoaXMucG9zaXRpb24udG9wPWUudG9wKSx0aGlzLl9pc051bWJlcihlLmhlaWdodCkmJih0aGlzLnNpemUuaGVpZ2h0PWUuaGVpZ2h0KSx0aGlzLl9pc051bWJlcihlLndpZHRoKSYmKHRoaXMuc2l6ZS53aWR0aD1lLndpZHRoKX0sX3VwZGF0ZVJhdGlvOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucG9zaXRpb24saT10aGlzLnNpemUscz10aGlzLmF4aXM7cmV0dXJuIHRoaXMuX2lzTnVtYmVyKGUuaGVpZ2h0KT9lLndpZHRoPWUuaGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW86dGhpcy5faXNOdW1iZXIoZS53aWR0aCkmJihlLmhlaWdodD1lLndpZHRoL3RoaXMuYXNwZWN0UmF0aW8pLCJzdyI9PT1zJiYoZS5sZWZ0PXQubGVmdCsoaS53aWR0aC1lLndpZHRoKSxlLnRvcD1udWxsKSwibnciPT09cyYmKGUudG9wPXQudG9wKyhpLmhlaWdodC1lLmhlaWdodCksZS5sZWZ0PXQubGVmdCsoaS53aWR0aC1lLndpZHRoKSksZX0sX3Jlc3BlY3RTaXplOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ZCb3VuZGFyaWVzLGk9dGhpcy5heGlzLHM9dGhpcy5faXNOdW1iZXIoZS53aWR0aCkmJnQubWF4V2lkdGgmJnQubWF4V2lkdGg8ZS53aWR0aCxuPXRoaXMuX2lzTnVtYmVyKGUuaGVpZ2h0KSYmdC5tYXhIZWlnaHQmJnQubWF4SGVpZ2h0PGUuaGVpZ2h0LGE9dGhpcy5faXNOdW1iZXIoZS53aWR0aCkmJnQubWluV2lkdGgmJnQubWluV2lkdGg+ZS53aWR0aCxvPXRoaXMuX2lzTnVtYmVyKGUuaGVpZ2h0KSYmdC5taW5IZWlnaHQmJnQubWluSGVpZ2h0PmUuaGVpZ2h0LHI9dGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQrdGhpcy5vcmlnaW5hbFNpemUud2lkdGgsaD10aGlzLnBvc2l0aW9uLnRvcCt0aGlzLnNpemUuaGVpZ2h0LGw9L3N3fG53fHcvLnRlc3QoaSksdT0vbnd8bmV8bi8udGVzdChpKTtyZXR1cm4gYSYmKGUud2lkdGg9dC5taW5XaWR0aCksbyYmKGUuaGVpZ2h0PXQubWluSGVpZ2h0KSxzJiYoZS53aWR0aD10Lm1heFdpZHRoKSxuJiYoZS5oZWlnaHQ9dC5tYXhIZWlnaHQpLGEmJmwmJihlLmxlZnQ9ci10Lm1pbldpZHRoKSxzJiZsJiYoZS5sZWZ0PXItdC5tYXhXaWR0aCksbyYmdSYmKGUudG9wPWgtdC5taW5IZWlnaHQpLG4mJnUmJihlLnRvcD1oLXQubWF4SGVpZ2h0KSxlLndpZHRofHxlLmhlaWdodHx8ZS5sZWZ0fHwhZS50b3A/ZS53aWR0aHx8ZS5oZWlnaHR8fGUudG9wfHwhZS5sZWZ0fHwoZS5sZWZ0PW51bGwpOmUudG9wPW51bGwsZX0sX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9uczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxpPVtdLHM9W2UuY3NzKCJib3JkZXJUb3BXaWR0aCIpLGUuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksZS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksZS5jc3MoImJvcmRlckxlZnRXaWR0aCIpXSxuPVtlLmNzcygicGFkZGluZ1RvcCIpLGUuY3NzKCJwYWRkaW5nUmlnaHQiKSxlLmNzcygicGFkZGluZ0JvdHRvbSIpLGUuY3NzKCJwYWRkaW5nTGVmdCIpXTs0PnQ7dCsrKWlbdF09cGFyc2VJbnQoc1t0XSwxMCl8fDAsaVt0XSs9cGFyc2VJbnQoblt0XSwxMCl8fDA7cmV0dXJue2hlaWdodDppWzBdK2lbMl0sd2lkdGg6aVsxXStpWzNdfX0sX3Byb3BvcnRpb25hbGx5UmVzaXplOmZ1bmN0aW9uKCl7aWYodGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgpZm9yKHZhciBlLHQ9MCxpPXRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQ7dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGg+dDt0KyspZT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzW3RdLHRoaXMub3V0ZXJEaW1lbnNpb25zfHwodGhpcy5vdXRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0UGFkZGluZ1BsdXNCb3JkZXJEaW1lbnNpb25zKGUpKSxlLmNzcyh7aGVpZ2h0OmkuaGVpZ2h0KCktdGhpcy5vdXRlckRpbWVuc2lvbnMuaGVpZ2h0fHwwLHdpZHRoOmkud2lkdGgoKS10aGlzLm91dGVyRGltZW5zaW9ucy53aWR0aHx8MH0pfSxfcmVuZGVyUHJveHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQsaT10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50T2Zmc2V0PXQub2Zmc2V0KCksdGhpcy5faGVscGVyPyh0aGlzLmhlbHBlcj10aGlzLmhlbHBlcnx8ZSgiPGRpdiBzdHlsZT0nb3ZlcmZsb3c6aGlkZGVuOyc+PC9kaXY+IiksdGhpcy5oZWxwZXIuYWRkQ2xhc3ModGhpcy5faGVscGVyKS5jc3Moe3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCktMSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCktMSxwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6dGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQrInB4Iix0b3A6dGhpcy5lbGVtZW50T2Zmc2V0LnRvcCsicHgiLHpJbmRleDorK2kuekluZGV4fSksdGhpcy5oZWxwZXIuYXBwZW5kVG8oImJvZHkiKS5kaXNhYmxlU2VsZWN0aW9uKCkpOnRoaXMuaGVscGVyPXRoaXMuZWxlbWVudH0sX2NoYW5nZTp7ZTpmdW5jdGlvbihlLHQpe3JldHVybnt3aWR0aDp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCt0fX0sdzpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMub3JpZ2luYWxTaXplLHM9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybntsZWZ0OnMubGVmdCt0LHdpZHRoOmkud2lkdGgtdH19LG46ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPXRoaXMub3JpZ2luYWxTaXplLG49dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3JldHVybnt0b3A6bi50b3AraSxoZWlnaHQ6cy5oZWlnaHQtaX19LHM6ZnVuY3Rpb24oZSx0LGkpe3JldHVybntoZWlnaHQ6dGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0K2l9fSxzZTpmdW5jdGlvbih0LGkscyl7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFt0LGksc10pKX0sc3c6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbdCxpLHNdKSl9LG5lOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW3QsaSxzXSkpfSxudzpmdW5jdGlvbih0LGkscyl7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFt0LGksc10pKX19LF9wcm9wYWdhdGU6ZnVuY3Rpb24odCxpKXtlLnVpLnBsdWdpbi5jYWxsKHRoaXMsdCxbaSx0aGlzLnVpKCldKSwicmVzaXplIiE9PXQmJnRoaXMuX3RyaWdnZXIodCxpLHRoaXMudWkoKSl9LHBsdWdpbnM6e30sdWk6ZnVuY3Rpb24oKXtyZXR1cm57b3JpZ2luYWxFbGVtZW50OnRoaXMub3JpZ2luYWxFbGVtZW50LGVsZW1lbnQ6dGhpcy5lbGVtZW50LGhlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLHNpemU6dGhpcy5zaXplLG9yaWdpbmFsU2l6ZTp0aGlzLm9yaWdpbmFsU2l6ZSxvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbn19fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbmltYXRlIix7c3RvcDpmdW5jdGlvbih0KXt2YXIgaT1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKSxzPWkub3B0aW9ucyxuPWkuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMsYT1uLmxlbmd0aCYmL3RleHRhcmVhL2kudGVzdChuWzBdLm5vZGVOYW1lKSxvPWEmJmkuX2hhc1Njcm9sbChuWzBdLCJsZWZ0Iik/MDppLnNpemVEaWZmLmhlaWdodCxyPWE/MDppLnNpemVEaWZmLndpZHRoLGg9e3dpZHRoOmkuc2l6ZS53aWR0aC1yLGhlaWdodDppLnNpemUuaGVpZ2h0LW99LGw9cGFyc2VJbnQoaS5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsoaS5wb3NpdGlvbi5sZWZ0LWkub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCx1PXBhcnNlSW50KGkuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsoaS5wb3NpdGlvbi50b3AtaS5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGw7aS5lbGVtZW50LmFuaW1hdGUoZS5leHRlbmQoaCx1JiZsP3t0b3A6dSxsZWZ0Omx9Ont9KSx7ZHVyYXRpb246cy5hbmltYXRlRHVyYXRpb24sZWFzaW5nOnMuYW5pbWF0ZUVhc2luZyxzdGVwOmZ1bmN0aW9uKCl7dmFyIHM9e3dpZHRoOnBhcnNlSW50KGkuZWxlbWVudC5jc3MoIndpZHRoIiksMTApLGhlaWdodDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJoZWlnaHQiKSwxMCksdG9wOnBhcnNlSW50KGkuZWxlbWVudC5jc3MoInRvcCIpLDEwKSxsZWZ0OnBhcnNlSW50KGkuZWxlbWVudC5jc3MoImxlZnQiKSwxMCl9O24mJm4ubGVuZ3RoJiZlKG5bMF0pLmNzcyh7d2lkdGg6cy53aWR0aCxoZWlnaHQ6cy5oZWlnaHR9KSxpLl91cGRhdGVDYWNoZShzKSxpLl9wcm9wYWdhdGUoInJlc2l6ZSIsdCl9fSl9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJjb250YWlubWVudCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG4sYSxvLHIsaD1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKSxsPWgub3B0aW9ucyx1PWguZWxlbWVudCxkPWwuY29udGFpbm1lbnQsYz1kIGluc3RhbmNlb2YgZT9kLmdldCgwKTovcGFyZW50Ly50ZXN0KGQpP3UucGFyZW50KCkuZ2V0KDApOmQ7YyYmKGguY29udGFpbmVyRWxlbWVudD1lKGMpLC9kb2N1bWVudC8udGVzdChkKXx8ZD09PWRvY3VtZW50PyhoLmNvbnRhaW5lck9mZnNldD17bGVmdDowLHRvcDowfSxoLmNvbnRhaW5lclBvc2l0aW9uPXtsZWZ0OjAsdG9wOjB9LGgucGFyZW50RGF0YT17ZWxlbWVudDplKGRvY3VtZW50KSxsZWZ0OjAsdG9wOjAsd2lkdGg6ZShkb2N1bWVudCkud2lkdGgoKSxoZWlnaHQ6ZShkb2N1bWVudCkuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHR9KToodD1lKGMpLGk9W10sZShbIlRvcCIsIlJpZ2h0IiwiTGVmdCIsIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uKGUscyl7aVtlXT1oLl9udW0odC5jc3MoInBhZGRpbmciK3MpKX0pLGguY29udGFpbmVyT2Zmc2V0PXQub2Zmc2V0KCksaC5jb250YWluZXJQb3NpdGlvbj10LnBvc2l0aW9uKCksaC5jb250YWluZXJTaXplPXtoZWlnaHQ6dC5pbm5lckhlaWdodCgpLWlbM10sd2lkdGg6dC5pbm5lcldpZHRoKCktaVsxXX0scz1oLmNvbnRhaW5lck9mZnNldCxuPWguY29udGFpbmVyU2l6ZS5oZWlnaHQsYT1oLmNvbnRhaW5lclNpemUud2lkdGgsbz1oLl9oYXNTY3JvbGwoYywibGVmdCIpP2Muc2Nyb2xsV2lkdGg6YSxyPWguX2hhc1Njcm9sbChjKT9jLnNjcm9sbEhlaWdodDpuLGgucGFyZW50RGF0YT17ZWxlbWVudDpjLGxlZnQ6cy5sZWZ0LHRvcDpzLnRvcCx3aWR0aDpvLGhlaWdodDpyfSkpfSxyZXNpemU6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbz1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKSxyPW8ub3B0aW9ucyxoPW8uY29udGFpbmVyT2Zmc2V0LGw9by5wb3NpdGlvbix1PW8uX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5LGQ9e3RvcDowLGxlZnQ6MH0sYz1vLmNvbnRhaW5lckVsZW1lbnQscD0hMDtjWzBdIT09ZG9jdW1lbnQmJi9zdGF0aWMvLnRlc3QoYy5jc3MoInBvc2l0aW9uIikpJiYoZD1oKSxsLmxlZnQ8KG8uX2hlbHBlcj9oLmxlZnQ6MCkmJihvLnNpemUud2lkdGg9by5zaXplLndpZHRoKyhvLl9oZWxwZXI/by5wb3NpdGlvbi5sZWZ0LWgubGVmdDpvLnBvc2l0aW9uLmxlZnQtZC5sZWZ0KSx1JiYoby5zaXplLmhlaWdodD1vLnNpemUud2lkdGgvby5hc3BlY3RSYXRpbyxwPSExKSxvLnBvc2l0aW9uLmxlZnQ9ci5oZWxwZXI/aC5sZWZ0OjApLGwudG9wPChvLl9oZWxwZXI/aC50b3A6MCkmJihvLnNpemUuaGVpZ2h0PW8uc2l6ZS5oZWlnaHQrKG8uX2hlbHBlcj9vLnBvc2l0aW9uLnRvcC1oLnRvcDpvLnBvc2l0aW9uLnRvcCksdSYmKG8uc2l6ZS53aWR0aD1vLnNpemUuaGVpZ2h0Km8uYXNwZWN0UmF0aW8scD0hMSksby5wb3NpdGlvbi50b3A9by5faGVscGVyP2gudG9wOjApLG49by5jb250YWluZXJFbGVtZW50LmdldCgwKT09PW8uZWxlbWVudC5wYXJlbnQoKS5nZXQoMCksYT0vcmVsYXRpdmV8YWJzb2x1dGUvLnRlc3Qoby5jb250YWluZXJFbGVtZW50LmNzcygicG9zaXRpb24iKSksbiYmYT8oby5vZmZzZXQubGVmdD1vLnBhcmVudERhdGEubGVmdCtvLnBvc2l0aW9uLmxlZnQsby5vZmZzZXQudG9wPW8ucGFyZW50RGF0YS50b3Arby5wb3NpdGlvbi50b3ApOihvLm9mZnNldC5sZWZ0PW8uZWxlbWVudC5vZmZzZXQoKS5sZWZ0LG8ub2Zmc2V0LnRvcD1vLmVsZW1lbnQub2Zmc2V0KCkudG9wKSxpPU1hdGguYWJzKG8uc2l6ZURpZmYud2lkdGgrKG8uX2hlbHBlcj9vLm9mZnNldC5sZWZ0LWQubGVmdDpvLm9mZnNldC5sZWZ0LWgubGVmdCkpLHM9TWF0aC5hYnMoby5zaXplRGlmZi5oZWlnaHQrKG8uX2hlbHBlcj9vLm9mZnNldC50b3AtZC50b3A6by5vZmZzZXQudG9wLWgudG9wKSksaStvLnNpemUud2lkdGg+PW8ucGFyZW50RGF0YS53aWR0aCYmKG8uc2l6ZS53aWR0aD1vLnBhcmVudERhdGEud2lkdGgtaSx1JiYoby5zaXplLmhlaWdodD1vLnNpemUud2lkdGgvby5hc3BlY3RSYXRpbyxwPSExKSkscytvLnNpemUuaGVpZ2h0Pj1vLnBhcmVudERhdGEuaGVpZ2h0JiYoby5zaXplLmhlaWdodD1vLnBhcmVudERhdGEuaGVpZ2h0LXMsdSYmKG8uc2l6ZS53aWR0aD1vLnNpemUuaGVpZ2h0Km8uYXNwZWN0UmF0aW8scD0hMSkpLHB8fChvLnBvc2l0aW9uLmxlZnQ9by5wcmV2UG9zaXRpb24ubGVmdCxvLnBvc2l0aW9uLnRvcD1vLnByZXZQb3NpdGlvbi50b3Asby5zaXplLndpZHRoPW8ucHJldlNpemUud2lkdGgsby5zaXplLmhlaWdodD1vLnByZXZTaXplLmhlaWdodCl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKSxpPXQub3B0aW9ucyxzPXQuY29udGFpbmVyT2Zmc2V0LG49dC5jb250YWluZXJQb3NpdGlvbixhPXQuY29udGFpbmVyRWxlbWVudCxvPWUodC5oZWxwZXIpLHI9by5vZmZzZXQoKSxoPW8ub3V0ZXJXaWR0aCgpLXQuc2l6ZURpZmYud2lkdGgsbD1vLm91dGVySGVpZ2h0KCktdC5zaXplRGlmZi5oZWlnaHQ7dC5faGVscGVyJiYhaS5hbmltYXRlJiYvcmVsYXRpdmUvLnRlc3QoYS5jc3MoInBvc2l0aW9uIikpJiZlKHRoaXMpLmNzcyh7bGVmdDpyLmxlZnQtbi5sZWZ0LXMubGVmdCx3aWR0aDpoLGhlaWdodDpsfSksdC5faGVscGVyJiYhaS5hbmltYXRlJiYvc3RhdGljLy50ZXN0KGEuY3NzKCJwb3NpdGlvbiIpKSYmZSh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYWxzb1Jlc2l6ZSIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksaT10Lm9wdGlvbnM7ZShpLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktcmVzaXphYmxlLWFsc29yZXNpemUiLHt3aWR0aDpwYXJzZUludCh0LndpZHRoKCksMTApLGhlaWdodDpwYXJzZUludCh0LmhlaWdodCgpLDEwKSxsZWZ0OnBhcnNlSW50KHQuY3NzKCJsZWZ0IiksMTApLHRvcDpwYXJzZUludCh0LmNzcygidG9wIiksMTApfSl9KX0scmVzaXplOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksbj1zLm9wdGlvbnMsYT1zLm9yaWdpbmFsU2l6ZSxvPXMub3JpZ2luYWxQb3NpdGlvbixyPXtoZWlnaHQ6cy5zaXplLmhlaWdodC1hLmhlaWdodHx8MCx3aWR0aDpzLnNpemUud2lkdGgtYS53aWR0aHx8MCx0b3A6cy5wb3NpdGlvbi50b3Atby50b3B8fDAsbGVmdDpzLnBvc2l0aW9uLmxlZnQtby5sZWZ0fHwwfTtlKG4uYWxzb1Jlc2l6ZSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscz1lKHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplIiksbj17fSxhPXQucGFyZW50cyhpLm9yaWdpbmFsRWxlbWVudFswXSkubGVuZ3RoP1sid2lkdGgiLCJoZWlnaHQiXTpbIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwibGVmdCJdO2UuZWFjaChhLGZ1bmN0aW9uKGUsdCl7dmFyIGk9KHNbdF18fDApKyhyW3RdfHwwKTtpJiZpPj0wJiYoblt0XT1pfHxudWxsKX0pLHQuY3NzKG4pfSl9LHN0b3A6ZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZURhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIil9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJnaG9zdCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksaT10Lm9wdGlvbnMscz10LnNpemU7dC5naG9zdD10Lm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpLHQuZ2hvc3QuY3NzKHtvcGFjaXR5Oi4yNSxkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6cy5oZWlnaHQsd2lkdGg6cy53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWdob3N0IikuYWRkQ2xhc3MoInN0cmluZyI9PXR5cGVvZiBpLmdob3N0P2kuZ2hvc3Q6IiIpLHQuZ2hvc3QuYXBwZW5kVG8odC5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKTt0Lmdob3N0JiZ0Lmdob3N0LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6dC5zaXplLmhlaWdodCx3aWR0aDp0LnNpemUud2lkdGh9KX0sc3RvcDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpO3QuZ2hvc3QmJnQuaGVscGVyJiZ0LmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQodC5naG9zdC5nZXQoMCkpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ3JpZCIse3Jlc2l6ZTpmdW5jdGlvbigpe3ZhciB0LGk9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIikscz1pLm9wdGlvbnMsbj1pLnNpemUsYT1pLm9yaWdpbmFsU2l6ZSxvPWkub3JpZ2luYWxQb3NpdGlvbixyPWkuYXhpcyxoPSJudW1iZXIiPT10eXBlb2Ygcy5ncmlkP1tzLmdyaWQscy5ncmlkXTpzLmdyaWQsbD1oWzBdfHwxLHU9aFsxXXx8MSxkPU1hdGgucm91bmQoKG4ud2lkdGgtYS53aWR0aCkvbCkqbCxjPU1hdGgucm91bmQoKG4uaGVpZ2h0LWEuaGVpZ2h0KS91KSp1LHA9YS53aWR0aCtkLGY9YS5oZWlnaHQrYyxtPXMubWF4V2lkdGgmJnA+cy5tYXhXaWR0aCxnPXMubWF4SGVpZ2h0JiZmPnMubWF4SGVpZ2h0LHY9cy5taW5XaWR0aCYmcy5taW5XaWR0aD5wLHk9cy5taW5IZWlnaHQmJnMubWluSGVpZ2h0PmY7cy5ncmlkPWgsdiYmKHArPWwpLHkmJihmKz11KSxtJiYocC09bCksZyYmKGYtPXUpLC9eKHNlfHN8ZSkkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYpOi9eKG5lKSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1vLnRvcC1jKTovXihzdykkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi5sZWZ0PW8ubGVmdC1kKTooKDA+PWYtdXx8MD49cC1sKSYmKHQ9aS5fZ2V0UGFkZGluZ1BsdXNCb3JkZXJEaW1lbnNpb25zKHRoaXMpKSxmLXU+MD8oaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPW8udG9wLWMpOihmPXUtdC5oZWlnaHQsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPW8udG9wK2EuaGVpZ2h0LWYpLHAtbD4wPyhpLnNpemUud2lkdGg9cCxpLnBvc2l0aW9uLmxlZnQ9by5sZWZ0LWQpOihwPWwtdC53aWR0aCxpLnNpemUud2lkdGg9cCxpLnBvc2l0aW9uLmxlZnQ9by5sZWZ0K2Eud2lkdGgtcCkpfX0pLGUudWkucmVzaXphYmxlLGUud2lkZ2V0KCJ1aS5kaWFsb2ciLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvT3BlbjohMCxidXR0b25zOltdLGNsb3NlT25Fc2NhcGU6ITAsY2xvc2VUZXh0OiJDbG9zZSIsZGlhbG9nQ2xhc3M6IiIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6ImF1dG8iLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjE1MCxtaW5XaWR0aDoxNTAsbW9kYWw6ITEscG9zaXRpb246e215OiJjZW50ZXIiLGF0OiJjZW50ZXIiLG9mOndpbmRvdyxjb2xsaXNpb246ImZpdCIsdXNpbmc6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0aGlzKS5jc3ModCkub2Zmc2V0KCkudG9wOzA+aSYmZSh0aGlzKS5jc3MoInRvcCIsdC50b3AtaSl9fSxyZXNpemFibGU6ITAsc2hvdzpudWxsLHRpdGxlOm51bGwsd2lkdGg6MzAwLGJlZm9yZUNsb3NlOm51bGwsY2xvc2U6bnVsbCxkcmFnOm51bGwsZHJhZ1N0YXJ0Om51bGwsZHJhZ1N0b3A6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxyZXNpemU6bnVsbCxyZXNpemVTdGFydDpudWxsLHJlc2l6ZVN0b3A6bnVsbH0sc2l6ZVJlbGF0ZWRPcHRpb25zOntidXR0b25zOiEwLGhlaWdodDohMCxtYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwLHdpZHRoOiEwfSxyZXNpemFibGVSZWxhdGVkT3B0aW9uczp7bWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxDc3M9e2Rpc3BsYXk6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmRpc3BsYXksd2lkdGg6dGhpcy5lbGVtZW50WzBdLnN0eWxlLndpZHRoLG1pbkhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWluSGVpZ2h0LG1heEhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWF4SGVpZ2h0LGhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUuaGVpZ2h0fSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e3BhcmVudDp0aGlzLmVsZW1lbnQucGFyZW50KCksaW5kZXg6dGhpcy5lbGVtZW50LnBhcmVudCgpLmNoaWxkcmVuKCkuaW5kZXgodGhpcy5lbGVtZW50KX0sdGhpcy5vcmlnaW5hbFRpdGxlPXRoaXMuZWxlbWVudC5hdHRyKCJ0aXRsZSIpLHRoaXMub3B0aW9ucy50aXRsZT10aGlzLm9wdGlvbnMudGl0bGV8fHRoaXMub3JpZ2luYWxUaXRsZSx0aGlzLl9jcmVhdGVXcmFwcGVyKCksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKCJ0aXRsZSIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHRoaXMuX2NyZWF0ZVRpdGxlYmFyKCksdGhpcy5fY3JlYXRlQnV0dG9uUGFuZSgpLHRoaXMub3B0aW9ucy5kcmFnZ2FibGUmJmUuZm4uZHJhZ2dhYmxlJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCksdGhpcy5vcHRpb25zLnJlc2l6YWJsZSYmZS5mbi5yZXNpemFibGUmJnRoaXMuX21ha2VSZXNpemFibGUoKSx0aGlzLl9pc09wZW49ITEsdGhpcy5fdHJhY2tGb2N1cygpfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5hdXRvT3BlbiYmdGhpcy5vcGVuKCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gdCYmKHQuanF1ZXJ5fHx0Lm5vZGVUeXBlKT9lKHQpOnRoaXMuZG9jdW1lbnQuZmluZCh0fHwiYm9keSIpLmVxKDApfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCksdGhpcy5lbGVtZW50LnJlbW92ZVVuaXF1ZUlkKCkucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1jb250ZW50IHVpLXdpZGdldC1jb250ZW50IikuY3NzKHRoaXMub3JpZ2luYWxDc3MpLmRldGFjaCgpLHRoaXMudWlEaWFsb2cuc3RvcCghMCwhMCkucmVtb3ZlKCksdGhpcy5vcmlnaW5hbFRpdGxlJiZ0aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiLHRoaXMub3JpZ2luYWxUaXRsZSksZT10LnBhcmVudC5jaGlsZHJlbigpLmVxKHQuaW5kZXgpLGUubGVuZ3RoJiZlWzBdIT09dGhpcy5lbGVtZW50WzBdP2UuYmVmb3JlKHRoaXMuZWxlbWVudCk6dC5wYXJlbnQuYXBwZW5kKHRoaXMuZWxlbWVudCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpRGlhbG9nfSxkaXNhYmxlOmUubm9vcCxlbmFibGU6ZS5ub29wLGNsb3NlOmZ1bmN0aW9uKHQpe3ZhciBpLHM9dGhpcztpZih0aGlzLl9pc09wZW4mJnRoaXMuX3RyaWdnZXIoImJlZm9yZUNsb3NlIix0KSE9PSExKXtpZih0aGlzLl9pc09wZW49ITEsdGhpcy5fZm9jdXNlZEVsZW1lbnQ9bnVsbCx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpLCF0aGlzLm9wZW5lci5maWx0ZXIoIjpmb2N1c2FibGUiKS5mb2N1cygpLmxlbmd0aCl0cnl7aT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQsaSYmImJvZHkiIT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZlKGkpLmJsdXIoKX1jYXRjaChuKXt9dGhpcy5faGlkZSh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7cy5fdHJpZ2dlcigiY2xvc2UiLHQpfSl9fSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNPcGVufSxtb3ZlVG9Ub3A6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlVG9Ub3AoKX0sX21vdmVUb1RvcDpmdW5jdGlvbih0LGkpe3ZhciBzPSExLG49dGhpcy51aURpYWxvZy5zaWJsaW5ncygiLnVpLWZyb250OnZpc2libGUiKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4rZSh0aGlzKS5jc3MoInotaW5kZXgiKX0pLmdldCgpLGE9TWF0aC5tYXguYXBwbHkobnVsbCxuKTtyZXR1cm4gYT49K3RoaXMudWlEaWFsb2cuY3NzKCJ6LWluZGV4IikmJih0aGlzLnVpRGlhbG9nLmNzcygiei1pbmRleCIsYSsxKSxzPSEwKSxzJiYhaSYmdGhpcy5fdHJpZ2dlcigiZm9jdXMiLHQpLHN9LG9wZW46ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9pc09wZW4/KHRoaXMuX21vdmVUb1RvcCgpJiZ0aGlzLl9mb2N1c1RhYmJhYmxlKCksdm9pZCAwKToodGhpcy5faXNPcGVuPSEwLHRoaXMub3BlbmVyPWUodGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KSx0aGlzLl9zaXplKCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9jcmVhdGVPdmVybGF5KCksdGhpcy5fbW92ZVRvVG9wKG51bGwsITApLHRoaXMub3ZlcmxheSYmdGhpcy5vdmVybGF5LmNzcygiei1pbmRleCIsdGhpcy51aURpYWxvZy5jc3MoInotaW5kZXgiKS0xKSx0aGlzLl9zaG93KHRoaXMudWlEaWFsb2csdGhpcy5vcHRpb25zLnNob3csZnVuY3Rpb24oKXt0Ll9mb2N1c1RhYmJhYmxlKCksdC5fdHJpZ2dlcigiZm9jdXMiKX0pLHRoaXMuX21ha2VGb2N1c1RhcmdldCgpLHRoaXMuX3RyaWdnZXIoIm9wZW4iKSx2b2lkIDApfSxfZm9jdXNUYWJiYWJsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRFbGVtZW50O2V8fChlPXRoaXMuZWxlbWVudC5maW5kKCJbYXV0b2ZvY3VzXSIpKSxlLmxlbmd0aHx8KGU9dGhpcy5lbGVtZW50LmZpbmQoIjp0YWJiYWJsZSIpKSxlLmxlbmd0aHx8KGU9dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZCgiOnRhYmJhYmxlIikpLGUubGVuZ3RofHwoZT10aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5maWx0ZXIoIjp0YWJiYWJsZSIpKSxlLmxlbmd0aHx8KGU9dGhpcy51aURpYWxvZyksZS5lcSgwKS5mb2N1cygpfSxfa2VlcEZvY3VzOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGkoKXt2YXIgdD10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQsaT10aGlzLnVpRGlhbG9nWzBdPT09dHx8ZS5jb250YWlucyh0aGlzLnVpRGlhbG9nWzBdLHQpO2l8fHRoaXMuX2ZvY3VzVGFiYmFibGUoKX10LnByZXZlbnREZWZhdWx0KCksaS5jYWxsKHRoaXMpLHRoaXMuX2RlbGF5KGkpfSxfY3JlYXRlV3JhcHBlcjpmdW5jdGlvbigpe3RoaXMudWlEaWFsb2c9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLWZyb250ICIrdGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5oaWRlKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZToiZGlhbG9nIn0pLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMudWlEaWFsb2cse2tleWRvd246ZnVuY3Rpb24odCl7aWYodGhpcy5vcHRpb25zLmNsb3NlT25Fc2NhcGUmJiF0LmlzRGVmYXVsdFByZXZlbnRlZCgpJiZ0LmtleUNvZGUmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FU0NBUEUpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHQpLHZvaWQgMDsNCmlmKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5UQUImJiF0LmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgaT10aGlzLnVpRGlhbG9nLmZpbmQoIjp0YWJiYWJsZSIpLHM9aS5maWx0ZXIoIjpmaXJzdCIpLG49aS5maWx0ZXIoIjpsYXN0Iik7dC50YXJnZXQhPT1uWzBdJiZ0LnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fHQuc2hpZnRLZXk/dC50YXJnZXQhPT1zWzBdJiZ0LnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fCF0LnNoaWZ0S2V5fHwodGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtuLmZvY3VzKCl9KSx0LnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9kZWxheShmdW5jdGlvbigpe3MuZm9jdXMoKX0pLHQucHJldmVudERlZmF1bHQoKSl9fSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7dGhpcy5fbW92ZVRvVG9wKGUpJiZ0aGlzLl9mb2N1c1RhYmJhYmxlKCl9fSksdGhpcy5lbGVtZW50LmZpbmQoIlthcmlhLWRlc2NyaWJlZGJ5XSIpLmxlbmd0aHx8dGhpcy51aURpYWxvZy5hdHRyKHsiYXJpYS1kZXNjcmliZWRieSI6dGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cigiaWQiKX0pfSxfY3JlYXRlVGl0bGViYXI6ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLnVpRGlhbG9nVGl0bGViYXI9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlYmFyIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCB1aS1oZWxwZXItY2xlYXJmaXgiKS5wcmVwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyLHttb3VzZWRvd246ZnVuY3Rpb24odCl7ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpfHx0aGlzLnVpRGlhbG9nLmZvY3VzKCl9fSksdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2U9ZSgiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPiIpLmJ1dHRvbih7bGFiZWw6dGhpcy5vcHRpb25zLmNsb3NlVGV4dCxpY29uczp7cHJpbWFyeToidWktaWNvbi1jbG9zZXRoaWNrIn0sdGV4dDohMX0pLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLHtjbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZShlKX19KSx0PWUoIjxzcGFuPiIpLnVuaXF1ZUlkKCkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZSIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX3RpdGxlKHQpLHRoaXMudWlEaWFsb2cuYXR0cih7ImFyaWEtbGFiZWxsZWRieSI6dC5hdHRyKCJpZCIpfSl9LF90aXRsZTpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMudGl0bGV8fGUuaHRtbCgiJiMxNjA7IiksZS50ZXh0KHRoaXMub3B0aW9ucy50aXRsZSl9LF9jcmVhdGVCdXR0b25QYW5lOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IiksdGhpcy51aUJ1dHRvblNldD1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9uc2V0IikuYXBwZW5kVG8odGhpcy51aURpYWxvZ0J1dHRvblBhbmUpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKX0sX2NyZWF0ZUJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zLmJ1dHRvbnM7cmV0dXJuIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSxlLmlzRW1wdHlPYmplY3QoaSl8fGUuaXNBcnJheShpKSYmIWkubGVuZ3RoPyh0aGlzLnVpRGlhbG9nLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpLHZvaWQgMCk6KGUuZWFjaChpLGZ1bmN0aW9uKGkscyl7dmFyIG4sYTtzPWUuaXNGdW5jdGlvbihzKT97Y2xpY2s6cyx0ZXh0Oml9OnMscz1lLmV4dGVuZCh7dHlwZToiYnV0dG9uIn0scyksbj1zLmNsaWNrLHMuY2xpY2s9ZnVuY3Rpb24oKXtuLmFwcGx5KHQuZWxlbWVudFswXSxhcmd1bWVudHMpfSxhPXtpY29uczpzLmljb25zLHRleHQ6cy5zaG93VGV4dH0sZGVsZXRlIHMuaWNvbnMsZGVsZXRlIHMuc2hvd1RleHQsZSgiPGJ1dHRvbj48L2J1dHRvbj4iLHMpLmJ1dHRvbihhKS5hcHBlbmRUbyh0LnVpQnV0dG9uU2V0KX0pLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8odGhpcy51aURpYWxvZyksdm9pZCAwKX0sX21ha2VEcmFnZ2FibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3JldHVybntwb3NpdGlvbjplLnBvc2l0aW9uLG9mZnNldDplLm9mZnNldH19dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9uczt0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQsIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiLGhhbmRsZToiLnVpLWRpYWxvZy10aXRsZWJhciIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixzdGFydDpmdW5jdGlvbihzLG4pe2UodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcigiZHJhZ1N0YXJ0IixzLHQobikpfSxkcmFnOmZ1bmN0aW9uKGUscyl7aS5fdHJpZ2dlcigiZHJhZyIsZSx0KHMpKX0sc3RvcDpmdW5jdGlvbihuLGEpe3ZhciBvPWEub2Zmc2V0LmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCkscj1hLm9mZnNldC50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtzLnBvc2l0aW9uPXtteToibGVmdCB0b3AiLGF0OiJsZWZ0Iisobz49MD8iKyI6IiIpK28rIiAiKyJ0b3AiKyhyPj0wPyIrIjoiIikrcixvZjppLndpbmRvd30sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoImRyYWdTdG9wIixuLHQoYSkpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246ZS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTplLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjplLnBvc2l0aW9uLHNpemU6ZS5zaXplfX12YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zLG49cy5yZXNpemFibGUsYT10aGlzLnVpRGlhbG9nLmNzcygicG9zaXRpb24iKSxvPSJzdHJpbmciPT10eXBlb2Ygbj9uOiJuLGUscyx3LHNlLHN3LG5lLG53Ijt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsYWxzb1Jlc2l6ZTp0aGlzLmVsZW1lbnQsbWF4V2lkdGg6cy5tYXhXaWR0aCxtYXhIZWlnaHQ6cy5tYXhIZWlnaHQsbWluV2lkdGg6cy5taW5XaWR0aCxtaW5IZWlnaHQ6dGhpcy5fbWluSGVpZ2h0KCksaGFuZGxlczpvLHN0YXJ0OmZ1bmN0aW9uKHMsbil7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKCJyZXNpemVTdGFydCIscyx0KG4pKX0scmVzaXplOmZ1bmN0aW9uKGUscyl7aS5fdHJpZ2dlcigicmVzaXplIixlLHQocykpfSxzdG9wOmZ1bmN0aW9uKG4sYSl7dmFyIG89aS51aURpYWxvZy5vZmZzZXQoKSxyPW8ubGVmdC1pLmRvY3VtZW50LnNjcm9sbExlZnQoKSxoPW8udG9wLWkuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7cy5oZWlnaHQ9aS51aURpYWxvZy5oZWlnaHQoKSxzLndpZHRoPWkudWlEaWFsb2cud2lkdGgoKSxzLnBvc2l0aW9uPXtteToibGVmdCB0b3AiLGF0OiJsZWZ0Iisocj49MD8iKyI6IiIpK3IrIiAiKyJ0b3AiKyhoPj0wPyIrIjoiIikraCxvZjppLndpbmRvd30sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLG4sdChhKSl9fSkuY3NzKCJwb3NpdGlvbiIsYSl9LF90cmFja0ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fb24odGhpcy53aWRnZXQoKSx7Zm9jdXNpbjpmdW5jdGlvbih0KXt0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl9mb2N1c2VkRWxlbWVudD1lKHQudGFyZ2V0KX19KX0sX21ha2VGb2N1c1RhcmdldDpmdW5jdGlvbigpe3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCkudW5zaGlmdCh0aGlzKX0sX3VudHJhY2tJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCksaT1lLmluQXJyYXkodGhpcyx0KTstMSE9PWkmJnQuc3BsaWNlKGksMSl9LF90cmFja2luZ0luc3RhbmNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLWluc3RhbmNlcyIpO3JldHVybiBlfHwoZT1bXSx0aGlzLmRvY3VtZW50LmRhdGEoInVpLWRpYWxvZy1pbnN0YW5jZXMiLGUpKSxlfSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiJhdXRvIj09PWUuaGVpZ2h0P2UubWluSGVpZ2h0Ok1hdGgubWluKGUubWluSGVpZ2h0LGUuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKTtlfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHRoaXMub3B0aW9ucy5wb3NpdGlvbiksZXx8dGhpcy51aURpYWxvZy5oaWRlKCl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz0hMSxuPXt9O2UuZWFjaCh0LGZ1bmN0aW9uKGUsdCl7aS5fc2V0T3B0aW9uKGUsdCksZSBpbiBpLnNpemVSZWxhdGVkT3B0aW9ucyYmKHM9ITApLGUgaW4gaS5yZXNpemFibGVSZWxhdGVkT3B0aW9ucyYmKG5bZV09dCl9KSxzJiYodGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCkpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIsbil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dGhpcy51aURpYWxvZzsiZGlhbG9nQ2xhc3MiPT09ZSYmbi5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MpLmFkZENsYXNzKHQpLCJkaXNhYmxlZCIhPT1lJiYodGhpcy5fc3VwZXIoZSx0KSwiYXBwZW5kVG8iPT09ZSYmdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiYnV0dG9ucyI9PT1lJiZ0aGlzLl9jcmVhdGVCdXR0b25zKCksImNsb3NlVGV4dCI9PT1lJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOiIiK3R9KSwiZHJhZ2dhYmxlIj09PWUmJihpPW4uaXMoIjpkYXRhKHVpLWRyYWdnYWJsZSkiKSxpJiYhdCYmbi5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhaSYmdCYmdGhpcy5fbWFrZURyYWdnYWJsZSgpKSwicG9zaXRpb24iPT09ZSYmdGhpcy5fcG9zaXRpb24oKSwicmVzaXphYmxlIj09PWUmJihzPW4uaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSxzJiYhdCYmbi5yZXNpemFibGUoImRlc3Ryb3kiKSxzJiYic3RyaW5nIj09dHlwZW9mIHQmJm4ucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIix0KSxzfHx0PT09ITF8fHRoaXMuX21ha2VSZXNpemFibGUoKSksInRpdGxlIj09PWUmJnRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKCIudWktZGlhbG9nLXRpdGxlIikpKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgZSx0LGkscz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxtYXhIZWlnaHQ6Im5vbmUiLGhlaWdodDowfSkscy5taW5XaWR0aD5zLndpZHRoJiYocy53aWR0aD1zLm1pbldpZHRoKSxlPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6ImF1dG8iLHdpZHRoOnMud2lkdGh9KS5vdXRlckhlaWdodCgpLHQ9TWF0aC5tYXgoMCxzLm1pbkhlaWdodC1lKSxpPSJudW1iZXIiPT10eXBlb2Ygcy5tYXhIZWlnaHQ/TWF0aC5tYXgoMCxzLm1heEhlaWdodC1lKToibm9uZSIsImF1dG8iPT09cy5oZWlnaHQ/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0OnQsbWF4SGVpZ2h0OmksaGVpZ2h0OiJhdXRvIn0pOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoMCxzLmhlaWdodC1lKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZCgiaWZyYW1lIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKX0pLmFwcGVuZFRvKHQucGFyZW50KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2FsbG93SW50ZXJhY3Rpb246ZnVuY3Rpb24odCl7cmV0dXJuIGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1kaWFsb2ciKS5sZW5ndGg/ITA6ISFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGF0ZXBpY2tlciIpLmxlbmd0aH0sX2NyZWF0ZU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwpe3ZhciB0PSEwO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dD0hMX0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIil8fHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dHx8dGhpcy5fYWxsb3dJbnRlcmFjdGlvbihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWzBdLl9mb2N1c1RhYmJhYmxlKCkpfX0pLHRoaXMub3ZlcmxheT1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMub3ZlcmxheSx7bW91c2Vkb3duOiJfa2VlcEZvY3VzIn0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiwodGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKXx8MCkrMSl9fSxfZGVzdHJveU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwmJnRoaXMub3ZlcmxheSl7dmFyIGU9dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKS0xO2U/dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiLGUpOnRoaXMuZG9jdW1lbnQudW5iaW5kKCJmb2N1c2luIikucmVtb3ZlRGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiksdGhpcy5vdmVybGF5LnJlbW92ZSgpLHRoaXMub3ZlcmxheT1udWxsfX19KSxlLndpZGdldCgidWkuZHJvcHBhYmxlIix7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoiZHJvcCIsb3B0aW9uczp7YWNjZXB0OiIqIixhY3RpdmVDbGFzczohMSxhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxob3ZlckNsYXNzOiExLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCIsYWN0aXZhdGU6bnVsbCxkZWFjdGl2YXRlOm51bGwsZHJvcDpudWxsLG91dDpudWxsLG92ZXI6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0LGk9dGhpcy5vcHRpb25zLHM9aS5hY2NlcHQ7dGhpcy5pc292ZXI9ITEsdGhpcy5pc291dD0hMCx0aGlzLmFjY2VwdD1lLmlzRnVuY3Rpb24ocyk/czpmdW5jdGlvbihlKXtyZXR1cm4gZS5pcyhzKX0sdGhpcy5wcm9wb3J0aW9ucz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWFyZ3VtZW50c1swXSx2b2lkIDApOnQ/dDp0PXt3aWR0aDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OnRoaXMuZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9fSx0aGlzLl9hZGRUb01hbmFnZXIoaS5zY29wZSksaS5hZGRDbGFzc2VzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyb3BwYWJsZSIpfSxfYWRkVG9NYW5hZ2VyOmZ1bmN0aW9uKHQpe2UudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdF09ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0XXx8W10sZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0XS5wdXNoKHRoaXMpfSxfc3BsaWNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO2UubGVuZ3RoPnQ7dCsrKWVbdF09PT10aGlzJiZlLnNwbGljZSh0LDEpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciB0PWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UodCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcm9wcGFibGUgdWktZHJvcHBhYmxlLWRpc2FibGVkIil9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxpKXtpZigiYWNjZXB0Ij09PXQpdGhpcy5hY2NlcHQ9ZS5pc0Z1bmN0aW9uKGkpP2k6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXMoaSl9O2Vsc2UgaWYoInNjb3BlIj09PXQpe3ZhciBzPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UocyksdGhpcy5fYWRkVG9NYW5hZ2VyKGkpfXRoaXMuX3N1cGVyKHQsaSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgaT1lLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksaSYmdGhpcy5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy51aShpKSl9LF9kZWFjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBpPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxpJiZ0aGlzLl90cmlnZ2VyKCJkZWFjdGl2YXRlIix0LHRoaXMudWkoaSkpfSxfb3ZlcjpmdW5jdGlvbih0KXt2YXIgaT1lLnVpLmRkbWFuYWdlci5jdXJyZW50O2kmJihpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLnVpKGkpKSl9LF9vdXQ6ZnVuY3Rpb24odCl7dmFyIGk9ZS51aS5kZG1hbmFnZXIuY3VycmVudDtpJiYoaS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KVswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0saS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoIm91dCIsdCx0aGlzLnVpKGkpKSl9LF9kcm9wOmZ1bmN0aW9uKHQsaSl7dmFyIHM9aXx8ZS51aS5kZG1hbmFnZXIuY3VycmVudCxuPSExO3JldHVybiBzJiYocy5jdXJyZW50SXRlbXx8cy5lbGVtZW50KVswXSE9PXRoaXMuZWxlbWVudFswXT8odGhpcy5lbGVtZW50LmZpbmQoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5ub3QoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKS5kcm9wcGFibGUoImluc3RhbmNlIik7cmV0dXJuIGkub3B0aW9ucy5ncmVlZHkmJiFpLm9wdGlvbnMuZGlzYWJsZWQmJmkub3B0aW9ucy5zY29wZT09PXMub3B0aW9ucy5zY29wZSYmaS5hY2NlcHQuY2FsbChpLmVsZW1lbnRbMF0scy5jdXJyZW50SXRlbXx8cy5lbGVtZW50KSYmZS51aS5pbnRlcnNlY3QocyxlLmV4dGVuZChpLHtvZmZzZXQ6aS5lbGVtZW50Lm9mZnNldCgpfSksaS5vcHRpb25zLnRvbGVyYW5jZSx0KT8obj0hMCwhMSk6dm9pZCAwfSksbj8hMTp0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpPyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoImRyb3AiLHQsdGhpcy51aShzKSksdGhpcy5lbGVtZW50KTohMSk6ITF9LHVpOmZ1bmN0aW9uKGUpe3JldHVybntkcmFnZ2FibGU6ZS5jdXJyZW50SXRlbXx8ZS5lbGVtZW50LGhlbHBlcjplLmhlbHBlcixwb3NpdGlvbjplLnBvc2l0aW9uLG9mZnNldDplLnBvc2l0aW9uQWJzfX19KSxlLnVpLmludGVyc2VjdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LGkpe3JldHVybiBlPj10JiZ0K2k+ZX1yZXR1cm4gZnVuY3Rpb24odCxpLHMsbil7aWYoIWkub2Zmc2V0KXJldHVybiExO3ZhciBhPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS5sZWZ0K3QubWFyZ2lucy5sZWZ0LG89KHQucG9zaXRpb25BYnN8fHQucG9zaXRpb24uYWJzb2x1dGUpLnRvcCt0Lm1hcmdpbnMudG9wLHI9YSt0LmhlbHBlclByb3BvcnRpb25zLndpZHRoLGg9byt0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsPWkub2Zmc2V0LmxlZnQsdT1pLm9mZnNldC50b3AsZD1sK2kucHJvcG9ydGlvbnMoKS53aWR0aCxjPXUraS5wcm9wb3J0aW9ucygpLmhlaWdodDtzd2l0Y2gocyl7Y2FzZSJmaXQiOnJldHVybiBhPj1sJiZkPj1yJiZvPj11JiZjPj1oO2Nhc2UiaW50ZXJzZWN0IjpyZXR1cm4gYSt0LmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI+bCYmZD5yLXQuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmbyt0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPnUmJmM+aC10LmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yO2Nhc2UicG9pbnRlciI6cmV0dXJuIGUobi5wYWdlWSx1LGkucHJvcG9ydGlvbnMoKS5oZWlnaHQpJiZlKG4ucGFnZVgsbCxpLnByb3BvcnRpb25zKCkud2lkdGgpO2Nhc2UidG91Y2giOnJldHVybihvPj11JiZjPj1vfHxoPj11JiZjPj1ofHx1Pm8mJmg+YykmJihhPj1sJiZkPj1hfHxyPj1sJiZkPj1yfHxsPmEmJnI+ZCk7ZGVmYXVsdDpyZXR1cm4hMX19fSgpLGUudWkuZGRtYW5hZ2VyPXtjdXJyZW50Om51bGwsZHJvcHBhYmxlczp7ImRlZmF1bHQiOltdfSxwcmVwYXJlT2Zmc2V0czpmdW5jdGlvbih0LGkpe3ZhciBzLG4sYT1lLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Qub3B0aW9ucy5zY29wZV18fFtdLG89aT9pLnR5cGU6bnVsbCxyPSh0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpLmZpbmQoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5hZGRCYWNrKCk7ZTpmb3Iocz0wO2EubGVuZ3RoPnM7cysrKWlmKCEoYVtzXS5vcHRpb25zLmRpc2FibGVkfHx0JiYhYVtzXS5hY2NlcHQuY2FsbChhW3NdLmVsZW1lbnRbMF0sdC5jdXJyZW50SXRlbXx8dC5lbGVtZW50KSkpe2ZvcihuPTA7ci5sZW5ndGg+bjtuKyspaWYocltuXT09PWFbc10uZWxlbWVudFswXSl7YVtzXS5wcm9wb3J0aW9ucygpLmhlaWdodD0wO2NvbnRpbnVlIGV9YVtzXS52aXNpYmxlPSJub25lIiE9PWFbc10uZWxlbWVudC5jc3MoImRpc3BsYXkiKSxhW3NdLnZpc2libGUmJigibW91c2Vkb3duIj09PW8mJmFbc10uX2FjdGl2YXRlLmNhbGwoYVtzXSxpKSxhW3NdLm9mZnNldD1hW3NdLmVsZW1lbnQub2Zmc2V0KCksYVtzXS5wcm9wb3J0aW9ucyh7d2lkdGg6YVtzXS5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDphW3NdLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSkpfX0sZHJvcDpmdW5jdGlvbih0LGkpe3ZhciBzPSExO3JldHVybiBlLmVhY2goKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10pLnNsaWNlKCksZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMmJighdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJmUudWkuaW50ZXJzZWN0KHQsdGhpcyx0aGlzLm9wdGlvbnMudG9sZXJhbmNlLGkpJiYocz10aGlzLl9kcm9wLmNhbGwodGhpcyxpKXx8cyksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSx0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpJiYodGhpcy5pc291dD0hMCx0aGlzLmlzb3Zlcj0hMSx0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcyxpKSkpfSksc30sZHJhZ1N0YXJ0OmZ1bmN0aW9uKHQsaSl7dC5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLmJpbmQoInNjcm9sbC5kcm9wcGFibGUiLGZ1bmN0aW9uKCl7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fGUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsaSl9KX0sZHJhZzpmdW5jdGlvbih0LGkpe3Qub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LGkpLGUuZWFjaChlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Qub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmIXRoaXMuZ3JlZWR5Q2hpbGQmJnRoaXMudmlzaWJsZSl7dmFyIHMsbixhLG89ZS51aS5pbnRlcnNlY3QodCx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UsaSkscj0hbyYmdGhpcy5pc292ZXI/Imlzb3V0IjpvJiYhdGhpcy5pc292ZXI/Imlzb3ZlciI6bnVsbDtyJiYodGhpcy5vcHRpb25zLmdyZWVkeSYmKG49dGhpcy5vcHRpb25zLnNjb3BlLGE9dGhpcy5lbGVtZW50LnBhcmVudHMoIjpkYXRhKHVpLWRyb3BwYWJsZSkiKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5kcm9wcGFibGUoImluc3RhbmNlIikub3B0aW9ucy5zY29wZT09PW59KSxhLmxlbmd0aCYmKHM9ZShhWzBdKS5kcm9wcGFibGUoImluc3RhbmNlIikscy5ncmVlZHlDaGlsZD0iaXNvdmVyIj09PXIpKSxzJiYiaXNvdmVyIj09PXImJihzLmlzb3Zlcj0hMSxzLmlzb3V0PSEwLHMuX291dC5jYWxsKHMsaSkpLHRoaXNbcl09ITAsdGhpc1siaXNvdXQiPT09cj8iaXNvdmVyIjoiaXNvdXQiXT0hMSx0aGlzWyJpc292ZXIiPT09cj8iX292ZXIiOiJfb3V0Il0uY2FsbCh0aGlzLGkpLHMmJiJpc291dCI9PT1yJiYocy5pc291dD0hMSxzLmlzb3Zlcj0hMCxzLl9vdmVyLmNhbGwocyxpKSkpfX0pfSxkcmFnU3RvcDpmdW5jdGlvbih0LGkpe3QuZWxlbWVudC5wYXJlbnRzVW50aWwoImJvZHkiKS51bmJpbmQoInNjcm9sbC5kcm9wcGFibGUiKSx0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxpKX19LGUudWkuZHJvcHBhYmxlO3ZhciB5PSJ1aS1lZmZlY3RzLSIsYj1lO2UuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoZSx0LGkpe3ZhciBzPWRbdC50eXBlXXx8e307cmV0dXJuIG51bGw9PWU/aXx8IXQuZGVmP251bGw6dC5kZWY6KGU9cy5mbG9vcj9+fmU6cGFyc2VGbG9hdChlKSxpc05hTihlKT90LmRlZjpzLm1vZD8oZStzLm1vZCklcy5tb2Q6MD5lPzA6ZT5zLm1heD9zLm1heDplKX1mdW5jdGlvbiBzKGkpe3ZhciBzPWwoKSxuPXMuX3JnYmE9W107cmV0dXJuIGk9aS50b0xvd2VyQ2FzZSgpLGYoaCxmdW5jdGlvbihlLGEpe3ZhciBvLHI9YS5yZS5leGVjKGkpLGg9ciYmYS5wYXJzZShyKSxsPWEuc3BhY2V8fCJyZ2JhIjtyZXR1cm4gaD8obz1zW2xdKGgpLHNbdVtsXS5jYWNoZV09b1t1W2xdLmNhY2hlXSxuPXMuX3JnYmE9by5fcmdiYSwhMSk6dH0pLG4ubGVuZ3RoPygiMCwwLDAsMCI9PT1uLmpvaW4oKSYmZS5leHRlbmQobixhLnRyYW5zcGFyZW50KSxzKTphW2ldfWZ1bmN0aW9uIG4oZSx0LGkpe3JldHVybiBpPShpKzEpJTEsMT42Kmk/ZSs2Kih0LWUpKmk6MT4yKmk/dDoyPjMqaT9lKzYqKHQtZSkqKDIvMy1pKTplfXZhciBhLG89ImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3IiLHI9L14oW1wtK10pPVxzKihcZCtcLj9cZCopLyxoPVt7cmU6L3JnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSxlWzJdLGVbM10sZVs0XV19fSx7cmU6L3JnYmE/XChccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bMi41NSplWzFdLDIuNTUqZVsyXSwyLjU1KmVbM10sZVs0XV19fSx7cmU6LyMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdLDE2KSxwYXJzZUludChlWzJdLDE2KSxwYXJzZUludChlWzNdLDE2KV19fSx7cmU6LyMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdK2VbMV0sMTYpLHBhcnNlSW50KGVbMl0rZVsyXSwxNikscGFyc2VJbnQoZVszXStlWzNdLDE2KV19fSx7cmU6L2hzbGE/XChccyooXGQrKD86XC5cZCspPylccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkPyg/OlwuXGQrKT8pXHMqKT9cKS8sc3BhY2U6ImhzbGEiLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF1dfX1dLGw9ZS5Db2xvcj1mdW5jdGlvbih0LGkscyxuKXtyZXR1cm4gbmV3IGUuQ29sb3IuZm4ucGFyc2UodCxpLHMsbil9LHU9e3JnYmE6e3Byb3BzOntyZWQ6e2lkeDowLHR5cGU6ImJ5dGUifSxncmVlbjp7aWR4OjEsdHlwZToiYnl0ZSJ9LGJsdWU6e2lkeDoyLHR5cGU6ImJ5dGUifX19LGhzbGE6e3Byb3BzOntodWU6e2lkeDowLHR5cGU6ImRlZ3JlZXMifSxzYXR1cmF0aW9uOntpZHg6MSx0eXBlOiJwZXJjZW50In0sbGlnaHRuZXNzOntpZHg6Mix0eXBlOiJwZXJjZW50In19fX0sZD17ImJ5dGUiOntmbG9vcjohMCxtYXg6MjU1fSxwZXJjZW50OnttYXg6MX0sZGVncmVlczp7bW9kOjM2MCxmbG9vcjohMH19LGM9bC5zdXBwb3J0PXt9LHA9ZSgiPHA+IilbMF0sZj1lLmVhY2g7cC5zdHlsZS5jc3NUZXh0PSJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpIixjLnJnYmE9cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZigicmdiYSIpPi0xLGYodSxmdW5jdGlvbihlLHQpe3QuY2FjaGU9Il8iK2UsdC5wcm9wcy5hbHBoYT17aWR4OjMsdHlwZToicGVyY2VudCIsZGVmOjF9fSksbC5mbj1lLmV4dGVuZChsLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24obixvLHIsaCl7aWYobj09PXQpcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7KG4uanF1ZXJ5fHxuLm5vZGVUeXBlKSYmKG49ZShuKS5jc3Mobyksbz10KTt2YXIgZD10aGlzLGM9ZS50eXBlKG4pLHA9dGhpcy5fcmdiYT1bXTtyZXR1cm4gbyE9PXQmJihuPVtuLG8scixoXSxjPSJhcnJheSIpLCJzdHJpbmciPT09Yz90aGlzLnBhcnNlKHMobil8fGEuX2RlZmF1bHQpOiJhcnJheSI9PT1jPyhmKHUucmdiYS5wcm9wcyxmdW5jdGlvbihlLHQpe3BbdC5pZHhdPWkoblt0LmlkeF0sdCl9KSx0aGlzKToib2JqZWN0Ij09PWM/KG4gaW5zdGFuY2VvZiBsP2YodSxmdW5jdGlvbihlLHQpe25bdC5jYWNoZV0mJihkW3QuY2FjaGVdPW5bdC5jYWNoZV0uc2xpY2UoKSl9KTpmKHUsZnVuY3Rpb24odCxzKXt2YXIgYT1zLmNhY2hlO2Yocy5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKCFkW2FdJiZzLnRvKXtpZigiYWxwaGEiPT09ZXx8bnVsbD09bltlXSlyZXR1cm47ZFthXT1zLnRvKGQuX3JnYmEpfWRbYV1bdC5pZHhdPWkobltlXSx0LCEwKX0pLGRbYV0mJjA+ZS5pbkFycmF5KG51bGwsZFthXS5zbGljZSgwLDMpKSYmKGRbYV1bM109MSxzLmZyb20mJihkLl9yZ2JhPXMuZnJvbShkW2FdKSkpfSksdGhpcyk6dH0saXM6ZnVuY3Rpb24oZSl7dmFyIGk9bChlKSxzPSEwLG49dGhpcztyZXR1cm4gZih1LGZ1bmN0aW9uKGUsYSl7dmFyIG8scj1pW2EuY2FjaGVdO3JldHVybiByJiYobz1uW2EuY2FjaGVdfHxhLnRvJiZhLnRvKG4uX3JnYmEpfHxbXSxmKGEucHJvcHMsZnVuY3Rpb24oZSxpKXtyZXR1cm4gbnVsbCE9cltpLmlkeF0/cz1yW2kuaWR4XT09PW9baS5pZHhdOnR9KSksc30pLHN9LF9zcGFjZTpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcztyZXR1cm4gZih1LGZ1bmN0aW9uKGkscyl7dFtzLmNhY2hlXSYmZS5wdXNoKGkpfSksZS5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBzPWwoZSksbj1zLl9zcGFjZSgpLGE9dVtuXSxvPTA9PT10aGlzLmFscGhhKCk/bCgidHJhbnNwYXJlbnQiKTp0aGlzLHI9b1thLmNhY2hlXXx8YS50byhvLl9yZ2JhKSxoPXIuc2xpY2UoKTtyZXR1cm4gcz1zW2EuY2FjaGVdLGYoYS5wcm9wcyxmdW5jdGlvbihlLG4pe3ZhciBhPW4uaWR4LG89clthXSxsPXNbYV0sdT1kW24udHlwZV18fHt9O251bGwhPT1sJiYobnVsbD09PW8/aFthXT1sOih1Lm1vZCYmKGwtbz51Lm1vZC8yP28rPXUubW9kOm8tbD51Lm1vZC8yJiYoby09dS5tb2QpKSxoW2FdPWkoKGwtbykqdCtvLG4pKSl9KSx0aGlzW25dKGgpfSxibGVuZDpmdW5jdGlvbih0KXtpZigxPT09dGhpcy5fcmdiYVszXSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpLG49bCh0KS5fcmdiYTtyZXR1cm4gbChlLm1hcChpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDEtcykqblt0XStzKmV9KSl9LHRvUmdiYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PSJyZ2JhKCIsaT1lLm1hcCh0aGlzLl9yZ2JhLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dD4yPzE6MDplfSk7cmV0dXJuIDE9PT1pWzNdJiYoaS5wb3AoKSx0PSJyZ2IoIiksdCtpLmpvaW4oKSsiKSJ9LHRvSHNsYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PSJoc2xhKCIsaT1lLm1hcCh0aGlzLmhzbGEoKSxmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lJiYoZT10PjI/MTowKSx0JiYzPnQmJihlPU1hdGgucm91bmQoMTAwKmUpKyIlIiksZX0pO3JldHVybiAxPT09aVszXSYmKGkucG9wKCksdD0iaHNsKCIpLHQraS5qb2luKCkrIikifSx0b0hleFN0cmluZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpO3JldHVybiB0JiZpLnB1c2gofn4oMjU1KnMpKSwiIyIrZS5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gZT0oZXx8MCkudG9TdHJpbmcoMTYpLDE9PT1lLmxlbmd0aD8iMCIrZTplfSkuam9pbigiIil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9yZ2JhWzNdPyJ0cmFuc3BhcmVudCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxsLmZuLnBhcnNlLnByb3RvdHlwZT1sLmZuLHUuaHNsYS50bz1mdW5jdGlvbihlKXtpZihudWxsPT1lWzBdfHxudWxsPT1lWzFdfHxudWxsPT1lWzJdKXJldHVybltudWxsLG51bGwsbnVsbCxlWzNdXTt2YXIgdCxpLHM9ZVswXS8yNTUsbj1lWzFdLzI1NSxhPWVbMl0vMjU1LG89ZVszXSxyPU1hdGgubWF4KHMsbixhKSxoPU1hdGgubWluKHMsbixhKSxsPXItaCx1PXIraCxkPS41KnU7cmV0dXJuIHQ9aD09PXI/MDpzPT09cj82MCoobi1hKS9sKzM2MDpuPT09cj82MCooYS1zKS9sKzEyMDo2MCoocy1uKS9sKzI0MCxpPTA9PT1sPzA6LjU+PWQ/bC91OmwvKDItdSksW01hdGgucm91bmQodCklMzYwLGksZCxudWxsPT1vPzE6b119LHUuaHNsYS5mcm9tPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWVbMF18fG51bGw9PWVbMV18fG51bGw9PWVbMl0pcmV0dXJuW251bGwsbnVsbCxudWxsLGVbM11dO3ZhciB0PWVbMF0vMzYwLGk9ZVsxXSxzPWVbMl0sYT1lWzNdLG89LjU+PXM/cyooMStpKTpzK2ktcyppLHI9MipzLW87cmV0dXJuW01hdGgucm91bmQoMjU1Km4ocixvLHQrMS8zKSksTWF0aC5yb3VuZCgyNTUqbihyLG8sdCkpLE1hdGgucm91bmQoMjU1Km4ocixvLHQtMS8zKSksYV19LGYodSxmdW5jdGlvbihzLG4pe3ZhciBhPW4ucHJvcHMsbz1uLmNhY2hlLGg9bi50byx1PW4uZnJvbTtsLmZuW3NdPWZ1bmN0aW9uKHMpe2lmKGgmJiF0aGlzW29dJiYodGhpc1tvXT1oKHRoaXMuX3JnYmEpKSxzPT09dClyZXR1cm4gdGhpc1tvXS5zbGljZSgpO3ZhciBuLHI9ZS50eXBlKHMpLGQ9ImFycmF5Ij09PXJ8fCJvYmplY3QiPT09cj9zOmFyZ3VtZW50cyxjPXRoaXNbb10uc2xpY2UoKTtyZXR1cm4gZihhLGZ1bmN0aW9uKGUsdCl7dmFyIHM9ZFsib2JqZWN0Ij09PXI/ZTp0LmlkeF07bnVsbD09cyYmKHM9Y1t0LmlkeF0pLGNbdC5pZHhdPWkocyx0KX0pLHU/KG49bCh1KGMpKSxuW29dPWMsbik6bChjKX0sZihhLGZ1bmN0aW9uKHQsaSl7bC5mblt0XXx8KGwuZm5bdF09ZnVuY3Rpb24obil7dmFyIGEsbz1lLnR5cGUobiksaD0iYWxwaGEiPT09dD90aGlzLl9oc2xhPyJoc2xhIjoicmdiYSI6cyxsPXRoaXNbaF0oKSx1PWxbaS5pZHhdO3JldHVybiJ1bmRlZmluZWQiPT09bz91OigiZnVuY3Rpb24iPT09byYmKG49bi5jYWxsKHRoaXMsdSksbz1lLnR5cGUobikpLG51bGw9PW4mJmkuZW1wdHk/dGhpczooInN0cmluZyI9PT1vJiYoYT1yLmV4ZWMobiksYSYmKG49dStwYXJzZUZsb2F0KGFbMl0pKigiKyI9PT1hWzFdPzE6LTEpKSksbFtpLmlkeF09bix0aGlzW2hdKGwpKSl9KX0pfSksbC5ob29rPWZ1bmN0aW9uKHQpe3ZhciBpPXQuc3BsaXQoIiAiKTtmKGksZnVuY3Rpb24odCxpKXtlLmNzc0hvb2tzW2ldPXtzZXQ6ZnVuY3Rpb24odCxuKXt2YXIgYSxvLHI9IiI7aWYoInRyYW5zcGFyZW50IiE9PW4mJigic3RyaW5nIiE9PWUudHlwZShuKXx8KGE9cyhuKSkpKXtpZihuPWwoYXx8biksIWMucmdiYSYmMSE9PW4uX3JnYmFbM10pe2ZvcihvPSJiYWNrZ3JvdW5kQ29sb3IiPT09aT90LnBhcmVudE5vZGU6dDsoIiI9PT1yfHwidHJhbnNwYXJlbnQiPT09cikmJm8mJm8uc3R5bGU7KXRyeXtyPWUuY3NzKG8sImJhY2tncm91bmRDb2xvciIpLG89by5wYXJlbnROb2RlfWNhdGNoKGgpe31uPW4uYmxlbmQociYmInRyYW5zcGFyZW50IiE9PXI/cjoiX2RlZmF1bHQiKX1uPW4udG9SZ2JhU3RyaW5nKCl9dHJ5e3Quc3R5bGVbaV09bn1jYXRjaChoKXt9fX0sZS5meC5zdGVwW2ldPWZ1bmN0aW9uKHQpe3QuY29sb3JJbml0fHwodC5zdGFydD1sKHQuZWxlbSxpKSx0LmVuZD1sKHQuZW5kKSx0LmNvbG9ySW5pdD0hMCksZS5jc3NIb29rc1tpXS5zZXQodC5lbGVtLHQuc3RhcnQudHJhbnNpdGlvbih0LmVuZCx0LnBvcykpfX0pfSxsLmhvb2sobyksZS5jc3NIb29rcy5ib3JkZXJDb2xvcj17ZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmKFsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sZnVuY3Rpb24oaSxzKXt0WyJib3JkZXIiK3MrIkNvbG9yIl09ZX0pLHR9fSxhPWUuQ29sb3IubmFtZXM9e2FxdWE6IiMwMGZmZmYiLGJsYWNrOiIjMDAwMDAwIixibHVlOiIjMDAwMGZmIixmdWNoc2lhOiIjZmYwMGZmIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsbGltZToiIzAwZmYwMCIsbWFyb29uOiIjODAwMDAwIixuYXZ5OiIjMDAwMDgwIixvbGl2ZToiIzgwODAwMCIscHVycGxlOiIjODAwMDgwIixyZWQ6IiNmZjAwMDAiLHNpbHZlcjoiI2MwYzBjMCIsdGVhbDoiIzAwODA4MCIsd2hpdGU6IiNmZmZmZmYiLHllbGxvdzoiI2ZmZmYwMCIsdHJhbnNwYXJlbnQ6W251bGwsbnVsbCxudWxsLDBdLF9kZWZhdWx0OiIjZmZmZmZmIn19KGIpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgaSxzLG49dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P3Qub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk6dC5jdXJyZW50U3R5bGUsYT17fTtpZihuJiZuLmxlbmd0aCYmblswXSYmbltuWzBdXSlmb3Iocz1uLmxlbmd0aDtzLS07KWk9bltzXSwic3RyaW5nIj09dHlwZW9mIG5baV0mJihhW2UuY2FtZWxDYXNlKGkpXT1uW2ldKTtlbHNlIGZvcihpIGluIG4pInN0cmluZyI9PXR5cGVvZiBuW2ldJiYoYVtpXT1uW2ldKTtyZXR1cm4gYX1mdW5jdGlvbiBpKHQsaSl7dmFyIHMsYSxvPXt9O2ZvcihzIGluIGkpYT1pW3NdLHRbc10hPT1hJiYobltzXXx8KGUuZnguc3RlcFtzXXx8IWlzTmFOKHBhcnNlRmxvYXQoYSkpKSYmKG9bc109YSkpO3JldHVybiBvfXZhciBzPVsiYWRkIiwicmVtb3ZlIiwidG9nZ2xlIl0sbj17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07ZS5lYWNoKFsiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyVG9wU3R5bGUiXSxmdW5jdGlvbih0LGkpe2UuZnguc3RlcFtpXT1mdW5jdGlvbihlKXsoIm5vbmUiIT09ZS5lbmQmJiFlLnNldEF0dHJ8fDE9PT1lLnBvcyYmIWUuc2V0QXR0cikmJihiLnN0eWxlKGUuZWxlbSxpLGUuZW5kKSxlLnNldEF0dHI9ITApfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlLmVmZmVjdHMuYW5pbWF0ZUNsYXNzPWZ1bmN0aW9uKG4sYSxvLHIpe3ZhciBoPWUuc3BlZWQoYSxvLHIpO3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGEsbz1lKHRoaXMpLHI9by5hdHRyKCJjbGFzcyIpfHwiIixsPWguY2hpbGRyZW4/by5maW5kKCIqIikuYWRkQmFjaygpOm87bD1sLm1hcChmdW5jdGlvbigpe3ZhciBpPWUodGhpcyk7cmV0dXJue2VsOmksc3RhcnQ6dCh0aGlzKX19KSxhPWZ1bmN0aW9uKCl7ZS5lYWNoKHMsZnVuY3Rpb24oZSx0KXtuW3RdJiZvW3QrIkNsYXNzIl0oblt0XSl9KX0sYSgpLGw9bC5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9dCh0aGlzLmVsWzBdKSx0aGlzLmRpZmY9aSh0aGlzLnN0YXJ0LHRoaXMuZW5kKSx0aGlzfSksby5hdHRyKCJjbGFzcyIsciksbD1sLm1hcChmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT1lLkRlZmVycmVkKCkscz1lLmV4dGVuZCh7fSxoLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZSh0KX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixzKSxpLnByb21pc2UoKX0pLGUud2hlbi5hcHBseShlLGwuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXthKCksZS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWw7ZS5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbihlKXt0LmNzcyhlLCIiKX0pfSksaC5jb21wbGV0ZS5jYWxsKG9bMF0pfSl9KX0sZS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMsbixhKXtyZXR1cm4gcz9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOml9LHMsbixhKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KGUuZm4uYWRkQ2xhc3MpLHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMsbixhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHtyZW1vdmU6aX0scyxuLGEpOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5yZW1vdmVDbGFzcyksdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLGEsbyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygc3x8dm9pZCAwPT09cz9uP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHM/e2FkZDppfTp7cmVtb3ZlOml9LG4sYSxvKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7dG9nZ2xlOml9LHMsbixhKX19KGUuZm4udG9nZ2xlQ2xhc3MpLHN3aXRjaENsYXNzOmZ1bmN0aW9uKHQsaSxzLG4sYSl7cmV0dXJuIGUuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aSxyZW1vdmU6dH0scyxuLGEpfX0pfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkscyxuKXtyZXR1cm4gZS5pc1BsYWluT2JqZWN0KHQpJiYoaT10LHQ9dC5lZmZlY3QpLHQ9e2VmZmVjdDp0fSxudWxsPT1pJiYoaT17fSksZS5pc0Z1bmN0aW9uKGkpJiYobj1pLHM9bnVsbCxpPXt9KSwoIm51bWJlciI9PXR5cGVvZiBpfHxlLmZ4LnNwZWVkc1tpXSkmJihuPXMscz1pLGk9e30pLGUuaXNGdW5jdGlvbihzKSYmKG49cyxzPW51bGwpLGkmJmUuZXh0ZW5kKHQsaSkscz1zfHxpLmR1cmF0aW9uLHQuZHVyYXRpb249ZS5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHM/czpzIGluIGUuZnguc3BlZWRzP2UuZnguc3BlZWRzW3NdOmUuZnguc3BlZWRzLl9kZWZhdWx0LHQuY29tcGxldGU9bnx8aS5jb21wbGV0ZSx0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIXR8fCJudW1iZXIiPT10eXBlb2YgdHx8ZS5meC5zcGVlZHNbdF0/ITA6InN0cmluZyIhPXR5cGVvZiB0fHxlLmVmZmVjdHMuZWZmZWN0W3RdP2UuaXNGdW5jdGlvbih0KT8hMDoib2JqZWN0IiE9dHlwZW9mIHR8fHQuZWZmZWN0PyExOiEwOiEwfWUuZXh0ZW5kKGUuZWZmZWN0cyx7dmVyc2lvbjoiMS4xMS40IixzYXZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPTA7dC5sZW5ndGg+aTtpKyspbnVsbCE9PXRbaV0mJmUuZGF0YSh5K3RbaV0sZVswXS5zdHlsZVt0W2ldXSl9LHJlc3RvcmU6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO2ZvcihzPTA7dC5sZW5ndGg+cztzKyspbnVsbCE9PXRbc10mJihpPWUuZGF0YSh5K3Rbc10pLHZvaWQgMD09PWkmJihpPSIiKSxlLmNzcyh0W3NdLGkpKX0sc2V0TW9kZTpmdW5jdGlvbihlLHQpe3JldHVybiJ0b2dnbGUiPT09dCYmKHQ9ZS5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSIpLHR9LGdldEJhc2VsaW5lOmZ1bmN0aW9uKGUsdCl7dmFyIGkscztzd2l0Y2goZVswXSl7Y2FzZSJ0b3AiOmk9MDticmVhaztjYXNlIm1pZGRsZSI6aT0uNTticmVhaztjYXNlImJvdHRvbSI6aT0xO2JyZWFrO2RlZmF1bHQ6aT1lWzBdL3QuaGVpZ2h0fXN3aXRjaChlWzFdKXtjYXNlImxlZnQiOnM9MDticmVhaztjYXNlImNlbnRlciI6cz0uNTticmVhaztjYXNlInJpZ2h0IjpzPTE7YnJlYWs7ZGVmYXVsdDpzPWVbMV0vdC53aWR0aH1yZXR1cm57eDpzLHk6aX19LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24odCl7aWYodC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKXJldHVybiB0LnBhcmVudCgpO3ZhciBpPXt3aWR0aDp0Lm91dGVyV2lkdGgoITApLGhlaWdodDp0Lm91dGVySGVpZ2h0KCEwKSwiZmxvYXQiOnQuY3NzKCJmbG9hdCIpfSxzPWUoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBlciIpLmNzcyh7Zm9udFNpemU6IjEwMCUiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLG1hcmdpbjowLHBhZGRpbmc6MH0pLG49e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKX0sYT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RyeXthLmlkfWNhdGNoKG8pe2E9ZG9jdW1lbnQuYm9keX1yZXR1cm4gdC53cmFwKHMpLCh0WzBdPT09YXx8ZS5jb250YWlucyh0WzBdLGEpKSYmZShhKS5mb2N1cygpLHM9dC5wYXJlbnQoKSwic3RhdGljIj09PXQuY3NzKCJwb3NpdGlvbiIpPyhzLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSkpOihlLmV4dGVuZChpLHtwb3NpdGlvbjp0LmNzcygicG9zaXRpb24iKSx6SW5kZXg6dC5jc3MoInotaW5kZXgiKX0pLGUuZWFjaChbInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCJdLGZ1bmN0aW9uKGUscyl7aVtzXT10LmNzcyhzKSxpc05hTihwYXJzZUludChpW3NdLDEwKSkmJihpW3NdPSJhdXRvIil9KSx0LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6MCxsZWZ0OjAscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byJ9KSksdC5jc3Mobikscy5jc3MoaSkuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKHQpe3ZhciBpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIHQucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKSYmKHQucGFyZW50KCkucmVwbGFjZVdpdGgodCksKHRbMF09PT1pfHxlLmNvbnRhaW5zKHRbMF0saSkpJiZlKGkpLmZvY3VzKCkpLHR9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24odCxpLHMsbil7cmV0dXJuIG49bnx8e30sZS5lYWNoKGksZnVuY3Rpb24oZSxpKXt2YXIgYT10LmNzc1VuaXQoaSk7YVswXT4wJiYobltpXT1hWzBdKnMrYVsxXSl9KSxufX0pLGUuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGkoKXtlLmlzRnVuY3Rpb24oYSkmJmEuY2FsbChuWzBdKSxlLmlzRnVuY3Rpb24odCkmJnQoKX12YXIgbj1lKHRoaXMpLGE9cy5jb21wbGV0ZSxyPXMubW9kZTsobi5pcygiOmhpZGRlbiIpPyJoaWRlIj09PXI6InNob3ciPT09cik/KG5bcl0oKSxpKCkpOm8uY2FsbChuWzBdLHMsaSl9dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1zLm1vZGUsYT1zLnF1ZXVlLG89ZS5lZmZlY3RzLmVmZmVjdFtzLmVmZmVjdF07cmV0dXJuIGUuZngub2ZmfHwhbz9uP3RoaXNbbl0ocy5kdXJhdGlvbixzLmNvbXBsZXRlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzLmNvbXBsZXRlJiZzLmNvbXBsZXRlLmNhbGwodGhpcyl9KTphPT09ITE/dGhpcy5lYWNoKGkpOnRoaXMucXVldWUoYXx8ImZ4IixpKX0sc2hvdzpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKSlyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0ic2hvdyIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfX0oZS5mbi5zaG93KSxoaWRlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPSJoaWRlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLmhpZGUpLHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKXx8ImJvb2xlYW4iPT10eXBlb2YgcylyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0idG9nZ2xlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLnRvZ2dsZSksY3NzVW5pdDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmNzcyh0KSxzPVtdO3JldHVybiBlLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oZSx0KXtpLmluZGV4T2YodCk+MCYmKHM9W3BhcnNlRmxvYXQoaSksdF0pfSksc319KX0oKSxmdW5jdGlvbigpe3ZhciB0PXt9O2UuZWFjaChbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiLCJFeHBvIl0sZnVuY3Rpb24oZSxpKXt0W2ldPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUrMil9fSksZS5leHRlbmQodCx7U2luZTpmdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLmNvcyhlKk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX0sRWxhc3RpYzpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lP2U6LU1hdGgucG93KDIsOCooZS0xKSkqTWF0aC5zaW4oKDgwKihlLTEpLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooMyplLTIpfSxCb3VuY2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9NDsoKHQ9TWF0aC5wb3coMiwtLWkpKS0xKS8xMT5lOyk7cmV0dXJuIDEvTWF0aC5wb3coNCwzLWkpLTcuNTYyNSpNYXRoLnBvdygoMyp0LTIpLzIyLWUsMil9fSksZS5lYWNoKHQsZnVuY3Rpb24odCxpKXtlLmVhc2luZ1siZWFzZUluIit0XT1pLGUuZWFzaW5nWyJlYXNlT3V0Iit0XT1mdW5jdGlvbihlKXtyZXR1cm4gMS1pKDEtZSl9LGUuZWFzaW5nWyJlYXNlSW5PdXQiK3RdPWZ1bmN0aW9uKGUpe3JldHVybi41PmU/aSgyKmUpLzI6MS1pKC0yKmUrMikvMn19KX0oKSxlLmVmZmVjdHMsZS5lZmZlY3RzLmVmZmVjdC5ibGluZD1mdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPWUodGhpcykscj0vdXB8ZG93bnx2ZXJ0aWNhbC8saD0vdXB8bGVmdHx2ZXJ0aWNhbHxob3Jpem9udGFsLyxsPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHU9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJoaWRlIiksZD10LmRpcmVjdGlvbnx8InVwIixjPXIudGVzdChkKSxwPWM/ImhlaWdodCI6IndpZHRoIixmPWM/InRvcCI6ImxlZnQiLG09aC50ZXN0KGQpLGc9e30sdj0ic2hvdyI9PT11O28ucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKT9lLmVmZmVjdHMuc2F2ZShvLnBhcmVudCgpLGwpOmUuZWZmZWN0cy5zYXZlKG8sbCksby5zaG93KCkscz1lLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksbj1zW3BdKCksYT1wYXJzZUZsb2F0KHMuY3NzKGYpKXx8MCxnW3BdPXY/bjowLG18fChvLmNzcyhjPyJib3R0b20iOiJyaWdodCIsMCkuY3NzKGM/InRvcCI6ImxlZnQiLCJhdXRvIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifSksZ1tmXT12P2E6bithKSx2JiYocy5jc3MocCwwKSxtfHxzLmNzcyhmLGErbikpLHMuYW5pbWF0ZShnLHtkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PXUmJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sbCksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LmJvdW5jZT1mdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPWUodGhpcykscj1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxoPWUuZWZmZWN0cy5zZXRNb2RlKG8sdC5tb2RlfHwiZWZmZWN0IiksbD0iaGlkZSI9PT1oLHU9InNob3ciPT09aCxkPXQuZGlyZWN0aW9ufHwidXAiLGM9dC5kaXN0YW5jZSxwPXQudGltZXN8fDUsZj0yKnArKHV8fGw/MTowKSxtPXQuZHVyYXRpb24vZixnPXQuZWFzaW5nLHY9InVwIj09PWR8fCJkb3duIj09PWQ/InRvcCI6ImxlZnQiLHk9InVwIj09PWR8fCJsZWZ0Ij09PWQsYj1vLnF1ZXVlKCksXz1iLmxlbmd0aDtmb3IoKHV8fGwpJiZyLnB1c2goIm9wYWNpdHkiKSxlLmVmZmVjdHMuc2F2ZShvLHIpLG8uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLGN8fChjPW9bInRvcCI9PT12PyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSgpLzMpLHUmJihhPXtvcGFjaXR5OjF9LGFbdl09MCxvLmNzcygib3BhY2l0eSIsMCkuY3NzKHYseT8yKi1jOjIqYykuYW5pbWF0ZShhLG0sZykpLGwmJihjLz1NYXRoLnBvdygyLHAtMSkpLGE9e30sYVt2XT0wLHM9MDtwPnM7cysrKW49e30sblt2XT0oeT8iLT0iOiIrPSIpK2Msby5hbmltYXRlKG4sbSxnKS5hbmltYXRlKGEsbSxnKSxjPWw/MipjOmMvMjtsJiYobj17b3BhY2l0eTowfSxuW3ZdPSh5PyItPSI6Iis9IikrYyxvLmFuaW1hdGUobixtLGcpKSxvLnF1ZXVlKGZ1bmN0aW9uKCl7bCYmby5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyxyKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSxpKCl9KSxfPjEmJmIuc3BsaWNlLmFwcGx5KGIsWzEsMF0uY29uY2F0KGIuc3BsaWNlKF8sZisxKSkpLG8uZGVxdWV1ZSgpfSxlLmVmZmVjdHMuZWZmZWN0LmNsaXA9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbz1lKHRoaXMpLHI9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0saD1lLmVmZmVjdHMuc2V0TW9kZShvLHQubW9kZXx8ImhpZGUiKSxsPSJzaG93Ij09PWgsdT10LmRpcmVjdGlvbnx8InZlcnRpY2FsIixkPSJ2ZXJ0aWNhbCI9PT11LGM9ZD8iaGVpZ2h0Ijoid2lkdGgiLHA9ZD8idG9wIjoibGVmdCIsZj17fTtlLmVmZmVjdHMuc2F2ZShvLHIpLG8uc2hvdygpLHM9ZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobykuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLG49IklNRyI9PT1vWzBdLnRhZ05hbWU/czpvLGE9bltjXSgpLGwmJihuLmNzcyhjLDApLG4uY3NzKHAsYS8yKSksZltjXT1sP2E6MCxmW3BdPWw/MDphLzIsbi5hbmltYXRlKGYse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7bHx8by5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyxyKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3QuZHJvcD1mdW5jdGlvbih0LGkpe3ZhciBzLG49ZSh0aGlzKSxhPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvcGFjaXR5IiwiaGVpZ2h0Iiwid2lkdGgiXSxvPWUuZWZmZWN0cy5zZXRNb2RlKG4sdC5tb2RlfHwiaGlkZSIpLHI9InNob3ciPT09byxoPXQuZGlyZWN0aW9ufHwibGVmdCIsbD0idXAiPT09aHx8ImRvd24iPT09aD8idG9wIjoibGVmdCIsdT0idXAiPT09aHx8ImxlZnQiPT09aD8icG9zIjoibmVnIixkPXtvcGFjaXR5OnI/MTowfTtlLmVmZmVjdHMuc2F2ZShuLGEpLG4uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG4pLHM9dC5kaXN0YW5jZXx8blsidG9wIj09PWw/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCEwKS8yLHImJm4uY3NzKCJvcGFjaXR5IiwwKS5jc3MobCwicG9zIj09PXU/LXM6cyksZFtsXT0ocj8icG9zIj09PXU/Iis9IjoiLT0iOiJwb3MiPT09dT8iLT0iOiIrPSIpK3Msbi5hbmltYXRlKGQse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7ImhpZGUiPT09byYmbi5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobixhKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3QuZXhwbG9kZT1mdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXtiLnB1c2godGhpcyksYi5sZW5ndGg9PT1kKmMmJm4oKX1mdW5jdGlvbiBuKCl7cC5jc3Moe3Zpc2liaWxpdHk6InZpc2libGUifSksZShiKS5yZW1vdmUoKSxtfHxwLmhpZGUoKSxpKCl9dmFyIGEsbyxyLGgsbCx1LGQ9dC5waWVjZXM/TWF0aC5yb3VuZChNYXRoLnNxcnQodC5waWVjZXMpKTozLGM9ZCxwPWUodGhpcyksZj1lLmVmZmVjdHMuc2V0TW9kZShwLHQubW9kZXx8ImhpZGUiKSxtPSJzaG93Ij09PWYsZz1wLnNob3coKS5jc3MoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5vZmZzZXQoKSx2PU1hdGguY2VpbChwLm91dGVyV2lkdGgoKS9jKSx5PU1hdGguY2VpbChwLm91dGVySGVpZ2h0KCkvZCksYj1bXTtmb3IoYT0wO2Q+YTthKyspZm9yKGg9Zy50b3ArYSp5LHU9YS0oZC0xKS8yLG89MDtjPm87bysrKXI9Zy5sZWZ0K28qdixsPW8tKGMtMSkvMixwLmNsb25lKCkuYXBwZW5kVG8oImJvZHkiKS53cmFwKCI8ZGl2PjwvZGl2PiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJ2aXNpYmxlIixsZWZ0Oi1vKnYsdG9wOi1hKnl9KS5wYXJlbnQoKS5hZGRDbGFzcygidWktZWZmZWN0cy1leHBsb2RlIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLG92ZXJmbG93OiJoaWRkZW4iLHdpZHRoOnYsaGVpZ2h0OnksbGVmdDpyKyhtP2wqdjowKSx0b3A6aCsobT91Knk6MCksb3BhY2l0eTptPzA6MX0pLmFuaW1hdGUoe2xlZnQ6cisobT8wOmwqdiksdG9wOmgrKG0/MDp1KnkpLG9wYWNpdHk6bT8xOjB9LHQuZHVyYXRpb258fDUwMCx0LmVhc2luZyxzKX0sZS5lZmZlY3RzLmVmZmVjdC5mYWRlPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxuPWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHwidG9nZ2xlIik7cy5hbmltYXRlKHtvcGFjaXR5Om59LHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTppfSl9LGUuZWZmZWN0cy5lZmZlY3QuZm9sZD1mdW5jdGlvbih0LGkpe3ZhciBzLG4sYT1lKHRoaXMpLG89WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0scj1lLmVmZmVjdHMuc2V0TW9kZShhLHQubW9kZXx8ImhpZGUiKSxoPSJzaG93Ij09PXIsbD0iaGlkZSI9PT1yLHU9dC5zaXplfHwxNSxkPS8oWzAtOV0rKSUvLmV4ZWModSksYz0hIXQuaG9yaXpGaXJzdCxwPWghPT1jLGY9cD9bIndpZHRoIiwiaGVpZ2h0Il06WyJoZWlnaHQiLCJ3aWR0aCJdLG09dC5kdXJhdGlvbi8yLGc9e30sdj17fTtlLmVmZmVjdHMuc2F2ZShhLG8pLGEuc2hvdygpLHM9ZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYSkuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLG49cD9bcy53aWR0aCgpLHMuaGVpZ2h0KCldOltzLmhlaWdodCgpLHMud2lkdGgoKV0sZCYmKHU9cGFyc2VJbnQoZFsxXSwxMCkvMTAwKm5bbD8wOjFdKSxoJiZzLmNzcyhjP3toZWlnaHQ6MCx3aWR0aDp1fTp7aGVpZ2h0OnUsd2lkdGg6MH0pLGdbZlswXV09aD9uWzBdOnUsdltmWzFdXT1oP25bMV06MCxzLmFuaW1hdGUoZyxtLHQuZWFzaW5nKS5hbmltYXRlKHYsbSx0LmVhc2luZyxmdW5jdGlvbigpe2wmJmEuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKGEsbyksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIoYSksaSgpfSl9LGUuZWZmZWN0cy5lZmZlY3QuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxuPVsiYmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZENvbG9yIiwib3BhY2l0eSJdLGE9ZS5lZmZlY3RzLnNldE1vZGUocyx0Lm1vZGV8fCJzaG93Iiksbz17YmFja2dyb3VuZENvbG9yOnMuY3NzKCJiYWNrZ3JvdW5kQ29sb3IiKX07ImhpZGUiPT09YSYmKG8ub3BhY2l0eT0wKSxlLmVmZmVjdHMuc2F2ZShzLG4pLHMuc2hvdygpLmNzcyh7YmFja2dyb3VuZEltYWdlOiJub25lIixiYWNrZ3JvdW5kQ29sb3I6dC5jb2xvcnx8IiNmZmZmOTkifSkuYW5pbWF0ZShvLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PWEmJnMuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHMsbiksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LnNpemU9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbz1lKHRoaXMpLHI9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIndpZHRoIiwiaGVpZ2h0Iiwib3ZlcmZsb3ciLCJvcGFjaXR5Il0saD1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib3ZlcmZsb3ciLCJvcGFjaXR5Il0sbD1bIndpZHRoIiwiaGVpZ2h0Iiwib3ZlcmZsb3ciXSx1PVsiZm9udFNpemUiXSxkPVsiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0sYz1bImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLHA9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJlZmZlY3QiKSxmPXQucmVzdG9yZXx8ImVmZmVjdCIhPT1wLG09dC5zY2FsZXx8ImJvdGgiLGc9dC5vcmlnaW58fFsibWlkZGxlIiwiY2VudGVyIl0sdj1vLmNzcygicG9zaXRpb24iKSx5PWY/cjpoLGI9e2hlaWdodDowLHdpZHRoOjAsb3V0ZXJIZWlnaHQ6MCxvdXRlcldpZHRoOjB9OyJzaG93Ij09PXAmJm8uc2hvdygpLHM9e2hlaWdodDpvLmhlaWdodCgpLHdpZHRoOm8ud2lkdGgoKSxvdXRlckhlaWdodDpvLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpvLm91dGVyV2lkdGgoKX0sInRvZ2dsZSI9PT10Lm1vZGUmJiJzaG93Ij09PXA/KG8uZnJvbT10LnRvfHxiLG8udG89dC5mcm9tfHxzKTooby5mcm9tPXQuZnJvbXx8KCJzaG93Ij09PXA/YjpzKSxvLnRvPXQudG98fCgiaGlkZSI9PT1wP2I6cykpLGE9e2Zyb206e3k6by5mcm9tLmhlaWdodC9zLmhlaWdodCx4Om8uZnJvbS53aWR0aC9zLndpZHRofSx0bzp7eTpvLnRvLmhlaWdodC9zLmhlaWdodCx4Om8udG8ud2lkdGgvcy53aWR0aH19LCgiYm94Ij09PW18fCJib3RoIj09PW0pJiYoYS5mcm9tLnkhPT1hLnRvLnkmJih5PXkuY29uY2F0KGQpLG8uZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGQsYS5mcm9tLnksby5mcm9tKSxvLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sZCxhLnRvLnksby50bykpLGEuZnJvbS54IT09YS50by54JiYoeT15LmNvbmNhdChjKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxjLGEuZnJvbS54LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGMsYS50by54LG8udG8pKSksKCJjb250ZW50Ij09PW18fCJib3RoIj09PW0pJiZhLmZyb20ueSE9PWEudG8ueSYmKHk9eS5jb25jYXQodSkuY29uY2F0KGwpLG8uZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLHUsYS5mcm9tLnksby5mcm9tKSxvLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sdSxhLnRvLnksby50bykpLGUuZWZmZWN0cy5zYXZlKG8seSksby5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobyksby5jc3MoIm92ZXJmbG93IiwiaGlkZGVuIikuY3NzKG8uZnJvbSksZyYmKG49ZS5lZmZlY3RzLmdldEJhc2VsaW5lKGcscyksby5mcm9tLnRvcD0ocy5vdXRlckhlaWdodC1vLm91dGVySGVpZ2h0KCkpKm4ueSxvLmZyb20ubGVmdD0ocy5vdXRlcldpZHRoLW8ub3V0ZXJXaWR0aCgpKSpuLngsby50by50b3A9KHMub3V0ZXJIZWlnaHQtby50by5vdXRlckhlaWdodCkqbi55LG8udG8ubGVmdD0ocy5vdXRlcldpZHRoLW8udG8ub3V0ZXJXaWR0aCkqbi54KSxvLmNzcyhvLmZyb20pLCgiY29udGVudCI9PT1tfHwiYm90aCI9PT1tKSYmKGQ9ZC5jb25jYXQoWyJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iXSkuY29uY2F0KHUpLGM9Yy5jb25jYXQoWyJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiXSksbD1yLmNvbmNhdChkKS5jb25jYXQoYyksby5maW5kKCIqW3dpZHRoXSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLHM9e2hlaWdodDppLmhlaWdodCgpLHdpZHRoOmkud2lkdGgoKSxvdXRlckhlaWdodDppLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDppLm91dGVyV2lkdGgoKX07DQpmJiZlLmVmZmVjdHMuc2F2ZShpLGwpLGkuZnJvbT17aGVpZ2h0OnMuaGVpZ2h0KmEuZnJvbS55LHdpZHRoOnMud2lkdGgqYS5mcm9tLngsb3V0ZXJIZWlnaHQ6cy5vdXRlckhlaWdodCphLmZyb20ueSxvdXRlcldpZHRoOnMub3V0ZXJXaWR0aCphLmZyb20ueH0saS50bz17aGVpZ2h0OnMuaGVpZ2h0KmEudG8ueSx3aWR0aDpzLndpZHRoKmEudG8ueCxvdXRlckhlaWdodDpzLmhlaWdodCphLnRvLnksb3V0ZXJXaWR0aDpzLndpZHRoKmEudG8ueH0sYS5mcm9tLnkhPT1hLnRvLnkmJihpLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxkLGEuZnJvbS55LGkuZnJvbSksaS50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGQsYS50by55LGkudG8pKSxhLmZyb20ueCE9PWEudG8ueCYmKGkuZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGMsYS5mcm9tLngsaS5mcm9tKSxpLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksYyxhLnRvLngsaS50bykpLGkuY3NzKGkuZnJvbSksaS5hbmltYXRlKGkudG8sdC5kdXJhdGlvbix0LmVhc2luZyxmdW5jdGlvbigpe2YmJmUuZWZmZWN0cy5yZXN0b3JlKGksbCl9KX0pKSxvLmFuaW1hdGUoby50byx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXswPT09by50by5vcGFjaXR5JiZvLmNzcygib3BhY2l0eSIsby5mcm9tLm9wYWNpdHkpLCJoaWRlIj09PXAmJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8seSksZnx8KCJzdGF0aWMiPT09dj9vLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6by50by50b3AsbGVmdDpvLnRvLmxlZnR9KTplLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXtvLmNzcyh0LGZ1bmN0aW9uKHQsaSl7dmFyIHM9cGFyc2VJbnQoaSwxMCksbj1lP28udG8ubGVmdDpvLnRvLnRvcDtyZXR1cm4iYXV0byI9PT1pP24rInB4IjpzK24rInB4In0pfSkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKG8pLGkoKX19KX0sZS5lZmZlY3RzLmVmZmVjdC5zY2FsZT1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1lLmV4dGVuZCghMCx7fSx0KSxhPWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHwiZWZmZWN0Iiksbz1wYXJzZUludCh0LnBlcmNlbnQsMTApfHwoMD09PXBhcnNlSW50KHQucGVyY2VudCwxMCk/MDoiaGlkZSI9PT1hPzA6MTAwKSxyPXQuZGlyZWN0aW9ufHwiYm90aCIsaD10Lm9yaWdpbixsPXtoZWlnaHQ6cy5oZWlnaHQoKSx3aWR0aDpzLndpZHRoKCksb3V0ZXJIZWlnaHQ6cy5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6cy5vdXRlcldpZHRoKCl9LHU9e3k6Imhvcml6b250YWwiIT09cj9vLzEwMDoxLHg6InZlcnRpY2FsIiE9PXI/by8xMDA6MX07bi5lZmZlY3Q9InNpemUiLG4ucXVldWU9ITEsbi5jb21wbGV0ZT1pLCJlZmZlY3QiIT09YSYmKG4ub3JpZ2luPWh8fFsibWlkZGxlIiwiY2VudGVyIl0sbi5yZXN0b3JlPSEwKSxuLmZyb209dC5mcm9tfHwoInNob3ciPT09YT97aGVpZ2h0OjAsd2lkdGg6MCxvdXRlckhlaWdodDowLG91dGVyV2lkdGg6MH06bCksbi50bz17aGVpZ2h0OmwuaGVpZ2h0KnUueSx3aWR0aDpsLndpZHRoKnUueCxvdXRlckhlaWdodDpsLm91dGVySGVpZ2h0KnUueSxvdXRlcldpZHRoOmwub3V0ZXJXaWR0aCp1Lnh9LG4uZmFkZSYmKCJzaG93Ij09PWEmJihuLmZyb20ub3BhY2l0eT0wLG4udG8ub3BhY2l0eT0xKSwiaGlkZSI9PT1hJiYobi5mcm9tLm9wYWNpdHk9MSxuLnRvLm9wYWNpdHk9MCkpLHMuZWZmZWN0KG4pfSxlLmVmZmVjdHMuZWZmZWN0LnB1ZmY9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG49ZS5lZmZlY3RzLnNldE1vZGUocyx0Lm1vZGV8fCJoaWRlIiksYT0iaGlkZSI9PT1uLG89cGFyc2VJbnQodC5wZXJjZW50LDEwKXx8MTUwLHI9by8xMDAsaD17aGVpZ2h0OnMuaGVpZ2h0KCksd2lkdGg6cy53aWR0aCgpLG91dGVySGVpZ2h0OnMub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOnMub3V0ZXJXaWR0aCgpfTtlLmV4dGVuZCh0LHtlZmZlY3Q6InNjYWxlIixxdWV1ZTohMSxmYWRlOiEwLG1vZGU6bixjb21wbGV0ZTppLHBlcmNlbnQ6YT9vOjEwMCxmcm9tOmE/aDp7aGVpZ2h0OmguaGVpZ2h0KnIsd2lkdGg6aC53aWR0aCpyLG91dGVySGVpZ2h0Omgub3V0ZXJIZWlnaHQqcixvdXRlcldpZHRoOmgub3V0ZXJXaWR0aCpyfX0pLHMuZWZmZWN0KHQpfSxlLmVmZmVjdHMuZWZmZWN0LnB1bHNhdGU9ZnVuY3Rpb24odCxpKXt2YXIgcyxuPWUodGhpcyksYT1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8InNob3ciKSxvPSJzaG93Ij09PWEscj0iaGlkZSI9PT1hLGg9b3x8ImhpZGUiPT09YSxsPTIqKHQudGltZXN8fDUpKyhoPzE6MCksdT10LmR1cmF0aW9uL2wsZD0wLGM9bi5xdWV1ZSgpLHA9Yy5sZW5ndGg7Zm9yKChvfHwhbi5pcygiOnZpc2libGUiKSkmJihuLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLGQ9MSkscz0xO2w+cztzKyspbi5hbmltYXRlKHtvcGFjaXR5OmR9LHUsdC5lYXNpbmcpLGQ9MS1kO24uYW5pbWF0ZSh7b3BhY2l0eTpkfSx1LHQuZWFzaW5nKSxuLnF1ZXVlKGZ1bmN0aW9uKCl7ciYmbi5oaWRlKCksaSgpfSkscD4xJiZjLnNwbGljZS5hcHBseShjLFsxLDBdLmNvbmNhdChjLnNwbGljZShwLGwrMSkpKSxuLmRlcXVldWUoKX0sZS5lZmZlY3RzLmVmZmVjdC5zaGFrZT1mdW5jdGlvbih0LGkpe3ZhciBzLG49ZSh0aGlzKSxhPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLG89ZS5lZmZlY3RzLnNldE1vZGUobix0Lm1vZGV8fCJlZmZlY3QiKSxyPXQuZGlyZWN0aW9ufHwibGVmdCIsaD10LmRpc3RhbmNlfHwyMCxsPXQudGltZXN8fDMsdT0yKmwrMSxkPU1hdGgucm91bmQodC5kdXJhdGlvbi91KSxjPSJ1cCI9PT1yfHwiZG93biI9PT1yPyJ0b3AiOiJsZWZ0IixwPSJ1cCI9PT1yfHwibGVmdCI9PT1yLGY9e30sbT17fSxnPXt9LHY9bi5xdWV1ZSgpLHk9di5sZW5ndGg7Zm9yKGUuZWZmZWN0cy5zYXZlKG4sYSksbi5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobiksZltjXT0ocD8iLT0iOiIrPSIpK2gsbVtjXT0ocD8iKz0iOiItPSIpKzIqaCxnW2NdPShwPyItPSI6Iis9IikrMipoLG4uYW5pbWF0ZShmLGQsdC5lYXNpbmcpLHM9MTtsPnM7cysrKW4uYW5pbWF0ZShtLGQsdC5lYXNpbmcpLmFuaW1hdGUoZyxkLHQuZWFzaW5nKTtuLmFuaW1hdGUobSxkLHQuZWFzaW5nKS5hbmltYXRlKGYsZC8yLHQuZWFzaW5nKS5xdWV1ZShmdW5jdGlvbigpeyJoaWRlIj09PW8mJm4uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG4sYSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksaSgpfSkseT4xJiZ2LnNwbGljZS5hcHBseSh2LFsxLDBdLmNvbmNhdCh2LnNwbGljZSh5LHUrMSkpKSxuLmRlcXVldWUoKX0sZS5lZmZlY3RzLmVmZmVjdC5zbGlkZT1mdW5jdGlvbih0LGkpe3ZhciBzLG49ZSh0aGlzKSxhPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ3aWR0aCIsImhlaWdodCJdLG89ZS5lZmZlY3RzLnNldE1vZGUobix0Lm1vZGV8fCJzaG93Iikscj0ic2hvdyI9PT1vLGg9dC5kaXJlY3Rpb258fCJsZWZ0IixsPSJ1cCI9PT1ofHwiZG93biI9PT1oPyJ0b3AiOiJsZWZ0Iix1PSJ1cCI9PT1ofHwibGVmdCI9PT1oLGQ9e307ZS5lZmZlY3RzLnNhdmUobixhKSxuLnNob3coKSxzPXQuZGlzdGFuY2V8fG5bInRvcCI9PT1sPyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSghMCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobikuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLHImJm4uY3NzKGwsdT9pc05hTihzKT8iLSIrczotczpzKSxkW2xdPShyP3U/Iis9IjoiLT0iOnU/Ii09IjoiKz0iKStzLG4uYW5pbWF0ZShkLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PW8mJm4uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG4sYSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LnRyYW5zZmVyPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxuPWUodC50byksYT0iZml4ZWQiPT09bi5jc3MoInBvc2l0aW9uIiksbz1lKCJib2R5Iikscj1hP28uc2Nyb2xsVG9wKCk6MCxoPWE/by5zY3JvbGxMZWZ0KCk6MCxsPW4ub2Zmc2V0KCksdT17dG9wOmwudG9wLXIsbGVmdDpsLmxlZnQtaCxoZWlnaHQ6bi5pbm5lckhlaWdodCgpLHdpZHRoOm4uaW5uZXJXaWR0aCgpfSxkPXMub2Zmc2V0KCksYz1lKCI8ZGl2IGNsYXNzPSd1aS1lZmZlY3RzLXRyYW5zZmVyJz48L2Rpdj4iKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyh0LmNsYXNzTmFtZSkuY3NzKHt0b3A6ZC50b3AtcixsZWZ0OmQubGVmdC1oLGhlaWdodDpzLmlubmVySGVpZ2h0KCksd2lkdGg6cy5pbm5lcldpZHRoKCkscG9zaXRpb246YT8iZml4ZWQiOiJhYnNvbHV0ZSJ9KS5hbmltYXRlKHUsdC5kdXJhdGlvbix0LmVhc2luZyxmdW5jdGlvbigpe2MucmVtb3ZlKCksaSgpfSl9LGUud2lkZ2V0KCJ1aS5wcm9ncmVzc2JhciIse3ZlcnNpb246IjEuMTEuNCIsb3B0aW9uczp7bWF4OjEwMCx2YWx1ZTowLGNoYW5nZTpudWxsLGNvbXBsZXRlOm51bGx9LG1pbjowLF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9sZFZhbHVlPXRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLmF0dHIoe3JvbGU6InByb2dyZXNzYmFyIiwiYXJpYS12YWx1ZW1pbiI6dGhpcy5taW59KSx0aGlzLnZhbHVlRGl2PWUoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLXZhbHVlIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWxlZnQnPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnZhbHVlRGl2LnJlbW92ZSgpfSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT90aGlzLm9wdGlvbnMudmFsdWU6KHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKGUpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHZvaWQgMCl9LF9jb25zdHJhaW5lZFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT10aGlzLm9wdGlvbnMudmFsdWUpLHRoaXMuaW5kZXRlcm1pbmF0ZT1lPT09ITEsIm51bWJlciIhPXR5cGVvZiBlJiYoZT0wKSx0aGlzLmluZGV0ZXJtaW5hdGU/ITE6TWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbixlKSl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7ZGVsZXRlIGUudmFsdWUsdGhpcy5fc3VwZXIoZSksdGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUodCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsibWF4Ij09PWUmJih0PU1hdGgubWF4KHRoaXMubWluLHQpKSwiZGlzYWJsZWQiPT09ZSYmdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIsISF0KS5hdHRyKCJhcmlhLWRpc2FibGVkIix0KSx0aGlzLl9zdXBlcihlLHQpfSxfcGVyY2VudGFnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU/MTAwOjEwMCoodGhpcy5vcHRpb25zLnZhbHVlLXRoaXMubWluKS8odGhpcy5vcHRpb25zLm1heC10aGlzLm1pbil9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudmFsdWUsaT10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy52YWx1ZURpdi50b2dnbGUodGhpcy5pbmRldGVybWluYXRlfHx0PnRoaXMubWluKS50b2dnbGVDbGFzcygidWktY29ybmVyLXJpZ2h0Iix0PT09dGhpcy5vcHRpb25zLm1heCkud2lkdGgoaS50b0ZpeGVkKDApKyIlIiksdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlIix0aGlzLmluZGV0ZXJtaW5hdGUpLHRoaXMuaW5kZXRlcm1pbmF0ZT8odGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLm92ZXJsYXlEaXZ8fCh0aGlzLm92ZXJsYXlEaXY9ZSgiPGRpdiBjbGFzcz0ndWktcHJvZ3Jlc3NiYXItb3ZlcmxheSc+PC9kaXY+IikuYXBwZW5kVG8odGhpcy52YWx1ZURpdikpKToodGhpcy5lbGVtZW50LmF0dHIoeyJhcmlhLXZhbHVlbWF4Ijp0aGlzLm9wdGlvbnMubWF4LCJhcmlhLXZhbHVlbm93Ijp0fSksdGhpcy5vdmVybGF5RGl2JiYodGhpcy5vdmVybGF5RGl2LnJlbW92ZSgpLHRoaXMub3ZlcmxheURpdj1udWxsKSksdGhpcy5vbGRWYWx1ZSE9PXQmJih0aGlzLm9sZFZhbHVlPXQsdGhpcy5fdHJpZ2dlcigiY2hhbmdlIikpLHQ9PT10aGlzLm9wdGlvbnMubWF4JiZ0aGlzLl90cmlnZ2VyKCJjb21wbGV0ZSIpfX0pLGUud2lkZ2V0KCJ1aS5zZWxlY3RhYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjoiKiIsdG9sZXJhbmNlOiJ0b3VjaCIsc2VsZWN0ZWQ6bnVsbCxzZWxlY3Rpbmc6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbCx1bnNlbGVjdGVkOm51bGwsdW5zZWxlY3Rpbmc6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0LGk9dGhpczt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGFibGUiKSx0aGlzLmRyYWdnZWQ9ITEsdGhpcy5yZWZyZXNoPWZ1bmN0aW9uKCl7dD1lKGkub3B0aW9ucy5maWx0ZXIsaS5lbGVtZW50WzBdKSx0LmFkZENsYXNzKCJ1aS1zZWxlY3RlZSIpLHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksaT10Lm9mZnNldCgpO2UuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iLHtlbGVtZW50OnRoaXMsJGVsZW1lbnQ6dCxsZWZ0OmkubGVmdCx0b3A6aS50b3AscmlnaHQ6aS5sZWZ0K3Qub3V0ZXJXaWR0aCgpLGJvdHRvbTppLnRvcCt0Lm91dGVySGVpZ2h0KCksc3RhcnRzZWxlY3RlZDohMSxzZWxlY3RlZDp0Lmhhc0NsYXNzKCJ1aS1zZWxlY3RlZCIpLHNlbGVjdGluZzp0Lmhhc0NsYXNzKCJ1aS1zZWxlY3RpbmciKSx1bnNlbGVjdGluZzp0Lmhhc0NsYXNzKCJ1aS11bnNlbGVjdGluZyIpfSl9KX0sdGhpcy5yZWZyZXNoKCksdGhpcy5zZWxlY3RlZXM9dC5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLmhlbHBlcj1lKCI8ZGl2IGNsYXNzPSd1aS1zZWxlY3RhYmxlLWhlbHBlcic+PC9kaXY+Iil9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZXMucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVlIikucmVtb3ZlRGF0YSgic2VsZWN0YWJsZS1pdGVtIiksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RhYmxlIHVpLXNlbGVjdGFibGUtZGlzYWJsZWQiKSx0aGlzLl9tb3VzZURlc3Ryb3koKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9uczt0aGlzLm9wb3M9W3QucGFnZVgsdC5wYWdlWV0sdGhpcy5vcHRpb25zLmRpc2FibGVkfHwodGhpcy5zZWxlY3RlZXM9ZShzLmZpbHRlcix0aGlzLmVsZW1lbnRbMF0pLHRoaXMuX3RyaWdnZXIoInN0YXJ0Iix0KSxlKHMuYXBwZW5kVG8pLmFwcGVuZCh0aGlzLmhlbHBlciksdGhpcy5oZWxwZXIuY3NzKHtsZWZ0OnQucGFnZVgsdG9wOnQucGFnZVksd2lkdGg6MCxoZWlnaHQ6MH0pLHMuYXV0b1JlZnJlc2gmJnRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzLmZpbHRlcigiLnVpLXNlbGVjdGVkIikuZWFjaChmdW5jdGlvbigpe3ZhciBzPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtzLnN0YXJ0c2VsZWN0ZWQ9ITAsdC5tZXRhS2V5fHx0LmN0cmxLZXl8fChzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLHMuc2VsZWN0ZWQ9ITEscy4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxzLnVuc2VsZWN0aW5nPSEwLGkuX3RyaWdnZXIoInVuc2VsZWN0aW5nIix0LHt1bnNlbGVjdGluZzpzLmVsZW1lbnR9KSl9KSxlKHQudGFyZ2V0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt2YXIgcyxuPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtyZXR1cm4gbj8ocz0hdC5tZXRhS2V5JiYhdC5jdHJsS2V5fHwhbi4kZWxlbWVudC5oYXNDbGFzcygidWktc2VsZWN0ZWQiKSxuLiRlbGVtZW50LnJlbW92ZUNsYXNzKHM/InVpLXVuc2VsZWN0aW5nIjoidWktc2VsZWN0ZWQiKS5hZGRDbGFzcyhzPyJ1aS1zZWxlY3RpbmciOiJ1aS11bnNlbGVjdGluZyIpLG4udW5zZWxlY3Rpbmc9IXMsbi5zZWxlY3Rpbmc9cyxuLnNlbGVjdGVkPXMscz9pLl90cmlnZ2VyKCJzZWxlY3RpbmciLHQse3NlbGVjdGluZzpuLmVsZW1lbnR9KTppLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6bi5lbGVtZW50fSksITEpOnZvaWQgMH0pKX0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXtpZih0aGlzLmRyYWdnZWQ9ITAsIXRoaXMub3B0aW9ucy5kaXNhYmxlZCl7dmFyIGkscz10aGlzLG49dGhpcy5vcHRpb25zLGE9dGhpcy5vcG9zWzBdLG89dGhpcy5vcG9zWzFdLHI9dC5wYWdlWCxoPXQucGFnZVk7cmV0dXJuIGE+ciYmKGk9cixyPWEsYT1pKSxvPmgmJihpPWgsaD1vLG89aSksdGhpcy5oZWxwZXIuY3NzKHtsZWZ0OmEsdG9wOm8sd2lkdGg6ci1hLGhlaWdodDpoLW99KSx0aGlzLnNlbGVjdGVlcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpLGw9ITE7aSYmaS5lbGVtZW50IT09cy5lbGVtZW50WzBdJiYoInRvdWNoIj09PW4udG9sZXJhbmNlP2w9IShpLmxlZnQ+cnx8YT5pLnJpZ2h0fHxpLnRvcD5ofHxvPmkuYm90dG9tKToiZml0Ij09PW4udG9sZXJhbmNlJiYobD1pLmxlZnQ+YSYmcj5pLnJpZ2h0JiZpLnRvcD5vJiZoPmkuYm90dG9tKSxsPyhpLnNlbGVjdGVkJiYoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxpLnNlbGVjdGVkPSExKSxpLnVuc2VsZWN0aW5nJiYoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSExKSxpLnNlbGVjdGluZ3x8KGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSEwLHMuX3RyaWdnZXIoInNlbGVjdGluZyIsdCx7c2VsZWN0aW5nOmkuZWxlbWVudH0pKSk6KGkuc2VsZWN0aW5nJiYoKHQubWV0YUtleXx8dC5jdHJsS2V5KSYmaS5zdGFydHNlbGVjdGVkPyhpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSxpLnNlbGVjdGluZz0hMSxpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITApOihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKSxpLnNlbGVjdGluZz0hMSxpLnN0YXJ0c2VsZWN0ZWQmJihpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGkudW5zZWxlY3Rpbmc9ITApLHMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIix0LHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpLGkuc2VsZWN0ZWQmJih0Lm1ldGFLZXl8fHQuY3RybEtleXx8aS5zdGFydHNlbGVjdGVkfHwoaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxpLnNlbGVjdGVkPSExLGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksaS51bnNlbGVjdGluZz0hMCxzLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6aS5lbGVtZW50fSkpKSkpfSksITF9fSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXM7cmV0dXJuIHRoaXMuZHJhZ2dlZD0hMSxlKCIudWktdW5zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBzPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLHMudW5zZWxlY3Rpbmc9ITEscy5zdGFydHNlbGVjdGVkPSExLGkuX3RyaWdnZXIoInVuc2VsZWN0ZWQiLHQse3Vuc2VsZWN0ZWQ6cy5lbGVtZW50fSl9KSxlKCIudWktc2VsZWN0aW5nIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgcz1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cy4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIikuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIikscy5zZWxlY3Rpbmc9ITEscy5zZWxlY3RlZD0hMCxzLnN0YXJ0c2VsZWN0ZWQ9ITAsaS5fdHJpZ2dlcigic2VsZWN0ZWQiLHQse3NlbGVjdGVkOnMuZWxlbWVudH0pfSksdGhpcy5fdHJpZ2dlcigic3RvcCIsdCksdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9fSksZS53aWRnZXQoInVpLnNlbGVjdG1lbnUiLHt2ZXJzaW9uOiIxLjExLjQiLGRlZmF1bHRFbGVtZW50OiI8c2VsZWN0PiIsb3B0aW9uczp7YXBwZW5kVG86bnVsbCxkaXNhYmxlZDpudWxsLGljb25zOntidXR0b246InVpLWljb24tdHJpYW5nbGUtMS1zIn0scG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246Im5vbmUifSx3aWR0aDpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKCJpZCIpO3RoaXMuaWRzPXtlbGVtZW50OmUsYnV0dG9uOmUrIi1idXR0b24iLG1lbnU6ZSsiLW1lbnUifSx0aGlzLl9kcmF3QnV0dG9uKCksdGhpcy5fZHJhd01lbnUoKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZGlzYWJsZSgpfSxfZHJhd0J1dHRvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5sYWJlbD1lKCJsYWJlbFtmb3I9JyIrdGhpcy5pZHMuZWxlbWVudCsiJ10iKS5hdHRyKCJmb3IiLHRoaXMuaWRzLmJ1dHRvbiksdGhpcy5fb24odGhpcy5sYWJlbCx7Y2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5idXR0b24uZm9jdXMoKSxlLnByZXZlbnREZWZhdWx0KCl9fSksdGhpcy5lbGVtZW50LmhpZGUoKSx0aGlzLmJ1dHRvbj1lKCI8c3Bhbj4iLHsiY2xhc3MiOiJ1aS1zZWxlY3RtZW51LWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIix0YWJpbmRleDp0aGlzLm9wdGlvbnMuZGlzYWJsZWQ/LTE6MCxpZDp0aGlzLmlkcy5idXR0b24scm9sZToiY29tYm9ib3giLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWF1dG9jb21wbGV0ZSI6Imxpc3QiLCJhcmlhLW93bnMiOnRoaXMuaWRzLm1lbnUsImFyaWEtaGFzcG9wdXAiOiJ0cnVlIn0pLmluc2VydEFmdGVyKHRoaXMuZWxlbWVudCksZSgiPHNwYW4+Iix7ImNsYXNzIjoidWktaWNvbiAiK3RoaXMub3B0aW9ucy5pY29ucy5idXR0b259KS5wcmVwZW5kVG8odGhpcy5idXR0b24pLHRoaXMuYnV0dG9uVGV4dD1lKCI8c3Bhbj4iLHsiY2xhc3MiOiJ1aS1zZWxlY3RtZW51LXRleHQifSkuYXBwZW5kVG8odGhpcy5idXR0b24pLHRoaXMuX3NldFRleHQodGhpcy5idXR0b25UZXh0LHRoaXMuZWxlbWVudC5maW5kKCJvcHRpb246c2VsZWN0ZWQiKS50ZXh0KCkpLHRoaXMuX3Jlc2l6ZUJ1dHRvbigpLHRoaXMuX29uKHRoaXMuYnV0dG9uLHRoaXMuX2J1dHRvbkV2ZW50cyksdGhpcy5idXR0b24ub25lKCJmb2N1c2luIixmdW5jdGlvbigpe3QubWVudUl0ZW1zfHx0Ll9yZWZyZXNoTWVudSgpfSksdGhpcy5faG92ZXJhYmxlKHRoaXMuYnV0dG9uKSx0aGlzLl9mb2N1c2FibGUodGhpcy5idXR0b24pfSxfZHJhd01lbnU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubWVudT1lKCI8dWw+Iix7ImFyaWEtaGlkZGVuIjoidHJ1ZSIsImFyaWEtbGFiZWxsZWRieSI6dGhpcy5pZHMuYnV0dG9uLGlkOnRoaXMuaWRzLm1lbnV9KSx0aGlzLm1lbnVXcmFwPWUoIjxkaXY+Iix7ImNsYXNzIjoidWktc2VsZWN0bWVudS1tZW51IHVpLWZyb250In0pLmFwcGVuZCh0aGlzLm1lbnUpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMubWVudUluc3RhbmNlPXRoaXMubWVudS5tZW51KHtyb2xlOiJsaXN0Ym94IixzZWxlY3Q6ZnVuY3Rpb24oZSxpKXtlLnByZXZlbnREZWZhdWx0KCksdC5fc2V0U2VsZWN0aW9uKCksdC5fc2VsZWN0KGkuaXRlbS5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKSxlKX0sZm9jdXM6ZnVuY3Rpb24oZSxpKXt2YXIgcz1pLml0ZW0uZGF0YSgidWktc2VsZWN0bWVudS1pdGVtIik7bnVsbCE9dC5mb2N1c0luZGV4JiZzLmluZGV4IT09dC5mb2N1c0luZGV4JiYodC5fdHJpZ2dlcigiZm9jdXMiLGUse2l0ZW06c30pLHQuaXNPcGVufHx0Ll9zZWxlY3QocyxlKSksdC5mb2N1c0luZGV4PXMuaW5kZXgsdC5idXR0b24uYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50Iix0Lm1lbnVJdGVtcy5lcShzLmluZGV4KS5hdHRyKCJpZCIpKX19KS5tZW51KCJpbnN0YW5jZSIpLHRoaXMubWVudS5hZGRDbGFzcygidWktY29ybmVyLWJvdHRvbSIpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIiksdGhpcy5tZW51SW5zdGFuY2UuX29mZih0aGlzLm1lbnUsIm1vdXNlbGVhdmUiKSx0aGlzLm1lbnVJbnN0YW5jZS5fY2xvc2VPbkRvY3VtZW50Q2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5tZW51SW5zdGFuY2UuX2lzRGl2aWRlcj1mdW5jdGlvbigpe3JldHVybiExfX0scmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3JlZnJlc2hNZW51KCksdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCkudGV4dCgpKSx0aGlzLm9wdGlvbnMud2lkdGh8fHRoaXMuX3Jlc2l6ZUJ1dHRvbigpfSxfcmVmcmVzaE1lbnU6ZnVuY3Rpb24oKXt0aGlzLm1lbnUuZW1wdHkoKTt2YXIgZSx0PXRoaXMuZWxlbWVudC5maW5kKCJvcHRpb24iKTt0Lmxlbmd0aCYmKHRoaXMuX3BhcnNlT3B0aW9ucyh0KSx0aGlzLl9yZW5kZXJNZW51KHRoaXMubWVudSx0aGlzLml0ZW1zKSx0aGlzLm1lbnVJbnN0YW5jZS5yZWZyZXNoKCksdGhpcy5tZW51SXRlbXM9dGhpcy5tZW51LmZpbmQoImxpIikubm90KCIudWktc2VsZWN0bWVudS1vcHRncm91cCIpLGU9dGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCksdGhpcy5tZW51SW5zdGFuY2UuZm9jdXMobnVsbCxlKSx0aGlzLl9zZXRBcmlhKGUuZGF0YSgidWktc2VsZWN0bWVudS1pdGVtIikpLHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpKSl9LG9wZW46ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zLmRpc2FibGVkfHwodGhpcy5tZW51SXRlbXM/KHRoaXMubWVudS5maW5kKCIudWktc3RhdGUtZm9jdXMiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSx0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhudWxsLHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpKSk6dGhpcy5fcmVmcmVzaE1lbnUoKSx0aGlzLmlzT3Blbj0hMCx0aGlzLl90b2dnbGVBdHRyKCksdGhpcy5fcmVzaXplTWVudSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx0aGlzLl9kb2N1bWVudENsaWNrKSx0aGlzLl90cmlnZ2VyKCJvcGVuIixlKSl9LF9wb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMubWVudVdyYXAucG9zaXRpb24oZS5leHRlbmQoe29mOnRoaXMuYnV0dG9ufSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5pc09wZW4mJih0aGlzLmlzT3Blbj0hMSx0aGlzLl90b2dnbGVBdHRyKCksdGhpcy5yYW5nZT1udWxsLHRoaXMuX29mZih0aGlzLmRvY3VtZW50KSx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsZSkpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idXR0b259LG1lbnVXaWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51fSxfcmVuZGVyTWVudTpmdW5jdGlvbih0LGkpe3ZhciBzPXRoaXMsbj0iIjtlLmVhY2goaSxmdW5jdGlvbihpLGEpe2Eub3B0Z3JvdXAhPT1uJiYoZSgiPGxpPiIseyJjbGFzcyI6InVpLXNlbGVjdG1lbnUtb3B0Z3JvdXAgdWktbWVudS1kaXZpZGVyIisoYS5lbGVtZW50LnBhcmVudCgib3B0Z3JvdXAiKS5wcm9wKCJkaXNhYmxlZCIpPyIgdWktc3RhdGUtZGlzYWJsZWQiOiIiKSx0ZXh0OmEub3B0Z3JvdXB9KS5hcHBlbmRUbyh0KSxuPWEub3B0Z3JvdXApLHMuX3JlbmRlckl0ZW1EYXRhKHQsYSl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0oZSx0KS5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iLHQpfSxfcmVuZGVySXRlbTpmdW5jdGlvbih0LGkpe3ZhciBzPWUoIjxsaT4iKTtyZXR1cm4gaS5kaXNhYmxlZCYmcy5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSx0aGlzLl9zZXRUZXh0KHMsaS5sYWJlbCkscy5hcHBlbmRUbyh0KX0sX3NldFRleHQ6ZnVuY3Rpb24oZSx0KXt0P2UudGV4dCh0KTplLmh0bWwoIiYjMTYwOyIpfSxfbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBpLHMsbj0iLnVpLW1lbnUtaXRlbSI7dGhpcy5pc09wZW4/aT10aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmZvY3VzSW5kZXgpOihpPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4KSxuKz0iOm5vdCgudWktc3RhdGUtZGlzYWJsZWQpIikscz0iZmlyc3QiPT09ZXx8Imxhc3QiPT09ZT9pWyJmaXJzdCI9PT1lPyJwcmV2QWxsIjoibmV4dEFsbCJdKG4pLmVxKC0xKTppW2UrIkFsbCJdKG4pLmVxKDApLHMubGVuZ3RoJiZ0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyh0LHMpfSxfZ2V0U2VsZWN0ZWRJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4KX0sX3RvZ2dsZTpmdW5jdGlvbihlKXt0aGlzW3RoaXMuaXNPcGVuPyJjbG9zZSI6Im9wZW4iXShlKX0sX3NldFNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBlO3RoaXMucmFuZ2UmJih3aW5kb3cuZ2V0U2VsZWN0aW9uPyhlPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSxlLnJlbW92ZUFsbFJhbmdlcygpLGUuYWRkUmFuZ2UodGhpcy5yYW5nZSkpOnRoaXMucmFuZ2Uuc2VsZWN0KCksdGhpcy5idXR0b24uZm9jdXMoKSl9LF9kb2N1bWVudENsaWNrOnttb3VzZWRvd246ZnVuY3Rpb24odCl7dGhpcy5pc09wZW4mJihlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktc2VsZWN0bWVudS1tZW51LCAjIit0aGlzLmlkcy5idXR0b24pLmxlbmd0aHx8dGhpcy5jbG9zZSh0KSl9fSxfYnV0dG9uRXZlbnRzOnttb3VzZWRvd246ZnVuY3Rpb24oKXt2YXIgZTt3aW5kb3cuZ2V0U2VsZWN0aW9uPyhlPXdpbmRvdy5nZXRTZWxlY3Rpb24oKSxlLnJhbmdlQ291bnQmJih0aGlzLnJhbmdlPWUuZ2V0UmFuZ2VBdCgwKSkpOnRoaXMucmFuZ2U9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9LGNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuX3NldFNlbGVjdGlvbigpLHRoaXMuX3RvZ2dsZShlKX0sa2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT0hMDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5UQUI6Y2FzZSBlLnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY2xvc2UodCksaT0hMTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTlRFUjp0aGlzLmlzT3BlbiYmdGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0odCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6dC5hbHRLZXk/dGhpcy5fdG9nZ2xlKHQpOnRoaXMuX21vdmUoInByZXYiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046dC5hbHRLZXk/dGhpcy5fdG9nZ2xlKHQpOnRoaXMuX21vdmUoIm5leHQiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnRoaXMuaXNPcGVuP3RoaXMuX3NlbGVjdEZvY3VzZWRJdGVtKHQpOnRoaXMuX3RvZ2dsZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5MRUZUOnRoaXMuX21vdmUoInByZXYiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOnRoaXMuX21vdmUoIm5leHQiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDp0aGlzLl9tb3ZlKCJmaXJzdCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJsYXN0Iix0KTticmVhaztkZWZhdWx0OnRoaXMubWVudS50cmlnZ2VyKHQpLGk9ITF9aSYmdC5wcmV2ZW50RGVmYXVsdCgpfX0sX3NlbGVjdEZvY3VzZWRJdGVtOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZm9jdXNJbmRleCk7dC5oYXNDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKXx8dGhpcy5fc2VsZWN0KHQuZGF0YSgidWktc2VsZWN0bWVudS1pdGVtIiksZSl9LF9zZWxlY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleDt0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleD1lLmluZGV4LHRoaXMuX3NldFRleHQodGhpcy5idXR0b25UZXh0LGUubGFiZWwpLHRoaXMuX3NldEFyaWEoZSksdGhpcy5fdHJpZ2dlcigic2VsZWN0Iix0LHtpdGVtOmV9KSxlLmluZGV4IT09aSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHtpdGVtOmV9KSx0aGlzLmNsb3NlKHQpfSxfc2V0QXJpYTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1lbnVJdGVtcy5lcShlLmluZGV4KS5hdHRyKCJpZCIpO3RoaXMuYnV0dG9uLmF0dHIoeyJhcmlhLWxhYmVsbGVkYnkiOnQsImFyaWEtYWN0aXZlZGVzY2VuZGFudCI6dH0pLHRoaXMubWVudS5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHQpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7Imljb25zIj09PWUmJnRoaXMuYnV0dG9uLmZpbmQoInNwYW4udWktaWNvbiIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY29ucy5idXR0b24pLmFkZENsYXNzKHQuYnV0dG9uKSx0aGlzLl9zdXBlcihlLHQpLCJhcHBlbmRUbyI9PT1lJiZ0aGlzLm1lbnVXcmFwLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLCJkaXNhYmxlZCI9PT1lJiYodGhpcy5tZW51SW5zdGFuY2Uub3B0aW9uKCJkaXNhYmxlZCIsdCksdGhpcy5idXR0b24udG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIix0KS5hdHRyKCJhcmlhLWRpc2FibGVkIix0KSx0aGlzLmVsZW1lbnQucHJvcCgiZGlzYWJsZWQiLHQpLHQ/KHRoaXMuYnV0dG9uLmF0dHIoInRhYmluZGV4IiwtMSksdGhpcy5jbG9zZSgpKTp0aGlzLmJ1dHRvbi5hdHRyKCJ0YWJpbmRleCIsMCkpLCJ3aWR0aCI9PT1lJiZ0aGlzLl9yZXNpemVCdXR0b24oKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiB0JiYodD10LmpxdWVyeXx8dC5ub2RlVHlwZT9lKHQpOnRoaXMuZG9jdW1lbnQuZmluZCh0KS5lcSgwKSksdCYmdFswXXx8KHQ9dGhpcy5lbGVtZW50LmNsb3Nlc3QoIi51aS1mcm9udCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy5kb2N1bWVudFswXS5ib2R5KSx0fSxfdG9nZ2xlQXR0cjpmdW5jdGlvbigpe3RoaXMuYnV0dG9uLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItdG9wIix0aGlzLmlzT3BlbikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1hbGwiLCF0aGlzLmlzT3BlbikuYXR0cigiYXJpYS1leHBhbmRlZCIsdGhpcy5pc09wZW4pLHRoaXMubWVudVdyYXAudG9nZ2xlQ2xhc3MoInVpLXNlbGVjdG1lbnUtb3BlbiIsdGhpcy5pc09wZW4pLHRoaXMubWVudS5hdHRyKCJhcmlhLWhpZGRlbiIsIXRoaXMuaXNPcGVuKX0sX3Jlc2l6ZUJ1dHRvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy53aWR0aDtlfHwoZT10aGlzLmVsZW1lbnQuc2hvdygpLm91dGVyV2lkdGgoKSx0aGlzLmVsZW1lbnQuaGlkZSgpKSx0aGlzLmJ1dHRvbi5vdXRlcldpZHRoKGUpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3RoaXMubWVudS5vdXRlcldpZHRoKE1hdGgubWF4KHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoKSx0aGlzLm1lbnUud2lkdGgoIiIpLm91dGVyV2lkdGgoKSsxKSl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJue2Rpc2FibGVkOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpfX0sX3BhcnNlT3B0aW9uczpmdW5jdGlvbih0KXt2YXIgaT1bXTt0LmVhY2goZnVuY3Rpb24odCxzKXt2YXIgbj1lKHMpLGE9bi5wYXJlbnQoIm9wdGdyb3VwIik7aS5wdXNoKHtlbGVtZW50Om4saW5kZXg6dCx2YWx1ZTpuLnZhbCgpLGxhYmVsOm4udGV4dCgpLG9wdGdyb3VwOmEuYXR0cigibGFiZWwiKXx8IiIsZGlzYWJsZWQ6YS5wcm9wKCJkaXNhYmxlZCIpfHxuLnByb3AoImRpc2FibGVkIil9KX0pLHRoaXMuaXRlbXM9aX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLm1lbnVXcmFwLnJlbW92ZSgpLHRoaXMuYnV0dG9uLnJlbW92ZSgpLHRoaXMuZWxlbWVudC5zaG93KCksdGhpcy5lbGVtZW50LnJlbW92ZVVuaXF1ZUlkKCksdGhpcy5sYWJlbC5hdHRyKCJmb3IiLHRoaXMuaWRzLmVsZW1lbnQpfX0pLGUud2lkZ2V0KCJ1aS5zbGlkZXIiLGUudWkubW91c2Use3ZlcnNpb246IjEuMTEuNCIsd2lkZ2V0RXZlbnRQcmVmaXg6InNsaWRlIixvcHRpb25zOnthbmltYXRlOiExLGRpc3RhbmNlOjAsbWF4OjEwMCxtaW46MCxvcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmFuZ2U6ITEsc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGwsY2hhbmdlOm51bGwsc2xpZGU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sbnVtUGFnZXM6NSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5fY2FsY3VsYXRlTmV3TWF4KCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zbGlkZXIgdWktc2xpZGVyLSIrdGhpcy5vcmllbnRhdGlvbisiIHVpLXdpZGdldCIrIiB1aS13aWRnZXQtY29udGVudCIrIiB1aS1jb3JuZXItYWxsIiksdGhpcy5fcmVmcmVzaCgpLHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fYW5pbWF0ZU9mZj0hMX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9jcmVhdGVSYW5nZSgpLHRoaXMuX2NyZWF0ZUhhbmRsZXMoKSx0aGlzLl9zZXR1cEV2ZW50cygpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfY3JlYXRlSGFuZGxlczpmdW5jdGlvbigpe3ZhciB0LGkscz10aGlzLm9wdGlvbnMsbj10aGlzLmVsZW1lbnQuZmluZCgiLnVpLXNsaWRlci1oYW5kbGUiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiksYT0iPHNwYW4gY2xhc3M9J3VpLXNsaWRlci1oYW5kbGUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsJyB0YWJpbmRleD0nMCc+PC9zcGFuPiIsbz1bXTtmb3IoaT1zLnZhbHVlcyYmcy52YWx1ZXMubGVuZ3RofHwxLG4ubGVuZ3RoPmkmJihuLnNsaWNlKGkpLnJlbW92ZSgpLG49bi5zbGljZSgwLGkpKSx0PW4ubGVuZ3RoO2k+dDt0Kyspby5wdXNoKGEpO3RoaXMuaGFuZGxlcz1uLmFkZChlKG8uam9pbigiIikpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCkpLHRoaXMuaGFuZGxlPXRoaXMuaGFuZGxlcy5lcSgwKSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbih0KXtlKHRoaXMpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiLHQpfSl9LF9jcmVhdGVSYW5nZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxpPSIiO3QucmFuZ2U/KHQucmFuZ2U9PT0hMCYmKHQudmFsdWVzP3QudmFsdWVzLmxlbmd0aCYmMiE9PXQudmFsdWVzLmxlbmd0aD90LnZhbHVlcz1bdC52YWx1ZXNbMF0sdC52YWx1ZXNbMF1dOmUuaXNBcnJheSh0LnZhbHVlcykmJih0LnZhbHVlcz10LnZhbHVlcy5zbGljZSgwKSk6dC52YWx1ZXM9W3RoaXMuX3ZhbHVlTWluKCksdGhpcy5fdmFsdWVNaW4oKV0pLHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UubGVuZ3RoP3RoaXMucmFuZ2UucmVtb3ZlQ2xhc3MoInVpLXNsaWRlci1yYW5nZS1taW4gdWktc2xpZGVyLXJhbmdlLW1heCIpLmNzcyh7bGVmdDoiIixib3R0b206IiJ9KToodGhpcy5yYW5nZT1lKCI8ZGl2PjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksaT0idWktc2xpZGVyLXJhbmdlIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLHRoaXMucmFuZ2UuYWRkQ2xhc3MoaSsoIm1pbiI9PT10LnJhbmdlfHwibWF4Ij09PXQucmFuZ2U/IiB1aS1zbGlkZXItcmFuZ2UtIit0LnJhbmdlOiIiKSkpOih0aGlzLnJhbmdlJiZ0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMucmFuZ2U9bnVsbCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbigpe3RoaXMuX29mZih0aGlzLmhhbmRsZXMpLHRoaXMuX29uKHRoaXMuaGFuZGxlcyx0aGlzLl9oYW5kbGVFdmVudHMpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmhhbmRsZXMpLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmhhbmRsZXMpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5yZW1vdmUoKSx0aGlzLnJhbmdlJiZ0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scixoLGwsdT10aGlzLGQ9dGhpcy5vcHRpb25zO3JldHVybiBkLmRpc2FibGVkPyExOih0aGlzLmVsZW1lbnRTaXplPXt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKX0sdGhpcy5lbGVtZW50T2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSxpPXt4OnQucGFnZVgseTp0LnBhZ2VZfSxzPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShpKSxuPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSsxLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHMtdS52YWx1ZXModCkpOyhuPml8fG49PT1pJiYodD09PXUuX2xhc3RDaGFuZ2VkVmFsdWV8fHUudmFsdWVzKHQpPT09ZC5taW4pKSYmKG49aSxhPWUodGhpcyksbz10KX0pLHI9dGhpcy5fc3RhcnQodCxvKSxyPT09ITE/ITE6KHRoaXMuX21vdXNlU2xpZGluZz0hMCx0aGlzLl9oYW5kbGVJbmRleD1vLGEuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmZvY3VzKCksaD1hLm9mZnNldCgpLGw9IWUodC50YXJnZXQpLnBhcmVudHMoKS5hZGRCYWNrKCkuaXMoIi51aS1zbGlkZXItaGFuZGxlIiksdGhpcy5fY2xpY2tPZmZzZXQ9bD97bGVmdDowLHRvcDowfTp7bGVmdDp0LnBhZ2VYLWgubGVmdC1hLndpZHRoKCkvMix0b3A6dC5wYWdlWS1oLnRvcC1hLmhlaWdodCgpLzItKHBhcnNlSW50KGEuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGEuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGEuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDApfSx0aGlzLmhhbmRsZXMuaGFzQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil8fHRoaXMuX3NsaWRlKHQsbyxzKSx0aGlzLl9hbmltYXRlT2ZmPSEwLCEwKSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7dmFyIHQ9e3g6ZS5wYWdlWCx5OmUucGFnZVl9LGk9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKHQpO3JldHVybiB0aGlzLl9zbGlkZShlLHRoaXMuX2hhbmRsZUluZGV4LGkpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9zdG9wKGUsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2NoYW5nZShlLHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2NsaWNrT2Zmc2V0PW51bGwsdGhpcy5fYW5pbWF0ZU9mZj0hMSwhMX0sX2RldGVjdE9yaWVudGF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiPT09dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwifSxfbm9ybVZhbHVlRnJvbU1vdXNlOmZ1bmN0aW9uKGUpe3ZhciB0LGkscyxuLGE7cmV0dXJuImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8odD10aGlzLmVsZW1lbnRTaXplLndpZHRoLGk9ZS54LXRoaXMuZWxlbWVudE9mZnNldC5sZWZ0LSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC5sZWZ0OjApKToodD10aGlzLmVsZW1lbnRTaXplLmhlaWdodCxpPWUueS10aGlzLmVsZW1lbnRPZmZzZXQudG9wLSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC50b3A6MCkpLHM9aS90LHM+MSYmKHM9MSksMD5zJiYocz0wKSwidmVydGljYWwiPT09dGhpcy5vcmllbnRhdGlvbiYmKHM9MS1zKSxuPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSxhPXRoaXMuX3ZhbHVlTWluKCkrcypuLHRoaXMuX3RyaW1BbGlnblZhbHVlKGEpfSxfc3RhcnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaT17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKGkudmFsdWU9dGhpcy52YWx1ZXModCksaS52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLGUsaSl9LF9zbGlkZTpmdW5jdGlvbihlLHQsaSl7dmFyIHMsbixhO3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoPyhzPXRoaXMudmFsdWVzKHQ/MDoxKSwyPT09dGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJnRoaXMub3B0aW9ucy5yYW5nZT09PSEwJiYoMD09PXQmJmk+c3x8MT09PXQmJnM+aSkmJihpPXMpLGkhPT10aGlzLnZhbHVlcyh0KSYmKG49dGhpcy52YWx1ZXMoKSxuW3RdPWksYT10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTppLHZhbHVlczpufSkscz10aGlzLnZhbHVlcyh0PzA6MSksYSE9PSExJiZ0aGlzLnZhbHVlcyh0LGkpKSk6aSE9PXRoaXMudmFsdWUoKSYmKGE9dGhpcy5fdHJpZ2dlcigic2xpZGUiLGUse2hhbmRsZTp0aGlzLmhhbmRsZXNbdF0sdmFsdWU6aX0pLGEhPT0hMSYmdGhpcy52YWx1ZShpKSl9LF9zdG9wOmZ1bmN0aW9uKGUsdCl7dmFyIGk9e2hhbmRsZTp0aGlzLmhhbmRsZXNbdF0sdmFsdWU6dGhpcy52YWx1ZSgpfTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKGkudmFsdWU9dGhpcy52YWx1ZXModCksaS52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcigic3RvcCIsZSxpKX0sX2NoYW5nZTpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLl9rZXlTbGlkaW5nJiYhdGhpcy5fbW91c2VTbGlkaW5nKXt2YXIgaT17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYoaS52YWx1ZT10aGlzLnZhbHVlcyh0KSxpLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl9sYXN0Q2hhbmdlZFZhbHVlPXQsdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlLGkpfX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx2b2lkIDApOnRoaXMuX3ZhbHVlKCl9LHZhbHVlczpmdW5jdGlvbih0LGkpe3ZhciBzLG4sYTtpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXNbdF09dGhpcy5fdHJpbUFsaWduVmFsdWUoaSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsdCksdm9pZCAwO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl92YWx1ZXMoKTtpZighZS5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuX3ZhbHVlcyh0KTp0aGlzLnZhbHVlKCk7Zm9yKHM9dGhpcy5vcHRpb25zLnZhbHVlcyxuPWFyZ3VtZW50c1swXSxhPTA7cy5sZW5ndGg+YTthKz0xKXNbYV09dGhpcy5fdHJpbUFsaWduVmFsdWUoblthXSksdGhpcy5fY2hhbmdlKG51bGwsYSk7dGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxpKXt2YXIgcyxuPTA7c3dpdGNoKCJyYW5nZSI9PT10JiZ0aGlzLm9wdGlvbnMucmFuZ2U9PT0hMCYmKCJtaW4iPT09aT8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3ZhbHVlcygwKSx0aGlzLm9wdGlvbnMudmFsdWVzPW51bGwpOiJtYXgiPT09aSYmKHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl92YWx1ZXModGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgtMSksdGhpcy5vcHRpb25zLnZhbHVlcz1udWxsKSksZS5pc0FycmF5KHRoaXMub3B0aW9ucy52YWx1ZXMpJiYobj10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksImRpc2FibGVkIj09PXQmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhaSksdGhpcy5fc3VwZXIodCxpKSx0KXtjYXNlIm9yaWVudGF0aW9uIjp0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIikuYWRkQ2xhc3MoInVpLXNsaWRlci0iK3RoaXMub3JpZW50YXRpb24pLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuaGFuZGxlcy5jc3MoImhvcml6b250YWwiPT09aT8iYm90dG9tIjoibGVmdCIsIiIpO2JyZWFrO2Nhc2UidmFsdWUiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsMCksdGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlInZhbHVlcyI6Zm9yKHRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCkscz0wO24+cztzKz0xKXRoaXMuX2NoYW5nZShudWxsLHMpO3RoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZSJzdGVwIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fY2FsY3VsYXRlTmV3TWF4KCksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlInJhbmdlIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9hbmltYXRlT2ZmPSExfX0sX3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLnZhbHVlO3JldHVybiBlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGUpfSxfdmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0LGkscztpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0PXRoaXMub3B0aW9ucy52YWx1ZXNbZV0sdD10aGlzLl90cmltQWxpZ25WYWx1ZSh0KTtpZih0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCl7Zm9yKGk9dGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpLHM9MDtpLmxlbmd0aD5zO3MrPTEpaVtzXT10aGlzLl90cmltQWxpZ25WYWx1ZShpW3NdKTtyZXR1cm4gaX1yZXR1cm5bXX0sX3RyaW1BbGlnblZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX3ZhbHVlTWluKCk+PWUpcmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7aWYoZT49dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTt2YXIgdD10aGlzLm9wdGlvbnMuc3RlcD4wP3RoaXMub3B0aW9ucy5zdGVwOjEsaT0oZS10aGlzLl92YWx1ZU1pbigpKSV0LHM9ZS1pO3JldHVybiAyKk1hdGguYWJzKGkpPj10JiYocys9aT4wP3Q6LXQpLHBhcnNlRmxvYXQocy50b0ZpeGVkKDUpKX0sX2NhbGN1bGF0ZU5ld01heDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5tYXgsdD10aGlzLl92YWx1ZU1pbigpLGk9dGhpcy5vcHRpb25zLnN0ZXAscz1NYXRoLmZsb29yKCsoZS10KS50b0ZpeGVkKHRoaXMuX3ByZWNpc2lvbigpKS9pKSppO2U9cyt0LHRoaXMubWF4PXBhcnNlRmxvYXQoZS50b0ZpeGVkKHRoaXMuX3ByZWNpc2lvbigpKSl9LF9wcmVjaXNpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7cmV0dXJuIG51bGwhPT10aGlzLm9wdGlvbnMubWluJiYoZT1NYXRoLm1heChlLHRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5taW4pKSksZX0sX3ByZWNpc2lvbk9mOmZ1bmN0aW9uKGUpe3ZhciB0PSIiK2UsaT10LmluZGV4T2YoIi4iKTtyZXR1cm4tMT09PWk/MDp0Lmxlbmd0aC1pLTF9LF92YWx1ZU1pbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWlufSxfdmFsdWVNYXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXh9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbixhLG89dGhpcy5vcHRpb25zLnJhbmdlLHI9dGhpcy5vcHRpb25zLGg9dGhpcyxsPXRoaXMuX2FuaW1hdGVPZmY/ITE6ci5hbmltYXRlLHU9e307dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24ocyl7aT0xMDAqKChoLnZhbHVlcyhzKS1oLl92YWx1ZU1pbigpKS8oaC5fdmFsdWVNYXgoKS1oLl92YWx1ZU1pbigpKSksdVsiaG9yaXpvbnRhbCI9PT1oLm9yaWVudGF0aW9uPyJsZWZ0IjoiYm90dG9tIl09aSsiJSIsZSh0aGlzKS5zdG9wKDEsMSlbbD8iYW5pbWF0ZSI6ImNzcyJdKHUsci5hbmltYXRlKSxoLm9wdGlvbnMucmFuZ2U9PT0hMCYmKCJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24/KDA9PT1zJiZoLnJhbmdlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0oe2xlZnQ6aSsiJSJ9LHIuYW5pbWF0ZSksMT09PXMmJmgucmFuZ2VbbD8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDppLXQrIiUifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpOigwPT09cyYmaC5yYW5nZS5zdG9wKDEsMSlbbD8iYW5pbWF0ZSI6ImNzcyJdKHtib3R0b206aSsiJSJ9LHIuYW5pbWF0ZSksMT09PXMmJmgucmFuZ2VbbD8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6aS10KyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pKSksdD1pfSk6KHM9dGhpcy52YWx1ZSgpLG49dGhpcy5fdmFsdWVNaW4oKSxhPXRoaXMuX3ZhbHVlTWF4KCksaT1hIT09bj8xMDAqKChzLW4pLyhhLW4pKTowLHVbImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6ImJvdHRvbSJdPWkrIiUiLHRoaXMuaGFuZGxlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0odSxyLmFuaW1hdGUpLCJtaW4iPT09byYmImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbbD8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDppKyIlIn0sci5hbmltYXRlKSwibWF4Ij09PW8mJiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2VbbD8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDoxMDAtaSsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSwibWluIj09PW8mJiJ2ZXJ0aWNhbCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDppKyIlIn0sci5hbmltYXRlKSwibWF4Ij09PW8mJiJ2ZXJ0aWNhbCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlW2w/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OjEwMC1pKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pKX0sX2hhbmRsZUV2ZW50czp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYSxvPWUodC50YXJnZXQpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiKTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5IT01FOmNhc2UgZS51aS5rZXlDb2RlLkVORDpjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjpjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5SSUdIVDpjYXNlIGUudWkua2V5Q29kZS5ET1dOOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6aWYodC5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMCxlKHQudGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksaT10aGlzLl9zdGFydCh0LG8pLGk9PT0hMSkpcmV0dXJufXN3aXRjaChhPXRoaXMub3B0aW9ucy5zdGVwLHM9bj10aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLnZhbHVlcyhvKTp0aGlzLnZhbHVlKCksdC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5IT01FOm49dGhpcy5fdmFsdWVNaW4oKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6bj10aGlzLl92YWx1ZU1heCgpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6bj10aGlzLl90cmltQWxpZ25WYWx1ZShzKyh0aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkpL3RoaXMubnVtUGFnZXMpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjpuPXRoaXMuX3RyaW1BbGlnblZhbHVlKHMtKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvdGhpcy5udW1QYWdlcyk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6aWYocz09PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuO249dGhpcy5fdHJpbUFsaWduVmFsdWUocythKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5ET1dOOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6aWYocz09PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuO249dGhpcy5fdHJpbUFsaWduVmFsdWUocy1hKX10aGlzLl9zbGlkZSh0LG8sbil9LGtleXVwOmZ1bmN0aW9uKHQpe3ZhciBpPWUodC50YXJnZXQpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiKTt0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9zdG9wKHQsaSksdGhpcy5fY2hhbmdlKHQsaSksZSh0LnRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpKX19fSksZS53aWRnZXQoInVpLnNvcnRhYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjExLjQiLHdpZGdldEV2ZW50UHJlZml4OiJzb3J0IixyZWFkeTohMSxvcHRpb25zOnthcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RXaXRoOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZHJvcE9uRW1wdHk6ITAsZm9yY2VQbGFjZWhvbGRlclNpemU6ITEsZm9yY2VIZWxwZXJTaXplOiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjoib3JpZ2luYWwiLGl0ZW1zOiI+ICoiLG9wYWNpdHk6ITEscGxhY2Vob2xkZXI6ITEscmV2ZXJ0OiExLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzY29wZToiZGVmYXVsdCIsdG9sZXJhbmNlOiJpbnRlcnNlY3QiLHpJbmRleDoxZTMsYWN0aXZhdGU6bnVsbCxiZWZvcmVTdG9wOm51bGwsY2hhbmdlOm51bGwsZGVhY3RpdmF0ZTpudWxsLG91dDpudWxsLG92ZXI6bnVsbCxyZWNlaXZlOm51bGwscmVtb3ZlOm51bGwsc29ydDpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLHVwZGF0ZTpudWxsfSxfaXNPdmVyQXhpczpmdW5jdGlvbihlLHQsaSl7cmV0dXJuIGU+PXQmJnQraT5lfSxfaXNGbG9hdGluZzpmdW5jdGlvbihlKXtyZXR1cm4vbGVmdHxyaWdodC8udGVzdChlLmNzcygiZmxvYXQiKSl8fC9pbmxpbmV8dGFibGUtY2VsbC8udGVzdChlLmNzcygiZGlzcGxheSIpKX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQ2FjaGU9e30sdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zb3J0YWJsZSIpLHRoaXMucmVmcmVzaCgpLHRoaXMub2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLnJlYWR5PSEwfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc3VwZXIoZSx0KSwiaGFuZGxlIj09PWUmJnRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpfSxfc2V0SGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmZpbmQoIi51aS1zb3J0YWJsZS1oYW5kbGUiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGFuZGxlIiksZS5lYWNoKHRoaXMuaXRlbXMsZnVuY3Rpb24oKXsodGhpcy5pbnN0YW5jZS5vcHRpb25zLmhhbmRsZT90aGlzLml0ZW0uZmluZCh0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlKTp0aGlzLml0ZW0pLmFkZENsYXNzKCJ1aS1zb3J0YWJsZS1oYW5kbGUiKX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc29ydGFibGUgdWktc29ydGFibGUtZGlzYWJsZWQiKS5maW5kKCIudWktc29ydGFibGUtaGFuZGxlIikucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhhbmRsZSIpLHRoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMuaXRlbXNbZV0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iKTtyZXR1cm4gdGhpc30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0LGkpe3ZhciBzPW51bGwsbj0hMSxhPXRoaXM7cmV0dXJuIHRoaXMucmV2ZXJ0aW5nPyExOnRoaXMub3B0aW9ucy5kaXNhYmxlZHx8InN0YXRpYyI9PT10aGlzLm9wdGlvbnMudHlwZT8hMToodGhpcy5fcmVmcmVzaEl0ZW1zKHQpLGUodC50YXJnZXQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0YSh0aGlzLGEud2lkZ2V0TmFtZSsiLWl0ZW0iKT09PWE/KHM9ZSh0aGlzKSwhMSk6dm9pZCAwfSksZS5kYXRhKHQudGFyZ2V0LGEud2lkZ2V0TmFtZSsiLWl0ZW0iKT09PWEmJihzPWUodC50YXJnZXQpKSxzPyF0aGlzLm9wdGlvbnMuaGFuZGxlfHxpfHwoZSh0aGlzLm9wdGlvbnMuaGFuZGxlLHMpLmZpbmQoIioiKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3RoaXM9PT10LnRhcmdldCYmKG49ITApfSksbik/KHRoaXMuY3VycmVudEl0ZW09cyx0aGlzLl9yZW1vdmVDdXJyZW50c0Zyb21JdGVtcygpLCEwKTohMTohMSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhLG89dGhpcy5vcHRpb25zO2lmKHRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5jdXJyZW50SXRlbS5vZmZzZXQoKSx0aGlzLm9mZnNldD17dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5vZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH0sZS5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIiksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5vcmlnaW5hbFBhZ2VYPXQucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPXQucGFnZVksby5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihvLmN1cnNvckF0KSx0aGlzLmRvbVBvc2l0aW9uPXtwcmV2OnRoaXMuY3VycmVudEl0ZW0ucHJldigpWzBdLHBhcmVudDp0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdfSx0aGlzLmhlbHBlclswXSE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuY3VycmVudEl0ZW0uaGlkZSgpLHRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyKCksby5jb250YWlubWVudCYmdGhpcy5fc2V0Q29udGFpbm1lbnQoKSxvLmN1cnNvciYmImF1dG8iIT09by5jdXJzb3ImJihhPXRoaXMuZG9jdW1lbnQuZmluZCgiYm9keSIpLHRoaXMuc3RvcmVkQ3Vyc29yPWEuY3NzKCJjdXJzb3IiKSxhLmNzcygiY3Vyc29yIixvLmN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0PWUoIjxzdHlsZT4qeyBjdXJzb3I6ICIrby5jdXJzb3IrIiAhaW1wb3J0YW50OyB9PC9zdHlsZT4iKS5hcHBlbmRUbyhhKSksby5vcGFjaXR5JiYodGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikmJih0aGlzLl9zdG9yZWRPcGFjaXR5PXRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIpKSx0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLG8ub3BhY2l0eSkpLG8uekluZGV4JiYodGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSYmKHRoaXMuX3N0b3JlZFpJbmRleD10aGlzLmhlbHBlci5jc3MoInpJbmRleCIpKSx0aGlzLmhlbHBlci5jc3MoInpJbmRleCIsby56SW5kZXgpKSx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJiJIVE1MIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUmJih0aGlzLm92ZXJmbG93T2Zmc2V0PXRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5fcHJlc2VydmVIZWxwZXJQcm9wb3J0aW9uc3x8dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCFzKWZvcihuPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtuPj0wO24tLSl0aGlzLmNvbnRhaW5lcnNbbl0uX3RyaWdnZXIoImFjdGl2YXRlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSk7DQpyZXR1cm4gZS51aS5kZG1hbmFnZXImJihlLnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLGUudWkuZGRtYW5hZ2VyJiYhby5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLHRoaXMuX21vdXNlRHJhZyh0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYSxvPXRoaXMub3B0aW9ucyxyPSExO2Zvcih0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpLHRoaXMub3B0aW9ucy5zY3JvbGwmJih0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJiJIVE1MIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWU/KHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC10LnBhZ2VZPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK28uc2Nyb2xsU3BlZWQ6dC5wYWdlWS10aGlzLm92ZXJmbG93T2Zmc2V0LnRvcDxvLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLW8uc2Nyb2xsU3BlZWQpLHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC10LnBhZ2VYPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrby5zY3JvbGxTcGVlZDp0LnBhZ2VYLXRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdDxvLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtby5zY3JvbGxTcGVlZCkpOih0LnBhZ2VZLXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCk8by5zY3JvbGxTZW5zaXRpdml0eT9yPXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCktby5zY3JvbGxTcGVlZCk6dGhpcy53aW5kb3cuaGVpZ2h0KCktKHQucGFnZVktdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSk8by5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dGhpcy5kb2N1bWVudC5zY3JvbGxUb3AodGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKStvLnNjcm9sbFNwZWVkKSksdC5wYWdlWC10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKTxvLnNjcm9sbFNlbnNpdGl2aXR5P3I9dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLW8uc2Nyb2xsU3BlZWQpOnRoaXMud2luZG93LndpZHRoKCktKHQucGFnZVgtdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkpPG8uc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCh0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKStvLnNjcm9sbFNwZWVkKSkpLHIhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFvLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCkpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksdGhpcy5vcHRpb25zLmF4aXMmJiJ5Ij09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IiksdGhpcy5vcHRpb25zLmF4aXMmJiJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIpLGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlpZihzPXRoaXMuaXRlbXNbaV0sbj1zLml0ZW1bMF0sYT10aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIocyksYSYmcy5pbnN0YW5jZT09PXRoaXMuY3VycmVudENvbnRhaW5lciYmbiE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMucGxhY2Vob2xkZXJbMT09PWE/Im5leHQiOiJwcmV2Il0oKVswXSE9PW4mJiFlLmNvbnRhaW5zKHRoaXMucGxhY2Vob2xkZXJbMF0sbikmJigic2VtaS1keW5hbWljIj09PXRoaXMub3B0aW9ucy50eXBlPyFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxuKTohMCkpe2lmKHRoaXMuZGlyZWN0aW9uPTE9PT1hPyJkb3duIjoidXAiLCJwb2ludGVyIiE9PXRoaXMub3B0aW9ucy50b2xlcmFuY2UmJiF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKHMpKWJyZWFrO3RoaXMuX3JlYXJyYW5nZSh0LHMpLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2goKSk7YnJlYWt9cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKHQpLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsdCksdGhpcy5fdHJpZ2dlcigic29ydCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0LGkpe2lmKHQpe2lmKGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSx0aGlzLm9wdGlvbnMucmV2ZXJ0KXt2YXIgcz10aGlzLG49dGhpcy5wbGFjZWhvbGRlci5vZmZzZXQoKSxhPXRoaXMub3B0aW9ucy5heGlzLG89e307YSYmIngiIT09YXx8KG8ubGVmdD1uLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLGEmJiJ5IiE9PWF8fChvLnRvcD1uLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLXRoaXMubWFyZ2lucy50b3ArKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsVG9wKSksdGhpcy5yZXZlcnRpbmc9ITAsZSh0aGlzLmhlbHBlcikuYW5pbWF0ZShvLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnQsMTApfHw1MDAsZnVuY3Rpb24oKXtzLl9jbGVhcih0KX0pfWVsc2UgdGhpcy5fY2xlYXIodCxpKTtyZXR1cm4hMX19LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAoe3RhcmdldDpudWxsfSksIm9yaWdpbmFsIj09PXRoaXMub3B0aW9ucy5oZWxwZXI/dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik6dGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHZhciB0PXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLmNvbnRhaW5lcnNbdF0uX3RyaWdnZXIoImRlYWN0aXZhdGUiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbdF0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcigib3V0IixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3RdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9cmV0dXJuIHRoaXMucGxhY2Vob2xkZXImJih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUmJnRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSwib3JpZ2luYWwiIT09dGhpcy5vcHRpb25zLmhlbHBlciYmdGhpcy5oZWxwZXImJnRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUmJnRoaXMuaGVscGVyLnJlbW92ZSgpLGUuZXh0ZW5kKHRoaXMse2hlbHBlcjpudWxsLGRyYWdnaW5nOiExLHJldmVydGluZzohMSxfbm9GaW5hbFNvcnQ6bnVsbH0pLHRoaXMuZG9tUG9zaXRpb24ucHJldj9lKHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSk6ZSh0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCkucHJlcGVuZCh0aGlzLmN1cnJlbnRJdGVtKSksdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkodCYmdC5jb25uZWN0ZWQpLHM9W107cmV0dXJuIHQ9dHx8e30sZShpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9KGUodC5pdGVtfHx0aGlzKS5hdHRyKHQuYXR0cmlidXRlfHwiaWQiKXx8IiIpLm1hdGNoKHQuZXhwcmVzc2lvbnx8LyguKylbXC09X10oLispLyk7aSYmcy5wdXNoKCh0LmtleXx8aVsxXSsiW10iKSsiPSIrKHQua2V5JiZ0LmV4cHJlc3Npb24/aVsxXTppWzJdKSl9KSwhcy5sZW5ndGgmJnQua2V5JiZzLnB1c2godC5rZXkrIj0iKSxzLmpvaW4oIiYiKX0sdG9BcnJheTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxzPVtdO3JldHVybiB0PXR8fHt9LGkuZWFjaChmdW5jdGlvbigpe3MucHVzaChlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKX0pLHN9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLmxlZnQsaT10K3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgscz10aGlzLnBvc2l0aW9uQWJzLnRvcCxuPXMrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsYT1lLmxlZnQsbz1hK2Uud2lkdGgscj1lLnRvcCxoPXIrZS5oZWlnaHQsbD10aGlzLm9mZnNldC5jbGljay50b3AsdT10aGlzLm9mZnNldC5jbGljay5sZWZ0LGQ9IngiPT09dGhpcy5vcHRpb25zLmF4aXN8fHMrbD5yJiZoPnMrbCxjPSJ5Ij09PXRoaXMub3B0aW9ucy5heGlzfHx0K3U+YSYmbz50K3UscD1kJiZjO3JldHVybiJwb2ludGVyIj09PXRoaXMub3B0aW9ucy50b2xlcmFuY2V8fHRoaXMub3B0aW9ucy5mb3JjZVBvaW50ZXJGb3JDb250YWluZXJzfHwicG9pbnRlciIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0Il0+ZVt0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdP3A6dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI+YSYmbz5pLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmcyt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPnImJmg+bi10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yfSxfaW50ZXJzZWN0c1dpdGhQb2ludGVyOmZ1bmN0aW9uKGUpe3ZhciB0PSJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCxlLnRvcCxlLmhlaWdodCksaT0ieSI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQsZS53aWR0aCkscz10JiZpLG49dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksYT10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiBzP3RoaXMuZmxvYXRpbmc/YSYmInJpZ2h0Ij09PWF8fCJkb3duIj09PW4/MjoxOm4mJigiZG93biI9PT1uPzI6MSk6ITF9LF9pbnRlcnNlY3RzV2l0aFNpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGUudG9wK2UuaGVpZ2h0LzIsZS5oZWlnaHQpLGk9dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQrZS53aWR0aC8yLGUud2lkdGgpLHM9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksbj10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZuPyJyaWdodCI9PT1uJiZpfHwibGVmdCI9PT1uJiYhaTpzJiYoImRvd24iPT09cyYmdHx8InVwIj09PXMmJiF0KX0sX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtyZXR1cm4gMCE9PWUmJihlPjA/ImRvd24iOiJ1cCIpfSxfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtyZXR1cm4gMCE9PWUmJihlPjA/InJpZ2h0IjoibGVmdCIpfSxyZWZyZXNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZWZyZXNoSXRlbXMoZSksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT09U3RyaW5nP1tlLmNvbm5lY3RXaXRoXTplLmNvbm5lY3RXaXRofSxfZ2V0SXRlbXNBc2pRdWVyeTpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7ci5wdXNoKHRoaXMpfXZhciBzLG4sYSxvLHI9W10saD1bXSxsPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYobCYmdClmb3Iocz1sLmxlbmd0aC0xO3M+PTA7cy0tKWZvcihhPWUobFtzXSx0aGlzLmRvY3VtZW50WzBdKSxuPWEubGVuZ3RoLTE7bj49MDtuLS0pbz1lLmRhdGEoYVtuXSx0aGlzLndpZGdldEZ1bGxOYW1lKSxvJiZvIT09dGhpcyYmIW8ub3B0aW9ucy5kaXNhYmxlZCYmaC5wdXNoKFtlLmlzRnVuY3Rpb24oby5vcHRpb25zLml0ZW1zKT9vLm9wdGlvbnMuaXRlbXMuY2FsbChvLmVsZW1lbnQpOmUoby5vcHRpb25zLml0ZW1zLG8uZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxvXSk7Zm9yKGgucHVzaChbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSkscz1oLmxlbmd0aC0xO3M+PTA7cy0tKWhbc11bMF0uZWFjaChpKTtyZXR1cm4gZShyKX0sX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50SXRlbS5maW5kKCI6ZGF0YSgiK3RoaXMud2lkZ2V0TmFtZSsiLWl0ZW0pIik7dGhpcy5pdGVtcz1lLmdyZXAodGhpcy5pdGVtcyxmdW5jdGlvbihlKXtmb3IodmFyIGk9MDt0Lmxlbmd0aD5pO2krKylpZih0W2ldPT09ZS5pdGVtWzBdKXJldHVybiExO3JldHVybiEwfSl9LF9yZWZyZXNoSXRlbXM6ZnVuY3Rpb24odCl7dGhpcy5pdGVtcz1bXSx0aGlzLmNvbnRhaW5lcnM9W3RoaXNdO3ZhciBpLHMsbixhLG8scixoLGwsdT10aGlzLml0ZW1zLGQ9W1tlLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sdCx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZSh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KSx0aGlzXV0sYz10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGMmJnRoaXMucmVhZHkpZm9yKGk9Yy5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobj1lKGNbaV0sdGhpcy5kb2N1bWVudFswXSkscz1uLmxlbmd0aC0xO3M+PTA7cy0tKWE9ZS5kYXRhKG5bc10sdGhpcy53aWRnZXRGdWxsTmFtZSksYSYmYSE9PXRoaXMmJiFhLm9wdGlvbnMuZGlzYWJsZWQmJihkLnB1c2goW2UuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudFswXSx0LHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTplKGEub3B0aW9ucy5pdGVtcyxhLmVsZW1lbnQpLGFdKSx0aGlzLmNvbnRhaW5lcnMucHVzaChhKSk7Zm9yKGk9ZC5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobz1kW2ldWzFdLHI9ZFtpXVswXSxzPTAsbD1yLmxlbmd0aDtsPnM7cysrKWg9ZShyW3NdKSxoLmRhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIsbyksdS5wdXNoKHtpdGVtOmgsaW5zdGFuY2U6byx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKHQpe3RoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/IngiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5pdGVtc1swXS5pdGVtKTohMSx0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO3ZhciBpLHMsbixhO2ZvcihpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pcz10aGlzLml0ZW1zW2ldLHMuaW5zdGFuY2UhPT10aGlzLmN1cnJlbnRDb250YWluZXImJnRoaXMuY3VycmVudENvbnRhaW5lciYmcy5pdGVtWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXXx8KG49dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/ZSh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxzLml0ZW0pOnMuaXRlbSx0fHwocy53aWR0aD1uLm91dGVyV2lkdGgoKSxzLmhlaWdodD1uLm91dGVySGVpZ2h0KCkpLGE9bi5vZmZzZXQoKSxzLmxlZnQ9YS5sZWZ0LHMudG9wPWEudG9wKTtpZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcihpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSlhPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm9mZnNldCgpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5sZWZ0PWEubGVmdCx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUudG9wPWEudG9wLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlckhlaWdodCgpO3JldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCl7dD10fHx0aGlzO3ZhciBpLHM9dC5vcHRpb25zO3MucGxhY2Vob2xkZXImJnMucGxhY2Vob2xkZXIuY29uc3RydWN0b3IhPT1TdHJpbmd8fChpPXMucGxhY2Vob2xkZXIscy5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciBzPXQuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPWUoIjwiK3MrIj4iLHQuZG9jdW1lbnRbMF0pLmFkZENsYXNzKGl8fHQuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lKyIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik7cmV0dXJuInRib2R5Ij09PXM/dC5fY3JlYXRlVHJQbGFjZWhvbGRlcih0LmN1cnJlbnRJdGVtLmZpbmQoInRyIikuZXEoMCksZSgiPHRyPiIsdC5kb2N1bWVudFswXSkuYXBwZW5kVG8obikpOiJ0ciI9PT1zP3QuX2NyZWF0ZVRyUGxhY2Vob2xkZXIodC5jdXJyZW50SXRlbSxuKToiaW1nIj09PXMmJm4uYXR0cigic3JjIix0LmN1cnJlbnRJdGVtLmF0dHIoInNyYyIpKSxpfHxuLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLG59LHVwZGF0ZTpmdW5jdGlvbihlLG4peyghaXx8cy5mb3JjZVBsYWNlaG9sZGVyU2l6ZSkmJihuLmhlaWdodCgpfHxuLmhlaWdodCh0LmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdUb3AiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdCb3R0b20iKXx8MCwxMCkpLG4ud2lkdGgoKXx8bi53aWR0aCh0LmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdSaWdodCIpfHwwLDEwKSkpfX0pLHQucGxhY2Vob2xkZXI9ZShzLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbCh0LmVsZW1lbnQsdC5jdXJyZW50SXRlbSkpLHQuY3VycmVudEl0ZW0uYWZ0ZXIodC5wbGFjZWhvbGRlcikscy5wbGFjZWhvbGRlci51cGRhdGUodCx0LnBsYWNlaG9sZGVyKX0sX2NyZWF0ZVRyUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz10aGlzO3QuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7ZSgiPHRkPiYjMTYwOzwvdGQ+IixzLmRvY3VtZW50WzBdKS5hdHRyKCJjb2xzcGFuIixlKHRoaXMpLmF0dHIoImNvbHNwYW4iKXx8MSkuYXBwZW5kVG8oaSl9KX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scixoLGwsdSxkLGM9bnVsbCxwPW51bGw7Zm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKCFlLmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWlmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKGMmJmUuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sYy5lbGVtZW50WzBdKSljb250aW51ZTtjPXRoaXMuY29udGFpbmVyc1tpXSxwPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYoYylpZigxPT09dGhpcy5jb250YWluZXJzLmxlbmd0aCl0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcnx8KHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyPTEpO2Vsc2V7Zm9yKG49MWU0LGE9bnVsbCx1PWMuZmxvYXRpbmd8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5jdXJyZW50SXRlbSksbz11PyJsZWZ0IjoidG9wIixyPXU/IndpZHRoIjoiaGVpZ2h0IixkPXU/ImNsaWVudFgiOiJjbGllbnRZIixzPXRoaXMuaXRlbXMubGVuZ3RoLTE7cz49MDtzLS0pZS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudFswXSx0aGlzLml0ZW1zW3NdLml0ZW1bMF0pJiZ0aGlzLml0ZW1zW3NdLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYoaD10aGlzLml0ZW1zW3NdLml0ZW0ub2Zmc2V0KClbb10sbD0hMSx0W2RdLWg+dGhpcy5pdGVtc1tzXVtyXS8yJiYobD0hMCksbj5NYXRoLmFicyh0W2RdLWgpJiYobj1NYXRoLmFicyh0W2RdLWgpLGE9dGhpcy5pdGVtc1tzXSx0aGlzLmRpcmVjdGlvbj1sPyJ1cCI6ImRvd24iKSk7aWYoIWEmJiF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpcmV0dXJuO2lmKHRoaXMuY3VycmVudENvbnRhaW5lcj09PXRoaXMuY29udGFpbmVyc1twXSlyZXR1cm4gdGhpcy5jdXJyZW50Q29udGFpbmVyLmNvbnRhaW5lckNhY2hlLm92ZXJ8fCh0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyPTEpLHZvaWQgMDthP3RoaXMuX3JlYXJyYW5nZSh0LGEsbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKHQsbnVsbCx0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbcF0sdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRDb250YWluZXIsdGhpcy5wbGFjZWhvbGRlciksdGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3BdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX19LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9ZS5pc0Z1bmN0aW9uKGkuaGVscGVyKT9lKGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbdCx0aGlzLmN1cnJlbnRJdGVtXSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmN1cnJlbnRJdGVtLmNsb25lKCk6dGhpcy5jdXJyZW50SXRlbTtyZXR1cm4gcy5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxlKCJwYXJlbnQiIT09aS5hcHBlbmRUbz9pLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoc1swXSksc1swXT09PXRoaXMuY3VycmVudEl0ZW1bMF0mJih0aGlzLl9zdG9yZWRDU1M9e3dpZHRoOnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUuaGVpZ2h0LHBvc2l0aW9uOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJwb3NpdGlvbiIpLHRvcDp0aGlzLmN1cnJlbnRJdGVtLmNzcygidG9wIiksbGVmdDp0aGlzLmN1cnJlbnRJdGVtLmNzcygibGVmdCIpfSksKCFzWzBdLnN0eWxlLndpZHRofHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKSwoIXNbMF0uc3R5bGUuaGVpZ2h0fHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMuaGVpZ2h0KHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkpLHN9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3JldHVybiJhYnNvbHV0ZSI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJiJodG1sIj09PXRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmZS51aS5pZSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoInJlbGF0aXZlIj09PXRoaXMuY3NzUG9zaXRpb24pe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zOyJwYXJlbnQiPT09bi5jb250YWlubWVudCYmKG4uY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksKCJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50fHwid2luZG93Ij09PW4uY29udGFpbm1lbnQpJiYodGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwoImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LmhlaWdodCgpfHx0aGlzLmRvY3VtZW50WzBdLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKSwvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3Qobi5jb250YWlubWVudCl8fCh0PWUobi5jb250YWlubWVudClbMF0saT1lKG4uY29udGFpbm1lbnQpLm9mZnNldCgpLHM9ImhpZGRlbiIhPT1lKHQpLmNzcygib3ZlcmZsb3ciKSx0aGlzLmNvbnRhaW5tZW50PVtpLmxlZnQrKHBhcnNlSW50KGUodCkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LGkudG9wKyhwYXJzZUludChlKHQpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxpLmxlZnQrKHM/TWF0aC5tYXgodC5zY3JvbGxXaWR0aCx0Lm9mZnNldFdpZHRoKTp0Lm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUodCkuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsaS50b3ArKHM/TWF0aC5tYXgodC5zY3JvbGxIZWlnaHQsdC5vZmZzZXRIZWlnaHQpOnQub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZSh0KS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsaSl7aXx8KGk9dGhpcy5wb3NpdGlvbik7dmFyIHM9ImFic29sdXRlIj09PXQ/MTotMSxuPSJhYnNvbHV0ZSIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGE9LyhodG1sfGJvZHkpL2kudGVzdChuWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6aS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnMrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpzLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6YT8wOm4uc2Nyb2xsVG9wKCkpKnMsbGVmdDppLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpzK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnMtKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6YT8wOm4uc2Nyb2xsTGVmdCgpKSpzfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGkscyxuPXRoaXMub3B0aW9ucyxhPXQucGFnZVgsbz10LnBhZ2VZLHI9ImFic29sdXRlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsaD0vKGh0bWx8Ym9keSkvaS50ZXN0KHJbMF0udGFnTmFtZSk7cmV0dXJuInJlbGF0aXZlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLm9mZnNldFBhcmVudFswXXx8KHRoaXMub2Zmc2V0LnJlbGF0aXZlPXRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpLHRoaXMub3JpZ2luYWxQb3NpdGlvbiYmKHRoaXMuY29udGFpbm1lbnQmJih0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSYmKGE9dGhpcy5jb250YWlubWVudFswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdJiYobz10aGlzLmNvbnRhaW5tZW50WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0mJihhPXRoaXMuY29udGFpbm1lbnRbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250YWlubWVudFszXSYmKG89dGhpcy5jb250YWlubWVudFszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxuLmdyaWQmJihpPXRoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWSkvbi5ncmlkWzFdKSpuLmdyaWRbMV0sbz10aGlzLmNvbnRhaW5tZW50P2ktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdJiZpLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDw9dGhpcy5jb250YWlubWVudFszXT9pOmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdP2ktbi5ncmlkWzFdOmkrbi5ncmlkWzFdOmkscz10aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoYS10aGlzLm9yaWdpbmFsUGFnZVgpL24uZ3JpZFswXSkqbi5ncmlkWzBdLGE9dGhpcy5jb250YWlubWVudD9zLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0mJnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdDw9dGhpcy5jb250YWlubWVudFsyXT9zOnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49dGhpcy5jb250YWlubWVudFswXT9zLW4uZ3JpZFswXTpzK24uZ3JpZFswXTpzKSkse3RvcDpvLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmg/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OmEtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOmg/MDpyLnNjcm9sbExlZnQoKSl9fSxfcmVhcnJhbmdlOmZ1bmN0aW9uKGUsdCxpLHMpe2k/aVswXS5hcHBlbmRDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKTp0Lml0ZW1bMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5wbGFjZWhvbGRlclswXSwiZG93biI9PT10aGlzLmRpcmVjdGlvbj90Lml0ZW1bMF06dC5pdGVtWzBdLm5leHRTaWJsaW5nKSx0aGlzLmNvdW50ZXI9dGhpcy5jb3VudGVyPysrdGhpcy5jb3VudGVyOjE7dmFyIG49dGhpcy5jb3VudGVyO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7bj09PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFzKX0pfSxfY2xlYXI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUsdCxpKXtyZXR1cm4gZnVuY3Rpb24ocyl7aS5fdHJpZ2dlcihlLHMsdC5fdWlIYXNoKHQpKX19dGhpcy5yZXZlcnRpbmc9ITE7dmFyIHMsbj1bXTtpZighdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsLHRoaXMuaGVscGVyWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKHMgaW4gdGhpcy5fc3RvcmVkQ1NTKSgiYXV0byI9PT10aGlzLl9zdG9yZWRDU1Nbc118fCJzdGF0aWMiPT09dGhpcy5fc3RvcmVkQ1NTW3NdKSYmKHRoaXMuX3N0b3JlZENTU1tzXT0iIik7dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIil9ZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodGhpcy5mcm9tT3V0c2lkZSYmIXQmJm4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZWNlaXZlIixlLHRoaXMuX3VpSGFzaCh0aGlzLmZyb21PdXRzaWRlKSl9KSwhdGhpcy5mcm9tT3V0c2lkZSYmdGhpcy5kb21Qb3NpdGlvbi5wcmV2PT09dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF0mJnRoaXMuZG9tUG9zaXRpb24ucGFyZW50PT09dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXXx8dHx8bi5wdXNoKGZ1bmN0aW9uKGUpe3RoaXMuX3RyaWdnZXIoInVwZGF0ZSIsZSx0aGlzLl91aUhhc2goKSl9KSx0aGlzIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiYodHx8KG4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZW1vdmUiLGUsdGhpcy5fdWlIYXNoKCkpfSksbi5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJyZWNlaXZlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSksbi5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJ1cGRhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSkpLHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXR8fG4ucHVzaChpKCJkZWFjdGl2YXRlIix0aGlzLHRoaXMuY29udGFpbmVyc1tzXSkpLHRoaXMuY29udGFpbmVyc1tzXS5jb250YWluZXJDYWNoZS5vdmVyJiYobi5wdXNoKGkoIm91dCIsdGhpcyx0aGlzLmNvbnRhaW5lcnNbc10pKSx0aGlzLmNvbnRhaW5lcnNbc10uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZih0aGlzLnN0b3JlZEN1cnNvciYmKHRoaXMuZG9jdW1lbnQuZmluZCgiYm9keSIpLmNzcygiY3Vyc29yIix0aGlzLnN0b3JlZEN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0LnJlbW92ZSgpKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLCJhdXRvIj09PXRoaXMuX3N0b3JlZFpJbmRleD8iIjp0aGlzLl9zdG9yZWRaSW5kZXgpLHRoaXMuZHJhZ2dpbmc9ITEsdHx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8KHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCksIXQpe2ZvcihzPTA7bi5sZW5ndGg+cztzKyspbltzXS5jYWxsKHRoaXMsZSk7dGhpcy5fdHJpZ2dlcigic3RvcCIsZSx0aGlzLl91aUhhc2goKSl9cmV0dXJuIHRoaXMuZnJvbU91dHNpZGU9ITEsIXRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbH0sX3RyaWdnZXI6ZnVuY3Rpb24oKXtlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpPT09ITEmJnRoaXMuY2FuY2VsKCl9LF91aUhhc2g6ZnVuY3Rpb24odCl7dmFyIGk9dHx8dGhpcztyZXR1cm57aGVscGVyOmkuaGVscGVyLHBsYWNlaG9sZGVyOmkucGxhY2Vob2xkZXJ8fGUoW10pLHBvc2l0aW9uOmkucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjppLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OmkucG9zaXRpb25BYnMsaXRlbTppLmN1cnJlbnRJdGVtLHNlbmRlcjp0P3QuZWxlbWVudDpudWxsfX19KSxlLndpZGdldCgidWkuc3Bpbm5lciIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLHdpZGdldEV2ZW50UHJlZml4OiJzcGluIixvcHRpb25zOntjdWx0dXJlOm51bGwsaWNvbnM6e2Rvd246InVpLWljb24tdHJpYW5nbGUtMS1zIix1cDoidWktaWNvbi10cmlhbmdsZS0xLW4ifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oIm1heCIsdGhpcy5vcHRpb25zLm1heCksdGhpcy5fc2V0T3B0aW9uKCJtaW4iLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbigic3RlcCIsdGhpcy5vcHRpb25zLnN0ZXApLCIiIT09dGhpcy52YWx1ZSgpJiZ0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCksITApLHRoaXMuX2RyYXcoKSx0aGlzLl9vbih0aGlzLl9ldmVudHMpLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXt9LGk9dGhpcy5lbGVtZW50O3JldHVybiBlLmVhY2goWyJtaW4iLCJtYXgiLCJzdGVwIl0sZnVuY3Rpb24oZSxzKXt2YXIgbj1pLmF0dHIocyk7dm9pZCAwIT09biYmbi5sZW5ndGgmJih0W3NdPW4pfSksdH0sX2V2ZW50czp7a2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLl9zdGFydChlKSYmdGhpcy5fa2V5ZG93bihlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDoiX3N0b3AiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz10aGlzLmVsZW1lbnQudmFsKCl9LGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix2b2lkIDApOih0aGlzLl9zdG9wKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMucHJldmlvdXMhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSksdm9pZCAwKX0sbW91c2V3aGVlbDpmdW5jdGlvbihlLHQpe2lmKHQpe2lmKCF0aGlzLnNwaW5uaW5nJiYhdGhpcy5fc3RhcnQoZSkpcmV0dXJuITE7dGhpcy5fc3BpbigodD4wPzE6LTEpKnRoaXMub3B0aW9ucy5zdGVwLGUpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5tb3VzZXdoZWVsVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnNwaW5uaW5nJiZ0aGlzLl9zdG9wKGUpfSwxMDApLGUucHJldmVudERlZmF1bHQoKX19LCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIjpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50O2V8fCh0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXN9KSl9dmFyIHM7cz10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ/dGhpcy5wcmV2aW91czp0aGlzLmVsZW1lbnQudmFsKCksdC5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLGkuY2FsbCh0aGlzKX0pLHRoaXMuX3N0YXJ0KHQpIT09ITEmJnRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZXVwIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIiwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe3JldHVybiBlKHQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpP3RoaXMuX3N0YXJ0KHQpPT09ITE/ITE6KHRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCksdm9pZCAwKTp2b2lkIDB9LCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIn0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSk7dGhpcy5lbGVtZW50LmF0dHIoInJvbGUiLCJzcGluYnV0dG9uIiksdGhpcy5idXR0b25zPWUuZmluZCgiLnVpLXNwaW5uZXItYnV0dG9uIikuYXR0cigidGFiSW5kZXgiLC0xKS5idXR0b24oKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLHRoaXMuYnV0dG9ucy5oZWlnaHQoKT5NYXRoLmNlaWwoLjUqZS5oZWlnaHQoKSkmJmUuaGVpZ2h0KCk+MCYmZS5oZWlnaHQoZS5oZWlnaHQoKSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmRpc2FibGUoKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9ZS51aS5rZXlDb2RlO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2Ugcy5VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsMSx0KSwhMDtjYXNlIHMuRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLTEsdCksITA7Y2FzZSBzLlBBR0VfVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLGkucGFnZSx0KSwhMDtjYXNlIHMuUEFHRV9ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtaS5wYWdlLHQpLCEwfXJldHVybiExfSxfdWlTcGlubmVySHRtbDpmdW5jdGlvbigpe3JldHVybiI8c3BhbiBjbGFzcz0ndWktc3Bpbm5lciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPiJ9LF9idXR0b25IdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwIHVpLWNvcm5lci10cic+PHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMudXArIic+JiM5NjUwOzwvc3Bhbj4iKyI8L2E+IisiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93biB1aS1jb3JuZXItYnInPiIrIjxzcGFuIGNsYXNzPSd1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmRvd24rIic+JiM5NjYwOzwvc3Bhbj4iKyI8L2E+In0sX3N0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNwaW5uaW5nfHx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSkhPT0hMT8odGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApOiExfSxfcmVwZWF0OmZ1bmN0aW9uKGUsdCxpKXtlPWV8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCx0LGkpfSxlKSx0aGlzLl9zcGluKHQqdGhpcy5vcHRpb25zLnN0ZXAsaSl9LF9zcGluOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxpPXRoaXMuX2FkanVzdFZhbHVlKGkrZSp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSksdGhpcy5zcGlubmluZyYmdGhpcy5fdHJpZ2dlcigic3BpbiIsdCx7dmFsdWU6aX0pPT09ITF8fCh0aGlzLl92YWx1ZShpKSx0aGlzLmNvdW50ZXIrKyl9LF9pbmNyZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLmluY3JlbWVudGFsO3JldHVybiBpP2UuaXNGdW5jdGlvbihpKT9pKHQpOk1hdGguZmxvb3IodCp0KnQvNWU0LXQqdC81MDArMTcqdC8yMDArMSk6MX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIrZSxpPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09aT8wOnQubGVuZ3RoLWktMX0sX2FkanVzdFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LGkscz10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9bnVsbCE9PXMubWluP3MubWluOjAsaT1lLXQsaT1NYXRoLnJvdW5kKGkvcy5zdGVwKSpzLnN0ZXAsZT10K2ksZT1wYXJzZUZsb2F0KGUudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpLG51bGwhPT1zLm1heCYmZT5zLm1heD9zLm1heDpudWxsIT09cy5taW4mJnMubWluPmU/cy5taW46ZX0sX3N0b3A6ZnVuY3Rpb24oZSl7dGhpcy5zcGlubmluZyYmKGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMuY291bnRlcj0wLHRoaXMuc3Bpbm5pbmc9ITEsdGhpcy5fdHJpZ2dlcigic3RvcCIsZSkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoImN1bHR1cmUiPT09ZXx8Im51bWJlckZvcm1hdCI9PT1lKXt2YXIgaT10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO3JldHVybiB0aGlzLm9wdGlvbnNbZV09dCx0aGlzLmVsZW1lbnQudmFsKHRoaXMuX2Zvcm1hdChpKSksdm9pZCAwfSgibWF4Ij09PWV8fCJtaW4iPT09ZXx8InN0ZXAiPT09ZSkmJiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dGhpcy5fcGFyc2UodCkpLCJpY29ucyI9PT1lJiYodGhpcy5idXR0b25zLmZpcnN0KCkuZmluZCgiLnVpLWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMudXApLmFkZENsYXNzKHQudXApLHRoaXMuYnV0dG9ucy5sYXN0KCkuZmluZCgiLnVpLWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMuZG93bikuYWRkQ2xhc3ModC5kb3duKSksdGhpcy5fc3VwZXIoZSx0KSwiZGlzYWJsZWQiPT09ZSYmKHRoaXMud2lkZ2V0KCkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwhIXQpLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsISF0KSx0aGlzLmJ1dHRvbnMuYnV0dG9uKHQ/ImRpc2FibGUiOiJlbmFibGUiKSl9LF9zZXRPcHRpb25zOmgoZnVuY3Rpb24oZSl7dGhpcy5fc3VwZXIoZSl9KSxfcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWUmJihlPXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQoZSwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K2UpLCIiPT09ZXx8aXNOYU4oZSk/bnVsbDplfSxfZm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiIiPT09ZT8iIjp3aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5mb3JtYXQoZSx0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LHRoaXMub3B0aW9ucy5jdWx0dXJlKTplfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKHsiYXJpYS12YWx1ZW1pbiI6dGhpcy5vcHRpb25zLm1pbiwiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0pfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZSgpO3JldHVybiBudWxsPT09ZT8hMTplPT09dGhpcy5fYWRqdXN0VmFsdWUoZSl9LF92YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBpOyIiIT09ZSYmKGk9dGhpcy5fcGFyc2UoZSksbnVsbCE9PWkmJih0fHwoaT10aGlzLl9hZGp1c3RWYWx1ZShpKSksZT10aGlzLl9mb3JtYXQoaSkpKSx0aGlzLmVsZW1lbnQudmFsKGUpLHRoaXMuX3JlZnJlc2goKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5wcm9wKCJkaXNhYmxlZCIsITEpLnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnVpU3Bpbm5lci5yZXBsYWNlV2l0aCh0aGlzLmVsZW1lbnQpfSxzdGVwVXA6aChmdW5jdGlvbihlKXt0aGlzLl9zdGVwVXAoZSl9KSxfc3RlcFVwOmZ1bmN0aW9uKGUpe3RoaXMuX3N0YXJ0KCkmJih0aGlzLl9zcGluKChlfHwxKSp0aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0sc3RlcERvd246aChmdW5jdGlvbihlKXt0aGlzLl9zdGVwRG93bihlKX0pLF9zdGVwRG93bjpmdW5jdGlvbihlKXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigoZXx8MSkqLXRoaXMub3B0aW9ucy5zdGVwKSx0aGlzLl9zdG9wKCkpfSxwYWdlVXA6aChmdW5jdGlvbihlKXt0aGlzLl9zdGVwVXAoKGV8fDEpKnRoaXMub3B0aW9ucy5wYWdlKX0pLHBhZ2VEb3duOmgoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcERvd24oKGV8fDEpKnRoaXMub3B0aW9ucy5wYWdlKX0pLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoKHRoaXMuX3ZhbHVlKS5jYWxsKHRoaXMsZSksdm9pZCAwKTp0aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aVNwaW5uZXJ9fSksZS53aWRnZXQoInVpLnRhYnMiLHt2ZXJzaW9uOiIxLjExLjQiLGRlbGF5OjMwMCxvcHRpb25zOnthY3RpdmU6bnVsbCxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGhlaWdodFN0eWxlOiJjb250ZW50IixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfaXNMb2NhbDpmdW5jdGlvbigpe3ZhciBlPS8jLiokLztyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGksczt0PXQuY2xvbmVOb2RlKCExKSxpPXQuaHJlZi5yZXBsYWNlKGUsIiIpLHM9bG9jYXRpb24uaHJlZi5yZXBsYWNlKGUsIiIpO3RyeXtpPWRlY29kZVVSSUNvbXBvbmVudChpKX1jYXRjaChuKXt9dHJ5e3M9ZGVjb2RlVVJJQ29tcG9uZW50KHMpfWNhdGNoKG4pe31yZXR1cm4gdC5oYXNoLmxlbmd0aD4xJiZpPT09c319KCksX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10aGlzLm9wdGlvbnM7dGhpcy5ydW5uaW5nPSExLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS10YWJzLWNvbGxhcHNpYmxlIixpLmNvbGxhcHNpYmxlKSx0aGlzLl9wcm9jZXNzVGFicygpLGkuYWN0aXZlPXRoaXMuX2luaXRpYWxBY3RpdmUoKSxlLmlzQXJyYXkoaS5kaXNhYmxlZCkmJihpLmRpc2FibGVkPWUudW5pcXVlKGkuZGlzYWJsZWQuY29uY2F0KGUubWFwKHRoaXMudGFicy5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRhYnMuaW5kZXgoZSl9KSkpLnNvcnQoKSksdGhpcy5hY3RpdmU9dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoP3RoaXMuX2ZpbmRBY3RpdmUoaS5hY3RpdmUpOmUoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5hY3RpdmUubGVuZ3RoJiZ0aGlzLmxvYWQoaS5hY3RpdmUpfSxfaW5pdGlhbEFjdGl2ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hY3RpdmUsaT10aGlzLm9wdGlvbnMuY29sbGFwc2libGUscz1sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTtyZXR1cm4gbnVsbD09PXQmJihzJiZ0aGlzLnRhYnMuZWFjaChmdW5jdGlvbihpLG4pe3JldHVybiBlKG4pLmF0dHIoImFyaWEtY29udHJvbHMiKT09PXM/KHQ9aSwhMSk6dm9pZCAwfSksbnVsbD09PXQmJih0PXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKCIudWktdGFicy1hY3RpdmUiKSkpLChudWxsPT09dHx8LTE9PT10KSYmKHQ9dGhpcy50YWJzLmxlbmd0aD8wOiExKSksdCE9PSExJiYodD10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmVxKHQpKSwtMT09PXQmJih0PWk/ITE6MCkpLCFpJiZ0PT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGgmJih0PTApLHR9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGFiOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSk6ZSgpfX0sX3RhYktleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9ZSh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoImxpIikscz10aGlzLnRhYnMuaW5kZXgoaSksbj0hMDtpZighdGhpcy5faGFuZGxlUGFnZU5hdih0KSl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjpzKys7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDpuPSExLHMtLTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6cz10aGlzLmFuY2hvcnMubGVuZ3RoLTE7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpzPTA7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShzKSx2b2lkIDA7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShzPT09dGhpcy5vcHRpb25zLmFjdGl2ZT8hMTpzKSx2b2lkIDA7ZGVmYXVsdDpyZXR1cm59dC5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHM9dGhpcy5fZm9jdXNOZXh0VGFiKHMsbiksdC5jdHJsS2V5fHx0Lm1ldGFLZXl8fChpLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLHRoaXMudGFicy5lcShzKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpLHRoaXMuYWN0aXZhdGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMub3B0aW9uKCJhY3RpdmUiLHMpfSx0aGlzLmRlbGF5KSl9fSxfcGFuZWxLZXlkb3duOmZ1bmN0aW9uKHQpe3RoaXMuX2hhbmRsZVBhZ2VOYXYodCl8fHQuY3RybEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlVQJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlLmZvY3VzKCkpfSxfaGFuZGxlUGFnZU5hdjpmdW5jdGlvbih0KXtyZXR1cm4gdC5hbHRLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5QQUdFX1VQPyh0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZS0xLCExKSksITApOnQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9ET1dOPyh0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZSsxLCEwKSksITApOnZvaWQgMH0sX2ZpbmROZXh0VGFiOmZ1bmN0aW9uKHQsaSl7ZnVuY3Rpb24gcygpe3JldHVybiB0Pm4mJih0PTApLDA+dCYmKHQ9biksdH1mb3IodmFyIG49dGhpcy50YWJzLmxlbmd0aC0xOy0xIT09ZS5pbkFycmF5KHMoKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQpOyl0PWk/dCsxOnQtMTtyZXR1cm4gdH0sX2ZvY3VzTmV4dFRhYjpmdW5jdGlvbihlLHQpe3JldHVybiBlPXRoaXMuX2ZpbmROZXh0VGFiKGUsdCksdGhpcy50YWJzLmVxKGUpLmZvY3VzKCksZX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiJhY3RpdmUiPT09ZT8odGhpcy5fYWN0aXZhdGUodCksdm9pZCAwKToiZGlzYWJsZWQiPT09ZT8odGhpcy5fc2V0dXBEaXNhYmxlZCh0KSx2b2lkIDApOih0aGlzLl9zdXBlcihlLHQpLCJjb2xsYXBzaWJsZSI9PT1lJiYodGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS10YWJzLWNvbGxhcHNpYmxlIix0KSx0fHx0aGlzLm9wdGlvbnMuYWN0aXZlIT09ITF8fHRoaXMuX2FjdGl2YXRlKDApKSwiZXZlbnQiPT09ZSYmdGhpcy5fc2V0dXBFdmVudHModCksImhlaWdodFN0eWxlIj09PWUmJnRoaXMuX3NldHVwSGVpZ2h0U3R5bGUodCksdm9pZCAwKX0sX3Nhbml0aXplU2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZS5yZXBsYWNlKC9bISIkJSYnKCkqKywuXC86Ozw9Pj9AXFtcXVxeYHt8fX5dL2csIlxcJCYiKToiIn0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxpPXRoaXMudGFibGlzdC5jaGlsZHJlbigiOmhhcyhhW2hyZWZdKSIpO3QuZGlzYWJsZWQ9ZS5tYXAoaS5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLGZ1bmN0aW9uKGUpe3JldHVybiBpLmluZGV4KGUpfSksdGhpcy5fcHJvY2Vzc1RhYnMoKSx0LmFjdGl2ZSE9PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoP3RoaXMuYWN0aXZlLmxlbmd0aCYmIWUuY29udGFpbnModGhpcy50YWJsaXN0WzBdLHRoaXMuYWN0aXZlWzBdKT90aGlzLnRhYnMubGVuZ3RoPT09dC5kaXNhYmxlZC5sZW5ndGg/KHQuYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKSk6dGhpcy5fYWN0aXZhdGUodGhpcy5fZmluZE5leHRUYWIoTWF0aC5tYXgoMCx0LmFjdGl2ZS0xKSwhMSkpOnQuYWN0aXZlPXRoaXMudGFicy5pbmRleCh0aGlzLmFjdGl2ZSk6KHQuYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKSksdGhpcy5fcmVmcmVzaCgpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3NldHVwRGlzYWJsZWQodGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9zZXR1cEV2ZW50cyh0aGlzLm9wdGlvbnMuZXZlbnQpLHRoaXMuX3NldHVwSGVpZ2h0U3R5bGUodGhpcy5vcHRpb25zLmhlaWdodFN0eWxlKSx0aGlzLnRhYnMubm90KHRoaXMuYWN0aXZlKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIix0YWJJbmRleDotMX0pLHRoaXMucGFuZWxzLm5vdCh0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkpLmhpZGUoKS5hdHRyKHsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLHRoaXMuYWN0aXZlLmxlbmd0aD8odGhpcy5hY3RpdmUuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsImFyaWEtZXhwYW5kZWQiOiJ0cnVlIix0YWJJbmRleDowfSksdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHsiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KSk6dGhpcy50YWJzLmVxKDApLmF0dHIoInRhYkluZGV4IiwwKX0sX3Byb2Nlc3NUYWJzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxpPXRoaXMudGFicyxzPXRoaXMuYW5jaG9ycyxuPXRoaXMucGFuZWxzOw0KdGhpcy50YWJsaXN0PXRoaXMuX2dldExpc3QoKS5hZGRDbGFzcygidWktdGFicy1uYXYgdWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwidGFibGlzdCIpLmRlbGVnYXRlKCI+IGxpIiwibW91c2Vkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKHQpe2UodGhpcykuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpJiZ0LnByZXZlbnREZWZhdWx0KCl9KS5kZWxlZ2F0ZSgiLnVpLXRhYnMtYW5jaG9yIiwiZm9jdXMiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtlKHRoaXMpLmNsb3Nlc3QoImxpIikuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpJiZ0aGlzLmJsdXIoKX0pLHRoaXMudGFicz10aGlzLnRhYmxpc3QuZmluZCgiPiBsaTpoYXMoYVtocmVmXSkiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItdG9wIikuYXR0cih7cm9sZToidGFiIix0YWJJbmRleDotMX0pLHRoaXMuYW5jaG9ycz10aGlzLnRhYnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUoImEiLHRoaXMpWzBdfSkuYWRkQ2xhc3MoInVpLXRhYnMtYW5jaG9yIikuYXR0cih7cm9sZToicHJlc2VudGF0aW9uIix0YWJJbmRleDotMX0pLHRoaXMucGFuZWxzPWUoKSx0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbihpLHMpe3ZhciBuLGEsbyxyPWUocykudW5pcXVlSWQoKS5hdHRyKCJpZCIpLGg9ZShzKS5jbG9zZXN0KCJsaSIpLGw9aC5hdHRyKCJhcmlhLWNvbnRyb2xzIik7dC5faXNMb2NhbChzKT8obj1zLmhhc2gsbz1uLnN1YnN0cmluZygxKSxhPXQuZWxlbWVudC5maW5kKHQuX3Nhbml0aXplU2VsZWN0b3IobikpKToobz1oLmF0dHIoImFyaWEtY29udHJvbHMiKXx8ZSh7fSkudW5pcXVlSWQoKVswXS5pZCxuPSIjIitvLGE9dC5lbGVtZW50LmZpbmQobiksYS5sZW5ndGh8fChhPXQuX2NyZWF0ZVBhbmVsKG8pLGEuaW5zZXJ0QWZ0ZXIodC5wYW5lbHNbaS0xXXx8dC50YWJsaXN0KSksYS5hdHRyKCJhcmlhLWxpdmUiLCJwb2xpdGUiKSksYS5sZW5ndGgmJih0LnBhbmVscz10LnBhbmVscy5hZGQoYSkpLGwmJmguZGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIixsKSxoLmF0dHIoeyJhcmlhLWNvbnRyb2xzIjpvLCJhcmlhLWxhYmVsbGVkYnkiOnJ9KSxhLmF0dHIoImFyaWEtbGFiZWxsZWRieSIscil9KSx0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuYXR0cigicm9sZSIsInRhYnBhbmVsIiksaSYmKHRoaXMuX29mZihpLm5vdCh0aGlzLnRhYnMpKSx0aGlzLl9vZmYocy5ub3QodGhpcy5hbmNob3JzKSksdGhpcy5fb2ZmKG4ubm90KHRoaXMucGFuZWxzKSkpfSxfZ2V0TGlzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhYmxpc3R8fHRoaXMuZWxlbWVudC5maW5kKCJvbCx1bCIpLmVxKDApfSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24odCl7cmV0dXJuIGUoIjxkaXY+IikuYXR0cigiaWQiLHQpLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5kYXRhKCJ1aS10YWJzLWRlc3Ryb3kiLCEwKX0sX3NldHVwRGlzYWJsZWQ6ZnVuY3Rpb24odCl7ZS5pc0FycmF5KHQpJiYodC5sZW5ndGg/dC5sZW5ndGg9PT10aGlzLmFuY2hvcnMubGVuZ3RoJiYodD0hMCk6dD0hMSk7Zm9yKHZhciBpLHM9MDtpPXRoaXMudGFic1tzXTtzKyspdD09PSEwfHwtMSE9PWUuaW5BcnJheShzLHQpP2UoaSkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKTplKGkpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKTt0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9dH0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKHQpe3ZhciBpPXt9O3QmJmUuZWFjaCh0LnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtpW3RdPSJfZXZlbnRIYW5kbGVyIn0pLHRoaXMuX29mZih0aGlzLmFuY2hvcnMuYWRkKHRoaXMudGFicykuYWRkKHRoaXMucGFuZWxzKSksdGhpcy5fb24oITAsdGhpcy5hbmNob3JzLHtjbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9fSksdGhpcy5fb24odGhpcy5hbmNob3JzLGkpLHRoaXMuX29uKHRoaXMudGFicyx7a2V5ZG93bjoiX3RhYktleWRvd24ifSksdGhpcy5fb24odGhpcy5wYW5lbHMse2tleWRvd246Il9wYW5lbEtleWRvd24ifSksdGhpcy5fZm9jdXNhYmxlKHRoaXMudGFicyksdGhpcy5faG92ZXJhYmxlKHRoaXMudGFicyl9LF9zZXR1cEhlaWdodFN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBpLHM9dGhpcy5lbGVtZW50LnBhcmVudCgpOyJmaWxsIj09PXQ/KGk9cy5oZWlnaHQoKSxpLT10aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKS10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHM9dC5jc3MoInBvc2l0aW9uIik7ImFic29sdXRlIiE9PXMmJiJmaXhlZCIhPT1zJiYoaS09dC5vdXRlckhlaWdodCghMCkpfSksdGhpcy5lbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7aS09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCxpLWUodGhpcykuaW5uZXJIZWlnaHQoKStlKHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoIm92ZXJmbG93IiwiYXV0byIpKToiYXV0byI9PT10JiYoaT0wLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtpPU1hdGgubWF4KGksZSh0aGlzKS5oZWlnaHQoIiIpLmhlaWdodCgpKX0pLmhlaWdodChpKSl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dGhpcy5hY3RpdmUsbj1lKHQuY3VycmVudFRhcmdldCksYT1uLmNsb3Nlc3QoImxpIiksbz1hWzBdPT09c1swXSxyPW8mJmkuY29sbGFwc2libGUsaD1yP2UoKTp0aGlzLl9nZXRQYW5lbEZvclRhYihhKSxsPXMubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHMpOmUoKSx1PXtvbGRUYWI6cyxvbGRQYW5lbDpsLG5ld1RhYjpyP2UoKTphLG5ld1BhbmVsOmh9O3QucHJldmVudERlZmF1bHQoKSxhLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxhLmhhc0NsYXNzKCJ1aS10YWJzLWxvYWRpbmciKXx8dGhpcy5ydW5uaW5nfHxvJiYhaS5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsdSk9PT0hMXx8KGkuYWN0aXZlPXI/ITE6dGhpcy50YWJzLmluZGV4KGEpLHRoaXMuYWN0aXZlPW8/ZSgpOmEsdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksbC5sZW5ndGh8fGgubGVuZ3RofHxlLmVycm9yKCJqUXVlcnkgVUkgVGFiczogTWlzbWF0Y2hpbmcgZnJhZ21lbnQgaWRlbnRpZmllci4iKSxoLmxlbmd0aCYmdGhpcy5sb2FkKHRoaXMudGFicy5pbmRleChhKSx0KSx0aGlzLl90b2dnbGUodCx1KSl9LF90b2dnbGU6ZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBzKCl7YS5ydW5uaW5nPSExLGEuX3RyaWdnZXIoImFjdGl2YXRlIix0LGkpfWZ1bmN0aW9uIG4oKXtpLm5ld1RhYi5jbG9zZXN0KCJsaSIpLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxvLmxlbmd0aCYmYS5vcHRpb25zLnNob3c/YS5fc2hvdyhvLGEub3B0aW9ucy5zaG93LHMpOihvLnNob3coKSxzKCkpfXZhciBhPXRoaXMsbz1pLm5ld1BhbmVsLHI9aS5vbGRQYW5lbDt0aGlzLnJ1bm5pbmc9ITAsci5sZW5ndGgmJnRoaXMub3B0aW9ucy5oaWRlP3RoaXMuX2hpZGUocix0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe2kub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLG4oKX0pOihpLm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxyLmhpZGUoKSxuKCkpLHIuYXR0cigiYXJpYS1oaWRkZW4iLCJ0cnVlIiksaS5vbGRUYWIuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSJ9KSxvLmxlbmd0aCYmci5sZW5ndGg/aS5vbGRUYWIuYXR0cigidGFiSW5kZXgiLC0xKTpvLmxlbmd0aCYmdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09ZSh0aGlzKS5hdHRyKCJ0YWJJbmRleCIpfSkuYXR0cigidGFiSW5kZXgiLC0xKSxvLmF0dHIoImFyaWEtaGlkZGVuIiwiZmFsc2UiKSxpLm5ld1RhYi5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLl9maW5kQWN0aXZlKHQpO3NbMF0hPT10aGlzLmFjdGl2ZVswXSYmKHMubGVuZ3RofHwocz10aGlzLmFjdGl2ZSksaT1zLmZpbmQoIi51aS10YWJzLWFuY2hvciIpWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OmUubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0hMT9lKCk6dGhpcy50YWJzLmVxKHQpfSxfZ2V0SW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYoZT10aGlzLmFuY2hvcnMuaW5kZXgodGhpcy5hbmNob3JzLmZpbHRlcigiW2hyZWYkPSciK2UrIiddIikpKSxlfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS10YWJzLWNvbGxhcHNpYmxlIiksdGhpcy50YWJsaXN0LnJlbW92ZUNsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKSx0aGlzLmFuY2hvcnMucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYW5jaG9yIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLnRhYmxpc3QudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLHRoaXMudGFicy5hZGQodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtlLmRhdGEodGhpcywidWktdGFicy1kZXN0cm95Iik/ZSh0aGlzKS5yZW1vdmUoKTplKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIHVpLWNvcm5lci1ib3R0b20gdWktd2lkZ2V0LWNvbnRlbnQgdWktdGFicy1hY3RpdmUgdWktdGFicy1wYW5lbCIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigiYXJpYS1saXZlIikucmVtb3ZlQXR0cigiYXJpYS1idXN5IikucmVtb3ZlQXR0cigiYXJpYS1zZWxlY3RlZCIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikucmVtb3ZlQXR0cigiYXJpYS1leHBhbmRlZCIpLnJlbW92ZUF0dHIoInJvbGUiKX0pLHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPXQuZGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIik7aT90LmF0dHIoImFyaWEtY29udHJvbHMiLGkpLnJlbW92ZURhdGEoInVpLXRhYnMtYXJpYS1jb250cm9scyIpOnQucmVtb3ZlQXR0cigiYXJpYS1jb250cm9scyIpfSksdGhpcy5wYW5lbHMuc2hvdygpLCJjb250ZW50IiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmdGhpcy5wYW5lbHMuY3NzKCJoZWlnaHQiLCIiKX0sZW5hYmxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpIT09ITEmJih2b2lkIDA9PT10P2k9ITE6KHQ9dGhpcy5fZ2V0SW5kZXgodCksaT1lLmlzQXJyYXkoaSk/ZS5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXQ/ZTpudWxsfSk6ZS5tYXAodGhpcy50YWJzLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGkhPT10P2k6bnVsbH0pKSx0aGlzLl9zZXR1cERpc2FibGVkKGkpKX0sZGlzYWJsZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYoaSE9PSEwKXtpZih2b2lkIDA9PT10KWk9ITA7ZWxzZXtpZih0PXRoaXMuX2dldEluZGV4KHQpLC0xIT09ZS5pbkFycmF5KHQsaSkpcmV0dXJuO2k9ZS5pc0FycmF5KGkpP2UubWVyZ2UoW3RdLGkpLnNvcnQoKTpbdF19dGhpcy5fc2V0dXBEaXNhYmxlZChpKX19LGxvYWQ6ZnVuY3Rpb24odCxpKXt0PXRoaXMuX2dldEluZGV4KHQpO3ZhciBzPXRoaXMsbj10aGlzLnRhYnMuZXEodCksYT1uLmZpbmQoIi51aS10YWJzLWFuY2hvciIpLG89dGhpcy5fZ2V0UGFuZWxGb3JUYWIobikscj17dGFiOm4scGFuZWw6b30saD1mdW5jdGlvbihlLHQpeyJhYm9ydCI9PT10JiZzLnBhbmVscy5zdG9wKCExLCEwKSxuLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSxvLnJlbW92ZUF0dHIoImFyaWEtYnVzeSIpLGU9PT1zLnhociYmZGVsZXRlIHMueGhyfTt0aGlzLl9pc0xvY2FsKGFbMF0pfHwodGhpcy54aHI9ZS5hamF4KHRoaXMuX2FqYXhTZXR0aW5ncyhhLGkscikpLHRoaXMueGhyJiYiY2FuY2VsZWQiIT09dGhpcy54aHIuc3RhdHVzVGV4dCYmKG4uYWRkQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpLG8uYXR0cigiYXJpYS1idXN5IiwidHJ1ZSIpLHRoaXMueGhyLmRvbmUoZnVuY3Rpb24oZSx0LG4pe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtvLmh0bWwoZSkscy5fdHJpZ2dlcigibG9hZCIsaSxyKSxoKG4sdCl9LDEpfSkuZmFpbChmdW5jdGlvbihlLHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtoKGUsdCl9LDEpfSkpKX0sX2FqYXhTZXR0aW5nczpmdW5jdGlvbih0LGkscyl7dmFyIG49dGhpcztyZXR1cm57dXJsOnQuYXR0cigiaHJlZiIpLGJlZm9yZVNlbmQ6ZnVuY3Rpb24odCxhKXtyZXR1cm4gbi5fdHJpZ2dlcigiYmVmb3JlTG9hZCIsaSxlLmV4dGVuZCh7anFYSFI6dCxhamF4U2V0dGluZ3M6YX0scykpfX19LF9nZXRQYW5lbEZvclRhYjpmdW5jdGlvbih0KXt2YXIgaT1lKHQpLmF0dHIoImFyaWEtY29udHJvbHMiKTtyZXR1cm4gdGhpcy5lbGVtZW50LmZpbmQodGhpcy5fc2FuaXRpemVTZWxlY3RvcigiIyIraSkpfX0pLGUud2lkZ2V0KCJ1aS50b29sdGlwIix7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOntjb250ZW50OmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5hdHRyKCJ0aXRsZSIpfHwiIjtyZXR1cm4gZSgiPGE+IikudGV4dCh0KS5odG1sKCl9LGhpZGU6ITAsaXRlbXM6Ilt0aXRsZV06bm90KFtkaXNhYmxlZF0pIixwb3NpdGlvbjp7bXk6ImxlZnQgdG9wKzE1IixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoiZmxpcGZpdCBmbGlwIn0sc2hvdzohMCx0b29sdGlwQ2xhc3M6bnVsbCx0cmFjazohMSxjbG9zZTpudWxsLG9wZW46bnVsbH0sX2FkZERlc2NyaWJlZEJ5OmZ1bmN0aW9uKHQsaSl7dmFyIHM9KHQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpfHwiIikuc3BsaXQoL1xzKy8pO3MucHVzaChpKSx0LmRhdGEoInVpLXRvb2x0aXAtaWQiLGkpLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLGUudHJpbShzLmpvaW4oIiAiKSkpfSxfcmVtb3ZlRGVzY3JpYmVkQnk6ZnVuY3Rpb24odCl7dmFyIGk9dC5kYXRhKCJ1aS10b29sdGlwLWlkIikscz0odC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil8fCIiKS5zcGxpdCgvXHMrLyksbj1lLmluQXJyYXkoaSxzKTstMSE9PW4mJnMuc3BsaWNlKG4sMSksdC5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLWlkIikscz1lLnRyaW0ocy5qb2luKCIgIikpLHM/dC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixzKTp0LnJlbW92ZUF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX29uKHttb3VzZW92ZXI6Im9wZW4iLGZvY3VzaW46Im9wZW4ifSksdGhpcy50b29sdGlwcz17fSx0aGlzLnBhcmVudHM9e30sdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlKCksdGhpcy5saXZlUmVnaW9uPWUoIjxkaXY+IikuYXR0cih7cm9sZToibG9nIiwiYXJpYS1saXZlIjoiYXNzZXJ0aXZlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyJ9KS5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIikuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGkpe3ZhciBzPXRoaXM7cmV0dXJuImRpc2FibGVkIj09PXQ/KHRoaXNbaT8iX2Rpc2FibGUiOiJfZW5hYmxlIl0oKSx0aGlzLm9wdGlvbnNbdF09aSx2b2lkIDApOih0aGlzLl9zdXBlcih0LGkpLCJjb250ZW50Ij09PXQmJmUuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKGUsdCl7cy5fdXBkYXRlQ29udGVudCh0LmVsZW1lbnQpfSksdm9pZCAwKX0sX2Rpc2FibGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKGkscyl7dmFyIG49ZS5FdmVudCgiYmx1ciIpO24udGFyZ2V0PW4uY3VycmVudFRhcmdldD1zLmVsZW1lbnRbMF0sdC5jbG9zZShuLCEwKX0pLHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuaXMoIlt0aXRsZV0iKSYmdC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIix0LmF0dHIoInRpdGxlIikpLnJlbW92ZUF0dHIoInRpdGxlIil9KX0sX2VuYWJsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiZ0LmF0dHIoInRpdGxlIix0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSl9KX0sb3BlbjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLHM9ZSh0P3QudGFyZ2V0OnRoaXMuZWxlbWVudCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuaXRlbXMpO3MubGVuZ3RoJiYhcy5kYXRhKCJ1aS10b29sdGlwLWlkIikmJihzLmF0dHIoInRpdGxlIikmJnMuZGF0YSgidWktdG9vbHRpcC10aXRsZSIscy5hdHRyKCJ0aXRsZSIpKSxzLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIsITApLHQmJiJtb3VzZW92ZXIiPT09dC50eXBlJiZzLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQscz1lKHRoaXMpO3MuZGF0YSgidWktdG9vbHRpcC1vcGVuIikmJih0PWUuRXZlbnQoImJsdXIiKSx0LnRhcmdldD10LmN1cnJlbnRUYXJnZXQ9dGhpcyxpLmNsb3NlKHQsITApKSxzLmF0dHIoInRpdGxlIikmJihzLnVuaXF1ZUlkKCksaS5wYXJlbnRzW3RoaXMuaWRdPXtlbGVtZW50OnRoaXMsdGl0bGU6cy5hdHRyKCJ0aXRsZSIpfSxzLmF0dHIoInRpdGxlIiwiIikpfSksdGhpcy5fcmVnaXN0ZXJDbG9zZUhhbmRsZXJzKHQscyksdGhpcy5fdXBkYXRlQ29udGVudChzLHQpKX0sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzPXRoaXMub3B0aW9ucy5jb250ZW50LG49dGhpcyxhPXQ/dC50eXBlOm51bGw7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBzP3RoaXMuX29wZW4odCxlLHMpOihpPXMuY2FsbChlWzBdLGZ1bmN0aW9uKGkpe24uX2RlbGF5KGZ1bmN0aW9uKCl7ZS5kYXRhKCJ1aS10b29sdGlwLW9wZW4iKSYmKHQmJih0LnR5cGU9YSksdGhpcy5fb3Blbih0LGUsaSkpfSl9KSxpJiZ0aGlzLl9vcGVuKHQsZSxpKSx2b2lkIDApfSxfb3BlbjpmdW5jdGlvbih0LGkscyl7ZnVuY3Rpb24gbihlKXtsLm9mPWUsby5pcygiOmhpZGRlbiIpfHxvLnBvc2l0aW9uKGwpfXZhciBhLG8scixoLGw9ZS5leHRlbmQoe30sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTtpZihzKXtpZihhPXRoaXMuX2ZpbmQoaSkpcmV0dXJuIGEudG9vbHRpcC5maW5kKCIudWktdG9vbHRpcC1jb250ZW50IikuaHRtbChzKSx2b2lkIDA7aS5pcygiW3RpdGxlXSIpJiYodCYmIm1vdXNlb3ZlciI9PT10LnR5cGU/aS5hdHRyKCJ0aXRsZSIsIiIpOmkucmVtb3ZlQXR0cigidGl0bGUiKSksYT10aGlzLl90b29sdGlwKGkpLG89YS50b29sdGlwLHRoaXMuX2FkZERlc2NyaWJlZEJ5KGksby5hdHRyKCJpZCIpKSxvLmZpbmQoIi51aS10b29sdGlwLWNvbnRlbnQiKS5odG1sKHMpLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxzLmNsb25lPyhoPXMuY2xvbmUoKSxoLnJlbW92ZUF0dHIoImlkIikuZmluZCgiW2lkXSIpLnJlbW92ZUF0dHIoImlkIikpOmg9cyxlKCI8ZGl2PiIpLmh0bWwoaCkuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSx0aGlzLm9wdGlvbnMudHJhY2smJnQmJi9ebW91c2UvLnRlc3QodC50eXBlKT8odGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vtb3ZlOm59KSxuKHQpKTpvLnBvc2l0aW9uKGUuZXh0ZW5kKHtvZjppfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSxvLmhpZGUoKSx0aGlzLl9zaG93KG8sdGhpcy5vcHRpb25zLnNob3cpLHRoaXMub3B0aW9ucy5zaG93JiZ0aGlzLm9wdGlvbnMuc2hvdy5kZWxheSYmKHI9dGhpcy5kZWxheWVkU2hvdz1zZXRJbnRlcnZhbChmdW5jdGlvbigpe28uaXMoIjp2aXNpYmxlIikmJihuKGwub2YpLGNsZWFySW50ZXJ2YWwocikpfSxlLmZ4LmludGVydmFsKSksdGhpcy5fdHJpZ2dlcigib3BlbiIsdCx7dG9vbHRpcDpvfSl9fSxfcmVnaXN0ZXJDbG9zZUhhbmRsZXJzOmZ1bmN0aW9uKHQsaSl7dmFyIHM9e2tleXVwOmZ1bmN0aW9uKHQpe2lmKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FU0NBUEUpe3ZhciBzPWUuRXZlbnQodCk7cy5jdXJyZW50VGFyZ2V0PWlbMF0sdGhpcy5jbG9zZShzLCEwKX19fTtpWzBdIT09dGhpcy5lbGVtZW50WzBdJiYocy5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVUb29sdGlwKHRoaXMuX2ZpbmQoaSkudG9vbHRpcCl9KSx0JiYibW91c2VvdmVyIiE9PXQudHlwZXx8KHMubW91c2VsZWF2ZT0iY2xvc2UiKSx0JiYiZm9jdXNpbiIhPT10LnR5cGV8fChzLmZvY3Vzb3V0PSJjbG9zZSIpLHRoaXMuX29uKCEwLGkscyl9LGNsb3NlOmZ1bmN0aW9uKHQpe3ZhciBpLHM9dGhpcyxuPWUodD90LmN1cnJlbnRUYXJnZXQ6dGhpcy5lbGVtZW50KSxhPXRoaXMuX2ZpbmQobik7cmV0dXJuIGE/KGk9YS50b29sdGlwLGEuY2xvc2luZ3x8KGNsZWFySW50ZXJ2YWwodGhpcy5kZWxheWVkU2hvdyksbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJiFuLmF0dHIoInRpdGxlIikmJm4uYXR0cigidGl0bGUiLG4uZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSx0aGlzLl9yZW1vdmVEZXNjcmliZWRCeShuKSxhLmhpZGluZz0hMCxpLnN0b3AoITApLHRoaXMuX2hpZGUoaSx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe3MuX3JlbW92ZVRvb2x0aXAoZSh0aGlzKSl9KSxuLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtb3BlbiIpLHRoaXMuX29mZihuLCJtb3VzZWxlYXZlIGZvY3Vzb3V0IGtleXVwIiksblswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5fb2ZmKG4sInJlbW92ZSIpLHRoaXMuX29mZih0aGlzLmRvY3VtZW50LCJtb3VzZW1vdmUiKSx0JiYibW91c2VsZWF2ZSI9PT10LnR5cGUmJmUuZWFjaCh0aGlzLnBhcmVudHMsZnVuY3Rpb24odCxpKXtlKGkuZWxlbWVudCkuYXR0cigidGl0bGUiLGkudGl0bGUpLGRlbGV0ZSBzLnBhcmVudHNbdF19KSxhLmNsb3Npbmc9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLHQse3Rvb2x0aXA6aX0pLGEuaGlkaW5nfHwoYS5jbG9zaW5nPSExKSksdm9pZCAwKToobi5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLW9wZW4iKSx2b2lkIDApfSxfdG9vbHRpcDpmdW5jdGlvbih0KXt2YXIgaT1lKCI8ZGl2PiIpLmF0dHIoInJvbGUiLCJ0b29sdGlwIikuYWRkQ2xhc3MoInVpLXRvb2x0aXAgdWktd2lkZ2V0IHVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LWNvbnRlbnQgIisodGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzc3x8IiIpKSxzPWkudW5pcXVlSWQoKS5hdHRyKCJpZCIpO3JldHVybiBlKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS10b29sdGlwLWNvbnRlbnQiKS5hcHBlbmRUbyhpKSxpLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy50b29sdGlwc1tzXT17ZWxlbWVudDp0LHRvb2x0aXA6aX19LF9maW5kOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSgidWktdG9vbHRpcC1pZCIpO3JldHVybiB0P3RoaXMudG9vbHRpcHNbdF06bnVsbH0sX3JlbW92ZVRvb2x0aXA6ZnVuY3Rpb24oZSl7ZS5yZW1vdmUoKSxkZWxldGUgdGhpcy50b29sdGlwc1tlLmF0dHIoImlkIildfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7ZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxzKXt2YXIgbj1lLkV2ZW50KCJibHVyIiksYT1zLmVsZW1lbnQ7bi50YXJnZXQ9bi5jdXJyZW50VGFyZ2V0PWFbMF0sdC5jbG9zZShuLCEwKSxlKCIjIitpKS5yZW1vdmUoKSxhLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmKGEuYXR0cigidGl0bGUiKXx8YS5hdHRyKCJ0aXRsZSIsYS5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpLGEucmVtb3ZlRGF0YSgidWktdG9vbHRpcC10aXRsZSIpKX0pLHRoaXMubGl2ZVJlZ2lvbi5yZW1vdmUoKX19KX0pOw0K"></script>
<script src="data:application/x-javascript;base64,LyohDQogKiBqUXVlcnkgVUkgVG91Y2ggUHVuY2ggMC4yLjMNCiAqDQogKiBDb3B5cmlnaHQgMjAxMeKAkzIwMTQsIERhdmUgRnVyZmVybw0KICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuDQogKg0KICogRGVwZW5kczoNCiAqICBqcXVlcnkudWkud2lkZ2V0LmpzDQogKiAganF1ZXJ5LnVpLm1vdXNlLmpzDQogKi8NCiFmdW5jdGlvbihhKXtmdW5jdGlvbiBmKGEsYil7aWYoIShhLm9yaWdpbmFsRXZlbnQudG91Y2hlcy5sZW5ndGg+MSkpe2EucHJldmVudERlZmF1bHQoKTt2YXIgYz1hLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0sZD1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTtkLmluaXRNb3VzZUV2ZW50KGIsITAsITAsd2luZG93LDEsYy5zY3JlZW5YLGMuc2NyZWVuWSxjLmNsaWVudFgsYy5jbGllbnRZLCExLCExLCExLCExLDAsbnVsbCksYS50YXJnZXQuZGlzcGF0Y2hFdmVudChkKX19aWYoYS5zdXBwb3J0LnRvdWNoPSJvbnRvdWNoZW5kImluIGRvY3VtZW50LGEuc3VwcG9ydC50b3VjaCl7dmFyIGUsYj1hLnVpLm1vdXNlLnByb3RvdHlwZSxjPWIuX21vdXNlSW5pdCxkPWIuX21vdXNlRGVzdHJveTtiLl90b3VjaFN0YXJ0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7IWUmJmIuX21vdXNlQ2FwdHVyZShhLm9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0pJiYoZT0hMCxiLl90b3VjaE1vdmVkPSExLGYoYSwibW91c2VvdmVyIiksZihhLCJtb3VzZW1vdmUiKSxmKGEsIm1vdXNlZG93biIpKX0sYi5fdG91Y2hNb3ZlPWZ1bmN0aW9uKGEpe2UmJih0aGlzLl90b3VjaE1vdmVkPSEwLGYoYSwibW91c2Vtb3ZlIikpfSxiLl90b3VjaEVuZD1mdW5jdGlvbihhKXtlJiYoZihhLCJtb3VzZXVwIiksZihhLCJtb3VzZW91dCIpLHRoaXMuX3RvdWNoTW92ZWR8fGYoYSwiY2xpY2siKSxlPSExKX0sYi5fbW91c2VJbml0PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcztiLmVsZW1lbnQuYmluZCh7dG91Y2hzdGFydDphLnByb3h5KGIsIl90b3VjaFN0YXJ0IiksdG91Y2htb3ZlOmEucHJveHkoYiwiX3RvdWNoTW92ZSIpLHRvdWNoZW5kOmEucHJveHkoYiwiX3RvdWNoRW5kIil9KSxjLmNhbGwoYil9LGIuX21vdXNlRGVzdHJveT1mdW5jdGlvbigpe3ZhciBiPXRoaXM7Yi5lbGVtZW50LnVuYmluZCh7dG91Y2hzdGFydDphLnByb3h5KGIsIl90b3VjaFN0YXJ0IiksdG91Y2htb3ZlOmEucHJveHkoYiwiX3RvdWNoTW92ZSIpLHRvdWNoZW5kOmEucHJveHkoYiwiX3RvdWNoRW5kIil9KSxkLmNhbGwoYil9fX0oalF1ZXJ5KTsNCg=="></script>
<link href="data:text/css;charset=utf-8,%2Ec3%20svg%7Bfont%3A10px%20sans%2Dserif%3B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3Atransparent%7D%2Ec3%20line%2C%2Ec3%20path%7Bfill%3Anone%3Bstroke%3A%23000%7D%2Ec3%20text%7B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%7D%2Ec3%2Dbars%20path%2C%2Ec3%2Devent%2Drect%2C%2Ec3%2Dlegend%2Ditem%2Dtile%2C%2Ec3%2Dxgrid%2Dfocus%2C%2Ec3%2Dygrid%7Bshape%2Drendering%3AcrispEdges%7D%2Ec3%2Dchart%2Darc%20path%7Bstroke%3A%23fff%7D%2Ec3%2Dchart%2Darc%20text%7Bfill%3A%23fff%3Bfont%2Dsize%3A13px%7D%2Ec3%2Dgrid%20line%7Bstroke%3A%23aaa%7D%2Ec3%2Dgrid%20text%7Bfill%3A%23aaa%7D%2Ec3%2Dxgrid%2C%2Ec3%2Dygrid%7Bstroke%2Ddasharray%3A3%203%7D%2Ec3%2Dtext%2Ec3%2Dempty%7Bfill%3Agray%3Bfont%2Dsize%3A2em%7D%2Ec3%2Dline%7Bstroke%2Dwidth%3A1px%7D%2Ec3%2Dcircle%2E%5Fexpanded%5F%7Bstroke%2Dwidth%3A1px%3Bstroke%3A%23fff%7D%2Ec3%2Dselected%2Dcircle%7Bfill%3A%23fff%3Bstroke%2Dwidth%3A2px%7D%2Ec3%2Dbar%7Bstroke%2Dwidth%3A0%7D%2Ec3%2Dbar%2E%5Fexpanded%5F%7Bfill%2Dopacity%3A%2E75%7D%2Ec3%2Dtarget%2Ec3%2Dfocused%7Bopacity%3A1%7D%2Ec3%2Dtarget%2Ec3%2Dfocused%20path%2Ec3%2Dline%2C%2Ec3%2Dtarget%2Ec3%2Dfocused%20path%2Ec3%2Dstep%7Bstroke%2Dwidth%3A2px%7D%2Ec3%2Dtarget%2Ec3%2Ddefocused%7Bopacity%3A%2E3%21important%7D%2Ec3%2Dregion%7Bfill%3A%234682b4%3Bfill%2Dopacity%3A%2E1%7D%2Ec3%2Dbrush%20%2Eextent%7Bfill%2Dopacity%3A%2E1%7D%2Ec3%2Dlegend%2Ditem%7Bfont%2Dsize%3A12px%7D%2Ec3%2Dlegend%2Ditem%2Dhidden%7Bopacity%3A%2E15%7D%2Ec3%2Dlegend%2Dbackground%7Bopacity%3A%2E75%3Bfill%3A%23fff%3Bstroke%3A%23d3d3d3%3Bstroke%2Dwidth%3A1%7D%2Ec3%2Dtitle%7Bfont%3A14px%20sans%2Dserif%7D%2Ec3%2Dtooltip%2Dcontainer%7Bz%2Dindex%3A10%7D%2Ec3%2Dtooltip%7Bborder%2Dcollapse%3Acollapse%3Bborder%2Dspacing%3A0%3Bbackground%2Dcolor%3A%23fff%3Bempty%2Dcells%3Ashow%3B%2Dwebkit%2Dbox%2Dshadow%3A7px%207px%2012px%20%2D9px%20%23777%3B%2Dmoz%2Dbox%2Dshadow%3A7px%207px%2012px%20%2D9px%20%23777%3Bbox%2Dshadow%3A7px%207px%2012px%20%2D9px%20%23777%3Bopacity%3A%2E9%7D%2Ec3%2Dtooltip%20tr%7Bborder%3A1px%20solid%20%23CCC%7D%2Ec3%2Dtooltip%20th%7Bbackground%2Dcolor%3A%23aaa%3Bfont%2Dsize%3A14px%3Bpadding%3A2px%205px%3Btext%2Dalign%3Aleft%3Bcolor%3A%23FFF%7D%2Ec3%2Dtooltip%20td%7Bfont%2Dsize%3A13px%3Bpadding%3A3px%206px%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dleft%3A1px%20dotted%20%23999%7D%2Ec3%2Dtooltip%20td%3Espan%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A10px%3Bheight%3A10px%3Bmargin%2Dright%3A6px%7D%2Ec3%2Dtooltip%20td%2Evalue%7Btext%2Dalign%3Aright%7D%2Ec3%2Darea%7Bstroke%2Dwidth%3A0%3Bopacity%3A%2E2%7D%2Ec3%2Dchart%2Darcs%2Dtitle%7Bdominant%2Dbaseline%3Amiddle%3Bfont%2Dsize%3A1%2E3em%7D%2Ec3%2Dchart%2Darcs%20%2Ec3%2Dchart%2Darcs%2Dbackground%7Bfill%3A%23e0e0e0%3Bstroke%3Anone%7D%2Ec3%2Dchart%2Darcs%20%2Ec3%2Dchart%2Darcs%2Dgauge%2Dunit%7Bfill%3A%23000%3Bfont%2Dsize%3A16px%7D%2Ec3%2Dchart%2Darcs%20%2Ec3%2Dchart%2Darcs%2Dgauge%2Dmax%2C%2Ec3%2Dchart%2Darcs%20%2Ec3%2Dchart%2Darcs%2Dgauge%2Dmin%7Bfill%3A%23777%7D%2Ec3%2Dchart%2Darc%20%2Ec3%2Dgauge%2Dvalue%7Bfill%3A%23000%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGEpe3RoaXMub3duZXI9YX1mdW5jdGlvbiBjKGEsYil7aWYoT2JqZWN0LmNyZWF0ZSliLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKTtlbHNle3ZhciBjPWZ1bmN0aW9uKCl7fTtjLnByb3RvdHlwZT1hLnByb3RvdHlwZSxiLnByb3RvdHlwZT1uZXcgY31yZXR1cm4gYi5wcm90b3R5cGUuY29uc3RydWN0b3I9YixifWZ1bmN0aW9uIGQoYSl7dmFyIGI9dGhpcy5pbnRlcm5hbD1uZXcgZSh0aGlzKTtiLmxvYWRDb25maWcoYSksYi5iZWZvcmVJbml0KGEpLGIuaW5pdCgpLGIuYWZ0ZXJJbml0KGEpLGZ1bmN0aW9uIGMoYSxiLGQpe09iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24oZSl7YltlXT1hW2VdLmJpbmQoZCksT2JqZWN0LmtleXMoYVtlXSkubGVuZ3RoPjAmJmMoYVtlXSxiW2VdLGQpfSl9KGgsdGhpcyx0aGlzKX1mdW5jdGlvbiBlKGIpe3ZhciBjPXRoaXM7Yy5kMz1hLmQzP2EuZDM6InVuZGVmaW5lZCIhPXR5cGVvZiByZXF1aXJlP3JlcXVpcmUoImQzIik6dm9pZCAwLGMuYXBpPWIsYy5jb25maWc9Yy5nZXREZWZhdWx0Q29uZmlnKCksYy5kYXRhPXt9LGMuY2FjaGU9e30sYy5heGVzPXt9fWZ1bmN0aW9uIGYoYSl7Yi5jYWxsKHRoaXMsYSl9ZnVuY3Rpb24gZyhhLGIpe2Z1bmN0aW9uIGMoYSxiKXthLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oYSl7cmV0dXJuInRyYW5zbGF0ZSgiK01hdGguY2VpbChiKGEpK3UpKyIsIDApIn0pfWZ1bmN0aW9uIGQoYSxiKXthLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oYSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrTWF0aC5jZWlsKGIoYSkpKyIpIn0pfWZ1bmN0aW9uIGUoYSl7dmFyIGI9YVswXSxjPWFbYS5sZW5ndGgtMV07cmV0dXJuIGM+Yj9bYixjXTpbYyxiXX1mdW5jdGlvbiBmKGEpe3ZhciBiLGMsZD1bXTtpZihhLnRpY2tzKXJldHVybiBhLnRpY2tzLmFwcGx5KGEsbik7Zm9yKGM9YS5kb21haW4oKSxiPU1hdGguY2VpbChjWzBdKTtiPGNbMV07YisrKWQucHVzaChiKTtyZXR1cm4gZC5sZW5ndGg+MCYmZFswXT4wJiZkLnVuc2hpZnQoZFswXS0oZFsxXS1kWzBdKSksZH1mdW5jdGlvbiBnKCl7dmFyIGEsYz1wLmNvcHkoKTtyZXR1cm4gYi5pc0NhdGVnb3J5JiYoYT1wLmRvbWFpbigpLGMuZG9tYWluKFthWzBdLGFbMV0tMV0pKSxjfWZ1bmN0aW9uIGgoYSl7dmFyIGI9bT9tKGEpOmE7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBiP2I6IiJ9ZnVuY3Rpb24gaShhKXtpZihBKXJldHVybiBBO3ZhciBiPXtoOjExLjUsdzo1LjV9O3JldHVybiBhLnNlbGVjdCgidGV4dCIpLnRleHQoaCkuZWFjaChmdW5jdGlvbihhKXt2YXIgYz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9aChhKSxlPWMuaGVpZ2h0LGY9ZD9jLndpZHRoL2QubGVuZ3RoOnZvaWQgMDtlJiZmJiYoYi5oPWUsYi53PWYpfSkudGV4dCgiIiksQT1iLGJ9ZnVuY3Rpb24gaihjKXtyZXR1cm4gYi53aXRob3V0VHJhbnNpdGlvbj9jOmEudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBrKG0pe20uZWFjaChmdW5jdGlvbigpe2Z1bmN0aW9uIG0oYSxjKXtmdW5jdGlvbiBkKGEsYil7Zj12b2lkIDA7Zm9yKHZhciBoPTE7aDxiLmxlbmd0aDtoKyspaWYoIiAiPT09Yi5jaGFyQXQoaCkmJihmPWgpLGU9Yi5zdWJzdHIoMCxoKzEpLGc9VS53KmUubGVuZ3RoLGc+YylyZXR1cm4gZChhLmNvbmNhdChiLnN1YnN0cigwLGY/ZjpoKSksYi5zbGljZShmP2YrMTpoKSk7cmV0dXJuIGEuY29uY2F0KGIpfXZhciBlLGYsZyxpPWgoYSksaj1bXTtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpP2k6KCghY3x8MD49YykmJihjPVg/OTU6Yi5pc0NhdGVnb3J5P01hdGguY2VpbChGKEdbMV0pLUYoR1swXSkpLTEyOjExMCksZChqLGkrIiIpKX1mdW5jdGlvbiBuKGEsYil7dmFyIGM9VS5oO3JldHVybiAwPT09YiYmKGM9ImxlZnQiPT09cXx8InJpZ2h0Ij09PXE/LSgoVlthLmluZGV4XS0xKSooVS5oLzIpLTMpOiIuNzFlbSIpLGN9ZnVuY3Rpb24gdihhKXt2YXIgYj1wKGEpKyhvPzA6dSk7cmV0dXJuIExbMF08YiYmYjxMWzFdP3I6MH1mdW5jdGlvbiB3KGEpe3JldHVybiBhP2E+MD8ic3RhcnQiOiJlbmQiOiJtaWRkbGUifWZ1bmN0aW9uIHgoYSl7cmV0dXJuIGE/InJvdGF0ZSgiK2ErIikiOiIifWZ1bmN0aW9uIHkoYSl7cmV0dXJuIGE/OCpNYXRoLnNpbihNYXRoLlBJKihhLzE4MCkpOjB9ZnVuY3Rpb24geihhKXtyZXR1cm4gYT8xMS41LTIuNSooYS8xNSkqKGE+MD8xOi0xKTpXfXZhciBBLEIsQyxEPWsuZz1hLnNlbGVjdCh0aGlzKSxFPXRoaXMuX19jaGFydF9ffHxwLEY9dGhpcy5fX2NoYXJ0X189ZygpLEc9dD90OmYoRiksSD1ELnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKEcsRiksST1ILmVudGVyKCkuaW5zZXJ0KCJnIiwiLmRvbWFpbiIpLmF0dHIoImNsYXNzIiwidGljayIpLnN0eWxlKCJvcGFjaXR5IiwxZS02KSxKPUguZXhpdCgpLnJlbW92ZSgpLEs9aihIKS5zdHlsZSgib3BhY2l0eSIsMSksTD1wLnJhbmdlRXh0ZW50P3AucmFuZ2VFeHRlbnQoKTplKHAucmFuZ2UoKSksTT1ELnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoWzBdKSxOPShNLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJkb21haW4iKSxqKE0pKTtJLmFwcGVuZCgibGluZSIpLEkuYXBwZW5kKCJ0ZXh0Iik7dmFyIE89SS5zZWxlY3QoImxpbmUiKSxQPUsuc2VsZWN0KCJsaW5lIiksUT1JLnNlbGVjdCgidGV4dCIpLFI9Sy5zZWxlY3QoInRleHQiKTtiLmlzQ2F0ZWdvcnk/KHU9TWF0aC5jZWlsKChGKDEpLUYoMCkpLzIpLEI9bz8wOnUsQz1vP3U6MCk6dT1CPTA7dmFyIFMsVCxVPWkoRC5zZWxlY3QoIi50aWNrIikpLFY9W10sVz1NYXRoLm1heChyLDApK3MsWD0ibGVmdCI9PT1xfHwicmlnaHQiPT09cTtTPUguc2VsZWN0KCJ0ZXh0IiksVD1TLnNlbGVjdEFsbCgidHNwYW4iKS5kYXRhKGZ1bmN0aW9uKGEsYyl7dmFyIGQ9Yi50aWNrTXVsdGlsaW5lP20oYSxiLnRpY2tXaWR0aCk6W10uY29uY2F0KGgoYSkpO3JldHVybiBWW2NdPWQubGVuZ3RoLGQubWFwKGZ1bmN0aW9uKGEpe3JldHVybntpbmRleDpjLHNwbGl0dGVkOmF9fSl9KSxULmVudGVyKCkuYXBwZW5kKCJ0c3BhbiIpLFQuZXhpdCgpLnJlbW92ZSgpLFQudGV4dChmdW5jdGlvbihhKXtyZXR1cm4gYS5zcGxpdHRlZH0pO3ZhciBZPWIudGlja1RleHRSb3RhdGU7c3dpdGNoKHEpe2Nhc2UiYm90dG9tIjpBPWMsTy5hdHRyKCJ5MiIsciksUS5hdHRyKCJ5IixXKSxQLmF0dHIoIngxIixCKS5hdHRyKCJ4MiIsQikuYXR0cigieTIiLHYpLFIuYXR0cigieCIsMCkuYXR0cigieSIseihZKSkuc3R5bGUoInRleHQtYW5jaG9yIix3KFkpKS5hdHRyKCJ0cmFuc2Zvcm0iLHgoWSkpLFQuYXR0cigieCIsMCkuYXR0cigiZHkiLG4pLmF0dHIoImR4Iix5KFkpKSxOLmF0dHIoImQiLCJNIitMWzBdKyIsIitsKyJWMEgiK0xbMV0rIlYiK2wpO2JyZWFrO2Nhc2UidG9wIjpBPWMsTy5hdHRyKCJ5MiIsLXIpLFEuYXR0cigieSIsLVcpLFAuYXR0cigieDIiLDApLmF0dHIoInkyIiwtciksUi5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtVyksUy5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSxULmF0dHIoIngiLDApLmF0dHIoImR5IiwiMGVtIiksTi5hdHRyKCJkIiwiTSIrTFswXSsiLCIrLWwrIlYwSCIrTFsxXSsiViIrLWwpO2JyZWFrO2Nhc2UibGVmdCI6QT1kLE8uYXR0cigieDIiLC1yKSxRLmF0dHIoIngiLC1XKSxQLmF0dHIoIngyIiwtcikuYXR0cigieTEiLEMpLmF0dHIoInkyIixDKSxSLmF0dHIoIngiLC1XKS5hdHRyKCJ5Iix1KSxTLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIpLFQuYXR0cigieCIsLVcpLmF0dHIoImR5IixuKSxOLmF0dHIoImQiLCJNIistbCsiLCIrTFswXSsiSDBWIitMWzFdKyJIIistbCk7YnJlYWs7Y2FzZSJyaWdodCI6QT1kLE8uYXR0cigieDIiLHIpLFEuYXR0cigieCIsVyksUC5hdHRyKCJ4MiIscikuYXR0cigieTIiLDApLFIuYXR0cigieCIsVykuYXR0cigieSIsMCksUy5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLFQuYXR0cigieCIsVykuYXR0cigiZHkiLG4pLE4uYXR0cigiZCIsIk0iK2wrIiwiK0xbMF0rIkgwViIrTFsxXSsiSCIrbCl9aWYoRi5yYW5nZUJhbmQpe3ZhciBaPUYsJD1aLnJhbmdlQmFuZCgpLzI7RT1GPWZ1bmN0aW9uKGEpe3JldHVybiBaKGEpKyR9fWVsc2UgRS5yYW5nZUJhbmQ/RT1GOkouY2FsbChBLEYpO0kuY2FsbChBLEUpLEsuY2FsbChBLEYpfSl9dmFyIGwsbSxuLG8scD1hLnNjYWxlLmxpbmVhcigpLHE9ImJvdHRvbSIscj02LHM9Myx0PW51bGwsdT0wLHY9ITA7cmV0dXJuIGI9Ynx8e30sbD1iLndpdGhPdXRlclRpY2s/NjowLGsuc2NhbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9YSxrKTpwfSxrLm9yaWVudD1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocT1hIGlue3RvcDoxLHJpZ2h0OjEsYm90dG9tOjEsbGVmdDoxfT9hKyIiOiJib3R0b20iLGspOnF9LGsudGlja0Zvcm1hdD1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1hLGspOm19LGsudGlja0NlbnRlcmVkPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWEsayk6b30say50aWNrT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHV9LGsudGlja0ludGVydmFsPWZ1bmN0aW9uKCl7dmFyIGEsYztyZXR1cm4gYi5pc0NhdGVnb3J5P2E9Mip1OihjPWsuZy5zZWxlY3QoInBhdGguZG9tYWluIikubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCktMipsLGE9Yy9rLmcuc2VsZWN0QWxsKCJsaW5lIikuc2l6ZSgpKSxhPT09MS8wPzA6YX0say50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWFyZ3VtZW50cyxrKTpufSxrLnRpY2tDdWxsaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PWEsayk6dn0say50aWNrVmFsdWVzPWZ1bmN0aW9uKGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYShwLmRvbWFpbigpKX07ZWxzZXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdDt0PWF9cmV0dXJuIGt9LGt9dmFyIGgsaSxqLGs9e3ZlcnNpb246IjAuNC4xMS1yYzQifTtrLmdlbmVyYXRlPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgZChhKX0say5jaGFydD17Zm46ZC5wcm90b3R5cGUsaW50ZXJuYWw6e2ZuOmUucHJvdG90eXBlLGF4aXM6e2ZuOmYucHJvdG90eXBlfX19LGg9ay5jaGFydC5mbixpPWsuY2hhcnQuaW50ZXJuYWwuZm4saj1rLmNoYXJ0LmludGVybmFsLmF4aXMuZm4saS5iZWZvcmVJbml0PWZ1bmN0aW9uKCl7fSxpLmFmdGVySW5pdD1mdW5jdGlvbigpe30saS5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY29uZmlnO2lmKGEuaW5pdFBhcmFtcygpLGIuZGF0YV91cmwpYS5jb252ZXJ0VXJsVG9EYXRhKGIuZGF0YV91cmwsYi5kYXRhX21pbWVUeXBlLGIuZGF0YV9oZWFkZXJzLGIuZGF0YV9rZXlzLGEuaW5pdFdpdGhEYXRhKTtlbHNlIGlmKGIuZGF0YV9qc29uKWEuaW5pdFdpdGhEYXRhKGEuY29udmVydEpzb25Ub0RhdGEoYi5kYXRhX2pzb24sYi5kYXRhX2tleXMpKTtlbHNlIGlmKGIuZGF0YV9yb3dzKWEuaW5pdFdpdGhEYXRhKGEuY29udmVydFJvd3NUb0RhdGEoYi5kYXRhX3Jvd3MpKTtlbHNle2lmKCFiLmRhdGFfY29sdW1ucyl0aHJvdyBFcnJvcigidXJsIG9yIGpzb24gb3Igcm93cyBvciBjb2x1bW5zIGlzIHJlcXVpcmVkLiIpO2EuaW5pdFdpdGhEYXRhKGEuY29udmVydENvbHVtbnNUb0RhdGEoYi5kYXRhX2NvbHVtbnMpKX19LGkuaW5pdFBhcmFtcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmQzLGM9YS5jb25maWc7YS5jbGlwSWQ9ImMzLSIrICtuZXcgRGF0ZSsiLWNsaXAiLGEuY2xpcElkRm9yWEF4aXM9YS5jbGlwSWQrIi14YXhpcyIsYS5jbGlwSWRGb3JZQXhpcz1hLmNsaXBJZCsiLXlheGlzIixhLmNsaXBJZEZvckdyaWQ9YS5jbGlwSWQrIi1ncmlkIixhLmNsaXBJZEZvclN1YmNoYXJ0PWEuY2xpcElkKyItc3ViY2hhcnQiLGEuY2xpcFBhdGg9YS5nZXRDbGlwUGF0aChhLmNsaXBJZCksYS5jbGlwUGF0aEZvclhBeGlzPWEuZ2V0Q2xpcFBhdGgoYS5jbGlwSWRGb3JYQXhpcyksYS5jbGlwUGF0aEZvcllBeGlzPWEuZ2V0Q2xpcFBhdGgoYS5jbGlwSWRGb3JZQXhpcyksYS5jbGlwUGF0aEZvckdyaWQ9YS5nZXRDbGlwUGF0aChhLmNsaXBJZEZvckdyaWQpLGEuY2xpcFBhdGhGb3JTdWJjaGFydD1hLmdldENsaXBQYXRoKGEuY2xpcElkRm9yU3ViY2hhcnQpLGEuZHJhZ1N0YXJ0PW51bGwsYS5kcmFnZ2luZz0hMSxhLmZsb3dpbmc9ITEsYS5jYW5jZWxDbGljaz0hMSxhLm1vdXNlb3Zlcj0hMSxhLnRyYW5zaXRpbmc9ITEsYS5jb2xvcj1hLmdlbmVyYXRlQ29sb3IoKSxhLmxldmVsQ29sb3I9YS5nZW5lcmF0ZUxldmVsQ29sb3IoKSxhLmRhdGFUaW1lRm9ybWF0PWMuZGF0YV94TG9jYWx0aW1lP2IudGltZS5mb3JtYXQ6Yi50aW1lLmZvcm1hdC51dGMsYS5heGlzVGltZUZvcm1hdD1jLmF4aXNfeF9sb2NhbHRpbWU/Yi50aW1lLmZvcm1hdDpiLnRpbWUuZm9ybWF0LnV0YyxhLmRlZmF1bHRBeGlzVGltZUZvcm1hdD1hLmF4aXNUaW1lRm9ybWF0Lm11bHRpKFtbIi4lTCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0SG91cnMoKX1dLFsiJS1tLyUtZCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0RGF5KCkmJjEhPT1hLmdldERhdGUoKX1dLFsiJS1tLyUtZCIsZnVuY3Rpb24oYSl7cmV0dXJuIDEhPT1hLmdldERhdGUoKX1dLFsiJS1tLyUtZCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0TW9udGgoKX1dLFsiJVkvJS1tLyUtZCIsZnVuY3Rpb24oKXtyZXR1cm4hMH1dXSksYS5oaWRkZW5UYXJnZXRJZHM9W10sYS5oaWRkZW5MZWdlbmRJZHM9W10sYS5mb2N1c2VkVGFyZ2V0SWRzPVtdLGEuZGVmb2N1c2VkVGFyZ2V0SWRzPVtdLGEueE9yaWVudD1jLmF4aXNfcm90YXRlZD8ibGVmdCI6ImJvdHRvbSIsYS55T3JpZW50PWMuYXhpc19yb3RhdGVkP2MuYXhpc195X2lubmVyPyJ0b3AiOiJib3R0b20iOmMuYXhpc195X2lubmVyPyJyaWdodCI6ImxlZnQiLGEueTJPcmllbnQ9Yy5heGlzX3JvdGF0ZWQ/Yy5heGlzX3kyX2lubmVyPyJib3R0b20iOiJ0b3AiOmMuYXhpc195Ml9pbm5lcj8ibGVmdCI6InJpZ2h0IixhLnN1YlhPcmllbnQ9Yy5heGlzX3JvdGF0ZWQ/ImxlZnQiOiJib3R0b20iLGEuaXNMZWdlbmRSaWdodD0icmlnaHQiPT09Yy5sZWdlbmRfcG9zaXRpb24sYS5pc0xlZ2VuZEluc2V0PSJpbnNldCI9PT1jLmxlZ2VuZF9wb3NpdGlvbixhLmlzTGVnZW5kVG9wPSJ0b3AtbGVmdCI9PT1jLmxlZ2VuZF9pbnNldF9hbmNob3J8fCJ0b3AtcmlnaHQiPT09Yy5sZWdlbmRfaW5zZXRfYW5jaG9yLGEuaXNMZWdlbmRMZWZ0PSJ0b3AtbGVmdCI9PT1jLmxlZ2VuZF9pbnNldF9hbmNob3J8fCJib3R0b20tbGVmdCI9PT1jLmxlZ2VuZF9pbnNldF9hbmNob3IsYS5sZWdlbmRTdGVwPTAsYS5sZWdlbmRJdGVtV2lkdGg9MCxhLmxlZ2VuZEl0ZW1IZWlnaHQ9MCxhLmN1cnJlbnRNYXhUaWNrV2lkdGhzPXt4OjAseTowLHkyOjB9LGEucm90YXRlZF9wYWRkaW5nX2xlZnQ9MzAsYS5yb3RhdGVkX3BhZGRpbmdfcmlnaHQ9Yy5heGlzX3JvdGF0ZWQmJiFjLmF4aXNfeF9zaG93PzA6MzAsYS5yb3RhdGVkX3BhZGRpbmdfdG9wPTUsYS53aXRob3V0RmFkZUluPXt9LGEuaW50ZXJ2YWxGb3JPYnNlcnZlSW5zZXJ0ZWQ9dm9pZCAwLGEuYXhlcy5zdWJ4PWIuc2VsZWN0QWxsKFtdKX0saS5pbml0Q2hhcnRFbGVtZW50cz1mdW5jdGlvbigpe3RoaXMuaW5pdEJhciYmdGhpcy5pbml0QmFyKCksdGhpcy5pbml0TGluZSYmdGhpcy5pbml0TGluZSgpLHRoaXMuaW5pdEFyYyYmdGhpcy5pbml0QXJjKCksdGhpcy5pbml0R2F1Z2UmJnRoaXMuaW5pdEdhdWdlKCksdGhpcy5pbml0VGV4dCYmdGhpcy5pbml0VGV4dCgpfSxpLmluaXRXaXRoRGF0YT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcyxlPWQuZDMsZz1kLmNvbmZpZyxoPSEwO2QuYXhpcz1uZXcgZihkKSxkLmluaXRQaWUmJmQuaW5pdFBpZSgpLGQuaW5pdEJydXNoJiZkLmluaXRCcnVzaCgpLGQuaW5pdFpvb20mJmQuaW5pdFpvb20oKSxnLmJpbmR0bz8iZnVuY3Rpb24iPT10eXBlb2YgZy5iaW5kdG8ubm9kZT9kLnNlbGVjdENoYXJ0PWcuYmluZHRvOmQuc2VsZWN0Q2hhcnQ9ZS5zZWxlY3QoZy5iaW5kdG8pOmQuc2VsZWN0Q2hhcnQ9ZS5zZWxlY3RBbGwoW10pLGQuc2VsZWN0Q2hhcnQuZW1wdHkoKSYmKGQuc2VsZWN0Q2hhcnQ9ZS5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLnN0eWxlKCJvcGFjaXR5IiwwKSxkLm9ic2VydmVJbnNlcnRlZChkLnNlbGVjdENoYXJ0KSxoPSExKSxkLnNlbGVjdENoYXJ0Lmh0bWwoIiIpLmNsYXNzZWQoImMzIiwhMCksZC5kYXRhLnhzPXt9LGQuZGF0YS50YXJnZXRzPWQuY29udmVydERhdGFUb1RhcmdldHMoYSksZy5kYXRhX2ZpbHRlciYmKGQuZGF0YS50YXJnZXRzPWQuZGF0YS50YXJnZXRzLmZpbHRlcihnLmRhdGFfZmlsdGVyKSksZy5kYXRhX2hpZGUmJmQuYWRkSGlkZGVuVGFyZ2V0SWRzKGcuZGF0YV9oaWRlPT09ITA/ZC5tYXBUb0lkcyhkLmRhdGEudGFyZ2V0cyk6Zy5kYXRhX2hpZGUpLGcubGVnZW5kX2hpZGUmJmQuYWRkSGlkZGVuTGVnZW5kSWRzKGcubGVnZW5kX2hpZGU9PT0hMD9kLm1hcFRvSWRzKGQuZGF0YS50YXJnZXRzKTpnLmxlZ2VuZF9oaWRlKSxkLmhhc1R5cGUoImdhdWdlIikmJihnLmxlZ2VuZF9zaG93PSExKSxkLnVwZGF0ZVNpemVzKCksZC51cGRhdGVTY2FsZXMoKSxkLnguZG9tYWluKGUuZXh0ZW50KGQuZ2V0WERvbWFpbihkLmRhdGEudGFyZ2V0cykpKSxkLnkuZG9tYWluKGQuZ2V0WURvbWFpbihkLmRhdGEudGFyZ2V0cywieSIpKSxkLnkyLmRvbWFpbihkLmdldFlEb21haW4oZC5kYXRhLnRhcmdldHMsInkyIikpLGQuc3ViWC5kb21haW4oZC54LmRvbWFpbigpKSxkLnN1YlkuZG9tYWluKGQueS5kb21haW4oKSksZC5zdWJZMi5kb21haW4oZC55Mi5kb21haW4oKSksZC5vcmdYRG9tYWluPWQueC5kb21haW4oKSxkLmJydXNoJiZkLmJydXNoLnNjYWxlKGQuc3ViWCksZy56b29tX2VuYWJsZWQmJmQuem9vbS5zY2FsZShkLngpLGQuc3ZnPWQuc2VsZWN0Q2hhcnQuYXBwZW5kKCJzdmciKS5zdHlsZSgib3ZlcmZsb3ciLCJoaWRkZW4iKS5vbigibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZy5vbm1vdXNlb3Zlci5jYWxsKGQpfSkub24oIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGcub25tb3VzZW91dC5jYWxsKGQpfSksZC5jb25maWcuc3ZnX2NsYXNzbmFtZSYmZC5zdmcuYXR0cigiY2xhc3MiLGQuY29uZmlnLnN2Z19jbGFzc25hbWUpLGI9ZC5zdmcuYXBwZW5kKCJkZWZzIiksZC5jbGlwQ2hhcnQ9ZC5hcHBlbmRDbGlwKGIsZC5jbGlwSWQpLGQuY2xpcFhBeGlzPWQuYXBwZW5kQ2xpcChiLGQuY2xpcElkRm9yWEF4aXMpLGQuY2xpcFlBeGlzPWQuYXBwZW5kQ2xpcChiLGQuY2xpcElkRm9yWUF4aXMpLGQuY2xpcEdyaWQ9ZC5hcHBlbmRDbGlwKGIsZC5jbGlwSWRGb3JHcmlkKSxkLmNsaXBTdWJjaGFydD1kLmFwcGVuZENsaXAoYixkLmNsaXBJZEZvclN1YmNoYXJ0KSxkLnVwZGF0ZVN2Z1NpemUoKSxjPWQubWFpbj1kLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGQuZ2V0VHJhbnNsYXRlKCJtYWluIikpLGQuaW5pdFN1YmNoYXJ0JiZkLmluaXRTdWJjaGFydCgpLGQuaW5pdFRvb2x0aXAmJmQuaW5pdFRvb2x0aXAoKSxkLmluaXRMZWdlbmQmJmQuaW5pdExlZ2VuZCgpLGQuaW5pdFRpdGxlJiZkLmluaXRUaXRsZSgpLGMuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGwudGV4dCsiICIrbC5lbXB0eSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLGQuaW5pdFJlZ2lvbigpLGQuaW5pdEdyaWQoKSxjLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsZC5jbGlwUGF0aCkuYXR0cigiY2xhc3MiLGwuY2hhcnQpLGcuZ3JpZF9saW5lc19mcm9udCYmZC5pbml0R3JpZExpbmVzKCksZC5pbml0RXZlbnRSZWN0KCksZC5pbml0Q2hhcnRFbGVtZW50cygpLGMuaW5zZXJ0KCJyZWN0IixnLnpvb21fcHJpdmlsZWdlZD9udWxsOiJnLiIrbC5yZWdpb25zKS5hdHRyKCJjbGFzcyIsbC56b29tUmVjdCkuYXR0cigid2lkdGgiLGQud2lkdGgpLmF0dHIoImhlaWdodCIsZC5oZWlnaHQpLnN0eWxlKCJvcGFjaXR5IiwwKS5vbigiZGJsY2xpY2suem9vbSIsbnVsbCksZy5heGlzX3hfZXh0ZW50JiZkLmJydXNoLmV4dGVudChkLmdldERlZmF1bHRFeHRlbnQoKSksZC5heGlzLmluaXQoKSxkLnVwZGF0ZVRhcmdldHMoZC5kYXRhLnRhcmdldHMpLGgmJihkLnVwZGF0ZURpbWVuc2lvbigpLGQuY29uZmlnLm9uaW5pdC5jYWxsKGQpLGQucmVkcmF3KHt3aXRoVHJhbnNpdGlvbjohMSx3aXRoVHJhbnNmb3JtOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwLHdpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhUcmFuc2l0aW9uRm9yQXhpczohMX0pKSxkLmJpbmRSZXNpemUoKSxkLmFwaS5lbGVtZW50PWQuc2VsZWN0Q2hhcnQubm9kZSgpfSxpLnNtb290aExpbmVzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpczsiZ3JpZCI9PT1iJiZhLmVhY2goZnVuY3Rpb24oKXt2YXIgYT1jLmQzLnNlbGVjdCh0aGlzKSxiPWEuYXR0cigieDEiKSxkPWEuYXR0cigieDIiKSxlPWEuYXR0cigieTEiKSxmPWEuYXR0cigieTIiKTthLmF0dHIoe3gxOk1hdGguY2VpbChiKSx4MjpNYXRoLmNlaWwoZCkseTE6TWF0aC5jZWlsKGUpLHkyOk1hdGguY2VpbChmKX0pfSl9LGkudXBkYXRlU2l6ZXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5jb25maWcsYz1hLmxlZ2VuZD9hLmdldExlZ2VuZEhlaWdodCgpOjAsZD1hLmxlZ2VuZD9hLmdldExlZ2VuZFdpZHRoKCk6MCxlPWEuaXNMZWdlbmRSaWdodHx8YS5pc0xlZ2VuZEluc2V0PzA6YyxmPWEuaGFzQXJjVHlwZSgpLGc9Yi5heGlzX3JvdGF0ZWR8fGY/MDphLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCJ4IiksaD1iLnN1YmNoYXJ0X3Nob3cmJiFmP2Iuc3ViY2hhcnRfc2l6ZV9oZWlnaHQrZzowO2EuY3VycmVudFdpZHRoPWEuZ2V0Q3VycmVudFdpZHRoKCksYS5jdXJyZW50SGVpZ2h0PWEuZ2V0Q3VycmVudEhlaWdodCgpLGEubWFyZ2luPWIuYXhpc19yb3RhdGVkP3t0b3A6YS5nZXRIb3Jpem9udGFsQXhpc0hlaWdodCgieTIiKSthLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkscmlnaHQ6Zj8wOmEuZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLGJvdHRvbTphLmdldEhvcml6b250YWxBeGlzSGVpZ2h0KCJ5IikrZSthLmdldEN1cnJlbnRQYWRkaW5nQm90dG9tKCksbGVmdDpoKyhmPzA6YS5nZXRDdXJyZW50UGFkZGluZ0xlZnQoKSl9Ont0b3A6NCthLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkscmlnaHQ6Zj8wOmEuZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLGJvdHRvbTpnK2grZSthLmdldEN1cnJlbnRQYWRkaW5nQm90dG9tKCksbGVmdDpmPzA6YS5nZXRDdXJyZW50UGFkZGluZ0xlZnQoKX0sYS5tYXJnaW4yPWIuYXhpc19yb3RhdGVkP3t0b3A6YS5tYXJnaW4udG9wLHJpZ2h0Ok5hTixib3R0b206MjArZSxsZWZ0OmEucm90YXRlZF9wYWRkaW5nX2xlZnR9Ont0b3A6YS5jdXJyZW50SGVpZ2h0LWgtZSxyaWdodDpOYU4sYm90dG9tOmcrZSxsZWZ0OmEubWFyZ2luLmxlZnR9LGEubWFyZ2luMz17dG9wOjAscmlnaHQ6TmFOLGJvdHRvbTowLGxlZnQ6MH0sYS51cGRhdGVTaXplRm9yTGVnZW5kJiZhLnVwZGF0ZVNpemVGb3JMZWdlbmQoYyxkKSxhLndpZHRoPWEuY3VycmVudFdpZHRoLWEubWFyZ2luLmxlZnQtYS5tYXJnaW4ucmlnaHQsYS5oZWlnaHQ9YS5jdXJyZW50SGVpZ2h0LWEubWFyZ2luLnRvcC1hLm1hcmdpbi5ib3R0b20sYS53aWR0aDwwJiYoYS53aWR0aD0wKSxhLmhlaWdodDwwJiYoYS5oZWlnaHQ9MCksYS53aWR0aDI9Yi5heGlzX3JvdGF0ZWQ/YS5tYXJnaW4ubGVmdC1hLnJvdGF0ZWRfcGFkZGluZ19sZWZ0LWEucm90YXRlZF9wYWRkaW5nX3JpZ2h0OmEud2lkdGgsYS5oZWlnaHQyPWIuYXhpc19yb3RhdGVkP2EuaGVpZ2h0OmEuY3VycmVudEhlaWdodC1hLm1hcmdpbjIudG9wLWEubWFyZ2luMi5ib3R0b20sYS53aWR0aDI8MCYmKGEud2lkdGgyPTApLGEuaGVpZ2h0MjwwJiYoYS5oZWlnaHQyPTApLGEuYXJjV2lkdGg9YS53aWR0aC0oYS5pc0xlZ2VuZFJpZ2h0P2QrMTA6MCksYS5hcmNIZWlnaHQ9YS5oZWlnaHQtKGEuaXNMZWdlbmRSaWdodD8wOjEwKSxhLmhhc1R5cGUoImdhdWdlIikmJiFiLmdhdWdlX2Z1bGxDaXJjbGUmJihhLmFyY0hlaWdodCs9YS5oZWlnaHQtYS5nZXRHYXVnZUxhYmVsSGVpZ2h0KCkpLGEudXBkYXRlUmFkaXVzJiZhLnVwZGF0ZVJhZGl1cygpLGEuaXNMZWdlbmRSaWdodCYmZiYmKGEubWFyZ2luMy5sZWZ0PWEuYXJjV2lkdGgvMisxLjEqYS5yYWRpdXNFeHBhbmRlZCl9LGkudXBkYXRlVGFyZ2V0cz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2IudXBkYXRlVGFyZ2V0c0ZvclRleHQoYSksYi51cGRhdGVUYXJnZXRzRm9yQmFyKGEpLGIudXBkYXRlVGFyZ2V0c0ZvckxpbmUoYSksYi5oYXNBcmNUeXBlKCkmJmIudXBkYXRlVGFyZ2V0c0ZvckFyYyYmYi51cGRhdGVUYXJnZXRzRm9yQXJjKGEpLGIudXBkYXRlVGFyZ2V0c0ZvclN1YmNoYXJ0JiZiLnVwZGF0ZVRhcmdldHNGb3JTdWJjaGFydChhKSxiLnNob3dUYXJnZXRzKCl9LGkuc2hvd1RhcmdldHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2Euc3ZnLnNlbGVjdEFsbCgiLiIrbC50YXJnZXQpLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYS5pc1RhcmdldFRvU2hvdyhiLmlkKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhLmNvbmZpZy50cmFuc2l0aW9uX2R1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSl9LGkucmVkcmF3PWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksaixrLG0sbixvLHAscSxyLHMsdCx1LHYseCx5LHosQSxCLEMsRCxFLEYsRyxIPXRoaXMsST1ILm1haW4sSj1ILmQzLEs9SC5jb25maWcsTD1ILmdldFNoYXBlSW5kaWNlcyhILmlzQXJlYVR5cGUpLE09SC5nZXRTaGFwZUluZGljZXMoSC5pc0JhclR5cGUpLE49SC5nZXRTaGFwZUluZGljZXMoSC5pc0xpbmVUeXBlKSxPPUguaGFzQXJjVHlwZSgpLFA9SC5maWx0ZXJUYXJnZXRzVG9TaG93KEguZGF0YS50YXJnZXRzKSxRPUgueHYuYmluZChIKTtpZihhPWF8fHt9LGM9dyhhLCJ3aXRoWSIsITApLGQ9dyhhLCJ3aXRoU3ViY2hhcnQiLCEwKSxlPXcoYSwid2l0aFRyYW5zaXRpb24iLCEwKSxoPXcoYSwid2l0aFRyYW5zZm9ybSIsITEpLGk9dyhhLCJ3aXRoVXBkYXRlWERvbWFpbiIsITEpLGo9dyhhLCJ3aXRoVXBkYXRlT3JnWERvbWFpbiIsITEpLGs9dyhhLCJ3aXRoVHJpbVhEb21haW4iLCEwKSxwPXcoYSwid2l0aFVwZGF0ZVhBeGlzIixpKSxtPXcoYSwid2l0aExlZ2VuZCIsITEpLG49dyhhLCJ3aXRoRXZlbnRSZWN0IiwhMCksbz13KGEsIndpdGhEaW1lbnNpb24iLCEwKSxmPXcoYSwid2l0aFRyYW5zaXRpb25Gb3JFeGl0IixlKSxnPXcoYSwid2l0aFRyYW5zaXRpb25Gb3JBeGlzIixlKSx2PWU/Sy50cmFuc2l0aW9uX2R1cmF0aW9uOjAseD1mP3Y6MCx5PWc/djowLGI9Ynx8SC5heGlzLmdlbmVyYXRlVHJhbnNpdGlvbnMoeSksbSYmSy5sZWdlbmRfc2hvdz9ILnVwZGF0ZUxlZ2VuZChILm1hcFRvSWRzKEguZGF0YS50YXJnZXRzKSxhLGIpOm8mJkgudXBkYXRlRGltZW5zaW9uKCEwKSxILmlzQ2F0ZWdvcml6ZWQoKSYmMD09PVAubGVuZ3RoJiZILnguZG9tYWluKFswLEguYXhlcy54LnNlbGVjdEFsbCgiLnRpY2siKS5zaXplKCldKSxQLmxlbmd0aD8oSC51cGRhdGVYRG9tYWluKFAsaSxqLGspLEsuYXhpc194X3RpY2tfdmFsdWVzfHwoQj1ILmF4aXMudXBkYXRlWEF4aXNUaWNrVmFsdWVzKFApKSk6KEgueEF4aXMudGlja1ZhbHVlcyhbXSksSC5zdWJYQXhpcy50aWNrVmFsdWVzKFtdKSksSy56b29tX3Jlc2NhbGUmJiFhLmZsb3cmJihFPUgueC5vcmdEb21haW4oKSksSC55LmRvbWFpbihILmdldFlEb21haW4oUCwieSIsRSkpLEgueTIuZG9tYWluKEguZ2V0WURvbWFpbihQLCJ5MiIsRSkpLCFLLmF4aXNfeV90aWNrX3ZhbHVlcyYmSy5heGlzX3lfdGlja19jb3VudCYmSC55QXhpcy50aWNrVmFsdWVzKEguYXhpcy5nZW5lcmF0ZVRpY2tWYWx1ZXMoSC55LmRvbWFpbigpLEsuYXhpc195X3RpY2tfY291bnQpKSwhSy5heGlzX3kyX3RpY2tfdmFsdWVzJiZLLmF4aXNfeTJfdGlja19jb3VudCYmSC55MkF4aXMudGlja1ZhbHVlcyhILmF4aXMuZ2VuZXJhdGVUaWNrVmFsdWVzKEgueTIuZG9tYWluKCksSy5heGlzX3kyX3RpY2tfY291bnQpKSxILmF4aXMucmVkcmF3KGIsTyksSC5heGlzLnVwZGF0ZUxhYmVscyhlKSwoaXx8cCkmJlAubGVuZ3RoKWlmKEsuYXhpc194X3RpY2tfY3VsbGluZyYmQil7Zm9yKEM9MTtDPEIubGVuZ3RoO0MrKylpZihCLmxlbmd0aC9DPEsuYXhpc194X3RpY2tfY3VsbGluZ19tYXgpe0Q9QzticmVha31ILnN2Zy5zZWxlY3RBbGwoIi4iK2wuYXhpc1grIiAudGljayB0ZXh0IikuZWFjaChmdW5jdGlvbihhKXt2YXIgYj1CLmluZGV4T2YoYSk7Yj49MCYmSi5zZWxlY3QodGhpcykuc3R5bGUoImRpc3BsYXkiLGIlRD8ibm9uZSI6ImJsb2NrIil9KX1lbHNlIEguc3ZnLnNlbGVjdEFsbCgiLiIrbC5heGlzWCsiIC50aWNrIHRleHQiKS5zdHlsZSgiZGlzcGxheSIsImJsb2NrIik7cT1ILmdlbmVyYXRlRHJhd0FyZWE/SC5nZW5lcmF0ZURyYXdBcmVhKEwsITEpOnZvaWQgMCxyPUguZ2VuZXJhdGVEcmF3QmFyP0guZ2VuZXJhdGVEcmF3QmFyKE0pOnZvaWQgMCxzPUguZ2VuZXJhdGVEcmF3TGluZT9ILmdlbmVyYXRlRHJhd0xpbmUoTiwhMSk6dm9pZCAwLHQ9SC5nZW5lcmF0ZVhZRm9yVGV4dChMLE0sTiwhMCksdT1ILmdlbmVyYXRlWFlGb3JUZXh0KEwsTSxOLCExKSxjJiYoSC5zdWJZLmRvbWFpbihILmdldFlEb21haW4oUCwieSIpKSxILnN1YlkyLmRvbWFpbihILmdldFlEb21haW4oUCwieTIiKSkpLEgudXBkYXRlWGdyaWRGb2N1cygpLEkuc2VsZWN0KCJ0ZXh0LiIrbC50ZXh0KyIuIitsLmVtcHR5KS5hdHRyKCJ4IixILndpZHRoLzIpLmF0dHIoInkiLEguaGVpZ2h0LzIpLnRleHQoSy5kYXRhX2VtcHR5X2xhYmVsX3RleHQpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsUC5sZW5ndGg/MDoxKSxILnVwZGF0ZUdyaWQodiksSC51cGRhdGVSZWdpb24odiksSC51cGRhdGVCYXIoeCksSC51cGRhdGVMaW5lKHgpLEgudXBkYXRlQXJlYSh4KSxILnVwZGF0ZUNpcmNsZSgpLEguaGFzRGF0YUxhYmVsKCkmJkgudXBkYXRlVGV4dCh4KSxILnJlZHJhd1RpdGxlJiZILnJlZHJhd1RpdGxlKCksSC5yZWRyYXdBcmMmJkgucmVkcmF3QXJjKHYseCxoKSxILnJlZHJhd1N1YmNoYXJ0JiZILnJlZHJhd1N1YmNoYXJ0KGQsYix2LHgsTCxNLE4pLEkuc2VsZWN0QWxsKCIuIitsLnNlbGVjdGVkQ2lyY2xlcykuZmlsdGVyKEguaXNCYXJUeXBlLmJpbmQoSCkpLnNlbGVjdEFsbCgiY2lyY2xlIikucmVtb3ZlKCksSy5pbnRlcmFjdGlvbl9lbmFibGVkJiYhYS5mbG93JiZuJiYoSC5yZWRyYXdFdmVudFJlY3QoKSxILnVwZGF0ZVpvb20mJkgudXBkYXRlWm9vbSgpKSxILnVwZGF0ZUNpcmNsZVkoKSxGPShILmNvbmZpZy5heGlzX3JvdGF0ZWQ/SC5jaXJjbGVZOkguY2lyY2xlWCkuYmluZChIKSxHPShILmNvbmZpZy5heGlzX3JvdGF0ZWQ/SC5jaXJjbGVYOkguY2lyY2xlWSkuYmluZChIKSxhLmZsb3cmJihBPUguZ2VuZXJhdGVGbG93KHt0YXJnZXRzOlAsZmxvdzphLmZsb3csZHVyYXRpb246YS5mbG93LmR1cmF0aW9uLGRyYXdCYXI6cixkcmF3TGluZTpzLGRyYXdBcmVhOnEsY3g6RixjeTpHLHh2OlEseEZvclRleHQ6dCx5Rm9yVGV4dDp1fSkpLCh2fHxBKSYmSC5pc1RhYlZpc2libGUoKT9KLnRyYW5zaXRpb24oKS5kdXJhdGlvbih2KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9W107W0gucmVkcmF3QmFyKHIsITApLEgucmVkcmF3TGluZShzLCEwKSxILnJlZHJhd0FyZWEocSwhMCksSC5yZWRyYXdDaXJjbGUoRixHLCEwKSxILnJlZHJhd1RleHQodCx1LGEuZmxvdywhMCksSC5yZWRyYXdSZWdpb24oITApLEgucmVkcmF3R3JpZCghMCldLmZvckVhY2goZnVuY3Rpb24oYSl7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IucHVzaChhKX0pfSksej1ILmdlbmVyYXRlV2FpdCgpLGIuZm9yRWFjaChmdW5jdGlvbihhKXt6LmFkZChhKX0pfSkuY2FsbCh6LGZ1bmN0aW9uKCl7QSYmQSgpLEsub25yZW5kZXJlZCYmSy5vbnJlbmRlcmVkLmNhbGwoSCl9KTooSC5yZWRyYXdCYXIociksSC5yZWRyYXdMaW5lKHMpLEgucmVkcmF3QXJlYShxKSxILnJlZHJhd0NpcmNsZShGLEcpLEgucmVkcmF3VGV4dCh0LHUsYS5mbG93KSxILnJlZHJhd1JlZ2lvbigpLEgucmVkcmF3R3JpZCgpLEsub25yZW5kZXJlZCYmSy5vbnJlbmRlcmVkLmNhbGwoSCkpLEgubWFwVG9JZHMoSC5kYXRhLnRhcmdldHMpLmZvckVhY2goZnVuY3Rpb24oYSl7SC53aXRob3V0RmFkZUluW2FdPSEwfSl9LGkudXBkYXRlQW5kUmVkcmF3PWZ1bmN0aW9uKGEpe3ZhciBiLGM9dGhpcyxkPWMuY29uZmlnO2E9YXx8e30sYS53aXRoVHJhbnNpdGlvbj13KGEsIndpdGhUcmFuc2l0aW9uIiwhMCksYS53aXRoVHJhbnNmb3JtPXcoYSwid2l0aFRyYW5zZm9ybSIsITEpLGEud2l0aExlZ2VuZD13KGEsIndpdGhMZWdlbmQiLCExKSxhLndpdGhVcGRhdGVYRG9tYWluPSEwLGEud2l0aFVwZGF0ZU9yZ1hEb21haW49ITAsYS53aXRoVHJhbnNpdGlvbkZvckV4aXQ9ITEsYS53aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybT13KGEsIndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtIixhLndpdGhUcmFuc2l0aW9uKSxjLnVwZGF0ZVNpemVzKCksYS53aXRoTGVnZW5kJiZkLmxlZ2VuZF9zaG93fHwoYj1jLmF4aXMuZ2VuZXJhdGVUcmFuc2l0aW9ucyhhLndpdGhUcmFuc2l0aW9uRm9yQXhpcz9kLnRyYW5zaXRpb25fZHVyYXRpb246MCksYy51cGRhdGVTY2FsZXMoKSxjLnVwZGF0ZVN2Z1NpemUoKSxjLnRyYW5zZm9ybUFsbChhLndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtLGIpKSxjLnJlZHJhdyhhLGIpfSxpLnJlZHJhd1dpdGhvdXRSZXNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5yZWRyYXcoe3dpdGhZOiExLHdpdGhTdWJjaGFydDohMSx3aXRoRXZlbnRSZWN0OiExLHdpdGhUcmFuc2l0aW9uRm9yQXhpczohMX0pfSxpLmlzVGltZVNlcmllcz1mdW5jdGlvbigpe3JldHVybiJ0aW1lc2VyaWVzIj09PXRoaXMuY29uZmlnLmF4aXNfeF90eXBlfSxpLmlzQ2F0ZWdvcml6ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcuYXhpc194X3R5cGUuaW5kZXhPZigiY2F0ZWdvciIpPj0wfSxpLmlzQ3VzdG9tWD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZztyZXR1cm4hYS5pc1RpbWVTZXJpZXMoKSYmKGIuZGF0YV94fHx2KGIuZGF0YV94cykpfSxpLmlzVGltZVNlcmllc1k9ZnVuY3Rpb24oKXtyZXR1cm4idGltZXNlcmllcyI9PT10aGlzLmNvbmZpZy5heGlzX3lfdHlwZX0saS5nZXRUcmFuc2xhdGU9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPXRoaXMsZT1kLmNvbmZpZztyZXR1cm4ibWFpbiI9PT1hPyhiPXMoZC5tYXJnaW4ubGVmdCksYz1zKGQubWFyZ2luLnRvcCkpOiJjb250ZXh0Ij09PWE/KGI9cyhkLm1hcmdpbjIubGVmdCksYz1zKGQubWFyZ2luMi50b3ApKToibGVnZW5kIj09PWE/KGI9ZC5tYXJnaW4zLmxlZnQsYz1kLm1hcmdpbjMudG9wKToieCI9PT1hPyhiPTAsYz1lLmF4aXNfcm90YXRlZD8wOmQuaGVpZ2h0KToieSI9PT1hPyhiPTAsYz1lLmF4aXNfcm90YXRlZD9kLmhlaWdodDowKToieTIiPT09YT8oYj1lLmF4aXNfcm90YXRlZD8wOmQud2lkdGgsYz1lLmF4aXNfcm90YXRlZD8xOjApOiJzdWJ4Ij09PWE/KGI9MCxjPWUuYXhpc19yb3RhdGVkPzA6ZC5oZWlnaHQyKToiYXJjIj09PWEmJihiPWQuYXJjV2lkdGgvMixjPWQuYXJjSGVpZ2h0LzIpLCJ0cmFuc2xhdGUoIitiKyIsIitjKyIpIn0saS5pbml0aWFsT3BhY2l0eT1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PWEudmFsdWUmJnRoaXMud2l0aG91dEZhZGVJblthLmlkXT8xOjB9LGkuaW5pdGlhbE9wYWNpdHlGb3JDaXJjbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT1hLnZhbHVlJiZ0aGlzLndpdGhvdXRGYWRlSW5bYS5pZF0/dGhpcy5vcGFjaXR5Rm9yQ2lyY2xlKGEpOjB9LGkub3BhY2l0eUZvckNpcmNsZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmNvbmZpZy5wb2ludF9zaG93PzE6MDtyZXR1cm4gbShhLnZhbHVlKT90aGlzLmlzU2NhdHRlclR5cGUoYSk/LjU6YjowfSxpLm9wYWNpdHlGb3JUZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzRGF0YUxhYmVsKCk/MTowfSxpLnh4PWZ1bmN0aW9uKGEpe3JldHVybiBhP3RoaXMueChhLngpOm51bGx9LGkueHY9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWEudmFsdWU7cmV0dXJuIGIuaXNUaW1lU2VyaWVzKCk/Yz1iLnBhcnNlRGF0ZShhLnZhbHVlKTpiLmlzQ2F0ZWdvcml6ZWQoKSYmInN0cmluZyI9PXR5cGVvZiBhLnZhbHVlJiYoYz1iLmNvbmZpZy5heGlzX3hfY2F0ZWdvcmllcy5pbmRleE9mKGEudmFsdWUpKSxNYXRoLmNlaWwoYi54KGMpKX0saS55dj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9YS5heGlzJiYieTIiPT09YS5heGlzP2IueTI6Yi55O3JldHVybiBNYXRoLmNlaWwoYyhhLnZhbHVlKSl9LGkuc3VieHg9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5zdWJYKGEueCk6bnVsbH0saS50cmFuc2Zvcm1NYWluPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpcztiJiZiLmF4aXNYP2M9Yi5heGlzWDooYz1mLm1haW4uc2VsZWN0KCIuIitsLmF4aXNYKSxhJiYoYz1jLnRyYW5zaXRpb24oKSkpLGImJmIuYXhpc1k/ZD1iLmF4aXNZOihkPWYubWFpbi5zZWxlY3QoIi4iK2wuYXhpc1kpLGEmJihkPWQudHJhbnNpdGlvbigpKSksYiYmYi5heGlzWTI/ZT1iLmF4aXNZMjooZT1mLm1haW4uc2VsZWN0KCIuIitsLmF4aXNZMiksYSYmKGU9ZS50cmFuc2l0aW9uKCkpKSwoYT9mLm1haW4udHJhbnNpdGlvbigpOmYubWFpbikuYXR0cigidHJhbnNmb3JtIixmLmdldFRyYW5zbGF0ZSgibWFpbiIpKSxjLmF0dHIoInRyYW5zZm9ybSIsZi5nZXRUcmFuc2xhdGUoIngiKSksZC5hdHRyKCJ0cmFuc2Zvcm0iLGYuZ2V0VHJhbnNsYXRlKCJ5IikpLGUuYXR0cigidHJhbnNmb3JtIixmLmdldFRyYW5zbGF0ZSgieTIiKSksZi5tYWluLnNlbGVjdCgiLiIrbC5jaGFydEFyY3MpLmF0dHIoInRyYW5zZm9ybSIsZi5nZXRUcmFuc2xhdGUoImFyYyIpKX0saS50cmFuc2Zvcm1BbGw9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO2MudHJhbnNmb3JtTWFpbihhLGIpLGMuY29uZmlnLnN1YmNoYXJ0X3Nob3cmJmMudHJhbnNmb3JtQ29udGV4dChhLGIpLGMubGVnZW5kJiZjLnRyYW5zZm9ybUxlZ2VuZChhKX0saS51cGRhdGVTdmdTaXplPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuc3ZnLnNlbGVjdCgiLmMzLWJydXNoIC5iYWNrZ3JvdW5kIik7YS5zdmcuYXR0cigid2lkdGgiLGEuY3VycmVudFdpZHRoKS5hdHRyKCJoZWlnaHQiLGEuY3VycmVudEhlaWdodCksYS5zdmcuc2VsZWN0QWxsKFsiIyIrYS5jbGlwSWQsIiMiK2EuY2xpcElkRm9yR3JpZF0pLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGEuaGVpZ2h0KSxhLnN2Zy5zZWxlY3QoIiMiK2EuY2xpcElkRm9yWEF4aXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoIngiLGEuZ2V0WEF4aXNDbGlwWC5iaW5kKGEpKS5hdHRyKCJ5IixhLmdldFhBeGlzQ2xpcFkuYmluZChhKSkuYXR0cigid2lkdGgiLGEuZ2V0WEF4aXNDbGlwV2lkdGguYmluZChhKSkuYXR0cigiaGVpZ2h0IixhLmdldFhBeGlzQ2xpcEhlaWdodC5iaW5kKGEpKSxhLnN2Zy5zZWxlY3QoIiMiK2EuY2xpcElkRm9yWUF4aXMpLnNlbGVjdCgicmVjdCIpLmF0dHIoIngiLGEuZ2V0WUF4aXNDbGlwWC5iaW5kKGEpKS5hdHRyKCJ5IixhLmdldFlBeGlzQ2xpcFkuYmluZChhKSkuYXR0cigid2lkdGgiLGEuZ2V0WUF4aXNDbGlwV2lkdGguYmluZChhKSkuYXR0cigiaGVpZ2h0IixhLmdldFlBeGlzQ2xpcEhlaWdodC5iaW5kKGEpKSxhLnN2Zy5zZWxlY3QoIiMiK2EuY2xpcElkRm9yU3ViY2hhcnQpLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIixhLndpZHRoKS5hdHRyKCJoZWlnaHQiLGIuc2l6ZSgpP2IuYXR0cigiaGVpZ2h0Iik6MCksYS5zdmcuc2VsZWN0KCIuIitsLnpvb21SZWN0KS5hdHRyKCJ3aWR0aCIsYS53aWR0aCkuYXR0cigiaGVpZ2h0IixhLmhlaWdodCksYS5zZWxlY3RDaGFydC5zdHlsZSgibWF4LWhlaWdodCIsYS5jdXJyZW50SGVpZ2h0KyJweCIpfSxpLnVwZGF0ZURpbWVuc2lvbj1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2F8fChiLmNvbmZpZy5heGlzX3JvdGF0ZWQ/KGIuYXhlcy54LmNhbGwoYi54QXhpcyksYi5heGVzLnN1YnguY2FsbChiLnN1YlhBeGlzKSk6KGIuYXhlcy55LmNhbGwoYi55QXhpcyksYi5heGVzLnkyLmNhbGwoYi55MkF4aXMpKSksYi51cGRhdGVTaXplcygpLGIudXBkYXRlU2NhbGVzKCksYi51cGRhdGVTdmdTaXplKCksYi50cmFuc2Zvcm1BbGwoITEpfSxpLm9ic2VydmVJbnNlcnRlZD1mdW5jdGlvbihiKXt2YXIgYyxkPXRoaXM7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyP3ZvaWQgYS5jb25zb2xlLmVycm9yKCJNdXRhdGlvbk9ic2VydmVyIG5vdCBkZWZpbmVkLiIpOihjPW5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXsiY2hpbGRMaXN0Ij09PWUudHlwZSYmZS5wcmV2aW91c1NpYmxpbmcmJihjLmRpc2Nvbm5lY3QoKSxkLmludGVydmFsRm9yT2JzZXJ2ZUluc2VydGVkPWEuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtiLm5vZGUoKS5wYXJlbnROb2RlJiYoYS5jbGVhckludGVydmFsKGQuaW50ZXJ2YWxGb3JPYnNlcnZlSW5zZXJ0ZWQpLGQudXBkYXRlRGltZW5zaW9uKCksZC5icnVzaCYmZC5icnVzaC51cGRhdGUoKSxkLmNvbmZpZy5vbmluaXQuY2FsbChkKSxkLnJlZHJhdyh7d2l0aFRyYW5zZm9ybTohMCx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVHJhbnNpdGlvbjohMSx3aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybTohMSx3aXRoTGVnZW5kOiEwfSksYi50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpKX0sMTApKX0pfSksdm9pZCBjLm9ic2VydmUoYi5ub2RlKCkse2F0dHJpYnV0ZXM6ITAsY2hpbGRMaXN0OiEwLGNoYXJhY3RlckRhdGE6ITB9KSl9LGkuYmluZFJlc2l6ZT1mdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZztpZihiLnJlc2l6ZUZ1bmN0aW9uPWIuZ2VuZXJhdGVSZXNpemUoKSxiLnJlc2l6ZUZ1bmN0aW9uLmFkZChmdW5jdGlvbigpe2Mub25yZXNpemUuY2FsbChiKX0pLGMucmVzaXplX2F1dG8mJmIucmVzaXplRnVuY3Rpb24uYWRkKGZ1bmN0aW9uKCl7dm9pZCAwIT09Yi5yZXNpemVUaW1lb3V0JiZhLmNsZWFyVGltZW91dChiLnJlc2l6ZVRpbWVvdXQpLGIucmVzaXplVGltZW91dD1hLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtkZWxldGUgYi5yZXNpemVUaW1lb3V0LGIuYXBpLmZsdXNoKCl9LDEwMCl9KSxiLnJlc2l6ZUZ1bmN0aW9uLmFkZChmdW5jdGlvbigpe2Mub25yZXNpemVkLmNhbGwoYil9KSxhLmF0dGFjaEV2ZW50KWEuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixiLnJlc2l6ZUZ1bmN0aW9uKTtlbHNlIGlmKGEuYWRkRXZlbnRMaXN0ZW5lcilhLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYi5yZXNpemVGdW5jdGlvbiwhMSk7ZWxzZXt2YXIgZD1hLm9ucmVzaXplO2Q/ZC5hZGQmJmQucmVtb3ZlfHwoZD1iLmdlbmVyYXRlUmVzaXplKCksZC5hZGQoYS5vbnJlc2l6ZSkpOmQ9Yi5nZW5lcmF0ZVJlc2l6ZSgpLGQuYWRkKGIucmVzaXplRnVuY3Rpb24pLGEub25yZXNpemU9ZH19LGkuZ2VuZXJhdGVSZXNpemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoKX0pfXZhciBiPVtdO3JldHVybiBhLmFkZD1mdW5jdGlvbihhKXtiLnB1c2goYSl9LGEucmVtb3ZlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGJbY109PT1hKXtiLnNwbGljZShjLDEpO2JyZWFrfX0sYX0saS5lbmRhbGw9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wO2EuZWFjaChmdW5jdGlvbigpeysrY30pLmVhY2goImVuZCIsZnVuY3Rpb24oKXstLWN8fGIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LGkuZ2VuZXJhdGVXYWl0PWZ1bmN0aW9uKCl7dmFyIGE9W10sYj1mdW5jdGlvbihiLGMpe3ZhciBkPXNldEludGVydmFsKGZ1bmN0aW9uKCl7dmFyIGI9MDthLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoYS5lbXB0eSgpKXJldHVybiB2b2lkKGIrPTEpO3RyeXthLnRyYW5zaXRpb24oKX1jYXRjaChjKXtiKz0xfX0pLGI9PT1hLmxlbmd0aCYmKGNsZWFySW50ZXJ2YWwoZCksYyYmYygpKX0sMTApfTtyZXR1cm4gYi5hZGQ9ZnVuY3Rpb24oYil7YS5wdXNoKGIpfSxifSxpLnBhcnNlRGF0ZT1mdW5jdGlvbihiKXt2YXIgYyxkPXRoaXM7cmV0dXJuIGIgaW5zdGFuY2VvZiBEYXRlP2M9Yjoic3RyaW5nIj09dHlwZW9mIGI/Yz1kLmRhdGFUaW1lRm9ybWF0KGQuY29uZmlnLmRhdGFfeEZvcm1hdCkucGFyc2UoYik6Im51bWJlciIhPXR5cGVvZiBifHxpc05hTihiKXx8KGM9bmV3IERhdGUoK2IpKSxjJiYhaXNOYU4oK2MpfHxhLmNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXJzZSB4ICciK2IrIicgdG8gRGF0ZSBvYmplY3QiKSxjfSxpLmlzVGFiVmlzaWJsZT1mdW5jdGlvbigpe3ZhciBhO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQuaGlkZGVuP2E9ImhpZGRlbiI6InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudC5tb3pIaWRkZW4/YT0ibW96SGlkZGVuIjoidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50Lm1zSGlkZGVuP2E9Im1zSGlkZGVuIjoidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiYmKGE9IndlYmtpdEhpZGRlbiIpLCFkb2N1bWVudFthXX0saS5nZXREZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7dmFyIGE9e2JpbmR0bzoiI2NoYXJ0IixzdmdfY2xhc3NuYW1lOnZvaWQgMCxzaXplX3dpZHRoOnZvaWQgMCxzaXplX2hlaWdodDp2b2lkIDAscGFkZGluZ19sZWZ0OnZvaWQgMCxwYWRkaW5nX3JpZ2h0OnZvaWQgMCxwYWRkaW5nX3RvcDp2b2lkIDAscGFkZGluZ19ib3R0b206dm9pZCAwLHJlc2l6ZV9hdXRvOiEwLHpvb21fZW5hYmxlZDohMSx6b29tX2V4dGVudDp2b2lkIDAsem9vbV9wcml2aWxlZ2VkOiExLHpvb21fcmVzY2FsZTohMSx6b29tX29uem9vbTpmdW5jdGlvbigpe30sem9vbV9vbnpvb21zdGFydDpmdW5jdGlvbigpe30sem9vbV9vbnpvb21lbmQ6ZnVuY3Rpb24oKXt9LHpvb21feF9taW46dm9pZCAwLHpvb21feF9tYXg6dm9pZCAwLGludGVyYWN0aW9uX2JyaWdodGVuOiEwLGludGVyYWN0aW9uX2VuYWJsZWQ6ITAsb25tb3VzZW92ZXI6ZnVuY3Rpb24oKXt9LG9ubW91c2VvdXQ6ZnVuY3Rpb24oKXt9LG9ucmVzaXplOmZ1bmN0aW9uKCl7fSxvbnJlc2l6ZWQ6ZnVuY3Rpb24oKXt9LG9uaW5pdDpmdW5jdGlvbigpe30sb25yZW5kZXJlZDpmdW5jdGlvbigpe30sdHJhbnNpdGlvbl9kdXJhdGlvbjozNTAsZGF0YV94OnZvaWQgMCxkYXRhX3hzOnt9LGRhdGFfeEZvcm1hdDoiJVktJW0tJWQiLGRhdGFfeExvY2FsdGltZTohMCxkYXRhX3hTb3J0OiEwLGRhdGFfaWRDb252ZXJ0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGRhdGFfbmFtZXM6e30sZGF0YV9jbGFzc2VzOnt9LGRhdGFfZ3JvdXBzOltdLGRhdGFfYXhlczp7fSxkYXRhX3R5cGU6dm9pZCAwLGRhdGFfdHlwZXM6e30sZGF0YV9sYWJlbHM6e30sZGF0YV9vcmRlcjoiZGVzYyIsZGF0YV9yZWdpb25zOnt9LGRhdGFfY29sb3I6dm9pZCAwLGRhdGFfY29sb3JzOnt9LGRhdGFfaGlkZTohMSxkYXRhX2ZpbHRlcjp2b2lkIDAsZGF0YV9zZWxlY3Rpb25fZW5hYmxlZDohMSxkYXRhX3NlbGVjdGlvbl9ncm91cGVkOiExLGRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxkYXRhX3NlbGVjdGlvbl9tdWx0aXBsZTohMCxkYXRhX3NlbGVjdGlvbl9kcmFnZ2FibGU6ITEsZGF0YV9vbmNsaWNrOmZ1bmN0aW9uKCl7fSxkYXRhX29ubW91c2VvdmVyOmZ1bmN0aW9uKCl7fSxkYXRhX29ubW91c2VvdXQ6ZnVuY3Rpb24oKXt9LGRhdGFfb25zZWxlY3RlZDpmdW5jdGlvbigpe30sZGF0YV9vbnVuc2VsZWN0ZWQ6ZnVuY3Rpb24oKXt9LGRhdGFfdXJsOnZvaWQgMCxkYXRhX2hlYWRlcnM6dm9pZCAwLGRhdGFfanNvbjp2b2lkIDAsZGF0YV9yb3dzOnZvaWQgMCxkYXRhX2NvbHVtbnM6dm9pZCAwLGRhdGFfbWltZVR5cGU6dm9pZCAwLGRhdGFfa2V5czp2b2lkIDAsZGF0YV9lbXB0eV9sYWJlbF90ZXh0OiIiLHN1YmNoYXJ0X3Nob3c6ITEsc3ViY2hhcnRfc2l6ZV9oZWlnaHQ6NjAsc3ViY2hhcnRfYXhpc194X3Nob3c6ITAsc3ViY2hhcnRfb25icnVzaDpmdW5jdGlvbigpe30sY29sb3JfcGF0dGVybjpbXSxjb2xvcl90aHJlc2hvbGQ6e30sbGVnZW5kX3Nob3c6ITAsbGVnZW5kX2hpZGU6ITEsbGVnZW5kX3Bvc2l0aW9uOiJib3R0b20iLGxlZ2VuZF9pbnNldF9hbmNob3I6InRvcC1sZWZ0IixsZWdlbmRfaW5zZXRfeDoxMCxsZWdlbmRfaW5zZXRfeTowLGxlZ2VuZF9pbnNldF9zdGVwOnZvaWQgMCxsZWdlbmRfaXRlbV9vbmNsaWNrOnZvaWQgMCxsZWdlbmRfaXRlbV9vbm1vdXNlb3Zlcjp2b2lkIDAsbGVnZW5kX2l0ZW1fb25tb3VzZW91dDp2b2lkIDAsbGVnZW5kX2VxdWFsbHk6ITEsbGVnZW5kX3BhZGRpbmc6MCxsZWdlbmRfaXRlbV90aWxlX3dpZHRoOjEwLGxlZ2VuZF9pdGVtX3RpbGVfaGVpZ2h0OjEwLGF4aXNfcm90YXRlZDohMSxheGlzX3hfc2hvdzohMCxheGlzX3hfdHlwZToiaW5kZXhlZCIsYXhpc194X2xvY2FsdGltZTohMCxheGlzX3hfY2F0ZWdvcmllczpbXSxheGlzX3hfdGlja19jZW50ZXJlZDohMSxheGlzX3hfdGlja19mb3JtYXQ6dm9pZCAwLGF4aXNfeF90aWNrX2N1bGxpbmc6e30sYXhpc194X3RpY2tfY3VsbGluZ19tYXg6MTAsYXhpc194X3RpY2tfY291bnQ6dm9pZCAwLGF4aXNfeF90aWNrX2ZpdDohMCxheGlzX3hfdGlja192YWx1ZXM6bnVsbCxheGlzX3hfdGlja19yb3RhdGU6MCxheGlzX3hfdGlja19vdXRlcjohMCxheGlzX3hfdGlja19tdWx0aWxpbmU6ITAsYXhpc194X3RpY2tfd2lkdGg6bnVsbCxheGlzX3hfbWF4OnZvaWQgMCxheGlzX3hfbWluOnZvaWQgMCxheGlzX3hfcGFkZGluZzp7fSxheGlzX3hfaGVpZ2h0OnZvaWQgMCxheGlzX3hfZXh0ZW50OnZvaWQgMCxheGlzX3hfbGFiZWw6e30sYXhpc195X3Nob3c6ITAsYXhpc195X3R5cGU6dm9pZCAwLGF4aXNfeV9tYXg6dm9pZCAwLGF4aXNfeV9taW46dm9pZCAwLGF4aXNfeV9pbnZlcnRlZDohMSxheGlzX3lfY2VudGVyOnZvaWQgMCxheGlzX3lfaW5uZXI6dm9pZCAwLGF4aXNfeV9sYWJlbDp7fSxheGlzX3lfdGlja19mb3JtYXQ6dm9pZCAwLGF4aXNfeV90aWNrX291dGVyOiEwLGF4aXNfeV90aWNrX3ZhbHVlczpudWxsLGF4aXNfeV90aWNrX3JvdGF0ZTowLGF4aXNfeV90aWNrX2NvdW50OnZvaWQgMCxheGlzX3lfdGlja190aW1lX3ZhbHVlOnZvaWQgMCxheGlzX3lfdGlja190aW1lX2ludGVydmFsOnZvaWQgMCxheGlzX3lfcGFkZGluZzp7fSxheGlzX3lfZGVmYXVsdDp2b2lkIDAsYXhpc195Ml9zaG93OiExLGF4aXNfeTJfbWF4OnZvaWQgMCxheGlzX3kyX21pbjp2b2lkIDAsYXhpc195Ml9pbnZlcnRlZDohMSxheGlzX3kyX2NlbnRlcjp2b2lkIDAsYXhpc195Ml9pbm5lcjp2b2lkIDAsYXhpc195Ml9sYWJlbDp7fSxheGlzX3kyX3RpY2tfZm9ybWF0OnZvaWQgMCxheGlzX3kyX3RpY2tfb3V0ZXI6ITAsYXhpc195Ml90aWNrX3ZhbHVlczpudWxsLGF4aXNfeTJfdGlja19jb3VudDp2b2lkIDAsYXhpc195Ml9wYWRkaW5nOnt9LGF4aXNfeTJfZGVmYXVsdDp2b2lkIDAsZ3JpZF94X3Nob3c6ITEsZ3JpZF94X3R5cGU6InRpY2siLGdyaWRfeF9saW5lczpbXSxncmlkX3lfc2hvdzohMSxncmlkX3lfbGluZXM6W10sZ3JpZF95X3RpY2tzOjEwLGdyaWRfZm9jdXNfc2hvdzohMCxncmlkX2xpbmVzX2Zyb250OiEwLHBvaW50X3Nob3c6ITAscG9pbnRfcjoyLjUscG9pbnRfc2Vuc2l0aXZpdHk6MTAscG9pbnRfZm9jdXNfZXhwYW5kX2VuYWJsZWQ6ITAscG9pbnRfZm9jdXNfZXhwYW5kX3I6dm9pZCAwLHBvaW50X3NlbGVjdF9yOnZvaWQgMCxsaW5lX2Nvbm5lY3ROdWxsOiExLGxpbmVfc3RlcF90eXBlOiJzdGVwIixiYXJfd2lkdGg6dm9pZCAwLGJhcl93aWR0aF9yYXRpbzouNixiYXJfd2lkdGhfbWF4OnZvaWQgMCxiYXJfemVyb2Jhc2VkOiEwLGFyZWFfemVyb2Jhc2VkOiEwLGFyZWFfYWJvdmU6ITEscGllX2xhYmVsX3Nob3c6ITAscGllX2xhYmVsX2Zvcm1hdDp2b2lkIDAscGllX2xhYmVsX3RocmVzaG9sZDouMDUscGllX2xhYmVsX3JhdGlvOnZvaWQgMCxwaWVfZXhwYW5kOnt9LHBpZV9leHBhbmRfZHVyYXRpb246NTAsZ2F1Z2VfZnVsbENpcmNsZTohMSxnYXVnZV9sYWJlbF9zaG93OiEwLGdhdWdlX2xhYmVsX2Zvcm1hdDp2b2lkIDAsZ2F1Z2VfbWluOjAsZ2F1Z2VfbWF4OjEwMCxnYXVnZV9zdGFydGluZ0FuZ2xlOi0xKk1hdGguUEkvMixnYXVnZV91bml0czp2b2lkIDAsZ2F1Z2Vfd2lkdGg6dm9pZCAwLGdhdWdlX2V4cGFuZDp7fSxnYXVnZV9leHBhbmRfZHVyYXRpb246NTAsZG9udXRfbGFiZWxfc2hvdzohMCxkb251dF9sYWJlbF9mb3JtYXQ6dm9pZCAwLGRvbnV0X2xhYmVsX3RocmVzaG9sZDouMDUsZG9udXRfbGFiZWxfcmF0aW86dm9pZCAwLGRvbnV0X3dpZHRoOnZvaWQgMCxkb251dF90aXRsZToiIixkb251dF9leHBhbmQ6e30sZG9udXRfZXhwYW5kX2R1cmF0aW9uOjUwLHNwbGluZV9pbnRlcnBvbGF0aW9uX3R5cGU6ImNhcmRpbmFsIixyZWdpb25zOltdLHRvb2x0aXBfc2hvdzohMCx0b29sdGlwX2dyb3VwZWQ6ITAsdG9vbHRpcF9mb3JtYXRfdGl0bGU6dm9pZCAwLHRvb2x0aXBfZm9ybWF0X25hbWU6dm9pZCAwLHRvb2x0aXBfZm9ybWF0X3ZhbHVlOnZvaWQgMCx0b29sdGlwX3Bvc2l0aW9uOnZvaWQgMCx0b29sdGlwX2NvbnRlbnRzOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmdldFRvb2x0aXBDb250ZW50P3RoaXMuZ2V0VG9vbHRpcENvbnRlbnQoYSxiLGMsZCk6IiJ9LHRvb2x0aXBfaW5pdF9zaG93OiExLHRvb2x0aXBfaW5pdF94OjAsdG9vbHRpcF9pbml0X3Bvc2l0aW9uOnt0b3A6IjBweCIsbGVmdDoiNTBweCJ9LHRvb2x0aXBfb25zaG93OmZ1bmN0aW9uKCl7fSx0b29sdGlwX29uaGlkZTpmdW5jdGlvbigpe30sdGl0bGVfdGV4dDp2b2lkIDAsdGl0bGVfcGFkZGluZzp7dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjB9LHRpdGxlX3Bvc2l0aW9uOiJ0b3AtY2VudGVyIn07cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYWRkaXRpb25hbENvbmZpZykuZm9yRWFjaChmdW5jdGlvbihiKXthW2JdPXRoaXMuYWRkaXRpb25hbENvbmZpZ1tiXX0sdGhpcyksYX0saS5hZGRpdGlvbmFsQ29uZmlnPXt9LGkubG9hZENvbmZpZz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7dmFyIGE9ZC5zaGlmdCgpO3JldHVybiBhJiZjJiYib2JqZWN0Ij09dHlwZW9mIGMmJmEgaW4gYz8oYz1jW2FdLGIoKSk6YT92b2lkIDA6Y312YXIgYyxkLGUsZj10aGlzLmNvbmZpZztPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe2M9YSxkPWcuc3BsaXQoIl8iKSxlPWIoKSxxKGUpJiYoZltnXT1lKX0pfSxpLmdldFNjYWxlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4oYz90aGlzLmQzLnRpbWUuc2NhbGUoKTp0aGlzLmQzLnNjYWxlLmxpbmVhcigpKS5yYW5nZShbYSxiXSl9LGkuZ2V0WD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmPXRoaXMsZz1mLmdldFNjYWxlKGEsYixmLmlzVGltZVNlcmllcygpKSxoPWM/Zy5kb21haW4oYyk6ZztmLmlzQ2F0ZWdvcml6ZWQoKT8oZD1kfHxmdW5jdGlvbigpe3JldHVybiAwfSxnPWZ1bmN0aW9uKGEsYil7dmFyIGM9aChhKStkKGEpO3JldHVybiBiP2M6TWF0aC5jZWlsKGMpfSk6Zz1mdW5jdGlvbihhLGIpe3ZhciBjPWgoYSk7cmV0dXJuIGI/YzpNYXRoLmNlaWwoYyl9O2ZvcihlIGluIGgpZ1tlXT1oW2VdO3JldHVybiBnLm9yZ0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiBoLmRvbWFpbigpfSxmLmlzQ2F0ZWdvcml6ZWQoKSYmKGcuZG9tYWluPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoLmRvbWFpbihhKSxnKTooYT10aGlzLm9yZ0RvbWFpbigpLFthWzBdLGFbMV0rMV0pfSksZ30saS5nZXRZPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmdldFNjYWxlKGEsYix0aGlzLmlzVGltZVNlcmllc1koKSk7cmV0dXJuIGMmJmQuZG9tYWluKGMpLGR9LGkuZ2V0WVNjYWxlPWZ1bmN0aW9uKGEpe3JldHVybiJ5MiI9PT10aGlzLmF4aXMuZ2V0SWQoYSk/dGhpcy55Mjp0aGlzLnl9LGkuZ2V0U3ViWVNjYWxlPWZ1bmN0aW9uKGEpe3JldHVybiJ5MiI9PT10aGlzLmF4aXMuZ2V0SWQoYSk/dGhpcy5zdWJZMjp0aGlzLnN1Yll9LGkudXBkYXRlU2NhbGVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY29uZmlnLGM9IWEueDthLnhNaW49Yi5heGlzX3JvdGF0ZWQ/MTowLGEueE1heD1iLmF4aXNfcm90YXRlZD9hLmhlaWdodDphLndpZHRoLGEueU1pbj1iLmF4aXNfcm90YXRlZD8wOmEuaGVpZ2h0LGEueU1heD1iLmF4aXNfcm90YXRlZD9hLndpZHRoOjEsYS5zdWJYTWluPWEueE1pbixhLnN1YlhNYXg9YS54TWF4LGEuc3ViWU1pbj1iLmF4aXNfcm90YXRlZD8wOmEuaGVpZ2h0MixhLnN1YllNYXg9Yi5heGlzX3JvdGF0ZWQ/YS53aWR0aDI6MSxhLng9YS5nZXRYKGEueE1pbixhLnhNYXgsYz92b2lkIDA6YS54Lm9yZ0RvbWFpbigpLGZ1bmN0aW9uKCl7cmV0dXJuIGEueEF4aXMudGlja09mZnNldCgpfSksYS55PWEuZ2V0WShhLnlNaW4sYS55TWF4LGM/Yi5heGlzX3lfZGVmYXVsdDphLnkuZG9tYWluKCkpLGEueTI9YS5nZXRZKGEueU1pbixhLnlNYXgsYz9iLmF4aXNfeTJfZGVmYXVsdDphLnkyLmRvbWFpbigpKSxhLnN1Ylg9YS5nZXRYKGEueE1pbixhLnhNYXgsYS5vcmdYRG9tYWluLGZ1bmN0aW9uKGIpe3JldHVybiBiJTE/MDphLnN1YlhBeGlzLnRpY2tPZmZzZXQoKX0pLGEuc3ViWT1hLmdldFkoYS5zdWJZTWluLGEuc3ViWU1heCxjP2IuYXhpc195X2RlZmF1bHQ6YS5zdWJZLmRvbWFpbigpKSxhLnN1YlkyPWEuZ2V0WShhLnN1YllNaW4sYS5zdWJZTWF4LGM/Yi5heGlzX3kyX2RlZmF1bHQ6YS5zdWJZMi5kb21haW4oKSksYS54QXhpc1RpY2tGb3JtYXQ9YS5heGlzLmdldFhBeGlzVGlja0Zvcm1hdCgpLGEueEF4aXNUaWNrVmFsdWVzPWEuYXhpcy5nZXRYQXhpc1RpY2tWYWx1ZXMoKSxhLnlBeGlzVGlja1ZhbHVlcz1hLmF4aXMuZ2V0WUF4aXNUaWNrVmFsdWVzKCksYS55MkF4aXNUaWNrVmFsdWVzPWEuYXhpcy5nZXRZMkF4aXNUaWNrVmFsdWVzKCksYS54QXhpcz1hLmF4aXMuZ2V0WEF4aXMoYS54LGEueE9yaWVudCxhLnhBeGlzVGlja0Zvcm1hdCxhLnhBeGlzVGlja1ZhbHVlcyxiLmF4aXNfeF90aWNrX291dGVyKSxhLnN1YlhBeGlzPWEuYXhpcy5nZXRYQXhpcyhhLnN1YlgsYS5zdWJYT3JpZW50LGEueEF4aXNUaWNrRm9ybWF0LGEueEF4aXNUaWNrVmFsdWVzLGIuYXhpc194X3RpY2tfb3V0ZXIpLGEueUF4aXM9YS5heGlzLmdldFlBeGlzKGEueSxhLnlPcmllbnQsYi5heGlzX3lfdGlja19mb3JtYXQsYS55QXhpc1RpY2tWYWx1ZXMsYi5heGlzX3lfdGlja19vdXRlciksYS55MkF4aXM9YS5heGlzLmdldFlBeGlzKGEueTIsYS55Mk9yaWVudCxiLmF4aXNfeTJfdGlja19mb3JtYXQsYS55MkF4aXNUaWNrVmFsdWVzLGIuYXhpc195Ml90aWNrX291dGVyKSxjfHwoYS5icnVzaCYmYS5icnVzaC5zY2FsZShhLnN1YlgpLGIuem9vbV9lbmFibGVkJiZhLnpvb20uc2NhbGUoYS54KSksYS51cGRhdGVBcmMmJmEudXBkYXRlQXJjKCl9LGkuZ2V0WURvbWFpbk1pbj1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD10aGlzLGk9aC5jb25maWcsaj1oLm1hcFRvSWRzKGEpLGs9aC5nZXRWYWx1ZXNBc0lkS2V5ZWQoYSk7aWYoaS5kYXRhX2dyb3Vwcy5sZW5ndGg+MClmb3IoZz1oLmhhc05lZ2F0aXZlVmFsdWVJblRhcmdldHMoYSksYj0wO2I8aS5kYXRhX2dyb3Vwcy5sZW5ndGg7YisrKWlmKGU9aS5kYXRhX2dyb3Vwc1tiXS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGouaW5kZXhPZihhKT49MH0pLDAhPT1lLmxlbmd0aClmb3IoZD1lWzBdLGcmJmtbZF0mJmtbZF0uZm9yRWFjaChmdW5jdGlvbihhLGIpe2tbZF1bYl09MD5hP2E6MH0pLGM9MTtjPGUubGVuZ3RoO2MrKylmPWVbY10sa1tmXSYma1tmXS5mb3JFYWNoKGZ1bmN0aW9uKGEsYil7aC5heGlzLmdldElkKGYpIT09aC5heGlzLmdldElkKGQpfHwha1tkXXx8ZyYmK2E+MHx8KGtbZF1bYl0rPSthKX0pO3JldHVybiBoLmQzLm1pbihPYmplY3Qua2V5cyhrKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGguZDMubWluKGtbYV0pfSkpfSxpLmdldFlEb21haW5NYXg9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9dGhpcyxpPWguY29uZmlnLGo9aC5tYXBUb0lkcyhhKSxrPWguZ2V0VmFsdWVzQXNJZEtleWVkKGEpO2lmKGkuZGF0YV9ncm91cHMubGVuZ3RoPjApZm9yKGc9aC5oYXNQb3NpdGl2ZVZhbHVlSW5UYXJnZXRzKGEpLGI9MDtiPGkuZGF0YV9ncm91cHMubGVuZ3RoO2IrKylpZihlPWkuZGF0YV9ncm91cHNbYl0uZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBqLmluZGV4T2YoYSk+PTB9KSwwIT09ZS5sZW5ndGgpZm9yKGQ9ZVswXSxnJiZrW2RdJiZrW2RdLmZvckVhY2goZnVuY3Rpb24oYSxiKXtrW2RdW2JdPWE+MD9hOjB9KSxjPTE7YzxlLmxlbmd0aDtjKyspZj1lW2NdLGtbZl0mJmtbZl0uZm9yRWFjaChmdW5jdGlvbihhLGIpe2guYXhpcy5nZXRJZChmKSE9PWguYXhpcy5nZXRJZChkKXx8IWtbZF18fGcmJjA+K2F8fChrW2RdW2JdKz0rYSl9KTtyZXR1cm4gaC5kMy5tYXgoT2JqZWN0LmtleXMoaykubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBoLmQzLm1heChrW2FdKX0pKX0saS5nZXRZRG9tYWluPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGwsbixvLHA9dGhpcyxxPXAuY29uZmlnLHI9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIHAuYXhpcy5nZXRJZChhLmlkKT09PWJ9KSxzPWM/cC5maWx0ZXJCeVhEb21haW4ocixjKTpyLHU9InkyIj09PWI/cS5heGlzX3kyX21pbjpxLmF4aXNfeV9taW4sdz0ieTIiPT09Yj9xLmF4aXNfeTJfbWF4OnEuYXhpc195X21heCx4PXAuZ2V0WURvbWFpbk1pbihzKSx5PXAuZ2V0WURvbWFpbk1heChzKSx6PSJ5MiI9PT1iP3EuYXhpc195Ml9jZW50ZXI6cS5heGlzX3lfY2VudGVyLEE9cC5oYXNUeXBlKCJiYXIiLHMpJiZxLmJhcl96ZXJvYmFzZWR8fHAuaGFzVHlwZSgiYXJlYSIscykmJnEuYXJlYV96ZXJvYmFzZWQsQj0ieTIiPT09Yj9xLmF4aXNfeTJfaW52ZXJ0ZWQ6cS5heGlzX3lfaW52ZXJ0ZWQsQz1wLmhhc0RhdGFMYWJlbCgpJiZxLmF4aXNfcm90YXRlZCxEPXAuaGFzRGF0YUxhYmVsKCkmJiFxLmF4aXNfcm90YXRlZDtyZXR1cm4geD1tKHUpP3U6bSh3KT93Png/eDp3LTEwOngseT1tKHcpP3c6bSh1KT95PnU/eTp1KzEwOnksMD09PXMubGVuZ3RoPyJ5MiI9PT1iP3AueTIuZG9tYWluKCk6cC55LmRvbWFpbigpOihpc05hTih4KSYmKHg9MCksaXNOYU4oeSkmJih5PXgpLHg9PT15JiYoMD54P3k9MDp4PTApLG49eD49MCYmeT49MCxvPTA+PXgmJjA+PXksKG0odSkmJm58fG0odykmJm8pJiYoQT0hMSksQSYmKG4mJih4PTApLG8mJih5PTApKSxlPU1hdGguYWJzKHkteCksZj1nPWg9LjEqZSwidW5kZWZpbmVkIiE9dHlwZW9mIHomJihpPU1hdGgubWF4KE1hdGguYWJzKHgpLE1hdGguYWJzKHkpKSx5PXoraSx4PXotaSksQz8oaj1wLmdldERhdGFMYWJlbExlbmd0aCh4LHksIndpZHRoIiksaz10KHAueS5yYW5nZSgpKSwNCmw9W2pbMF0vayxqWzFdL2tdLGcrPWUqKGxbMV0vKDEtbFswXS1sWzFdKSksaCs9ZSoobFswXS8oMS1sWzBdLWxbMV0pKSk6RCYmKGo9cC5nZXREYXRhTGFiZWxMZW5ndGgoeCx5LCJoZWlnaHQiKSxnKz1wLmF4aXMuY29udmVydFBpeGVsc1RvQXhpc1BhZGRpbmcoalsxXSxlKSxoKz1wLmF4aXMuY29udmVydFBpeGVsc1RvQXhpc1BhZGRpbmcoalswXSxlKSksInkiPT09YiYmdihxLmF4aXNfeV9wYWRkaW5nKSYmKGc9cC5heGlzLmdldFBhZGRpbmcocS5heGlzX3lfcGFkZGluZywidG9wIixnLGUpLGg9cC5heGlzLmdldFBhZGRpbmcocS5heGlzX3lfcGFkZGluZywiYm90dG9tIixoLGUpKSwieTIiPT09YiYmdihxLmF4aXNfeTJfcGFkZGluZykmJihnPXAuYXhpcy5nZXRQYWRkaW5nKHEuYXhpc195Ml9wYWRkaW5nLCJ0b3AiLGcsZSksaD1wLmF4aXMuZ2V0UGFkZGluZyhxLmF4aXNfeTJfcGFkZGluZywiYm90dG9tIixoLGUpKSxBJiYobiYmKGg9eCksbyYmKGc9LXkpKSxkPVt4LWgseStnXSxCP2QucmV2ZXJzZSgpOmQpfSxpLmdldFhEb21haW5NaW49ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuY29uZmlnO3JldHVybiBxKGMuYXhpc194X21pbik/Yi5pc1RpbWVTZXJpZXMoKT90aGlzLnBhcnNlRGF0ZShjLmF4aXNfeF9taW4pOmMuYXhpc194X21pbjpiLmQzLm1pbihhLGZ1bmN0aW9uKGEpe3JldHVybiBiLmQzLm1pbihhLnZhbHVlcyxmdW5jdGlvbihhKXtyZXR1cm4gYS54fSl9KX0saS5nZXRYRG9tYWluTWF4PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZztyZXR1cm4gcShjLmF4aXNfeF9tYXgpP2IuaXNUaW1lU2VyaWVzKCk/dGhpcy5wYXJzZURhdGUoYy5heGlzX3hfbWF4KTpjLmF4aXNfeF9tYXg6Yi5kMy5tYXgoYSxmdW5jdGlvbihhKXtyZXR1cm4gYi5kMy5tYXgoYS52YWx1ZXMsZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pfSl9LGkuZ2V0WERvbWFpblBhZGRpbmc9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZj10aGlzLGc9Zi5jb25maWcsaD1hWzFdLWFbMF07cmV0dXJuIGYuaXNDYXRlZ29yaXplZCgpP2M9MDpmLmhhc1R5cGUoImJhciIpPyhiPWYuZ2V0TWF4RGF0YUNvdW50KCksYz1iPjE/aC8oYi0xKS8yOi41KTpjPS4wMSpoLCJvYmplY3QiPT10eXBlb2YgZy5heGlzX3hfcGFkZGluZyYmdihnLmF4aXNfeF9wYWRkaW5nKT8oZD1tKGcuYXhpc194X3BhZGRpbmcubGVmdCk/Zy5heGlzX3hfcGFkZGluZy5sZWZ0OmMsZT1tKGcuYXhpc194X3BhZGRpbmcucmlnaHQpP2cuYXhpc194X3BhZGRpbmcucmlnaHQ6Yyk6ZD1lPSJudW1iZXIiPT10eXBlb2YgZy5heGlzX3hfcGFkZGluZz9nLmF4aXNfeF9wYWRkaW5nOmMse2xlZnQ6ZCxyaWdodDplfX0saS5nZXRYRG9tYWluPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1bYi5nZXRYRG9tYWluTWluKGEpLGIuZ2V0WERvbWFpbk1heChhKV0sZD1jWzBdLGU9Y1sxXSxmPWIuZ2V0WERvbWFpblBhZGRpbmcoYyksZz0wLGg9MDtyZXR1cm4gZC1lIT09MHx8Yi5pc0NhdGVnb3JpemVkKCl8fChiLmlzVGltZVNlcmllcygpPyhkPW5ldyBEYXRlKC41KmQuZ2V0VGltZSgpKSxlPW5ldyBEYXRlKDEuNSplLmdldFRpbWUoKSkpOihkPTA9PT1kPzE6LjUqZCxlPTA9PT1lPy0xOjEuNSplKSksKGR8fDA9PT1kKSYmKGc9Yi5pc1RpbWVTZXJpZXMoKT9uZXcgRGF0ZShkLmdldFRpbWUoKS1mLmxlZnQpOmQtZi5sZWZ0KSwoZXx8MD09PWUpJiYoaD1iLmlzVGltZVNlcmllcygpP25ldyBEYXRlKGUuZ2V0VGltZSgpK2YucmlnaHQpOmUrZi5yaWdodCksW2csaF19LGkudXBkYXRlWERvbWFpbj1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPXRoaXMsZz1mLmNvbmZpZztyZXR1cm4gYyYmKGYueC5kb21haW4oZT9lOmYuZDMuZXh0ZW50KGYuZ2V0WERvbWFpbihhKSkpLGYub3JnWERvbWFpbj1mLnguZG9tYWluKCksZy56b29tX2VuYWJsZWQmJmYuem9vbS5zY2FsZShmLngpLnVwZGF0ZVNjYWxlRXh0ZW50KCksZi5zdWJYLmRvbWFpbihmLnguZG9tYWluKCkpLGYuYnJ1c2gmJmYuYnJ1c2guc2NhbGUoZi5zdWJYKSksYiYmKGYueC5kb21haW4oZT9lOiFmLmJydXNofHxmLmJydXNoLmVtcHR5KCk/Zi5vcmdYRG9tYWluOmYuYnJ1c2guZXh0ZW50KCkpLGcuem9vbV9lbmFibGVkJiZmLnpvb20uc2NhbGUoZi54KS51cGRhdGVTY2FsZUV4dGVudCgpKSxkJiZmLnguZG9tYWluKGYudHJpbVhEb21haW4oZi54Lm9yZ0RvbWFpbigpKSksZi54LmRvbWFpbigpfSxpLnRyaW1YRG9tYWluPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0Wm9vbURvbWFpbigpLGM9YlswXSxkPWJbMV07cmV0dXJuIGFbMF08PWMmJihhWzFdPSthWzFdKyhjLWFbMF0pLGFbMF09YyksZDw9YVsxXSYmKGFbMF09K2FbMF0tKGFbMV0tZCksYVsxXT1kKSxhfSxpLmlzWD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5jb25maWc7cmV0dXJuIGMuZGF0YV94JiZhPT09Yy5kYXRhX3h8fHYoYy5kYXRhX3hzKSYmeChjLmRhdGFfeHMsYSl9LGkuaXNOb3RYPWZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLmlzWChhKX0saS5nZXRYS2V5PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZztyZXR1cm4gYy5kYXRhX3g/Yy5kYXRhX3g6dihjLmRhdGFfeHMpP2MuZGF0YV94c1thXTpudWxsfSxpLmdldFhWYWx1ZXNPZlhLZXk9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXRoaXMsZT1iJiZ2KGIpP2QubWFwVG9JZHMoYik6W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihiKXtkLmdldFhLZXkoYik9PT1hJiYoYz1kLmRhdGEueHNbYl0pfSksY30saS5nZXRJbmRleEJ5WD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5maWx0ZXJCeVgoYi5kYXRhLnRhcmdldHMsYSk7cmV0dXJuIGMubGVuZ3RoP2NbMF0uaW5kZXg6bnVsbH0saS5nZXRYVmFsdWU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3JldHVybiBhIGluIGMuZGF0YS54cyYmYy5kYXRhLnhzW2FdJiZtKGMuZGF0YS54c1thXVtiXSk/Yy5kYXRhLnhzW2FdW2JdOmJ9LGkuZ2V0T3RoZXJUYXJnZXRYcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1PYmplY3Qua2V5cyhhLmRhdGEueHMpO3JldHVybiBiLmxlbmd0aD9hLmRhdGEueHNbYlswXV06bnVsbH0saS5nZXRPdGhlclRhcmdldFg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5nZXRPdGhlclRhcmdldFhzKCk7cmV0dXJuIGImJmE8Yi5sZW5ndGg/YlthXTpudWxsfSxpLmFkZFhzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihjKXtiLmNvbmZpZy5kYXRhX3hzW2NdPWFbY119KX0saS5oYXNNdWx0aXBsZVg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZDMuc2V0KE9iamVjdC5rZXlzKGEpLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYVtiXX0pKS5zaXplKCk+MX0saS5pc011bHRpcGxlWD1mdW5jdGlvbigpe3JldHVybiB2KHRoaXMuY29uZmlnLmRhdGFfeHMpfHwhdGhpcy5jb25maWcuZGF0YV94U29ydHx8dGhpcy5oYXNUeXBlKCJzY2F0dGVyIil9LGkuYWRkTmFtZT1mdW5jdGlvbihhKXt2YXIgYixjPXRoaXM7cmV0dXJuIGEmJihiPWMuY29uZmlnLmRhdGFfbmFtZXNbYS5pZF0sYS5uYW1lPXZvaWQgMCE9PWI/YjphLmlkKSxhfSxpLmdldFZhbHVlT25JbmRleD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLmluZGV4PT09Yn0pO3JldHVybiBjLmxlbmd0aD9jWzBdOm51bGx9LGkudXBkYXRlVGFyZ2V0WD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudmFsdWVzLmZvckVhY2goZnVuY3Rpb24oZCxlKXtkLng9Yy5nZW5lcmF0ZVRhcmdldFgoYltlXSxhLmlkLGUpfSksYy5kYXRhLnhzW2EuaWRdPWJ9KX0saS51cGRhdGVUYXJnZXRYcz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2JbYS5pZF0mJmMudXBkYXRlVGFyZ2V0WChbYV0sYlthLmlkXSl9KX0saS5nZW5lcmF0ZVRhcmdldFg9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcztyZXR1cm4gZD1lLmlzVGltZVNlcmllcygpP2E/ZS5wYXJzZURhdGUoYSk6ZS5wYXJzZURhdGUoZS5nZXRYVmFsdWUoYixjKSk6ZS5pc0N1c3RvbVgoKSYmIWUuaXNDYXRlZ29yaXplZCgpP20oYSk/K2E6ZS5nZXRYVmFsdWUoYixjKTpjfSxpLmNsb25lVGFyZ2V0PWZ1bmN0aW9uKGEpe3JldHVybntpZDphLmlkLGlkX29yZzphLmlkX29yZyx2YWx1ZXM6YS52YWx1ZXMubWFwKGZ1bmN0aW9uKGEpe3JldHVybnt4OmEueCx2YWx1ZTphLnZhbHVlLGlkOmEuaWR9fSl9fSxpLnVwZGF0ZVhzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLmRhdGEudGFyZ2V0cy5sZW5ndGgmJihhLnhzPVtdLGEuZGF0YS50YXJnZXRzWzBdLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe2EueHNbYi5pbmRleF09Yi54fSkpfSxpLmdldFByZXZYPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueHNbYS0xXTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGI/YjpudWxsfSxpLmdldE5leHRYPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMueHNbYSsxXTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGI/YjpudWxsfSxpLmdldE1heERhdGFDb3VudD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGEuZDMubWF4KGEuZGF0YS50YXJnZXRzLGZ1bmN0aW9uKGEpe3JldHVybiBhLnZhbHVlcy5sZW5ndGh9KX0saS5nZXRNYXhEYXRhQ291bnRUYXJnZXQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1hLmxlbmd0aCxkPTA7cmV0dXJuIGM+MT9hLmZvckVhY2goZnVuY3Rpb24oYSl7YS52YWx1ZXMubGVuZ3RoPmQmJihiPWEsZD1hLnZhbHVlcy5sZW5ndGgpfSk6Yj1jP2FbMF06bnVsbCxifSxpLmdldEVkZ2VYPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7cmV0dXJuIGEubGVuZ3RoP1tiLmQzLm1pbihhLGZ1bmN0aW9uKGEpe3JldHVybiBhLnZhbHVlc1swXS54fSksYi5kMy5tYXgoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZXNbYS52YWx1ZXMubGVuZ3RoLTFdLnh9KV06WzAsMF19LGkubWFwVG9JZHM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlkfSl9LGkubWFwVG9UYXJnZXRJZHM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztyZXR1cm4gYT9bXS5jb25jYXQoYSk6Yi5tYXBUb0lkcyhiLmRhdGEudGFyZ2V0cyl9LGkuaGFzVGFyZ2V0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZD10aGlzLm1hcFRvSWRzKGEpO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspaWYoZFtjXT09PWIpcmV0dXJuITA7cmV0dXJuITF9LGkuaXNUYXJnZXRUb1Nob3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGlkZGVuVGFyZ2V0SWRzLmluZGV4T2YoYSk8MH0saS5pc0xlZ2VuZFRvU2hvdz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5oaWRkZW5MZWdlbmRJZHMuaW5kZXhPZihhKTwwfSxpLmZpbHRlclRhcmdldHNUb1Nob3c9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGIuaXNUYXJnZXRUb1Nob3coYS5pZCl9KX0saS5tYXBUYXJnZXRzVG9VbmlxdWVYcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5kMy5zZXQoYi5kMy5tZXJnZShhLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZXMubWFwKGZ1bmN0aW9uKGEpe3JldHVybithLnh9KX0pKSkudmFsdWVzKCk7cmV0dXJuIGM9Yi5pc1RpbWVTZXJpZXMoKT9jLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gbmV3IERhdGUoK2EpfSk6Yy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuK2F9KSxjLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj5hPy0xOmE+Yj8xOmE+PWI/MDpOYU59KX0saS5hZGRIaWRkZW5UYXJnZXRJZHM9ZnVuY3Rpb24oYSl7dGhpcy5oaWRkZW5UYXJnZXRJZHM9dGhpcy5oaWRkZW5UYXJnZXRJZHMuY29uY2F0KGEpfSxpLnJlbW92ZUhpZGRlblRhcmdldElkcz1mdW5jdGlvbihhKXt0aGlzLmhpZGRlblRhcmdldElkcz10aGlzLmhpZGRlblRhcmdldElkcy5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGEuaW5kZXhPZihiKTwwfSl9LGkuYWRkSGlkZGVuTGVnZW5kSWRzPWZ1bmN0aW9uKGEpe3RoaXMuaGlkZGVuTGVnZW5kSWRzPXRoaXMuaGlkZGVuTGVnZW5kSWRzLmNvbmNhdChhKX0saS5yZW1vdmVIaWRkZW5MZWdlbmRJZHM9ZnVuY3Rpb24oYSl7dGhpcy5oaWRkZW5MZWdlbmRJZHM9dGhpcy5oaWRkZW5MZWdlbmRJZHMuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBhLmluZGV4T2YoYik8MH0pfSxpLmdldFZhbHVlc0FzSWRLZXllZD1mdW5jdGlvbihhKXt2YXIgYj17fTtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2JbYS5pZF09W10sYS52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihjKXtiW2EuaWRdLnB1c2goYy52YWx1ZSl9KX0pLGJ9LGkuY2hlY2tWYWx1ZUluVGFyZ2V0cz1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPU9iamVjdC5rZXlzKGEpO2ZvcihjPTA7YzxmLmxlbmd0aDtjKyspZm9yKGU9YVtmW2NdXS52YWx1ZXMsZD0wO2Q8ZS5sZW5ndGg7ZCsrKWlmKGIoZVtkXS52YWx1ZSkpcmV0dXJuITA7cmV0dXJuITF9LGkuaGFzTmVnYXRpdmVWYWx1ZUluVGFyZ2V0cz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jaGVja1ZhbHVlSW5UYXJnZXRzKGEsZnVuY3Rpb24oYSl7cmV0dXJuIDA+YX0pfSxpLmhhc1Bvc2l0aXZlVmFsdWVJblRhcmdldHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY2hlY2tWYWx1ZUluVGFyZ2V0cyhhLGZ1bmN0aW9uKGEpe3JldHVybiBhPjB9KX0saS5pc09yZGVyRGVzYz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY29uZmlnO3JldHVybiJzdHJpbmciPT10eXBlb2YgYS5kYXRhX29yZGVyJiYiZGVzYyI9PT1hLmRhdGFfb3JkZXIudG9Mb3dlckNhc2UoKX0saS5pc09yZGVyQXNjPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jb25maWc7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhLmRhdGFfb3JkZXImJiJhc2MiPT09YS5kYXRhX29yZGVyLnRvTG93ZXJDYXNlKCl9LGkub3JkZXJUYXJnZXRzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZyxkPWIuaXNPcmRlckFzYygpLGU9Yi5pc09yZGVyRGVzYygpO3JldHVybiBkfHxlP2Euc29ydChmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGErTWF0aC5hYnMoYi52YWx1ZSl9LGU9YS52YWx1ZXMucmVkdWNlKGMsMCksZj1iLnZhbHVlcy5yZWR1Y2UoYywwKTtyZXR1cm4gZD9mLWU6ZS1mfSk6bihjLmRhdGFfb3JkZXIpJiZhLnNvcnQoYy5kYXRhX29yZGVyKSxhfSxpLmZpbHRlckJ5WD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmQzLm1lcmdlKGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnZhbHVlc30pKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEueC1iPT09MH0pfSxpLmZpbHRlclJlbW92ZU51bGw9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBtKGEudmFsdWUpfSl9LGkuZmlsdGVyQnlYRG9tYWluPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybntpZDphLmlkLGlkX29yZzphLmlkX29yZyx2YWx1ZXM6YS52YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBiWzBdPD1hLngmJmEueDw9YlsxXX0pfX0pfSxpLmhhc0RhdGFMYWJlbD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY29uZmlnO3JldHVybiJib29sZWFuIj09dHlwZW9mIGEuZGF0YV9sYWJlbHMmJmEuZGF0YV9sYWJlbHM/ITA6ISgib2JqZWN0IiE9dHlwZW9mIGEuZGF0YV9sYWJlbHN8fCF2KGEuZGF0YV9sYWJlbHMpKX0saS5nZXREYXRhTGFiZWxMZW5ndGg9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1bMCwwXSxmPTEuMztyZXR1cm4gZC5zZWxlY3RDaGFydC5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiLmR1bW15IikuZGF0YShbYSxiXSkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS50ZXh0KGZ1bmN0aW9uKGEpe3JldHVybiBkLmRhdGFMYWJlbEZvcm1hdChhLmlkKShhKX0pLmVhY2goZnVuY3Rpb24oYSxiKXtlW2JdPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbY10qZn0pLnJlbW92ZSgpLGV9LGkuaXNOb25lQXJjPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmhhc1RhcmdldCh0aGlzLmRhdGEudGFyZ2V0cyxhLmlkKX0saS5pc0FyYz1mdW5jdGlvbihhKXtyZXR1cm4iZGF0YSJpbiBhJiZ0aGlzLmhhc1RhcmdldCh0aGlzLmRhdGEudGFyZ2V0cyxhLmRhdGEuaWQpfSxpLmZpbmRTYW1lWE9mVmFsdWVzPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1hW2JdLngsZT1bXTtmb3IoYz1iLTE7Yz49MCYmZD09PWFbY10ueDtjLS0pZS5wdXNoKGFbY10pO2ZvcihjPWI7YzxhLmxlbmd0aCYmZD09PWFbY10ueDtjKyspZS5wdXNoKGFbY10pO3JldHVybiBlfSxpLmZpbmRDbG9zZXN0RnJvbVRhcmdldHM9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXRoaXM7cmV0dXJuIGM9YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGQuZmluZENsb3Nlc3QoYS52YWx1ZXMsYil9KSxkLmZpbmRDbG9zZXN0KGMsYil9LGkuZmluZENsb3Nlc3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXRoaXMsZT1kLmNvbmZpZy5wb2ludF9zZW5zaXRpdml0eTtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEmJmQuaXNCYXJUeXBlKGEuaWQpfSkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1kLm1haW4uc2VsZWN0KCIuIitsLmJhcnMrZC5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChhLmlkKSsiIC4iK2wuYmFyKyItIithLmluZGV4KS5ub2RlKCk7IWMmJmQuaXNXaXRoaW5CYXIoYikmJihjPWEpfSksYS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEmJiFkLmlzQmFyVHlwZShhLmlkKX0pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGY9ZC5kaXN0KGEsYik7ZT5mJiYoZT1mLGM9YSl9KSxjfSxpLmRpc3Q9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5jb25maWcsZT1kLmF4aXNfcm90YXRlZD8xOjAsZj1kLmF4aXNfcm90YXRlZD8wOjEsZz1jLmNpcmNsZVkoYSxhLmluZGV4KSxoPWMueChhLngpO3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coaC1iW2VdLDIpK01hdGgucG93KGctYltmXSwyKSl9LGkuY29udmVydFZhbHVlc1RvU3RlcD1mdW5jdGlvbihhKXt2YXIgYixjPVtdLmNvbmNhdChhKTtpZighdGhpcy5pc0NhdGVnb3JpemVkKCkpcmV0dXJuIGE7Zm9yKGI9YS5sZW5ndGgrMTtiPjA7Yi0tKWNbYl09Y1tiLTFdO3JldHVybiBjWzBdPXt4OmNbMF0ueC0xLHZhbHVlOmNbMF0udmFsdWUsaWQ6Y1swXS5pZH0sY1thLmxlbmd0aCsxXT17eDpjW2EubGVuZ3RoXS54KzEsdmFsdWU6Y1thLmxlbmd0aF0udmFsdWUsaWQ6Y1thLmxlbmd0aF0uaWR9LGN9LGkudXBkYXRlRGF0YUF0dHJpYnV0ZXM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5jb25maWcsZT1kWyJkYXRhXyIrYV07cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBiP2U6KE9iamVjdC5rZXlzKGIpLmZvckVhY2goZnVuY3Rpb24oYSl7ZVthXT1iW2FdfSksYy5yZWRyYXcoe3dpdGhMZWdlbmQ6ITB9KSxlKX0saS5jb252ZXJ0VXJsVG9EYXRhPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9dGhpcyxnPWI/YjoiY3N2IixoPWYuZDMueGhyKGEpO2MmJk9iamVjdC5rZXlzKGMpLmZvckVhY2goZnVuY3Rpb24oYSl7aC5oZWFkZXIoYSxjW2FdKX0pLGguZ2V0KGZ1bmN0aW9uKGEsYil7dmFyIGM7aWYoIWIpdGhyb3cgbmV3IEVycm9yKGEucmVzcG9uc2VVUkwrIiAiK2Euc3RhdHVzKyIgKCIrYS5zdGF0dXNUZXh0KyIpIik7Yz0ianNvbiI9PT1nP2YuY29udmVydEpzb25Ub0RhdGEoSlNPTi5wYXJzZShiLnJlc3BvbnNlKSxkKToidHN2Ij09PWc/Zi5jb252ZXJ0VHN2VG9EYXRhKGIucmVzcG9uc2UpOmYuY29udmVydENzdlRvRGF0YShiLnJlc3BvbnNlKSxlLmNhbGwoZixjKX0pfSxpLmNvbnZlcnRYc3ZUb0RhdGE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWIucGFyc2VSb3dzKGEpO3JldHVybiAxPT09ZC5sZW5ndGg/KGM9W3t9XSxkWzBdLmZvckVhY2goZnVuY3Rpb24oYSl7Y1swXVthXT1udWxsfSkpOmM9Yi5wYXJzZShhKSxjfSxpLmNvbnZlcnRDc3ZUb0RhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29udmVydFhzdlRvRGF0YShhLHRoaXMuZDMuY3N2KX0saS5jb252ZXJ0VHN2VG9EYXRhPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbnZlcnRYc3ZUb0RhdGEoYSx0aGlzLmQzLnRzdil9LGkuY29udmVydEpzb25Ub0RhdGE9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9dGhpcyxmPVtdO3JldHVybiBiPyhiLng/KGM9Yi52YWx1ZS5jb25jYXQoYi54KSxlLmNvbmZpZy5kYXRhX3g9Yi54KTpjPWIudmFsdWUsZi5wdXNoKGMpLGEuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1bXTtjLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9ZS5maW5kVmFsdWVJbkpzb24oYSxjKTtwKGQpJiYoZD1udWxsKSxiLnB1c2goZCl9KSxmLnB1c2goYil9KSxkPWUuY29udmVydFJvd3NUb0RhdGEoZikpOihPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2YucHVzaChbYl0uY29uY2F0KGFbYl0pKX0pLGQ9ZS5jb252ZXJ0Q29sdW1uc1RvRGF0YShmKSksZH0saS5maW5kVmFsdWVJbkpzb249ZnVuY3Rpb24oYSxiKXtiPWIucmVwbGFjZSgvXFsoXHcrKVxdL2csIi4kMSIpLGI9Yi5yZXBsYWNlKC9eXC4vLCIiKTtmb3IodmFyIGM9Yi5zcGxpdCgiLiIpLGQ9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGU9Y1tkXTtpZighKGUgaW4gYSkpcmV0dXJuO2E9YVtlXX1yZXR1cm4gYX0saS5jb252ZXJ0Um93c1RvRGF0YT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YVswXSxlPXt9LGY9W107Zm9yKGI9MTtiPGEubGVuZ3RoO2IrKyl7Zm9yKGU9e30sYz0wO2M8YVtiXS5sZW5ndGg7YysrKXtpZihwKGFbYl1bY10pKXRocm93IG5ldyBFcnJvcigiU291cmNlIGRhdGEgaXMgbWlzc2luZyBhIGNvbXBvbmVudCBhdCAoIitiKyIsIitjKyIpISIpO2VbZFtjXV09YVtiXVtjXX1mLnB1c2goZSl9cmV0dXJuIGZ9LGkuY29udmVydENvbHVtbnNUb0RhdGE9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9W107Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylmb3IoZD1hW2JdWzBdLGM9MTtjPGFbYl0ubGVuZ3RoO2MrKyl7aWYocChlW2MtMV0pJiYoZVtjLTFdPXt9KSxwKGFbYl1bY10pKXRocm93IG5ldyBFcnJvcigiU291cmNlIGRhdGEgaXMgbWlzc2luZyBhIGNvbXBvbmVudCBhdCAoIitiKyIsIitjKyIpISIpO2VbYy0xXVtkXT1hW2JdW2NdfXJldHVybiBlfSxpLmNvbnZlcnREYXRhVG9UYXJnZXRzPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD10aGlzLGU9ZC5jb25maWcsZj1kLmQzLmtleXMoYVswXSkuZmlsdGVyKGQuaXNOb3RYLGQpLGc9ZC5kMy5rZXlzKGFbMF0pLmZpbHRlcihkLmlzWCxkKTtyZXR1cm4gZi5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciBmPWQuZ2V0WEtleShjKTtkLmlzQ3VzdG9tWCgpfHxkLmlzVGltZVNlcmllcygpP2cuaW5kZXhPZihmKT49MD9kLmRhdGEueHNbY109KGImJmQuZGF0YS54c1tjXT9kLmRhdGEueHNbY106W10pLmNvbmNhdChhLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYVtmXX0pLmZpbHRlcihtKS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5nZW5lcmF0ZVRhcmdldFgoYSxjLGIpfSkpOmUuZGF0YV94P2QuZGF0YS54c1tjXT1kLmdldE90aGVyVGFyZ2V0WHMoKTp2KGUuZGF0YV94cykmJihkLmRhdGEueHNbY109ZC5nZXRYVmFsdWVzT2ZYS2V5KGYsZC5kYXRhLnRhcmdldHMpKTpkLmRhdGEueHNbY109YS5tYXAoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYn0pfSksZi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKCFkLmRhdGEueHNbYV0pdGhyb3cgbmV3IEVycm9yKCd4IGlzIG5vdCBkZWZpbmVkIGZvciBpZCA9ICInK2ErJyIuJyl9KSxjPWYubWFwKGZ1bmN0aW9uKGIsYyl7dmFyIGY9ZS5kYXRhX2lkQ29udmVydGVyKGIpO3JldHVybntpZDpmLGlkX29yZzpiLHZhbHVlczphLm1hcChmdW5jdGlvbihhLGcpe3ZhciBoLGk9ZC5nZXRYS2V5KGIpLGo9YVtpXSxrPW51bGw9PT1hW2JdfHxpc05hTihhW2JdKT9udWxsOithW2JdO3JldHVybiBkLmlzQ3VzdG9tWCgpJiZkLmlzQ2F0ZWdvcml6ZWQoKSYmMD09PWMmJiFwKGopPygwPT09YyYmMD09PWcmJihlLmF4aXNfeF9jYXRlZ29yaWVzPVtdKSxoPWUuYXhpc194X2NhdGVnb3JpZXMuaW5kZXhPZihqKSwtMT09PWgmJihoPWUuYXhpc194X2NhdGVnb3JpZXMubGVuZ3RoLGUuYXhpc194X2NhdGVnb3JpZXMucHVzaChqKSkpOmg9ZC5nZW5lcmF0ZVRhcmdldFgoaixiLGcpLChwKGFbYl0pfHxkLmRhdGEueHNbYl0ubGVuZ3RoPD1nKSYmKGg9dm9pZCAwKSx7eDpoLHZhbHVlOmssaWQ6Zn19KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIHEoYS54KX0pfX0pLGMuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYjtlLmRhdGFfeFNvcnQmJihhLnZhbHVlcz1hLnZhbHVlcy5zb3J0KGZ1bmN0aW9uKGEsYil7dmFyIGM9YS54fHwwPT09YS54P2EueDoxLzAsZD1iLnh8fDA9PT1iLng/Yi54OjEvMDtyZXR1cm4gYy1kfSkpLGI9MCxhLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaW5kZXg9YisrfSksZC5kYXRhLnhzW2EuaWRdLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSl9KSxkLmhhc05lZ2F0aXZlVmFsdWU9ZC5oYXNOZWdhdGl2ZVZhbHVlSW5UYXJnZXRzKGMpLGQuaGFzUG9zaXRpdmVWYWx1ZT1kLmhhc1Bvc2l0aXZlVmFsdWVJblRhcmdldHMoYyksZS5kYXRhX3R5cGUmJmQuc2V0VGFyZ2V0VHlwZShkLm1hcFRvSWRzKGMpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4hKGEgaW4gZS5kYXRhX3R5cGVzKX0pLGUuZGF0YV90eXBlKSxjLmZvckVhY2goZnVuY3Rpb24oYSl7ZC5hZGRDYWNoZShhLmlkX29yZyxhKX0pLGN9LGkubG9hZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7YSYmKGIuZmlsdGVyJiYoYT1hLmZpbHRlcihiLmZpbHRlcikpLChiLnR5cGV8fGIudHlwZXMpJiZhLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGQ9Yi50eXBlcyYmYi50eXBlc1thLmlkXT9iLnR5cGVzW2EuaWRdOmIudHlwZTtjLnNldFRhcmdldFR5cGUoYS5pZCxkKX0pLGMuZGF0YS50YXJnZXRzLmZvckVhY2goZnVuY3Rpb24oYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYi5pZD09PWFbY10uaWQpe2IudmFsdWVzPWFbY10udmFsdWVzLGEuc3BsaWNlKGMsMSk7YnJlYWt9fSksYy5kYXRhLnRhcmdldHM9Yy5kYXRhLnRhcmdldHMuY29uY2F0KGEpKSxjLnVwZGF0ZVRhcmdldHMoYy5kYXRhLnRhcmdldHMpLGMucmVkcmF3KHt3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoTGVnZW5kOiEwfSksYi5kb25lJiZiLmRvbmUoKX0saS5sb2FkRnJvbUFyZ3M9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczthLmRhdGE/Yi5sb2FkKGIuY29udmVydERhdGFUb1RhcmdldHMoYS5kYXRhKSxhKTphLnVybD9iLmNvbnZlcnRVcmxUb0RhdGEoYS51cmwsYS5taW1lVHlwZSxhLmhlYWRlcnMsYS5rZXlzLGZ1bmN0aW9uKGMpe2IubG9hZChiLmNvbnZlcnREYXRhVG9UYXJnZXRzKGMpLGEpfSk6YS5qc29uP2IubG9hZChiLmNvbnZlcnREYXRhVG9UYXJnZXRzKGIuY29udmVydEpzb25Ub0RhdGEoYS5qc29uLGEua2V5cykpLGEpOmEucm93cz9iLmxvYWQoYi5jb252ZXJ0RGF0YVRvVGFyZ2V0cyhiLmNvbnZlcnRSb3dzVG9EYXRhKGEucm93cykpLGEpOmEuY29sdW1ucz9iLmxvYWQoYi5jb252ZXJ0RGF0YVRvVGFyZ2V0cyhiLmNvbnZlcnRDb2x1bW5zVG9EYXRhKGEuY29sdW1ucykpLGEpOmIubG9hZChudWxsLGEpfSxpLnVubG9hZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ8fChiPWZ1bmN0aW9uKCl7fSksYT1hLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYy5oYXNUYXJnZXQoYy5kYXRhLnRhcmdldHMsYSl9KSxhJiYwIT09YS5sZW5ndGg/KGMuc3ZnLnNlbGVjdEFsbChhLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYy5zZWxlY3RvclRhcmdldChhKX0pKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLmNhbGwoYy5lbmRhbGwsYiksdm9pZCBhLmZvckVhY2goZnVuY3Rpb24oYSl7Yy53aXRob3V0RmFkZUluW2FdPSExLGMubGVnZW5kJiZjLmxlZ2VuZC5zZWxlY3RBbGwoIi4iK2wubGVnZW5kSXRlbStjLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGEpKS5yZW1vdmUoKSxjLmRhdGEudGFyZ2V0cz1jLmRhdGEudGFyZ2V0cy5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGIuaWQhPT1hfSl9KSk6dm9pZCBiKCl9LGkuY2F0ZWdvcnlOYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuY29uZmlnO3JldHVybiBhPGIuYXhpc194X2NhdGVnb3JpZXMubGVuZ3RoP2IuYXhpc194X2NhdGVnb3JpZXNbYV06YX0saS5pbml0RXZlbnRSZWN0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLm1haW4uc2VsZWN0KCIuIitsLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbC5ldmVudFJlY3RzKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwwKX0saS5yZWRyYXdFdmVudFJlY3Q9ZnVuY3Rpb24oKXt2YXIgYSxiLGM9dGhpcyxkPWMuY29uZmlnLGU9Yy5pc011bHRpcGxlWCgpLGY9Yy5tYWluLnNlbGVjdCgiLiIrbC5ldmVudFJlY3RzKS5zdHlsZSgiY3Vyc29yIixkLnpvb21fZW5hYmxlZD9kLmF4aXNfcm90YXRlZD8ibnMtcmVzaXplIjoiZXctcmVzaXplIjpudWxsKS5jbGFzc2VkKGwuZXZlbnRSZWN0c011bHRpcGxlLGUpLmNsYXNzZWQobC5ldmVudFJlY3RzU2luZ2xlLCFlKTtmLnNlbGVjdEFsbCgiLiIrbC5ldmVudFJlY3QpLnJlbW92ZSgpLGMuZXZlbnRSZWN0PWYuc2VsZWN0QWxsKCIuIitsLmV2ZW50UmVjdCksZT8oYT1jLmV2ZW50UmVjdC5kYXRhKFswXSksYy5nZW5lcmF0ZUV2ZW50UmVjdHNGb3JNdWx0aXBsZVhzKGEuZW50ZXIoKSksYy51cGRhdGVFdmVudFJlY3QoYSkpOihiPWMuZ2V0TWF4RGF0YUNvdW50VGFyZ2V0KGMuZGF0YS50YXJnZXRzKSxmLmRhdHVtKGI/Yi52YWx1ZXM6W10pLGMuZXZlbnRSZWN0PWYuc2VsZWN0QWxsKCIuIitsLmV2ZW50UmVjdCksYT1jLmV2ZW50UmVjdC5kYXRhKGZ1bmN0aW9uKGEpe3JldHVybiBhfSksYy5nZW5lcmF0ZUV2ZW50UmVjdHNGb3JTaW5nbGVYKGEuZW50ZXIoKSksYy51cGRhdGVFdmVudFJlY3QoYSksYS5leGl0KCkucmVtb3ZlKCkpfSxpLnVwZGF0ZUV2ZW50UmVjdD1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD10aGlzLGk9aC5jb25maWc7YT1hfHxoLmV2ZW50UmVjdC5kYXRhKGZ1bmN0aW9uKGEpe3JldHVybiBhfSksaC5pc011bHRpcGxlWCgpPyhiPTAsYz0wLGQ9aC53aWR0aCxlPWguaGVpZ2h0KTooIWguaXNDdXN0b21YKCkmJiFoLmlzVGltZVNlcmllcygpfHxoLmlzQ2F0ZWdvcml6ZWQoKT8oZj1oLmdldEV2ZW50UmVjdFdpZHRoKCksZz1mdW5jdGlvbihhKXtyZXR1cm4gaC54KGEueCktZi8yfSk6KGgudXBkYXRlWHMoKSxmPWZ1bmN0aW9uKGEpe3ZhciBiPWguZ2V0UHJldlgoYS5pbmRleCksYz1oLmdldE5leHRYKGEuaW5kZXgpO3JldHVybiBudWxsPT09YiYmbnVsbD09PWM/aS5heGlzX3JvdGF0ZWQ/aC5oZWlnaHQ6aC53aWR0aDoobnVsbD09PWImJihiPWgueC5kb21haW4oKVswXSksbnVsbD09PWMmJihjPWgueC5kb21haW4oKVsxXSksTWF0aC5tYXgoMCwoaC54KGMpLWgueChiKSkvMikpfSxnPWZ1bmN0aW9uKGEpe3ZhciBiPWguZ2V0UHJldlgoYS5pbmRleCksYz1oLmdldE5leHRYKGEuaW5kZXgpLGQ9aC5kYXRhLnhzW2EuaWRdW2EuaW5kZXhdO3JldHVybiBudWxsPT09YiYmbnVsbD09PWM/MDoobnVsbD09PWImJihiPWgueC5kb21haW4oKVswXSksKGgueChkKStoLngoYikpLzIpfSksYj1pLmF4aXNfcm90YXRlZD8wOmcsYz1pLmF4aXNfcm90YXRlZD9nOjAsZD1pLmF4aXNfcm90YXRlZD9oLndpZHRoOmYsZT1pLmF4aXNfcm90YXRlZD9mOmguaGVpZ2h0KSxhLmF0dHIoImNsYXNzIixoLmNsYXNzRXZlbnQuYmluZChoKSkuYXR0cigieCIsYikuYXR0cigieSIsYykuYXR0cigid2lkdGgiLGQpLmF0dHIoImhlaWdodCIsZSl9LGkuZ2VuZXJhdGVFdmVudFJlY3RzRm9yU2luZ2xlWD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5kMyxkPWIuY29uZmlnO2EuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLGIuY2xhc3NFdmVudC5iaW5kKGIpKS5zdHlsZSgiY3Vyc29yIixkLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJmQuZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZD8icG9pbnRlciI6bnVsbCkub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oYSl7dmFyIGM9YS5pbmRleDtiLmRyYWdnaW5nfHxiLmZsb3dpbmd8fGIuaGFzQXJjVHlwZSgpfHwoZC5wb2ludF9mb2N1c19leHBhbmRfZW5hYmxlZCYmYi5leHBhbmRDaXJjbGVzKGMsbnVsbCwhMCksYi5leHBhbmRCYXJzKGMsbnVsbCwhMCksYi5tYWluLnNlbGVjdEFsbCgiLiIrbC5zaGFwZSsiLSIrYykuZWFjaChmdW5jdGlvbihhKXtkLmRhdGFfb25tb3VzZW92ZXIuY2FsbChiLmFwaSxhKX0pKX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oYSl7dmFyIGM9YS5pbmRleDtiLmNvbmZpZyYmKGIuaGFzQXJjVHlwZSgpfHwoYi5oaWRlWEdyaWRGb2N1cygpLGIuaGlkZVRvb2x0aXAoKSxiLnVuZXhwYW5kQ2lyY2xlcygpLGIudW5leHBhbmRCYXJzKCksYi5tYWluLnNlbGVjdEFsbCgiLiIrbC5zaGFwZSsiLSIrYykuZWFjaChmdW5jdGlvbihhKXtkLmRhdGFfb25tb3VzZW91dC5jYWxsKGIuYXBpLGEpfSkpKX0pLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGEpe3ZhciBlLGY9YS5pbmRleCxnPWIuc3ZnLnNlbGVjdCgiLiIrbC5ldmVudFJlY3QrIi0iK2YpO2IuZHJhZ2dpbmd8fGIuZmxvd2luZ3x8Yi5oYXNBcmNUeXBlKCl8fChiLmlzU3RlcFR5cGUoYSkmJiJzdGVwLWFmdGVyIj09PWIuY29uZmlnLmxpbmVfc3RlcF90eXBlJiZjLm1vdXNlKHRoaXMpWzBdPGIueChiLmdldFhWYWx1ZShhLmlkLGYpKSYmKGYtPTEpLGU9Yi5maWx0ZXJUYXJnZXRzVG9TaG93KGIuZGF0YS50YXJnZXRzKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGIuYWRkTmFtZShiLmdldFZhbHVlT25JbmRleChhLnZhbHVlcyxmKSl9KSxkLnRvb2x0aXBfZ3JvdXBlZCYmKGIuc2hvd1Rvb2x0aXAoZSx0aGlzKSxiLnNob3dYR3JpZEZvY3VzKGUpKSwoIWQudG9vbHRpcF9ncm91cGVkfHxkLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJiFkLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWQpJiZiLm1haW4uc2VsZWN0QWxsKCIuIitsLnNoYXBlKyItIitmKS5lYWNoKGZ1bmN0aW9uKCl7Yy5zZWxlY3QodGhpcykuY2xhc3NlZChsLkVYUEFOREVELCEwKSxkLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJmcuc3R5bGUoImN1cnNvciIsZC5kYXRhX3NlbGVjdGlvbl9ncm91cGVkPyJwb2ludGVyIjpudWxsKSxkLnRvb2x0aXBfZ3JvdXBlZHx8KGIuaGlkZVhHcmlkRm9jdXMoKSxiLmhpZGVUb29sdGlwKCksZC5kYXRhX3NlbGVjdGlvbl9ncm91cGVkfHwoYi51bmV4cGFuZENpcmNsZXMoZiksYi51bmV4cGFuZEJhcnMoZikpKX0pLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYi5pc1dpdGhpblNoYXBlKHRoaXMsYSl9KS5lYWNoKGZ1bmN0aW9uKGEpe2QuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmKGQuZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZHx8ZC5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUoYSkpJiZnLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIiksZC50b29sdGlwX2dyb3VwZWR8fChiLnNob3dUb29sdGlwKFthXSx0aGlzKSxiLnNob3dYR3JpZEZvY3VzKFthXSksZC5wb2ludF9mb2N1c19leHBhbmRfZW5hYmxlZCYmYi5leHBhbmRDaXJjbGVzKGYsYS5pZCwhMCksYi5leHBhbmRCYXJzKGYsYS5pZCwhMCkpfSkpfSkub24oImNsaWNrIixmdW5jdGlvbihhKXt2YXIgZT1hLmluZGV4O2lmKCFiLmhhc0FyY1R5cGUoKSYmYi50b2dnbGVTaGFwZSl7aWYoYi5jYW5jZWxDbGljaylyZXR1cm4gdm9pZChiLmNhbmNlbENsaWNrPSExKTtiLmlzU3RlcFR5cGUoYSkmJiJzdGVwLWFmdGVyIj09PWQubGluZV9zdGVwX3R5cGUmJmMubW91c2UodGhpcylbMF08Yi54KGIuZ2V0WFZhbHVlKGEuaWQsZSkpJiYoZS09MSksYi5tYWluLnNlbGVjdEFsbCgiLiIrbC5zaGFwZSsiLSIrZSkuZWFjaChmdW5jdGlvbihhKXsoZC5kYXRhX3NlbGVjdGlvbl9ncm91cGVkfHxiLmlzV2l0aGluU2hhcGUodGhpcyxhKSkmJihiLnRvZ2dsZVNoYXBlKHRoaXMsYSxlKSxiLmNvbmZpZy5kYXRhX29uY2xpY2suY2FsbChiLmFwaSxhLHRoaXMpKX0pfX0pLmNhbGwoZC5kYXRhX3NlbGVjdGlvbl9kcmFnZ2FibGUmJmIuZHJhZz9jLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oT2JqZWN0KS5vbigiZHJhZyIsZnVuY3Rpb24oKXtiLmRyYWcoYy5tb3VzZSh0aGlzKSl9KS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe2IuZHJhZ3N0YXJ0KGMubW91c2UodGhpcykpfSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKCl7Yi5kcmFnZW5kKCl9KTpmdW5jdGlvbigpe30pfSxpLmdlbmVyYXRlRXZlbnRSZWN0c0Zvck11bHRpcGxlWHM9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe2Muc3ZnLnNlbGVjdCgiLiIrbC5ldmVudFJlY3QpLnN0eWxlKCJjdXJzb3IiLG51bGwpLGMuaGlkZVhHcmlkRm9jdXMoKSxjLmhpZGVUb29sdGlwKCksYy51bmV4cGFuZENpcmNsZXMoKSxjLnVuZXhwYW5kQmFycygpfXZhciBjPXRoaXMsZD1jLmQzLGU9Yy5jb25maWc7YS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsYy53aWR0aCkuYXR0cigiaGVpZ2h0IixjLmhlaWdodCkuYXR0cigiY2xhc3MiLGwuZXZlbnRSZWN0KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7Yy5jb25maWcmJihjLmhhc0FyY1R5cGUoKXx8YigpKX0pLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7dmFyIGEsZixnLGgsaT1jLmZpbHRlclRhcmdldHNUb1Nob3coYy5kYXRhLnRhcmdldHMpO2lmKCFjLmRyYWdnaW5nJiYhYy5oYXNBcmNUeXBlKGkpKXtpZihhPWQubW91c2UodGhpcyksZj1jLmZpbmRDbG9zZXN0RnJvbVRhcmdldHMoaSxhKSwhYy5tb3VzZW92ZXJ8fGYmJmYuaWQ9PT1jLm1vdXNlb3Zlci5pZHx8KGUuZGF0YV9vbm1vdXNlb3V0LmNhbGwoYy5hcGksYy5tb3VzZW92ZXIpLGMubW91c2VvdmVyPXZvaWQgMCksIWYpcmV0dXJuIHZvaWQgYigpO2c9Yy5pc1NjYXR0ZXJUeXBlKGYpfHwhZS50b29sdGlwX2dyb3VwZWQ/W2ZdOmMuZmlsdGVyQnlYKGksZi54KSxoPWcubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBjLmFkZE5hbWUoYSl9KSxjLnNob3dUb29sdGlwKGgsdGhpcyksZS5wb2ludF9mb2N1c19leHBhbmRfZW5hYmxlZCYmYy5leHBhbmRDaXJjbGVzKGYuaW5kZXgsZi5pZCwhMCksYy5leHBhbmRCYXJzKGYuaW5kZXgsZi5pZCwhMCksYy5zaG93WEdyaWRGb2N1cyhoKSwoYy5pc0JhclR5cGUoZi5pZCl8fGMuZGlzdChmLGEpPGUucG9pbnRfc2Vuc2l0aXZpdHkpJiYoYy5zdmcuc2VsZWN0KCIuIitsLmV2ZW50UmVjdCkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxjLm1vdXNlb3Zlcnx8KGUuZGF0YV9vbm1vdXNlb3Zlci5jYWxsKGMuYXBpLGYpLGMubW91c2VvdmVyPWYpKX19KS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGEsYixmPWMuZmlsdGVyVGFyZ2V0c1RvU2hvdyhjLmRhdGEudGFyZ2V0cyk7Yy5oYXNBcmNUeXBlKGYpfHwoYT1kLm1vdXNlKHRoaXMpLGI9Yy5maW5kQ2xvc2VzdEZyb21UYXJnZXRzKGYsYSksYiYmKGMuaXNCYXJUeXBlKGIuaWQpfHxjLmRpc3QoYixhKTxlLnBvaW50X3NlbnNpdGl2aXR5KSYmYy5tYWluLnNlbGVjdEFsbCgiLiIrbC5zaGFwZXMrYy5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChiLmlkKSkuc2VsZWN0QWxsKCIuIitsLnNoYXBlKyItIitiLmluZGV4KS5lYWNoKGZ1bmN0aW9uKCl7KGUuZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZHx8Yy5pc1dpdGhpblNoYXBlKHRoaXMsYikpJiYoYy50b2dnbGVTaGFwZSh0aGlzLGIsYi5pbmRleCksYy5jb25maWcuZGF0YV9vbmNsaWNrLmNhbGwoYy5hcGksYix0aGlzKSl9KSl9KS5jYWxsKGUuZGF0YV9zZWxlY3Rpb25fZHJhZ2dhYmxlJiZjLmRyYWc/ZC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKE9iamVjdCkub24oImRyYWciLGZ1bmN0aW9uKCl7Yy5kcmFnKGQubW91c2UodGhpcykpfSkub24oImRyYWdzdGFydCIsZnVuY3Rpb24oKXtjLmRyYWdzdGFydChkLm1vdXNlKHRoaXMpKX0pLm9uKCJkcmFnZW5kIixmdW5jdGlvbigpe2MuZHJhZ2VuZCgpfSk6ZnVuY3Rpb24oKXt9KX0saS5kaXNwYXRjaEV2ZW50PWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT10aGlzLGY9Ii4iK2wuZXZlbnRSZWN0KyhlLmlzTXVsdGlwbGVYKCk/IiI6Ii0iK2MpLGc9ZS5tYWluLnNlbGVjdChmKS5ub2RlKCksaD1nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9aC5sZWZ0KyhkP2RbMF06MCksaj1oLnRvcCsoZD9kWzFdOjApLGs9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIik7ay5pbml0TW91c2VFdmVudChiLCEwLCEwLGEsMCxpLGosaSxqLCExLCExLCExLCExLDAsbnVsbCksZy5kaXNwYXRjaEV2ZW50KGspfSxpLmdldEN1cnJlbnRXaWR0aD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZztyZXR1cm4gYi5zaXplX3dpZHRoP2Iuc2l6ZV93aWR0aDphLmdldFBhcmVudFdpZHRoKCl9LGkuZ2V0Q3VycmVudEhlaWdodD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZyxjPWIuc2l6ZV9oZWlnaHQ/Yi5zaXplX2hlaWdodDphLmdldFBhcmVudEhlaWdodCgpO3JldHVybiBjPjA/YzozMjAvKGEuaGFzVHlwZSgiZ2F1Z2UiKSYmIWIuZ2F1Z2VfZnVsbENpcmNsZT8yOjEpfSxpLmdldEN1cnJlbnRQYWRkaW5nVG9wPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY29uZmlnLGM9bShiLnBhZGRpbmdfdG9wKT9iLnBhZGRpbmdfdG9wOjA7cmV0dXJuIGEudGl0bGUmJmEudGl0bGUubm9kZSgpJiYoYys9YS5nZXRUaXRsZVBhZGRpbmcoKSksY30saS5nZXRDdXJyZW50UGFkZGluZ0JvdHRvbT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY29uZmlnO3JldHVybiBtKGEucGFkZGluZ19ib3R0b20pP2EucGFkZGluZ19ib3R0b206MH0saS5nZXRDdXJyZW50UGFkZGluZ0xlZnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuY29uZmlnO3JldHVybiBtKGMucGFkZGluZ19sZWZ0KT9jLnBhZGRpbmdfbGVmdDpjLmF4aXNfcm90YXRlZD9jLmF4aXNfeF9zaG93P01hdGgubWF4KHIoYi5nZXRBeGlzV2lkdGhCeUF4aXNJZCgieCIsYSkpLDQwKToxOiFjLmF4aXNfeV9zaG93fHxjLmF4aXNfeV9pbm5lcj9iLmF4aXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCkuaXNPdXRlcj8zMDoxOnIoYi5nZXRBeGlzV2lkdGhCeUF4aXNJZCgieSIsYSkpfSxpLmdldEN1cnJlbnRQYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5jb25maWcsYz0xMCxkPWEuaXNMZWdlbmRSaWdodD9hLmdldExlZ2VuZFdpZHRoKCkrMjA6MDtyZXR1cm4gbShiLnBhZGRpbmdfcmlnaHQpP2IucGFkZGluZ19yaWdodCsxOmIuYXhpc19yb3RhdGVkP2MrZDohYi5heGlzX3kyX3Nob3d8fGIuYXhpc195Ml9pbm5lcj8yK2QrKGEuYXhpcy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uKCkuaXNPdXRlcj8yMDowKTpyKGEuZ2V0QXhpc1dpZHRoQnlBeGlzSWQoInkyIikpK2R9LGkuZ2V0UGFyZW50UmVjdFZhbHVlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjPXRoaXMuc2VsZWN0Q2hhcnQubm9kZSgpO2MmJiJCT0RZIiE9PWMudGFnTmFtZTspe3RyeXtiPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbYV19Y2F0Y2goZCl7IndpZHRoIj09PWEmJihiPWMub2Zmc2V0V2lkdGgpfWlmKGIpYnJlYWs7Yz1jLnBhcmVudE5vZGV9cmV0dXJuIGJ9LGkuZ2V0UGFyZW50V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQYXJlbnRSZWN0VmFsdWUoIndpZHRoIil9LGkuZ2V0UGFyZW50SGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxlY3RDaGFydC5zdHlsZSgiaGVpZ2h0Iik7cmV0dXJuIGEuaW5kZXhPZigicHgiKT4wPythLnJlcGxhY2UoInB4IiwiIik6MH0saS5nZXRTdmdMZWZ0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZyxkPWMuYXhpc19yb3RhdGVkfHwhYy5heGlzX3JvdGF0ZWQmJiFjLmF4aXNfeV9pbm5lcixlPWMuYXhpc19yb3RhdGVkP2wuYXhpc1g6bC5heGlzWSxmPWIubWFpbi5zZWxlY3QoIi4iK2UpLm5vZGUoKSxnPWYmJmQ/Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp7cmlnaHQ6MH0saD1iLnNlbGVjdENoYXJ0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWIuaGFzQXJjVHlwZSgpLGo9Zy5yaWdodC1oLmxlZnQtKGk/MDpiLmdldEN1cnJlbnRQYWRkaW5nTGVmdChhKSk7cmV0dXJuIGo+MD9qOjB9LGkuZ2V0QXhpc1dpZHRoQnlBeGlzSWQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5heGlzLmdldExhYmVsUG9zaXRpb25CeUlkKGEpO3JldHVybiBjLmF4aXMuZ2V0TWF4VGlja1dpZHRoKGEsYikrKGQuaXNJbm5lcj8yMDo0MCl9LGkuZ2V0SG9yaXpvbnRhbEF4aXNIZWlnaHQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuY29uZmlnLGQ9MzA7cmV0dXJuIngiIT09YXx8Yy5heGlzX3hfc2hvdz8ieCI9PT1hJiZjLmF4aXNfeF9oZWlnaHQ/Yy5heGlzX3hfaGVpZ2h0OiJ5IiE9PWF8fGMuYXhpc195X3Nob3c/InkyIiE9PWF8fGMuYXhpc195Ml9zaG93PygieCI9PT1hJiYhYy5heGlzX3JvdGF0ZWQmJmMuYXhpc194X3RpY2tfcm90YXRlJiYoZD0zMCtiLmF4aXMuZ2V0TWF4VGlja1dpZHRoKGEpKk1hdGguY29zKE1hdGguUEkqKDkwLWMuYXhpc194X3RpY2tfcm90YXRlKS8xODApKSwieSI9PT1hJiZjLmF4aXNfcm90YXRlZCYmYy5heGlzX3lfdGlja19yb3RhdGUmJihkPTMwK2IuYXhpcy5nZXRNYXhUaWNrV2lkdGgoYSkqTWF0aC5jb3MoTWF0aC5QSSooOTAtYy5heGlzX3lfdGlja19yb3RhdGUpLzE4MCkpLGQrKGIuYXhpcy5nZXRMYWJlbFBvc2l0aW9uQnlJZChhKS5pc0lubmVyPzA6MTApKygieTIiPT09YT8tMTA6MCkpOmIucm90YXRlZF9wYWRkaW5nX3RvcDohYy5sZWdlbmRfc2hvd3x8Yi5pc0xlZ2VuZFJpZ2h0fHxiLmlzTGVnZW5kSW5zZXQ/MToxMDo4fSxpLmdldEV2ZW50UmVjdFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy54QXhpcy50aWNrSW50ZXJ2YWwoKSl9LGkuZ2V0U2hhcGVJbmRpY2VzPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD10aGlzLGU9ZC5jb25maWcsZj17fSxnPTA7cmV0dXJuIGQuZmlsdGVyVGFyZ2V0c1RvU2hvdyhkLmRhdGEudGFyZ2V0cy5maWx0ZXIoYSxkKSkuZm9yRWFjaChmdW5jdGlvbihhKXtmb3IoYj0wO2I8ZS5kYXRhX2dyb3Vwcy5sZW5ndGg7YisrKWlmKCEoZS5kYXRhX2dyb3Vwc1tiXS5pbmRleE9mKGEuaWQpPDApKWZvcihjPTA7YzxlLmRhdGFfZ3JvdXBzW2JdLmxlbmd0aDtjKyspaWYoZS5kYXRhX2dyb3Vwc1tiXVtjXWluIGYpe2ZbYS5pZF09ZltlLmRhdGFfZ3JvdXBzW2JdW2NdXTticmVha31wKGZbYS5pZF0pJiYoZlthLmlkXT1nKyspfSksZi5fX21heF9fPWctMSxmfSxpLmdldFNoYXBlWD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLGY9ZD9lLnN1Ylg6ZS54O3JldHVybiBmdW5jdGlvbihkKXt2YXIgZT1kLmlkIGluIGM/Y1tkLmlkXTowO3JldHVybiBkLnh8fDA9PT1kLng/ZihkLngpLWEqKGIvMi1lKTowfX0saS5nZXRTaGFwZVk9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztyZXR1cm4gZnVuY3Rpb24oYyl7dmFyIGQ9YT9iLmdldFN1YllTY2FsZShjLmlkKTpiLmdldFlTY2FsZShjLmlkKTtyZXR1cm4gZChjLnZhbHVlKX19LGkuZ2V0U2hhcGVPZmZzZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1kLm9yZGVyVGFyZ2V0cyhkLmZpbHRlclRhcmdldHNUb1Nob3coZC5kYXRhLnRhcmdldHMuZmlsdGVyKGEsZCkpKSxmPWUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlkfSk7cmV0dXJuIGZ1bmN0aW9uKGEsZyl7dmFyIGg9Yz9kLmdldFN1YllTY2FsZShhLmlkKTpkLmdldFlTY2FsZShhLmlkKSxpPWgoMCksaj1pO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGU9ZC5pc1N0ZXBUeXBlKGEpP2QuY29udmVydFZhbHVlc1RvU3RlcChjLnZhbHVlcyk6Yy52YWx1ZXM7Yy5pZCE9PWEuaWQmJmJbYy5pZF09PT1iW2EuaWRdJiZmLmluZGV4T2YoYy5pZCk8Zi5pbmRleE9mKGEuaWQpJiYoInVuZGVmaW5lZCIhPXR5cGVvZiBlW2ddJiYrZVtnXS54PT09K2EueHx8KGc9LTEsZS5mb3JFYWNoKGZ1bmN0aW9uKGIsYyl7Yi54PT09YS54JiYoZz1jKX0pKSxnIGluIGUmJmVbZ10udmFsdWUqYS52YWx1ZT49MCYmKGorPWgoZVtnXS52YWx1ZSktaSkpfSksan19LGkuaXNXaXRoaW5TaGFwZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9dGhpcyxlPWQuZDMuc2VsZWN0KGEpO3JldHVybiBkLmlzVGFyZ2V0VG9TaG93KGIuaWQpPyJjaXJjbGUiPT09YS5ub2RlTmFtZT9jPWQuaXNTdGVwVHlwZShiKT9kLmlzV2l0aGluU3RlcChhLGQuZ2V0WVNjYWxlKGIuaWQpKGIudmFsdWUpKTpkLmlzV2l0aGluQ2lyY2xlKGEsMS41KmQucG9pbnRTZWxlY3RSKGIpKToicGF0aCI9PT1hLm5vZGVOYW1lJiYoYz1lLmNsYXNzZWQobC5iYXIpP2QuaXNXaXRoaW5CYXIoYSk6ITApOmM9ITEsY30saS5nZXRJbnRlcnBvbGF0ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5pc0ludGVycG9sYXRpb25UeXBlKGIuY29uZmlnLnNwbGluZV9pbnRlcnBvbGF0aW9uX3R5cGUpP2IuY29uZmlnLnNwbGluZV9pbnRlcnBvbGF0aW9uX3R5cGU6ImNhcmRpbmFsIjtyZXR1cm4gYi5pc1NwbGluZVR5cGUoYSk/YzpiLmlzU3RlcFR5cGUoYSk/Yi5jb25maWcubGluZV9zdGVwX3R5cGU6ImxpbmVhciJ9LGkuaW5pdExpbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EubWFpbi5zZWxlY3QoIi4iK2wuY2hhcnQpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsLmNoYXJ0TGluZXMpfSxpLnVwZGF0ZVRhcmdldHNGb3JMaW5lPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD10aGlzLGU9ZC5jb25maWcsZj1kLmNsYXNzQ2hhcnRMaW5lLmJpbmQoZCksZz1kLmNsYXNzTGluZXMuYmluZChkKSxoPWQuY2xhc3NBcmVhcy5iaW5kKGQpLGk9ZC5jbGFzc0NpcmNsZXMuYmluZChkKSxqPWQuY2xhc3NGb2N1cy5iaW5kKGQpO2I9ZC5tYWluLnNlbGVjdCgiLiIrbC5jaGFydExpbmVzKS5zZWxlY3RBbGwoIi4iK2wuY2hhcnRMaW5lKS5kYXRhKGEpLmF0dHIoImNsYXNzIixmdW5jdGlvbihhKXtyZXR1cm4gZihhKStqKGEpfSksYz1iLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGYpLnN0eWxlKCJvcGFjaXR5IiwwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksYy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZyksYy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsaCksYy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYSl7cmV0dXJuIGQuZ2VuZXJhdGVDbGFzcyhsLnNlbGVjdGVkQ2lyY2xlcyxhLmlkKX0pLGMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGkpLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKGEpe3JldHVybiBlLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShhKT8icG9pbnRlciI6bnVsbH0pLGEuZm9yRWFjaChmdW5jdGlvbihhKXtkLm1haW4uc2VsZWN0QWxsKCIuIitsLnNlbGVjdGVkQ2lyY2xlcytkLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGEuaWQpKS5zZWxlY3RBbGwoIi4iK2wuc2VsZWN0ZWRDaXJjbGUpLmVhY2goZnVuY3Rpb24oYil7Yi52YWx1ZT1hLnZhbHVlc1tiLmluZGV4XS52YWx1ZX0pfSl9LGkudXBkYXRlTGluZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2IubWFpbkxpbmU9Yi5tYWluLnNlbGVjdEFsbCgiLiIrbC5saW5lcykuc2VsZWN0QWxsKCIuIitsLmxpbmUpLmRhdGEoYi5saW5lRGF0YS5iaW5kKGIpKSxiLm1haW5MaW5lLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLGIuY2xhc3NMaW5lLmJpbmQoYikpLnN0eWxlKCJzdHJva2UiLGIuY29sb3IpLGIubWFpbkxpbmUuc3R5bGUoIm9wYWNpdHkiLGIuaW5pdGlhbE9wYWNpdHkuYmluZChiKSkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsZnVuY3Rpb24oYSl7cmV0dXJuIGIuaXNTdGVwVHlwZShhKT8iY3Jpc3BFZGdlcyI6IiJ9KS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLGIubWFpbkxpbmUuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9LGkucmVkcmF3TGluZT1mdW5jdGlvbihhLGIpe3JldHVyblsoYj90aGlzLm1haW5MaW5lLnRyYW5zaXRpb24oTWF0aC5yYW5kb20oKS50b1N0cmluZygpKTp0aGlzLm1haW5MaW5lKS5hdHRyKCJkIixhKS5zdHlsZSgic3Ryb2tlIix0aGlzLmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsMSldfSxpLmdlbmVyYXRlRHJhd0xpbmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5jb25maWcsZT1jLmQzLnN2Zy5saW5lKCksZj1jLmdlbmVyYXRlR2V0TGluZVBvaW50cyhhLGIpLGc9Yj9jLmdldFN1YllTY2FsZTpjLmdldFlTY2FsZSxoPWZ1bmN0aW9uKGEpe3JldHVybihiP2Muc3VieHg6Yy54eCkuY2FsbChjLGEpfSxpPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuZGF0YV9ncm91cHMubGVuZ3RoPjA/ZihhLGIpWzBdWzFdOmcuY2FsbChjLGEuaWQpKGEudmFsdWUpfTtyZXR1cm4gZT1kLmF4aXNfcm90YXRlZD9lLngoaSkueShoKTplLngoaCkueShpKSxkLmxpbmVfY29ubmVjdE51bGx8fChlPWUuZGVmaW5lZChmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YS52YWx1ZX0pKSxmdW5jdGlvbihhKXt2YXIgZixoPWQubGluZV9jb25uZWN0TnVsbD9jLmZpbHRlclJlbW92ZU51bGwoYS52YWx1ZXMpOmEudmFsdWVzLGk9Yj9jLng6Yy5zdWJYLGo9Zy5jYWxsKGMsYS5pZCksaz0wLGw9MDtyZXR1cm4gYy5pc0xpbmVUeXBlKGEpP2QuZGF0YV9yZWdpb25zW2EuaWRdP2Y9Yy5saW5lV2l0aFJlZ2lvbnMoaCxpLGosZC5kYXRhX3JlZ2lvbnNbYS5pZF0pOihjLmlzU3RlcFR5cGUoYSkmJihoPWMuY29udmVydFZhbHVlc1RvU3RlcChoKSksZj1lLmludGVycG9sYXRlKGMuZ2V0SW50ZXJwb2xhdGUoYSkpKGgpKTooaFswXSYmKGs9aShoWzBdLngpLGw9aihoWzBdLnZhbHVlKSksZj1kLmF4aXNfcm90YXRlZD8iTSAiK2wrIiAiK2s6Ik0gIitrKyIgIitsKSxmP2Y6Ik0gMCAwIn19LGkuZ2VuZXJhdGVHZXRMaW5lUG9pbnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPWMuY29uZmlnLGU9YS5fX21heF9fKzEsZj1jLmdldFNoYXBlWCgwLGUsYSwhIWIpLGc9Yy5nZXRTaGFwZVkoISFiKSxoPWMuZ2V0U2hhcGVPZmZzZXQoYy5pc0xpbmVUeXBlLGEsISFiKSxpPWI/Yy5nZXRTdWJZU2NhbGU6Yy5nZXRZU2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGEsYil7dmFyIGU9aS5jYWxsKGMsYS5pZCkoMCksaj1oKGEsYil8fGUsaz1mKGEpLGw9ZyhhKTtyZXR1cm4gZC5heGlzX3JvdGF0ZWQmJigwPGEudmFsdWUmJmU+bHx8YS52YWx1ZTwwJiZsPmUpJiYobD1lKSxbW2ssbC0oZS1qKV0sW2ssbC0oZS1qKV0sW2ssbC0oZS1qKV0sW2ssbC0oZS1qKV1dfX0saS5saW5lV2l0aFJlZ2lvbnM9ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZShhLGIpe3ZhciBjO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspaWYoYltjXS5zdGFydDxhJiZhPD1iW2NdLmVuZClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmKGEpe3JldHVybiJNIithWzBdWzBdKyIgIithWzBdWzFdKyIgIithWzFdWzBdKyIgIithWzFdWzFdfXZhciBnLGgsaSxqLGssbCxtLG4sbyxyLHMsdCx1PXRoaXMsdj11LmNvbmZpZyx3PS0xLHg9Ik0iLHk9dS5pc0NhdGVnb3JpemVkKCk/LjU6MCx6PVtdO2lmKHEoZCkpZm9yKGc9MDtnPGQubGVuZ3RoO2crKyl6W2ddPXt9LHAoZFtnXS5zdGFydCk/eltnXS5zdGFydD1hWzBdLng6eltnXS5zdGFydD11LmlzVGltZVNlcmllcygpP3UucGFyc2VEYXRlKGRbZ10uc3RhcnQpOmRbZ10uc3RhcnQscChkW2ddLmVuZCk/eltnXS5lbmQ9YVthLmxlbmd0aC0xXS54OnpbZ10uZW5kPXUuaXNUaW1lU2VyaWVzKCk/dS5wYXJzZURhdGUoZFtnXS5lbmQpOmRbZ10uZW5kO2ZvcihzPXYuYXhpc19yb3RhdGVkP2Z1bmN0aW9uKGEpe3JldHVybiBjKGEudmFsdWUpfTpmdW5jdGlvbihhKXtyZXR1cm4gYihhLngpfSx0PXYuYXhpc19yb3RhdGVkP2Z1bmN0aW9uKGEpe3JldHVybiBiKGEueCl9OmZ1bmN0aW9uKGEpe3JldHVybiBjKGEudmFsdWUpfSxpPXUuaXNUaW1lU2VyaWVzKCk/ZnVuY3Rpb24oYSxkLGUsZyl7dmFyIGgsaT1hLnguZ2V0VGltZSgpLGo9ZC54LWEueCxsPW5ldyBEYXRlKGkraiplKSxtPW5ldyBEYXRlKGkraiooZStnKSk7cmV0dXJuIGg9di5heGlzX3JvdGF0ZWQ/W1tjKGsoZSkpLGIobCldLFtjKGsoZStnKSksYihtKV1dOltbYihsKSxjKGsoZSkpXSxbYihtKSxjKGsoZStnKSldXSxmKGgpfTpmdW5jdGlvbihhLGQsZSxnKXt2YXIgaDtyZXR1cm4gaD12LmF4aXNfcm90YXRlZD9bW2MoayhlKSwhMCksYihqKGUpKV0sW2MoayhlK2cpLCEwKSxiKGooZStnKSldXTpbW2IoaihlKSwhMCksYyhrKGUpKV0sW2IoaihlK2cpLCEwKSxjKGsoZStnKSldXSxmKGgpfSxnPTA7ZzxhLmxlbmd0aDtnKyspe2lmKHAoeil8fCFlKGFbZ10ueCx6KSl4Kz0iICIrcyhhW2ddKSsiICIrdChhW2ddKTtlbHNlIGZvcihqPXUuZ2V0U2NhbGUoYVtnLTFdLngreSxhW2ddLngreSx1LmlzVGltZVNlcmllcygpKSxrPXUuZ2V0U2NhbGUoYVtnLTFdLnZhbHVlLGFbZ10udmFsdWUpLGw9YihhW2ddLngpLWIoYVtnLTFdLngpLG09YyhhW2ddLnZhbHVlKS1jKGFbZy0xXS52YWx1ZSksbj1NYXRoLnNxcnQoTWF0aC5wb3cobCwyKStNYXRoLnBvdyhtLDIpKSxvPTIvbixyPTIqbyxoPW87MT49aDtoKz1yKXgrPWkoYVtnLTFdLGFbZ10saCxvKTt3PWFbZ10ueH1yZXR1cm4geH0saS51cGRhdGVBcmVhPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmQzO2IubWFpbkFyZWE9Yi5tYWluLnNlbGVjdEFsbCgiLiIrbC5hcmVhcykuc2VsZWN0QWxsKCIuIitsLmFyZWEpLmRhdGEoYi5saW5lRGF0YS5iaW5kKGIpKSxiLm1haW5BcmVhLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLGIuY2xhc3NBcmVhLmJpbmQoYikpLnN0eWxlKCJmaWxsIixiLmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oKXtyZXR1cm4gYi5vcmdBcmVhT3BhY2l0eT0rYy5zZWxlY3QodGhpcykuc3R5bGUoIm9wYWNpdHkiKSwwfSksYi5tYWluQXJlYS5zdHlsZSgib3BhY2l0eSIsYi5vcmdBcmVhT3BhY2l0eSksYi5tYWluQXJlYS5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0saS5yZWRyYXdBcmVhPWZ1bmN0aW9uKGEsYil7cmV0dXJuWyhiP3RoaXMubWFpbkFyZWEudHJhbnNpdGlvbihNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkpOnRoaXMubWFpbkFyZWEpLmF0dHIoImQiLGEpLnN0eWxlKCJmaWxsIix0aGlzLmNvbG9yKS5zdHlsZSgib3BhY2l0eSIsdGhpcy5vcmdBcmVhT3BhY2l0eSldfSxpLmdlbmVyYXRlRHJhd0FyZWE9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5jb25maWcsZT1jLmQzLnN2Zy5hcmVhKCksZj1jLmdlbmVyYXRlR2V0QXJlYVBvaW50cyhhLGIpLGc9Yj9jLmdldFN1YllTY2FsZTpjLmdldFlTY2FsZSxoPWZ1bmN0aW9uKGEpe3JldHVybihiP2Muc3VieHg6Yy54eCkuY2FsbChjLGEpfSxpPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuZGF0YV9ncm91cHMubGVuZ3RoPjA/ZihhLGIpWzBdWzFdOmcuY2FsbChjLGEuaWQpKGMuZ2V0QXJlYUJhc2VWYWx1ZShhLmlkKSl9LGo9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5kYXRhX2dyb3Vwcy5sZW5ndGg+MD9mKGEsYilbMV1bMV06Zy5jYWxsKGMsYS5pZCkoYS52YWx1ZSl9O3JldHVybiBlPWQuYXhpc19yb3RhdGVkP2UueDAoaSkueDEoaikueShoKTplLngoaCkueTAoZC5hcmVhX2Fib3ZlPzA6aSkueTEoaiksZC5saW5lX2Nvbm5lY3ROdWxsfHwoZT1lLmRlZmluZWQoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT1hLnZhbHVlfSkpLGZ1bmN0aW9uKGEpe3ZhciBiLGY9ZC5saW5lX2Nvbm5lY3ROdWxsP2MuZmlsdGVyUmVtb3ZlTnVsbChhLnZhbHVlcyk6YS52YWx1ZXMsZz0wLGg9MDtyZXR1cm4gYy5pc0FyZWFUeXBlKGEpPyhjLmlzU3RlcFR5cGUoYSkmJihmPWMuY29udmVydFZhbHVlc1RvU3RlcChmKSksYj1lLmludGVycG9sYXRlKGMuZ2V0SW50ZXJwb2xhdGUoYSkpKGYpKTooZlswXSYmKGc9Yy54KGZbMF0ueCksaD1jLmdldFlTY2FsZShhLmlkKShmWzBdLnZhbHVlKSksYj1kLmF4aXNfcm90YXRlZD8iTSAiK2grIiAiK2c6Ik0gIitnKyIgIitoKSxiP2I6Ik0gMCAwIn19LGkuZ2V0QXJlYUJhc2VWYWx1ZT1mdW5jdGlvbigpe3JldHVybiAwfSxpLmdlbmVyYXRlR2V0QXJlYVBvaW50cz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZD1jLmNvbmZpZyxlPWEuX19tYXhfXysxLGY9Yy5nZXRTaGFwZVgoMCxlLGEsISFiKSxnPWMuZ2V0U2hhcGVZKCEhYiksaD1jLmdldFNoYXBlT2Zmc2V0KGMuaXNBcmVhVHlwZSxhLCEhYiksaT1iP2MuZ2V0U3ViWVNjYWxlOmMuZ2V0WVNjYWxlO3JldHVybiBmdW5jdGlvbihhLGIpe3ZhciBlPWkuY2FsbChjLGEuaWQpKDApLGo9aChhLGIpfHxlLGs9ZihhKSxsPWcoYSk7cmV0dXJuIGQuYXhpc19yb3RhdGVkJiYoMDxhLnZhbHVlJiZlPmx8fGEudmFsdWU8MCYmbD5lKSYmKGw9ZSksW1trLGpdLFtrLGwtKGUtaildLFtrLGwtKGUtaildLFtrLGpdXX19LGkudXBkYXRlQ2lyY2xlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLm1haW5DaXJjbGU9YS5tYWluLnNlbGVjdEFsbCgiLiIrbC5jaXJjbGVzKS5zZWxlY3RBbGwoIi4iK2wuY2lyY2xlKS5kYXRhKGEubGluZU9yU2NhdHRlckRhdGEuYmluZChhKSksYS5tYWluQ2lyY2xlLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsYS5jbGFzc0NpcmNsZS5iaW5kKGEpKS5hdHRyKCJyIixhLnBvaW50Ui5iaW5kKGEpKS5zdHlsZSgiZmlsbCIsYS5jb2xvciksYS5tYWluQ2lyY2xlLnN0eWxlKCJvcGFjaXR5IixhLmluaXRpYWxPcGFjaXR5Rm9yQ2lyY2xlLmJpbmQoYSkpLGEubWFpbkNpcmNsZS5leGl0KCkucmVtb3ZlKCl9LGkucmVkcmF3Q2lyY2xlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLm1haW4uc2VsZWN0QWxsKCIuIitsLnNlbGVjdGVkQ2lyY2xlKTtyZXR1cm5bKGM/dGhpcy5tYWluQ2lyY2xlLnRyYW5zaXRpb24oTWF0aC5yYW5kb20oKS50b1N0cmluZygpKTp0aGlzLm1haW5DaXJjbGUpLnN0eWxlKCJvcGFjaXR5Iix0aGlzLm9wYWNpdHlGb3JDaXJjbGUuYmluZCh0aGlzKSkuc3R5bGUoImZpbGwiLHRoaXMuY29sb3IpLmF0dHIoImN4IixhKS5hdHRyKCJjeSIsYiksKGM/ZC50cmFuc2l0aW9uKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSk6ZCkuYXR0cigiY3giLGEpLmF0dHIoImN5IixiKV19LGkuY2lyY2xlWD1mdW5jdGlvbihhKXtyZXR1cm4gYS54fHwwPT09YS54P3RoaXMueChhLngpOm51bGx9LGkudXBkYXRlQ2lyY2xlWT1mdW5jdGlvbigpe3ZhciBhLGIsYz10aGlzO2MuY29uZmlnLmRhdGFfZ3JvdXBzLmxlbmd0aD4wPyhhPWMuZ2V0U2hhcGVJbmRpY2VzKGMuaXNMaW5lVHlwZSksYj1jLmdlbmVyYXRlR2V0TGluZVBvaW50cyhhKSxjLmNpcmNsZVk9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYihhLGMpWzBdWzFdfSk6Yy5jaXJjbGVZPWZ1bmN0aW9uKGEpe3JldHVybiBjLmdldFlTY2FsZShhLmlkKShhLnZhbHVlKX19LGkuZ2V0Q2lyY2xlcz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuKGI/Yy5tYWluLnNlbGVjdEFsbCgiLiIrbC5jaXJjbGVzK2MuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoYikpOmMubWFpbikuc2VsZWN0QWxsKCIuIitsLmNpcmNsZSsobShhKT8iLSIrYToiIikpfSxpLmV4cGFuZENpcmNsZXM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1kLnBvaW50RXhwYW5kZWRSLmJpbmQoZCk7YyYmZC51bmV4cGFuZENpcmNsZXMoKSxkLmdldENpcmNsZXMoYSxiKS5jbGFzc2VkKGwuRVhQQU5ERUQsITApLmF0dHIoInIiLGUpfSxpLnVuZXhwYW5kQ2lyY2xlcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5wb2ludFIuYmluZChiKTtiLmdldENpcmNsZXMoYSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGIuZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQobC5FWFBBTkRFRCl9KS5jbGFzc2VkKGwuRVhQQU5ERUQsITEpLmF0dHIoInIiLGMpfSxpLnBvaW50Uj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5jb25maWc7cmV0dXJuIGIuaXNTdGVwVHlwZShhKT8wOm4oYy5wb2ludF9yKT9jLnBvaW50X3IoYSk6Yy5wb2ludF9yOw0KfSxpLnBvaW50RXhwYW5kZWRSPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZztyZXR1cm4gYy5wb2ludF9mb2N1c19leHBhbmRfZW5hYmxlZD9jLnBvaW50X2ZvY3VzX2V4cGFuZF9yP2MucG9pbnRfZm9jdXNfZXhwYW5kX3I6MS43NSpiLnBvaW50UihhKTpiLnBvaW50UihhKX0saS5wb2ludFNlbGVjdFI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuY29uZmlnO3JldHVybiBuKGMucG9pbnRfc2VsZWN0X3IpP2MucG9pbnRfc2VsZWN0X3IoYSk6Yy5wb2ludF9zZWxlY3Rfcj9jLnBvaW50X3NlbGVjdF9yOjQqYi5wb2ludFIoYSl9LGkuaXNXaXRoaW5DaXJjbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmQzLGQ9Yy5tb3VzZShhKSxlPWMuc2VsZWN0KGEpLGY9K2UuYXR0cigiY3giKSxnPStlLmF0dHIoImN5Iik7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhmLWRbMF0sMikrTWF0aC5wb3coZy1kWzFdLDIpKTxifSxpLmlzV2l0aGluU3RlcD1mdW5jdGlvbihhLGIpe3JldHVybiBNYXRoLmFicyhiLXRoaXMuZDMubW91c2UoYSlbMV0pPDMwfSxpLmluaXRCYXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EubWFpbi5zZWxlY3QoIi4iK2wuY2hhcnQpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsLmNoYXJ0QmFycyl9LGkudXBkYXRlVGFyZ2V0c0ZvckJhcj1mdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcyxlPWQuY29uZmlnLGY9ZC5jbGFzc0NoYXJ0QmFyLmJpbmQoZCksZz1kLmNsYXNzQmFycy5iaW5kKGQpLGg9ZC5jbGFzc0ZvY3VzLmJpbmQoZCk7Yj1kLm1haW4uc2VsZWN0KCIuIitsLmNoYXJ0QmFycykuc2VsZWN0QWxsKCIuIitsLmNoYXJ0QmFyKS5kYXRhKGEpLmF0dHIoImNsYXNzIixmdW5jdGlvbihhKXtyZXR1cm4gZihhKStoKGEpfSksYz1iLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGYpLnN0eWxlKCJvcGFjaXR5IiwwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksYy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZykuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24oYSl7cmV0dXJuIGUuZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGEpPyJwb2ludGVyIjpudWxsfSl9LGkudXBkYXRlQmFyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmJhckRhdGEuYmluZChiKSxkPWIuY2xhc3NCYXIuYmluZChiKSxlPWIuaW5pdGlhbE9wYWNpdHkuYmluZChiKSxmPWZ1bmN0aW9uKGEpe3JldHVybiBiLmNvbG9yKGEuaWQpfTtiLm1haW5CYXI9Yi5tYWluLnNlbGVjdEFsbCgiLiIrbC5iYXJzKS5zZWxlY3RBbGwoIi4iK2wuYmFyKS5kYXRhKGMpLGIubWFpbkJhci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixkKS5zdHlsZSgic3Ryb2tlIixmKS5zdHlsZSgiZmlsbCIsZiksYi5tYWluQmFyLnN0eWxlKCJvcGFjaXR5IixlKSxiLm1haW5CYXIuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9LGkucmVkcmF3QmFyPWZ1bmN0aW9uKGEsYil7cmV0dXJuWyhiP3RoaXMubWFpbkJhci50cmFuc2l0aW9uKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSk6dGhpcy5tYWluQmFyKS5hdHRyKCJkIixhKS5zdHlsZSgiZmlsbCIsdGhpcy5jb2xvcikuc3R5bGUoIm9wYWNpdHkiLDEpXX0saS5nZXRCYXJXPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPWMuY29uZmlnLGU9Im51bWJlciI9PXR5cGVvZiBkLmJhcl93aWR0aD9kLmJhcl93aWR0aDpiP2EudGlja0ludGVydmFsKCkqZC5iYXJfd2lkdGhfcmF0aW8vYjowO3JldHVybiBkLmJhcl93aWR0aF9tYXgmJmU+ZC5iYXJfd2lkdGhfbWF4P2QuYmFyX3dpZHRoX21heDplfSxpLmdldEJhcnM9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3JldHVybihiP2MubWFpbi5zZWxlY3RBbGwoIi4iK2wuYmFycytjLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGIpKTpjLm1haW4pLnNlbGVjdEFsbCgiLiIrbC5iYXIrKG0oYSk/Ii0iK2E6IiIpKX0saS5leHBhbmRCYXJzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzO2MmJmQudW5leHBhbmRCYXJzKCksZC5nZXRCYXJzKGEsYikuY2xhc3NlZChsLkVYUEFOREVELCEwKX0saS51bmV4cGFuZEJhcnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztiLmdldEJhcnMoYSkuY2xhc3NlZChsLkVYUEFOREVELCExKX0saS5nZW5lcmF0ZURyYXdCYXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5jb25maWcsZT1jLmdlbmVyYXRlR2V0QmFyUG9pbnRzKGEsYik7cmV0dXJuIGZ1bmN0aW9uKGEsYil7dmFyIGM9ZShhLGIpLGY9ZC5heGlzX3JvdGF0ZWQ/MTowLGc9ZC5heGlzX3JvdGF0ZWQ/MDoxLGg9Ik0gIitjWzBdW2ZdKyIsIitjWzBdW2ddKyIgTCIrY1sxXVtmXSsiLCIrY1sxXVtnXSsiIEwiK2NbMl1bZl0rIiwiK2NbMl1bZ10rIiBMIitjWzNdW2ZdKyIsIitjWzNdW2ddKyIgeiI7cmV0dXJuIGh9fSxpLmdlbmVyYXRlR2V0QmFyUG9pbnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPWI/Yy5zdWJYQXhpczpjLnhBeGlzLGU9YS5fX21heF9fKzEsZj1jLmdldEJhclcoZCxlKSxnPWMuZ2V0U2hhcGVYKGYsZSxhLCEhYiksaD1jLmdldFNoYXBlWSghIWIpLGk9Yy5nZXRTaGFwZU9mZnNldChjLmlzQmFyVHlwZSxhLCEhYiksaj1iP2MuZ2V0U3ViWVNjYWxlOmMuZ2V0WVNjYWxlO3JldHVybiBmdW5jdGlvbihhLGIpe3ZhciBkPWouY2FsbChjLGEuaWQpKDApLGU9aShhLGIpfHxkLGs9ZyhhKSxsPWgoYSk7cmV0dXJuIGMuY29uZmlnLmF4aXNfcm90YXRlZCYmKDA8YS52YWx1ZSYmZD5sfHxhLnZhbHVlPDAmJmw+ZCkmJihsPWQpLFtbayxlXSxbayxsLShkLWUpXSxbaytmLGwtKGQtZSldLFtrK2YsZV1dfX0saS5pc1dpdGhpbkJhcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmQzLm1vdXNlKGEpLGM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEucGF0aFNlZ0xpc3QuZ2V0SXRlbSgwKSxlPWEucGF0aFNlZ0xpc3QuZ2V0SXRlbSgxKSxmPU1hdGgubWluKGQueCxlLngpLGc9TWF0aC5taW4oZC55LGUueSksaD1jLndpZHRoLGk9Yy5oZWlnaHQsaj0yLGs9Zi1qLGw9ZitoK2osbT1nK2kraixuPWctajtyZXR1cm4gazxiWzBdJiZiWzBdPGwmJm48YlsxXSYmYlsxXTxtfSxpLmluaXRUZXh0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLm1haW4uc2VsZWN0KCIuIitsLmNoYXJ0KS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbC5jaGFydFRleHRzKSxhLm1haW5UZXh0PWEuZDMuc2VsZWN0QWxsKFtdKX0saS51cGRhdGVUYXJnZXRzRm9yVGV4dD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9dGhpcyxlPWQuY2xhc3NDaGFydFRleHQuYmluZChkKSxmPWQuY2xhc3NUZXh0cy5iaW5kKGQpLGc9ZC5jbGFzc0ZvY3VzLmJpbmQoZCk7Yj1kLm1haW4uc2VsZWN0KCIuIitsLmNoYXJ0VGV4dHMpLnNlbGVjdEFsbCgiLiIrbC5jaGFydFRleHQpLmRhdGEoYSkuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKGEpe3JldHVybiBlKGEpK2coYSl9KSxjPWIuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZSkuc3R5bGUoIm9wYWNpdHkiLDApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxjLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmKX0saS51cGRhdGVUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZyxkPWIuYmFyT3JMaW5lRGF0YS5iaW5kKGIpLGU9Yi5jbGFzc1RleHQuYmluZChiKTtiLm1haW5UZXh0PWIubWFpbi5zZWxlY3RBbGwoIi4iK2wudGV4dHMpLnNlbGVjdEFsbCgiLiIrbC50ZXh0KS5kYXRhKGQpLGIubWFpblRleHQuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsZSkuYXR0cigidGV4dC1hbmNob3IiLGZ1bmN0aW9uKGEpe3JldHVybiBjLmF4aXNfcm90YXRlZD9hLnZhbHVlPDA/ImVuZCI6InN0YXJ0IjoibWlkZGxlIn0pLnN0eWxlKCJzdHJva2UiLCJub25lIikuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGEpe3JldHVybiBiLmNvbG9yKGEpfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCksYi5tYWluVGV4dC50ZXh0KGZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYi5kYXRhTGFiZWxGb3JtYXQoYS5pZCkoYS52YWx1ZSxhLmlkLGMsZCl9KSxiLm1haW5UZXh0LmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCkucmVtb3ZlKCl9LGkucmVkcmF3VGV4dD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm5bKGQ/dGhpcy5tYWluVGV4dC50cmFuc2l0aW9uKCk6dGhpcy5tYWluVGV4dCkuYXR0cigieCIsYSkuYXR0cigieSIsYikuc3R5bGUoImZpbGwiLHRoaXMuY29sb3IpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGM/MDp0aGlzLm9wYWNpdHlGb3JUZXh0LmJpbmQodGhpcykpXX0saS5nZXRUZXh0UmVjdD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT10aGlzLmQzLnNlbGVjdCgiYm9keSIpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiYzMiLCEwKSxmPWUuYXBwZW5kKCJzdmciKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJwb3NpdGlvbiIsImZpeGVkIikuc3R5bGUoInRvcCIsMCkuc3R5bGUoImxlZnQiLDApLGc9dGhpcy5kMy5zZWxlY3QoYykuc3R5bGUoImZvbnQiKTtyZXR1cm4gZi5zZWxlY3RBbGwoIi5kdW1teSIpLmRhdGEoW2FdKS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoYj9iOiIiLCEwKS5zdHlsZSgiZm9udCIsZykudGV4dChhKS5lYWNoKGZ1bmN0aW9uKCl7ZD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksZS5yZW1vdmUoKSxkfSxpLmdlbmVyYXRlWFlGb3JUZXh0PWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMsZj1lLmdlbmVyYXRlR2V0QXJlYVBvaW50cyhhLCExKSxnPWUuZ2VuZXJhdGVHZXRCYXJQb2ludHMoYiwhMSksaD1lLmdlbmVyYXRlR2V0TGluZVBvaW50cyhjLCExKSxpPWQ/ZS5nZXRYRm9yVGV4dDplLmdldFlGb3JUZXh0O3JldHVybiBmdW5jdGlvbihhLGIpe3ZhciBjPWUuaXNBcmVhVHlwZShhKT9mOmUuaXNCYXJUeXBlKGEpP2c6aDtyZXR1cm4gaS5jYWxsKGUsYyhhLGIpLGEsdGhpcyl9fSxpLmdldFhGb3JUZXh0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9dGhpcyxnPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGYuY29uZmlnLmF4aXNfcm90YXRlZD8oZT1mLmlzQmFyVHlwZShiKT80OjYsZD1hWzJdWzFdK2UqKGIudmFsdWU8MD8tMToxKSk6ZD1mLmhhc1R5cGUoImJhciIpPyhhWzJdWzBdK2FbMF1bMF0pLzI6YVswXVswXSxudWxsPT09Yi52YWx1ZSYmKGQ+Zi53aWR0aD9kPWYud2lkdGgtZy53aWR0aDowPmQmJihkPTQpKSxkfSxpLmdldFlGb3JUZXh0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPXRoaXMsZj1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBlLmNvbmZpZy5heGlzX3JvdGF0ZWQ/ZD0oYVswXVswXSthWzJdWzBdKy42KmYuaGVpZ2h0KS8yOihkPWFbMl1bMV0sYi52YWx1ZTwwfHwwPT09Yi52YWx1ZSYmIWUuaGFzUG9zaXRpdmVWYWx1ZT8oZCs9Zi5oZWlnaHQsZS5pc0JhclR5cGUoYikmJmUuaXNTYWZhcmkoKT9kLT0zOiFlLmlzQmFyVHlwZShiKSYmZS5pc0Nocm9tZSgpJiYoZCs9MykpOmQrPWUuaXNCYXJUeXBlKGIpPy0zOi02KSxudWxsIT09Yi52YWx1ZXx8ZS5jb25maWcuYXhpc19yb3RhdGVkfHwoZDxmLmhlaWdodD9kPWYuaGVpZ2h0OmQ+dGhpcy5oZWlnaHQmJihkPXRoaXMuaGVpZ2h0LTQpKSxkfSxpLnNldFRhcmdldFR5cGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5jb25maWc7Yy5tYXBUb1RhcmdldElkcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Mud2l0aG91dEZhZGVJblthXT1iPT09ZC5kYXRhX3R5cGVzW2FdLGQuZGF0YV90eXBlc1thXT1ifSksYXx8KGQuZGF0YV90eXBlPWIpfSxpLmhhc1R5cGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9Yy5jb25maWcuZGF0YV90eXBlcyxlPSExO3JldHVybiBiPWJ8fGMuZGF0YS50YXJnZXRzLGImJmIubGVuZ3RoP2IuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgYz1kW2IuaWRdOyhjJiZjLmluZGV4T2YoYSk+PTB8fCFjJiYibGluZSI9PT1hKSYmKGU9ITApfSk6T2JqZWN0LmtleXMoZCkubGVuZ3RoP09iamVjdC5rZXlzKGQpLmZvckVhY2goZnVuY3Rpb24oYil7ZFtiXT09PWEmJihlPSEwKX0pOmU9Yy5jb25maWcuZGF0YV90eXBlPT09YSxlfSxpLmhhc0FyY1R5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaGFzVHlwZSgicGllIixhKXx8dGhpcy5oYXNUeXBlKCJkb251dCIsYSl8fHRoaXMuaGFzVHlwZSgiZ2F1Z2UiLGEpfSxpLmlzTGluZVR5cGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jb25maWcsYz1vKGEpP2E6YS5pZDtyZXR1cm4hYi5kYXRhX3R5cGVzW2NdfHxbImxpbmUiLCJzcGxpbmUiLCJhcmVhIiwiYXJlYS1zcGxpbmUiLCJzdGVwIiwiYXJlYS1zdGVwIl0uaW5kZXhPZihiLmRhdGFfdHlwZXNbY10pPj0wfSxpLmlzU3RlcFR5cGU9ZnVuY3Rpb24oYSl7dmFyIGI9byhhKT9hOmEuaWQ7cmV0dXJuWyJzdGVwIiwiYXJlYS1zdGVwIl0uaW5kZXhPZih0aGlzLmNvbmZpZy5kYXRhX3R5cGVzW2JdKT49MH0saS5pc1NwbGluZVR5cGU9ZnVuY3Rpb24oYSl7dmFyIGI9byhhKT9hOmEuaWQ7cmV0dXJuWyJzcGxpbmUiLCJhcmVhLXNwbGluZSJdLmluZGV4T2YodGhpcy5jb25maWcuZGF0YV90eXBlc1tiXSk+PTB9LGkuaXNBcmVhVHlwZT1mdW5jdGlvbihhKXt2YXIgYj1vKGEpP2E6YS5pZDtyZXR1cm5bImFyZWEiLCJhcmVhLXNwbGluZSIsImFyZWEtc3RlcCJdLmluZGV4T2YodGhpcy5jb25maWcuZGF0YV90eXBlc1tiXSk+PTB9LGkuaXNCYXJUeXBlPWZ1bmN0aW9uKGEpe3ZhciBiPW8oYSk/YTphLmlkO3JldHVybiJiYXIiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1tiXX0saS5pc1NjYXR0ZXJUeXBlPWZ1bmN0aW9uKGEpe3ZhciBiPW8oYSk/YTphLmlkO3JldHVybiJzY2F0dGVyIj09PXRoaXMuY29uZmlnLmRhdGFfdHlwZXNbYl19LGkuaXNQaWVUeXBlPWZ1bmN0aW9uKGEpe3ZhciBiPW8oYSk/YTphLmlkO3JldHVybiJwaWUiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1tiXX0saS5pc0dhdWdlVHlwZT1mdW5jdGlvbihhKXt2YXIgYj1vKGEpP2E6YS5pZDtyZXR1cm4iZ2F1Z2UiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1tiXX0saS5pc0RvbnV0VHlwZT1mdW5jdGlvbihhKXt2YXIgYj1vKGEpP2E6YS5pZDtyZXR1cm4iZG9udXQiPT09dGhpcy5jb25maWcuZGF0YV90eXBlc1tiXX0saS5pc0FyY1R5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNQaWVUeXBlKGEpfHx0aGlzLmlzRG9udXRUeXBlKGEpfHx0aGlzLmlzR2F1Z2VUeXBlKGEpfSxpLmxpbmVEYXRhPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlzTGluZVR5cGUoYSk/W2FdOltdfSxpLmFyY0RhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNBcmNUeXBlKGEuZGF0YSk/W2FdOltdfSxpLmJhckRhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNCYXJUeXBlKGEpP2EudmFsdWVzOltdfSxpLmxpbmVPclNjYXR0ZXJEYXRhPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlzTGluZVR5cGUoYSl8fHRoaXMuaXNTY2F0dGVyVHlwZShhKT9hLnZhbHVlczpbXX0saS5iYXJPckxpbmVEYXRhPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlzQmFyVHlwZShhKXx8dGhpcy5pc0xpbmVUeXBlKGEpP2EudmFsdWVzOltdfSxpLmlzSW50ZXJwb2xhdGlvblR5cGU9ZnVuY3Rpb24oYSl7cmV0dXJuWyJsaW5lYXIiLCJsaW5lYXItY2xvc2VkIiwiYmFzaXMiLCJiYXNpcy1vcGVuIiwiYmFzaXMtY2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbC1vcGVuIiwiY2FyZGluYWwtY2xvc2VkIiwibW9ub3RvbmUiXS5pbmRleE9mKGEpPj0wfSxpLmluaXRHcmlkPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY29uZmlnLGM9YS5kMzthLmdyaWQ9YS5tYWluLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsYS5jbGlwUGF0aEZvckdyaWQpLmF0dHIoImNsYXNzIixsLmdyaWQpLGIuZ3JpZF94X3Nob3cmJmEuZ3JpZC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbC54Z3JpZHMpLGIuZ3JpZF95X3Nob3cmJmEuZ3JpZC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbC55Z3JpZHMpLGIuZ3JpZF9mb2N1c19zaG93JiZhLmdyaWQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGwueGdyaWRGb2N1cykuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLGwueGdyaWRGb2N1cyksYS54Z3JpZD1jLnNlbGVjdEFsbChbXSksYi5ncmlkX2xpbmVzX2Zyb250fHxhLmluaXRHcmlkTGluZXMoKX0saS5pbml0R3JpZExpbmVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuZDM7YS5ncmlkTGluZXM9YS5tYWluLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsYS5jbGlwUGF0aEZvckdyaWQpLmF0dHIoImNsYXNzIixsLmdyaWQrIiAiK2wuZ3JpZExpbmVzKSxhLmdyaWRMaW5lcy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbC54Z3JpZExpbmVzKSxhLmdyaWRMaW5lcy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbC55Z3JpZExpbmVzKSxhLnhncmlkTGluZXM9Yi5zZWxlY3RBbGwoW10pfSxpLnVwZGF0ZVhHcmlkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZyxkPWIuZDMsZT1iLmdlbmVyYXRlR3JpZERhdGEoYy5ncmlkX3hfdHlwZSxiLngpLGY9Yi5pc0NhdGVnb3JpemVkKCk/Yi54QXhpcy50aWNrT2Zmc2V0KCk6MDtiLnhncmlkQXR0cj1jLmF4aXNfcm90YXRlZD97eDE6MCx4MjpiLndpZHRoLHkxOmZ1bmN0aW9uKGEpe3JldHVybiBiLngoYSktZn0seTI6ZnVuY3Rpb24oYSl7cmV0dXJuIGIueChhKS1mfX06e3gxOmZ1bmN0aW9uKGEpe3JldHVybiBiLngoYSkrZn0seDI6ZnVuY3Rpb24oYSl7cmV0dXJuIGIueChhKStmfSx5MTowLHkyOmIuaGVpZ2h0fSxiLnhncmlkPWIubWFpbi5zZWxlY3QoIi4iK2wueGdyaWRzKS5zZWxlY3RBbGwoIi4iK2wueGdyaWQpLmRhdGEoZSksYi54Z3JpZC5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIixsLnhncmlkKSxhfHxiLnhncmlkLmF0dHIoYi54Z3JpZEF0dHIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybitkLnNlbGVjdCh0aGlzKS5hdHRyKGMuYXhpc19yb3RhdGVkPyJ5MSI6IngxIik9PT0oYy5heGlzX3JvdGF0ZWQ/Yi5oZWlnaHQ6MCk/MDoxfSksYi54Z3JpZC5leGl0KCkucmVtb3ZlKCl9LGkudXBkYXRlWUdyaWQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5jb25maWcsYz1hLnlBeGlzLnRpY2tWYWx1ZXMoKXx8YS55LnRpY2tzKGIuZ3JpZF95X3RpY2tzKTthLnlncmlkPWEubWFpbi5zZWxlY3QoIi4iK2wueWdyaWRzKS5zZWxlY3RBbGwoIi4iK2wueWdyaWQpLmRhdGEoYyksYS55Z3JpZC5lbnRlcigpLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIixsLnlncmlkKSxhLnlncmlkLmF0dHIoIngxIixiLmF4aXNfcm90YXRlZD9hLnk6MCkuYXR0cigieDIiLGIuYXhpc19yb3RhdGVkP2EueTphLndpZHRoKS5hdHRyKCJ5MSIsYi5heGlzX3JvdGF0ZWQ/MDphLnkpLmF0dHIoInkyIixiLmF4aXNfcm90YXRlZD9hLmhlaWdodDphLnkpLGEueWdyaWQuZXhpdCgpLnJlbW92ZSgpLGEuc21vb3RoTGluZXMoYS55Z3JpZCwiZ3JpZCIpfSxpLmdyaWRUZXh0QW5jaG9yPWZ1bmN0aW9uKGEpe3JldHVybiBhLnBvc2l0aW9uP2EucG9zaXRpb246ImVuZCJ9LGkuZ3JpZFRleHREeD1mdW5jdGlvbihhKXtyZXR1cm4ic3RhcnQiPT09YS5wb3NpdGlvbj80OiJtaWRkbGUiPT09YS5wb3NpdGlvbj8wOi00fSxpLnhHcmlkVGV4dFg9ZnVuY3Rpb24oYSl7cmV0dXJuInN0YXJ0Ij09PWEucG9zaXRpb24/LXRoaXMuaGVpZ2h0OiJtaWRkbGUiPT09YS5wb3NpdGlvbj8tdGhpcy5oZWlnaHQvMjowfSxpLnlHcmlkVGV4dFg9ZnVuY3Rpb24oYSl7cmV0dXJuInN0YXJ0Ij09PWEucG9zaXRpb24/MDoibWlkZGxlIj09PWEucG9zaXRpb24/dGhpcy53aWR0aC8yOnRoaXMud2lkdGh9LGkudXBkYXRlR3JpZD1mdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzLGY9ZS5tYWluLGc9ZS5jb25maWc7ZS5ncmlkLnN0eWxlKCJ2aXNpYmlsaXR5IixlLmhhc0FyY1R5cGUoKT8iaGlkZGVuIjoidmlzaWJsZSIpLGYuc2VsZWN0KCJsaW5lLiIrbC54Z3JpZEZvY3VzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLGcuZ3JpZF94X3Nob3cmJmUudXBkYXRlWEdyaWQoKSxlLnhncmlkTGluZXM9Zi5zZWxlY3QoIi4iK2wueGdyaWRMaW5lcykuc2VsZWN0QWxsKCIuIitsLnhncmlkTGluZSkuZGF0YShnLmdyaWRfeF9saW5lcyksYj1lLnhncmlkTGluZXMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYSl7cmV0dXJuIGwueGdyaWRMaW5lKyhhWyJjbGFzcyJdPyIgIithWyJjbGFzcyJdOiIiKX0pLGIuYXBwZW5kKCJsaW5lIikuc3R5bGUoIm9wYWNpdHkiLDApLGIuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLGUuZ3JpZFRleHRBbmNob3IpLmF0dHIoInRyYW5zZm9ybSIsZy5heGlzX3JvdGF0ZWQ/IiI6InJvdGF0ZSgtOTApIikuYXR0cigiZHgiLGUuZ3JpZFRleHREeCkuYXR0cigiZHkiLC01KS5zdHlsZSgib3BhY2l0eSIsMCksZS54Z3JpZExpbmVzLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLGcuZ3JpZF95X3Nob3cmJmUudXBkYXRlWUdyaWQoKSxlLnlncmlkTGluZXM9Zi5zZWxlY3QoIi4iK2wueWdyaWRMaW5lcykuc2VsZWN0QWxsKCIuIitsLnlncmlkTGluZSkuZGF0YShnLmdyaWRfeV9saW5lcyksYz1lLnlncmlkTGluZXMuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYSl7cmV0dXJuIGwueWdyaWRMaW5lKyhhWyJjbGFzcyJdPyIgIithWyJjbGFzcyJdOiIiKX0pLGMuYXBwZW5kKCJsaW5lIikuc3R5bGUoIm9wYWNpdHkiLDApLGMuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLGUuZ3JpZFRleHRBbmNob3IpLmF0dHIoInRyYW5zZm9ybSIsZy5heGlzX3JvdGF0ZWQ/InJvdGF0ZSgtOTApIjoiIikuYXR0cigiZHgiLGUuZ3JpZFRleHREeCkuYXR0cigiZHkiLC01KS5zdHlsZSgib3BhY2l0eSIsMCksZD1lLnl2LmJpbmQoZSksZS55Z3JpZExpbmVzLnNlbGVjdCgibGluZSIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKS5hdHRyKCJ4MSIsZy5heGlzX3JvdGF0ZWQ/ZDowKS5hdHRyKCJ4MiIsZy5heGlzX3JvdGF0ZWQ/ZDplLndpZHRoKS5hdHRyKCJ5MSIsZy5heGlzX3JvdGF0ZWQ/MDpkKS5hdHRyKCJ5MiIsZy5heGlzX3JvdGF0ZWQ/ZS5oZWlnaHQ6ZCkuc3R5bGUoIm9wYWNpdHkiLDEpLGUueWdyaWRMaW5lcy5zZWxlY3QoInRleHQiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYSkuYXR0cigieCIsZy5heGlzX3JvdGF0ZWQ/ZS54R3JpZFRleHRYLmJpbmQoZSk6ZS55R3JpZFRleHRYLmJpbmQoZSkpLmF0dHIoInkiLGQpLnRleHQoZnVuY3Rpb24oYSl7cmV0dXJuIGEudGV4dH0pLnN0eWxlKCJvcGFjaXR5IiwxKSxlLnlncmlkTGluZXMuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9LGkucmVkcmF3R3JpZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5jb25maWcsZD1iLnh2LmJpbmQoYiksZT1iLnhncmlkTGluZXMuc2VsZWN0KCJsaW5lIiksZj1iLnhncmlkTGluZXMuc2VsZWN0KCJ0ZXh0Iik7cmV0dXJuWyhhP2UudHJhbnNpdGlvbigpOmUpLmF0dHIoIngxIixjLmF4aXNfcm90YXRlZD8wOmQpLmF0dHIoIngyIixjLmF4aXNfcm90YXRlZD9iLndpZHRoOmQpLmF0dHIoInkxIixjLmF4aXNfcm90YXRlZD9kOjApLmF0dHIoInkyIixjLmF4aXNfcm90YXRlZD9kOmIuaGVpZ2h0KS5zdHlsZSgib3BhY2l0eSIsMSksKGE/Zi50cmFuc2l0aW9uKCk6ZikuYXR0cigieCIsYy5heGlzX3JvdGF0ZWQ/Yi55R3JpZFRleHRYLmJpbmQoYik6Yi54R3JpZFRleHRYLmJpbmQoYikpLmF0dHIoInkiLGQpLnRleHQoZnVuY3Rpb24oYSl7cmV0dXJuIGEudGV4dH0pLnN0eWxlKCJvcGFjaXR5IiwxKV19LGkuc2hvd1hHcmlkRm9jdXM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuY29uZmlnLGQ9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEmJm0oYS52YWx1ZSl9KSxlPWIubWFpbi5zZWxlY3RBbGwoImxpbmUuIitsLnhncmlkRm9jdXMpLGY9Yi54eC5iaW5kKGIpO2MudG9vbHRpcF9zaG93JiYoYi5oYXNUeXBlKCJzY2F0dGVyIil8fGIuaGFzQXJjVHlwZSgpfHwoZS5zdHlsZSgidmlzaWJpbGl0eSIsInZpc2libGUiKS5kYXRhKFtkWzBdXSkuYXR0cihjLmF4aXNfcm90YXRlZD8ieTEiOiJ4MSIsZikuYXR0cihjLmF4aXNfcm90YXRlZD8ieTIiOiJ4MiIsZiksYi5zbW9vdGhMaW5lcyhlLCJncmlkIikpKX0saS5oaWRlWEdyaWRGb2N1cz1mdW5jdGlvbigpe3RoaXMubWFpbi5zZWxlY3QoImxpbmUuIitsLnhncmlkRm9jdXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9LGkudXBkYXRlWGdyaWRGb2N1cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZzthLm1haW4uc2VsZWN0KCJsaW5lLiIrbC54Z3JpZEZvY3VzKS5hdHRyKCJ4MSIsYi5heGlzX3JvdGF0ZWQ/MDotMTApLmF0dHIoIngyIixiLmF4aXNfcm90YXRlZD9hLndpZHRoOi0xMCkuYXR0cigieTEiLGIuYXhpc19yb3RhdGVkPy0xMDowKS5hdHRyKCJ5MiIsYi5heGlzX3JvdGF0ZWQ/LTEwOmEuaGVpZ2h0KX0saS5nZW5lcmF0ZUdyaWREYXRhPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz10aGlzLGg9W10saT1nLm1haW4uc2VsZWN0KCIuIitsLmF4aXNYKS5zZWxlY3RBbGwoIi50aWNrIikuc2l6ZSgpO2lmKCJ5ZWFyIj09PWEpZm9yKGM9Zy5nZXRYRG9tYWluKCksZD1jWzBdLmdldEZ1bGxZZWFyKCksZT1jWzFdLmdldEZ1bGxZZWFyKCksZj1kO2U+PWY7ZisrKWgucHVzaChuZXcgRGF0ZShmKyItMDEtMDEgMDA6MDA6MDAiKSk7ZWxzZSBoPWIudGlja3MoMTApLGgubGVuZ3RoPmkmJihoPWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybigiIithKS5pbmRleE9mKCIuIik8MH0pKTtyZXR1cm4gaH0saS5nZXRHcmlkRmlsdGVyVG9SZW1vdmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE/ZnVuY3Rpb24oYil7dmFyIGM9ITE7cmV0dXJuW10uY29uY2F0KGEpLmZvckVhY2goZnVuY3Rpb24oYSl7KCJ2YWx1ZSJpbiBhJiZiLnZhbHVlPT09YS52YWx1ZXx8ImNsYXNzImluIGEmJmJbImNsYXNzIl09PT1hWyJjbGFzcyJdKSYmKGM9ITApfSksY306ZnVuY3Rpb24oKXtyZXR1cm4hMH19LGkucmVtb3ZlR3JpZExpbmVzPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPWMuY29uZmlnLGU9Yy5nZXRHcmlkRmlsdGVyVG9SZW1vdmUoYSksZj1mdW5jdGlvbihhKXtyZXR1cm4hZShhKX0sZz1iP2wueGdyaWRMaW5lczpsLnlncmlkTGluZXMsaD1iP2wueGdyaWRMaW5lOmwueWdyaWRMaW5lO2MubWFpbi5zZWxlY3QoIi4iK2cpLnNlbGVjdEFsbCgiLiIraCkuZmlsdGVyKGUpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkLnRyYW5zaXRpb25fZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxiP2QuZ3JpZF94X2xpbmVzPWQuZ3JpZF94X2xpbmVzLmZpbHRlcihmKTpkLmdyaWRfeV9saW5lcz1kLmdyaWRfeV9saW5lcy5maWx0ZXIoZil9LGkuaW5pdFRvb2x0aXA9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMsYz1iLmNvbmZpZztpZihiLnRvb2x0aXA9Yi5zZWxlY3RDaGFydC5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLGwudG9vbHRpcENvbnRhaW5lcikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuc3R5bGUoImRpc3BsYXkiLCJub25lIiksYy50b29sdGlwX2luaXRfc2hvdyl7aWYoYi5pc1RpbWVTZXJpZXMoKSYmbyhjLnRvb2x0aXBfaW5pdF94KSl7Zm9yKGMudG9vbHRpcF9pbml0X3g9Yi5wYXJzZURhdGUoYy50b29sdGlwX2luaXRfeCksYT0wO2E8Yi5kYXRhLnRhcmdldHNbMF0udmFsdWVzLmxlbmd0aCYmYi5kYXRhLnRhcmdldHNbMF0udmFsdWVzW2FdLngtYy50b29sdGlwX2luaXRfeCE9PTA7YSsrKTtjLnRvb2x0aXBfaW5pdF94PWF9Yi50b29sdGlwLmh0bWwoYy50b29sdGlwX2NvbnRlbnRzLmNhbGwoYixiLmRhdGEudGFyZ2V0cy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGIuYWRkTmFtZShhLnZhbHVlc1tjLnRvb2x0aXBfaW5pdF94XSl9KSxiLmF4aXMuZ2V0WEF4aXNUaWNrRm9ybWF0KCksYi5nZXRZRm9ybWF0KGIuaGFzQXJjVHlwZSgpKSxiLmNvbG9yKSksYi50b29sdGlwLnN0eWxlKCJ0b3AiLGMudG9vbHRpcF9pbml0X3Bvc2l0aW9uLnRvcCkuc3R5bGUoImxlZnQiLGMudG9vbHRpcF9pbml0X3Bvc2l0aW9uLmxlZnQpLnN0eWxlKCJkaXNwbGF5IiwiYmxvY2siKX19LGkuZ2V0VG9vbHRpcENvbnRlbnQ9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqLGs9dGhpcyxsPWsuY29uZmlnLG09bC50b29sdGlwX2Zvcm1hdF90aXRsZXx8YixuPWwudG9vbHRpcF9mb3JtYXRfbmFtZXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LG89bC50b29sdGlwX2Zvcm1hdF92YWx1ZXx8YyxwPWsuaXNPcmRlckFzYygpO2lmKDA9PT1sLmRhdGFfZ3JvdXBzLmxlbmd0aClhLnNvcnQoZnVuY3Rpb24oYSxiKXt2YXIgYz1hP2EudmFsdWU6bnVsbCxkPWI/Yi52YWx1ZTpudWxsO3JldHVybiBwP2MtZDpkLWN9KTtlbHNle3ZhciBxPWsub3JkZXJUYXJnZXRzKGsuZGF0YS50YXJnZXRzKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaWR9KTthLnNvcnQoZnVuY3Rpb24oYSxiKXt2YXIgYz1hP2EudmFsdWU6bnVsbCxkPWI/Yi52YWx1ZTpudWxsO3JldHVybiBjPjAmJmQ+MCYmKGM9YT9xLmluZGV4T2YoYS5pZCk6bnVsbCxkPWI/cS5pbmRleE9mKGIuaWQpOm51bGwpLHA/Yy1kOmQtY30pfWZvcihmPTA7ZjxhLmxlbmd0aDtmKyspaWYoYVtmXSYmKGFbZl0udmFsdWV8fDA9PT1hW2ZdLnZhbHVlKSYmKGV8fChnPXkobT9tKGFbZl0ueCk6YVtmXS54KSxlPSI8dGFibGUgY2xhc3M9JyIray5DTEFTUy50b29sdGlwKyInPiIrKGd8fDA9PT1nPyI8dHI+PHRoIGNvbHNwYW49JzInPiIrZysiPC90aD48L3RyPiI6IiIpKSxoPXkobyhhW2ZdLnZhbHVlLGFbZl0ucmF0aW8sYVtmXS5pZCxhW2ZdLmluZGV4LGEpKSx2b2lkIDAhPT1oKSl7aWYobnVsbD09PWFbZl0ubmFtZSljb250aW51ZTtpPXkobihhW2ZdLm5hbWUsYVtmXS5yYXRpbyxhW2ZdLmlkLGFbZl0uaW5kZXgpKSxqPWsubGV2ZWxDb2xvcj9rLmxldmVsQ29sb3IoYVtmXS52YWx1ZSk6ZChhW2ZdLmlkKSxlKz0iPHRyIGNsYXNzPSciK2suQ0xBU1MudG9vbHRpcE5hbWUrIi0iK2suZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoYVtmXS5pZCkrIic+IixlKz0iPHRkIGNsYXNzPSduYW1lJz48c3BhbiBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjoiK2orIic+PC9zcGFuPiIraSsiPC90ZD4iLGUrPSI8dGQgY2xhc3M9J3ZhbHVlJz4iK2grIjwvdGQ+IixlKz0iPC90cj4ifXJldHVybiBlKyI8L3RhYmxlPiJ9LGkudG9vbHRpcFBvc2l0aW9uPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaj10aGlzLGs9ai5jb25maWcsbD1qLmQzLG09ai5oYXNBcmNUeXBlKCksbj1sLm1vdXNlKGQpO3JldHVybiBtPyhmPShqLndpZHRoLShqLmlzTGVnZW5kUmlnaHQ/ai5nZXRMZWdlbmRXaWR0aCgpOjApKS8yK25bMF0saD1qLmhlaWdodC8yK25bMV0rMjApOihlPWouZ2V0U3ZnTGVmdCghMCksay5heGlzX3JvdGF0ZWQ/KGY9ZStuWzBdKzEwMCxnPWYrYixpPWouY3VycmVudFdpZHRoLWouZ2V0Q3VycmVudFBhZGRpbmdSaWdodCgpLGg9ai54KGFbMF0ueCkrMjApOihmPWUrai5nZXRDdXJyZW50UGFkZGluZ0xlZnQoITApK2oueChhWzBdLngpKzIwLGc9ZitiLGk9ZStqLmN1cnJlbnRXaWR0aC1qLmdldEN1cnJlbnRQYWRkaW5nUmlnaHQoKSxoPW5bMV0rMTUpLGc+aSYmKGYtPWctaSsyMCksaCtjPmouY3VycmVudEhlaWdodCYmKGgtPWMrMzApKSwwPmgmJihoPTApLHt0b3A6aCxsZWZ0OmZ9fSxpLnNob3dUb29sdGlwPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpcyxnPWYuY29uZmlnLGg9Zi5oYXNBcmNUeXBlKCksaj1hLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYSYmbShhLnZhbHVlKX0pLGs9Zy50b29sdGlwX3Bvc2l0aW9ufHxpLnRvb2x0aXBQb3NpdGlvbjswIT09ai5sZW5ndGgmJmcudG9vbHRpcF9zaG93JiYoZi50b29sdGlwLmh0bWwoZy50b29sdGlwX2NvbnRlbnRzLmNhbGwoZixhLGYuYXhpcy5nZXRYQXhpc1RpY2tGb3JtYXQoKSxmLmdldFlGb3JtYXQoaCksZi5jb2xvcikpLnN0eWxlKCJkaXNwbGF5IiwiYmxvY2siKSxjPWYudG9vbHRpcC5wcm9wZXJ0eSgib2Zmc2V0V2lkdGgiKSxkPWYudG9vbHRpcC5wcm9wZXJ0eSgib2Zmc2V0SGVpZ2h0IiksZT1rLmNhbGwodGhpcyxqLGMsZCxiKSxmLnRvb2x0aXAuc3R5bGUoInRvcCIsZS50b3ArInB4Iikuc3R5bGUoImxlZnQiLGUubGVmdCsicHgiKSl9LGkuaGlkZVRvb2x0aXA9ZnVuY3Rpb24oKXt0aGlzLnRvb2x0aXAuc3R5bGUoImRpc3BsYXkiLCJub25lIil9LGkuaW5pdExlZ2VuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGEubGVnZW5kSXRlbVRleHRCb3g9e30sYS5sZWdlbmRIYXNSZW5kZXJlZD0hMSxhLmxlZ2VuZD1hLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VHJhbnNsYXRlKCJsZWdlbmQiKSksYS5jb25maWcubGVnZW5kX3Nob3c/dm9pZCBhLnVwZGF0ZUxlZ2VuZFdpdGhEZWZhdWx0cygpOihhLmxlZ2VuZC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLHZvaWQoYS5oaWRkZW5MZWdlbmRJZHM9YS5tYXBUb0lkcyhhLmRhdGEudGFyZ2V0cykpKX0saS51cGRhdGVMZWdlbmRXaXRoRGVmYXVsdHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EudXBkYXRlTGVnZW5kKGEubWFwVG9JZHMoYS5kYXRhLnRhcmdldHMpLHt3aXRoVHJhbnNmb3JtOiExLHdpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtOiExLHdpdGhUcmFuc2l0aW9uOiExfSl9LGkudXBkYXRlU2l6ZUZvckxlZ2VuZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZD1jLmNvbmZpZyxlPXt0b3A6Yy5pc0xlZ2VuZFRvcD9jLmdldEN1cnJlbnRQYWRkaW5nVG9wKCkrZC5sZWdlbmRfaW5zZXRfeSs1LjU6Yy5jdXJyZW50SGVpZ2h0LWEtYy5nZXRDdXJyZW50UGFkZGluZ0JvdHRvbSgpLWQubGVnZW5kX2luc2V0X3ksbGVmdDpjLmlzTGVnZW5kTGVmdD9jLmdldEN1cnJlbnRQYWRkaW5nTGVmdCgpK2QubGVnZW5kX2luc2V0X3grLjU6Yy5jdXJyZW50V2lkdGgtYi1jLmdldEN1cnJlbnRQYWRkaW5nUmlnaHQoKS1kLmxlZ2VuZF9pbnNldF94Ky41fTtjLm1hcmdpbjM9e3RvcDpjLmlzTGVnZW5kUmlnaHQ/MDpjLmlzTGVnZW5kSW5zZXQ/ZS50b3A6Yy5jdXJyZW50SGVpZ2h0LWEscmlnaHQ6TmFOLGJvdHRvbTowLGxlZnQ6Yy5pc0xlZ2VuZFJpZ2h0P2MuY3VycmVudFdpZHRoLWI6Yy5pc0xlZ2VuZEluc2V0P2UubGVmdDowfX0saS50cmFuc2Zvcm1MZWdlbmQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczsoYT9iLmxlZ2VuZC50cmFuc2l0aW9uKCk6Yi5sZWdlbmQpLmF0dHIoInRyYW5zZm9ybSIsYi5nZXRUcmFuc2xhdGUoImxlZ2VuZCIpKX0saS51cGRhdGVMZWdlbmRTdGVwPWZ1bmN0aW9uKGEpe3RoaXMubGVnZW5kU3RlcD1hfSxpLnVwZGF0ZUxlZ2VuZEl0ZW1XaWR0aD1mdW5jdGlvbihhKXt0aGlzLmxlZ2VuZEl0ZW1XaWR0aD1hfSxpLnVwZGF0ZUxlZ2VuZEl0ZW1IZWlnaHQ9ZnVuY3Rpb24oYSl7dGhpcy5sZWdlbmRJdGVtSGVpZ2h0PWF9LGkuZ2V0TGVnZW5kV2lkdGg9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLmNvbmZpZy5sZWdlbmRfc2hvdz9hLmlzTGVnZW5kUmlnaHR8fGEuaXNMZWdlbmRJbnNldD9hLmxlZ2VuZEl0ZW1XaWR0aCooYS5sZWdlbmRTdGVwKzEpOmEuY3VycmVudFdpZHRoOjB9LGkuZ2V0TGVnZW5kSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPTA7cmV0dXJuIGEuY29uZmlnLmxlZ2VuZF9zaG93JiYoYj1hLmlzTGVnZW5kUmlnaHQ/YS5jdXJyZW50SGVpZ2h0Ok1hdGgubWF4KDIwLGEubGVnZW5kSXRlbUhlaWdodCkqKGEubGVnZW5kU3RlcCsxKSksYn0saS5vcGFjaXR5Rm9yTGVnZW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhLmNsYXNzZWQobC5sZWdlbmRJdGVtSGlkZGVuKT9udWxsOjF9LGkub3BhY2l0eUZvclVuZm9jdXNlZExlZ2VuZD1mdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc2VkKGwubGVnZW5kSXRlbUhpZGRlbik/bnVsbDouM30saS50b2dnbGVGb2N1c0xlZ2VuZD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7YT1jLm1hcFRvVGFyZ2V0SWRzKGEpLGMubGVnZW5kLnNlbGVjdEFsbCgiLiIrbC5sZWdlbmRJdGVtKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGEuaW5kZXhPZihiKT49MH0pLmNsYXNzZWQobC5sZWdlbmRJdGVtRm9jdXNlZCxiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oKXt2YXIgYT1iP2Mub3BhY2l0eUZvckxlZ2VuZDpjLm9wYWNpdHlGb3JVbmZvY3VzZWRMZWdlbmQ7cmV0dXJuIGEuY2FsbChjLGMuZDMuc2VsZWN0KHRoaXMpKX0pfSxpLnJldmVydExlZ2VuZD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmQzO2EubGVnZW5kLnNlbGVjdEFsbCgiLiIrbC5sZWdlbmRJdGVtKS5jbGFzc2VkKGwubGVnZW5kSXRlbUZvY3VzZWQsITEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbigpe3JldHVybiBhLm9wYWNpdHlGb3JMZWdlbmQoYi5zZWxlY3QodGhpcykpfSl9LGkuc2hvd0xlZ2VuZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5jb25maWc7Yy5sZWdlbmRfc2hvd3x8KGMubGVnZW5kX3Nob3c9ITAsYi5sZWdlbmQuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIiksYi5sZWdlbmRIYXNSZW5kZXJlZHx8Yi51cGRhdGVMZWdlbmRXaXRoRGVmYXVsdHMoKSksYi5yZW1vdmVIaWRkZW5MZWdlbmRJZHMoYSksYi5sZWdlbmQuc2VsZWN0QWxsKGIuc2VsZWN0b3JMZWdlbmRzKGEpKS5zdHlsZSgidmlzaWJpbGl0eSIsInZpc2libGUiKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGIub3BhY2l0eUZvckxlZ2VuZChiLmQzLnNlbGVjdCh0aGlzKSl9KX0saS5oaWRlTGVnZW5kPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZztjLmxlZ2VuZF9zaG93JiZ1KGEpJiYoYy5sZWdlbmRfc2hvdz0hMSxiLmxlZ2VuZC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpKSxiLmFkZEhpZGRlbkxlZ2VuZElkcyhhKSxiLmxlZ2VuZC5zZWxlY3RBbGwoYi5zZWxlY3RvckxlZ2VuZHMoYSkpLnN0eWxlKCJvcGFjaXR5IiwwKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSxpLmNsZWFyTGVnZW5kSXRlbVRleHRCb3hDYWNoZT1mdW5jdGlvbigpe3RoaXMubGVnZW5kSXRlbVRleHRCb3g9e319LGkudXBkYXRlTGVnZW5kPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIHkubGVnZW5kSXRlbVRleHRCb3hbYl18fCh5LmxlZ2VuZEl0ZW1UZXh0Qm94W2JdPXkuZ2V0VGV4dFJlY3QoYS50ZXh0Q29udGVudCxsLmxlZ2VuZEl0ZW0sYSkpLHkubGVnZW5kSXRlbVRleHRCb3hbYl19ZnVuY3Rpb24gZShiLGMsZSl7ZnVuY3Rpb24gZihhLGIpe2J8fChnPShvLUctbikvMixFPmcmJihnPShvLW4pLzIsRz0wLE0rKykpLExbYV09TSxLW01dPXkuaXNMZWdlbmRJbnNldD8xMDpnLEhbYV09RyxHKz1ufXZhciBnLGgsaT0wPT09ZSxqPWU9PT1hLmxlbmd0aC0xLGs9ZChiLGMpLGw9ay53aWR0aCtGKyghanx8eS5pc0xlZ2VuZFJpZ2h0fHx5LmlzTGVnZW5kSW5zZXQ/QjowKSt6LmxlZ2VuZF9wYWRkaW5nLG09ay5oZWlnaHQrQSxuPXkuaXNMZWdlbmRSaWdodHx8eS5pc0xlZ2VuZEluc2V0P206bCxvPXkuaXNMZWdlbmRSaWdodHx8eS5pc0xlZ2VuZEluc2V0P3kuZ2V0TGVnZW5kSGVpZ2h0KCk6eS5nZXRMZWdlbmRXaWR0aCgpO3JldHVybiBpJiYoRz0wLE09MCxDPTAsRD0wKSx6LmxlZ2VuZF9zaG93JiYheS5pc0xlZ2VuZFRvU2hvdyhjKT92b2lkKElbY109SltjXT1MW2NdPUhbY109MCk6KElbY109bCxKW2NdPW0sKCFDfHxsPj1DKSYmKEM9bCksKCFEfHxtPj1EKSYmKEQ9bSksaD15LmlzTGVnZW5kUmlnaHR8fHkuaXNMZWdlbmRJbnNldD9EOkMsdm9pZCh6LmxlZ2VuZF9lcXVhbGx5PyhPYmplY3Qua2V5cyhJKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe0lbYV09Q30pLE9iamVjdC5rZXlzKEopLmZvckVhY2goZnVuY3Rpb24oYSl7SlthXT1EfSksZz0oby1oKmEubGVuZ3RoKS8yLEU+Zz8oRz0wLE09MCxhLmZvckVhY2goZnVuY3Rpb24oYSl7ZihhKX0pKTpmKGMsITApKTpmKGMpKSl9dmFyIGYsZyxoLGksaixrLG0sbixvLHAscixzLHQsdSx2LHgseT10aGlzLHo9eS5jb25maWcsQT00LEI9MTAsQz0wLEQ9MCxFPTEwLEY9ei5sZWdlbmRfaXRlbV90aWxlX3dpZHRoKzUsRz0wLEg9e30sST17fSxKPXt9LEs9WzBdLEw9e30sTT0wO2E9YS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIXEoei5kYXRhX25hbWVzW2FdKXx8bnVsbCE9PXouZGF0YV9uYW1lc1thXX0pLGI9Ynx8e30scj13KGIsIndpdGhUcmFuc2l0aW9uIiwhMCkscz13KGIsIndpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtIiwhMCkseS5pc0xlZ2VuZEluc2V0JiYoTT16LmxlZ2VuZF9pbnNldF9zdGVwP3oubGVnZW5kX2luc2V0X3N0ZXA6YS5sZW5ndGgseS51cGRhdGVMZWdlbmRTdGVwKE0pKSx5LmlzTGVnZW5kUmlnaHQ/KGY9ZnVuY3Rpb24oYSl7cmV0dXJuIEMqTFthXX0saT1mdW5jdGlvbihhKXtyZXR1cm4gS1tMW2FdXStIW2FdfSk6eS5pc0xlZ2VuZEluc2V0PyhmPWZ1bmN0aW9uKGEpe3JldHVybiBDKkxbYV0rMTB9LGk9ZnVuY3Rpb24oYSl7cmV0dXJuIEtbTFthXV0rSFthXX0pOihmPWZ1bmN0aW9uKGEpe3JldHVybiBLW0xbYV1dK0hbYV19LGk9ZnVuY3Rpb24oYSl7cmV0dXJuIEQqTFthXX0pLGc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZihhLGIpKzQrei5sZWdlbmRfaXRlbV90aWxlX3dpZHRofSxqPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGkoYSxiKSs5fSxoPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGYoYSxiKX0saz1mdW5jdGlvbihhLGIpe3JldHVybiBpKGEsYiktNX0sbT1mdW5jdGlvbihhLGIpe3JldHVybiBmKGEsYiktMn0sbj1mdW5jdGlvbihhLGIpe3JldHVybiBmKGEsYiktMit6LmxlZ2VuZF9pdGVtX3RpbGVfd2lkdGh9LG89ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaShhLGIpKzR9LHA9eS5sZWdlbmQuc2VsZWN0QWxsKCIuIitsLmxlZ2VuZEl0ZW0pLmRhdGEoYSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYSl7cmV0dXJuIHkuZ2VuZXJhdGVDbGFzcyhsLmxlZ2VuZEl0ZW0sYSl9KS5zdHlsZSgidmlzaWJpbGl0eSIsZnVuY3Rpb24oYSl7cmV0dXJuIHkuaXNMZWdlbmRUb1Nob3coYSk/InZpc2libGUiOiJoaWRkZW4ifSkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGEpe3oubGVnZW5kX2l0ZW1fb25jbGljaz96LmxlZ2VuZF9pdGVtX29uY2xpY2suY2FsbCh5LGEpOnkuZDMuZXZlbnQuYWx0S2V5Pyh5LmFwaS5oaWRlKCkseS5hcGkuc2hvdyhhKSk6KHkuYXBpLnRvZ2dsZShhKSx5LmlzVGFyZ2V0VG9TaG93KGEpP3kuYXBpLmZvY3VzKGEpOnkuYXBpLnJldmVydCgpKX0pLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGEpe3oubGVnZW5kX2l0ZW1fb25tb3VzZW92ZXI/ei5sZWdlbmRfaXRlbV9vbm1vdXNlb3Zlci5jYWxsKHksYSk6KHkuZDMuc2VsZWN0KHRoaXMpLmNsYXNzZWQobC5sZWdlbmRJdGVtRm9jdXNlZCwhMCksIXkudHJhbnNpdGluZyYmeS5pc1RhcmdldFRvU2hvdyhhKSYmeS5hcGkuZm9jdXMoYSkpfSkub24oIm1vdXNlb3V0IixmdW5jdGlvbihhKXt6LmxlZ2VuZF9pdGVtX29ubW91c2VvdXQ/ei5sZWdlbmRfaXRlbV9vbm1vdXNlb3V0LmNhbGwoeSxhKTooeS5kMy5zZWxlY3QodGhpcykuY2xhc3NlZChsLmxlZ2VuZEl0ZW1Gb2N1c2VkLCExKSx5LmFwaS5yZXZlcnQoKSl9KSxwLmFwcGVuZCgidGV4dCIpLnRleHQoZnVuY3Rpb24oYSl7cmV0dXJuIHEoei5kYXRhX25hbWVzW2FdKT96LmRhdGFfbmFtZXNbYV06YX0pLmVhY2goZnVuY3Rpb24oYSxiKXtlKHRoaXMsYSxiKX0pLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5hdHRyKCJ4Iix5LmlzTGVnZW5kUmlnaHR8fHkuaXNMZWdlbmRJbnNldD9nOi0yMDApLmF0dHIoInkiLHkuaXNMZWdlbmRSaWdodHx8eS5pc0xlZ2VuZEluc2V0Py0yMDA6aikscC5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsbC5sZWdlbmRJdGVtRXZlbnQpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLDApLmF0dHIoIngiLHkuaXNMZWdlbmRSaWdodHx8eS5pc0xlZ2VuZEluc2V0P2g6LTIwMCkuYXR0cigieSIseS5pc0xlZ2VuZFJpZ2h0fHx5LmlzTGVnZW5kSW5zZXQ/LTIwMDprKSxwLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIixsLmxlZ2VuZEl0ZW1UaWxlKS5zdHlsZSgic3Ryb2tlIix5LmNvbG9yKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIikuYXR0cigieDEiLHkuaXNMZWdlbmRSaWdodHx8eS5pc0xlZ2VuZEluc2V0P206LTIwMCkuYXR0cigieTEiLHkuaXNMZWdlbmRSaWdodHx8eS5pc0xlZ2VuZEluc2V0Py0yMDA6bykuYXR0cigieDIiLHkuaXNMZWdlbmRSaWdodHx8eS5pc0xlZ2VuZEluc2V0P246LTIwMCkuYXR0cigieTIiLHkuaXNMZWdlbmRSaWdodHx8eS5pc0xlZ2VuZEluc2V0Py0yMDA6bykuYXR0cigic3Ryb2tlLXdpZHRoIix6LmxlZ2VuZF9pdGVtX3RpbGVfaGVpZ2h0KSx4PXkubGVnZW5kLnNlbGVjdCgiLiIrbC5sZWdlbmRCYWNrZ3JvdW5kKyIgcmVjdCIpLHkuaXNMZWdlbmRJbnNldCYmQz4wJiYwPT09eC5zaXplKCkmJih4PXkubGVnZW5kLmluc2VydCgiZyIsIi4iK2wubGVnZW5kSXRlbSkuYXR0cigiY2xhc3MiLGwubGVnZW5kQmFja2dyb3VuZCkuYXBwZW5kKCJyZWN0IikpLHQ9eS5sZWdlbmQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShhKS50ZXh0KGZ1bmN0aW9uKGEpe3JldHVybiBxKHouZGF0YV9uYW1lc1thXSk/ei5kYXRhX25hbWVzW2FdOmF9KS5lYWNoKGZ1bmN0aW9uKGEsYil7ZSh0aGlzLGEsYil9KSwocj90LnRyYW5zaXRpb24oKTp0KS5hdHRyKCJ4IixnKS5hdHRyKCJ5IixqKSx1PXkubGVnZW5kLnNlbGVjdEFsbCgicmVjdC4iK2wubGVnZW5kSXRlbUV2ZW50KS5kYXRhKGEpLChyP3UudHJhbnNpdGlvbigpOnUpLmF0dHIoIndpZHRoIixmdW5jdGlvbihhKXtyZXR1cm4gSVthXX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oYSl7cmV0dXJuIEpbYV19KS5hdHRyKCJ4IixoKS5hdHRyKCJ5IixrKSx2PXkubGVnZW5kLnNlbGVjdEFsbCgibGluZS4iK2wubGVnZW5kSXRlbVRpbGUpLmRhdGEoYSksKHI/di50cmFuc2l0aW9uKCk6dikuc3R5bGUoInN0cm9rZSIseS5jb2xvcikuYXR0cigieDEiLG0pLmF0dHIoInkxIixvKS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLG8pLHgmJihyP3gudHJhbnNpdGlvbigpOngpLmF0dHIoImhlaWdodCIseS5nZXRMZWdlbmRIZWlnaHQoKS0xMikuYXR0cigid2lkdGgiLEMqKE0rMSkrMTApLHkubGVnZW5kLnNlbGVjdEFsbCgiLiIrbC5sZWdlbmRJdGVtKS5jbGFzc2VkKGwubGVnZW5kSXRlbUhpZGRlbixmdW5jdGlvbihhKXtyZXR1cm4heS5pc1RhcmdldFRvU2hvdyhhKX0pLHkudXBkYXRlTGVnZW5kSXRlbVdpZHRoKEMpLHkudXBkYXRlTGVnZW5kSXRlbUhlaWdodChEKSx5LnVwZGF0ZUxlZ2VuZFN0ZXAoTSkseS51cGRhdGVTaXplcygpLHkudXBkYXRlU2NhbGVzKCkseS51cGRhdGVTdmdTaXplKCkseS50cmFuc2Zvcm1BbGwocyxjKSx5LmxlZ2VuZEhhc1JlbmRlcmVkPSEwfSxpLmluaXRUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7YS50aXRsZT1hLnN2Zy5hcHBlbmQoInRleHQiKS50ZXh0KGEuY29uZmlnLnRpdGxlX3RleHQpLmF0dHIoImNsYXNzIixhLkNMQVNTLnRpdGxlKX0saS5yZWRyYXdUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7YS50aXRsZS5hdHRyKCJ4IixhLnhGb3JUaXRsZS5iaW5kKGEpKS5hdHRyKCJ5IixhLnlGb3JUaXRsZS5iaW5kKGEpKX0saS54Rm9yVGl0bGU9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMsYz1iLmNvbmZpZyxkPWMudGl0bGVfcG9zaXRpb258fCJsZWZ0IjtyZXR1cm4gYT1kLmluZGV4T2YoInJpZ2h0Iik+PTA/Yi5jdXJyZW50V2lkdGgtYi5nZXRUZXh0UmVjdChiLnRpdGxlLm5vZGUoKS50ZXh0Q29udGVudCxiLkNMQVNTLnRpdGxlLGIudGl0bGUubm9kZSgpKS53aWR0aC1jLnRpdGxlX3BhZGRpbmcucmlnaHQ6ZC5pbmRleE9mKCJjZW50ZXIiKT49MD8oYi5jdXJyZW50V2lkdGgtYi5nZXRUZXh0UmVjdChiLnRpdGxlLm5vZGUoKS50ZXh0Q29udGVudCxiLkNMQVNTLnRpdGxlLGIudGl0bGUubm9kZSgpKS53aWR0aCkvMjpjLnRpdGxlX3BhZGRpbmcubGVmdH0saS55Rm9yVGl0bGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLmNvbmZpZy50aXRsZV9wYWRkaW5nLnRvcCthLmdldFRleHRSZWN0KGEudGl0bGUubm9kZSgpLnRleHRDb250ZW50LGEuQ0xBU1MudGl0bGUsYS50aXRsZS5ub2RlKCkpLmhlaWdodH0saS5nZXRUaXRsZVBhZGRpbmc9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLnlGb3JUaXRsZSgpK2EuY29uZmlnLnRpdGxlX3BhZGRpbmcuYm90dG9tfSxjKGIsZiksZi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMub3duZXIsYj1hLmNvbmZpZyxjPWEubWFpbjthLmF4ZXMueD1jLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsLmF4aXMrIiAiK2wuYXhpc1gpLmF0dHIoImNsaXAtcGF0aCIsYS5jbGlwUGF0aEZvclhBeGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VHJhbnNsYXRlKCJ4IikpLnN0eWxlKCJ2aXNpYmlsaXR5IixiLmF4aXNfeF9zaG93PyJ2aXNpYmxlIjoiaGlkZGVuIiksYS5heGVzLnguYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGwuYXhpc1hMYWJlbCkuYXR0cigidHJhbnNmb3JtIixiLmF4aXNfcm90YXRlZD8icm90YXRlKC05MCkiOiIiKS5zdHlsZSgidGV4dC1hbmNob3IiLHRoaXMudGV4dEFuY2hvckZvclhBeGlzTGFiZWwuYmluZCh0aGlzKSksYS5heGVzLnk9Yy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsbC5heGlzKyIgIitsLmF4aXNZKS5hdHRyKCJjbGlwLXBhdGgiLGIuYXhpc195X2lubmVyPyIiOmEuY2xpcFBhdGhGb3JZQXhpcykuYXR0cigidHJhbnNmb3JtIixhLmdldFRyYW5zbGF0ZSgieSIpKS5zdHlsZSgidmlzaWJpbGl0eSIsYi5heGlzX3lfc2hvdz8idmlzaWJsZSI6ImhpZGRlbiIpLGEuYXhlcy55LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixsLmF4aXNZTGFiZWwpLmF0dHIoInRyYW5zZm9ybSIsYi5heGlzX3JvdGF0ZWQ/IiI6InJvdGF0ZSgtOTApIikuc3R5bGUoInRleHQtYW5jaG9yIix0aGlzLnRleHRBbmNob3JGb3JZQXhpc0xhYmVsLmJpbmQodGhpcykpLGEuYXhlcy55Mj1jLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsLmF4aXMrIiAiK2wuYXhpc1kyKS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VHJhbnNsYXRlKCJ5MiIpKS5zdHlsZSgidmlzaWJpbGl0eSIsYi5heGlzX3kyX3Nob3c/InZpc2libGUiOiJoaWRkZW4iKSxhLmF4ZXMueTIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGwuYXhpc1kyTGFiZWwpLmF0dHIoInRyYW5zZm9ybSIsYi5heGlzX3JvdGF0ZWQ/IiI6InJvdGF0ZSgtOTApIikuc3R5bGUoInRleHQtYW5jaG9yIix0aGlzLnRleHRBbmNob3JGb3JZMkF4aXNMYWJlbC5iaW5kKHRoaXMpKX0sZi5wcm90b3R5cGUuZ2V0WEF4aXM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsaCl7dmFyIGk9dGhpcy5vd25lcixqPWkuY29uZmlnLGs9e2lzQ2F0ZWdvcnk6aS5pc0NhdGVnb3JpemVkKCksd2l0aE91dGVyVGljazplLHRpY2tNdWx0aWxpbmU6ai5heGlzX3hfdGlja19tdWx0aWxpbmUsdGlja1dpZHRoOmouYXhpc194X3RpY2tfd2lkdGgsdGlja1RleHRSb3RhdGU6aD8wOmouYXhpc194X3RpY2tfcm90YXRlLHdpdGhvdXRUcmFuc2l0aW9uOmZ9LGw9ZyhpLmQzLGspLnNjYWxlKGEpLm9yaWVudChiKTtyZXR1cm4gaS5pc1RpbWVTZXJpZXMoKSYmZCYmImZ1bmN0aW9uIiE9dHlwZW9mIGQmJihkPWQubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBpLnBhcnNlRGF0ZShhKX0pKSxsLnRpY2tGb3JtYXQoYykudGlja1ZhbHVlcyhkKSxpLmlzQ2F0ZWdvcml6ZWQoKSYmKGwudGlja0NlbnRlcmVkKGouYXhpc194X3RpY2tfY2VudGVyZWQpLHUoai5heGlzX3hfdGlja19jdWxsaW5nKSYmKGouYXhpc194X3RpY2tfY3VsbGluZz0hMSkpLGx9LGYucHJvdG90eXBlLnVwZGF0ZVhBeGlzVGlja1ZhbHVlcz1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9dGhpcy5vd25lcixlPWQuY29uZmlnO3JldHVybihlLmF4aXNfeF90aWNrX2ZpdHx8ZS5heGlzX3hfdGlja19jb3VudCkmJihjPXRoaXMuZ2VuZXJhdGVUaWNrVmFsdWVzKGQubWFwVGFyZ2V0c1RvVW5pcXVlWHMoYSksZS5heGlzX3hfdGlja19jb3VudCxkLmlzVGltZVNlcmllcygpKSksYj9iLnRpY2tWYWx1ZXMoYyk6KGQueEF4aXMudGlja1ZhbHVlcyhjKSxkLnN1YlhBeGlzLnRpY2tWYWx1ZXMoYykpLGN9LGYucHJvdG90eXBlLmdldFlBeGlzPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGgpe3ZhciBpPXRoaXMub3duZXIsaj1pLmNvbmZpZyxrPXt3aXRoT3V0ZXJUaWNrOmUsd2l0aG91dFRyYW5zaXRpb246Zix0aWNrVGV4dFJvdGF0ZTpoPzA6ai5heGlzX3lfdGlja19yb3RhdGV9LGw9ZyhpLmQzLGspLnNjYWxlKGEpLm9yaWVudChiKS50aWNrRm9ybWF0KGMpO3JldHVybiBpLmlzVGltZVNlcmllc1koKT9sLnRpY2tzKGkuZDMudGltZVtqLmF4aXNfeV90aWNrX3RpbWVfdmFsdWVdLGouYXhpc195X3RpY2tfdGltZV9pbnRlcnZhbCk6bC50aWNrVmFsdWVzKGQpLGx9LGYucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3duZXIuY29uZmlnO3JldHVybiBhIGluIGIuZGF0YV9heGVzP2IuZGF0YV9heGVzW2FdOiJ5In0sZi5wcm90b3R5cGUuZ2V0WEF4aXNUaWNrRm9ybWF0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vd25lcixiPWEuY29uZmlnLGM9YS5pc1RpbWVTZXJpZXMoKT9hLmRlZmF1bHRBeGlzVGltZUZvcm1hdDphLmlzQ2F0ZWdvcml6ZWQoKT9hLmNhdGVnb3J5TmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gMD5hP2EudG9GaXhlZCgwKTphfTtyZXR1cm4gYi5heGlzX3hfdGlja19mb3JtYXQmJihuKGIuYXhpc194X3RpY2tfZm9ybWF0KT9jPWIuYXhpc194X3RpY2tfZm9ybWF0OmEuaXNUaW1lU2VyaWVzKCkmJihjPWZ1bmN0aW9uKGMpe3JldHVybiBjP2EuYXhpc1RpbWVGb3JtYXQoYi5heGlzX3hfdGlja19mb3JtYXQpKGMpOiIifSkpLG4oYyk/ZnVuY3Rpb24oYil7cmV0dXJuIGMuY2FsbChhLGIpfTpjfSxmLnByb3RvdHlwZS5nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE/YTpiP2IudGlja1ZhbHVlcygpOnZvaWQgMH0sZi5wcm90b3R5cGUuZ2V0WEF4aXNUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGlja1ZhbHVlcyh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3hfdGlja192YWx1ZXMsdGhpcy5vd25lci54QXhpcyl9LGYucHJvdG90eXBlLmdldFlBeGlzVGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpY2tWYWx1ZXModGhpcy5vd25lci5jb25maWcuYXhpc195X3RpY2tfdmFsdWVzLHRoaXMub3duZXIueUF4aXMpfSxmLnByb3RvdHlwZS5nZXRZMkF4aXNUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGlja1ZhbHVlcyh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3kyX3RpY2tfdmFsdWVzLHRoaXMub3duZXIueTJBeGlzKX0sZi5wcm90b3R5cGUuZ2V0TGFiZWxPcHRpb25CeUF4aXNJZD1mdW5jdGlvbihhKXt2YXIgYixjPXRoaXMub3duZXIsZD1jLmNvbmZpZztyZXR1cm4ieSI9PT1hP2I9ZC5heGlzX3lfbGFiZWw6InkyIj09PWE/Yj1kLmF4aXNfeTJfbGFiZWw6IngiPT09YSYmKGI9ZC5heGlzX3hfbGFiZWwpLGJ9LGYucHJvdG90eXBlLmdldExhYmVsVGV4dD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmdldExhYmVsT3B0aW9uQnlBeGlzSWQoYSk7cmV0dXJuIG8oYik/YjpiP2IudGV4dDpudWxsfSxmLnByb3RvdHlwZS5zZXRMYWJlbFRleHQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLm93bmVyLGQ9Yy5jb25maWcsZT10aGlzLmdldExhYmVsT3B0aW9uQnlBeGlzSWQoYSk7byhlKT8ieSI9PT1hP2QuYXhpc195X2xhYmVsPWI6InkyIj09PWE/ZC5heGlzX3kyX2xhYmVsPWI6IngiPT09YSYmKGQuYXhpc194X2xhYmVsPWIpOmUmJihlLnRleHQ9Yil9LGYucHJvdG90eXBlLmdldExhYmVsUG9zaXRpb249ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldExhYmVsT3B0aW9uQnlBeGlzSWQoYSksZD1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJmMucG9zaXRpb24/Yy5wb3NpdGlvbjpiO3JldHVybntpc0lubmVyOmQuaW5kZXhPZigiaW5uZXIiKT49MCxpc091dGVyOmQuaW5kZXhPZigib3V0ZXIiKT49MCxpc0xlZnQ6ZC5pbmRleE9mKCJsZWZ0Iik+PTAsaXNDZW50ZXI6ZC5pbmRleE9mKCJjZW50ZXIiKT49MCxpc1JpZ2h0OmQuaW5kZXhPZigicmlnaHQiKT49MCxpc1RvcDpkLmluZGV4T2YoInRvcCIpPj0wLGlzTWlkZGxlOmQuaW5kZXhPZigibWlkZGxlIik+PTAsaXNCb3R0b206ZC5pbmRleE9mKCJib3R0b20iKT49MH19LGYucHJvdG90eXBlLmdldFhBeGlzTGFiZWxQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhYmVsUG9zaXRpb24oIngiLHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZD8iaW5uZXItdG9wIjoiaW5uZXItcmlnaHQiKX0sZi5wcm90b3R5cGUuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGFiZWxQb3NpdGlvbigieSIsdGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkPyJpbm5lci1yaWdodCI6ImlubmVyLXRvcCIpfSxmLnByb3RvdHlwZS5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGFiZWxQb3NpdGlvbigieTIiLHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZD8iaW5uZXItcmlnaHQiOiJpbm5lci10b3AiKX0sZi5wcm90b3R5cGUuZ2V0TGFiZWxQb3NpdGlvbkJ5SWQ9ZnVuY3Rpb24oYSl7cmV0dXJuInkyIj09PWE/dGhpcy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uKCk6InkiPT09YT90aGlzLmdldFlBeGlzTGFiZWxQb3NpdGlvbigpOnRoaXMuZ2V0WEF4aXNMYWJlbFBvc2l0aW9uKCl9LGYucHJvdG90eXBlLnRleHRGb3JYQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGFiZWxUZXh0KCJ4Iil9LGYucHJvdG90eXBlLnRleHRGb3JZQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGFiZWxUZXh0KCJ5Iil9LGYucHJvdG90eXBlLnRleHRGb3JZMkF4aXNMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldExhYmVsVGV4dCgieTIiKX0sZi5wcm90b3R5cGUueEZvckF4aXNMYWJlbD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMub3duZXI7cmV0dXJuIGE/Yi5pc0xlZnQ/MDpiLmlzQ2VudGVyP2Mud2lkdGgvMjpjLndpZHRoOmIuaXNCb3R0b20/LWMuaGVpZ2h0OmIuaXNNaWRkbGU/LWMuaGVpZ2h0LzI6MH0sZi5wcm90b3R5cGUuZHhGb3JBeGlzTGFiZWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT9iLmlzTGVmdD8iMC41ZW0iOmIuaXNSaWdodD8iLTAuNWVtIjoiMCI6Yi5pc1RvcD8iLTAuNWVtIjpiLmlzQm90dG9tPyIwLjVlbSI6IjAifSxmLnByb3RvdHlwZS50ZXh0QW5jaG9yRm9yQXhpc0xhYmVsPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE/Yi5pc0xlZnQ/InN0YXJ0IjpiLmlzQ2VudGVyPyJtaWRkbGUiOiJlbmQiOmIuaXNCb3R0b20/InN0YXJ0IjpiLmlzTWlkZGxlPyJtaWRkbGUiOiJlbmQifSxmLnByb3RvdHlwZS54Rm9yWEF4aXNMYWJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnhGb3JBeGlzTGFiZWwoIXRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpKX0sZi5wcm90b3R5cGUueEZvcllBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54Rm9yQXhpc0xhYmVsKHRoaXMub3duZXIuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFlBeGlzTGFiZWxQb3NpdGlvbigpKX0sZi5wcm90b3R5cGUueEZvclkyQXhpc0xhYmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueEZvckF4aXNMYWJlbCh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsdGhpcy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uKCkpfSxmLnByb3RvdHlwZS5keEZvclhBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5keEZvckF4aXNMYWJlbCghdGhpcy5vd25lci5jb25maWcuYXhpc19yb3RhdGVkLHRoaXMuZ2V0WEF4aXNMYWJlbFBvc2l0aW9uKCkpfSxmLnByb3RvdHlwZS5keEZvcllBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5keEZvckF4aXNMYWJlbCh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsdGhpcy5nZXRZQXhpc0xhYmVsUG9zaXRpb24oKSl9LGYucHJvdG90eXBlLmR4Rm9yWTJBeGlzTGFiZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5keEZvckF4aXNMYWJlbCh0aGlzLm93bmVyLmNvbmZpZy5heGlzX3JvdGF0ZWQsdGhpcy5nZXRZMkF4aXNMYWJlbFBvc2l0aW9uKCkpfSxmLnByb3RvdHlwZS5keUZvclhBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm93bmVyLGI9YS5jb25maWcsYz10aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpO3JldHVybiBiLmF4aXNfcm90YXRlZD9jLmlzSW5uZXI/IjEuMmVtIjotMjUtdGhpcy5nZXRNYXhUaWNrV2lkdGgoIngiKTpjLmlzSW5uZXI/Ii0wLjVlbSI6Yi5heGlzX3hfaGVpZ2h0P2IuYXhpc194X2hlaWdodC0xMDoiM2VtIn0sZi5wcm90b3R5cGUuZHlGb3JZQXhpc0xhYmVsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vd25lcixiPXRoaXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCk7cmV0dXJuIGEuY29uZmlnLmF4aXNfcm90YXRlZD9iLmlzSW5uZXI/Ii0wLjVlbSI6IjNlbSI6Yi5pc0lubmVyPyIxLjJlbSI6LTEwLShhLmNvbmZpZy5heGlzX3lfaW5uZXI/MDp0aGlzLmdldE1heFRpY2tXaWR0aCgieSIpKzEwKX0sZi5wcm90b3R5cGUuZHlGb3JZMkF4aXNMYWJlbD1mdW5jdGlvbigpe3ZhciBhPXRoaXMub3duZXIsYj10aGlzLmdldFkyQXhpc0xhYmVsUG9zaXRpb24oKTtyZXR1cm4gYS5jb25maWcuYXhpc19yb3RhdGVkP2IuaXNJbm5lcj8iMS4yZW0iOiItMi4yZW0iOmIuaXNJbm5lcj8iLTAuNWVtIjoxNSsoYS5jb25maWcuYXhpc195Ml9pbm5lcj8wOnRoaXMuZ2V0TWF4VGlja1dpZHRoKCJ5MiIpKzE1KX0sZi5wcm90b3R5cGUudGV4dEFuY2hvckZvclhBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm93bmVyO3JldHVybiB0aGlzLnRleHRBbmNob3JGb3JBeGlzTGFiZWwoIWEuY29uZmlnLmF4aXNfcm90YXRlZCx0aGlzLmdldFhBeGlzTGFiZWxQb3NpdGlvbigpKX0sZi5wcm90b3R5cGUudGV4dEFuY2hvckZvcllBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm93bmVyO3JldHVybiB0aGlzLnRleHRBbmNob3JGb3JBeGlzTGFiZWwoYS5jb25maWcuYXhpc19yb3RhdGVkLHRoaXMuZ2V0WUF4aXNMYWJlbFBvc2l0aW9uKCkpfSxmLnByb3RvdHlwZS50ZXh0QW5jaG9yRm9yWTJBeGlzTGFiZWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm93bmVyO3JldHVybiB0aGlzLnRleHRBbmNob3JGb3JBeGlzTGFiZWwoYS5jb25maWcuYXhpc19yb3RhdGVkLHRoaXMuZ2V0WTJBeGlzTGFiZWxQb3NpdGlvbigpKX0sZi5wcm90b3R5cGUuZ2V0TWF4VGlja1dpZHRoPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZyxoPXRoaXMub3duZXIsaT1oLmNvbmZpZyxqPTA7cmV0dXJuIGImJmguY3VycmVudE1heFRpY2tXaWR0aHNbYV0/aC5jdXJyZW50TWF4VGlja1dpZHRoc1thXTooaC5zdmcmJihjPWguZmlsdGVyVGFyZ2V0c1RvU2hvdyhoLmRhdGEudGFyZ2V0cyksInkiPT09YT8oZD1oLnkuY29weSgpLmRvbWFpbihoLmdldFlEb21haW4oYywieSIpKSxlPXRoaXMuZ2V0WUF4aXMoZCxoLnlPcmllbnQsaS5heGlzX3lfdGlja19mb3JtYXQsaC55QXhpc1RpY2tWYWx1ZXMsITEsITAsITApKToieTIiPT09YT8oZD1oLnkyLmNvcHkoKS5kb21haW4oaC5nZXRZRG9tYWluKGMsInkyIikpLA0KZT10aGlzLmdldFlBeGlzKGQsaC55Mk9yaWVudCxpLmF4aXNfeTJfdGlja19mb3JtYXQsaC55MkF4aXNUaWNrVmFsdWVzLCExLCEwLCEwKSk6KGQ9aC54LmNvcHkoKS5kb21haW4oaC5nZXRYRG9tYWluKGMpKSxlPXRoaXMuZ2V0WEF4aXMoZCxoLnhPcmllbnQsaC54QXhpc1RpY2tGb3JtYXQsaC54QXhpc1RpY2tWYWx1ZXMsITEsITAsITApLHRoaXMudXBkYXRlWEF4aXNUaWNrVmFsdWVzKGMsZSkpLGY9aC5kMy5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoImMzIiwhMCksZz1mLmFwcGVuZCgic3ZnIikuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5zdHlsZSgicG9zaXRpb24iLCJmaXhlZCIpLnN0eWxlKCJ0b3AiLDApLnN0eWxlKCJsZWZ0IiwwKSxnLmFwcGVuZCgiZyIpLmNhbGwoZSkuZWFjaChmdW5jdGlvbigpe2guZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidGV4dCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2o8YS53aWR0aCYmKGo9YS53aWR0aCl9KSxmLnJlbW92ZSgpfSkpLGguY3VycmVudE1heFRpY2tXaWR0aHNbYV09MD49aj9oLmN1cnJlbnRNYXhUaWNrV2lkdGhzW2FdOmosaC5jdXJyZW50TWF4VGlja1dpZHRoc1thXSl9LGYucHJvdG90eXBlLnVwZGF0ZUxhYmVscz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm93bmVyLGM9Yi5tYWluLnNlbGVjdCgiLiIrbC5heGlzWCsiIC4iK2wuYXhpc1hMYWJlbCksZD1iLm1haW4uc2VsZWN0KCIuIitsLmF4aXNZKyIgLiIrbC5heGlzWUxhYmVsKSxlPWIubWFpbi5zZWxlY3QoIi4iK2wuYXhpc1kyKyIgLiIrbC5heGlzWTJMYWJlbCk7KGE/Yy50cmFuc2l0aW9uKCk6YykuYXR0cigieCIsdGhpcy54Rm9yWEF4aXNMYWJlbC5iaW5kKHRoaXMpKS5hdHRyKCJkeCIsdGhpcy5keEZvclhBeGlzTGFiZWwuYmluZCh0aGlzKSkuYXR0cigiZHkiLHRoaXMuZHlGb3JYQXhpc0xhYmVsLmJpbmQodGhpcykpLnRleHQodGhpcy50ZXh0Rm9yWEF4aXNMYWJlbC5iaW5kKHRoaXMpKSwoYT9kLnRyYW5zaXRpb24oKTpkKS5hdHRyKCJ4Iix0aGlzLnhGb3JZQXhpc0xhYmVsLmJpbmQodGhpcykpLmF0dHIoImR4Iix0aGlzLmR4Rm9yWUF4aXNMYWJlbC5iaW5kKHRoaXMpKS5hdHRyKCJkeSIsdGhpcy5keUZvcllBeGlzTGFiZWwuYmluZCh0aGlzKSkudGV4dCh0aGlzLnRleHRGb3JZQXhpc0xhYmVsLmJpbmQodGhpcykpLChhP2UudHJhbnNpdGlvbigpOmUpLmF0dHIoIngiLHRoaXMueEZvclkyQXhpc0xhYmVsLmJpbmQodGhpcykpLmF0dHIoImR4Iix0aGlzLmR4Rm9yWTJBeGlzTGFiZWwuYmluZCh0aGlzKSkuYXR0cigiZHkiLHRoaXMuZHlGb3JZMkF4aXNMYWJlbC5iaW5kKHRoaXMpKS50ZXh0KHRoaXMudGV4dEZvclkyQXhpc0xhYmVsLmJpbmQodGhpcykpfSxmLnByb3RvdHlwZS5nZXRQYWRkaW5nPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPSJudW1iZXIiPT10eXBlb2YgYT9hOmFbYl07cmV0dXJuIG0oZSk/InJhdGlvIj09PWEudW5pdD9hW2JdKmQ6dGhpcy5jb252ZXJ0UGl4ZWxzVG9BeGlzUGFkZGluZyhlLGQpOmN9LGYucHJvdG90eXBlLmNvbnZlcnRQaXhlbHNUb0F4aXNQYWRkaW5nPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5vd25lcixkPWMuY29uZmlnLmF4aXNfcm90YXRlZD9jLndpZHRoOmMuaGVpZ2h0O3JldHVybiBiKihhL2QpfSxmLnByb3RvdHlwZS5nZW5lcmF0ZVRpY2tWYWx1ZXM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs9YTtpZihiKWlmKGQ9bihiKT9iKCk6YiwxPT09ZClrPVthWzBdXTtlbHNlIGlmKDI9PT1kKWs9W2FbMF0sYVthLmxlbmd0aC0xXV07ZWxzZSBpZihkPjIpe2ZvcihnPWQtMixlPWFbMF0sZj1hW2EubGVuZ3RoLTFdLGg9KGYtZSkvKGcrMSksaz1bZV0saT0wO2c+aTtpKyspaj0rZStoKihpKzEpLGsucHVzaChjP25ldyBEYXRlKGopOmopO2sucHVzaChmKX1yZXR1cm4gY3x8KGs9ay5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEtYn0pKSxrfSxmLnByb3RvdHlwZS5nZW5lcmF0ZVRyYW5zaXRpb25zPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3duZXIsYz1iLmF4ZXM7cmV0dXJue2F4aXNYOmE/Yy54LnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKTpjLngsYXhpc1k6YT9jLnkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEpOmMueSxheGlzWTI6YT9jLnkyLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKTpjLnkyLGF4aXNTdWJYOmE/Yy5zdWJ4LnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKTpjLnN1Ynh9fSxmLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLm93bmVyO2MuYXhlcy54LnN0eWxlKCJvcGFjaXR5IixiPzA6MSksYy5heGVzLnkuc3R5bGUoIm9wYWNpdHkiLGI/MDoxKSxjLmF4ZXMueTIuc3R5bGUoIm9wYWNpdHkiLGI/MDoxKSxjLmF4ZXMuc3VieC5zdHlsZSgib3BhY2l0eSIsYj8wOjEpLGEuYXhpc1guY2FsbChjLnhBeGlzKSxhLmF4aXNZLmNhbGwoYy55QXhpcyksYS5heGlzWTIuY2FsbChjLnkyQXhpcyksYS5heGlzU3ViWC5jYWxsKGMuc3ViWEF4aXMpfSxpLmdldENsaXBQYXRoPWZ1bmN0aW9uKGIpe3ZhciBjPWEubmF2aWdhdG9yLmFwcFZlcnNpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtc2llIDkuIik+PTA7cmV0dXJuInVybCgiKyhjPyIiOmRvY3VtZW50LlVSTC5zcGxpdCgiIyIpWzBdKSsiIyIrYisiKSJ9LGkuYXBwZW5kQ2xpcD1mdW5jdGlvbihhLGIpe3JldHVybiBhLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsYikuYXBwZW5kKCJyZWN0Iil9LGkuZ2V0QXhpc0NsaXBYPWZ1bmN0aW9uKGEpe3ZhciBiPU1hdGgubWF4KDMwLHRoaXMubWFyZ2luLmxlZnQpO3JldHVybiBhPy0oMStiKTotKGItMSl9LGkuZ2V0QXhpc0NsaXBZPWZ1bmN0aW9uKGEpe3JldHVybiBhPy0yMDotdGhpcy5tYXJnaW4udG9wfSxpLmdldFhBeGlzQ2xpcFg9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLmdldEF4aXNDbGlwWCghYS5jb25maWcuYXhpc19yb3RhdGVkKX0saS5nZXRYQXhpc0NsaXBZPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm4gYS5nZXRBeGlzQ2xpcFkoIWEuY29uZmlnLmF4aXNfcm90YXRlZCl9LGkuZ2V0WUF4aXNDbGlwWD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGEuY29uZmlnLmF4aXNfeV9pbm5lcj8tMTphLmdldEF4aXNDbGlwWChhLmNvbmZpZy5heGlzX3JvdGF0ZWQpfSxpLmdldFlBeGlzQ2xpcFk9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLmdldEF4aXNDbGlwWShhLmNvbmZpZy5heGlzX3JvdGF0ZWQpfSxpLmdldEF4aXNDbGlwV2lkdGg9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPU1hdGgubWF4KDMwLGIubWFyZ2luLmxlZnQpLGQ9TWF0aC5tYXgoMzAsYi5tYXJnaW4ucmlnaHQpO3JldHVybiBhP2Iud2lkdGgrMitjK2Q6Yi5tYXJnaW4ubGVmdCsyMH0saS5nZXRBeGlzQ2xpcEhlaWdodD1mdW5jdGlvbihhKXtyZXR1cm4oYT90aGlzLm1hcmdpbi5ib3R0b206dGhpcy5tYXJnaW4udG9wK3RoaXMuaGVpZ2h0KSsyMH0saS5nZXRYQXhpc0NsaXBXaWR0aD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGEuZ2V0QXhpc0NsaXBXaWR0aCghYS5jb25maWcuYXhpc19yb3RhdGVkKX0saS5nZXRYQXhpc0NsaXBIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLmdldEF4aXNDbGlwSGVpZ2h0KCFhLmNvbmZpZy5heGlzX3JvdGF0ZWQpfSxpLmdldFlBeGlzQ2xpcFdpZHRoPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm4gYS5nZXRBeGlzQ2xpcFdpZHRoKGEuY29uZmlnLmF4aXNfcm90YXRlZCkrKGEuY29uZmlnLmF4aXNfeV9pbm5lcj8yMDowKX0saS5nZXRZQXhpc0NsaXBIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3JldHVybiBhLmdldEF4aXNDbGlwSGVpZ2h0KGEuY29uZmlnLmF4aXNfcm90YXRlZCl9LGkuaW5pdFBpZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmQzLGM9YS5jb25maWc7YS5waWU9Yi5sYXlvdXQucGllKCkudmFsdWUoZnVuY3Rpb24oYSl7cmV0dXJuIGEudmFsdWVzLnJlZHVjZShmdW5jdGlvbihhLGIpe3JldHVybiBhK2IudmFsdWV9LDApfSksYy5kYXRhX29yZGVyfHxhLnBpZS5zb3J0KG51bGwpfSxpLnVwZGF0ZVJhZGl1cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZyxjPWIuZ2F1Z2Vfd2lkdGh8fGIuZG9udXRfd2lkdGg7YS5yYWRpdXNFeHBhbmRlZD1NYXRoLm1pbihhLmFyY1dpZHRoLGEuYXJjSGVpZ2h0KS8yLGEucmFkaXVzPS45NSphLnJhZGl1c0V4cGFuZGVkLGEuaW5uZXJSYWRpdXNSYXRpbz1jPyhhLnJhZGl1cy1jKS9hLnJhZGl1czouNixhLmlubmVyUmFkaXVzPWEuaGFzVHlwZSgiZG9udXQiKXx8YS5oYXNUeXBlKCJnYXVnZSIpP2EucmFkaXVzKmEuaW5uZXJSYWRpdXNSYXRpbzowfSxpLnVwZGF0ZUFyYz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7YS5zdmdBcmM9YS5nZXRTdmdBcmMoKSxhLnN2Z0FyY0V4cGFuZGVkPWEuZ2V0U3ZnQXJjRXhwYW5kZWQoKSxhLnN2Z0FyY0V4cGFuZGVkU3ViPWEuZ2V0U3ZnQXJjRXhwYW5kZWQoLjk4KX0saS51cGRhdGVBbmdsZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmPXRoaXMsZz1mLmNvbmZpZyxoPSExLGk9MDtyZXR1cm4gZz8oZi5waWUoZi5maWx0ZXJUYXJnZXRzVG9TaG93KGYuZGF0YS50YXJnZXRzKSkuZm9yRWFjaChmdW5jdGlvbihiKXtofHxiLmRhdGEuaWQhPT1hLmRhdGEuaWR8fChoPSEwLGE9YixhLmluZGV4PWkpLGkrK30pLGlzTmFOKGEuc3RhcnRBbmdsZSkmJihhLnN0YXJ0QW5nbGU9MCksaXNOYU4oYS5lbmRBbmdsZSkmJihhLmVuZEFuZ2xlPWEuc3RhcnRBbmdsZSksZi5pc0dhdWdlVHlwZShhLmRhdGEpJiYoYj1nLmdhdWdlX21pbixjPWcuZ2F1Z2VfbWF4LGQ9TWF0aC5QSSooZy5nYXVnZV9mdWxsQ2lyY2xlPzI6MSkvKGMtYiksZT1hLnZhbHVlPGI/MDphLnZhbHVlPGM/YS52YWx1ZS1iOmMtYixhLnN0YXJ0QW5nbGU9Zy5nYXVnZV9zdGFydGluZ0FuZ2xlLGEuZW5kQW5nbGU9YS5zdGFydEFuZ2xlK2QqZSksaD9hOm51bGwpOm51bGx9LGkuZ2V0U3ZnQXJjPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuZDMuc3ZnLmFyYygpLm91dGVyUmFkaXVzKGEucmFkaXVzKS5pbm5lclJhZGl1cyhhLmlubmVyUmFkaXVzKSxjPWZ1bmN0aW9uKGMsZCl7dmFyIGU7cmV0dXJuIGQ/YihjKTooZT1hLnVwZGF0ZUFuZ2xlKGMpLGU/YihlKToiTSAwIDAiKX07cmV0dXJuIGMuY2VudHJvaWQ9Yi5jZW50cm9pZCxjfSxpLmdldFN2Z0FyY0V4cGFuZGVkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmQzLnN2Zy5hcmMoKS5vdXRlclJhZGl1cyhiLnJhZGl1c0V4cGFuZGVkKihhP2E6MSkpLmlubmVyUmFkaXVzKGIuaW5uZXJSYWRpdXMpO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1iLnVwZGF0ZUFuZ2xlKGEpO3JldHVybiBkP2MoZCk6Ik0gMCAwIn19LGkuZ2V0QXJjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY3x8dGhpcy5pc0FyY1R5cGUoYS5kYXRhKT90aGlzLnN2Z0FyYyhhLGIpOiJNIDAgMCJ9LGkudHJhbnNmb3JtRm9yQXJjTGFiZWw9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnPXRoaXMsaD1nLmNvbmZpZyxpPWcudXBkYXRlQW5nbGUoYSksaj0iIjtyZXR1cm4gaSYmIWcuaGFzVHlwZSgiZ2F1Z2UiKSYmKGI9dGhpcy5zdmdBcmMuY2VudHJvaWQoaSksYz1pc05hTihiWzBdKT8wOmJbMF0sZD1pc05hTihiWzFdKT8wOmJbMV0sZT1NYXRoLnNxcnQoYypjK2QqZCksZj1nLmhhc1R5cGUoImRvbnV0IikmJmguZG9udXRfbGFiZWxfcmF0aW8/bihoLmRvbnV0X2xhYmVsX3JhdGlvKT9oLmRvbnV0X2xhYmVsX3JhdGlvKGEsZy5yYWRpdXMsZSk6aC5kb251dF9sYWJlbF9yYXRpbzpnLmhhc1R5cGUoInBpZSIpJiZoLnBpZV9sYWJlbF9yYXRpbz9uKGgucGllX2xhYmVsX3JhdGlvKT9oLnBpZV9sYWJlbF9yYXRpbyhhLGcucmFkaXVzLGUpOmgucGllX2xhYmVsX3JhdGlvOmcucmFkaXVzJiZlPygzNi9nLnJhZGl1cz4uMzc1PzEuMTc1LTM2L2cucmFkaXVzOi44KSpnLnJhZGl1cy9lOjAsaj0idHJhbnNsYXRlKCIrYypmKyIsIitkKmYrIikiKSxqfSxpLmdldEFyY1JhdGlvPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZyxkPU1hdGguUEkqKGIuaGFzVHlwZSgiZ2F1Z2UiKSYmIWMuZ2F1Z2VfZnVsbENpcmNsZT8xOjIpO3JldHVybiBhPyhhLmVuZEFuZ2xlLWEuc3RhcnRBbmdsZSkvZDpudWxsfSxpLmNvbnZlcnRUb0FyY0RhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkTmFtZSh7aWQ6YS5kYXRhLmlkLHZhbHVlOmEudmFsdWUscmF0aW86dGhpcy5nZXRBcmNSYXRpbyhhKSxpbmRleDphLmluZGV4fSl9LGkudGV4dEZvckFyY0xhYmVsPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZz10aGlzO3JldHVybiBnLnNob3VsZFNob3dBcmNMYWJlbCgpPyhiPWcudXBkYXRlQW5nbGUoYSksYz1iP2IudmFsdWU6bnVsbCxkPWcuZ2V0QXJjUmF0aW8oYiksZT1hLmRhdGEuaWQsZy5oYXNUeXBlKCJnYXVnZSIpfHxnLm1lZXRzQXJjTGFiZWxUaHJlc2hvbGQoZCk/KGY9Zy5nZXRBcmNMYWJlbEZvcm1hdCgpLGY/ZihjLGQsZSk6Zy5kZWZhdWx0QXJjVmFsdWVGb3JtYXQoYyxkKSk6IiIpOiIifSxpLmV4cGFuZEFyYz1mdW5jdGlvbihiKXt2YXIgYyxkPXRoaXM7cmV0dXJuIGQudHJhbnNpdGluZz92b2lkKGM9YS5zZXRJbnRlcnZhbChmdW5jdGlvbigpe2QudHJhbnNpdGluZ3x8KGEuY2xlYXJJbnRlcnZhbChjKSxkLmxlZ2VuZC5zZWxlY3RBbGwoIi5jMy1sZWdlbmQtaXRlbS1mb2N1c2VkIikuc2l6ZSgpPjAmJmQuZXhwYW5kQXJjKGIpKX0sMTApKTooYj1kLm1hcFRvVGFyZ2V0SWRzKGIpLHZvaWQgZC5zdmcuc2VsZWN0QWxsKGQuc2VsZWN0b3JUYXJnZXRzKGIsIi4iK2wuY2hhcnRBcmMpKS5lYWNoKGZ1bmN0aW9uKGEpe2Quc2hvdWxkRXhwYW5kKGEuZGF0YS5pZCkmJmQuZDMuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkLmV4cGFuZER1cmF0aW9uKGEuZGF0YS5pZCkpLmF0dHIoImQiLGQuc3ZnQXJjRXhwYW5kZWQpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyKmQuZXhwYW5kRHVyYXRpb24oYS5kYXRhLmlkKSkuYXR0cigiZCIsZC5zdmdBcmNFeHBhbmRlZFN1YikuZWFjaChmdW5jdGlvbihhKXtkLmlzRG9udXRUeXBlKGEuZGF0YSl9KX0pKX0saS51bmV4cGFuZEFyYz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2IudHJhbnNpdGluZ3x8KGE9Yi5tYXBUb1RhcmdldElkcyhhKSxiLnN2Zy5zZWxlY3RBbGwoYi5zZWxlY3RvclRhcmdldHMoYSwiLiIrbC5jaGFydEFyYykpLnNlbGVjdEFsbCgicGF0aCIpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihmdW5jdGlvbihhKXtyZXR1cm4gYi5leHBhbmREdXJhdGlvbihhLmRhdGEuaWQpfSkuYXR0cigiZCIsYi5zdmdBcmMpLGIuc3ZnLnNlbGVjdEFsbCgiLiIrbC5hcmMpLnN0eWxlKCJvcGFjaXR5IiwxKSl9LGkuZXhwYW5kRHVyYXRpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuY29uZmlnO3JldHVybiBiLmlzRG9udXRUeXBlKGEpP2MuZG9udXRfZXhwYW5kX2R1cmF0aW9uOmIuaXNHYXVnZVR5cGUoYSk/Yy5nYXVnZV9leHBhbmRfZHVyYXRpb246Yi5pc1BpZVR5cGUoYSk/Yy5waWVfZXhwYW5kX2R1cmF0aW9uOjUwfSxpLnNob3VsZEV4cGFuZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5jb25maWc7cmV0dXJuIGIuaXNEb251dFR5cGUoYSkmJmMuZG9udXRfZXhwYW5kfHxiLmlzR2F1Z2VUeXBlKGEpJiZjLmdhdWdlX2V4cGFuZHx8Yi5pc1BpZVR5cGUoYSkmJmMucGllX2V4cGFuZH0saS5zaG91bGRTaG93QXJjTGFiZWw9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5jb25maWcsYz0hMDtyZXR1cm4gYS5oYXNUeXBlKCJkb251dCIpP2M9Yi5kb251dF9sYWJlbF9zaG93OmEuaGFzVHlwZSgicGllIikmJihjPWIucGllX2xhYmVsX3Nob3cpLGN9LGkubWVldHNBcmNMYWJlbFRocmVzaG9sZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5jb25maWcsZD1iLmhhc1R5cGUoImRvbnV0Iik/Yy5kb251dF9sYWJlbF90aHJlc2hvbGQ6Yy5waWVfbGFiZWxfdGhyZXNob2xkO3JldHVybiBhPj1kfSxpLmdldEFyY0xhYmVsRm9ybWF0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY29uZmlnLGM9Yi5waWVfbGFiZWxfZm9ybWF0O3JldHVybiBhLmhhc1R5cGUoImdhdWdlIik/Yz1iLmdhdWdlX2xhYmVsX2Zvcm1hdDphLmhhc1R5cGUoImRvbnV0IikmJihjPWIuZG9udXRfbGFiZWxfZm9ybWF0KSxjfSxpLmdldEFyY1RpdGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm4gYS5oYXNUeXBlKCJkb251dCIpP2EuY29uZmlnLmRvbnV0X3RpdGxlOiIifSxpLnVwZGF0ZVRhcmdldHNGb3JBcmM9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPXRoaXMsZT1kLm1haW4sZj1kLmNsYXNzQ2hhcnRBcmMuYmluZChkKSxnPWQuY2xhc3NBcmNzLmJpbmQoZCksaD1kLmNsYXNzRm9jdXMuYmluZChkKTtiPWUuc2VsZWN0KCIuIitsLmNoYXJ0QXJjcykuc2VsZWN0QWxsKCIuIitsLmNoYXJ0QXJjKS5kYXRhKGQucGllKGEpKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYSl7cmV0dXJuIGYoYSkraChhLmRhdGEpfSksYz1iLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGYpLGMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGcpLGMuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHkiLGQuaGFzVHlwZSgiZ2F1Z2UiKT8iLS4xZW0iOiIuMzVlbSIpLnN0eWxlKCJvcGFjaXR5IiwwKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIil9LGkuaW5pdEFyYz1mdW5jdGlvbigpe3ZhciBhPXRoaXM7YS5hcmNzPWEubWFpbi5zZWxlY3QoIi4iK2wuY2hhcnQpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsLmNoYXJ0QXJjcykuYXR0cigidHJhbnNmb3JtIixhLmdldFRyYW5zbGF0ZSgiYXJjIikpLGEuYXJjcy5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsbC5jaGFydEFyY3NUaXRsZSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChhLmdldEFyY1RpdGxlKCkpfSxpLnJlZHJhd0FyYz1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZT10aGlzLGY9ZS5kMyxnPWUuY29uZmlnLGg9ZS5tYWluO2Q9aC5zZWxlY3RBbGwoIi4iK2wuYXJjcykuc2VsZWN0QWxsKCIuIitsLmFyYykuZGF0YShlLmFyY0RhdGEuYmluZChlKSksZC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixlLmNsYXNzQXJjLmJpbmQoZSkpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihhKXtyZXR1cm4gZS5jb2xvcihhLmRhdGEpfSkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24oYSl7cmV0dXJuIGcuaW50ZXJhY3Rpb25fZW5hYmxlZCYmZy5kYXRhX3NlbGVjdGlvbl9pc3NlbGVjdGFibGUoYSk/InBvaW50ZXIiOm51bGx9KS5zdHlsZSgib3BhY2l0eSIsMCkuZWFjaChmdW5jdGlvbihhKXtlLmlzR2F1Z2VUeXBlKGEuZGF0YSkmJihhLnN0YXJ0QW5nbGU9YS5lbmRBbmdsZT1nLmdhdWdlX3N0YXJ0aW5nQW5nbGUpLHRoaXMuX2N1cnJlbnQ9YX0pLGQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihhKXtyZXR1cm4hZS5pc0dhdWdlVHlwZShhLmRhdGEpJiZjPyJzY2FsZSgwKSI6IiJ9KS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT10aGlzLl9jdXJyZW50PzA6MX0pLm9uKCJtb3VzZW92ZXIiLGcuaW50ZXJhY3Rpb25fZW5hYmxlZD9mdW5jdGlvbihhKXt2YXIgYixjO2UudHJhbnNpdGluZ3x8KGI9ZS51cGRhdGVBbmdsZShhKSxiJiYoYz1lLmNvbnZlcnRUb0FyY0RhdGEoYiksZS5leHBhbmRBcmMoYi5kYXRhLmlkKSxlLmFwaS5mb2N1cyhiLmRhdGEuaWQpLGUudG9nZ2xlRm9jdXNMZWdlbmQoYi5kYXRhLmlkLCEwKSxlLmNvbmZpZy5kYXRhX29ubW91c2VvdmVyKGMsdGhpcykpKX06bnVsbCkub24oIm1vdXNlbW92ZSIsZy5pbnRlcmFjdGlvbl9lbmFibGVkP2Z1bmN0aW9uKGEpe3ZhciBiLGMsZD1lLnVwZGF0ZUFuZ2xlKGEpO2QmJihiPWUuY29udmVydFRvQXJjRGF0YShkKSxjPVtiXSxlLnNob3dUb29sdGlwKGMsdGhpcykpfTpudWxsKS5vbigibW91c2VvdXQiLGcuaW50ZXJhY3Rpb25fZW5hYmxlZD9mdW5jdGlvbihhKXt2YXIgYixjO2UudHJhbnNpdGluZ3x8KGI9ZS51cGRhdGVBbmdsZShhKSxiJiYoYz1lLmNvbnZlcnRUb0FyY0RhdGEoYiksZS51bmV4cGFuZEFyYyhiLmRhdGEuaWQpLGUuYXBpLnJldmVydCgpLGUucmV2ZXJ0TGVnZW5kKCksZS5oaWRlVG9vbHRpcCgpLGUuY29uZmlnLmRhdGFfb25tb3VzZW91dChjLHRoaXMpKSl9Om51bGwpLm9uKCJjbGljayIsZy5pbnRlcmFjdGlvbl9lbmFibGVkP2Z1bmN0aW9uKGEsYil7dmFyIGMsZD1lLnVwZGF0ZUFuZ2xlKGEpO2QmJihjPWUuY29udmVydFRvQXJjRGF0YShkKSxlLnRvZ2dsZVNoYXBlJiZlLnRvZ2dsZVNoYXBlKHRoaXMsYyxiKSxlLmNvbmZpZy5kYXRhX29uY2xpY2suY2FsbChlLmFwaSxjLHRoaXMpKX06bnVsbCkuZWFjaChmdW5jdGlvbigpe2UudHJhbnNpdGluZz0hMH0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKGEpe3ZhciBiLGM9ZS51cGRhdGVBbmdsZShhKTtyZXR1cm4gYz8oaXNOYU4odGhpcy5fY3VycmVudC5zdGFydEFuZ2xlKSYmKHRoaXMuX2N1cnJlbnQuc3RhcnRBbmdsZT0wKSxpc05hTih0aGlzLl9jdXJyZW50LmVuZEFuZ2xlKSYmKHRoaXMuX2N1cnJlbnQuZW5kQW5nbGU9dGhpcy5fY3VycmVudC5zdGFydEFuZ2xlKSxiPWYuaW50ZXJwb2xhdGUodGhpcy5fY3VycmVudCxjKSx0aGlzLl9jdXJyZW50PWIoMCksZnVuY3Rpb24oYyl7dmFyIGQ9YihjKTtyZXR1cm4gZC5kYXRhPWEuZGF0YSxlLmdldEFyYyhkLCEwKX0pOmZ1bmN0aW9uKCl7cmV0dXJuIk0gMCAwIn19KS5hdHRyKCJ0cmFuc2Zvcm0iLGM/InNjYWxlKDEpIjoiIikuc3R5bGUoImZpbGwiLGZ1bmN0aW9uKGEpe3JldHVybiBlLmxldmVsQ29sb3I/ZS5sZXZlbENvbG9yKGEuZGF0YS52YWx1ZXNbMF0udmFsdWUpOmUuY29sb3IoYS5kYXRhLmlkKX0pLnN0eWxlKCJvcGFjaXR5IiwxKS5jYWxsKGUuZW5kYWxsLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW5nPSExfSksZC5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGIpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxoLnNlbGVjdEFsbCgiLiIrbC5jaGFydEFyYykuc2VsZWN0KCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLDApLmF0dHIoImNsYXNzIixmdW5jdGlvbihhKXtyZXR1cm4gZS5pc0dhdWdlVHlwZShhLmRhdGEpP2wuZ2F1Z2VWYWx1ZToiIn0pLnRleHQoZS50ZXh0Rm9yQXJjTGFiZWwuYmluZChlKSkuYXR0cigidHJhbnNmb3JtIixlLnRyYW5zZm9ybUZvckFyY0xhYmVsLmJpbmQoZSkpLnN0eWxlKCJmb250LXNpemUiLGZ1bmN0aW9uKGEpe3JldHVybiBlLmlzR2F1Z2VUeXBlKGEuZGF0YSk/TWF0aC5yb3VuZChlLnJhZGl1cy81KSsicHgiOiIifSkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbihhKXtyZXR1cm4gZS5pc1RhcmdldFRvU2hvdyhhLmRhdGEuaWQpJiZlLmlzQXJjVHlwZShhLmRhdGEpPzE6MH0pLGguc2VsZWN0KCIuIitsLmNoYXJ0QXJjc1RpdGxlKS5zdHlsZSgib3BhY2l0eSIsZS5oYXNUeXBlKCJkb251dCIpfHxlLmhhc1R5cGUoImdhdWdlIik/MTowKSxlLmhhc1R5cGUoImdhdWdlIikmJihlLmFyY3Muc2VsZWN0KCIuIitsLmNoYXJ0QXJjc0JhY2tncm91bmQpLmF0dHIoImQiLGZ1bmN0aW9uKCl7dmFyIGE9e2RhdGE6W3t2YWx1ZTpnLmdhdWdlX21heH1dLHN0YXJ0QW5nbGU6Zy5nYXVnZV9zdGFydGluZ0FuZ2xlLGVuZEFuZ2xlOi0xKmcuZ2F1Z2Vfc3RhcnRpbmdBbmdsZX07cmV0dXJuIGUuZ2V0QXJjKGEsITAsITApfSksZS5hcmNzLnNlbGVjdCgiLiIrbC5jaGFydEFyY3NHYXVnZVVuaXQpLmF0dHIoImR5IiwiLjc1ZW0iKS50ZXh0KGcuZ2F1Z2VfbGFiZWxfc2hvdz9nLmdhdWdlX3VuaXRzOiIiKSxlLmFyY3Muc2VsZWN0KCIuIitsLmNoYXJ0QXJjc0dhdWdlTWluKS5hdHRyKCJkeCIsLTEqKGUuaW5uZXJSYWRpdXMrKGUucmFkaXVzLWUuaW5uZXJSYWRpdXMpLyhnLmdhdWdlX2Z1bGxDaXJjbGU/MToyKSkrInB4IikuYXR0cigiZHkiLCIxLjJlbSIpLnRleHQoZy5nYXVnZV9sYWJlbF9zaG93P2cuZ2F1Z2VfbWluOiIiKSxlLmFyY3Muc2VsZWN0KCIuIitsLmNoYXJ0QXJjc0dhdWdlTWF4KS5hdHRyKCJkeCIsZS5pbm5lclJhZGl1cysoZS5yYWRpdXMtZS5pbm5lclJhZGl1cykvKGcuZ2F1Z2VfZnVsbENpcmNsZT8xOjIpKyJweCIpLmF0dHIoImR5IiwiMS4yZW0iKS50ZXh0KGcuZ2F1Z2VfbGFiZWxfc2hvdz9nLmdhdWdlX21heDoiIikpfSxpLmluaXRHYXVnZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYXJjczt0aGlzLmhhc1R5cGUoImdhdWdlIikmJihhLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixsLmNoYXJ0QXJjc0JhY2tncm91bmQpLGEuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGwuY2hhcnRBcmNzR2F1Z2VVbml0KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJub25lIiksYS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsbC5jaGFydEFyY3NHYXVnZU1pbikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLGEuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLGwuY2hhcnRBcmNzR2F1Z2VNYXgpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSl9LGkuZ2V0R2F1Z2VMYWJlbEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmZpZy5nYXVnZV9sYWJlbF9zaG93PzIwOjB9LGkuaW5pdFJlZ2lvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXM7YS5yZWdpb249YS5tYWluLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsYS5jbGlwUGF0aCkuYXR0cigiY2xhc3MiLGwucmVnaW9ucyl9LGkudXBkYXRlUmVnaW9uPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZztiLnJlZ2lvbi5zdHlsZSgidmlzaWJpbGl0eSIsYi5oYXNBcmNUeXBlKCk/ImhpZGRlbiI6InZpc2libGUiKSxiLm1haW5SZWdpb249Yi5tYWluLnNlbGVjdCgiLiIrbC5yZWdpb25zKS5zZWxlY3RBbGwoIi4iK2wucmVnaW9uKS5kYXRhKGMucmVnaW9ucyksYi5tYWluUmVnaW9uLmVudGVyKCkuYXBwZW5kKCJnIikuYXBwZW5kKCJyZWN0Iikuc3R5bGUoImZpbGwtb3BhY2l0eSIsMCksYi5tYWluUmVnaW9uLmF0dHIoImNsYXNzIixiLmNsYXNzUmVnaW9uLmJpbmQoYikpLGIubWFpblJlZ2lvbi5leGl0KCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKGEpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0saS5yZWRyYXdSZWdpb249ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIubWFpblJlZ2lvbi5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9Yi5kMy5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5kYXR1bSgpO2IuZDMuc2VsZWN0KHRoaXMpLmRhdHVtKGEpfSksZD1iLnJlZ2lvblguYmluZChiKSxlPWIucmVnaW9uWS5iaW5kKGIpLGY9Yi5yZWdpb25XaWR0aC5iaW5kKGIpLGc9Yi5yZWdpb25IZWlnaHQuYmluZChiKTtyZXR1cm5bKGE/Yy50cmFuc2l0aW9uKCk6YykuYXR0cigieCIsZCkuYXR0cigieSIsZSkuYXR0cigid2lkdGgiLGYpLmF0dHIoImhlaWdodCIsZykuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24oYSl7cmV0dXJuIG0oYS5vcGFjaXR5KT9hLm9wYWNpdHk6LjF9KV19LGkucmVnaW9uWD1mdW5jdGlvbihhKXt2YXIgYixjPXRoaXMsZD1jLmNvbmZpZyxlPSJ5Ij09PWEuYXhpcz9jLnk6Yy55MjtyZXR1cm4gYj0ieSI9PT1hLmF4aXN8fCJ5MiI9PT1hLmF4aXM/ZC5heGlzX3JvdGF0ZWQmJiJzdGFydCJpbiBhP2UoYS5zdGFydCk6MDpkLmF4aXNfcm90YXRlZD8wOiJzdGFydCJpbiBhP2MueChjLmlzVGltZVNlcmllcygpP2MucGFyc2VEYXRlKGEuc3RhcnQpOmEuc3RhcnQpOjB9LGkucmVnaW9uWT1mdW5jdGlvbihhKXt2YXIgYixjPXRoaXMsZD1jLmNvbmZpZyxlPSJ5Ij09PWEuYXhpcz9jLnk6Yy55MjtyZXR1cm4gYj0ieSI9PT1hLmF4aXN8fCJ5MiI9PT1hLmF4aXM/ZC5heGlzX3JvdGF0ZWQ/MDoiZW5kImluIGE/ZShhLmVuZCk6MDpkLmF4aXNfcm90YXRlZCYmInN0YXJ0ImluIGE/Yy54KGMuaXNUaW1lU2VyaWVzKCk/Yy5wYXJzZURhdGUoYS5zdGFydCk6YS5zdGFydCk6MH0saS5yZWdpb25XaWR0aD1mdW5jdGlvbihhKXt2YXIgYixjPXRoaXMsZD1jLmNvbmZpZyxlPWMucmVnaW9uWChhKSxmPSJ5Ij09PWEuYXhpcz9jLnk6Yy55MjtyZXR1cm4gYj0ieSI9PT1hLmF4aXN8fCJ5MiI9PT1hLmF4aXM/ZC5heGlzX3JvdGF0ZWQmJiJlbmQiaW4gYT9mKGEuZW5kKTpjLndpZHRoOmQuYXhpc19yb3RhdGVkP2Mud2lkdGg6ImVuZCJpbiBhP2MueChjLmlzVGltZVNlcmllcygpP2MucGFyc2VEYXRlKGEuZW5kKTphLmVuZCk6Yy53aWR0aCxlPmI/MDpiLWV9LGkucmVnaW9uSGVpZ2h0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9dGhpcyxkPWMuY29uZmlnLGU9dGhpcy5yZWdpb25ZKGEpLGY9InkiPT09YS5heGlzP2MueTpjLnkyO3JldHVybiBiPSJ5Ij09PWEuYXhpc3x8InkyIj09PWEuYXhpcz9kLmF4aXNfcm90YXRlZD9jLmhlaWdodDoic3RhcnQiaW4gYT9mKGEuc3RhcnQpOmMuaGVpZ2h0OmQuYXhpc19yb3RhdGVkJiYiZW5kImluIGE/Yy54KGMuaXNUaW1lU2VyaWVzKCk/Yy5wYXJzZURhdGUoYS5lbmQpOmEuZW5kKTpjLmhlaWdodCxlPmI/MDpiLWV9LGkuaXNSZWdpb25Pblg9ZnVuY3Rpb24oYSl7cmV0dXJuIWEuYXhpc3x8IngiPT09YS5heGlzfSxpLmRyYWc9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqPXRoaXMsaz1qLmNvbmZpZyxtPWoubWFpbixuPWouZDM7ai5oYXNBcmNUeXBlKCl8fGsuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmKGsuem9vbV9lbmFibGVkJiYhai56b29tLmFsdERvbWFpbnx8ay5kYXRhX3NlbGVjdGlvbl9tdWx0aXBsZSYmKGI9ai5kcmFnU3RhcnRbMF0sYz1qLmRyYWdTdGFydFsxXSxkPWFbMF0sZT1hWzFdLGY9TWF0aC5taW4oYixkKSxnPU1hdGgubWF4KGIsZCksaD1rLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWQ/ai5tYXJnaW4udG9wOk1hdGgubWluKGMsZSksaT1rLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWQ/ai5oZWlnaHQ6TWF0aC5tYXgoYyxlKSxtLnNlbGVjdCgiLiIrbC5kcmFnYXJlYSkuYXR0cigieCIsZikuYXR0cigieSIsaCkuYXR0cigid2lkdGgiLGctZikuYXR0cigiaGVpZ2h0IixpLWgpLG0uc2VsZWN0QWxsKCIuIitsLnNoYXBlcykuc2VsZWN0QWxsKCIuIitsLnNoYXBlKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGsuZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGEpfSkuZWFjaChmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxrLG0sbyxwPW4uc2VsZWN0KHRoaXMpLHE9cC5jbGFzc2VkKGwuU0VMRUNURUQpLHI9cC5jbGFzc2VkKGwuSU5DTFVERUQpLHM9ITE7aWYocC5jbGFzc2VkKGwuY2lyY2xlKSljPTEqcC5hdHRyKCJjeCIpLGQ9MSpwLmF0dHIoImN5IiksbT1qLnRvZ2dsZVBvaW50LHM9Yz5mJiZnPmMmJmQ+aCYmaT5kO2Vsc2V7aWYoIXAuY2xhc3NlZChsLmJhcikpcmV0dXJuO289eih0aGlzKSxjPW8ueCxkPW8ueSxlPW8ud2lkdGgsaz1vLmhlaWdodCxtPWoudG9nZ2xlUGF0aCxzPSEoYz5nfHxmPmMrZXx8ZD5pfHxoPmQrayl9c15yJiYocC5jbGFzc2VkKGwuSU5DTFVERUQsIXIpLHAuY2xhc3NlZChsLlNFTEVDVEVELCFxKSxtLmNhbGwoaiwhcSxwLGEsYikpfSkpKX0saS5kcmFnc3RhcnQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPWIuY29uZmlnO2IuaGFzQXJjVHlwZSgpfHxjLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJihiLmRyYWdTdGFydD1hLGIubWFpbi5zZWxlY3QoIi4iK2wuY2hhcnQpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixsLmRyYWdhcmVhKS5zdHlsZSgib3BhY2l0eSIsLjEpLGIuZHJhZ2dpbmc9ITApfSxpLmRyYWdlbmQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9YS5jb25maWc7YS5oYXNBcmNUeXBlKCl8fGIuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmKGEubWFpbi5zZWxlY3QoIi4iK2wuZHJhZ2FyZWEpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxhLm1haW4uc2VsZWN0QWxsKCIuIitsLnNoYXBlKS5jbGFzc2VkKGwuSU5DTFVERUQsITEpLGEuZHJhZ2dpbmc9ITEpfSxpLnNlbGVjdFBvaW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9ZC5jb25maWcsZj0oZS5heGlzX3JvdGF0ZWQ/ZC5jaXJjbGVZOmQuY2lyY2xlWCkuYmluZChkKSxnPShlLmF4aXNfcm90YXRlZD9kLmNpcmNsZVg6ZC5jaXJjbGVZKS5iaW5kKGQpLGg9ZC5wb2ludFNlbGVjdFIuYmluZChkKTtlLmRhdGFfb25zZWxlY3RlZC5jYWxsKGQuYXBpLGIsYS5ub2RlKCkpLGQubWFpbi5zZWxlY3QoIi4iK2wuc2VsZWN0ZWRDaXJjbGVzK2QuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoYi5pZCkpLnNlbGVjdEFsbCgiLiIrbC5zZWxlY3RlZENpcmNsZSsiLSIrYykuZGF0YShbYl0pLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5nZW5lcmF0ZUNsYXNzKGwuc2VsZWN0ZWRDaXJjbGUsYyl9KS5hdHRyKCJjeCIsZikuYXR0cigiY3kiLGcpLmF0dHIoInN0cm9rZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jb2xvcihiKX0pLmF0dHIoInIiLGZ1bmN0aW9uKGEpe3JldHVybiAxLjQqZC5wb2ludFNlbGVjdFIoYSl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5hdHRyKCJyIixoKX0saS51bnNlbGVjdFBvaW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzO2QuY29uZmlnLmRhdGFfb251bnNlbGVjdGVkLmNhbGwoZC5hcGksYixhLm5vZGUoKSksZC5tYWluLnNlbGVjdCgiLiIrbC5zZWxlY3RlZENpcmNsZXMrZC5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChiLmlkKSkuc2VsZWN0QWxsKCIuIitsLnNlbGVjdGVkQ2lyY2xlKyItIitjKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5hdHRyKCJyIiwwKS5yZW1vdmUoKX0saS50b2dnbGVQb2ludD1mdW5jdGlvbihhLGIsYyxkKXthP3RoaXMuc2VsZWN0UG9pbnQoYixjLGQpOnRoaXMudW5zZWxlY3RQb2ludChiLGMsZCl9LGkuc2VsZWN0UGF0aD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Yy5jb25maWcuZGF0YV9vbnNlbGVjdGVkLmNhbGwoYyxiLGEubm9kZSgpKSxjLmNvbmZpZy5pbnRlcmFjdGlvbl9icmlnaHRlbiYmYS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTAwKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYy5kMy5yZ2IoYy5jb2xvcihiKSkuYnJpZ2h0ZXIoLjc1KX0pfSxpLnVuc2VsZWN0UGF0aD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7Yy5jb25maWcuZGF0YV9vbnVuc2VsZWN0ZWQuY2FsbChjLGIsYS5ub2RlKCkpLGMuY29uZmlnLmludGVyYWN0aW9uX2JyaWdodGVuJiZhLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJmaWxsIixmdW5jdGlvbigpe3JldHVybiBjLmNvbG9yKGIpfSl9LGkudG9nZ2xlUGF0aD1mdW5jdGlvbihhLGIsYyxkKXthP3RoaXMuc2VsZWN0UGF0aChiLGMsZCk6dGhpcy51bnNlbGVjdFBhdGgoYixjLGQpfSxpLmdldFRvZ2dsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9dGhpcztyZXR1cm4iY2lyY2xlIj09PWEubm9kZU5hbWU/Yz1kLmlzU3RlcFR5cGUoYik/ZnVuY3Rpb24oKXt9OmQudG9nZ2xlUG9pbnQ6InBhdGgiPT09YS5ub2RlTmFtZSYmKGM9ZC50b2dnbGVQYXRoKSxjfSxpLnRvZ2dsZVNoYXBlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9ZC5kMyxmPWQuY29uZmlnLGc9ZS5zZWxlY3QoYSksaD1nLmNsYXNzZWQobC5TRUxFQ1RFRCksaT1kLmdldFRvZ2dsZShhLGIpLmJpbmQoZCk7Zi5kYXRhX3NlbGVjdGlvbl9lbmFibGVkJiZmLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShiKSYmKGYuZGF0YV9zZWxlY3Rpb25fbXVsdGlwbGV8fGQubWFpbi5zZWxlY3RBbGwoIi4iK2wuc2hhcGVzKyhmLmRhdGFfc2VsZWN0aW9uX2dyb3VwZWQ/ZC5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChiLmlkKToiIikpLnNlbGVjdEFsbCgiLiIrbC5zaGFwZSkuZWFjaChmdW5jdGlvbihhLGIpe3ZhciBjPWUuc2VsZWN0KHRoaXMpO2MuY2xhc3NlZChsLlNFTEVDVEVEKSYmaSghMSxjLmNsYXNzZWQobC5TRUxFQ1RFRCwhMSksYSxiKX0pLGcuY2xhc3NlZChsLlNFTEVDVEVELCFoKSxpKCFoLGcsYixjKSl9LGkuaW5pdEJydXNoPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuZDM7YS5icnVzaD1iLnN2Zy5icnVzaCgpLm9uKCJicnVzaCIsZnVuY3Rpb24oKXthLnJlZHJhd0ZvckJydXNoKCl9KSxhLmJydXNoLnVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiBhLmNvbnRleHQmJmEuY29udGV4dC5zZWxlY3QoIi4iK2wuYnJ1c2gpLmNhbGwodGhpcyksdGhpc30sYS5icnVzaC5zY2FsZT1mdW5jdGlvbihiKXtyZXR1cm4gYS5jb25maWcuYXhpc19yb3RhdGVkP3RoaXMueShiKTp0aGlzLngoYil9fSxpLmluaXRTdWJjaGFydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZyxjPWEuY29udGV4dD1hLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VHJhbnNsYXRlKCJjb250ZXh0IikpLGQ9Yi5zdWJjaGFydF9zaG93PyJ2aXNpYmxlIjoiaGlkZGVuIjtjLnN0eWxlKCJ2aXNpYmlsaXR5IixkKSxjLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsYS5jbGlwUGF0aEZvclN1YmNoYXJ0KS5hdHRyKCJjbGFzcyIsbC5jaGFydCksYy5zZWxlY3QoIi4iK2wuY2hhcnQpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsLmNoYXJ0QmFycyksYy5zZWxlY3QoIi4iK2wuY2hhcnQpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsLmNoYXJ0TGluZXMpLGMuYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIixhLmNsaXBQYXRoKS5hdHRyKCJjbGFzcyIsbC5icnVzaCkuY2FsbChhLmJydXNoKSxhLmF4ZXMuc3VieD1jLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixsLmF4aXNYKS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VHJhbnNsYXRlKCJzdWJ4IikpLmF0dHIoImNsaXAtcGF0aCIsYi5heGlzX3JvdGF0ZWQ/IiI6YS5jbGlwUGF0aEZvclhBeGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsYi5zdWJjaGFydF9heGlzX3hfc2hvdz9kOiJoaWRkZW4iKX0saS51cGRhdGVUYXJnZXRzRm9yU3ViY2hhcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZj10aGlzLGc9Zi5jb250ZXh0LGg9Zi5jb25maWcsaT1mLmNsYXNzQ2hhcnRCYXIuYmluZChmKSxqPWYuY2xhc3NCYXJzLmJpbmQoZiksaz1mLmNsYXNzQ2hhcnRMaW5lLmJpbmQoZiksbT1mLmNsYXNzTGluZXMuYmluZChmKSxuPWYuY2xhc3NBcmVhcy5iaW5kKGYpO2guc3ViY2hhcnRfc2hvdyYmKGU9Zy5zZWxlY3QoIi4iK2wuY2hhcnRCYXJzKS5zZWxlY3RBbGwoIi4iK2wuY2hhcnRCYXIpLmRhdGEoYSkuYXR0cigiY2xhc3MiLGkpLGQ9ZS5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJvcGFjaXR5IiwwKS5hdHRyKCJjbGFzcyIsaSksZC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsaiksYz1nLnNlbGVjdCgiLiIrbC5jaGFydExpbmVzKS5zZWxlY3RBbGwoIi4iK2wuY2hhcnRMaW5lKS5kYXRhKGEpLmF0dHIoImNsYXNzIixrKSxiPWMuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgib3BhY2l0eSIsMCkuYXR0cigiY2xhc3MiLGspLGIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG0pLGIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLG4pLGcuc2VsZWN0QWxsKCIuIitsLmJydXNoKyIgcmVjdCIpLmF0dHIoaC5heGlzX3JvdGF0ZWQ/IndpZHRoIjoiaGVpZ2h0IixoLmF4aXNfcm90YXRlZD9mLndpZHRoMjpmLmhlaWdodDIpKX0saS51cGRhdGVCYXJGb3JTdWJjaGFydD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2IuY29udGV4dEJhcj1iLmNvbnRleHQuc2VsZWN0QWxsKCIuIitsLmJhcnMpLnNlbGVjdEFsbCgiLiIrbC5iYXIpLmRhdGEoYi5iYXJEYXRhLmJpbmQoYikpLGIuY29udGV4dEJhci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixiLmNsYXNzQmFyLmJpbmQoYikpLnN0eWxlKCJzdHJva2UiLCJub25lIikuc3R5bGUoImZpbGwiLGIuY29sb3IpLGIuY29udGV4dEJhci5zdHlsZSgib3BhY2l0eSIsYi5pbml0aWFsT3BhY2l0eS5iaW5kKGIpKSxiLmNvbnRleHRCYXIuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9LGkucmVkcmF3QmFyRm9yU3ViY2hhcnQ9ZnVuY3Rpb24oYSxiLGMpeyhiP3RoaXMuY29udGV4dEJhci50cmFuc2l0aW9uKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSkuZHVyYXRpb24oYyk6dGhpcy5jb250ZXh0QmFyKS5hdHRyKCJkIixhKS5zdHlsZSgib3BhY2l0eSIsMSl9LGkudXBkYXRlTGluZUZvclN1YmNoYXJ0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7Yi5jb250ZXh0TGluZT1iLmNvbnRleHQuc2VsZWN0QWxsKCIuIitsLmxpbmVzKS5zZWxlY3RBbGwoIi4iK2wubGluZSkuZGF0YShiLmxpbmVEYXRhLmJpbmQoYikpLGIuY29udGV4dExpbmUuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsYi5jbGFzc0xpbmUuYmluZChiKSkuc3R5bGUoInN0cm9rZSIsYi5jb2xvciksYi5jb250ZXh0TGluZS5zdHlsZSgib3BhY2l0eSIsYi5pbml0aWFsT3BhY2l0eS5iaW5kKGIpKSxiLmNvbnRleHRMaW5lLmV4aXQoKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfSxpLnJlZHJhd0xpbmVGb3JTdWJjaGFydD1mdW5jdGlvbihhLGIsYyl7KGI/dGhpcy5jb250ZXh0TGluZS50cmFuc2l0aW9uKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSkuZHVyYXRpb24oYyk6dGhpcy5jb250ZXh0TGluZSkuYXR0cigiZCIsYSkuc3R5bGUoIm9wYWNpdHkiLDEpfSxpLnVwZGF0ZUFyZWFGb3JTdWJjaGFydD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5kMztiLmNvbnRleHRBcmVhPWIuY29udGV4dC5zZWxlY3RBbGwoIi4iK2wuYXJlYXMpLnNlbGVjdEFsbCgiLiIrbC5hcmVhKS5kYXRhKGIubGluZURhdGEuYmluZChiKSksYi5jb250ZXh0QXJlYS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixiLmNsYXNzQXJlYS5iaW5kKGIpKS5zdHlsZSgiZmlsbCIsYi5jb2xvcikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGIub3JnQXJlYU9wYWNpdHk9K2Muc2VsZWN0KHRoaXMpLnN0eWxlKCJvcGFjaXR5IiksMH0pLGIuY29udGV4dEFyZWEuc3R5bGUoIm9wYWNpdHkiLDApLGIuY29udGV4dEFyZWEuZXhpdCgpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihhKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCl9LGkucmVkcmF3QXJlYUZvclN1YmNoYXJ0PWZ1bmN0aW9uKGEsYixjKXsoYj90aGlzLmNvbnRleHRBcmVhLnRyYW5zaXRpb24oTWF0aC5yYW5kb20oKS50b1N0cmluZygpKS5kdXJhdGlvbihjKTp0aGlzLmNvbnRleHRBcmVhKS5hdHRyKCJkIixhKS5zdHlsZSgiZmlsbCIsdGhpcy5jb2xvcikuc3R5bGUoIm9wYWNpdHkiLHRoaXMub3JnQXJlYU9wYWNpdHkpfSxpLnJlZHJhd1N1YmNoYXJ0PWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoLGksaixrPXRoaXMsbD1rLmQzLG09ay5jb25maWc7ay5jb250ZXh0LnN0eWxlKCJ2aXNpYmlsaXR5IixtLnN1YmNoYXJ0X3Nob3c/InZpc2libGUiOiJoaWRkZW4iKSxtLnN1YmNoYXJ0X3Nob3cmJihsLmV2ZW50JiYiem9vbSI9PT1sLmV2ZW50LnR5cGUmJmsuYnJ1c2guZXh0ZW50KGsueC5vcmdEb21haW4oKSkudXBkYXRlKCksYSYmKGsuYnJ1c2guZW1wdHkoKXx8ay5icnVzaC5leHRlbnQoay54Lm9yZ0RvbWFpbigpKS51cGRhdGUoKSxoPWsuZ2VuZXJhdGVEcmF3QXJlYShlLCEwKSxpPWsuZ2VuZXJhdGVEcmF3QmFyKGYsITApLGo9ay5nZW5lcmF0ZURyYXdMaW5lKGcsITApLGsudXBkYXRlQmFyRm9yU3ViY2hhcnQoYyksay51cGRhdGVMaW5lRm9yU3ViY2hhcnQoYyksay51cGRhdGVBcmVhRm9yU3ViY2hhcnQoYyksay5yZWRyYXdCYXJGb3JTdWJjaGFydChpLGMsYyksay5yZWRyYXdMaW5lRm9yU3ViY2hhcnQoaixjLGMpLGsucmVkcmF3QXJlYUZvclN1YmNoYXJ0KGgsYyxjKSkpfSxpLnJlZHJhd0ZvckJydXNoPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEueDthLnJlZHJhdyh7d2l0aFRyYW5zaXRpb246ITEsd2l0aFk6YS5jb25maWcuem9vbV9yZXNjYWxlLHdpdGhTdWJjaGFydDohMSx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoRGltZW5zaW9uOiExfSksYS5jb25maWcuc3ViY2hhcnRfb25icnVzaC5jYWxsKGEuYXBpLGIub3JnRG9tYWluKCkpfSxpLnRyYW5zZm9ybUNvbnRleHQ9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXRoaXM7YiYmYi5heGlzU3ViWD9jPWIuYXhpc1N1Ylg6KGM9ZC5jb250ZXh0LnNlbGVjdCgiLiIrbC5heGlzWCksYSYmKGM9Yy50cmFuc2l0aW9uKCkpKSxkLmNvbnRleHQuYXR0cigidHJhbnNmb3JtIixkLmdldFRyYW5zbGF0ZSgiY29udGV4dCIpKSxjLmF0dHIoInRyYW5zZm9ybSIsZC5nZXRUcmFuc2xhdGUoInN1YngiKSl9LGkuZ2V0RGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZyxjPW4oYi5heGlzX3hfZXh0ZW50KT9iLmF4aXNfeF9leHRlbnQoYS5nZXRYRG9tYWluKGEuZGF0YS50YXJnZXRzKSk6Yi5heGlzX3hfZXh0ZW50O3JldHVybiBhLmlzVGltZVNlcmllcygpJiYoYz1bYS5wYXJzZURhdGUoY1swXSksYS5wYXJzZURhdGUoY1sxXSldKSxjfSxpLmluaXRab29tPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLGM9Yi5kMyxkPWIuY29uZmlnO2Iuem9vbT1jLmJlaGF2aW9yLnpvb20oKS5vbigiem9vbXN0YXJ0IixmdW5jdGlvbigpe2E9Yy5ldmVudC5zb3VyY2VFdmVudCxiLnpvb20uYWx0RG9tYWluPWMuZXZlbnQuc291cmNlRXZlbnQuYWx0S2V5P2IueC5vcmdEb21haW4oKTpudWxsLGQuem9vbV9vbnpvb21zdGFydC5jYWxsKGIuYXBpLGMuZXZlbnQuc291cmNlRXZlbnQpfSkub24oInpvb20iLGZ1bmN0aW9uKCl7Yi5yZWRyYXdGb3Jab29tLmNhbGwoYil9KS5vbigiem9vbWVuZCIsZnVuY3Rpb24oKXt2YXIgZT1jLmV2ZW50LnNvdXJjZUV2ZW50O2UmJmEuY2xpZW50WD09PWUuY2xpZW50WCYmYS5jbGllbnRZPT09ZS5jbGllbnRZfHwoYi5yZWRyYXdFdmVudFJlY3QoKSxiLnVwZGF0ZVpvb20oKSxkLnpvb21fb256b29tZW5kLmNhbGwoYi5hcGksYi54Lm9yZ0RvbWFpbigpKSl9KSxiLnpvb20uc2NhbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuYXhpc19yb3RhdGVkP3RoaXMueShhKTp0aGlzLngoYSl9LGIuem9vbS5vcmdTY2FsZUV4dGVudD1mdW5jdGlvbigpe3ZhciBhPWQuem9vbV9leHRlbnQ/ZC56b29tX2V4dGVudDpbMSwxMF07cmV0dXJuW2FbMF0sTWF0aC5tYXgoYi5nZXRNYXhEYXRhQ291bnQoKS9hWzFdLGFbMV0pXX0sYi56b29tLnVwZGF0ZVNjYWxlRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dChiLngub3JnRG9tYWluKCkpL3QoYi5nZXRab29tRG9tYWluKCkpLGM9dGhpcy5vcmdTY2FsZUV4dGVudCgpO3JldHVybiB0aGlzLnNjYWxlRXh0ZW50KFtjWzBdKmEsY1sxXSphXSksdGhpc319LGkuZ2V0Wm9vbURvbWFpbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZyxjPWEuZDMsZD1jLm1pbihbYS5vcmdYRG9tYWluWzBdLGIuem9vbV94X21pbl0pLGU9Yy5tYXgoW2Eub3JnWERvbWFpblsxXSxiLnpvb21feF9tYXhdKTtyZXR1cm5bZCxlXX0saS51cGRhdGVab29tPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY29uZmlnLnpvb21fZW5hYmxlZD9hLnpvb206ZnVuY3Rpb24oKXt9O2EubWFpbi5zZWxlY3QoIi4iK2wuem9vbVJlY3QpLmNhbGwoYikub24oImRibGNsaWNrLnpvb20iLG51bGwpLGEubWFpbi5zZWxlY3RBbGwoIi4iK2wuZXZlbnRSZWN0KS5jYWxsKGIpLm9uKCJkYmxjbGljay56b29tIixudWxsKX0saS5yZWRyYXdGb3Jab29tPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuZDMsYz1hLmNvbmZpZyxkPWEuem9vbSxlPWEueDtpZihjLnpvb21fZW5hYmxlZCYmMCE9PWEuZmlsdGVyVGFyZ2V0c1RvU2hvdyhhLmRhdGEudGFyZ2V0cykubGVuZ3RoKXtpZigibW91c2Vtb3ZlIj09PWIuZXZlbnQuc291cmNlRXZlbnQudHlwZSYmZC5hbHREb21haW4pcmV0dXJuIGUuZG9tYWluKGQuYWx0RG9tYWluKSx2b2lkIGQuc2NhbGUoZSkudXBkYXRlU2NhbGVFeHRlbnQoKTthLmlzQ2F0ZWdvcml6ZWQoKSYmZS5vcmdEb21haW4oKVswXT09PWEub3JnWERvbWFpblswXSYmZS5kb21haW4oW2Eub3JnWERvbWFpblswXS0xZS0xMCxlLm9yZ0RvbWFpbigpWzFdXSksYS5yZWRyYXcoe3dpdGhUcmFuc2l0aW9uOiExLHdpdGhZOmMuem9vbV9yZXNjYWxlLHdpdGhTdWJjaGFydDohMSx3aXRoRXZlbnRSZWN0OiExLHdpdGhEaW1lbnNpb246ITF9KSwibW91c2Vtb3ZlIj09PWIuZXZlbnQuc291cmNlRXZlbnQudHlwZSYmKGEuY2FuY2VsQ2xpY2s9ITApLGMuem9vbV9vbnpvb20uY2FsbChhLmFwaSxlLm9yZ0RvbWFpbigpKX19LGkuZ2VuZXJhdGVDb2xvcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYj1hLmNvbmZpZyxjPWEuZDMsZD1iLmRhdGFfY29sb3JzLGU9dihiLmNvbG9yX3BhdHRlcm4pP2IuY29sb3JfcGF0dGVybjpjLnNjYWxlLmNhdGVnb3J5MTAoKS5yYW5nZSgpLGY9Yi5kYXRhX2NvbG9yLGc9W107cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBiLGM9YS5pZHx8YS5kYXRhJiZhLmRhdGEuaWR8fGE7cmV0dXJuIGRbY11pbnN0YW5jZW9mIEZ1bmN0aW9uP2I9ZFtjXShhKTpkW2NdP2I9ZFtjXTooZy5pbmRleE9mKGMpPDAmJmcucHVzaChjKSxiPWVbZy5pbmRleE9mKGMpJWUubGVuZ3RoXSxkW2NdPWIpLGYgaW5zdGFuY2VvZiBGdW5jdGlvbj9mKGIsYSk6Yn19LGkuZ2VuZXJhdGVMZXZlbENvbG9yPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPWEuY29uZmlnLGM9Yi5jb2xvcl9wYXR0ZXJuLGQ9Yi5jb2xvcl90aHJlc2hvbGQsZT0idmFsdWUiPT09ZC51bml0LGY9ZC52YWx1ZXMmJmQudmFsdWVzLmxlbmd0aD9kLnZhbHVlczpbXSxnPWQubWF4fHwxMDA7cmV0dXJuIHYoYi5jb2xvcl90aHJlc2hvbGQpP2Z1bmN0aW9uKGEpe3ZhciBiLGQsaD1jW2MubGVuZ3RoLTFdO2ZvcihiPTA7YjxmLmxlbmd0aDtiKyspaWYoZD1lP2E6MTAwKmEvZyxkPGZbYl0pe2g9Y1tiXTticmVha31yZXR1cm4gaH06bnVsbH0saS5nZXRZRm9ybWF0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1hJiYhYi5oYXNUeXBlKCJnYXVnZSIpP2IuZGVmYXVsdEFyY1ZhbHVlRm9ybWF0OmIueUZvcm1hdCxkPWEmJiFiLmhhc1R5cGUoImdhdWdlIik/Yi5kZWZhdWx0QXJjVmFsdWVGb3JtYXQ6Yi55MkZvcm1hdDtyZXR1cm4gZnVuY3Rpb24oYSxlLGYpe3ZhciBnPSJ5MiI9PT1iLmF4aXMuZ2V0SWQoZik/ZDpjO3JldHVybiBnLmNhbGwoYixhLGUpfX0saS55Rm9ybWF0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZyxkPWMuYXhpc195X3RpY2tfZm9ybWF0P2MuYXhpc195X3RpY2tfZm9ybWF0OmIuZGVmYXVsdFZhbHVlRm9ybWF0O3JldHVybiBkKGEpfSxpLnkyRm9ybWF0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1iLmNvbmZpZyxkPWMuYXhpc195Ml90aWNrX2Zvcm1hdD9jLmF4aXNfeTJfdGlja19mb3JtYXQ6Yi5kZWZhdWx0VmFsdWVGb3JtYXQ7cmV0dXJuIGQoYSl9LGkuZGVmYXVsdFZhbHVlRm9ybWF0PWZ1bmN0aW9uKGEpe3JldHVybiBtKGEpPythOiIifSxpLmRlZmF1bHRBcmNWYWx1ZUZvcm1hdD1mdW5jdGlvbihhLGIpe3JldHVybigxMDAqYikudG9GaXhlZCgxKSsiJSJ9LGkuZGF0YUxhYmVsRm9ybWF0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9dGhpcyxkPWMuY29uZmlnLmRhdGFfbGFiZWxzLGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG0oYSk/K2E6IiJ9O3JldHVybiBiPSJmdW5jdGlvbiI9PXR5cGVvZiBkLmZvcm1hdD9kLmZvcm1hdDoib2JqZWN0Ij09dHlwZW9mIGQuZm9ybWF0P2QuZm9ybWF0W2FdP2QuZm9ybWF0W2FdPT09ITA/ZTpkLmZvcm1hdFthXTpmdW5jdGlvbigpe3JldHVybiIifTplfSxpLmhhc0NhY2hlcz1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoO2IrKylpZighKGFbYl1pbiB0aGlzLmNhY2hlKSlyZXR1cm4hMTtyZXR1cm4hMH0saS5hZGRDYWNoZT1mdW5jdGlvbihhLGIpe3RoaXMuY2FjaGVbYV09dGhpcy5jbG9uZVRhcmdldChiKX0saS5nZXRDYWNoZXM9ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWFbYl1pbiB0aGlzLmNhY2hlJiZjLnB1c2godGhpcy5jbG9uZVRhcmdldCh0aGlzLmNhY2hlW2FbYl1dKSk7cmV0dXJuIGN9O3ZhciBsPWkuQ0xBU1M9e3RhcmdldDoiYzMtdGFyZ2V0IixjaGFydDoiYzMtY2hhcnQiLGNoYXJ0TGluZToiYzMtY2hhcnQtbGluZSIsY2hhcnRMaW5lczoiYzMtY2hhcnQtbGluZXMiLGNoYXJ0QmFyOiJjMy1jaGFydC1iYXIiLGNoYXJ0QmFyczoiYzMtY2hhcnQtYmFycyIsY2hhcnRUZXh0OiJjMy1jaGFydC10ZXh0IixjaGFydFRleHRzOiJjMy1jaGFydC10ZXh0cyIsY2hhcnRBcmM6ImMzLWNoYXJ0LWFyYyIsY2hhcnRBcmNzOiJjMy1jaGFydC1hcmNzIixjaGFydEFyY3NUaXRsZToiYzMtY2hhcnQtYXJjcy10aXRsZSIsY2hhcnRBcmNzQmFja2dyb3VuZDoiYzMtY2hhcnQtYXJjcy1iYWNrZ3JvdW5kIixjaGFydEFyY3NHYXVnZVVuaXQ6ImMzLWNoYXJ0LWFyY3MtZ2F1Z2UtdW5pdCIsY2hhcnRBcmNzR2F1Z2VNYXg6ImMzLWNoYXJ0LWFyY3MtZ2F1Z2UtbWF4IixjaGFydEFyY3NHYXVnZU1pbjoiYzMtY2hhcnQtYXJjcy1nYXVnZS1taW4iLHNlbGVjdGVkQ2lyY2xlOiJjMy1zZWxlY3RlZC1jaXJjbGUiLHNlbGVjdGVkQ2lyY2xlczoiYzMtc2VsZWN0ZWQtY2lyY2xlcyIsZXZlbnRSZWN0OiJjMy1ldmVudC1yZWN0IixldmVudFJlY3RzOiJjMy1ldmVudC1yZWN0cyIsZXZlbnRSZWN0c1NpbmdsZToiYzMtZXZlbnQtcmVjdHMtc2luZ2xlIixldmVudFJlY3RzTXVsdGlwbGU6ImMzLWV2ZW50LXJlY3RzLW11bHRpcGxlIix6b29tUmVjdDoiYzMtem9vbS1yZWN0IixicnVzaDoiYzMtYnJ1c2giLGZvY3VzZWQ6ImMzLWZvY3VzZWQiLGRlZm9jdXNlZDoiYzMtZGVmb2N1c2VkIixyZWdpb246ImMzLXJlZ2lvbiIscmVnaW9uczoiYzMtcmVnaW9ucyIsdGl0bGU6ImMzLXRpdGxlIix0b29sdGlwQ29udGFpbmVyOiJjMy10b29sdGlwLWNvbnRhaW5lciIsdG9vbHRpcDoiYzMtdG9vbHRpcCIsdG9vbHRpcE5hbWU6ImMzLXRvb2x0aXAtbmFtZSIsc2hhcGU6ImMzLXNoYXBlIixzaGFwZXM6ImMzLXNoYXBlcyIsbGluZToiYzMtbGluZSIsbGluZXM6ImMzLWxpbmVzIixiYXI6ImMzLWJhciIsYmFyczoiYzMtYmFycyIsY2lyY2xlOiJjMy1jaXJjbGUiLGNpcmNsZXM6ImMzLWNpcmNsZXMiLGFyYzoiYzMtYXJjIixhcmNzOiJjMy1hcmNzIixhcmVhOiJjMy1hcmVhIixhcmVhczoiYzMtYXJlYXMiLGVtcHR5OiJjMy1lbXB0eSIsdGV4dDoiYzMtdGV4dCIsdGV4dHM6ImMzLXRleHRzIixnYXVnZVZhbHVlOiJjMy1nYXVnZS12YWx1ZSIsZ3JpZDoiYzMtZ3JpZCIsZ3JpZExpbmVzOiJjMy1ncmlkLWxpbmVzIix4Z3JpZDoiYzMteGdyaWQiLHhncmlkczoiYzMteGdyaWRzIix4Z3JpZExpbmU6ImMzLXhncmlkLWxpbmUiLHhncmlkTGluZXM6ImMzLXhncmlkLWxpbmVzIix4Z3JpZEZvY3VzOiJjMy14Z3JpZC1mb2N1cyIseWdyaWQ6ImMzLXlncmlkIix5Z3JpZHM6ImMzLXlncmlkcyIseWdyaWRMaW5lOiJjMy15Z3JpZC1saW5lIix5Z3JpZExpbmVzOiJjMy15Z3JpZC1saW5lcyIsYXhpczoiYzMtYXhpcyIsYXhpc1g6ImMzLWF4aXMteCIsYXhpc1hMYWJlbDoiYzMtYXhpcy14LWxhYmVsIixheGlzWToiYzMtYXhpcy15IixheGlzWUxhYmVsOiJjMy1heGlzLXktbGFiZWwiLGF4aXNZMjoiYzMtYXhpcy15MiIsYXhpc1kyTGFiZWw6ImMzLWF4aXMteTItbGFiZWwiLGxlZ2VuZEJhY2tncm91bmQ6ImMzLWxlZ2VuZC1iYWNrZ3JvdW5kIixsZWdlbmRJdGVtOiJjMy1sZWdlbmQtaXRlbSIsbGVnZW5kSXRlbUV2ZW50OiJjMy1sZWdlbmQtaXRlbS1ldmVudCIsbGVnZW5kSXRlbVRpbGU6ImMzLWxlZ2VuZC1pdGVtLXRpbGUiLGxlZ2VuZEl0ZW1IaWRkZW46ImMzLWxlZ2VuZC1pdGVtLWhpZGRlbiIsbGVnZW5kSXRlbUZvY3VzZWQ6ImMzLWxlZ2VuZC1pdGVtLWZvY3VzZWQiLGRyYWdhcmVhOiJjMy1kcmFnYXJlYSIsRVhQQU5ERUQ6Il9leHBhbmRlZF8iLFNFTEVDVEVEOiJfc2VsZWN0ZWRfIixJTkNMVURFRDoiX2luY2x1ZGVkXyJ9O2kuZ2VuZXJhdGVDbGFzcz1mdW5jdGlvbihhLGIpe3JldHVybiIgIithKyIgIithK3RoaXMuZ2V0VGFyZ2V0U2VsZWN0b3JTdWZmaXgoYil9LGkuY2xhc3NUZXh0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3MobC50ZXh0LGEuaW5kZXgpfSxpLmNsYXNzVGV4dHM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhsLnRleHRzLGEuaWQpfSxpLmNsYXNzU2hhcGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhsLnNoYXBlLGEuaW5kZXgpfSxpLmNsYXNzU2hhcGVzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdlbmVyYXRlQ2xhc3MobC5zaGFwZXMsYS5pZCl9LGkuY2xhc3NMaW5lPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoYSkrdGhpcy5nZW5lcmF0ZUNsYXNzKGwubGluZSxhLmlkKX0saS5jbGFzc0xpbmVzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsYXNzU2hhcGVzKGEpK3RoaXMuZ2VuZXJhdGVDbGFzcyhsLmxpbmVzLGEuaWQpfSxpLmNsYXNzQ2lyY2xlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoYSkrdGhpcy5nZW5lcmF0ZUNsYXNzKGwuY2lyY2xlLGEuaW5kZXgpfSxpLmNsYXNzQ2lyY2xlcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhhKSt0aGlzLmdlbmVyYXRlQ2xhc3MobC5jaXJjbGVzLGEuaWQpfSxpLmNsYXNzQmFyPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoYSkrdGhpcy5nZW5lcmF0ZUNsYXNzKGwuYmFyLGEuaW5kZXgpfSxpLmNsYXNzQmFycz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jbGFzc1NoYXBlcyhhKSt0aGlzLmdlbmVyYXRlQ2xhc3MobC5iYXJzLGEuaWQpfSxpLmNsYXNzQXJjPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoYS5kYXRhKSt0aGlzLmdlbmVyYXRlQ2xhc3MobC5hcmMsYS5kYXRhLmlkKX0saS5jbGFzc0FyY3M9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY2xhc3NTaGFwZXMoYS5kYXRhKSt0aGlzLmdlbmVyYXRlQ2xhc3MobC5hcmNzLGEuZGF0YS5pZCl9LGkuY2xhc3NBcmVhPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsYXNzU2hhcGUoYSkrdGhpcy5nZW5lcmF0ZUNsYXNzKGwuYXJlYSxhLmlkKX0saS5jbGFzc0FyZWFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNsYXNzU2hhcGVzKGEpK3RoaXMuZ2VuZXJhdGVDbGFzcyhsLmFyZWFzLGEuaWQpfSxpLmNsYXNzUmVnaW9uPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhsLnJlZ2lvbixiKSsiICIrKCJjbGFzcyJpbiBhP2FbImNsYXNzIl06IiIpfSxpLmNsYXNzRXZlbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ2VuZXJhdGVDbGFzcyhsLmV2ZW50UmVjdCxhLmluZGV4KX0saS5jbGFzc1RhcmdldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5jb25maWcuZGF0YV9jbGFzc2VzW2FdLGQ9IiI7cmV0dXJuIGMmJihkPSIgIitsLnRhcmdldCsiLSIrYyksYi5nZW5lcmF0ZUNsYXNzKGwudGFyZ2V0LGEpK2R9LGkuY2xhc3NGb2N1cz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jbGFzc0ZvY3VzZWQoYSkrdGhpcy5jbGFzc0RlZm9jdXNlZChhKX0saS5jbGFzc0ZvY3VzZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIiAiKyh0aGlzLmZvY3VzZWRUYXJnZXRJZHMuaW5kZXhPZihhLmlkKT49MD9sLmZvY3VzZWQ6IiIpfSxpLmNsYXNzRGVmb2N1c2VkPWZ1bmN0aW9uKGEpe3JldHVybiIgIisodGhpcy5kZWZvY3VzZWRUYXJnZXRJZHMuaW5kZXhPZihhLmlkKT49MD9sLmRlZm9jdXNlZDoiIil9LGkuY2xhc3NDaGFydFRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGwuY2hhcnRUZXh0K3RoaXMuY2xhc3NUYXJnZXQoYS5pZCl9LGkuY2xhc3NDaGFydExpbmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGwuY2hhcnRMaW5lK3RoaXMuY2xhc3NUYXJnZXQoYS5pZCl9LGkuY2xhc3NDaGFydEJhcj1mdW5jdGlvbihhKXtyZXR1cm4gbC5jaGFydEJhcit0aGlzLmNsYXNzVGFyZ2V0KGEuaWQpfSxpLmNsYXNzQ2hhcnRBcmM9ZnVuY3Rpb24oYSl7cmV0dXJuIGwuY2hhcnRBcmMrdGhpcy5jbGFzc1RhcmdldChhLmRhdGEuaWQpfSxpLmdldFRhcmdldFNlbGVjdG9yU3VmZml4PWZ1bmN0aW9uKGEpe3JldHVybiBhfHwwPT09YT8oIi0iK2EpLnJlcGxhY2UoL1tccz8hQCMkJV4mKigpXz0rLC48PiciOjtcW1xdXC98fmB7fVxcXS9nLCItIik6IiJ9LGkuc2VsZWN0b3JUYXJnZXQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4oYnx8IiIpKyIuIitsLnRhcmdldCt0aGlzLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGEpfSxpLnNlbGVjdG9yVGFyZ2V0cz1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGE9YXx8W10sYS5sZW5ndGg/YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2VsZWN0b3JUYXJnZXQoYSxiKX0pOm51bGx9LGkuc2VsZWN0b3JMZWdlbmQ9ZnVuY3Rpb24oYSl7cmV0dXJuIi4iK2wubGVnZW5kSXRlbSt0aGlzLmdldFRhcmdldFNlbGVjdG9yU3VmZml4KGEpfSxpLnNlbGVjdG9yTGVnZW5kcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3JldHVybiBhJiZhLmxlbmd0aD9hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYi5zZWxlY3RvckxlZ2VuZChhKX0pOm51bGx9O3ZhciBtPWkuaXNWYWx1ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXx8MD09PWF9LG49aS5pc0Z1bmN0aW9uPWZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBhfSxvPWkuaXNTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhfSxwPWkuaXNVbmRlZmluZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBhfSxxPWkuaXNEZWZpbmVkPWZ1bmN0aW9uKGEpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYX0scj1pLmNlaWwxMD1mdW5jdGlvbihhKXtyZXR1cm4gMTAqTWF0aC5jZWlsKGEvMTApfSxzPWkuYXNIYWxmUGl4ZWw9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguY2VpbChhKSsuNX0sdD1pLmRpZmZEb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV0tYVswXX0sdT1pLmlzRW1wdHk9ZnVuY3Rpb24oYSl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBhfHxudWxsPT09YXx8byhhKSYmMD09PWEubGVuZ3RofHwib2JqZWN0Ij09dHlwZW9mIGEmJjA9PT1PYmplY3Qua2V5cyhhKS5sZW5ndGh9LHY9aS5ub3RFbXB0eT1mdW5jdGlvbihhKXtyZXR1cm4haS5pc0VtcHR5KGEpfSx3PWkuZ2V0T3B0aW9uPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gcShhW2JdKT9hW2JdOmN9LHg9aS5oYXNWYWx1ZT1mdW5jdGlvbihhLGIpe3ZhciBjPSExO3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2FbZF09PT1iJiYoYz0hMCl9KSxjfSx5PWkuc2FuaXRpc2U9ZnVuY3Rpb24oYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP2EucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iik6YX0sej1pLmdldFBhdGhCb3g9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPVthLnBhdGhTZWdMaXN0LmdldEl0ZW0oMCksYS5wYXRoU2VnTGlzdC5nZXRJdGVtKDEpXSxkPWNbMF0ueCxlPU1hdGgubWluKGNbMF0ueSxjWzFdLnkpO3JldHVybnt4OmQseTplLHdpZHRoOmIud2lkdGgsaGVpZ2h0OmIuaGVpZ2h0fX07aC5mb2N1cz1mdW5jdGlvbihhKXt2YXIgYixjPXRoaXMuaW50ZXJuYWw7YT1jLm1hcFRvVGFyZ2V0SWRzKGEpLGI9Yy5zdmcuc2VsZWN0QWxsKGMuc2VsZWN0b3JUYXJnZXRzKGEuZmlsdGVyKGMuaXNUYXJnZXRUb1Nob3csYykpKSx0aGlzLnJldmVydCgpLHRoaXMuZGVmb2N1cygpLGIuY2xhc3NlZChsLmZvY3VzZWQsITApLmNsYXNzZWQobC5kZWZvY3VzZWQsITEpLA0KYy5oYXNBcmNUeXBlKCkmJmMuZXhwYW5kQXJjKGEpLGMudG9nZ2xlRm9jdXNMZWdlbmQoYSwhMCksYy5mb2N1c2VkVGFyZ2V0SWRzPWEsYy5kZWZvY3VzZWRUYXJnZXRJZHM9Yy5kZWZvY3VzZWRUYXJnZXRJZHMuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBhLmluZGV4T2YoYik8MH0pfSxoLmRlZm9jdXM9ZnVuY3Rpb24oYSl7dmFyIGIsYz10aGlzLmludGVybmFsO2E9Yy5tYXBUb1RhcmdldElkcyhhKSxiPWMuc3ZnLnNlbGVjdEFsbChjLnNlbGVjdG9yVGFyZ2V0cyhhLmZpbHRlcihjLmlzVGFyZ2V0VG9TaG93LGMpKSksYi5jbGFzc2VkKGwuZm9jdXNlZCwhMSkuY2xhc3NlZChsLmRlZm9jdXNlZCwhMCksYy5oYXNBcmNUeXBlKCkmJmMudW5leHBhbmRBcmMoYSksYy50b2dnbGVGb2N1c0xlZ2VuZChhLCExKSxjLmZvY3VzZWRUYXJnZXRJZHM9Yy5mb2N1c2VkVGFyZ2V0SWRzLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYS5pbmRleE9mKGIpPDB9KSxjLmRlZm9jdXNlZFRhcmdldElkcz1hfSxoLnJldmVydD1mdW5jdGlvbihhKXt2YXIgYixjPXRoaXMuaW50ZXJuYWw7YT1jLm1hcFRvVGFyZ2V0SWRzKGEpLGI9Yy5zdmcuc2VsZWN0QWxsKGMuc2VsZWN0b3JUYXJnZXRzKGEpKSxiLmNsYXNzZWQobC5mb2N1c2VkLCExKS5jbGFzc2VkKGwuZGVmb2N1c2VkLCExKSxjLmhhc0FyY1R5cGUoKSYmYy51bmV4cGFuZEFyYyhhKSxjLmNvbmZpZy5sZWdlbmRfc2hvdyYmKGMuc2hvd0xlZ2VuZChhLmZpbHRlcihjLmlzTGVnZW5kVG9TaG93LmJpbmQoYykpKSxjLmxlZ2VuZC5zZWxlY3RBbGwoYy5zZWxlY3RvckxlZ2VuZHMoYSkpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBjLmQzLnNlbGVjdCh0aGlzKS5jbGFzc2VkKGwubGVnZW5kSXRlbUZvY3VzZWQpfSkuY2xhc3NlZChsLmxlZ2VuZEl0ZW1Gb2N1c2VkLCExKSksYy5mb2N1c2VkVGFyZ2V0SWRzPVtdLGMuZGVmb2N1c2VkVGFyZ2V0SWRzPVtdfSxoLnNob3c9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXRoaXMuaW50ZXJuYWw7YT1kLm1hcFRvVGFyZ2V0SWRzKGEpLGI9Ynx8e30sZC5yZW1vdmVIaWRkZW5UYXJnZXRJZHMoYSksYz1kLnN2Zy5zZWxlY3RBbGwoZC5zZWxlY3RvclRhcmdldHMoYSkpLGMudHJhbnNpdGlvbigpLnN0eWxlKCJvcGFjaXR5IiwxLCJpbXBvcnRhbnQiKS5jYWxsKGQuZW5kYWxsLGZ1bmN0aW9uKCl7Yy5zdHlsZSgib3BhY2l0eSIsbnVsbCkuc3R5bGUoIm9wYWNpdHkiLDEpfSksYi53aXRoTGVnZW5kJiZkLnNob3dMZWdlbmQoYSksZC5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwLHdpdGhMZWdlbmQ6ITB9KX0saC5oaWRlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD10aGlzLmludGVybmFsO2E9ZC5tYXBUb1RhcmdldElkcyhhKSxiPWJ8fHt9LGQuYWRkSGlkZGVuVGFyZ2V0SWRzKGEpLGM9ZC5zdmcuc2VsZWN0QWxsKGQuc2VsZWN0b3JUYXJnZXRzKGEpKSxjLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCwiaW1wb3J0YW50IikuY2FsbChkLmVuZGFsbCxmdW5jdGlvbigpe2Muc3R5bGUoIm9wYWNpdHkiLG51bGwpLnN0eWxlKCJvcGFjaXR5IiwwKX0pLGIud2l0aExlZ2VuZCYmZC5oaWRlTGVnZW5kKGEpLGQucmVkcmF3KHt3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVXBkYXRlWERvbWFpbjohMCx3aXRoTGVnZW5kOiEwfSl9LGgudG9nZ2xlPWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPXRoaXMuaW50ZXJuYWw7ZC5tYXBUb1RhcmdldElkcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2QuaXNUYXJnZXRUb1Nob3coYSk/Yy5oaWRlKGEsYik6Yy5zaG93KGEsYil9KX0saC56b29tPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWw7cmV0dXJuIGEmJihiLmlzVGltZVNlcmllcygpJiYoYT1hLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYi5wYXJzZURhdGUoYSl9KSksYi5icnVzaC5leHRlbnQoYSksYi5yZWRyYXcoe3dpdGhVcGRhdGVYRG9tYWluOiEwLHdpdGhZOmIuY29uZmlnLnpvb21fcmVzY2FsZX0pLGIuY29uZmlnLnpvb21fb256b29tLmNhbGwodGhpcyxiLngub3JnRG9tYWluKCkpKSxiLmJydXNoLmV4dGVudCgpfSxoLnpvb20uZW5hYmxlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWw7Yi5jb25maWcuem9vbV9lbmFibGVkPWEsYi51cGRhdGVBbmRSZWRyYXcoKX0saC51bnpvb209ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmludGVybmFsO2EuYnJ1c2guY2xlYXIoKS51cGRhdGUoKSxhLnJlZHJhdyh7d2l0aFVwZGF0ZVhEb21haW46ITB9KX0saC56b29tLm1heD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsLGM9Yi5jb25maWcsZD1iLmQzO3JldHVybiAwPT09YXx8YT92b2lkKGMuem9vbV94X21heD1kLm1heChbYi5vcmdYRG9tYWluWzFdLGFdKSk6Yy56b29tX3hfbWF4fSxoLnpvb20ubWluPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWwsYz1iLmNvbmZpZyxkPWIuZDM7cmV0dXJuIDA9PT1hfHxhP3ZvaWQoYy56b29tX3hfbWluPWQubWluKFtiLm9yZ1hEb21haW5bMF0sYV0pKTpjLnpvb21feF9taW59LGguem9vbS5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocShhLm1heCkmJnRoaXMuZG9tYWluLm1heChhLm1heCksdm9pZChxKGEubWluKSYmdGhpcy5kb21haW4ubWluKGEubWluKSkpOnttYXg6dGhpcy5kb21haW4ubWF4KCksbWluOnRoaXMuZG9tYWluLm1pbigpfX0saC5sb2FkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWwsYz1iLmNvbmZpZztyZXR1cm4gYS54cyYmYi5hZGRYcyhhLnhzKSwibmFtZXMiaW4gYSYmaC5kYXRhLm5hbWVzLmJpbmQodGhpcykoYS5uYW1lcyksImNsYXNzZXMiaW4gYSYmT2JqZWN0LmtleXMoYS5jbGFzc2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2MuZGF0YV9jbGFzc2VzW2JdPWEuY2xhc3Nlc1tiXX0pLCJjYXRlZ29yaWVzImluIGEmJmIuaXNDYXRlZ29yaXplZCgpJiYoYy5heGlzX3hfY2F0ZWdvcmllcz1hLmNhdGVnb3JpZXMpLCJheGVzImluIGEmJk9iamVjdC5rZXlzKGEuYXhlcykuZm9yRWFjaChmdW5jdGlvbihiKXtjLmRhdGFfYXhlc1tiXT1hLmF4ZXNbYl19KSwiY29sb3JzImluIGEmJk9iamVjdC5rZXlzKGEuY29sb3JzKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2MuZGF0YV9jb2xvcnNbYl09YS5jb2xvcnNbYl19KSwiY2FjaGVJZHMiaW4gYSYmYi5oYXNDYWNoZXMoYS5jYWNoZUlkcyk/dm9pZCBiLmxvYWQoYi5nZXRDYWNoZXMoYS5jYWNoZUlkcyksYS5kb25lKTp2b2lkKCJ1bmxvYWQiaW4gYT9iLnVubG9hZChiLm1hcFRvVGFyZ2V0SWRzKCJib29sZWFuIj09dHlwZW9mIGEudW5sb2FkJiZhLnVubG9hZD9udWxsOmEudW5sb2FkKSxmdW5jdGlvbigpe2IubG9hZEZyb21BcmdzKGEpfSk6Yi5sb2FkRnJvbUFyZ3MoYSkpfSxoLnVubG9hZD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsO2E9YXx8e30sYSBpbnN0YW5jZW9mIEFycmF5P2E9e2lkczphfToic3RyaW5nIj09dHlwZW9mIGEmJihhPXtpZHM6W2FdfSksYi51bmxvYWQoYi5tYXBUb1RhcmdldElkcyhhLmlkcyksZnVuY3Rpb24oKXtiLnJlZHJhdyh7d2l0aFVwZGF0ZU9yZ1hEb21haW46ITAsd2l0aFVwZGF0ZVhEb21haW46ITAsd2l0aExlZ2VuZDohMH0pLGEuZG9uZSYmYS5kb25lKCl9KX0saC5mbG93PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaj10aGlzLmludGVybmFsLGs9W10sbD1qLmdldE1heERhdGFDb3VudCgpLG49MCxvPTA7aWYoYS5qc29uKWM9ai5jb252ZXJ0SnNvblRvRGF0YShhLmpzb24sYS5rZXlzKTtlbHNlIGlmKGEucm93cyljPWouY29udmVydFJvd3NUb0RhdGEoYS5yb3dzKTtlbHNle2lmKCFhLmNvbHVtbnMpcmV0dXJuO2M9ai5jb252ZXJ0Q29sdW1uc1RvRGF0YShhLmNvbHVtbnMpfWI9ai5jb252ZXJ0RGF0YVRvVGFyZ2V0cyhjLCEwKSxqLmRhdGEudGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjLGQsZT0hMTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGEuaWQ9PT1iW2NdLmlkKXtmb3IoZT0hMCxhLnZhbHVlc1thLnZhbHVlcy5sZW5ndGgtMV0mJihvPWEudmFsdWVzW2EudmFsdWVzLmxlbmd0aC0xXS5pbmRleCsxKSxuPWJbY10udmFsdWVzLmxlbmd0aCxkPTA7bj5kO2QrKyliW2NdLnZhbHVlc1tkXS5pbmRleD1vK2Qsai5pc1RpbWVTZXJpZXMoKXx8KGJbY10udmFsdWVzW2RdLng9bytkKTthLnZhbHVlcz1hLnZhbHVlcy5jb25jYXQoYltjXS52YWx1ZXMpLGIuc3BsaWNlKGMsMSk7YnJlYWt9ZXx8ay5wdXNoKGEuaWQpfSksai5kYXRhLnRhcmdldHMuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYixjO2ZvcihiPTA7YjxrLmxlbmd0aDtiKyspaWYoYS5pZD09PWtbYl0pZm9yKG89YS52YWx1ZXNbYS52YWx1ZXMubGVuZ3RoLTFdLmluZGV4KzEsYz0wO24+YztjKyspYS52YWx1ZXMucHVzaCh7aWQ6YS5pZCxpbmRleDpvK2MseDpqLmlzVGltZVNlcmllcygpP2ouZ2V0T3RoZXJUYXJnZXRYKG8rYyk6bytjLHZhbHVlOm51bGx9KX0pLGouZGF0YS50YXJnZXRzLmxlbmd0aCYmYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiLGM9W107Zm9yKGI9ai5kYXRhLnRhcmdldHNbMF0udmFsdWVzWzBdLmluZGV4O28+YjtiKyspYy5wdXNoKHtpZDphLmlkLGluZGV4OmIseDpqLmlzVGltZVNlcmllcygpP2ouZ2V0T3RoZXJUYXJnZXRYKGIpOmIsdmFsdWU6bnVsbH0pO2EudmFsdWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pbmRleCs9byxqLmlzVGltZVNlcmllcygpfHwoYS54Kz1vKX0pLGEudmFsdWVzPWMuY29uY2F0KGEudmFsdWVzKX0pLGouZGF0YS50YXJnZXRzPWouZGF0YS50YXJnZXRzLmNvbmNhdChiKSxkPWouZ2V0TWF4RGF0YUNvdW50KCksZj1qLmRhdGEudGFyZ2V0c1swXSxnPWYudmFsdWVzWzBdLHEoYS50byk/KG49MCxpPWouaXNUaW1lU2VyaWVzKCk/ai5wYXJzZURhdGUoYS50byk6YS50byxmLnZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EueDxpJiZuKyt9KSk6cShhLmxlbmd0aCkmJihuPWEubGVuZ3RoKSxsPzE9PT1sJiZqLmlzVGltZVNlcmllcygpJiYoaD0oZi52YWx1ZXNbZi52YWx1ZXMubGVuZ3RoLTFdLngtZy54KS8yLGU9W25ldyBEYXRlKCtnLngtaCksbmV3IERhdGUoK2cueCtoKV0sai51cGRhdGVYRG9tYWluKG51bGwsITAsITAsITEsZSkpOihoPWouaXNUaW1lU2VyaWVzKCk/Zi52YWx1ZXMubGVuZ3RoPjE/Zi52YWx1ZXNbZi52YWx1ZXMubGVuZ3RoLTFdLngtZy54OmcueC1qLmdldFhEb21haW4oai5kYXRhLnRhcmdldHMpWzBdOjEsZT1bZy54LWgsZy54XSxqLnVwZGF0ZVhEb21haW4obnVsbCwhMCwhMCwhMSxlKSksai51cGRhdGVUYXJnZXRzKGouZGF0YS50YXJnZXRzKSxqLnJlZHJhdyh7Zmxvdzp7aW5kZXg6Zy5pbmRleCxsZW5ndGg6bixkdXJhdGlvbjptKGEuZHVyYXRpb24pP2EuZHVyYXRpb246ai5jb25maWcudHJhbnNpdGlvbl9kdXJhdGlvbixkb25lOmEuZG9uZSxvcmdEYXRhQ291bnQ6bH0sd2l0aExlZ2VuZDohMCx3aXRoVHJhbnNpdGlvbjpsPjEsd2l0aFRyaW1YRG9tYWluOiExLHdpdGhVcGRhdGVYQXhpczohMH0pfSxpLmdlbmVyYXRlRmxvdz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9Yi5jb25maWcsZD1iLmQzO3JldHVybiBmdW5jdGlvbigpe3ZhciBlLGYsZyxoPWEudGFyZ2V0cyxpPWEuZmxvdyxqPWEuZHJhd0JhcixrPWEuZHJhd0xpbmUsbT1hLmRyYXdBcmVhLG49YS5jeCxvPWEuY3kscD1hLnh2LHE9YS54Rm9yVGV4dCxyPWEueUZvclRleHQscz1hLmR1cmF0aW9uLHU9MSx2PWkuaW5kZXgsdz1pLmxlbmd0aCx4PWIuZ2V0VmFsdWVPbkluZGV4KGIuZGF0YS50YXJnZXRzWzBdLnZhbHVlcyx2KSx5PWIuZ2V0VmFsdWVPbkluZGV4KGIuZGF0YS50YXJnZXRzWzBdLnZhbHVlcyx2K3cpLHo9Yi54LmRvbWFpbigpLEE9aS5kdXJhdGlvbnx8cyxCPWkuZG9uZXx8ZnVuY3Rpb24oKXt9LEM9Yi5nZW5lcmF0ZVdhaXQoKSxEPWIueGdyaWR8fGQuc2VsZWN0QWxsKFtdKSxFPWIueGdyaWRMaW5lc3x8ZC5zZWxlY3RBbGwoW10pLEY9Yi5tYWluUmVnaW9ufHxkLnNlbGVjdEFsbChbXSksRz1iLm1haW5UZXh0fHxkLnNlbGVjdEFsbChbXSksSD1iLm1haW5CYXJ8fGQuc2VsZWN0QWxsKFtdKSxJPWIubWFpbkxpbmV8fGQuc2VsZWN0QWxsKFtdKSxKPWIubWFpbkFyZWF8fGQuc2VsZWN0QWxsKFtdKSxLPWIubWFpbkNpcmNsZXx8ZC5zZWxlY3RBbGwoW10pO2IuZmxvd2luZz0hMCxiLmRhdGEudGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudmFsdWVzLnNwbGljZSgwLHcpfSksZz1iLnVwZGF0ZVhEb21haW4oaCwhMCwhMCksYi51cGRhdGVYR3JpZCYmYi51cGRhdGVYR3JpZCghMCksaS5vcmdEYXRhQ291bnQ/ZT0xPT09aS5vcmdEYXRhQ291bnR8fCh4JiZ4LngpPT09KHkmJnkueCk/Yi54KHpbMF0pLWIueChnWzBdKTpiLmlzVGltZVNlcmllcygpP2IueCh6WzBdKS1iLngoZ1swXSk6Yi54KHgueCktYi54KHkueCk6MSE9PWIuZGF0YS50YXJnZXRzWzBdLnZhbHVlcy5sZW5ndGg/ZT1iLngoelswXSktYi54KGdbMF0pOmIuaXNUaW1lU2VyaWVzKCk/KHg9Yi5nZXRWYWx1ZU9uSW5kZXgoYi5kYXRhLnRhcmdldHNbMF0udmFsdWVzLDApLHk9Yi5nZXRWYWx1ZU9uSW5kZXgoYi5kYXRhLnRhcmdldHNbMF0udmFsdWVzLGIuZGF0YS50YXJnZXRzWzBdLnZhbHVlcy5sZW5ndGgtMSksZT1iLngoeC54KS1iLngoeS54KSk6ZT10KGcpLzIsdT10KHopL3QoZyksZj0idHJhbnNsYXRlKCIrZSsiLDApIHNjYWxlKCIrdSsiLDEpIixiLmhpZGVYR3JpZEZvY3VzKCksZC50cmFuc2l0aW9uKCkuZWFzZSgibGluZWFyIikuZHVyYXRpb24oQSkuZWFjaChmdW5jdGlvbigpe0MuYWRkKGIuYXhlcy54LnRyYW5zaXRpb24oKS5jYWxsKGIueEF4aXMpKSxDLmFkZChILnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGYpKSxDLmFkZChJLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGYpKSxDLmFkZChKLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGYpKSxDLmFkZChLLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGYpKSxDLmFkZChHLnRyYW5zaXRpb24oKS5hdHRyKCJ0cmFuc2Zvcm0iLGYpKSxDLmFkZChGLmZpbHRlcihiLmlzUmVnaW9uT25YKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixmKSksQy5hZGQoRC50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixmKSksQy5hZGQoRS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixmKSl9KS5jYWxsKEMsZnVuY3Rpb24oKXt2YXIgYSxkPVtdLGU9W10sZj1bXTtpZih3KXtmb3IoYT0wO3c+YTthKyspZC5wdXNoKCIuIitsLnNoYXBlKyItIisodithKSksZS5wdXNoKCIuIitsLnRleHQrIi0iKyh2K2EpKSxmLnB1c2goIi4iK2wuZXZlbnRSZWN0KyItIisodithKSk7Yi5zdmcuc2VsZWN0QWxsKCIuIitsLnNoYXBlcykuc2VsZWN0QWxsKGQpLnJlbW92ZSgpLGIuc3ZnLnNlbGVjdEFsbCgiLiIrbC50ZXh0cykuc2VsZWN0QWxsKGUpLnJlbW92ZSgpLGIuc3ZnLnNlbGVjdEFsbCgiLiIrbC5ldmVudFJlY3RzKS5zZWxlY3RBbGwoZikucmVtb3ZlKCksYi5zdmcuc2VsZWN0KCIuIitsLnhncmlkKS5yZW1vdmUoKX1ELmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuYXR0cihiLnhncmlkQXR0ciksRS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLEUuc2VsZWN0KCJsaW5lIikuYXR0cigieDEiLGMuYXhpc19yb3RhdGVkPzA6cCkuYXR0cigieDIiLGMuYXhpc19yb3RhdGVkP2Iud2lkdGg6cCksRS5zZWxlY3QoInRleHQiKS5hdHRyKCJ4IixjLmF4aXNfcm90YXRlZD9iLndpZHRoOjApLmF0dHIoInkiLHApLEguYXR0cigidHJhbnNmb3JtIixudWxsKS5hdHRyKCJkIixqKSxJLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuYXR0cigiZCIsayksSi5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpLmF0dHIoImQiLG0pLEsuYXR0cigidHJhbnNmb3JtIixudWxsKS5hdHRyKCJjeCIsbikuYXR0cigiY3kiLG8pLEcuYXR0cigidHJhbnNmb3JtIixudWxsKS5hdHRyKCJ4IixxKS5hdHRyKCJ5IixyKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixiLm9wYWNpdHlGb3JUZXh0LmJpbmQoYikpLEYuYXR0cigidHJhbnNmb3JtIixudWxsKSxGLnNlbGVjdCgicmVjdCIpLmZpbHRlcihiLmlzUmVnaW9uT25YKS5hdHRyKCJ4IixiLnJlZ2lvblguYmluZChiKSkuYXR0cigid2lkdGgiLGIucmVnaW9uV2lkdGguYmluZChiKSksYy5pbnRlcmFjdGlvbl9lbmFibGVkJiZiLnJlZHJhd0V2ZW50UmVjdCgpLEIoKSxiLmZsb3dpbmc9ITF9KX19LGguc2VsZWN0ZWQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcm5hbCxjPWIuZDM7cmV0dXJuIGMubWVyZ2UoYi5tYWluLnNlbGVjdEFsbCgiLiIrbC5zaGFwZXMrYi5nZXRUYXJnZXRTZWxlY3RvclN1ZmZpeChhKSkuc2VsZWN0QWxsKCIuIitsLnNoYXBlKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gYy5zZWxlY3QodGhpcykuY2xhc3NlZChsLlNFTEVDVEVEKX0pLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7dmFyIGI9YS5fX2RhdGFfXztyZXR1cm4gYi5kYXRhP2IuZGF0YTpifSl9KSl9LGguc2VsZWN0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmludGVybmFsLGU9ZC5kMyxmPWQuY29uZmlnO2YuZGF0YV9zZWxlY3Rpb25fZW5hYmxlZCYmZC5tYWluLnNlbGVjdEFsbCgiLiIrbC5zaGFwZXMpLnNlbGVjdEFsbCgiLiIrbC5zaGFwZSkuZWFjaChmdW5jdGlvbihnLGgpe3ZhciBpPWUuc2VsZWN0KHRoaXMpLGo9Zy5kYXRhP2cuZGF0YS5pZDpnLmlkLGs9ZC5nZXRUb2dnbGUodGhpcyxnKS5iaW5kKGQpLG09Zi5kYXRhX3NlbGVjdGlvbl9ncm91cGVkfHwhYXx8YS5pbmRleE9mKGopPj0wLG49IWJ8fGIuaW5kZXhPZihoKT49MCxvPWkuY2xhc3NlZChsLlNFTEVDVEVEKTtpLmNsYXNzZWQobC5saW5lKXx8aS5jbGFzc2VkKGwuYXJlYSl8fChtJiZuP2YuZGF0YV9zZWxlY3Rpb25faXNzZWxlY3RhYmxlKGcpJiYhbyYmayghMCxpLmNsYXNzZWQobC5TRUxFQ1RFRCwhMCksZyxoKTpxKGMpJiZjJiZvJiZrKCExLGkuY2xhc3NlZChsLlNFTEVDVEVELCExKSxnLGgpKX0pfSxoLnVuc2VsZWN0PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5pbnRlcm5hbCxkPWMuZDMsZT1jLmNvbmZpZztlLmRhdGFfc2VsZWN0aW9uX2VuYWJsZWQmJmMubWFpbi5zZWxlY3RBbGwoIi4iK2wuc2hhcGVzKS5zZWxlY3RBbGwoIi4iK2wuc2hhcGUpLmVhY2goZnVuY3Rpb24oZixnKXt2YXIgaD1kLnNlbGVjdCh0aGlzKSxpPWYuZGF0YT9mLmRhdGEuaWQ6Zi5pZCxqPWMuZ2V0VG9nZ2xlKHRoaXMsZikuYmluZChjKSxrPWUuZGF0YV9zZWxlY3Rpb25fZ3JvdXBlZHx8IWF8fGEuaW5kZXhPZihpKT49MCxtPSFifHxiLmluZGV4T2YoZyk+PTAsbj1oLmNsYXNzZWQobC5TRUxFQ1RFRCk7aC5jbGFzc2VkKGwubGluZSl8fGguY2xhc3NlZChsLmFyZWEpfHxrJiZtJiZlLmRhdGFfc2VsZWN0aW9uX2lzc2VsZWN0YWJsZShmKSYmbiYmaighMSxoLmNsYXNzZWQobC5TRUxFQ1RFRCwhMSksZixnKX0pfSxoLnRyYW5zZm9ybT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuaW50ZXJuYWwsZD1bInBpZSIsImRvbnV0Il0uaW5kZXhPZihhKT49MD97d2l0aFRyYW5zZm9ybTohMH06bnVsbDtjLnRyYW5zZm9ybVRvKGIsYSxkKX0saS50cmFuc2Zvcm1Ubz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcyxlPSFkLmhhc0FyY1R5cGUoKSxmPWN8fHt3aXRoVHJhbnNpdGlvbkZvckF4aXM6ZX07Zi53aXRoVHJhbnNpdGlvbkZvclRyYW5zZm9ybT0hMSxkLnRyYW5zaXRpbmc9ITEsZC5zZXRUYXJnZXRUeXBlKGEsYiksZC51cGRhdGVUYXJnZXRzKGQuZGF0YS50YXJnZXRzKSxkLnVwZGF0ZUFuZFJlZHJhdyhmKX0saC5ncm91cHM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcm5hbCxjPWIuY29uZmlnO3JldHVybiBwKGEpP2MuZGF0YV9ncm91cHM6KGMuZGF0YV9ncm91cHM9YSxiLnJlZHJhdygpLGMuZGF0YV9ncm91cHMpfSxoLnhncmlkcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsLGM9Yi5jb25maWc7cmV0dXJuIGE/KGMuZ3JpZF94X2xpbmVzPWEsYi5yZWRyYXdXaXRob3V0UmVzY2FsZSgpLGMuZ3JpZF94X2xpbmVzKTpjLmdyaWRfeF9saW5lc30saC54Z3JpZHMuYWRkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWw7cmV0dXJuIHRoaXMueGdyaWRzKGIuY29uZmlnLmdyaWRfeF9saW5lcy5jb25jYXQoYT9hOltdKSl9LGgueGdyaWRzLnJlbW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsO2IucmVtb3ZlR3JpZExpbmVzKGEsITApfSxoLnlncmlkcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsLGM9Yi5jb25maWc7cmV0dXJuIGE/KGMuZ3JpZF95X2xpbmVzPWEsYi5yZWRyYXdXaXRob3V0UmVzY2FsZSgpLGMuZ3JpZF95X2xpbmVzKTpjLmdyaWRfeV9saW5lc30saC55Z3JpZHMuYWRkPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWw7cmV0dXJuIHRoaXMueWdyaWRzKGIuY29uZmlnLmdyaWRfeV9saW5lcy5jb25jYXQoYT9hOltdKSl9LGgueWdyaWRzLnJlbW92ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsO2IucmVtb3ZlR3JpZExpbmVzKGEsITEpfSxoLnJlZ2lvbnM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcm5hbCxjPWIuY29uZmlnO3JldHVybiBhPyhjLnJlZ2lvbnM9YSxiLnJlZHJhd1dpdGhvdXRSZXNjYWxlKCksYy5yZWdpb25zKTpjLnJlZ2lvbnN9LGgucmVnaW9ucy5hZGQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcm5hbCxjPWIuY29uZmlnO3JldHVybiBhPyhjLnJlZ2lvbnM9Yy5yZWdpb25zLmNvbmNhdChhKSxiLnJlZHJhd1dpdGhvdXRSZXNjYWxlKCksYy5yZWdpb25zKTpjLnJlZ2lvbnN9LGgucmVnaW9ucy5yZW1vdmU9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9dGhpcy5pbnRlcm5hbCxmPWUuY29uZmlnO3JldHVybiBhPWF8fHt9LGI9ZS5nZXRPcHRpb24oYSwiZHVyYXRpb24iLGYudHJhbnNpdGlvbl9kdXJhdGlvbiksYz1lLmdldE9wdGlvbihhLCJjbGFzc2VzIixbbC5yZWdpb25dKSxkPWUubWFpbi5zZWxlY3QoIi4iK2wucmVnaW9ucykuc2VsZWN0QWxsKGMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiIuIithfSkpLChiP2QudHJhbnNpdGlvbigpLmR1cmF0aW9uKGIpOmQpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxmLnJlZ2lvbnM9Zi5yZWdpb25zLmZpbHRlcihmdW5jdGlvbihhKXt2YXIgYj0hMTtyZXR1cm4gYVsiY2xhc3MiXT8oYVsiY2xhc3MiXS5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oYSl7Yy5pbmRleE9mKGEpPj0wJiYoYj0hMCl9KSwhYik6ITB9KSxmLnJlZ2lvbnN9LGguZGF0YT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsLmRhdGEudGFyZ2V0cztyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGE/YjpiLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm5bXS5jb25jYXQoYSkuaW5kZXhPZihiLmlkKT49MH0pfSxoLmRhdGEuc2hvd249ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaW50ZXJuYWwuZmlsdGVyVGFyZ2V0c1RvU2hvdyh0aGlzLmRhdGEoYSkpfSxoLmRhdGEudmFsdWVzPWZ1bmN0aW9uKGEpe3ZhciBiLGM9bnVsbDtyZXR1cm4gYSYmKGI9dGhpcy5kYXRhKGEpLGM9YlswXT9iWzBdLnZhbHVlcy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEudmFsdWV9KTpudWxsKSxjfSxoLmRhdGEubmFtZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaW50ZXJuYWwuY2xlYXJMZWdlbmRJdGVtVGV4dEJveENhY2hlKCksdGhpcy5pbnRlcm5hbC51cGRhdGVEYXRhQXR0cmlidXRlcygibmFtZXMiLGEpfSxoLmRhdGEuY29sb3JzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmludGVybmFsLnVwZGF0ZURhdGFBdHRyaWJ1dGVzKCJjb2xvcnMiLGEpfSxoLmRhdGEuYXhlcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pbnRlcm5hbC51cGRhdGVEYXRhQXR0cmlidXRlcygiYXhlcyIsYSl9LGguY2F0ZWdvcnk9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmludGVybmFsLGQ9Yy5jb25maWc7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MSYmKGQuYXhpc194X2NhdGVnb3JpZXNbYV09YixjLnJlZHJhdygpKSxkLmF4aXNfeF9jYXRlZ29yaWVzW2FdfSxoLmNhdGVnb3JpZXM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcm5hbCxjPWIuY29uZmlnO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjLmF4aXNfeF9jYXRlZ29yaWVzPWEsYi5yZWRyYXcoKSxjLmF4aXNfeF9jYXRlZ29yaWVzKTpjLmF4aXNfeF9jYXRlZ29yaWVzfSxoLmNvbG9yPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWw7cmV0dXJuIGIuY29sb3IoYSl9LGgueD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsO3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiYoYi51cGRhdGVUYXJnZXRYKGIuZGF0YS50YXJnZXRzLGEpLGIucmVkcmF3KHt3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVXBkYXRlWERvbWFpbjohMH0pKSxiLmRhdGEueHN9LGgueHM9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcm5hbDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmKGIudXBkYXRlVGFyZ2V0WHMoYi5kYXRhLnRhcmdldHMsYSksYi5yZWRyYXcoe3dpdGhVcGRhdGVPcmdYRG9tYWluOiEwLHdpdGhVcGRhdGVYRG9tYWluOiEwfSkpLGIuZGF0YS54c30saC5heGlzPWZ1bmN0aW9uKCl7fSxoLmF4aXMubGFiZWxzPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWw7YXJndW1lbnRzLmxlbmd0aCYmKE9iamVjdC5rZXlzKGEpLmZvckVhY2goZnVuY3Rpb24oYyl7Yi5heGlzLnNldExhYmVsVGV4dChjLGFbY10pfSksYi5heGlzLnVwZGF0ZUxhYmVscygpKX0saC5heGlzLm1heD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmludGVybmFsLGM9Yi5jb25maWc7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KCJvYmplY3QiPT10eXBlb2YgYT8obShhLngpJiYoYy5heGlzX3hfbWF4PWEueCksbShhLnkpJiYoYy5heGlzX3lfbWF4PWEueSksbShhLnkyKSYmKGMuYXhpc195Ml9tYXg9YS55MikpOmMuYXhpc195X21heD1jLmF4aXNfeTJfbWF4PWEsdm9pZCBiLnJlZHJhdyh7d2l0aFVwZGF0ZU9yZ1hEb21haW46ITAsd2l0aFVwZGF0ZVhEb21haW46ITB9KSk6e3g6Yy5heGlzX3hfbWF4LHk6Yy5heGlzX3lfbWF4LHkyOmMuYXhpc195Ml9tYXh9fSxoLmF4aXMubWluPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWwsYz1iLmNvbmZpZztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oIm9iamVjdCI9PXR5cGVvZiBhPyhtKGEueCkmJihjLmF4aXNfeF9taW49YS54KSxtKGEueSkmJihjLmF4aXNfeV9taW49YS55KSxtKGEueTIpJiYoYy5heGlzX3kyX21pbj1hLnkyKSk6Yy5heGlzX3lfbWluPWMuYXhpc195Ml9taW49YSx2b2lkIGIucmVkcmF3KHt3aXRoVXBkYXRlT3JnWERvbWFpbjohMCx3aXRoVXBkYXRlWERvbWFpbjohMH0pKTp7eDpjLmF4aXNfeF9taW4seTpjLmF4aXNfeV9taW4seTI6Yy5heGlzX3kyX21pbn19LGguYXhpcy5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocShhLm1heCkmJnRoaXMuYXhpcy5tYXgoYS5tYXgpLHZvaWQocShhLm1pbikmJnRoaXMuYXhpcy5taW4oYS5taW4pKSk6e21heDp0aGlzLmF4aXMubWF4KCksbWluOnRoaXMuYXhpcy5taW4oKX19LGgubGVnZW5kPWZ1bmN0aW9uKCl7fSxoLmxlZ2VuZC5zaG93PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuaW50ZXJuYWw7Yi5zaG93TGVnZW5kKGIubWFwVG9UYXJnZXRJZHMoYSkpLGIudXBkYXRlQW5kUmVkcmF3KHt3aXRoTGVnZW5kOiEwfSl9LGgubGVnZW5kLmhpZGU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcm5hbDtiLmhpZGVMZWdlbmQoYi5tYXBUb1RhcmdldElkcyhhKSksYi51cGRhdGVBbmRSZWRyYXcoe3dpdGhMZWdlbmQ6ITB9KX0saC5yZXNpemU9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5pbnRlcm5hbCxjPWIuY29uZmlnO2Muc2l6ZV93aWR0aD1hP2Eud2lkdGg6bnVsbCxjLnNpemVfaGVpZ2h0PWE/YS5oZWlnaHQ6bnVsbCx0aGlzLmZsdXNoKCl9LGguZmx1c2g9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmludGVybmFsO2EudXBkYXRlQW5kUmVkcmF3KHt3aXRoTGVnZW5kOiEwLHdpdGhUcmFuc2l0aW9uOiExLHdpdGhUcmFuc2l0aW9uRm9yVHJhbnNmb3JtOiExfSl9LGguZGVzdHJveT1mdW5jdGlvbigpe3ZhciBiPXRoaXMuaW50ZXJuYWw7aWYoYS5jbGVhckludGVydmFsKGIuaW50ZXJ2YWxGb3JPYnNlcnZlSW5zZXJ0ZWQpLHZvaWQgMCE9PWIucmVzaXplVGltZW91dCYmYS5jbGVhclRpbWVvdXQoYi5yZXNpemVUaW1lb3V0KSxhLmRldGFjaEV2ZW50KWEuZGV0YWNoRXZlbnQoIm9ucmVzaXplIixiLnJlc2l6ZUZ1bmN0aW9uKTtlbHNlIGlmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcilhLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsYi5yZXNpemVGdW5jdGlvbik7ZWxzZXt2YXIgYz1hLm9ucmVzaXplO2MmJmMuYWRkJiZjLnJlbW92ZSYmYy5yZW1vdmUoYi5yZXNpemVGdW5jdGlvbil9cmV0dXJuIGIuc2VsZWN0Q2hhcnQuY2xhc3NlZCgiYzMiLCExKS5odG1sKCIiKSxPYmplY3Qua2V5cyhiKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2JbYV09bnVsbH0pLG51bGx9LGgudG9vbHRpcD1mdW5jdGlvbigpe30saC50b29sdGlwLnNob3c9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPXRoaXMuaW50ZXJuYWw7YS5tb3VzZSYmKGM9YS5tb3VzZSksYS5kYXRhP2QuaXNNdWx0aXBsZVgoKT8oYz1bZC54KGEuZGF0YS54KSxkLmdldFlTY2FsZShhLmRhdGEuaWQpKGEuZGF0YS52YWx1ZSldLGI9bnVsbCk6Yj1tKGEuZGF0YS5pbmRleCk/YS5kYXRhLmluZGV4OmQuZ2V0SW5kZXhCeVgoYS5kYXRhLngpOiJ1bmRlZmluZWQiIT10eXBlb2YgYS54P2I9ZC5nZXRJbmRleEJ5WChhLngpOiJ1bmRlZmluZWQiIT10eXBlb2YgYS5pbmRleCYmKGI9YS5pbmRleCksZC5kaXNwYXRjaEV2ZW50KCJtb3VzZW92ZXIiLGIsYyksZC5kaXNwYXRjaEV2ZW50KCJtb3VzZW1vdmUiLGIsYyksZC5jb25maWcudG9vbHRpcF9vbnNob3cuY2FsbChkLGEuZGF0YSl9LGgudG9vbHRpcC5oaWRlPWZ1bmN0aW9uKCl7dGhpcy5pbnRlcm5hbC5kaXNwYXRjaEV2ZW50KCJtb3VzZW91dCIsMCksdGhpcy5pbnRlcm5hbC5jb25maWcudG9vbHRpcF9vbmhpZGUuY2FsbCh0aGlzKX07dmFyIEE7aS5pc1NhZmFyaT1mdW5jdGlvbigpe3ZhciBiPWEubmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4gYi5pbmRleE9mKCJTYWZhcmkiKT49MCYmYi5pbmRleE9mKCJDaHJvbWUiKTwwfSxpLmlzQ2hyb21lPWZ1bmN0aW9uKCl7dmFyIGI9YS5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBiLmluZGV4T2YoIkNocm9tZSIpPj0wfSxGdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIC0gd2hhdCBpcyB0cnlpbmcgdG8gYmUgYm91bmQgaXMgbm90IGNhbGxhYmxlIik7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGM9dGhpcyxkPWZ1bmN0aW9uKCl7fSxlPWZ1bmN0aW9uKCl7cmV0dXJuIGMuYXBwbHkodGhpcyBpbnN0YW5jZW9mIGQ/dGhpczphLGIuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX07cmV0dXJuIGQucHJvdG90eXBlPXRoaXMucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBkLGV9KSxmdW5jdGlvbigpeyJTVkdQYXRoU2VnImluIGF8fChhLlNWR1BhdGhTZWc9ZnVuY3Rpb24oYSxiLGMpe3RoaXMucGF0aFNlZ1R5cGU9YSx0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXI9Yix0aGlzLl9vd25pbmdQYXRoU2VnTGlzdD1jfSxTVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTj0wLFNWR1BhdGhTZWcuUEFUSFNFR19DTE9TRVBBVEg9MSxTVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUz0yLFNWR1BhdGhTZWcuUEFUSFNFR19NT1ZFVE9fUkVMPTMsU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19BQlM9NCxTVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTD01LFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUz02LFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1JFTD03LFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM9OCxTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMPTksU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19BQlM9MTAsU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19SRUw9MTEsU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUz0xMixTVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMPTEzLFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTPTE0LFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMPTE1LFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM9MTYsU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTD0xNyxTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX0FCUz0xOCxTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTD0xOSxTVkdQYXRoU2VnLnByb3RvdHlwZS5fc2VnbWVudENoYW5nZWQ9ZnVuY3Rpb24oKXt0aGlzLl9vd25pbmdQYXRoU2VnTGlzdCYmdGhpcy5fb3duaW5nUGF0aFNlZ0xpc3Quc2VnbWVudENoYW5nZWQodGhpcyl9LGEuU1ZHUGF0aFNlZ0Nsb3NlUGF0aD1mdW5jdGlvbihhKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfQ0xPU0VQQVRILCJ6IixhKX0sU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTVkdQYXRoU2VnLnByb3RvdHlwZSksU1ZHUGF0aFNlZ0Nsb3NlUGF0aC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ2xvc2VQYXRoXSJ9LFNWR1BhdGhTZWdDbG9zZVBhdGgucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyfSxTVkdQYXRoU2VnQ2xvc2VQYXRoLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0Nsb3NlUGF0aCh2b2lkIDApfSxhLlNWR1BhdGhTZWdNb3ZldG9BYnM9ZnVuY3Rpb24oYSxiLGMpe1NWR1BhdGhTZWcuY2FsbCh0aGlzLFNWR1BhdGhTZWcuUEFUSFNFR19NT1ZFVE9fQUJTLCJNIixhKSx0aGlzLl94PWIsdGhpcy5feT1jfSxTVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFNWR1BhdGhTZWcucHJvdG90eXBlKSxTVkdQYXRoU2VnTW92ZXRvQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdNb3ZldG9BYnNdIn0sU1ZHUGF0aFNlZ01vdmV0b0Ficy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LFNWR1BhdGhTZWdNb3ZldG9BYnMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnTW92ZXRvQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3kpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ01vdmV0b0Ficy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdNb3ZldG9BYnMucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLGEuU1ZHUGF0aFNlZ01vdmV0b1JlbD1mdW5jdGlvbihhLGIsYyl7U1ZHUGF0aFNlZy5jYWxsKHRoaXMsU1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUwsIm0iLGEpLHRoaXMuX3g9Yix0aGlzLl95PWN9LFNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU1ZHUGF0aFNlZy5wcm90b3R5cGUpLFNWR1BhdGhTZWdNb3ZldG9SZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ01vdmV0b1JlbF0ifSxTVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sU1ZHUGF0aFNlZ01vdmV0b1JlbC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdNb3ZldG9SZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnTW92ZXRvUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ01vdmV0b1JlbC5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3k9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksYS5TVkdQYXRoU2VnTGluZXRvQWJzPWZ1bmN0aW9uKGEsYixjKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUywiTCIsYSksdGhpcy5feD1iLHRoaXMuX3k9Y30sU1ZHUGF0aFNlZ0xpbmV0b0Ficy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTVkdQYXRoU2VnLnByb3RvdHlwZSksU1ZHUGF0aFNlZ0xpbmV0b0Ficy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnTGluZXRvQWJzXSJ9LFNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSxTVkdQYXRoU2VnTGluZXRvQWJzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0xpbmV0b0Ficyh2b2lkIDAsdGhpcy5feCx0aGlzLl95KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdMaW5ldG9BYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihhKXt0aGlzLl94PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnTGluZXRvQWJzLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxhLlNWR1BhdGhTZWdMaW5ldG9SZWw9ZnVuY3Rpb24oYSxiLGMpe1NWR1BhdGhTZWcuY2FsbCh0aGlzLFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fUkVMLCJsIixhKSx0aGlzLl94PWIsdGhpcy5feT1jfSxTVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFNWR1BhdGhTZWcucHJvdG90eXBlKSxTVkdQYXRoU2VnTGluZXRvUmVsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9SZWxdIn0sU1ZHUGF0aFNlZ0xpbmV0b1JlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LFNWR1BhdGhTZWdMaW5ldG9SZWwucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvUmVsKHZvaWQgMCx0aGlzLl94LHRoaXMuX3kpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0xpbmV0b1JlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdMaW5ldG9SZWwucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLGEuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficz1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlMsIkMiLGEpLHRoaXMuX3g9Yix0aGlzLl95PWMsdGhpcy5feDE9ZCx0aGlzLl95MT1lLHRoaXMuX3gyPWYsdGhpcy5feTI9Z30sU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTVkdQYXRoU2VnLnByb3RvdHlwZSksU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzXSJ9LFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94MSsiICIrdGhpcy5feTErIiAiK3RoaXMuX3gyKyIgIit0aGlzLl95MisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnModm9pZCAwLHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MSx0aGlzLl95MSx0aGlzLl94Mix0aGlzLl95Mil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3k9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLCJ4MSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94MX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3gxPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b0N1YmljQWJzLnByb3RvdHlwZSwieTEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feTF9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95MT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficy5wcm90b3R5cGUsIngyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feDI9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3kyPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLGEuU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbD1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19SRUwsImMiLGEpLHRoaXMuX3g9Yix0aGlzLl95PWMsdGhpcy5feDE9ZCx0aGlzLl95MT1lLHRoaXMuX3gyPWYsdGhpcy5feTI9Z30sU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTVkdQYXRoU2VnLnByb3RvdHlwZSksU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsXSJ9LFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94MSsiICIrdGhpcy5feTErIiAiK3RoaXMuX3gyKyIgIit0aGlzLl95MisiICIrdGhpcy5feCsiICIrdGhpcy5feX0sU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MSx0aGlzLl95MSx0aGlzLl94Mix0aGlzLl95Mil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3k9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCJ4MSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94MX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3gxPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsLnByb3RvdHlwZSwieTEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feTF9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95MT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbC5wcm90b3R5cGUsIngyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feDI9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3kyPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLGEuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfQUJTLCJRIixhKSx0aGlzLl94PWIsdGhpcy5feT1jLHRoaXMuX3gxPWQsdGhpcy5feTE9ZX0sU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU1ZHUGF0aFNlZy5wcm90b3R5cGUpLFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzXSJ9LFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDErIiAiK3RoaXMuX3kxKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDEsdGhpcy5feTEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihhKXt0aGlzLl94PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3k9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzLnByb3RvdHlwZSwieDEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDF9LHNldDpmdW5jdGlvbihhKXt0aGlzLl94MT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMucHJvdG90eXBlLCJ5MSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95MX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3kxPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLGEuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWw9ZnVuY3Rpb24oYSxiLGMsZCxlKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMLCJxIixhKSx0aGlzLl94PWIsdGhpcy5feT1jLHRoaXMuX3gxPWQsdGhpcy5feTE9ZX0sU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU1ZHUGF0aFNlZy5wcm90b3R5cGUpLFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsXSJ9LFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDErIiAiK3RoaXMuX3kxKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDEsdGhpcy5feTEpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihhKXt0aGlzLl94PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbC5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3k9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsLnByb3RvdHlwZSwieDEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDF9LHNldDpmdW5jdGlvbihhKXt0aGlzLl94MT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwucHJvdG90eXBlLCJ5MSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95MX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3kxPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLGEuU1ZHUGF0aFNlZ0FyY0Ficz1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGgpe1NWR1BhdGhTZWcuY2FsbCh0aGlzLFNWR1BhdGhTZWcuUEFUSFNFR19BUkNfQUJTLCJBIixhKSx0aGlzLl94PWIsdGhpcy5feT1jLHRoaXMuX3IxPWQsdGhpcy5fcjI9ZSx0aGlzLl9hbmdsZT1mLHRoaXMuX2xhcmdlQXJjRmxhZz1nLHRoaXMuX3N3ZWVwRmxhZz1ofSxTVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFNWR1BhdGhTZWcucHJvdG90eXBlKSxTVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdBcmNBYnNdIn0sU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3IxKyIgIit0aGlzLl9yMisiICIrdGhpcy5fYW5nbGUrIiAiKyh0aGlzLl9sYXJnZUFyY0ZsYWc/IjEiOiIwIikrIiAiKyh0aGlzLl9zd2VlcEZsYWc/IjEiOiIwIikrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LFNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnQXJjQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5fcjEsdGhpcy5fcjIsdGhpcy5fYW5nbGUsdGhpcy5fbGFyZ2VBcmNGbGFnLHRoaXMuX3N3ZWVwRmxhZyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwieCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feD1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3k9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLCJyMSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yMX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3IxPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwicjIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcjJ9LHNldDpmdW5jdGlvbihhKXt0aGlzLl9yMj1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0FyY0Ficy5wcm90b3R5cGUsImFuZ2xlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuZ2xlfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fYW5nbGU9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdBcmNBYnMucHJvdG90eXBlLCJsYXJnZUFyY0ZsYWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFyZ2VBcmNGbGFnfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fbGFyZ2VBcmNGbGFnPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQXJjQWJzLnByb3RvdHlwZSwic3dlZXBGbGFnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3ZWVwRmxhZ30sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3N3ZWVwRmxhZz1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxhLlNWR1BhdGhTZWdBcmNSZWw9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfQVJDX1JFTCwiYSIsYSksdGhpcy5feD1iLHRoaXMuX3k9Yyx0aGlzLl9yMT1kLHRoaXMuX3IyPWUsdGhpcy5fYW5nbGU9Zix0aGlzLl9sYXJnZUFyY0ZsYWc9Zyx0aGlzLl9zd2VlcEZsYWc9aH0sU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTVkdQYXRoU2VnLnByb3RvdHlwZSksU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQXJjUmVsXSJ9LFNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl9yMSsiICIrdGhpcy5fcjIrIiAiK3RoaXMuX2FuZ2xlKyIgIisodGhpcy5fbGFyZ2VBcmNGbGFnPyIxIjoiMCIpKyIgIisodGhpcy5fc3dlZXBGbGFnPyIxIjoiMCIpKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSxTVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0FyY1JlbCh2b2lkIDAsdGhpcy5feCx0aGlzLl95LHRoaXMuX3IxLHRoaXMuX3IyLHRoaXMuX2FuZ2xlLHRoaXMuX2xhcmdlQXJjRmxhZyx0aGlzLl9zd2VlcEZsYWcpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwicjEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcjF9LHNldDpmdW5jdGlvbihhKXt0aGlzLl9yMT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsInIyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3IyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5fcjI9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdBcmNSZWwucHJvdG90eXBlLCJhbmdsZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmdsZX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX2FuZ2xlPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQXJjUmVsLnByb3RvdHlwZSwibGFyZ2VBcmNGbGFnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhcmdlQXJjRmxhZ30sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX2xhcmdlQXJjRmxhZz1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0FyY1JlbC5wcm90b3R5cGUsInN3ZWVwRmxhZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zd2VlcEZsYWd9LHNldDpmdW5jdGlvbihhKXt0aGlzLl9zd2VlcEZsYWc9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksYS5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicz1mdW5jdGlvbihhLGIpe1NWR1BhdGhTZWcuY2FsbCh0aGlzLFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlMsIkgiLGEpLHRoaXMuX3g9Yn0sU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU1ZHUGF0aFNlZy5wcm90b3R5cGUpLFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzXSJ9LFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feH0sU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyh2b2lkIDAsdGhpcy5feCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksYS5TVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbD1mdW5jdGlvbihhLGIpe1NWR1BhdGhTZWcuY2FsbCh0aGlzLFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUwsImgiLGEpLHRoaXMuX3g9Yn0sU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU1ZHUGF0aFNlZy5wcm90b3R5cGUpLFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsXSJ9LFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feH0sU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCh2b2lkIDAsdGhpcy5feCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksYS5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM9ZnVuY3Rpb24oYSxiKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUywiViIsYSksdGhpcy5feT1ifSxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU1ZHUGF0aFNlZy5wcm90b3R5cGUpLFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnNdIn0sU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feX0sU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKHZvaWQgMCx0aGlzLl95KX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3k9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksYS5TVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw9ZnVuY3Rpb24oYSxiKXsNClNWR1BhdGhTZWcuY2FsbCh0aGlzLFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfUkVMLCJ2IixhKSx0aGlzLl95PWJ9LFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTVkdQYXRoU2VnLnByb3RvdHlwZSksU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbF0ifSxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl95fSxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwodm9pZCAwLHRoaXMuX3kpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxhLlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtTVkdQYXRoU2VnLmNhbGwodGhpcyxTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTLCJTIixhKSx0aGlzLl94PWIsdGhpcy5feT1jLHRoaXMuX3gyPWQsdGhpcy5feTI9ZX0sU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTVkdQYXRoU2VnLnByb3RvdHlwZSksU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzXSJ9LFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94MisiICIrdGhpcy5feTIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3ksdGhpcy5feDIsdGhpcy5feTIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnMucHJvdG90eXBlLCJ5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3l9LHNldDpmdW5jdGlvbihhKXt0aGlzLl95PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzLnByb3RvdHlwZSwieDIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feDJ9LHNldDpmdW5jdGlvbihhKXt0aGlzLl94Mj1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicy5wcm90b3R5cGUsInkyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3kyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feTI9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksYS5TVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsPWZ1bmN0aW9uKGEsYixjLGQsZSl7U1ZHUGF0aFNlZy5jYWxsKHRoaXMsU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTCwicyIsYSksdGhpcy5feD1iLHRoaXMuX3k9Yyx0aGlzLl94Mj1kLHRoaXMuX3kyPWV9LFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoU1ZHUGF0aFNlZy5wcm90b3R5cGUpLFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbF0ifSxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZS5fYXNQYXRoU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ1R5cGVBc0xldHRlcisiICIrdGhpcy5feDIrIiAiK3RoaXMuX3kyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCh2b2lkIDAsdGhpcy5feCx0aGlzLl95LHRoaXMuX3gyLHRoaXMuX3kyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihhKXt0aGlzLl94PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbC5wcm90b3R5cGUsIngyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3gyfSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feDI9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwucHJvdG90eXBlLCJ5MiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95Mn0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3kyPWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLGEuU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM9ZnVuY3Rpb24oYSxiLGMpe1NWR1BhdGhTZWcuY2FsbCh0aGlzLFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTLCJUIixhKSx0aGlzLl94PWIsdGhpcy5feT1jfSxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTVkdQYXRoU2VnLnByb3RvdHlwZSksU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnNdIn0sU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMucHJvdG90eXBlLl9hc1BhdGhTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXRoU2VnVHlwZUFzTGV0dGVyKyIgIit0aGlzLl94KyIgIit0aGlzLl95fSxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKHZvaWQgMCx0aGlzLl94LHRoaXMuX3kpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMucHJvdG90eXBlLCJ4Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3h9LHNldDpmdW5jdGlvbihhKXt0aGlzLl94PWEsdGhpcy5fc2VnbWVudENoYW5nZWQoKX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicy5wcm90b3R5cGUsInkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3k9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksYS5TVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbD1mdW5jdGlvbihhLGIsYyl7U1ZHUGF0aFNlZy5jYWxsKHRoaXMsU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1NNT09USF9SRUwsInQiLGEpLHRoaXMuX3g9Yix0aGlzLl95PWN9LFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFNWR1BhdGhTZWcucHJvdG90eXBlKSxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbF0ifSxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5wcm90b3R5cGUuX2FzUGF0aFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdUeXBlQXNMZXR0ZXIrIiAiK3RoaXMuX3grIiAiK3RoaXMuX3l9LFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwodm9pZCAwLHRoaXMuX3gsdGhpcy5feSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbC5wcm90b3R5cGUsIngiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuX3g9YSx0aGlzLl9zZWdtZW50Q2hhbmdlZCgpfSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsLnByb3RvdHlwZSwieSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl95fSxzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5feT1hLHRoaXMuX3NlZ21lbnRDaGFuZ2VkKCl9LGVudW1lcmFibGU6ITB9KSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0Nsb3NlUGF0aD1mdW5jdGlvbigpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0Nsb3NlUGF0aCh2b2lkIDApfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ01vdmV0b0Ficz1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ01vdmV0b0Ficyh2b2lkIDAsYSxiKX0sU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdNb3ZldG9SZWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdNb3ZldG9SZWwodm9pZCAwLGEsYil9LFNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnTGluZXRvQWJzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvQWJzKHZvaWQgMCxhLGIpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b1JlbD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0xpbmV0b1JlbCh2b2lkIDAsYSxiKX0sU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM9ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyh2b2lkIDAsYSxiLGMsZCxlLGYpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbD1mdW5jdGlvbihhLGIsYyxkLGUsZil7cmV0dXJuIG5ldyBTVkdQYXRoU2VnQ3VydmV0b0N1YmljUmVsKHZvaWQgMCxhLGIsYyxkLGUsZil9LFNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0Ficz1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKHZvaWQgMCxhLGIsYyxkKX0sU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNSZWwodm9pZCAwLGEsYixjLGQpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0FyY0Ficz1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdBcmNBYnModm9pZCAwLGEsYixjLGQsZSxmLGcpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0FyY1JlbD1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdBcmNSZWwodm9pZCAwLGEsYixjLGQsZSxmLGcpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyh2b2lkIDAsYSl9LFNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsKHZvaWQgMCxhKX0sU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbEFicyh2b2lkIDAsYSl9LFNWR1BhdGhFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWw9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwodm9pZCAwLGEpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicz1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnModm9pZCAwLGEsYixjLGQpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwodm9pZCAwLGEsYixjLGQpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzKHZvaWQgMCxhLGIpfSxTVkdQYXRoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWw9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKHZvaWQgMCxhLGIpfSksIlNWR1BhdGhTZWdMaXN0ImluIGF8fChhLlNWR1BhdGhTZWdMaXN0PWZ1bmN0aW9uKGEpe3RoaXMuX3BhdGhFbGVtZW50PWEsdGhpcy5fbGlzdD10aGlzLl9wYXJzZVBhdGgodGhpcy5fcGF0aEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkIikpLHRoaXMuX211dGF0aW9uT2JzZXJ2ZXJDb25maWc9e2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZCJdfSx0aGlzLl9wYXRoRWxlbWVudE11dGF0aW9uT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5fdXBkYXRlTGlzdEZyb21QYXRoTXV0YXRpb25zLmJpbmQodGhpcykpLHRoaXMuX3BhdGhFbGVtZW50TXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuX3BhdGhFbGVtZW50LHRoaXMuX211dGF0aW9uT2JzZXJ2ZXJDb25maWcpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLCJudW1iZXJPZkl0ZW1zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLHRoaXMuX2xpc3QubGVuZ3RofSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwicGF0aFNlZ0xpc3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGF0aFNlZ0xpc3R8fCh0aGlzLl9wYXRoU2VnTGlzdD1uZXcgU1ZHUGF0aFNlZ0xpc3QodGhpcykpLHRoaXMuX3BhdGhTZWdMaXN0fSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFNWR1BhdGhFbGVtZW50LnByb3RvdHlwZSwibm9ybWFsaXplZFBhdGhTZWdMaXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ0xpc3R9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLCJhbmltYXRlZFBhdGhTZWdMaXN0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aFNlZ0xpc3R9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU1ZHUGF0aEVsZW1lbnQucHJvdG90eXBlLCJhbmltYXRlZE5vcm1hbGl6ZWRQYXRoU2VnTGlzdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhdGhTZWdMaXN0fSxlbnVtZXJhYmxlOiEwfSksU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3Q9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVMaXN0RnJvbVBhdGhNdXRhdGlvbnModGhpcy5fcGF0aEVsZW1lbnRNdXRhdGlvbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpfSxTVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX3VwZGF0ZUxpc3RGcm9tUGF0aE11dGF0aW9ucz1mdW5jdGlvbihhKXtpZih0aGlzLl9wYXRoRWxlbWVudCl7dmFyIGI9ITE7YS5mb3JFYWNoKGZ1bmN0aW9uKGEpeyJkIj09YS5hdHRyaWJ1dGVOYW1lJiYoYj0hMCl9KSxiJiYodGhpcy5fbGlzdD10aGlzLl9wYXJzZVBhdGgodGhpcy5fcGF0aEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkIikpKX19LFNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5fd3JpdGVMaXN0VG9QYXRoPWZ1bmN0aW9uKCl7dGhpcy5fcGF0aEVsZW1lbnRNdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9wYXRoRWxlbWVudC5zZXRBdHRyaWJ1dGUoImQiLFNWR1BhdGhTZWdMaXN0Ll9wYXRoU2VnQXJyYXlBc1N0cmluZyh0aGlzLl9saXN0KSksdGhpcy5fcGF0aEVsZW1lbnRNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5fcGF0aEVsZW1lbnQsdGhpcy5fbXV0YXRpb25PYnNlcnZlckNvbmZpZyl9LFNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5zZWdtZW50Q2hhbmdlZD1mdW5jdGlvbihhKXt0aGlzLl93cml0ZUxpc3RUb1BhdGgoKX0sU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksdGhpcy5fbGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuX293bmluZ1BhdGhTZWdMaXN0PW51bGx9KSx0aGlzLl9saXN0PVtdLHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpfSxTVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuaW5pdGlhbGl6ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksdGhpcy5fbGlzdD1bYV0sYS5fb3duaW5nUGF0aFNlZ0xpc3Q9dGhpcyx0aGlzLl93cml0ZUxpc3RUb1BhdGgoKSxhfSxTVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuX2NoZWNrVmFsaWRJbmRleD1mdW5jdGlvbihhKXtpZihpc05hTihhKXx8MD5hfHxhPj10aGlzLm51bWJlck9mSXRlbXMpdGhyb3ciSU5ERVhfU0laRV9FUlIifSxTVkdQYXRoU2VnTGlzdC5wcm90b3R5cGUuZ2V0SXRlbT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksdGhpcy5fY2hlY2tWYWxpZEluZGV4KGEpLHRoaXMuX2xpc3RbYV19LFNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5pbnNlcnRJdGVtQmVmb3JlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLGI+dGhpcy5udW1iZXJPZkl0ZW1zJiYoYj10aGlzLm51bWJlck9mSXRlbXMpLGEuX293bmluZ1BhdGhTZWdMaXN0JiYoYT1hLmNsb25lKCkpLHRoaXMuX2xpc3Quc3BsaWNlKGIsMCxhKSxhLl9vd25pbmdQYXRoU2VnTGlzdD10aGlzLHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpLGF9LFNWR1BhdGhTZWdMaXN0LnByb3RvdHlwZS5yZXBsYWNlSXRlbT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9jaGVja1BhdGhTeW5jaHJvbml6ZWRUb0xpc3QoKSxhLl9vd25pbmdQYXRoU2VnTGlzdCYmKGE9YS5jbG9uZSgpKSx0aGlzLl9jaGVja1ZhbGlkSW5kZXgoYiksdGhpcy5fbGlzdFtiXT1hLGEuX293bmluZ1BhdGhTZWdMaXN0PXRoaXMsdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCksYX0sU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLnJlbW92ZUl0ZW09ZnVuY3Rpb24oYSl7dGhpcy5fY2hlY2tQYXRoU3luY2hyb25pemVkVG9MaXN0KCksdGhpcy5fY2hlY2tWYWxpZEluZGV4KGEpO3ZhciBiPXRoaXMuX2xpc3RbYV07cmV0dXJuIHRoaXMuX2xpc3Quc3BsaWNlKGEsMSksdGhpcy5fd3JpdGVMaXN0VG9QYXRoKCksYn0sU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLmFwcGVuZEl0ZW09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2NoZWNrUGF0aFN5bmNocm9uaXplZFRvTGlzdCgpLGEuX293bmluZ1BhdGhTZWdMaXN0JiYoYT1hLmNsb25lKCkpLHRoaXMuX2xpc3QucHVzaChhKSxhLl9vd25pbmdQYXRoU2VnTGlzdD10aGlzLHRoaXMuX3dyaXRlTGlzdFRvUGF0aCgpLGF9LFNWR1BhdGhTZWdMaXN0Ll9wYXRoU2VnQXJyYXlBc1N0cmluZz1mdW5jdGlvbihhKXt2YXIgYj0iIixjPSEwO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24oYSl7Yz8oYz0hMSxiKz1hLl9hc1BhdGhTdHJpbmcoKSk6Yis9IiAiK2EuX2FzUGF0aFN0cmluZygpfSksYn0sU1ZHUGF0aFNlZ0xpc3QucHJvdG90eXBlLl9wYXJzZVBhdGg9ZnVuY3Rpb24oYSl7aWYoIWF8fDA9PWEubGVuZ3RoKXJldHVybltdO3ZhciBiPXRoaXMsYz1mdW5jdGlvbigpe3RoaXMucGF0aFNlZ0xpc3Q9W119O2MucHJvdG90eXBlLmFwcGVuZFNlZ21lbnQ9ZnVuY3Rpb24oYSl7dGhpcy5wYXRoU2VnTGlzdC5wdXNoKGEpfTt2YXIgZD1mdW5jdGlvbihhKXt0aGlzLl9zdHJpbmc9YSx0aGlzLl9jdXJyZW50SW5kZXg9MCx0aGlzLl9lbmRJbmRleD10aGlzLl9zdHJpbmcubGVuZ3RoLHRoaXMuX3ByZXZpb3VzQ29tbWFuZD1TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTix0aGlzLl9za2lwT3B0aW9uYWxTcGFjZXMoKX07ZC5wcm90b3R5cGUuX2lzQ3VycmVudFNwYWNlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fc3RyaW5nW3RoaXMuX2N1cnJlbnRJbmRleF07cmV0dXJuIiAiPj1hJiYoIiAiPT1hfHwiXG4iPT1hfHwiCSI9PWF8fCJcciI9PWF8fCJcZiI9PWEpfSxkLnByb3RvdHlwZS5fc2tpcE9wdGlvbmFsU3BhY2VzPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXgmJnRoaXMuX2lzQ3VycmVudFNwYWNlKCk7KXRoaXMuX2N1cnJlbnRJbmRleCsrO3JldHVybiB0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXh9LGQucHJvdG90eXBlLl9za2lwT3B0aW9uYWxTcGFjZXNPckRlbGltaXRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXgmJiF0aGlzLl9pc0N1cnJlbnRTcGFjZSgpJiYiLCIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT8hMToodGhpcy5fc2tpcE9wdGlvbmFsU3BhY2VzKCkmJnRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmIiwiPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkmJih0aGlzLl9jdXJyZW50SW5kZXgrKyx0aGlzLl9za2lwT3B0aW9uYWxTcGFjZXMoKSksdGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4KX0sZC5wcm90b3R5cGUuaGFzTW9yZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4fSxkLnByb3RvdHlwZS5wZWVrU2VnbWVudFR5cGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9zdHJpbmdbdGhpcy5fY3VycmVudEluZGV4XTtyZXR1cm4gdGhpcy5fcGF0aFNlZ1R5cGVGcm9tQ2hhcihhKX0sZC5wcm90b3R5cGUuX3BhdGhTZWdUeXBlRnJvbUNoYXI9ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UiWiI6Y2FzZSJ6IjpyZXR1cm4gU1ZHUGF0aFNlZy5QQVRIU0VHX0NMT1NFUEFUSDtjYXNlIk0iOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUztjYXNlIm0iOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTDtjYXNlIkwiOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUztjYXNlImwiOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTDtjYXNlIkMiOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM7Y2FzZSJjIjpyZXR1cm4gU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfUkVMO2Nhc2UiUSI6cmV0dXJuIFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM7Y2FzZSJxIjpyZXR1cm4gU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX1JFTDtjYXNlIkEiOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfQVJDX0FCUztjYXNlImEiOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfQVJDX1JFTDtjYXNlIkgiOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTO2Nhc2UiaCI6cmV0dXJuIFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9SRUw7Y2FzZSJWIjpyZXR1cm4gU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9BQlM7Y2FzZSJ2IjpyZXR1cm4gU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9SRUw7Y2FzZSJTIjpyZXR1cm4gU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FCUztjYXNlInMiOnJldHVybiBTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMO2Nhc2UiVCI6cmV0dXJuIFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTO2Nhc2UidCI6cmV0dXJuIFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfUkVMO2RlZmF1bHQ6cmV0dXJuIFNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOfX0sZC5wcm90b3R5cGUuX25leHRDb21tYW5kSGVscGVyPWZ1bmN0aW9uKGEsYil7cmV0dXJuKCIrIj09YXx8Ii0iPT1hfHwiLiI9PWF8fGE+PSIwIiYmIjkiPj1hKSYmYiE9U1ZHUGF0aFNlZy5QQVRIU0VHX0NMT1NFUEFUSD9iPT1TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUz9TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0FCUzpiPT1TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX1JFTD9TVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX1JFTDpiOlNWR1BhdGhTZWcuUEFUSFNFR19VTktOT1dOfSxkLnByb3RvdHlwZS5pbml0aWFsQ29tbWFuZElzTW92ZVRvPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzTW9yZURhdGEoKSlyZXR1cm4hMDt2YXIgYT10aGlzLnBlZWtTZWdtZW50VHlwZSgpO3JldHVybiBhPT1TVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCU3x8YT09U1ZHUGF0aFNlZy5QQVRIU0VHX01PVkVUT19SRUx9LGQucHJvdG90eXBlLl9wYXJzZU51bWJlcj1mdW5jdGlvbigpe3ZhciBhPTAsYj0wLGM9MSxkPTAsZT0xLGY9MSxnPXRoaXMuX2N1cnJlbnRJbmRleDtpZih0aGlzLl9za2lwT3B0aW9uYWxTcGFjZXMoKSx0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXgmJiIrIj09dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpP3RoaXMuX2N1cnJlbnRJbmRleCsrOnRoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmIi0iPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkmJih0aGlzLl9jdXJyZW50SW5kZXgrKyxlPS0xKSwhKHRoaXMuX2N1cnJlbnRJbmRleD09dGhpcy5fZW5kSW5kZXh8fCh0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk8IjAifHx0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk+IjkiKSYmIi4iIT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkpKXtmb3IodmFyIGg9dGhpcy5fY3VycmVudEluZGV4O3RoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPj0iMCImJnRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KTw9IjkiOyl0aGlzLl9jdXJyZW50SW5kZXgrKztpZih0aGlzLl9jdXJyZW50SW5kZXghPWgpZm9yKHZhciBpPXRoaXMuX2N1cnJlbnRJbmRleC0xLGo9MTtpPj1oOyliKz1qKih0aGlzLl9zdHJpbmcuY2hhckF0KGktLSktIjAiKSxqKj0xMDtpZih0aGlzLl9jdXJyZW50SW5kZXg8dGhpcy5fZW5kSW5kZXgmJiIuIj09dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpKXtpZih0aGlzLl9jdXJyZW50SW5kZXgrKyx0aGlzLl9jdXJyZW50SW5kZXg+PXRoaXMuX2VuZEluZGV4fHx0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk8IjAifHx0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk+IjkiKXJldHVybjtmb3IoO3RoaXMuX2N1cnJlbnRJbmRleDx0aGlzLl9lbmRJbmRleCYmdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPj0iMCImJnRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KTw9IjkiOylkKz0odGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgrKyktIjAiKSooYyo9LjEpfWlmKHRoaXMuX2N1cnJlbnRJbmRleCE9ZyYmdGhpcy5fY3VycmVudEluZGV4KzE8dGhpcy5fZW5kSW5kZXgmJigiZSI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KXx8IkUiPT10aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCkpJiYieCIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KzEpJiYibSIhPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KzEpKXtpZih0aGlzLl9jdXJyZW50SW5kZXgrKywiKyI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT90aGlzLl9jdXJyZW50SW5kZXgrKzoiLSI9PXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KSYmKHRoaXMuX2N1cnJlbnRJbmRleCsrLGY9LTEpLHRoaXMuX2N1cnJlbnRJbmRleD49dGhpcy5fZW5kSW5kZXh8fHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KTwiMCJ8fHRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KT4iOSIpcmV0dXJuO2Zvcig7dGhpcy5fY3VycmVudEluZGV4PHRoaXMuX2VuZEluZGV4JiZ0aGlzLl9zdHJpbmcuY2hhckF0KHRoaXMuX2N1cnJlbnRJbmRleCk+PSIwIiYmdGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgpPD0iOSI7KWEqPTEwLGErPXRoaXMuX3N0cmluZy5jaGFyQXQodGhpcy5fY3VycmVudEluZGV4KS0iMCIsdGhpcy5fY3VycmVudEluZGV4Kyt9dmFyIGs9YitkO2lmKGsqPWUsYSYmKGsqPU1hdGgucG93KDEwLGYqYSkpLGchPXRoaXMuX2N1cnJlbnRJbmRleClyZXR1cm4gdGhpcy5fc2tpcE9wdGlvbmFsU3BhY2VzT3JEZWxpbWl0ZXIoKSxrfX0sZC5wcm90b3R5cGUuX3BhcnNlQXJjRmxhZz1mdW5jdGlvbigpe2lmKCEodGhpcy5fY3VycmVudEluZGV4Pj10aGlzLl9lbmRJbmRleCkpe3ZhciBhPSExLGI9dGhpcy5fc3RyaW5nLmNoYXJBdCh0aGlzLl9jdXJyZW50SW5kZXgrKyk7aWYoIjAiPT1iKWE9ITE7ZWxzZXtpZigiMSIhPWIpcmV0dXJuO2E9ITB9cmV0dXJuIHRoaXMuX3NraXBPcHRpb25hbFNwYWNlc09yRGVsaW1pdGVyKCksYX19LGQucHJvdG90eXBlLnBhcnNlU2VnbWVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX3N0cmluZ1t0aGlzLl9jdXJyZW50SW5kZXhdLGM9dGhpcy5fcGF0aFNlZ1R5cGVGcm9tQ2hhcihhKTtpZihjPT1TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTil7aWYodGhpcy5fcHJldmlvdXNDb21tYW5kPT1TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTilyZXR1cm4gbnVsbDtpZihjPXRoaXMuX25leHRDb21tYW5kSGVscGVyKGEsdGhpcy5fcHJldmlvdXNDb21tYW5kKSxjPT1TVkdQYXRoU2VnLlBBVEhTRUdfVU5LTk9XTilyZXR1cm4gbnVsbH1lbHNlIHRoaXMuX2N1cnJlbnRJbmRleCsrO3N3aXRjaCh0aGlzLl9wcmV2aW91c0NvbW1hbmQ9YyxjKXtjYXNlIFNWR1BhdGhTZWcuUEFUSFNFR19NT1ZFVE9fUkVMOnJldHVybiBuZXcgU1ZHUGF0aFNlZ01vdmV0b1JlbChiLHRoaXMuX3BhcnNlTnVtYmVyKCksdGhpcy5fcGFyc2VOdW1iZXIoKSk7Y2FzZSBTVkdQYXRoU2VnLlBBVEhTRUdfTU9WRVRPX0FCUzpyZXR1cm4gbmV3IFNWR1BhdGhTZWdNb3ZldG9BYnMoYix0aGlzLl9wYXJzZU51bWJlcigpLHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2UgU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19SRUw6cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvUmVsKGIsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fQUJTOnJldHVybiBuZXcgU1ZHUGF0aFNlZ0xpbmV0b0FicyhiLHRoaXMuX3BhcnNlTnVtYmVyKCksdGhpcy5fcGFyc2VOdW1iZXIoKSk7Y2FzZSBTVkdQYXRoU2VnLlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOnJldHVybiBuZXcgU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwoYix0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fSE9SSVpPTlRBTF9BQlM6cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyhiLHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2UgU1ZHUGF0aFNlZy5QQVRIU0VHX0xJTkVUT19WRVJUSUNBTF9SRUw6cmV0dXJuIG5ldyBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwoYix0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIFNWR1BhdGhTZWcuUEFUSFNFR19MSU5FVE9fVkVSVElDQUxfQUJTOnJldHVybiBuZXcgU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKGIsdGhpcy5fcGFyc2VOdW1iZXIoKSk7Y2FzZSBTVkdQYXRoU2VnLlBBVEhTRUdfQ0xPU0VQQVRIOnJldHVybiB0aGlzLl9za2lwT3B0aW9uYWxTcGFjZXMoKSxuZXcgU1ZHUGF0aFNlZ0Nsb3NlUGF0aChiKTtjYXNlIFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX0NVQklDX1JFTDp2YXIgZD17eDE6dGhpcy5fcGFyc2VOdW1iZXIoKSx5MTp0aGlzLl9wYXJzZU51bWJlcigpLHgyOnRoaXMuX3BhcnNlTnVtYmVyKCkseTI6dGhpcy5fcGFyc2VOdW1iZXIoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwoYixkLngsZC55LGQueDEsZC55MSxkLngyLGQueTIpO2Nhc2UgU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfQUJTOnZhciBkPXt4MTp0aGlzLl9wYXJzZU51bWJlcigpLHkxOnRoaXMuX3BhcnNlTnVtYmVyKCkseDI6dGhpcy5fcGFyc2VOdW1iZXIoKSx5Mjp0aGlzLl9wYXJzZU51bWJlcigpLHg6dGhpcy5fcGFyc2VOdW1iZXIoKSx5OnRoaXMuX3BhcnNlTnVtYmVyKCl9O3JldHVybiBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyhiLGQueCxkLnksZC54MSxkLnkxLGQueDIsZC55Mik7Y2FzZSBTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfUkVMOnZhciBkPXt4Mjp0aGlzLl9wYXJzZU51bWJlcigpLHkyOnRoaXMuX3BhcnNlTnVtYmVyKCkseDp0aGlzLl9wYXJzZU51bWJlcigpLHk6dGhpcy5fcGFyc2VOdW1iZXIoKX07cmV0dXJuIG5ldyBTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKGIsZC54LGQueSxkLngyLGQueTIpO2Nhc2UgU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fQ1VCSUNfU01PT1RIX0FCUzp2YXIgZD17eDI6dGhpcy5fcGFyc2VOdW1iZXIoKSx5Mjp0aGlzLl9wYXJzZU51bWJlcigpLHg6dGhpcy5fcGFyc2VOdW1iZXIoKSx5OnRoaXMuX3BhcnNlTnVtYmVyKCl9O3JldHVybiBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFicyhiLGQueCxkLnksZC54MixkLnkyKTtjYXNlIFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw6dmFyIGQ9e3gxOnRoaXMuX3BhcnNlTnVtYmVyKCkseTE6dGhpcy5fcGFyc2VOdW1iZXIoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKGIsZC54LGQueSxkLngxLGQueTEpO2Nhc2UgU1ZHUGF0aFNlZy5QQVRIU0VHX0NVUlZFVE9fUVVBRFJBVElDX0FCUzp2YXIgZD17eDE6dGhpcy5fcGFyc2VOdW1iZXIoKSx5MTp0aGlzLl9wYXJzZU51bWJlcigpLHg6dGhpcy5fcGFyc2VOdW1iZXIoKSx5OnRoaXMuX3BhcnNlTnVtYmVyKCl9O3JldHVybiBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMoYixkLngsZC55LGQueDEsZC55MSk7Y2FzZSBTVkdQYXRoU2VnLlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDpyZXR1cm4gbmV3IFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKGIsdGhpcy5fcGFyc2VOdW1iZXIoKSx0aGlzLl9wYXJzZU51bWJlcigpKTtjYXNlIFNWR1BhdGhTZWcuUEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOnJldHVybiBuZXcgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMoYix0aGlzLl9wYXJzZU51bWJlcigpLHRoaXMuX3BhcnNlTnVtYmVyKCkpO2Nhc2UgU1ZHUGF0aFNlZy5QQVRIU0VHX0FSQ19SRUw6dmFyIGQ9e3gxOnRoaXMuX3BhcnNlTnVtYmVyKCkseTE6dGhpcy5fcGFyc2VOdW1iZXIoKSxhcmNBbmdsZTp0aGlzLl9wYXJzZU51bWJlcigpLGFyY0xhcmdlOnRoaXMuX3BhcnNlQXJjRmxhZygpLGFyY1N3ZWVwOnRoaXMuX3BhcnNlQXJjRmxhZygpLHg6dGhpcy5fcGFyc2VOdW1iZXIoKSx5OnRoaXMuX3BhcnNlTnVtYmVyKCl9O3JldHVybiBuZXcgU1ZHUGF0aFNlZ0FyY1JlbChiLGQueCxkLnksZC54MSxkLnkxLGQuYXJjQW5nbGUsZC5hcmNMYXJnZSxkLmFyY1N3ZWVwKTtjYXNlIFNWR1BhdGhTZWcuUEFUSFNFR19BUkNfQUJTOnZhciBkPXt4MTp0aGlzLl9wYXJzZU51bWJlcigpLHkxOnRoaXMuX3BhcnNlTnVtYmVyKCksYXJjQW5nbGU6dGhpcy5fcGFyc2VOdW1iZXIoKSxhcmNMYXJnZTp0aGlzLl9wYXJzZUFyY0ZsYWcoKSxhcmNTd2VlcDp0aGlzLl9wYXJzZUFyY0ZsYWcoKSx4OnRoaXMuX3BhcnNlTnVtYmVyKCkseTp0aGlzLl9wYXJzZU51bWJlcigpfTtyZXR1cm4gbmV3IFNWR1BhdGhTZWdBcmNBYnMoYixkLngsZC55LGQueDEsZC55MSxkLmFyY0FuZ2xlLGQuYXJjTGFyZ2UsZC5hcmNTd2VlcCk7ZGVmYXVsdDp0aHJvdyJVbmtub3duIHBhdGggc2VnIHR5cGUuIn19O3ZhciBlPW5ldyBjLGY9bmV3IGQoYSk7aWYoIWYuaW5pdGlhbENvbW1hbmRJc01vdmVUbygpKXJldHVybltdO2Zvcig7Zi5oYXNNb3JlRGF0YSgpOyl7dmFyIGc9Zi5wYXJzZVNlZ21lbnQoKTtpZighZylyZXR1cm5bXTtlLmFwcGVuZFNlZ21lbnQoZyl9cmV0dXJuIGUucGF0aFNlZ0xpc3R9KX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgiYzMiLFsiZDMiXSxmdW5jdGlvbigpe3JldHVybiBrfSk6InVuZGVmaW5lZCIhPXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1rOmEuYzM9a30od2luZG93KTsNCg=="></script>
<script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbiYmKG4ub3duZXJEb2N1bWVudHx8bi5kb2N1bWVudHx8bikuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIHQobil7cmV0dXJuIG4mJihuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8bi5kb2N1bWVudCYmbnx8bi5kZWZhdWx0Vmlldyl9ZnVuY3Rpb24gZShuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH1mdW5jdGlvbiByKG4pe3JldHVybiBudWxsPT09bj8wLzA6K259ZnVuY3Rpb24gdShuKXtyZXR1cm4haXNOYU4obil9ZnVuY3Rpb24gaShuKXtyZXR1cm57bGVmdDpmdW5jdGlvbih0LGUscix1KXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJih1PXQubGVuZ3RoKTt1PnI7KXt2YXIgaT1yK3U+Pj4xO24odFtpXSxlKTwwP3I9aSsxOnU9aX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9cit1Pj4+MTtuKHRbaV0sZSk+MD91PWk6cj1pKzF9cmV0dXJuIHJ9fX1mdW5jdGlvbiBvKG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiBhKG4pe2Zvcih2YXIgdD0xO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiBjKG4sdCl7Zm9yKHZhciBlIGluIHQpT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLGUse3ZhbHVlOnRbZV0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIGwoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX1mdW5jdGlvbiBzKG4pe3JldHVybihuKz0iIik9PT1wYXx8blswXT09PXZhP3ZhK246bn1mdW5jdGlvbiBmKG4pe3JldHVybihuKz0iIilbMF09PT12YT9uLnNsaWNlKDEpOm59ZnVuY3Rpb24gaChuKXtyZXR1cm4gcyhuKWluIHRoaXMuX31mdW5jdGlvbiBnKG4pe3JldHVybihuPXMobikpaW4gdGhpcy5fJiZkZWxldGUgdGhpcy5fW25dfWZ1bmN0aW9uIHAoKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcy5fKW4ucHVzaChmKHQpKTtyZXR1cm4gbn1mdW5jdGlvbiB2KCl7dmFyIG49MDtmb3IodmFyIHQgaW4gdGhpcy5fKSsrbjtyZXR1cm4gbn1mdW5jdGlvbiBkKCl7Zm9yKHZhciBuIGluIHRoaXMuXylyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBtKCl7dGhpcy5fPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24geShuKXtyZXR1cm4gbn1mdW5jdGlvbiBNKG4sdCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHQsYXJndW1lbnRzKTtyZXR1cm4gcj09PXQ/bjpyfX1mdW5jdGlvbiB4KG4sdCl7aWYodCBpbiBuKXJldHVybiB0O3Q9dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2Zvcih2YXIgZT0wLHI9ZGEubGVuZ3RoO3I+ZTsrK2Upe3ZhciB1PWRhW2VdK3Q7aWYodSBpbiBuKXJldHVybiB1fX1mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIF8oKXt9ZnVuY3Rpb24gdyhuKXtmdW5jdGlvbiB0KCl7Zm9yKHZhciB0LHI9ZSx1PS0xLGk9ci5sZW5ndGg7Kyt1PGk7KSh0PXJbdV0ub24pJiZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbn12YXIgZT1bXSxyPW5ldyBsO3JldHVybiB0Lm9uPWZ1bmN0aW9uKHQsdSl7dmFyIGksbz1yLmdldCh0KTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP28mJm8ub246KG8mJihvLm9uPW51bGwsZT1lLnNsaWNlKDAsaT1lLmluZGV4T2YobykpLmNvbmNhdChlLnNsaWNlKGkrMSkpLHIucmVtb3ZlKHQpKSx1JiZlLnB1c2goci5zZXQodCx7b246dX0pKSxuKX0sdH1mdW5jdGlvbiBTKCl7dGEuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBrKCl7Zm9yKHZhciBuLHQ9dGEuZXZlbnQ7bj10LnNvdXJjZUV2ZW50Oyl0PW47cmV0dXJuIHR9ZnVuY3Rpb24gRShuKXtmb3IodmFyIHQ9bmV3IF8sZT0wLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPXcodCk7cmV0dXJuIHQub2Y9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dHJ5e3ZhciBpPXUuc291cmNlRXZlbnQ9dGEuZXZlbnQ7dS50YXJnZXQ9bix0YS5ldmVudD11LHRbdS50eXBlXS5hcHBseShlLHIpfWZpbmFsbHl7dGEuZXZlbnQ9aX19fSx0fWZ1bmN0aW9uIEEobil7cmV0dXJuIHlhKG4sX2EpLG59ZnVuY3Rpb24gTihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIE1hKG4sdGhpcyl9fWZ1bmN0aW9uIEMobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmdW5jdGlvbigpe3JldHVybiB4YShuLHRoaXMpfX1mdW5jdGlvbiB6KG4sdCl7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCl9ZnVuY3Rpb24gdSgpe3RoaXMuc2V0QXR0cmlidXRlKG4sdCl9ZnVuY3Rpb24gaSgpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfWZ1bmN0aW9uIG8oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pOnRoaXMuc2V0QXR0cmlidXRlKG4sZSl9ZnVuY3Rpb24gYSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLGUpfXJldHVybiBuPXRhLm5zLnF1YWxpZnkobiksbnVsbD09dD9uLmxvY2FsP3I6ZToiZnVuY3Rpb24iPT10eXBlb2YgdD9uLmxvY2FsP2E6bzpuLmxvY2FsP2k6dX1mdW5jdGlvbiBxKG4pe3JldHVybiBuLnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uIEwobil7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3RhLnJlcXVvdGUobikrIig/Olxccyt8JCkiLCJnIil9ZnVuY3Rpb24gVChuKXtyZXR1cm4obisiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFIobix0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciBlPS0xOysrZTx1OyluW2VdKHRoaXMsdCl9ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT0tMSxyPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpOysrZTx1OyluW2VdKHRoaXMscil9bj1UKG4pLm1hcChEKTt2YXIgdT1uLmxlbmd0aDtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD9yOmV9ZnVuY3Rpb24gRChuKXt2YXIgdD1MKG4pO3JldHVybiBmdW5jdGlvbihlLHIpe2lmKHU9ZS5jbGFzc0xpc3QpcmV0dXJuIHI/dS5hZGQobik6dS5yZW1vdmUobik7dmFyIHU9ZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiO3I/KHQubGFzdEluZGV4PTAsdC50ZXN0KHUpfHxlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHEodSsiICIrbikpKTplLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHEodS5yZXBsYWNlKHQsIiAiKSkpfX1mdW5jdGlvbiBQKG4sdCxlKXtmdW5jdGlvbiByKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX1mdW5jdGlvbiB1KCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHQsZSl9ZnVuY3Rpb24gaSgpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4scixlKX1yZXR1cm4gbnVsbD09dD9yOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2k6dX1mdW5jdGlvbiBVKG4sdCl7ZnVuY3Rpb24gZSgpe2RlbGV0ZSB0aGlzW25dfWZ1bmN0aW9uIHIoKXt0aGlzW25dPXR9ZnVuY3Rpb24gdSgpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRlIHRoaXNbbl06dGhpc1tuXT1lfXJldHVybiBudWxsPT10P2U6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dTpyfWZ1bmN0aW9uIGoobil7ZnVuY3Rpb24gdCgpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlP3QuY3JlYXRlRWxlbWVudE5TKGUsbik6dC5jcmVhdGVFbGVtZW50KG4pfWZ1bmN0aW9uIGUoKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49dGEubnMucXVhbGlmeShuKSkubG9jYWw/ZTp0fWZ1bmN0aW9uIEYoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBIKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5jdGlvbiBPKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBiYSh0aGlzLG4pfX1mdW5jdGlvbiBJKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwobj1lKSxmdW5jdGlvbih0LGUpe3JldHVybiB0JiZlP24odC5fX2RhdGFfXyxlLl9fZGF0YV9fKTohdC0hZX19ZnVuY3Rpb24gWShuLHQpe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5lO2UrKylmb3IodmFyIHUsaT1uW2VdLG89MCxhPWkubGVuZ3RoO2E+bztvKyspKHU9aVtvXSkmJnQodSxvLGUpO3JldHVybiBufWZ1bmN0aW9uIFoobil7cmV0dXJuIHlhKG4sU2EpLG59ZnVuY3Rpb24gVihuKXt2YXIgdCxlO3JldHVybiBmdW5jdGlvbihyLHUsaSl7dmFyIG8sYT1uW2ldLnVwZGF0ZSxjPWEubGVuZ3RoO2ZvcihpIT1lJiYoZT1pLHQ9MCksdT49dCYmKHQ9dSsxKTshKG89YVt0XSkmJisrdDxjOyk7cmV0dXJuIG99fWZ1bmN0aW9uIFgobix0LGUpe2Z1bmN0aW9uIHIoKXt2YXIgdD10aGlzW29dO3QmJih0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobix0LHQuJCksZGVsZXRlIHRoaXNbb10pfWZ1bmN0aW9uIHUoKXt2YXIgdT1jKHQscmEoYXJndW1lbnRzKSk7ci5jYWxsKHRoaXMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihuLHRoaXNbb109dSx1LiQ9ZSksdS5fPXR9ZnVuY3Rpb24gaSgpe3ZhciB0LGU9bmV3IFJlZ0V4cCgiXl9fb24oW14uXSspIit0YS5yZXF1b3RlKG4pKyIkIik7Zm9yKHZhciByIGluIHRoaXMpaWYodD1yLm1hdGNoKGUpKXt2YXIgdT10aGlzW3JdO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0WzFdLHUsdS4kKSxkZWxldGUgdGhpc1tyXX19dmFyIG89Il9fb24iK24sYT1uLmluZGV4T2YoIi4iKSxjPSQ7YT4wJiYobj1uLnNsaWNlKDAsYSkpO3ZhciBsPWthLmdldChuKTtyZXR1cm4gbCYmKG49bCxjPUIpLGE/dD91OnI6dD9iOml9ZnVuY3Rpb24gJChuLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj10YS5ldmVudDt0YS5ldmVudD1lLHRbMF09dGhpcy5fX2RhdGFfXzt0cnl7bi5hcHBseSh0aGlzLHQpfWZpbmFsbHl7dGEuZXZlbnQ9cn19fWZ1bmN0aW9uIEIobix0KXt2YXIgZT0kKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMscj1uLnJlbGF0ZWRUYXJnZXQ7ciYmKHI9PT10fHw4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpfHxlLmNhbGwodCxuKX19ZnVuY3Rpb24gVyhlKXt2YXIgcj0iLmRyYWdzdXBwcmVzcy0iKyArK0FhLHU9ImNsaWNrIityLGk9dGEuc2VsZWN0KHQoZSkpLm9uKCJ0b3VjaG1vdmUiK3IsUykub24oImRyYWdzdGFydCIrcixTKS5vbigic2VsZWN0c3RhcnQiK3IsUyk7aWYobnVsbD09RWEmJihFYT0ib25zZWxlY3RzdGFydCJpbiBlPyExOngoZS5zdHlsZSwidXNlclNlbGVjdCIpKSxFYSl7dmFyIG89bihlKS5zdHlsZSxhPW9bRWFdO29bRWFdPSJub25lIn1yZXR1cm4gZnVuY3Rpb24obil7aWYoaS5vbihyLG51bGwpLEVhJiYob1tFYV09YSksbil7dmFyIHQ9ZnVuY3Rpb24oKXtpLm9uKHUsbnVsbCl9O2kub24odSxmdW5jdGlvbigpe1MoKSx0KCl9LCEwKSxzZXRUaW1lb3V0KHQsMCl9fX1mdW5jdGlvbiBKKG4sZSl7ZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIHI9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIHU9ci5jcmVhdGVTVkdQb2ludCgpO2lmKDA+TmEpe3ZhciBpPXQobik7aWYoaS5zY3JvbGxYfHxpLnNjcm9sbFkpe3I9dGEuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKTt2YXIgbz1yWzBdWzBdLmdldFNjcmVlbkNUTSgpO05hPSEoby5mfHxvLmUpLHIucmVtb3ZlKCl9fXJldHVybiBOYT8odS54PWUucGFnZVgsdS55PWUucGFnZVkpOih1Lng9ZS5jbGllbnRYLHUueT1lLmNsaWVudFkpLHU9dS5tYXRyaXhUcmFuc2Zvcm0obi5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFt1LngsdS55XX12YXIgYT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtYS5sZWZ0LW4uY2xpZW50TGVmdCxlLmNsaWVudFktYS50b3Atbi5jbGllbnRUb3BdfWZ1bmN0aW9uIEcoKXtyZXR1cm4gdGEuZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcn1mdW5jdGlvbiBLKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBRKG4sdCxlKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBdKX1mdW5jdGlvbiBudChuKXtyZXR1cm4gbj4xPzA6LTE+bj9xYTpNYXRoLmFjb3Mobil9ZnVuY3Rpb24gdHQobil7cmV0dXJuIG4+MT9SYTotMT5uPy1SYTpNYXRoLmFzaW4obil9ZnVuY3Rpb24gZXQobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9ZnVuY3Rpb24gcnQobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKSsxL24pLzJ9ZnVuY3Rpb24gdXQobil7cmV0dXJuKChuPU1hdGguZXhwKDIqbikpLTEpLyhuKzEpfWZ1bmN0aW9uIGl0KG4pe3JldHVybihuPU1hdGguc2luKG4vMikpKm59ZnVuY3Rpb24gb3QoKXt9ZnVuY3Rpb24gYXQobix0LGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYXQ/KHRoaXMuaD0rbix0aGlzLnM9K3Qsdm9pZCh0aGlzLmw9K2UpKTphcmd1bWVudHMubGVuZ3RoPDI/biBpbnN0YW5jZW9mIGF0P25ldyBhdChuLmgsbi5zLG4ubCk6YnQoIiIrbixfdCxhdCk6bmV3IGF0KG4sdCxlKX1mdW5jdGlvbiBjdChuLHQsZSl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbj4zNjA/bi09MzYwOjA+biYmKG4rPTM2MCksNjA+bj9pKyhvLWkpKm4vNjA6MTgwPm4/bzoyNDA+bj9pKyhvLWkpKigyNDAtbikvNjA6aX1mdW5jdGlvbiB1KG4pe3JldHVybiBNYXRoLnJvdW5kKDI1NSpyKG4pKX12YXIgaSxvO3JldHVybiBuPWlzTmFOKG4pPzA6KG4lPTM2MCk8MD9uKzM2MDpuLHQ9aXNOYU4odCk/MDowPnQ/MDp0PjE/MTp0LGU9MD5lPzA6ZT4xPzE6ZSxvPS41Pj1lP2UqKDErdCk6ZSt0LWUqdCxpPTIqZS1vLG5ldyBtdCh1KG4rMTIwKSx1KG4pLHUobi0xMjApKX1mdW5jdGlvbiBsdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBsdD8odGhpcy5oPStuLHRoaXMuYz0rdCx2b2lkKHRoaXMubD0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgbHQ/bmV3IGx0KG4uaCxuLmMsbi5sKTpuIGluc3RhbmNlb2YgZnQ/Z3Qobi5sLG4uYSxuLmIpOmd0KChuPXd0KChuPXRhLnJnYihuKSkucixuLmcsbi5iKSkubCxuLmEsbi5iKTpuZXcgbHQobix0LGUpfWZ1bmN0aW9uIHN0KG4sdCxlKXtyZXR1cm4gaXNOYU4obikmJihuPTApLGlzTmFOKHQpJiYodD0wKSxuZXcgZnQoZSxNYXRoLmNvcyhuKj1EYSkqdCxNYXRoLnNpbihuKSp0KX1mdW5jdGlvbiBmdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmdD8odGhpcy5sPStuLHRoaXMuYT0rdCx2b2lkKHRoaXMuYj0rZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgZnQ/bmV3IGZ0KG4ubCxuLmEsbi5iKTpuIGluc3RhbmNlb2YgbHQ/c3Qobi5oLG4uYyxuLmwpOnd0KChuPW10KG4pKS5yLG4uZyxuLmIpOm5ldyBmdChuLHQsZSl9ZnVuY3Rpb24gaHQobix0LGUpe3ZhciByPShuKzE2KS8xMTYsdT1yK3QvNTAwLGk9ci1lLzIwMDtyZXR1cm4gdT1wdCh1KSpYYSxyPXB0KHIpKiRhLGk9cHQoaSkqQmEsbmV3IG10KGR0KDMuMjQwNDU0Mip1LTEuNTM3MTM4NSpyLS40OTg1MzE0KmkpLGR0KC0uOTY5MjY2KnUrMS44NzYwMTA4KnIrLjA0MTU1NippKSxkdCguMDU1NjQzNCp1LS4yMDQwMjU5KnIrMS4wNTcyMjUyKmkpKX1mdW5jdGlvbiBndChuLHQsZSl7cmV0dXJuIG4+MD9uZXcgbHQoTWF0aC5hdGFuMihlLHQpKlBhLE1hdGguc3FydCh0KnQrZSplKSxuKTpuZXcgbHQoMC8wLDAvMCxuKX1mdW5jdGlvbiBwdChuKXtyZXR1cm4gbj4uMjA2ODkzMDM0P24qbipuOihuLTQvMjkpLzcuNzg3MDM3fWZ1bmN0aW9uIHZ0KG4pe3JldHVybiBuPi4wMDg4NTY/TWF0aC5wb3cobiwxLzMpOjcuNzg3MDM3Km4rNC8yOX1mdW5jdGlvbiBkdChuKXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqKC4wMDMwND49bj8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpKX1mdW5jdGlvbiBtdChuLHQsZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtdD8odGhpcy5yPX5+bix0aGlzLmc9fn50LHZvaWQodGhpcy5iPX5+ZSkpOmFyZ3VtZW50cy5sZW5ndGg8Mj9uIGluc3RhbmNlb2YgbXQ/bmV3IG10KG4ucixuLmcsbi5iKTpidCgiIituLG10LGN0KTpuZXcgbXQobix0LGUpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBuZXcgbXQobj4+MTYsbj4+OCYyNTUsMjU1Jm4pfWZ1bmN0aW9uIE10KG4pe3JldHVybiB5dChuKSsiIn1mdW5jdGlvbiB4dChuKXtyZXR1cm4gMTY+bj8iMCIrTWF0aC5tYXgoMCxuKS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LG4pLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBidChuLHQsZSl7dmFyIHIsdSxpLG89MCxhPTAsYz0wO2lmKHI9LyhbYS16XSspXCgoLiopXCkvaS5leGVjKG4pKXN3aXRjaCh1PXJbMl0uc3BsaXQoIiwiKSxyWzFdKXtjYXNlImhzbCI6cmV0dXJuIGUocGFyc2VGbG9hdCh1WzBdKSxwYXJzZUZsb2F0KHVbMV0pLzEwMCxwYXJzZUZsb2F0KHVbMl0pLzEwMCk7Y2FzZSJyZ2IiOnJldHVybiB0KGt0KHVbMF0pLGt0KHVbMV0pLGt0KHVbMl0pKX1yZXR1cm4oaT1HYS5nZXQobi50b0xvd2VyQ2FzZSgpKSk/dChpLnIsaS5nLGkuYik6KG51bGw9PW58fCIjIiE9PW4uY2hhckF0KDApfHxpc05hTihpPXBhcnNlSW50KG4uc2xpY2UoMSksMTYpKXx8KDQ9PT1uLmxlbmd0aD8obz0oMzg0MCZpKT4+NCxvPW8+PjR8byxhPTI0MCZpLGE9YT4+NHxhLGM9MTUmaSxjPWM8PDR8Yyk6Nz09PW4ubGVuZ3RoJiYobz0oMTY3MTE2ODAmaSk+PjE2LGE9KDY1MjgwJmkpPj44LGM9MjU1JmkpKSx0KG8sYSxjKSl9ZnVuY3Rpb24gX3Qobix0LGUpe3ZhciByLHUsaT1NYXRoLm1pbihuLz0yNTUsdC89MjU1LGUvPTI1NSksbz1NYXRoLm1heChuLHQsZSksYT1vLWksYz0obytpKS8yO3JldHVybiBhPyh1PS41PmM/YS8obytpKTphLygyLW8taSkscj1uPT1vPyh0LWUpL2ErKGU+dD82OjApOnQ9PW8/KGUtbikvYSsyOihuLXQpL2ErNCxyKj02MCk6KHI9MC8wLHU9Yz4wJiYxPmM/MDpyKSxuZXcgYXQocix1LGMpfWZ1bmN0aW9uIHd0KG4sdCxlKXtuPVN0KG4pLHQ9U3QodCksZT1TdChlKTt2YXIgcj12dCgoLjQxMjQ1NjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL1hhKSx1PXZ0KCguMjEyNjcyOSpuKy43MTUxNTIyKnQrLjA3MjE3NSplKS8kYSksaT12dCgoLjAxOTMzMzkqbisuMTE5MTkyKnQrLjk1MDMwNDEqZSkvQmEpO3JldHVybiBmdCgxMTYqdS0xNiw1MDAqKHItdSksMjAwKih1LWkpKX1mdW5jdGlvbiBTdChuKXtyZXR1cm4obi89MjU1KTw9LjA0MDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBrdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0KG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIEV0KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gQXQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksTnQodCxlLG4scil9fWZ1bmN0aW9uIE50KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVzO2lmKCF0JiZ6dChjKXx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5jYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIHZvaWQgby5lcnJvci5jYWxsKGkscil9by5sb2FkLmNhbGwoaSxuKX1lbHNlIG8uZXJyb3IuY2FsbChpLGMpfXZhciBpPXt9LG89dGEuZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGE9e30sYz1uZXcgWE1MSHR0cFJlcXVlc3QsbD1udWxsO3JldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PXRhLmV2ZW50O3RhLmV2ZW50PW47dHJ5e28ucHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7dGEuZXZlbnQ9dH19LGkuaGVhZGVyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10KyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4saSk6bH0saS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBpLnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KHJhKGFyZ3VtZW50cykpKX19KSxpLnNlbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51bGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBzIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKHMsYVtzXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHQpLG51bGwhPWwmJihjLnJlc3BvbnNlVHlwZT1sKSxudWxsIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVsbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVsbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSx0YS5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChDdChyKSl9ZnVuY3Rpb24gQ3Qobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVsbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIHp0KG4pe3ZhciB0PW4ucmVzcG9uc2VUeXBlO3JldHVybiB0JiYidGV4dCIhPT10P24ucmVzcG9uc2U6bi5yZXNwb25zZVRleHR9ZnVuY3Rpb24gcXQoKXt2YXIgbj1MdCgpLHQ9VHQoKS1uO3Q+MjQ/KGlzRmluaXRlKHQpJiYoY2xlYXJUaW1lb3V0KHRjKSx0Yz1zZXRUaW1lb3V0KHF0LHQpKSxuYz0wKToobmM9MSxyYyhxdCkpfWZ1bmN0aW9uIEx0KCl7dmFyIG49RGF0ZS5ub3coKTtmb3IoZWM9S2E7ZWM7KW4+PWVjLnQmJihlYy5mPWVjLmMobi1lYy50KSksZWM9ZWMubjtyZXR1cm4gbn1mdW5jdGlvbiBUdCgpe2Zvcih2YXIgbix0PUthLGU9MS8wO3Q7KXQuZj90PW4/bi5uPXQubjpLYT10Lm46KHQudDxlJiYoZT10LnQpLHQ9KG49dCkubik7cmV0dXJuIFFhPW4sZX1mdW5jdGlvbiBSdChuLHQpe3JldHVybiB0LShuP01hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLkxOMTApOjEpfWZ1bmN0aW9uIER0KG4sdCl7dmFyIGU9TWF0aC5wb3coMTAsMypnYSg4LXQpKTtyZXR1cm57c2NhbGU6dD44P2Z1bmN0aW9uKG4pe3JldHVybiBuL2V9OmZ1bmN0aW9uKG4pe3JldHVybiBuKmV9LHN5bWJvbDpufX1mdW5jdGlvbiBQdChuKXt2YXIgdD1uLmRlY2ltYWwsZT1uLnRob3VzYW5kcyxyPW4uZ3JvdXBpbmcsdT1uLmN1cnJlbmN5LGk9ciYmZT9mdW5jdGlvbihuLHQpe2Zvcih2YXIgdT1uLmxlbmd0aCxpPVtdLG89MCxhPXJbMF0sYz0wO3U+MCYmYT4wJiYoYythKzE+dCYmKGE9TWF0aC5tYXgoMSx0LWMpKSxpLnB1c2gobi5zdWJzdHJpbmcodS09YSx1K2EpKSwhKChjKz1hKzEpPnQpKTspYT1yW289KG8rMSklci5sZW5ndGhdO3JldHVybiBpLnJldmVyc2UoKS5qb2luKGUpfTp5O3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1pYy5leGVjKG4pLHI9ZVsxXXx8IiAiLG89ZVsyXXx8Ij4iLGE9ZVszXXx8Ii0iLGM9ZVs0XXx8IiIsbD1lWzVdLHM9K2VbNl0sZj1lWzddLGg9ZVs4XSxnPWVbOV0scD0xLHY9IiIsZD0iIixtPSExLHk9ITA7c3dpdGNoKGgmJihoPStoLnN1YnN0cmluZygxKSksKGx8fCIwIj09PXImJiI9Ij09PW8pJiYobD1yPSIwIixvPSI9IiksZyl7Y2FzZSJuIjpmPSEwLGc9ImciO2JyZWFrO2Nhc2UiJSI6cD0xMDAsZD0iJSIsZz0iZiI7YnJlYWs7Y2FzZSJwIjpwPTEwMCxkPSIlIixnPSJyIjticmVhaztjYXNlImIiOmNhc2UibyI6Y2FzZSJ4IjpjYXNlIlgiOiIjIj09PWMmJih2PSIwIitnLnRvTG93ZXJDYXNlKCkpO2Nhc2UiYyI6eT0hMTtjYXNlImQiOm09ITAsaD0wO2JyZWFrO2Nhc2UicyI6cD0tMSxnPSJyIn0iJCI9PT1jJiYodj11WzBdLGQ9dVsxXSksInIiIT1nfHxofHwoZz0iZyIpLG51bGwhPWgmJigiZyI9PWc/aD1NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKTooImUiPT1nfHwiZiI9PWcpJiYoaD1NYXRoLm1heCgwLE1hdGgubWluKDIwLGgpKSkpLGc9b2MuZ2V0KGcpfHxVdDt2YXIgTT1sJiZmO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1kO2lmKG0mJm4lMSlyZXR1cm4iIjt2YXIgdT0wPm58fDA9PT1uJiYwPjEvbj8obj0tbiwiLSIpOiItIj09PWE/IiI6YTtpZigwPnApe3ZhciBjPXRhLmZvcm1hdFByZWZpeChuLGgpO249Yy5zY2FsZShuKSxlPWMuc3ltYm9sK2R9ZWxzZSBuKj1wO249ZyhuLGgpO3ZhciB4LGIsXz1uLmxhc3RJbmRleE9mKCIuIik7aWYoMD5fKXt2YXIgdz15P24ubGFzdEluZGV4T2YoImUiKTotMTswPnc/KHg9bixiPSIiKTooeD1uLnN1YnN0cmluZygwLHcpLGI9bi5zdWJzdHJpbmcodykpfWVsc2UgeD1uLnN1YnN0cmluZygwLF8pLGI9dCtuLnN1YnN0cmluZyhfKzEpOyFsJiZmJiYoeD1pKHgsMS8wKSk7dmFyIFM9di5sZW5ndGgreC5sZW5ndGgrYi5sZW5ndGgrKE0/MDp1Lmxlbmd0aCksaz1zPlM/bmV3IEFycmF5KFM9cy1TKzEpLmpvaW4ocik6IiI7cmV0dXJuIE0mJih4PWkoayt4LGsubGVuZ3RoP3MtYi5sZW5ndGg6MS8wKSksdSs9dixuPXgrYiwoIjwiPT09bz91K24razoiPiI9PT1vP2srdStuOiJeIj09PW8/ay5zdWJzdHJpbmcoMCxTPj49MSkrdStuK2suc3Vic3RyaW5nKFMpOnUrKE0/bjprK24pKStlfX19ZnVuY3Rpb24gVXQobil7cmV0dXJuIG4rIiJ9ZnVuY3Rpb24ganQoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfWZ1bmN0aW9uIEZ0KG4sdCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPW4odCkscj1pKGUsMSk7cmV0dXJuIHItdD50LWU/ZTpyfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHQoZT1uKG5ldyBjYyhlLTEpKSwxKSxlfWZ1bmN0aW9uIGkobixlKXtyZXR1cm4gdChuPW5ldyBjYygrbiksZSksbn1mdW5jdGlvbiBvKG4scixpKXt2YXIgbz11KG4pLGE9W107aWYoaT4xKWZvcig7cj5vOyllKG8pJWl8fGEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtlbHNlIGZvcig7cj5vOylhLnB1c2gobmV3IERhdGUoK28pKSx0KG8sMSk7cmV0dXJuIGF9ZnVuY3Rpb24gYShuLHQsZSl7dHJ5e2NjPWp0O3ZhciByPW5ldyBqdDtyZXR1cm4gci5fPW4sbyhyLHQsZSl9ZmluYWxseXtjYz1EYXRlfX1uLmZsb29yPW4sbi5yb3VuZD1yLG4uY2VpbD11LG4ub2Zmc2V0PWksbi5yYW5nZT1vO3ZhciBjPW4udXRjPUh0KG4pO3JldHVybiBjLmZsb29yPWMsYy5yb3VuZD1IdChyKSxjLmNlaWw9SHQodSksYy5vZmZzZXQ9SHQoaSksYy5yYW5nZT1hLG59ZnVuY3Rpb24gSHQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dHJ5e2NjPWp0O3ZhciByPW5ldyBqdDtyZXR1cm4gci5fPXQsbihyLGUpLl99ZmluYWxseXtjYz1EYXRlfX19ZnVuY3Rpb24gT3Qobil7ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgZSx1LGksbz1bXSxhPS0xLGM9MDsrK2E8cjspMzc9PT1uLmNoYXJDb2RlQXQoYSkmJihvLnB1c2gobi5zbGljZShjLGEpKSxudWxsIT0odT1zY1tlPW4uY2hhckF0KCsrYSldKSYmKGU9bi5jaGFyQXQoKythKSksKGk9TltlXSkmJihlPWkodCxudWxsPT11PyJlIj09PWU/IiAiOiIwIjp1KSksby5wdXNoKGUpLGM9YSsxKTtyZXR1cm4gby5wdXNoKG4uc2xpY2UoYyxhKSksby5qb2luKCIiKX12YXIgcj1uLmxlbmd0aDtyZXR1cm4gdC5wYXJzZT1mdW5jdGlvbih0KXt2YXIgcj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH0sdT1lKHIsbix0LDApO2lmKHUhPXQubGVuZ3RoKXJldHVybiBudWxsOyJwImluIHImJihyLkg9ci5IJTEyKzEyKnIucCk7dmFyIGk9bnVsbCE9ci5aJiZjYyE9PWp0LG89bmV3KGk/anQ6Y2MpO3JldHVybiJqImluIHI/by5zZXRGdWxsWWVhcihyLnksMCxyLmopOiJ3ImluIHImJigiVyJpbiByfHwiVSJpbiByKT8oby5zZXRGdWxsWWVhcihyLnksMCwxKSxvLnNldEZ1bGxZZWFyKHIueSwwLCJXImluIHI/KHIudys2KSU3Kzcqci5XLShvLmdldERheSgpKzUpJTc6ci53Kzcqci5VLShvLmdldERheSgpKzYpJTcpKTpvLnNldEZ1bGxZZWFyKHIueSxyLm0sci5kKSxvLnNldEhvdXJzKHIuSCsoci5aLzEwMHwwKSxyLk0rci5aJTEwMCxyLlMsci5MKSxpP28uXzpvfSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIG59LHR9ZnVuY3Rpb24gZShuLHQsZSxyKXtmb3IodmFyIHUsaSxvLGE9MCxjPXQubGVuZ3RoLGw9ZS5sZW5ndGg7Yz5hOyl7aWYocj49bClyZXR1cm4tMTtpZih1PXQuY2hhckNvZGVBdChhKyspLDM3PT09dSl7aWYobz10LmNoYXJBdChhKyspLGk9Q1tvIGluIHNjP3QuY2hhckF0KGErKyk6b10sIWl8fChyPWkobixlLHIpKTwwKXJldHVybi0xfWVsc2UgaWYodSE9ZS5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9ZnVuY3Rpb24gcihuLHQsZSl7Xy5sYXN0SW5kZXg9MDt2YXIgcj1fLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4udz13LmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHUobix0LGUpe3gubGFzdEluZGV4PTA7dmFyIHI9eC5leGVjKHQuc2xpY2UoZSkpO3JldHVybiByPyhuLnc9Yi5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpKG4sdCxlKXtFLmxhc3RJbmRleD0wO3ZhciByPUUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5tPUEuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbyhuLHQsZSl7Uy5sYXN0SW5kZXg9MDt2YXIgcj1TLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4ubT1rLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGEobix0LHIpe3JldHVybiBlKG4sTi5jLnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBjKG4sdCxyKXtyZXR1cm4gZShuLE4ueC50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gbChuLHQscil7cmV0dXJuIGUobixOLlgudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIHMobix0LGUpe3ZhciByPU0uZ2V0KHQuc2xpY2UoZSxlKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09cj8tMToobi5wPXIsZSl9dmFyIGY9bi5kYXRlVGltZSxoPW4uZGF0ZSxnPW4udGltZSxwPW4ucGVyaW9kcyx2PW4uZGF5cyxkPW4uc2hvcnREYXlzLG09bi5tb250aHMseT1uLnNob3J0TW9udGhzO3QudXRjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUobil7dHJ5e2NjPWp0O3ZhciB0PW5ldyBjYztyZXR1cm4gdC5fPW4scih0KX1maW5hbGx5e2NjPURhdGV9fXZhciByPXQobik7cmV0dXJuIGUucGFyc2U9ZnVuY3Rpb24obil7dHJ5e2NjPWp0O3ZhciB0PXIucGFyc2Uobik7cmV0dXJuIHQmJnQuX31maW5hbGx5e2NjPURhdGV9fSxlLnRvU3RyaW5nPXIudG9TdHJpbmcsZX0sdC5tdWx0aT10LnV0Yy5tdWx0aT1hZTt2YXIgTT10YS5tYXAoKSx4PVl0KHYpLGI9WnQodiksXz1ZdChkKSx3PVp0KGQpLFM9WXQobSksaz1adChtKSxFPVl0KHkpLEE9WnQoeSk7cC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7TS5zZXQobi50b0xvd2VyQ2FzZSgpLHQpfSk7dmFyIE49e2E6ZnVuY3Rpb24obil7cmV0dXJuIGRbbi5nZXREYXkoKV19LEE6ZnVuY3Rpb24obil7cmV0dXJuIHZbbi5nZXREYXkoKV19LGI6ZnVuY3Rpb24obil7cmV0dXJuIHlbbi5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihuKXtyZXR1cm4gbVtuLmdldE1vbnRoKCldfSxjOnQoZiksZDpmdW5jdGlvbihuLHQpe3JldHVybiBJdChuLmdldERhdGUoKSx0LDIpfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0RGF0ZSgpLHQsMil9LEg6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRIb3VycygpLHQsMil9LEk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRIb3VycygpJTEyfHwxMix0LDIpfSxqOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KDErYWMuZGF5T2ZZZWFyKG4pLHQsMyl9LEw6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfSxtOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0TW9udGgoKSsxLHQsMil9LE06ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRNaW51dGVzKCksdCwyKX0scDpmdW5jdGlvbihuKXtyZXR1cm4gcFsrKG4uZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbihuLHQpe3JldHVybiBJdChuLmdldFNlY29uZHMoKSx0LDIpfSxVOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KGFjLnN1bmRheU9mWWVhcihuKSx0LDIpfSx3OmZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpfSxXOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KGFjLm1vbmRheU9mWWVhcihuKSx0LDIpfSx4OnQoaCksWDp0KGcpLHk6ZnVuY3Rpb24obix0KXtyZXR1cm4gSXQobi5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfSxZOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIEl0KG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX0sWjppZSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxDPXthOnIsQTp1LGI6aSxCOm8sYzphLGQ6UXQsZTpRdCxIOnRlLEk6dGUsajpuZSxMOnVlLG06S3QsTTplZSxwOnMsUzpyZSxVOlh0LHc6VnQsVzokdCx4OmMsWDpsLHk6V3QsWTpCdCxaOkp0LCIlIjpvZX07cmV0dXJuIHR9ZnVuY3Rpb24gSXQobix0LGUpe3ZhciByPTA+bj8iLSI6IiIsdT0ocj8tbjpuKSsiIixpPXUubGVuZ3RoO3JldHVybiByKyhlPmk/bmV3IEFycmF5KGUtaSsxKS5qb2luKHQpK3U6dSl9ZnVuY3Rpb24gWXQobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKHRhLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBadChuKXtmb3IodmFyIHQ9bmV3IGwsZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnNldChuW2VdLnRvTG93ZXJDYXNlKCksZSk7cmV0dXJuIHR9ZnVuY3Rpb24gVnQobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiByPyhuLnc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHQobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlKSk7cmV0dXJuIHI/KG4uVT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkdChuLHQsZSl7ZmMubGFzdEluZGV4PTA7dmFyIHI9ZmMuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gcj8obi5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJ0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzQpKTtyZXR1cm4gcj8obi55PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFd0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi55PUd0KCtyWzBdKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKdChuLHQsZSl7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KHQ9dC5zbGljZShlLGUrNSkpPyhuLlo9LXQsZSs1KTotMX1mdW5jdGlvbiBHdChuKXtyZXR1cm4gbisobj42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gS3Qobix0LGUpe2ZjLmxhc3RJbmRleD0wO3ZhciByPWZjLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiByPyhuLm09clswXS0xLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFF0KG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5kPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5lKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8obi5qPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5IPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5NPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8obi5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVlKG4sdCxlKXtmYy5sYXN0SW5kZXg9MDt2YXIgcj1mYy5leGVjKHQuc2xpY2UoZSxlKzMpKTtyZXR1cm4gcj8obi5MPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGllKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKSxlPXQ+MD8iLSI6IisiLHI9Z2EodCkvNjB8MCx1PWdhKHQpJTYwO3JldHVybiBlK0l0KHIsIjAiLDIpK0l0KHUsIjAiLDIpfWZ1bmN0aW9uIG9lKG4sdCxlKXtoYy5sYXN0SW5kZXg9MDt2YXIgcj1oYy5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj9lK3JbMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGFlKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCxlPS0xOysrZTx0OyluW2VdWzBdPXRoaXMobltlXVswXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9bltlXTshclsxXSh0KTspcj1uWysrZV07cmV0dXJuIHJbMF0odCl9fWZ1bmN0aW9uIGNlKCl7fWZ1bmN0aW9uIGxlKG4sdCxlKXt2YXIgcj1lLnM9bit0LHU9ci1uLGk9ci11O2UudD1uLWkrKHQtdSl9ZnVuY3Rpb24gc2Uobix0KXtuJiZkYy5oYXNPd25Qcm9wZXJ0eShuLnR5cGUpJiZkY1tuLnR5cGVdKG4sdCl9ZnVuY3Rpb24gZmUobix0LGUpe3ZhciByLHU9LTEsaT1uLmxlbmd0aC1lO2Zvcih0LmxpbmVTdGFydCgpOysrdTxpOylyPW5bdV0sdC5wb2ludChyWzBdLHJbMV0sclsyXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gaGUobix0KXt2YXIgZT0tMSxyPW4ubGVuZ3RoO2Zvcih0LnBvbHlnb25TdGFydCgpOysrZTxyOylmZShuW2VdLHQsMSk7dC5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gZ2UoKXtmdW5jdGlvbiBuKG4sdCl7bio9RGEsdD10KkRhLzIrcWEvNDt2YXIgZT1uLXIsbz1lPj0wPzE6LTEsYT1vKmUsYz1NYXRoLmNvcyh0KSxsPU1hdGguc2luKHQpLHM9aSpsLGY9dSpjK3MqTWF0aC5jb3MoYSksaD1zKm8qTWF0aC5zaW4oYSk7eWMuYWRkKE1hdGguYXRhbjIoaCxmKSkscj1uLHU9YyxpPWx9dmFyIHQsZSxyLHUsaTtNYy5wb2ludD1mdW5jdGlvbihvLGEpe01jLnBvaW50PW4scj0odD1vKSpEYSx1PU1hdGguY29zKGE9KGU9YSkqRGEvMitxYS80KSxpPU1hdGguc2luKGEpfSxNYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBwZShuKXt2YXIgdD1uWzBdLGU9blsxXSxyPU1hdGguY29zKGUpO3JldHVybltyKk1hdGguY29zKHQpLHIqTWF0aC5zaW4odCksTWF0aC5zaW4oZSldfWZ1bmN0aW9uIHZlKG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV0rblsyXSp0WzJdfWZ1bmN0aW9uIGRlKG4sdCl7cmV0dXJuW25bMV0qdFsyXS1uWzJdKnRbMV0sblsyXSp0WzBdLW5bMF0qdFsyXSxuWzBdKnRbMV0tblsxXSp0WzBdXX1mdW5jdGlvbiBtZShuLHQpe25bMF0rPXRbMF0sblsxXSs9dFsxXSxuWzJdKz10WzJdfWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuW25bMF0qdCxuWzFdKnQsblsyXSp0XX1mdW5jdGlvbiBNZShuKXt2YXIgdD1NYXRoLnNxcnQoblswXSpuWzBdK25bMV0qblsxXStuWzJdKm5bMl0pO25bMF0vPXQsblsxXS89dCxuWzJdLz10fWZ1bmN0aW9uIHhlKG4pe3JldHVybltNYXRoLmF0YW4yKG5bMV0sblswXSksdHQoblsyXSldfWZ1bmN0aW9uIGJlKG4sdCl7cmV0dXJuIGdhKG5bMF0tdFswXSk8Q2EmJmdhKG5bMV0tdFsxXSk8Q2F9ZnVuY3Rpb24gX2Uobix0KXtuKj1EYTt2YXIgZT1NYXRoLmNvcyh0Kj1EYSk7d2UoZSpNYXRoLmNvcyhuKSxlKk1hdGguc2luKG4pLE1hdGguc2luKHQpKX1mdW5jdGlvbiB3ZShuLHQsZSl7Kyt4YyxfYys9KG4tX2MpL3hjLHdjKz0odC13YykveGMsU2MrPShlLVNjKS94Y31mdW5jdGlvbiBTZSgpe2Z1bmN0aW9uIG4obix1KXtuKj1EYTt2YXIgaT1NYXRoLmNvcyh1Kj1EYSksbz1pKk1hdGguY29zKG4pLGE9aSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHUpLGw9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGw9ZSpjLXIqYSkqbCsobD1yKm8tdCpjKSpsKyhsPXQqYS1lKm8pKmwpLHQqbytlKmErcipjKTtiYys9bCxrYys9bCoodCsodD1vKSksRWMrPWwqKGUrKGU9YSkpLEFjKz1sKihyKyhyPWMpKSx3ZSh0LGUscil9dmFyIHQsZSxyO3FjLnBvaW50PWZ1bmN0aW9uKHUsaSl7dSo9RGE7dmFyIG89TWF0aC5jb3MoaSo9RGEpO3Q9bypNYXRoLmNvcyh1KSxlPW8qTWF0aC5zaW4odSkscj1NYXRoLnNpbihpKSxxYy5wb2ludD1uLHdlKHQsZSxyKX19ZnVuY3Rpb24ga2UoKXtxYy5wb2ludD1fZX1mdW5jdGlvbiBFZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1EYTt2YXIgZT1NYXRoLmNvcyh0Kj1EYSksbz1lKk1hdGguY29zKG4pLGE9ZSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHQpLGw9dSpjLWkqYSxzPWkqby1yKmMsZj1yKmEtdSpvLGg9TWF0aC5zcXJ0KGwqbCtzKnMrZipmKSxnPXIqbyt1KmEraSpjLHA9aCYmLW50KGcpL2gsdj1NYXRoLmF0YW4yKGgsZyk7TmMrPXAqbCxDYys9cCpzLHpjKz1wKmYsYmMrPXYsa2MrPXYqKHIrKHI9bykpLEVjKz12Kih1Kyh1PWEpKSxBYys9diooaSsoaT1jKSksd2Uocix1LGkpfXZhciB0LGUscix1LGk7cWMucG9pbnQ9ZnVuY3Rpb24obyxhKXt0PW8sZT1hLHFjLnBvaW50PW4sbyo9RGE7dmFyIGM9TWF0aC5jb3MoYSo9RGEpO3I9YypNYXRoLmNvcyhvKSx1PWMqTWF0aC5zaW4obyksaT1NYXRoLnNpbihhKSx3ZShyLHUsaSl9LHFjLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSkscWMubGluZUVuZD1rZSxxYy5wb2ludD1fZX19ZnVuY3Rpb24gQWUobix0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGU9bihlLHIpLHQoZVswXSxlWzFdKX1yZXR1cm4gbi5pbnZlcnQmJnQuaW52ZXJ0JiYoZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZT10LmludmVydChlLHIpLGUmJm4uaW52ZXJ0KGVbMF0sZVsxXSl9KSxlfWZ1bmN0aW9uIE5lKCl7cmV0dXJuITB9ZnVuY3Rpb24gQ2Uobix0LGUscix1KXt2YXIgaT1bXSxvPVtdO2lmKG4uZm9yRWFjaChmdW5jdGlvbihuKXtpZighKCh0PW4ubGVuZ3RoLTEpPD0wKSl7dmFyIHQsZT1uWzBdLHI9blt0XTtpZihiZShlLHIpKXt1LmxpbmVTdGFydCgpO2Zvcih2YXIgYT0wO3Q+YTsrK2EpdS5wb2ludCgoZT1uW2FdKVswXSxlWzFdKTtyZXR1cm4gdm9pZCB1LmxpbmVFbmQoKX12YXIgYz1uZXcgcWUoZSxuLG51bGwsITApLGw9bmV3IHFlKGUsbnVsbCxjLCExKTtjLm89bCxpLnB1c2goYyksby5wdXNoKGwpLGM9bmV3IHFlKHIsbixudWxsLCExKSxsPW5ldyBxZShyLG51bGwsYywhMCksYy5vPWwsaS5wdXNoKGMpLG8ucHVzaChsKX19KSxvLnNvcnQodCksemUoaSksemUobyksaS5sZW5ndGgpe2Zvcih2YXIgYT0wLGM9ZSxsPW8ubGVuZ3RoO2w+YTsrK2Epb1thXS5lPWM9IWM7Zm9yKHZhciBzLGYsaD1pWzBdOzspe2Zvcih2YXIgZz1oLHA9ITA7Zy52OylpZigoZz1nLm4pPT09aClyZXR1cm47cz1nLnosdS5saW5lU3RhcnQoKTtkb3tpZihnLnY9Zy5vLnY9ITAsZy5lKXtpZihwKWZvcih2YXIgYT0wLGw9cy5sZW5ndGg7bD5hOysrYSl1LnBvaW50KChmPXNbYV0pWzBdLGZbMV0pO2Vsc2UgcihnLngsZy5uLngsMSx1KTtnPWcubn1lbHNle2lmKHApe3M9Zy5wLno7Zm9yKHZhciBhPXMubGVuZ3RoLTE7YT49MDstLWEpdS5wb2ludCgoZj1zW2FdKVswXSxmWzFdKX1lbHNlIHIoZy54LGcucC54LC0xLHUpO2c9Zy5wfWc9Zy5vLHM9Zy56LHA9IXB9d2hpbGUoIWcudik7dS5saW5lRW5kKCl9fX1mdW5jdGlvbiB6ZShuKXtpZih0PW4ubGVuZ3RoKXtmb3IodmFyIHQsZSxyPTAsdT1uWzBdOysrcjx0Oyl1Lm49ZT1uW3JdLGUucD11LHU9ZTt1Lm49ZT1uWzBdLGUucD11fX1mdW5jdGlvbiBxZShuLHQsZSxyKXt0aGlzLng9bix0aGlzLno9dCx0aGlzLm89ZSx0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIExlKG4sdCxlLHIpe3JldHVybiBmdW5jdGlvbih1LGkpe2Z1bmN0aW9uIG8odCxlKXt2YXIgcj11KHQsZSk7bih0PXJbMF0sZT1yWzFdKSYmaS5wb2ludCh0LGUpfWZ1bmN0aW9uIGEobix0KXt2YXIgZT11KG4sdCk7ZC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGMoKXt5LnBvaW50PWEsZC5saW5lU3RhcnQoKX1mdW5jdGlvbiBsKCl7eS5wb2ludD1vLGQubGluZUVuZCgpfWZ1bmN0aW9uIHMobix0KXt2LnB1c2goW24sdF0pO3ZhciBlPXUobix0KTt4LnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gZigpe3gubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiBoKCl7cyh2WzBdWzBdLHZbMF1bMV0pLHgubGluZUVuZCgpO3ZhciBuLHQ9eC5jbGVhbigpLGU9TS5idWZmZXIoKSxyPWUubGVuZ3RoO2lmKHYucG9wKCkscC5wdXNoKHYpLHY9bnVsbCxyKWlmKDEmdCl7bj1lWzBdO3ZhciB1LHI9bi5sZW5ndGgtMSxvPS0xO2lmKHI+MCl7Zm9yKGJ8fChpLnBvbHlnb25TdGFydCgpLGI9ITApLGkubGluZVN0YXJ0KCk7KytvPHI7KWkucG9pbnQoKHU9bltvXSlbMF0sdVsxXSk7aS5saW5lRW5kKCl9fWVsc2Ugcj4xJiYyJnQmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKSxnLnB1c2goZS5maWx0ZXIoVGUpKX12YXIgZyxwLHYsZD10KGkpLG09dS5pbnZlcnQoclswXSxyWzFdKSx5PXtwb2ludDpvLGxpbmVTdGFydDpjLGxpbmVFbmQ6bCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt5LnBvaW50PXMseS5saW5lU3RhcnQ9Zix5LmxpbmVFbmQ9aCxnPVtdLHA9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt5LnBvaW50PW8seS5saW5lU3RhcnQ9Yyx5LmxpbmVFbmQ9bCxnPXRhLm1lcmdlKGcpO3ZhciBuPUZlKG0scCk7Zy5sZW5ndGg/KGJ8fChpLnBvbHlnb25TdGFydCgpLGI9ITApLENlKGcsRGUsbixlLGkpKTpuJiYoYnx8KGkucG9seWdvblN0YXJ0KCksYj0hMCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxiJiYoaS5wb2x5Z29uRW5kKCksYj0hMSksZz1wPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX0sTT1SZSgpLHg9dChNKSxiPSExO3JldHVybiB5fX1mdW5jdGlvbiBUZShuKXtyZXR1cm4gbi5sZW5ndGg+MX1mdW5jdGlvbiBSZSgpe3ZhciBuLHQ9W107cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QucHVzaChuPVtdKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtuLnB1c2goW3QsZV0pfSxsaW5lRW5kOmIsYnVmZmVyOmZ1bmN0aW9uKCl7dmFyIGU9dDtyZXR1cm4gdD1bXSxuPW51bGwsZX0scmVqb2luOmZ1bmN0aW9uKCl7dC5sZW5ndGg+MSYmdC5wdXNoKHQucG9wKCkuY29uY2F0KHQuc2hpZnQoKSkpfX19ZnVuY3Rpb24gRGUobix0KXtyZXR1cm4oKG49bi54KVswXTwwP25bMV0tUmEtQ2E6UmEtblsxXSktKCh0PXQueClbMF08MD90WzFdLVJhLUNhOlJhLXRbMV0pfWZ1bmN0aW9uIFBlKG4pe3ZhciB0LGU9MC8wLHI9MC8wLHU9MC8wO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpLHQ9MX0scG9pbnQ6ZnVuY3Rpb24oaSxvKXt2YXIgYT1pPjA/cWE6LXFhLGM9Z2EoaS1lKTtnYShjLXFhKTxDYT8obi5wb2ludChlLHI9KHIrbykvMj4wP1JhOi1SYSksbi5wb2ludCh1LHIpLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludChhLHIpLG4ucG9pbnQoaSxyKSx0PTApOnUhPT1hJiZjPj1xYSYmKGdhKGUtdSk8Q2EmJihlLT11KkNhKSxnYShpLWEpPENhJiYoaS09YSpDYSkscj1VZShlLHIsaSxvKSxuLnBvaW50KHUsciksbi5saW5lRW5kKCksbi5saW5lU3RhcnQoKSxuLnBvaW50KGEsciksdD0wKSxuLnBvaW50KGU9aSxyPW8pLHU9YX0sbGluZUVuZDpmdW5jdGlvbigpe24ubGluZUVuZCgpLGU9cj0wLzB9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItdH19fWZ1bmN0aW9uIFVlKG4sdCxlLHIpe3ZhciB1LGksbz1NYXRoLnNpbihuLWUpO3JldHVybiBnYShvKT5DYT9NYXRoLmF0YW4oKE1hdGguc2luKHQpKihpPU1hdGguY29zKHIpKSpNYXRoLnNpbihlKS1NYXRoLnNpbihyKSoodT1NYXRoLmNvcyh0KSkqTWF0aC5zaW4obikpLyh1KmkqbykpOih0K3IpLzJ9ZnVuY3Rpb24gamUobix0LGUscil7dmFyIHU7aWYobnVsbD09bil1PWUqUmEsci5wb2ludCgtcWEsdSksci5wb2ludCgwLHUpLHIucG9pbnQocWEsdSksci5wb2ludChxYSwwKSxyLnBvaW50KHFhLC11KSxyLnBvaW50KDAsLXUpLHIucG9pbnQoLXFhLC11KSxyLnBvaW50KC1xYSwwKSxyLnBvaW50KC1xYSx1KTtlbHNlIGlmKGdhKG5bMF0tdFswXSk+Q2Epe3ZhciBpPW5bMF08dFswXT9xYTotcWE7dT1lKmkvMixyLnBvaW50KC1pLHUpLHIucG9pbnQoMCx1KSxyLnBvaW50KGksdSl9ZWxzZSByLnBvaW50KHRbMF0sdFsxXSl9ZnVuY3Rpb24gRmUobix0KXt2YXIgZT1uWzBdLHI9blsxXSx1PVtNYXRoLnNpbihlKSwtTWF0aC5jb3MoZSksMF0saT0wLG89MDt5Yy5yZXNldCgpO2Zvcih2YXIgYT0wLGM9dC5sZW5ndGg7Yz5hOysrYSl7dmFyIGw9dFthXSxzPWwubGVuZ3RoO2lmKHMpZm9yKHZhciBmPWxbMF0saD1mWzBdLGc9ZlsxXS8yK3FhLzQscD1NYXRoLnNpbihnKSx2PU1hdGguY29zKGcpLGQ9MTs7KXtkPT09cyYmKGQ9MCksbj1sW2RdO3ZhciBtPW5bMF0seT1uWzFdLzIrcWEvNCxNPU1hdGguc2luKHkpLHg9TWF0aC5jb3MoeSksYj1tLWgsXz1iPj0wPzE6LTEsdz1fKmIsUz13PnFhLGs9cCpNO2lmKHljLmFkZChNYXRoLmF0YW4yKGsqXypNYXRoLnNpbih3KSx2KngraypNYXRoLmNvcyh3KSkpLGkrPVM/YitfKkxhOmIsU15oPj1lXm0+PWUpe3ZhciBFPWRlKHBlKGYpLHBlKG4pKTtNZShFKTt2YXIgQT1kZSh1LEUpO01lKEEpO3ZhciBOPShTXmI+PTA/LTE6MSkqdHQoQVsyXSk7KHI+Tnx8cj09PU4mJihFWzBdfHxFWzFdKSkmJihvKz1TXmI+PTA/MTotMSl9aWYoIWQrKylicmVhaztoPW0scD1NLHY9eCxmPW59fXJldHVybigtQ2E+aXx8Q2E+aSYmMD55YyleMSZvfWZ1bmN0aW9uIEhlKG4pe2Z1bmN0aW9uIHQobix0KXtyZXR1cm4gTWF0aC5jb3MobikqTWF0aC5jb3ModCk+aX1mdW5jdGlvbiBlKG4pe3ZhciBlLGksYyxsLHM7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2w9Yz0hMSxzPTF9LHBvaW50OmZ1bmN0aW9uKGYsaCl7dmFyIGcscD1bZixoXSx2PXQoZixoKSxkPW8/dj8wOnUoZixoKTp2P3UoZisoMD5mP3FhOi1xYSksaCk6MDtpZighZSYmKGw9Yz12KSYmbi5saW5lU3RhcnQoKSx2IT09YyYmKGc9cihlLHApLChiZShlLGcpfHxiZShwLGcpKSYmKHBbMF0rPUNhLHBbMV0rPUNhLHY9dChwWzBdLHBbMV0pKSksdiE9PWMpcz0wLHY/KG4ubGluZVN0YXJ0KCksZz1yKHAsZSksbi5wb2ludChnWzBdLGdbMV0pKTooZz1yKGUscCksbi5wb2ludChnWzBdLGdbMV0pLG4ubGluZUVuZCgpKSxlPWc7ZWxzZSBpZihhJiZlJiZvXnYpe3ZhciBtO2QmaXx8IShtPXIocCxlLCEwKSl8fChzPTAsbz8obi5saW5lU3RhcnQoKSxuLnBvaW50KG1bMF1bMF0sbVswXVsxXSksbi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpKToobi5wb2ludChtWzFdWzBdLG1bMV1bMV0pLG4ubGluZUVuZCgpLG4ubGluZVN0YXJ0KCksbi5wb2ludChtWzBdWzBdLG1bMF1bMV0pKSl9IXZ8fGUmJmJlKGUscCl8fG4ucG9pbnQocFswXSxwWzFdKSxlPXAsYz12LGk9ZH0sbGluZUVuZDpmdW5jdGlvbigpe2MmJm4ubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gc3wobCYmYyk8PDF9fX1mdW5jdGlvbiByKG4sdCxlKXt2YXIgcj1wZShuKSx1PXBlKHQpLG89WzEsMCwwXSxhPWRlKHIsdSksYz12ZShhLGEpLGw9YVswXSxzPWMtbCpsO2lmKCFzKXJldHVybiFlJiZuO3ZhciBmPWkqYy9zLGg9LWkqbC9zLGc9ZGUobyxhKSxwPXllKG8sZiksdj15ZShhLGgpO21lKHAsdik7dmFyIGQ9ZyxtPXZlKHAsZCkseT12ZShkLGQpLE09bSptLXkqKHZlKHAscCktMSk7aWYoISgwPk0pKXt2YXIgeD1NYXRoLnNxcnQoTSksYj15ZShkLCgtbS14KS95KTtpZihtZShiLHApLGI9eGUoYiksIWUpcmV0dXJuIGI7dmFyIF8sdz1uWzBdLFM9dFswXSxrPW5bMV0sRT10WzFdO3c+UyYmKF89dyx3PVMsUz1fKTt2YXIgQT1TLXcsTj1nYShBLXFhKTxDYSxDPU58fENhPkE7aWYoIU4mJms+RSYmKF89ayxrPUUsRT1fKSxDP04/aytFPjBeYlsxXTwoZ2EoYlswXS13KTxDYT9rOkUpOms8PWJbMV0mJmJbMV08PUU6QT5xYV4odzw9YlswXSYmYlswXTw9Uykpe3ZhciB6PXllKGQsKC1tK3gpL3kpO3JldHVybiBtZSh6LHApLFtiLHhlKHopXX19fWZ1bmN0aW9uIHUodCxlKXt2YXIgcj1vP246cWEtbix1PTA7cmV0dXJuLXI+dD91fD0xOnQ+ciYmKHV8PTIpLC1yPmU/dXw9NDplPnImJih1fD04KSx1fXZhciBpPU1hdGguY29zKG4pLG89aT4wLGE9Z2EoaSk+Q2EsYz1ncihuLDYqRGEpO3JldHVybiBMZSh0LGUsYyxvP1swLC1uXTpbLXFhLG4tcWFdKX1mdW5jdGlvbiBPZShuLHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGksbz11LmEsYT11LmIsYz1vLngsbD1vLnkscz1hLngsZj1hLnksaD0wLGc9MSxwPXMtYyx2PWYtbDtpZihpPW4tYyxwfHwhKGk+MCkpe2lmKGkvPXAsMD5wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9ZWxzZSBpZihwPjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPWUtYyxwfHwhKDA+aSkpe2lmKGkvPXAsMD5wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9ZWxzZSBpZihwPjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1pZihpPXQtbCx2fHwhKGk+MCkpe2lmKGkvPXYsMD52KXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9ZWxzZSBpZih2PjApe2lmKGk+ZylyZXR1cm47aT5oJiYoaD1pKX1pZihpPXItbCx2fHwhKDA+aSkpe2lmKGkvPXYsMD52KXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9ZWxzZSBpZih2PjApe2lmKGg+aSlyZXR1cm47Zz5pJiYoZz1pKX1yZXR1cm4gaD4wJiYodS5hPXt4OmMraCpwLHk6bCtoKnZ9KSwxPmcmJih1LmI9e3g6YytnKnAseTpsK2cqdn0pLHV9fX19fX1mdW5jdGlvbiBJZShuLHQsZSxyKXtmdW5jdGlvbiB1KHIsdSl7cmV0dXJuIGdhKHJbMF0tbik8Q2E/dT4wPzA6MzpnYShyWzBdLWUpPENhP3U+MD8yOjE6Z2EoclsxXS10KTxDYT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24gaShuLHQpe3JldHVybiBvKG4ueCx0LngpfWZ1bmN0aW9uIG8obix0KXt2YXIgZT11KG4sMSkscj11KHQsMSk7cmV0dXJuIGUhPT1yP2UtcjowPT09ZT90WzFdLW5bMV06MT09PWU/blswXS10WzBdOjI9PT1lP25bMV0tdFsxXTp0WzBdLW5bMF19cmV0dXJuIGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMobil7Zm9yKHZhciB0PTAsZT1kLmxlbmd0aCxyPW5bMV0sdT0wO2U+dTsrK3UpZm9yKHZhciBpLG89MSxhPWRbdV0sYz1hLmxlbmd0aCxsPWFbMF07Yz5vOysrbylpPWFbb10sbFsxXTw9cj9pWzFdPnImJlEobCxpLG4pPjAmJisrdDppWzFdPD1yJiZRKGwsaSxuKTwwJiYtLXQsbD1pO3JldHVybiAwIT09dH1mdW5jdGlvbiBsKGksYSxjLGwpe3ZhciBzPTAsZj0wO2lmKG51bGw9PWl8fChzPXUoaSxjKSkhPT0oZj11KGEsYykpfHxvKGksYSk8MF5jPjApe2RvIGwucG9pbnQoMD09PXN8fDM9PT1zP246ZSxzPjE/cjp0KTt3aGlsZSgocz0ocytjKzQpJTQpIT09Zil9ZWxzZSBsLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gcyh1LGkpe3JldHVybiB1Pj1uJiZlPj11JiZpPj10JiZyPj1pfWZ1bmN0aW9uIGYobix0KXtzKG4sdCkmJmEucG9pbnQobix0KX1mdW5jdGlvbiBoKCl7Qy5wb2ludD1wLGQmJmQucHVzaChtPVtdKSxTPSEwLHc9ITEsYj1fPTAvMH1mdW5jdGlvbiBnKCl7diYmKHAoeSxNKSx4JiZ3JiZBLnJlam9pbigpLHYucHVzaChBLmJ1ZmZlcigpKSksQy5wb2ludD1mLHcmJmEubGluZUVuZCgpfWZ1bmN0aW9uIHAobix0KXtuPU1hdGgubWF4KC1UYyxNYXRoLm1pbihUYyxuKSksdD1NYXRoLm1heCgtVGMsTWF0aC5taW4oVGMsdCkpO3ZhciBlPXMobix0KTtpZihkJiZtLnB1c2goW24sdF0pLFMpeT1uLE09dCx4PWUsUz0hMSxlJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCkpO2Vsc2UgaWYoZSYmdylhLnBvaW50KG4sdCk7ZWxzZXt2YXIgcj17YTp7eDpiLHk6X30sYjp7eDpuLHk6dH19O04ocik/KHd8fChhLmxpbmVTdGFydCgpLGEucG9pbnQoci5hLngsci5hLnkpKSxhLnBvaW50KHIuYi54LHIuYi55KSxlfHxhLmxpbmVFbmQoKSxrPSExKTplJiYoYS5saW5lU3RhcnQoKSxhLnBvaW50KG4sdCksaz0hMSl9Yj1uLF89dCx3PWV9dmFyIHYsZCxtLHksTSx4LGIsXyx3LFMsayxFPWEsQT1SZSgpLE49T2Uobix0LGUsciksQz17cG9pbnQ6ZixsaW5lU3RhcnQ6aCxsaW5lRW5kOmcscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YT1BLHY9W10sZD1bXSxrPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YT1FLHY9dGEubWVyZ2Uodik7dmFyIHQ9YyhbbixyXSksZT1rJiZ0LHU9di5sZW5ndGg7KGV8fHUpJiYoYS5wb2x5Z29uU3RhcnQoKSxlJiYoYS5saW5lU3RhcnQoKSxsKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSx1JiZDZSh2LGksdCxsLGEpLGEucG9seWdvbkVuZCgpKSx2PWQ9bT1udWxsfX07cmV0dXJuIEN9fWZ1bmN0aW9uIFllKG4pe3ZhciB0PTAsZT1xYS8zLHI9aXIobiksdT1yKHQsZSk7cmV0dXJuIHUucGFyYWxsZWxzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD1uWzBdKnFhLzE4MCxlPW5bMV0qcWEvMTgwKTpbdC9xYSoxODAsZS9xYSoxODBdfSx1fWZ1bmN0aW9uIFplKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguc3FydChpLTIqdSpNYXRoLnNpbih0KSkvdTtyZXR1cm5bZSpNYXRoLnNpbihuKj11KSxvLWUqTWF0aC5jb3MobildfXZhciByPU1hdGguc2luKG4pLHU9KHIrTWF0aC5zaW4odCkpLzIsaT0xK3IqKDIqdS1yKSxvPU1hdGguc3FydChpKS91O3JldHVybiBlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsdHQoKGktKG4qbitlKmUpKnUqdSkvKDIqdSkpXX0sZX1mdW5jdGlvbiBWZSgpe2Z1bmN0aW9uIG4obix0KXtEYys9dSpuLXIqdCxyPW4sdT10fXZhciB0LGUscix1O0hjLnBvaW50PWZ1bmN0aW9uKGksbyl7SGMucG9pbnQ9bix0PXI9aSxlPXU9b30sSGMubGluZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gWGUobix0KXtQYz5uJiYoUGM9biksbj5qYyYmKGpjPW4pLFVjPnQmJihVYz10KSx0PkZjJiYoRmM9dCl9ZnVuY3Rpb24gJGUoKXtmdW5jdGlvbiBuKG4sdCl7by5wdXNoKCJNIixuLCIsIix0LGkpfWZ1bmN0aW9uIHQobix0KXtvLnB1c2goIk0iLG4sIiwiLHQpLGEucG9pbnQ9ZX1mdW5jdGlvbiBlKG4sdCl7by5wdXNoKCJMIixuLCIsIix0KX1mdW5jdGlvbiByKCl7YS5wb2ludD1ufWZ1bmN0aW9uIHUoKXtvLnB1c2goIloiKX12YXIgaT1CZSg0LjUpLG89W10sYT17cG9pbnQ6bixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXthLnBvaW50PXR9LGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2EubGluZUVuZD1yLGEucG9pbnQ9bn0scG9pbnRSYWRpdXM6ZnVuY3Rpb24obil7cmV0dXJuIGk9QmUobiksYX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYoby5sZW5ndGgpe3ZhciBuPW8uam9pbigiIik7cmV0dXJuIG89W10sbn19fTtyZXR1cm4gYX1mdW5jdGlvbiBCZShuKXtyZXR1cm4ibTAsIituKyJhIituKyIsIituKyIgMCAxLDEgMCwiKy0yKm4rImEiK24rIiwiK24rIiAwIDEsMSAwLCIrMipuKyJ6In1mdW5jdGlvbiBXZShuLHQpe19jKz1uLHdjKz10LCsrU2N9ZnVuY3Rpb24gSmUoKXtmdW5jdGlvbiBuKG4scil7dmFyIHU9bi10LGk9ci1lLG89TWF0aC5zcXJ0KHUqdStpKmkpO2tjKz1vKih0K24pLzIsRWMrPW8qKGUrcikvMixBYys9byxXZSh0PW4sZT1yKX12YXIgdCxlO0ljLnBvaW50PWZ1bmN0aW9uKHIsdSl7SWMucG9pbnQ9bixXZSh0PXIsZT11KX19ZnVuY3Rpb24gR2UoKXtJYy5wb2ludD1XZX1mdW5jdGlvbiBLZSgpe2Z1bmN0aW9uIG4obix0KXt2YXIgZT1uLXIsaT10LXUsbz1NYXRoLnNxcnQoZSplK2kqaSk7a2MrPW8qKHIrbikvMixFYys9byoodSt0KS8yLEFjKz1vLG89dSpuLXIqdCxOYys9byoocituKSxDYys9byoodSt0KSx6Yys9MypvLFdlKHI9bix1PXQpfXZhciB0LGUscix1O0ljLnBvaW50PWZ1bmN0aW9uKGksbyl7SWMucG9pbnQ9bixXZSh0PXI9aSxlPXU9byl9LEljLmxpbmVFbmQ9ZnVuY3Rpb24oKXtuKHQsZSl9fWZ1bmN0aW9uIFFlKG4pe2Z1bmN0aW9uIHQodCxlKXtuLm1vdmVUbyh0K28sZSksbi5hcmModCxlLG8sMCxMYSl9ZnVuY3Rpb24gZSh0LGUpe24ubW92ZVRvKHQsZSksYS5wb2ludD1yfWZ1bmN0aW9uIHIodCxlKXtuLmxpbmVUbyh0LGUpfWZ1bmN0aW9uIHUoKXthLnBvaW50PXR9ZnVuY3Rpb24gaSgpe24uY2xvc2VQYXRoKCl9dmFyIG89NC41LGE9e3BvaW50OnQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD1lfSxsaW5lRW5kOnUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dSxhLnBvaW50PXR9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiBvPW4sYX0scmVzdWx0OmJ9O3JldHVybiBhfWZ1bmN0aW9uIG5yKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuKGE/cjplKShuKX1mdW5jdGlvbiBlKHQpe3JldHVybiBycih0LGZ1bmN0aW9uKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfSl9ZnVuY3Rpb24gcih0KXtmdW5jdGlvbiBlKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHIoKXtNPTAvMCxTLnBvaW50PWksdC5saW5lU3RhcnQoKX1mdW5jdGlvbiBpKGUscil7dmFyIGk9cGUoW2Uscl0pLG89bihlLHIpO3UoTSx4LHksYixfLHcsTT1vWzBdLHg9b1sxXSx5PWUsYj1pWzBdLF89aVsxXSx3PWlbMl0sYSx0KSx0LnBvaW50KE0seCl9ZnVuY3Rpb24gbygpe1MucG9pbnQ9ZSx0LmxpbmVFbmQoKX1mdW5jdGlvbiBjKCl7cigpLFMucG9pbnQ9bCxTLmxpbmVFbmQ9c31mdW5jdGlvbiBsKG4sdCl7aShmPW4saD10KSxnPU0scD14LHY9YixkPV8sbT13LFMucG9pbnQ9aX1mdW5jdGlvbiBzKCl7dShNLHgseSxiLF8sdyxnLHAsZix2LGQsbSxhLHQpLFMubGluZUVuZD1vLG8oKX12YXIgZixoLGcscCx2LGQsbSx5LE0seCxiLF8sdyxTPXtwb2ludDplLGxpbmVTdGFydDpyLGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLFMubGluZVN0YXJ0PWMNCn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLFMubGluZVN0YXJ0PXJ9fTtyZXR1cm4gU31mdW5jdGlvbiB1KHQsZSxyLGEsYyxsLHMsZixoLGcscCx2LGQsbSl7dmFyIHk9cy10LE09Zi1lLHg9eSp5K00qTTtpZih4PjQqaSYmZC0tKXt2YXIgYj1hK2csXz1jK3Asdz1sK3YsUz1NYXRoLnNxcnQoYipiK18qXyt3KncpLGs9TWF0aC5hc2luKHcvPVMpLEU9Z2EoZ2EodyktMSk8Q2F8fGdhKHItaCk8Q2E/KHIraCkvMjpNYXRoLmF0YW4yKF8sYiksQT1uKEUsayksTj1BWzBdLEM9QVsxXSx6PU4tdCxxPUMtZSxMPU0qei15KnE7KEwqTC94Pml8fGdhKCh5KnorTSpxKS94LS41KT4uM3x8bz5hKmcrYypwK2wqdikmJih1KHQsZSxyLGEsYyxsLE4sQyxFLGIvPVMsXy89Uyx3LGQsbSksbS5wb2ludChOLEMpLHUoTixDLEUsYixfLHcscyxmLGgsZyxwLHYsZCxtKSl9fXZhciBpPS41LG89TWF0aC5jb3MoMzAqRGEpLGE9MTY7cmV0dXJuIHQucHJlY2lzaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPShpPW4qbik+MCYmMTYsdCk6TWF0aC5zcXJ0KGkpfSx0fWZ1bmN0aW9uIHRyKG4pe3ZhciB0PW5yKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oW3QqUGEsZSpQYV0pfSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBvcih0KG4pKX19ZnVuY3Rpb24gZXIobil7dGhpcy5zdHJlYW09bn1mdW5jdGlvbiBycihuLHQpe3JldHVybntwb2ludDp0LHNwaGVyZTpmdW5jdGlvbigpe24uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpfX19ZnVuY3Rpb24gdXIobil7cmV0dXJuIGlyKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSgpfWZ1bmN0aW9uIGlyKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuIG49YShuWzBdKkRhLG5bMV0qRGEpLFtuWzBdKmgrYyxsLW5bMV0qaF19ZnVuY3Rpb24gZShuKXtyZXR1cm4gbj1hLmludmVydCgoblswXS1jKS9oLChsLW5bMV0pL2gpLG4mJltuWzBdKlBhLG5bMV0qUGFdfWZ1bmN0aW9uIHIoKXthPUFlKG89bHIobSxNLHgpLGkpO3ZhciBuPWkodixkKTtyZXR1cm4gYz1nLW5bMF0qaCxsPXArblsxXSpoLHUoKX1mdW5jdGlvbiB1KCl7cmV0dXJuIHMmJihzLnZhbGlkPSExLHM9bnVsbCksdH12YXIgaSxvLGEsYyxsLHMsZj1ucihmdW5jdGlvbihuLHQpe3JldHVybiBuPWkobix0KSxbblswXSpoK2MsbC1uWzFdKmhdfSksaD0xNTAsZz00ODAscD0yNTAsdj0wLGQ9MCxtPTAsTT0wLHg9MCxiPUxjLF89eSx3PW51bGwsUz1udWxsO3JldHVybiB0LnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gcyYmKHMudmFsaWQ9ITEpLHM9b3IoYihvLGYoXyhuKSkpKSxzLnZhbGlkPSEwLHN9LHQuY2xpcEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPW51bGw9PW4/KHc9bixMYyk6SGUoKHc9K24pKkRhKSx1KCkpOnd9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1uLF89bj9JZShuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdKTp5LHUoKSk6U30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuWzBdLHA9K25bMV0scigpKTpbZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9blswXSUzNjAqRGEsZD1uWzFdJTM2MCpEYSxyKCkpOlt2KlBhLGQqUGFdfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uWzBdJTM2MCpEYSxNPW5bMV0lMzYwKkRhLHg9bi5sZW5ndGg+Mj9uWzJdJTM2MCpEYTowLHIoKSk6W20qUGEsTSpQYSx4KlBhXX0sdGEucmViaW5kKHQsZiwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIG9yKG4pe3JldHVybiBycihuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0KkRhLGUqRGEpfSl9ZnVuY3Rpb24gYXIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBjcihuLHQpe3JldHVybltuPnFhP24tTGE6LXFhPm4/bitMYTpuLHRdfWZ1bmN0aW9uIGxyKG4sdCxlKXtyZXR1cm4gbj90fHxlP0FlKGZyKG4pLGhyKHQsZSkpOmZyKG4pOnR8fGU/aHIodCxlKTpjcn1mdW5jdGlvbiBzcihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gdCs9bixbdD5xYT90LUxhOi1xYT50P3QrTGE6dCxlXX19ZnVuY3Rpb24gZnIobil7dmFyIHQ9c3Iobik7cmV0dXJuIHQuaW52ZXJ0PXNyKC1uKSx0fWZ1bmN0aW9uIGhyKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5jb3MobikqZSxjPU1hdGguc2luKG4pKmUsbD1NYXRoLnNpbih0KSxzPWwqcithKnU7cmV0dXJuW01hdGguYXRhbjIoYyppLXMqbyxhKnItbCp1KSx0dChzKmkrYypvKV19dmFyIHI9TWF0aC5jb3MobiksdT1NYXRoLnNpbihuKSxpPU1hdGguY29zKHQpLG89TWF0aC5zaW4odCk7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9TWF0aC5jb3ModCksYT1NYXRoLmNvcyhuKSplLGM9TWF0aC5zaW4obikqZSxsPU1hdGguc2luKHQpLHM9bCppLWMqbztyZXR1cm5bTWF0aC5hdGFuMihjKmkrbCpvLGEqcitzKnUpLHR0KHMqci1hKnUpXX0sZX1mdW5jdGlvbiBncihuLHQpe3ZhciBlPU1hdGguY29zKG4pLHI9TWF0aC5zaW4obik7cmV0dXJuIGZ1bmN0aW9uKHUsaSxvLGEpe3ZhciBjPW8qdDtudWxsIT11Pyh1PXByKGUsdSksaT1wcihlLGkpLChvPjA/aT51OnU+aSkmJih1Kz1vKkxhKSk6KHU9bitvKkxhLGk9bi0uNSpjKTtmb3IodmFyIGwscz11O28+MD9zPmk6aT5zO3MtPWMpYS5wb2ludCgobD14ZShbZSwtcipNYXRoLmNvcyhzKSwtcipNYXRoLnNpbihzKV0pKVswXSxsWzFdKX19ZnVuY3Rpb24gcHIobix0KXt2YXIgZT1wZSh0KTtlWzBdLT1uLE1lKGUpO3ZhciByPW50KC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLUNhKSUoMipNYXRoLlBJKX1mdW5jdGlvbiB2cihuLHQsZSl7dmFyIHI9dGEucmFuZ2Uobix0LUNhLGUpLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIGRyKG4sdCxlKXt2YXIgcj10YS5yYW5nZShuLHQtQ2EsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gbXIobil7cmV0dXJuIG4uc291cmNlfWZ1bmN0aW9uIHlyKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlvbiBNcihuLHQsZSxyKXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89TWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxjPXUqTWF0aC5jb3MobiksbD11Kk1hdGguc2luKG4pLHM9bypNYXRoLmNvcyhlKSxmPW8qTWF0aC5zaW4oZSksaD0yKk1hdGguYXNpbihNYXRoLnNxcnQoaXQoci10KSt1Km8qaXQoZS1uKSkpLGc9MS9NYXRoLnNpbihoKSxwPWg/ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zaW4obio9aCkqZyxlPU1hdGguc2luKGgtbikqZyxyPWUqYyt0KnMsdT1lKmwrdCpmLG89ZSppK3QqYTtyZXR1cm5bTWF0aC5hdGFuMih1LHIpKlBhLE1hdGguYXRhbjIobyxNYXRoLnNxcnQocipyK3UqdSkpKlBhXX06ZnVuY3Rpb24oKXtyZXR1cm5bbipQYSx0KlBhXX07cmV0dXJuIHAuZGlzdGFuY2U9aCxwfWZ1bmN0aW9uIHhyKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBpPU1hdGguc2luKHUqPURhKSxvPU1hdGguY29zKHUpLGE9Z2EoKG4qPURhKS10KSxjPU1hdGguY29zKGEpO1ljKz1NYXRoLmF0YW4yKE1hdGguc3FydCgoYT1vKk1hdGguc2luKGEpKSphKyhhPXIqaS1lKm8qYykqYSksZSppK3IqbypjKSx0PW4sZT1pLHI9b312YXIgdCxlLHI7WmMucG9pbnQ9ZnVuY3Rpb24odSxpKXt0PXUqRGEsZT1NYXRoLnNpbihpKj1EYSkscj1NYXRoLmNvcyhpKSxaYy5wb2ludD1ufSxaYy5saW5lRW5kPWZ1bmN0aW9uKCl7WmMucG9pbnQ9WmMubGluZUVuZD1ifX1mdW5jdGlvbiBicihuLHQpe2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSx1PU1hdGguY29zKGUpLGk9bihyKnUpO3JldHVybltpKnUqTWF0aC5zaW4odCksaSpNYXRoLnNpbihlKV19cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKG4sZSl7dmFyIHI9TWF0aC5zcXJ0KG4qbitlKmUpLHU9dChyKSxpPU1hdGguc2luKHUpLG89TWF0aC5jb3ModSk7cmV0dXJuW01hdGguYXRhbjIobippLHIqbyksTWF0aC5hc2luKHImJmUqaS9yKV19LGV9ZnVuY3Rpb24gX3Iobix0KXtmdW5jdGlvbiBlKG4sdCl7bz4wPy1SYStDYT50JiYodD0tUmErQ2EpOnQ+UmEtQ2EmJih0PVJhLUNhKTt2YXIgZT1vL01hdGgucG93KHUodCksaSk7cmV0dXJuW2UqTWF0aC5zaW4oaSpuKSxvLWUqTWF0aC5jb3MoaSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1mdW5jdGlvbihuKXtyZXR1cm4gTWF0aC50YW4ocWEvNCtuLzIpfSxpPW49PT10P01hdGguc2luKG4pOk1hdGgubG9nKHIvTWF0aC5jb3ModCkpL01hdGgubG9nKHUodCkvdShuKSksbz1yKk1hdGgucG93KHUobiksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1vLXQscj1LKGkpKk1hdGguc3FydChuKm4rZSplKTtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL2ksMipNYXRoLmF0YW4oTWF0aC5wb3coby9yLDEvaSkpLVJhXX0sZSk6U3J9ZnVuY3Rpb24gd3Iobix0KXtmdW5jdGlvbiBlKG4sdCl7dmFyIGU9aS10O3JldHVybltlKk1hdGguc2luKHUqbiksaS1lKk1hdGguY29zKHUqbildfXZhciByPU1hdGguY29zKG4pLHU9bj09PXQ/TWF0aC5zaW4obik6KHItTWF0aC5jb3ModCkpLyh0LW4pLGk9ci91K247cmV0dXJuIGdhKHUpPENhP2FyOihlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPWktdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsaS1LKHUpKk1hdGguc3FydChuKm4rZSplKV19LGUpfWZ1bmN0aW9uIFNyKG4sdCl7cmV0dXJuW24sTWF0aC5sb2coTWF0aC50YW4ocWEvNCt0LzIpKV19ZnVuY3Rpb24ga3Iobil7dmFyIHQsZT11cihuKSxyPWUuc2NhbGUsdT1lLnRyYW5zbGF0ZSxpPWUuY2xpcEV4dGVudDtyZXR1cm4gZS5zY2FsZT1mdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBuPT09ZT90P2UuY2xpcEV4dGVudChudWxsKTplOm59LGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIG49dS5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3ZhciBvPWkuYXBwbHkoZSxhcmd1bWVudHMpO2lmKG89PT1lKXtpZih0PW51bGw9PW4pe3ZhciBhPXFhKnIoKSxjPXUoKTtpKFtbY1swXS1hLGNbMV0tYV0sW2NbMF0rYSxjWzFdK2FdXSl9fWVsc2UgdCYmKG89bnVsbCk7cmV0dXJuIG99LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBFcihuLHQpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihxYS80K3QvMikpLC1uXX1mdW5jdGlvbiBBcihuKXtyZXR1cm4gblswXX1mdW5jdGlvbiBOcihuKXtyZXR1cm4gblsxXX1mdW5jdGlvbiBDcihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1bMCwxXSxyPTIsdT0yO3Q+dTt1Kyspe2Zvcig7cj4xJiZRKG5bZVtyLTJdXSxuW2Vbci0xXV0sblt1XSk8PTA7KS0tcjtlW3IrK109dX1yZXR1cm4gZS5zbGljZSgwLHIpfWZ1bmN0aW9uIHpyKG4sdCl7cmV0dXJuIG5bMF0tdFswXXx8blsxXS10WzFdfWZ1bmN0aW9uIHFyKG4sdCxlKXtyZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKTwoZVsxXS10WzFdKSooblswXS10WzBdKX1mdW5jdGlvbiBMcihuLHQsZSxyKXt2YXIgdT1uWzBdLGk9ZVswXSxvPXRbMF0tdSxhPXJbMF0taSxjPW5bMV0sbD1lWzFdLHM9dFsxXS1jLGY9clsxXS1sLGg9KGEqKGMtbCktZioodS1pKSkvKGYqby1hKnMpO3JldHVyblt1K2gqbyxjK2gqc119ZnVuY3Rpb24gVHIobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV07cmV0dXJuISh0WzBdLWVbMF18fHRbMV0tZVsxXSl9ZnVuY3Rpb24gUnIoKXt0dSh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRHIobil7dmFyIHQ9ZWwucG9wKCl8fG5ldyBScjtyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBQcihuKXtYcihuKSxRYy5yZW1vdmUobiksZWwucHVzaChuKSx0dShuKX1mdW5jdGlvbiBVcihuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxyPXQuY3ksdT17eDplLHk6cn0saT1uLlAsbz1uLk4sYT1bbl07UHIobik7Zm9yKHZhciBjPWk7Yy5jaXJjbGUmJmdhKGUtYy5jaXJjbGUueCk8Q2EmJmdhKHItYy5jaXJjbGUuY3kpPENhOylpPWMuUCxhLnVuc2hpZnQoYyksUHIoYyksYz1pO2EudW5zaGlmdChjKSxYcihjKTtmb3IodmFyIGw9bztsLmNpcmNsZSYmZ2EoZS1sLmNpcmNsZS54KTxDYSYmZ2Eoci1sLmNpcmNsZS5jeSk8Q2E7KW89bC5OLGEucHVzaChsKSxQcihsKSxsPW87YS5wdXNoKGwpLFhyKGwpO3ZhciBzLGY9YS5sZW5ndGg7Zm9yKHM9MTtmPnM7KytzKWw9YVtzXSxjPWFbcy0xXSxLcihsLmVkZ2UsYy5zaXRlLGwuc2l0ZSx1KTtjPWFbMF0sbD1hW2YtMV0sbC5lZGdlPUpyKGMuc2l0ZSxsLnNpdGUsbnVsbCx1KSxWcihjKSxWcihsKX1mdW5jdGlvbiBqcihuKXtmb3IodmFyIHQsZSxyLHUsaT1uLngsbz1uLnksYT1RYy5fO2E7KWlmKHI9RnIoYSxvKS1pLHI+Q2EpYT1hLkw7ZWxzZXtpZih1PWktSHIoYSxvKSwhKHU+Q2EpKXtyPi1DYT8odD1hLlAsZT1hKTp1Pi1DYT8odD1hLGU9YS5OKTp0PWU9YTticmVha31pZighYS5SKXt0PWE7YnJlYWt9YT1hLlJ9dmFyIGM9RHIobik7aWYoUWMuaW5zZXJ0KHQsYyksdHx8ZSl7aWYodD09PWUpcmV0dXJuIFhyKHQpLGU9RHIodC5zaXRlKSxRYy5pbnNlcnQoYyxlKSxjLmVkZ2U9ZS5lZGdlPUpyKHQuc2l0ZSxjLnNpdGUpLFZyKHQpLHZvaWQgVnIoZSk7aWYoIWUpcmV0dXJuIHZvaWQoYy5lZGdlPUpyKHQuc2l0ZSxjLnNpdGUpKTtYcih0KSxYcihlKTt2YXIgbD10LnNpdGUscz1sLngsZj1sLnksaD1uLngtcyxnPW4ueS1mLHA9ZS5zaXRlLHY9cC54LXMsZD1wLnktZixtPTIqKGgqZC1nKnYpLHk9aCpoK2cqZyxNPXYqditkKmQseD17eDooZCp5LWcqTSkvbStzLHk6KGgqTS12KnkpL20rZn07S3IoZS5lZGdlLGwscCx4KSxjLmVkZ2U9SnIobCxuLG51bGwseCksZS5lZGdlPUpyKG4scCxudWxsLHgpLFZyKHQpLFZyKGUpfX1mdW5jdGlvbiBGcihuLHQpe3ZhciBlPW4uc2l0ZSxyPWUueCx1PWUueSxpPXUtdDtpZighaSlyZXR1cm4gcjt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lLngsYz1lLnksbD1jLXQ7aWYoIWwpcmV0dXJuIGE7dmFyIHM9YS1yLGY9MS9pLTEvbCxoPXMvbDtyZXR1cm4gZj8oLWgrTWF0aC5zcXJ0KGgqaC0yKmYqKHMqcy8oLTIqbCktYytsLzIrdS1pLzIpKSkvZityOihyK2EpLzJ9ZnVuY3Rpb24gSHIobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gRnIoZSx0KTt2YXIgcj1uLnNpdGU7cmV0dXJuIHIueT09PXQ/ci54OjEvMH1mdW5jdGlvbiBPcihuKXt0aGlzLnNpdGU9bix0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIElyKG4pe2Zvcih2YXIgdCxlLHIsdSxpLG8sYSxjLGwscyxmPW5bMF1bMF0saD1uWzFdWzBdLGc9blswXVsxXSxwPW5bMV1bMV0sdj1LYyxkPXYubGVuZ3RoO2QtLTspaWYoaT12W2RdLGkmJmkucHJlcGFyZSgpKWZvcihhPWkuZWRnZXMsYz1hLmxlbmd0aCxvPTA7Yz5vOylzPWFbb10uZW5kKCkscj1zLngsdT1zLnksbD1hWysrbyVjXS5zdGFydCgpLHQ9bC54LGU9bC55LChnYShyLXQpPkNhfHxnYSh1LWUpPkNhKSYmKGEuc3BsaWNlKG8sMCxuZXcgUXIoR3IoaS5zaXRlLHMsZ2Eoci1mKTxDYSYmcC11PkNhP3t4OmYseTpnYSh0LWYpPENhP2U6cH06Z2EodS1wKTxDYSYmaC1yPkNhP3t4OmdhKGUtcCk8Q2E/dDpoLHk6cH06Z2Eoci1oKTxDYSYmdS1nPkNhP3t4OmgseTpnYSh0LWgpPENhP2U6Z306Z2EodS1nKTxDYSYmci1mPkNhP3t4OmdhKGUtZyk8Q2E/dDpmLHk6Z306bnVsbCksaS5zaXRlLG51bGwpKSwrK2MpfWZ1bmN0aW9uIFlyKG4sdCl7cmV0dXJuIHQuYW5nbGUtbi5hbmdsZX1mdW5jdGlvbiBacigpe3R1KHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBWcihuKXt2YXIgdD1uLlAsZT1uLk47aWYodCYmZSl7dmFyIHI9dC5zaXRlLHU9bi5zaXRlLGk9ZS5zaXRlO2lmKHIhPT1pKXt2YXIgbz11LngsYT11LnksYz1yLngtbyxsPXIueS1hLHM9aS54LW8sZj1pLnktYSxoPTIqKGMqZi1sKnMpO2lmKCEoaD49LXphKSl7dmFyIGc9YypjK2wqbCxwPXMqcytmKmYsdj0oZipnLWwqcCkvaCxkPShjKnAtcypnKS9oLGY9ZCthLG09cmwucG9wKCl8fG5ldyBacjttLmFyYz1uLG0uc2l0ZT11LG0ueD12K28sbS55PWYrTWF0aC5zcXJ0KHYqditkKmQpLG0uY3k9ZixuLmNpcmNsZT1tO2Zvcih2YXIgeT1udWxsLE09dGwuXztNOylpZihtLnk8TS55fHxtLnk9PT1NLnkmJm0ueDw9TS54KXtpZighTS5MKXt5PU0uUDticmVha31NPU0uTH1lbHNle2lmKCFNLlIpe3k9TTticmVha31NPU0uUn10bC5pbnNlcnQoeSxtKSx5fHwobmw9bSl9fX19ZnVuY3Rpb24gWHIobil7dmFyIHQ9bi5jaXJjbGU7dCYmKHQuUHx8KG5sPXQuTiksdGwucmVtb3ZlKHQpLHJsLnB1c2godCksdHUodCksbi5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gJHIobil7Zm9yKHZhciB0LGU9R2Mscj1PZShuWzBdWzBdLG5bMF1bMV0sblsxXVswXSxuWzFdWzFdKSx1PWUubGVuZ3RoO3UtLTspdD1lW3VdLCghQnIodCxuKXx8IXIodCl8fGdhKHQuYS54LXQuYi54KTxDYSYmZ2EodC5hLnktdC5iLnkpPENhKSYmKHQuYT10LmI9bnVsbCxlLnNwbGljZSh1LDEpKX1mdW5jdGlvbiBCcihuLHQpe3ZhciBlPW4uYjtpZihlKXJldHVybiEwO3ZhciByLHUsaT1uLmEsbz10WzBdWzBdLGE9dFsxXVswXSxjPXRbMF1bMV0sbD10WzFdWzFdLHM9bi5sLGY9bi5yLGg9cy54LGc9cy55LHA9Zi54LHY9Zi55LGQ9KGgrcCkvMixtPShnK3YpLzI7aWYodj09PWcpe2lmKG8+ZHx8ZD49YSlyZXR1cm47aWYoaD5wKXtpZihpKXtpZihpLnk+PWwpcmV0dXJufWVsc2UgaT17eDpkLHk6Y307ZT17eDpkLHk6bH19ZWxzZXtpZihpKXtpZihpLnk8YylyZXR1cm59ZWxzZSBpPXt4OmQseTpsfTtlPXt4OmQseTpjfX19ZWxzZSBpZihyPShoLXApLyh2LWcpLHU9bS1yKmQsLTE+cnx8cj4xKWlmKGg+cCl7aWYoaSl7aWYoaS55Pj1sKXJldHVybn1lbHNlIGk9e3g6KGMtdSkvcix5OmN9O2U9e3g6KGwtdSkvcix5Omx9fWVsc2V7aWYoaSl7aWYoaS55PGMpcmV0dXJufWVsc2UgaT17eDoobC11KS9yLHk6bH07ZT17eDooYy11KS9yLHk6Y319ZWxzZSBpZih2Pmcpe2lmKGkpe2lmKGkueD49YSlyZXR1cm59ZWxzZSBpPXt4Om8seTpyKm8rdX07ZT17eDphLHk6ciphK3V9fWVsc2V7aWYoaSl7aWYoaS54PG8pcmV0dXJufWVsc2UgaT17eDphLHk6ciphK3V9O2U9e3g6byx5OnIqbyt1fX1yZXR1cm4gbi5hPWksbi5iPWUsITB9ZnVuY3Rpb24gV3Iobix0KXt0aGlzLmw9bix0aGlzLnI9dCx0aGlzLmE9dGhpcy5iPW51bGx9ZnVuY3Rpb24gSnIobix0LGUscil7dmFyIHU9bmV3IFdyKG4sdCk7cmV0dXJuIEdjLnB1c2godSksZSYmS3IodSxuLHQsZSksciYmS3IodSx0LG4sciksS2Nbbi5pXS5lZGdlcy5wdXNoKG5ldyBRcih1LG4sdCkpLEtjW3QuaV0uZWRnZXMucHVzaChuZXcgUXIodSx0LG4pKSx1fWZ1bmN0aW9uIEdyKG4sdCxlKXt2YXIgcj1uZXcgV3IobixudWxsKTtyZXR1cm4gci5hPXQsci5iPWUsR2MucHVzaChyKSxyfWZ1bmN0aW9uIEtyKG4sdCxlLHIpe24uYXx8bi5iP24ubD09PWU/bi5iPXI6bi5hPXI6KG4uYT1yLG4ubD10LG4ucj1lKX1mdW5jdGlvbiBRcihuLHQsZSl7dmFyIHI9bi5hLHU9bi5iO3RoaXMuZWRnZT1uLHRoaXMuc2l0ZT10LHRoaXMuYW5nbGU9ZT9NYXRoLmF0YW4yKGUueS10LnksZS54LXQueCk6bi5sPT09dD9NYXRoLmF0YW4yKHUueC1yLngsci55LXUueSk6TWF0aC5hdGFuMihyLngtdS54LHUueS1yLnkpfWZ1bmN0aW9uIG51KCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdHUobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1mdW5jdGlvbiBldShuLHQpe3ZhciBlPXQscj10LlIsdT1lLlU7dT91Lkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuUj1yLkwsZS5SJiYoZS5SLlU9ZSksci5MPWV9ZnVuY3Rpb24gcnUobix0KXt2YXIgZT10LHI9dC5MLHU9ZS5VO3U/dS5MPT09ZT91Lkw9cjp1LlI9cjpuLl89cixyLlU9dSxlLlU9cixlLkw9ci5SLGUuTCYmKGUuTC5VPWUpLHIuUj1lfWZ1bmN0aW9uIHV1KG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1mdW5jdGlvbiBpdShuLHQpe3ZhciBlLHIsdSxpPW4uc29ydChvdSkucG9wKCk7Zm9yKEdjPVtdLEtjPW5ldyBBcnJheShuLmxlbmd0aCksUWM9bmV3IG51LHRsPW5ldyBudTs7KWlmKHU9bmwsaSYmKCF1fHxpLnk8dS55fHxpLnk9PT11LnkmJmkueDx1LngpKShpLnghPT1lfHxpLnkhPT1yKSYmKEtjW2kuaV09bmV3IE9yKGkpLGpyKGkpLGU9aS54LHI9aS55KSxpPW4ucG9wKCk7ZWxzZXtpZighdSlicmVhaztVcih1LmFyYyl9dCYmKCRyKHQpLElyKHQpKTt2YXIgbz17Y2VsbHM6S2MsZWRnZXM6R2N9O3JldHVybiBRYz10bD1HYz1LYz1udWxsLG99ZnVuY3Rpb24gb3Uobix0KXtyZXR1cm4gdC55LW4ueXx8dC54LW4ueH1mdW5jdGlvbiBhdShuLHQsZSl7cmV0dXJuKG4ueC1lLngpKih0Lnktbi55KS0obi54LXQueCkqKGUueS1uLnkpfWZ1bmN0aW9uIGN1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gbHUobil7cmV0dXJuIG4ueX1mdW5jdGlvbiBzdSgpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gZnUobix0LGUscix1LGkpe2lmKCFuKHQsZSxyLHUsaSkpe3ZhciBvPS41KihlK3UpLGE9LjUqKHIraSksYz10Lm5vZGVzO2NbMF0mJmZ1KG4sY1swXSxlLHIsbyxhKSxjWzFdJiZmdShuLGNbMV0sbyxyLHUsYSksY1syXSYmZnUobixjWzJdLGUsYSxvLGkpLGNbM10mJmZ1KG4sY1szXSxvLGEsdSxpKX19ZnVuY3Rpb24gaHUobix0LGUscix1LGksbyl7dmFyIGEsYz0xLzA7cmV0dXJuIGZ1bmN0aW9uIGwobixzLGYsaCxnKXtpZighKHM+aXx8Zj5vfHxyPmh8fHU+Zykpe2lmKHA9bi5wb2ludCl7dmFyIHAsdj10LW4ueCxkPWUtbi55LG09dip2K2QqZDtpZihjPm0pe3ZhciB5PU1hdGguc3FydChjPW0pO3I9dC15LHU9ZS15LGk9dCt5LG89ZSt5LGE9cH19Zm9yKHZhciBNPW4ubm9kZXMseD0uNSoocytoKSxiPS41KihmK2cpLF89dD49eCx3PWU+PWIsUz13PDwxfF8saz1TKzQ7az5TOysrUylpZihuPU1bMyZTXSlzd2l0Y2goMyZTKXtjYXNlIDA6bChuLHMsZix4LGIpO2JyZWFrO2Nhc2UgMTpsKG4seCxmLGgsYik7YnJlYWs7Y2FzZSAyOmwobixzLGIseCxnKTticmVhaztjYXNlIDM6bChuLHgsYixoLGcpfX19KG4scix1LGksbyksYX1mdW5jdGlvbiBndShuLHQpe249dGEucmdiKG4pLHQ9dGEucmdiKHQpO3ZhciBlPW4ucixyPW4uZyx1PW4uYixpPXQuci1lLG89dC5nLXIsYT10LmItdTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIiMiK3h0KE1hdGgucm91bmQoZStpKm4pKSt4dChNYXRoLnJvdW5kKHIrbypuKSkreHQoTWF0aC5yb3VuZCh1K2EqbikpfX1mdW5jdGlvbiBwdShuLHQpe3ZhciBlLHI9e30sdT17fTtmb3IoZSBpbiBuKWUgaW4gdD9yW2VdPW11KG5bZV0sdFtlXSk6dVtlXT1uW2VdO2ZvcihlIGluIHQpZSBpbiBufHwodVtlXT10W2VdKTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKGUgaW4gcil1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIHZ1KG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIGR1KG4sdCl7dmFyIGUscix1LGk9aWwubGFzdEluZGV4PW9sLmxhc3RJbmRleD0wLG89LTEsYT1bXSxjPVtdO2ZvcihuKz0iIix0Kz0iIjsoZT1pbC5leGVjKG4pKSYmKHI9b2wuZXhlYyh0KSk7KSh1PXIuaW5kZXgpPmkmJih1PXQuc2xpY2UoaSx1KSxhW29dP2Fbb10rPXU6YVsrK29dPXUpLChlPWVbMF0pPT09KHI9clswXSk/YVtvXT9hW29dKz1yOmFbKytvXT1yOihhWysrb109bnVsbCxjLnB1c2goe2k6byx4OnZ1KGUscil9KSksaT1vbC5sYXN0SW5kZXg7cmV0dXJuIGk8dC5sZW5ndGgmJih1PXQuc2xpY2UoaSksYVtvXT9hW29dKz11OmFbKytvXT11KSxhLmxlbmd0aDwyP2NbMF0/KHQ9Y1swXS54LGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gdH06KHQ9Yy5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciBlLHI9MDt0PnI7KytyKWFbKGU9Y1tyXSkuaV09ZS54KG4pO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gbXUobix0KXtmb3IodmFyIGUscj10YS5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLXI+PTAmJiEoZT10YS5pbnRlcnBvbGF0b3JzW3JdKG4sdCkpOyk7cmV0dXJuIGV9ZnVuY3Rpb24geXUobix0KXt2YXIgZSxyPVtdLHU9W10saT1uLmxlbmd0aCxvPXQubGVuZ3RoLGE9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpO2ZvcihlPTA7YT5lOysrZSlyLnB1c2gobXUobltlXSx0W2VdKSk7Zm9yKDtpPmU7KytlKXVbZV09bltlXTtmb3IoO28+ZTsrK2UpdVtlXT10W2VdO3JldHVybiBmdW5jdGlvbihuKXtmb3IoZT0wO2E+ZTsrK2UpdVtlXT1yW2VdKG4pO3JldHVybiB1fX1mdW5jdGlvbiBNdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+PXQ/MDp0Pj0xPzE6bih0KX19ZnVuY3Rpb24geHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiAxLW4oMS10KX19ZnVuY3Rpb24gYnUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi41KiguNT50P24oMip0KToyLW4oMi0yKnQpKX19ZnVuY3Rpb24gX3Uobil7cmV0dXJuIG4qbn1mdW5jdGlvbiB3dShuKXtyZXR1cm4gbipuKm59ZnVuY3Rpb24gU3Uobil7aWYoMD49bilyZXR1cm4gMDtpZihuPj0xKXJldHVybiAxO3ZhciB0PW4qbixlPXQqbjtyZXR1cm4gNCooLjU+bj9lOjMqKG4tdCkrZS0uNzUpfWZ1bmN0aW9uIGt1KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCxuKX19ZnVuY3Rpb24gRXUobil7cmV0dXJuIDEtTWF0aC5jb3MobipSYSl9ZnVuY3Rpb24gQXUobil7cmV0dXJuIE1hdGgucG93KDIsMTAqKG4tMSkpfWZ1bmN0aW9uIE51KG4pe3JldHVybiAxLU1hdGguc3FydCgxLW4qbil9ZnVuY3Rpb24gQ3Uobix0KXt2YXIgZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/ZT10L0xhKk1hdGguYXNpbigxL24pOihuPTEsZT10LzQpLGZ1bmN0aW9uKHIpe3JldHVybiAxK24qTWF0aC5wb3coMiwtMTAqcikqTWF0aC5zaW4oKHItZSkqTGEvdCl9fWZ1bmN0aW9uIHp1KG4pe3JldHVybiBufHwobj0xLjcwMTU4KSxmdW5jdGlvbih0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfX1mdW5jdGlvbiBxdShuKXtyZXR1cm4gMS8yLjc1Pm4/Ny41NjI1Km4qbjoyLzIuNzU+bj83LjU2MjUqKG4tPTEuNS8yLjc1KSpuKy43NToyLjUvMi43NT5uPzcuNTYyNSoobi09Mi4yNS8yLjc1KSpuKy45Mzc1OjcuNTYyNSoobi09Mi42MjUvMi43NSkqbisuOTg0Mzc1fWZ1bmN0aW9uIEx1KG4sdCl7bj10YS5oY2wobiksdD10YS5oY2wodCk7dmFyIGU9bi5oLHI9bi5jLHU9bi5sLGk9dC5oLWUsbz10LmMtcixhPXQubC11O3JldHVybiBpc05hTihvKSYmKG89MCxyPWlzTmFOKHIpP3QuYzpyKSxpc05hTihpKT8oaT0wLGU9aXNOYU4oZSk/dC5oOmUpOmk+MTgwP2ktPTM2MDotMTgwPmkmJihpKz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiBzdChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIFR1KG4sdCl7bj10YS5oc2wobiksdD10YS5oc2wodCk7dmFyIGU9bi5oLHI9bi5zLHU9bi5sLGk9dC5oLWUsbz10LnMtcixhPXQubC11O3JldHVybiBpc05hTihvKSYmKG89MCxyPWlzTmFOKHIpP3QuczpyKSxpc05hTihpKT8oaT0wLGU9aXNOYU4oZSk/dC5oOmUpOmk+MTgwP2ktPTM2MDotMTgwPmkmJihpKz0zNjApLGZ1bmN0aW9uKG4pe3JldHVybiBjdChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIFJ1KG4sdCl7bj10YS5sYWIobiksdD10YS5sYWIodCk7dmFyIGU9bi5sLHI9bi5hLHU9bi5iLGk9dC5sLWUsbz10LmEtcixhPXQuYi11O3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gaHQoZStpKm4scitvKm4sdSthKm4pKyIifX1mdW5jdGlvbiBEdShuLHQpe3JldHVybiB0LT1uLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4rdCplKX19ZnVuY3Rpb24gUHUobil7dmFyIHQ9W24uYSxuLmJdLGU9W24uYyxuLmRdLHI9anUodCksdT1VdSh0LGUpLGk9anUoRnUoZSx0LC11KSl8fDA7dFswXSplWzFdPGVbMF0qdFsxXSYmKHRbMF0qPS0xLHRbMV0qPS0xLHIqPS0xLHUqPS0xKSx0aGlzLnJvdGF0ZT0ocj9NYXRoLmF0YW4yKHRbMV0sdFswXSk6TWF0aC5hdGFuMigtZVswXSxlWzFdKSkqUGEsdGhpcy50cmFuc2xhdGU9W24uZSxuLmZdLHRoaXMuc2NhbGU9W3IsaV0sdGhpcy5za2V3PWk/TWF0aC5hdGFuMih1LGkpKlBhOjB9ZnVuY3Rpb24gVXUobix0KXtyZXR1cm4gblswXSp0WzBdK25bMV0qdFsxXX1mdW5jdGlvbiBqdShuKXt2YXIgdD1NYXRoLnNxcnQoVXUobixuKSk7cmV0dXJuIHQmJihuWzBdLz10LG5bMV0vPXQpLHR9ZnVuY3Rpb24gRnUobix0LGUpe3JldHVybiBuWzBdKz1lKnRbMF0sblsxXSs9ZSp0WzFdLG59ZnVuY3Rpb24gSHUobix0KXt2YXIgZSxyPVtdLHU9W10saT10YS50cmFuc2Zvcm0obiksbz10YS50cmFuc2Zvcm0odCksYT1pLnRyYW5zbGF0ZSxjPW8udHJhbnNsYXRlLGw9aS5yb3RhdGUscz1vLnJvdGF0ZSxmPWkuc2tldyxoPW8uc2tldyxnPWkuc2NhbGUscD1vLnNjYWxlO3JldHVybiBhWzBdIT1jWzBdfHxhWzFdIT1jWzFdPyhyLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsIiwiLG51bGwsIikiKSx1LnB1c2goe2k6MSx4OnZ1KGFbMF0sY1swXSl9LHtpOjMseDp2dShhWzFdLGNbMV0pfSkpOnIucHVzaChjWzBdfHxjWzFdPyJ0cmFuc2xhdGUoIitjKyIpIjoiIiksbCE9cz8obC1zPjE4MD9zKz0zNjA6cy1sPjE4MCYmKGwrPTM2MCksdS5wdXNoKHtpOnIucHVzaChyLnBvcCgpKyJyb3RhdGUoIixudWxsLCIpIiktMix4OnZ1KGwscyl9KSk6cyYmci5wdXNoKHIucG9wKCkrInJvdGF0ZSgiK3MrIikiKSxmIT1oP3UucHVzaCh7aTpyLnB1c2goci5wb3AoKSsic2tld1goIixudWxsLCIpIiktMix4OnZ1KGYsaCl9KTpoJiZyLnB1c2goci5wb3AoKSsic2tld1goIitoKyIpIiksZ1swXSE9cFswXXx8Z1sxXSE9cFsxXT8oZT1yLnB1c2goci5wb3AoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIiksdS5wdXNoKHtpOmUtNCx4OnZ1KGdbMF0scFswXSl9LHtpOmUtMix4OnZ1KGdbMV0scFsxXSl9KSk6KDEhPXBbMF18fDEhPXBbMV0pJiZyLnB1c2goci5wb3AoKSsic2NhbGUoIitwKyIpIiksZT11Lmxlbmd0aCxmdW5jdGlvbihuKXtmb3IodmFyIHQsaT0tMTsrK2k8ZTspclsodD11W2ldKS5pXT10Lngobik7cmV0dXJuIHIuam9pbigiIil9fWZ1bmN0aW9uIE91KG4sdCl7cmV0dXJuIHQ9KHQtPW49K24pfHwxL3QsZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH19ZnVuY3Rpb24gSXUobix0KXtyZXR1cm4gdD0odC09bj0rbil8fDEvdCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChlLW4pL3QpKX19ZnVuY3Rpb24gWXUobil7Zm9yKHZhciB0PW4uc291cmNlLGU9bi50YXJnZXQscj1WdSh0LGUpLHU9W3RdO3QhPT1yOyl0PXQucGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIFp1KG4pe2Zvcih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1lLnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gVnUobix0KXtpZihuPT09dClyZXR1cm4gbjtmb3IodmFyIGU9WnUobikscj1adSh0KSx1PWUucG9wKCksaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIucG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gWHUobil7bi5maXhlZHw9Mn1mdW5jdGlvbiAkdShuKXtuLmZpeGVkJj0tN31mdW5jdGlvbiBCdShuKXtuLmZpeGVkfD00LG4ucHg9bi54LG4ucHk9bi55fWZ1bmN0aW9uIFd1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIEp1KG4sdCxlKXt2YXIgcj0wLHU9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZhciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7KytjPGE7KWk9b1tjXSxudWxsIT1pJiYoSnUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1pLmNoYXJnZSppLmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciBsPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENoYXJnZT1sLHIrPWwqbi5wb2ludC54LHUrPWwqbi5wb2ludC55fW4uY3g9ci9uLmNoYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rpb24gR3Uobix0KXtyZXR1cm4gdGEucmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4sbi5saW5rcz1yaSxufWZ1bmN0aW9uIEt1KG4sdCl7Zm9yKHZhciBlPVtuXTtudWxsIT0obj1lLnBvcCgpKTspaWYodChuKSwodT1uLmNoaWxkcmVuKSYmKHI9dS5sZW5ndGgpKWZvcih2YXIgcix1Oy0tcj49MDspZS5wdXNoKHVbcl0pfWZ1bmN0aW9uIFF1KG4sdCl7Zm9yKHZhciBlPVtuXSxyPVtdO251bGwhPShuPWUucG9wKCkpOylpZihyLnB1c2gobiksKGk9bi5jaGlsZHJlbikmJih1PWkubGVuZ3RoKSlmb3IodmFyIHUsaSxvPS0xOysrbzx1OyllLnB1c2goaVtvXSk7Zm9yKDtudWxsIT0obj1yLnBvcCgpKTspdChuKX1mdW5jdGlvbiBuaShuKXtyZXR1cm4gbi5jaGlsZHJlbn1mdW5jdGlvbiB0aShuKXtyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBlaShuLHQpe3JldHVybiB0LnZhbHVlLW4udmFsdWV9ZnVuY3Rpb24gcmkobil7cmV0dXJuIHRhLm1lcmdlKG4ubWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6bix0YXJnZXQ6dH19KX0pKX1mdW5jdGlvbiB1aShuKXtyZXR1cm4gbi54fWZ1bmN0aW9uIGlpKG4pe3JldHVybiBuLnl9ZnVuY3Rpb24gb2kobix0LGUpe24ueTA9dCxuLnk9ZX1mdW5jdGlvbiBhaShuKXtyZXR1cm4gdGEucmFuZ2Uobi5sZW5ndGgpfWZ1bmN0aW9uIGNpKG4pe2Zvcih2YXIgdD0tMSxlPW5bMF0ubGVuZ3RoLHI9W107Kyt0PGU7KXJbdF09MDtyZXR1cm4gcn1mdW5jdGlvbiBsaShuKXtmb3IodmFyIHQsZT0xLHI9MCx1PW5bMF1bMV0saT1uLmxlbmd0aDtpPmU7KytlKSh0PW5bZV1bMV0pPnUmJihyPWUsdT10KTtyZXR1cm4gcn1mdW5jdGlvbiBzaShuKXtyZXR1cm4gbi5yZWR1Y2UoZmksMCl9ZnVuY3Rpb24gZmkobix0KXtyZXR1cm4gbit0WzFdfWZ1bmN0aW9uIGhpKG4sdCl7cmV0dXJuIGdpKG4sTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gZ2kobix0KXtmb3IodmFyIGU9LTEscj0rblswXSx1PShuWzFdLXIpL3QsaT1bXTsrK2U8PXQ7KWlbZV09dSplK3I7cmV0dXJuIGl9ZnVuY3Rpb24gcGkobil7cmV0dXJuW3RhLm1pbihuKSx0YS5tYXgobildfWZ1bmN0aW9uIHZpKG4sdCl7cmV0dXJuIG4udmFsdWUtdC52YWx1ZX1mdW5jdGlvbiBkaShuLHQpe3ZhciBlPW4uX3BhY2tfbmV4dDtuLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bix0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiBtaShuLHQpe24uX3BhY2tfbmV4dD10LHQuX3BhY2tfcHJldj1ufWZ1bmN0aW9uIHlpKG4sdCl7dmFyIGU9dC54LW4ueCxyPXQueS1uLnksdT1uLnIrdC5yO3JldHVybi45OTkqdSp1PmUqZStyKnJ9ZnVuY3Rpb24gTWkobil7ZnVuY3Rpb24gdChuKXtzPU1hdGgubWluKG4ueC1uLnIscyksZj1NYXRoLm1heChuLngrbi5yLGYpLGg9TWF0aC5taW4obi55LW4ucixoKSxnPU1hdGgubWF4KG4ueStuLnIsZyl9aWYoKGU9bi5jaGlsZHJlbikmJihsPWUubGVuZ3RoKSl7dmFyIGUscix1LGksbyxhLGMsbCxzPTEvMCxmPS0xLzAsaD0xLzAsZz0tMS8wO2lmKGUuZm9yRWFjaCh4aSkscj1lWzBdLHIueD0tci5yLHIueT0wLHQociksbD4xJiYodT1lWzFdLHUueD11LnIsdS55PTAsdCh1KSxsPjIpKWZvcihpPWVbMl0sd2kocix1LGkpLHQoaSksZGkocixpKSxyLl9wYWNrX3ByZXY9aSxkaShpLHUpLHU9ci5fcGFja19uZXh0LG89MztsPm87bysrKXt3aShyLHUsaT1lW29dKTt2YXIgcD0wLHY9MSxkPTE7Zm9yKGE9dS5fcGFja19uZXh0O2EhPT11O2E9YS5fcGFja19uZXh0LHYrKylpZih5aShhLGkpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IoYz1yLl9wYWNrX3ByZXY7YyE9PWEuX3BhY2tfcHJldiYmIXlpKGMsaSk7Yz1jLl9wYWNrX3ByZXYsZCsrKTtwPyhkPnZ8fHY9PWQmJnUucjxyLnI/bWkocix1PWEpOm1pKHI9Yyx1KSxvLS0pOihkaShyLGkpLHU9aSx0KGkpKX12YXIgbT0ocytmKS8yLHk9KGgrZykvMixNPTA7Zm9yKG89MDtsPm87bysrKWk9ZVtvXSxpLngtPW0saS55LT15LE09TWF0aC5tYXgoTSxpLnIrTWF0aC5zcXJ0KGkueCppLngraS55KmkueSkpO24ucj1NLGUuZm9yRWFjaChiaSl9fWZ1bmN0aW9uIHhpKG4pe24uX3BhY2tfbmV4dD1uLl9wYWNrX3ByZXY9bn1mdW5jdGlvbiBiaShuKXtkZWxldGUgbi5fcGFja19uZXh0LGRlbGV0ZSBuLl9wYWNrX3ByZXZ9ZnVuY3Rpb24gX2kobix0LGUscil7dmFyIHU9bi5jaGlsZHJlbjtpZihuLng9dCs9cipuLngsbi55PWUrPXIqbi55LG4ucio9cix1KWZvcih2YXIgaT0tMSxvPXUubGVuZ3RoOysraTxvOylfaSh1W2ldLHQsZSxyKX1mdW5jdGlvbiB3aShuLHQsZSl7dmFyIHI9bi5yK2Uucix1PXQueC1uLngsaT10Lnktbi55O2lmKHImJih1fHxpKSl7dmFyIG89dC5yK2UucixhPXUqdStpKmk7byo9byxyKj1yO3ZhciBjPS41KyhyLW8pLygyKmEpLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihyK2EpLShyLT1hKSpyLW8qbykpLygyKmEpO2UueD1uLngrYyp1K2wqaSxlLnk9bi55K2MqaS1sKnV9ZWxzZSBlLng9bi54K3IsZS55PW4ueX1mdW5jdGlvbiBTaShuLHQpe3JldHVybiBuLnBhcmVudD09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIGtpKG4pe3ZhciB0PW4uY2hpbGRyZW47cmV0dXJuIHQubGVuZ3RoP3RbMF06bi50fWZ1bmN0aW9uIEVpKG4pe3ZhciB0LGU9bi5jaGlsZHJlbjtyZXR1cm4odD1lLmxlbmd0aCk/ZVt0LTFdOm4udH1mdW5jdGlvbiBBaShuLHQsZSl7dmFyIHI9ZS8odC5pLW4uaSk7dC5jLT1yLHQucys9ZSxuLmMrPXIsdC56Kz1lLHQubSs9ZX1mdW5jdGlvbiBOaShuKXtmb3IodmFyIHQsZT0wLHI9MCx1PW4uY2hpbGRyZW4saT11Lmxlbmd0aDstLWk+PTA7KXQ9dVtpXSx0LnorPWUsdC5tKz1lLGUrPXQucysocis9dC5jKX1mdW5jdGlvbiBDaShuLHQsZSl7cmV0dXJuIG4uYS5wYXJlbnQ9PT10LnBhcmVudD9uLmE6ZX1mdW5jdGlvbiB6aShuKXtyZXR1cm4gMSt0YS5tYXgobixmdW5jdGlvbihuKXtyZXR1cm4gbi55fSl9ZnVuY3Rpb24gcWkobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdC54fSwwKS9uLmxlbmd0aH1mdW5jdGlvbiBMaShuKXt2YXIgdD1uLmNoaWxkcmVuO3JldHVybiB0JiZ0Lmxlbmd0aD9MaSh0WzBdKTpufWZ1bmN0aW9uIFRpKG4pe3ZhciB0LGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP1RpKGVbdC0xXSk6bn1mdW5jdGlvbiBSaShuKXtyZXR1cm57eDpuLngseTpuLnksZHg6bi5keCxkeTpuLmR5fX1mdW5jdGlvbiBEaShuLHQpe3ZhciBlPW4ueCt0WzNdLHI9bi55K3RbMF0sdT1uLmR4LXRbMV0tdFszXSxpPW4uZHktdFswXS10WzJdO3JldHVybiAwPnUmJihlKz11LzIsdT0wKSwwPmkmJihyKz1pLzIsaT0wKSx7eDplLHk6cixkeDp1LGR5Oml9fWZ1bmN0aW9uIFBpKG4pe3ZhciB0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiBlPnQ/W3QsZV06W2UsdF19ZnVuY3Rpb24gVWkobil7cmV0dXJuIG4ucmFuZ2VFeHRlbnQ/bi5yYW5nZUV4dGVudCgpOlBpKG4ucmFuZ2UoKSl9ZnVuY3Rpb24gamkobix0LGUscil7dmFyIHU9ZShuWzBdLG5bMV0pLGk9cih0WzBdLHRbMV0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gaSh1KG4pKX19ZnVuY3Rpb24gRmkobix0KXt2YXIgZSxyPTAsdT1uLmxlbmd0aC0xLGk9bltyXSxvPW5bdV07cmV0dXJuIGk+byYmKGU9cixyPXUsdT1lLGU9aSxpPW8sbz1lKSxuW3JdPXQuZmxvb3IoaSksblt1XT10LmNlaWwobyksbn1mdW5jdGlvbiBIaShuKXtyZXR1cm4gbj97Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZmxvb3IodC9uKSpufSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNlaWwodC9uKSpufX06bWx9ZnVuY3Rpb24gT2kobix0LGUscil7dmFyIHU9W10saT1bXSxvPTAsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCktMTtmb3IoblthXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPD1hOyl1LnB1c2goZShuW28tMV0sbltvXSkpLGkucHVzaChyKHRbby0xXSx0W29dKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXRhLmJpc2VjdChuLHQsMSxhKS0xO3JldHVybiBpW2VdKHVbZV0odCkpfX1mdW5jdGlvbiBJaShuLHQsZSxyKXtmdW5jdGlvbiB1KCl7dmFyIHU9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpPjI/T2k6amksYz1yP0l1Ok91O3JldHVybiBvPXUobix0LGMsZSksYT11KHQsbixjLG11KSxpfWZ1bmN0aW9uIGkobil7cmV0dXJuIG8obil9dmFyIG8sYTtyZXR1cm4gaS5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGEobil9LGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQubWFwKE51bWJlciksdSgpKTpufSxpLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sdSgpKTp0fSxpLnJhbmdlUm91bmQ9ZnVuY3Rpb24obil7cmV0dXJuIGkucmFuZ2UobikuaW50ZXJwb2xhdGUoRHUpfSxpLmNsYW1wPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdSgpKTpyfSxpLmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdSgpKTplfSxpLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBYaShuLHQpfSxpLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGkobix0LGUpfSxpLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIFppKG4sdCksdSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWkobix0LGUscil9LHUoKX1mdW5jdGlvbiBZaShuLHQpe3JldHVybiB0YS5yZWJpbmQobix0LCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gWmkobix0KXtyZXR1cm4gRmkobixIaShWaShuLHQpWzJdKSl9ZnVuY3Rpb24gVmkobix0KXtudWxsPT10JiYodD0xMCk7dmFyIGU9UGkobikscj1lWzFdLWVbMF0sdT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIvdCkvTWF0aC5MTjEwKSksaT10L3IqdTtyZXR1cm4uMTU+PWk/dSo9MTA6LjM1Pj1pP3UqPTU6Ljc1Pj1pJiYodSo9MiksZVswXT1NYXRoLmNlaWwoZVswXS91KSp1LGVbMV09TWF0aC5mbG9vcihlWzFdL3UpKnUrLjUqdSxlWzJdPXUsZX1mdW5jdGlvbiBYaShuLHQpe3JldHVybiB0YS5yYW5nZS5hcHBseSh0YSxWaShuLHQpKX1mdW5jdGlvbiAkaShuLHQsZSl7dmFyIHI9Vmkobix0KTtpZihlKXt2YXIgdT1pYy5leGVjKGUpO2lmKHUuc2hpZnQoKSwicyI9PT11WzhdKXt2YXIgaT10YS5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoZ2EoclswXSksZ2EoclsxXSkpKTtyZXR1cm4gdVs3XXx8KHVbN109Ii4iK0JpKGkuc2NhbGUoclsyXSkpKSx1WzhdPSJmIixlPXRhLmZvcm1hdCh1LmpvaW4oIiIpKSxmdW5jdGlvbihuKXtyZXR1cm4gZShpLnNjYWxlKG4pKStpLnN5bWJvbH19dVs3XXx8KHVbN109Ii4iK1dpKHVbOF0scikpLGU9dS5qb2luKCIiKX1lbHNlIGU9IiwuIitCaShyWzJdKSsiZiI7cmV0dXJuIHRhLmZvcm1hdChlKX1mdW5jdGlvbiBCaShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBXaShuLHQpe3ZhciBlPUJpKHRbMl0pO3JldHVybiBuIGluIHlsP01hdGguYWJzKGUtQmkoTWF0aC5tYXgoZ2EodFswXSksZ2EodFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5jdGlvbiBKaShuLHQsZSxyKXtmdW5jdGlvbiB1KG4pe3JldHVybihlP01hdGgubG9nKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWluKChyPXQubWFwKE51bWJlcikpLm1hcCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFwKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1GaShyLm1hcCh1KSxlP01hdGg6eGwpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlja3M9ZnVuY3Rpb24oKXt2YXIgbj1QaShyKSxvPVtdLGE9blswXSxjPW5bMV0sbD1NYXRoLmZsb29yKHUoYSkpLHM9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihpc0Zpbml0ZShzLWwpKXtpZihlKXtmb3IoO3M+bDtsKyspZm9yKHZhciBoPTE7Zj5oO2grKylvLnB1c2goaShsKSpoKTtvLnB1c2goaShsKSl9ZWxzZSBmb3Ioby5wdXNoKGkobCkpO2wrKzxzOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0pby5wdXNoKGkobCkqaCk7Zm9yKGw9MDtvW2xdPGE7bCsrKTtmb3Iocz1vLmxlbmd0aDtvW3MtMV0+YztzLS0pO289by5zbGljZShsLHMpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWw7YXJndW1lbnRzLmxlbmd0aDwyP3Q9TWw6ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXRhLmZvcm1hdCh0KSk7dmFyIHIsYT1NYXRoLm1heCguMSxuL28udGlja3MoKS5sZW5ndGgpLGM9ZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixNYXRoLmZsb29yKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qobik6IiJ9fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSmkobi5jb3B5KCksdCxlLHIpfSxZaShvLG4pfWZ1bmN0aW9uIEdpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKHUodCkpfXZhciB1PUtpKHQpLGk9S2koMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAoTnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVybiBYaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gJGkoZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKFppKGUsbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PUtpKHQ9byksaT1LaSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2kobi5jb3B5KCksdCxlKX0sWWkocixuKX1mdW5jdGlvbiBLaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+dD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gUWkobix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBpWygodS5nZXQoZSl8fCgicmFuZ2UiPT09dC50P3Uuc2V0KGUsbi5wdXNoKGUpKTowLzApKS0xKSVpLmxlbmd0aF19ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0YS5yYW5nZShuLmxlbmd0aCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0K2Uqbn0pfXZhciB1LGksbztyZXR1cm4gZS5kb21haW49ZnVuY3Rpb24ocil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG47bj1bXSx1PW5ldyBsO2Zvcih2YXIgaSxvPS0xLGE9ci5sZW5ndGg7KytvPGE7KXUuaGFzKGk9cltvXSl8fHUuc2V0KGksbi5wdXNoKGkpKTtyZXR1cm4gZVt0LnRdLmFwcGx5KGUsdC5hKX0sZS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1uLG89MCx0PXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LGUpOml9LGUucmFuZ2VQb2ludHM9ZnVuY3Rpb24odSxhKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApO3ZhciBjPXVbMF0sbD11WzFdLHM9bi5sZW5ndGg8Mj8oYz0oYytsKS8yLDApOihsLWMpLyhuLmxlbmd0aC0xK2EpO3JldHVybiBpPXIoYytzKmEvMixzKSxvPTAsdD17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24odSxhKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApO3ZhciBjPXVbMF0sbD11WzFdLHM9bi5sZW5ndGg8Mj8oYz1sPU1hdGgucm91bmQoKGMrbCkvMiksMCk6KGwtYykvKG4ubGVuZ3RoLTErYSl8MDtyZXR1cm4gaT1yKGMrTWF0aC5yb3VuZChzKmEvMisobC1jLShuLmxlbmd0aC0xK2EpKnMpLzIpLHMpLG89MCx0PXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZUJhbmRzPWZ1bmN0aW9uKHUsYSxjKXthcmd1bWVudHMubGVuZ3RoPDImJihhPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGM9YSk7dmFyIGw9dVsxXTx1WzBdLHM9dVtsLTBdLGY9dVsxLWxdLGg9KGYtcykvKG4ubGVuZ3RoLWErMipjKTtyZXR1cm4gaT1yKHMraCpjLGgpLGwmJmkucmV2ZXJzZSgpLG89aCooMS1hKSx0PXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odSxhLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGE9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYz1hKTt2YXIgbD11WzFdPHVbMF0scz11W2wtMF0sZj11WzEtbF0saD1NYXRoLmZsb29yKChmLXMpLyhuLmxlbmd0aC1hKzIqYykpO3JldHVybiBpPXIocytNYXRoLnJvdW5kKChmLXMtKG4ubGVuZ3RoLWEpKmgpLzIpLGgpLGwmJmkucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChoKigxLWEpKSx0PXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxlfSxlLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFBpKHQuYVswXSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBRaShuLHQpfSxlLmRvbWFpbihuKX1mdW5jdGlvbiBubyhuLHQpe2Z1bmN0aW9uIGkoKXt2YXIgZT0wLHI9dC5sZW5ndGg7Zm9yKGE9W107KytlPHI7KWFbZS0xXT10YS5xdWFudGlsZShuLGUvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhuKXtyZXR1cm4gaXNOYU4obj0rbik/dm9pZCAwOnRbdGEuYmlzZWN0KGEsbildfXZhciBhO3JldHVybiBvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChyKS5maWx0ZXIodSkuc29ydChlKSxpKCkpOm59LG8ucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixpKCkpOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXQuaW5kZXhPZihlKSwwPmU/WzAvMCwwLzBdOltlPjA/YVtlLTFdOm5bMF0sZTxhLmxlbmd0aD9hW2VdOm5bbi5sZW5ndGgtMV1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbm8obix0KX0saSgpfWZ1bmN0aW9uIHRvKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9uIHUoKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxvO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkpOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhPZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdG8obix0LGUpfSx1KCl9ZnVuY3Rpb24gZW8obix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj1lP3RbdGEuYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBlbyhuLHQpfSxlfWZ1bmN0aW9uIHJvKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0KTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBYaShuLHQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGkobix0LGUpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcm8obil9LHR9ZnVuY3Rpb24gdW8oKXtyZXR1cm4gMH1mdW5jdGlvbiBpbyhuKXtyZXR1cm4gbi5pbm5lclJhZGl1c31mdW5jdGlvbiBvbyhuKXtyZXR1cm4gbi5vdXRlclJhZGl1c31mdW5jdGlvbiBhbyhuKXtyZXR1cm4gbi5zdGFydEFuZ2xlfWZ1bmN0aW9uIGNvKG4pe3JldHVybiBuLmVuZEFuZ2xlfWZ1bmN0aW9uIGxvKG4pe3JldHVybiBuJiZuLnBhZEFuZ2xlfWZ1bmN0aW9uIHNvKG4sdCxlLHIpe3JldHVybihuLWUpKnQtKHQtcikqbj4wPzA6MX1mdW5jdGlvbiBmbyhuLHQsZSxyLHUpe3ZhciBpPW5bMF0tdFswXSxvPW5bMV0tdFsxXSxhPSh1P3I6LXIpL01hdGguc3FydChpKmkrbypvKSxjPWEqbyxsPS1hKmkscz1uWzBdK2MsZj1uWzFdK2wsaD10WzBdK2MsZz10WzFdK2wscD0ocytoKS8yLHY9KGYrZykvMixkPWgtcyxtPWctZix5PWQqZCttKm0sTT1lLXIseD1zKmctaCpmLGI9KDA+bT8tMToxKSpNYXRoLnNxcnQoTSpNKnkteCp4KSxfPSh4Km0tZCpiKS95LHc9KC14KmQtbSpiKS95LFM9KHgqbStkKmIpL3ksaz0oLXgqZCttKmIpL3ksRT1fLXAsQT13LXYsTj1TLXAsQz1rLXY7cmV0dXJuIEUqRStBKkE+TipOK0MqQyYmKF89Uyx3PWspLFtbXy1jLHctbF0sW18qZS9NLHcqZS9NXV19ZnVuY3Rpb24gaG8obil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBvKCl7bC5wdXNoKCJNIixpKG4ocyksYSkpfWZvcih2YXIgYyxsPVtdLHM9W10sZj0tMSxoPXQubGVuZ3RoLGc9RXQoZSkscD1FdChyKTsrK2Y8aDspdS5jYWxsKHRoaXMsYz10W2ZdLGYpP3MucHVzaChbK2cuY2FsbCh0aGlzLGMsZiksK3AuY2FsbCh0aGlzLGMsZildKTpzLmxlbmd0aCYmKG8oKSxzPVtdKTtyZXR1cm4gcy5sZW5ndGgmJm8oKSxsLmxlbmd0aD9sLmpvaW4oIiIpOm51bGx9dmFyIGU9QXIscj1Ocix1PU5lLGk9Z28sbz1pLmtleSxhPS43O3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bix0KTpyfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bix0KTp1fSx0LmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP2k9bjooaT1FbC5nZXQobil8fGdvKS5rZXksdCk6b30sdC50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4sdCk6YX0sdH1mdW5jdGlvbiBnbyhuKXtyZXR1cm4gbi5qb2luKCJMIil9ZnVuY3Rpb24gcG8obil7cmV0dXJuIGdvKG4pKyJaIn1mdW5jdGlvbiB2byhuKXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLHI9blswXSx1PVtyWzBdLCIsIixyWzFdXTsrK3Q8ZTspdS5wdXNoKCJIIiwoclswXSsocj1uW3RdKVswXSkvMiwiViIsclsxXSk7cmV0dXJuIGU+MSYmdS5wdXNoKCJIIixyWzBdKSx1LmpvaW4oIiIpfWZ1bmN0aW9uIG1vKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIlYiLChyPW5bdF0pWzFdLCJIIixyWzBdKTtyZXR1cm4gdS5qb2luKCIiKX1mdW5jdGlvbiB5byhuKXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLHI9blswXSx1PVtyWzBdLCIsIixyWzFdXTsrK3Q8ZTspdS5wdXNoKCJIIiwocj1uW3RdKVswXSwiViIsclsxXSk7cmV0dXJuIHUuam9pbigiIil9ZnVuY3Rpb24gTW8obix0KXtyZXR1cm4gbi5sZW5ndGg8ND9nbyhuKTpuWzFdK19vKG4uc2xpY2UoMSwtMSksd28obix0KSl9ZnVuY3Rpb24geG8obix0KXtyZXR1cm4gbi5sZW5ndGg8Mz9nbyhuKTpuWzBdK19vKChuLnB1c2goblswXSksbiksd28oW25bbi5sZW5ndGgtMl1dLmNvbmNhdChuLFtuWzFdXSksdCkpfWZ1bmN0aW9uIGJvKG4sdCl7cmV0dXJuIG4ubGVuZ3RoPDM/Z28obik6blswXStfbyhuLHdvKG4sdCkpfWZ1bmN0aW9uIF9vKG4sdCl7aWYodC5sZW5ndGg8MXx8bi5sZW5ndGghPXQubGVuZ3RoJiZuLmxlbmd0aCE9dC5sZW5ndGgrMilyZXR1cm4gZ28obik7dmFyIGU9bi5sZW5ndGghPXQubGVuZ3RoLHI9IiIsdT1uWzBdLGk9blsxXSxvPXRbMF0sYT1vLGM9MTtpZihlJiYocis9IlEiKyhpWzBdLTIqb1swXS8zKSsiLCIrKGlbMV0tMipvWzFdLzMpKyIsIitpWzBdKyIsIitpWzFdLHU9blsxXSxjPTIpLHQubGVuZ3RoPjEpe2E9dFsxXSxpPW5bY10sYysrLHIrPSJDIisodVswXStvWzBdKSsiLCIrKHVbMV0rb1sxXSkrIiwiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIraVswXSsiLCIraVsxXTtmb3IodmFyIGw9MjtsPHQubGVuZ3RoO2wrKyxjKyspaT1uW2NdLGE9dFtsXSxyKz0iUyIrKGlbMF0tYVswXSkrIiwiKyhpWzFdLWFbMV0pKyIsIitpWzBdKyIsIitpWzFdfWlmKGUpe3ZhciBzPW5bY107cis9IlEiKyhpWzBdKzIqYVswXS8zKSsiLCIrKGlbMV0rMiphWzFdLzMpKyIsIitzWzBdKyIsIitzWzFdfXJldHVybiByfWZ1bmN0aW9uIHdvKG4sdCl7Zm9yKHZhciBlLHI9W10sdT0oMS10KS8yLGk9blswXSxvPW5bMV0sYT0xLGM9bi5sZW5ndGg7KythPGM7KWU9aSxpPW8sbz1uW2FdLHIucHVzaChbdSoob1swXS1lWzBdKSx1KihvWzFdLWVbMV0pXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gU28obil7aWYobi5sZW5ndGg8MylyZXR1cm4gZ28obik7dmFyIHQ9MSxlPW4ubGVuZ3RoLHI9blswXSx1PXJbMF0saT1yWzFdLG89W3UsdSx1LChyPW5bMV0pWzBdXSxhPVtpLGksaSxyWzFdXSxjPVt1LCIsIixpLCJMIixObyhDbCxvKSwiLCIsTm8oQ2wsYSldO2ZvcihuLnB1c2gobltlLTFdKTsrK3Q8PWU7KXI9blt0XSxvLnNoaWZ0KCksby5wdXNoKHJbMF0pLGEuc2hpZnQoKSxhLnB1c2goclsxXSksQ28oYyxvLGEpO3JldHVybiBuLnBvcCgpLGMucHVzaCgiTCIsciksYy5qb2luKCIiKX1mdW5jdGlvbiBrbyhuKXtpZihuLmxlbmd0aDw0KXJldHVybiBnbyhuKTtmb3IodmFyIHQsZT1bXSxyPS0xLHU9bi5sZW5ndGgsaT1bMF0sbz1bMF07KytyPDM7KXQ9bltyXSxpLnB1c2godFswXSksby5wdXNoKHRbMV0pO2ZvcihlLnB1c2goTm8oQ2wsaSkrIiwiK05vKENsLG8pKSwtLXI7KytyPHU7KXQ9bltyXSxpLnNoaWZ0KCksaS5wdXNoKHRbMF0pLG8uc2hpZnQoKSxvLnB1c2godFsxXSksQ28oZSxpLG8pO3JldHVybiBlLmpvaW4oIiIpfWZ1bmN0aW9uIEVvKG4pe2Zvcih2YXIgdCxlLHI9LTEsdT1uLmxlbmd0aCxpPXUrNCxvPVtdLGE9W107KytyPDQ7KWU9bltyJXVdLG8ucHVzaChlWzBdKSxhLnB1c2goZVsxXSk7Zm9yKHQ9W05vKENsLG8pLCIsIixObyhDbCxhKV0sLS1yOysrcjxpOyllPW5bciV1XSxvLnNoaWZ0KCksby5wdXNoKGVbMF0pLGEuc2hpZnQoKSxhLnB1c2goZVsxXSksQ28odCxvLGEpO3JldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIEFvKG4sdCl7dmFyIGU9bi5sZW5ndGgtMTtpZihlKWZvcih2YXIgcix1LGk9blswXVswXSxvPW5bMF1bMV0sYT1uW2VdWzBdLWksYz1uW2VdWzFdLW8sbD0tMTsrK2w8PWU7KXI9bltsXSx1PWwvZSxyWzBdPXQqclswXSsoMS10KSooaSt1KmEpLHJbMV09dCpyWzFdKygxLXQpKihvK3UqYyk7cmV0dXJuIFNvKG4pfWZ1bmN0aW9uIE5vKG4sdCl7cmV0dXJuIG5bMF0qdFswXStuWzFdKnRbMV0rblsyXSp0WzJdK25bM10qdFszXX1mdW5jdGlvbiBDbyhuLHQsZSl7bi5wdXNoKCJDIixObyhBbCx0KSwiLCIsTm8oQWwsZSksIiwiLE5vKE5sLHQpLCIsIixObyhObCxlKSwiLCIsTm8oQ2wsdCksIiwiLE5vKENsLGUpKX1mdW5jdGlvbiB6byhuLHQpe3JldHVybih0WzFdLW5bMV0pLyh0WzBdLW5bMF0pfWZ1bmN0aW9uIHFvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgtMSxyPVtdLHU9blswXSxpPW5bMV0sbz1yWzBdPXpvKHUsaSk7Kyt0PGU7KXJbdF09KG8rKG89em8odT1pLGk9blt0KzFdKSkpLzI7cmV0dXJuIHJbdF09byxyfWZ1bmN0aW9uIExvKG4pe2Zvcih2YXIgdCxlLHIsdSxpPVtdLG89cW8obiksYT0tMSxjPW4ubGVuZ3RoLTE7KythPGM7KXQ9em8oblthXSxuW2ErMV0pLGdhKHQpPENhP29bYV09b1thKzFdPTA6KGU9b1thXS90LHI9b1thKzFdL3QsdT1lKmUrcipyLHU+OSYmKHU9Myp0L01hdGguc3FydCh1KSxvW2FdPXUqZSxvW2ErMV09dSpyKSk7Zm9yKGE9LTE7KythPD1jOyl1PShuW01hdGgubWluKGMsYSsxKV1bMF0tbltNYXRoLm1heCgwLGEtMSldWzBdKS8oNiooMStvW2FdKm9bYV0pKSxpLnB1c2goW3V8fDAsb1thXSp1fHwwXSk7cmV0dXJuIGl9ZnVuY3Rpb24gVG8obil7cmV0dXJuIG4ubGVuZ3RoPDM/Z28obik6blswXStfbyhuLExvKG4pKX1mdW5jdGlvbiBSbyhuKXtmb3IodmFyIHQsZSxyLHU9LTEsaT1uLmxlbmd0aDsrK3U8aTspdD1uW3VdLGU9dFswXSxyPXRbMV0tUmEsdFswXT1lKk1hdGguY29zKHIpLHRbMV09ZSpNYXRoLnNpbihyKTtyZXR1cm4gbn1mdW5jdGlvbiBEbyhuKXtmdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIGMoKXt2LnB1c2goIk0iLGEobihtKSxmKSxzLGwobihkLnJldmVyc2UoKSksZiksIloiKX1mb3IodmFyIGgsZyxwLHY9W10sZD1bXSxtPVtdLHk9LTEsTT10Lmxlbmd0aCx4PUV0KGUpLGI9RXQodSksXz1lPT09cj9mdW5jdGlvbigpe3JldHVybiBnfTpFdChyKSx3PXU9PT1pP2Z1bmN0aW9uKCl7cmV0dXJuIHB9OkV0KGkpOysreTxNOylvLmNhbGwodGhpcyxoPXRbeV0seSk/KGQucHVzaChbZz0reC5jYWxsKHRoaXMsaCx5KSxwPStiLmNhbGwodGhpcyxoLHkpXSksbS5wdXNoKFsrXy5jYWxsKHRoaXMsaCx5KSwrdy5jYWxsKHRoaXMsaCx5KV0pKTpkLmxlbmd0aCYmKGMoKSxkPVtdLG09W10pO3JldHVybiBkLmxlbmd0aCYmYygpLHYubGVuZ3RoP3Yuam9pbigiIik6bnVsbH12YXIgZT1BcixyPUFyLHU9MCxpPU5yLG89TmUsYT1nbyxjPWEua2V5LGw9YSxzPSJMIixmPS43O3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cj1uLHQpOnJ9LHQueDA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0LngxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cg0KfSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9aT1uLHQpOml9LHQueTA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bix0KTp1fSx0LnkxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW4sdCk6aX0sdC5kZWZpbmVkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sdCk6b30sdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9hPW46KGE9RWwuZ2V0KG4pfHxnbykua2V5LGw9YS5yZXZlcnNlfHxhLHM9YS5jbG9zZWQ/Ik0iOiJMIix0KTpjfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9bix0KTpmfSx0fWZ1bmN0aW9uIFBvKG4pe3JldHVybiBuLnJhZGl1c31mdW5jdGlvbiBVbyhuKXtyZXR1cm5bbi54LG4ueV19ZnVuY3Rpb24gam8obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZT10WzBdLHI9dFsxXS1SYTtyZXR1cm5bZSpNYXRoLmNvcyhyKSxlKk1hdGguc2luKHIpXX19ZnVuY3Rpb24gRm8oKXtyZXR1cm4gNjR9ZnVuY3Rpb24gSG8oKXtyZXR1cm4iY2lyY2xlIn1mdW5jdGlvbiBPbyhuKXt2YXIgdD1NYXRoLnNxcnQobi9xYSk7cmV0dXJuIk0wLCIrdCsiQSIrdCsiLCIrdCsiIDAgMSwxIDAsIistdCsiQSIrdCsiLCIrdCsiIDAgMSwxIDAsIit0KyJaIn1mdW5jdGlvbiBJbyhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxlOyh0PXRoaXNbbl0pJiYoZT10W3QuYWN0aXZlXSkmJigtLXQuY291bnQ/ZGVsZXRlIHRbdC5hY3RpdmVdOmRlbGV0ZSB0aGlzW25dLHQuYWN0aXZlKz0uNSxlLmV2ZW50JiZlLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLmluZGV4KSl9fWZ1bmN0aW9uIFlvKG4sdCxlKXtyZXR1cm4geWEobixQbCksbi5uYW1lc3BhY2U9dCxuLmlkPWUsbn1mdW5jdGlvbiBabyhuLHQsZSxyKXt2YXIgdT1uLmlkLGk9bi5uYW1lc3BhY2U7cmV0dXJuIFkobiwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLG8sYSl7bltpXVt1XS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18sbyxhKSkpfTooZT1yKGUpLGZ1bmN0aW9uKG4pe25baV1bdV0udHdlZW4uc2V0KHQsZSl9KSl9ZnVuY3Rpb24gVm8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gWG8obil7cmV0dXJuIG51bGw9PW4/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrbisiX18ifWZ1bmN0aW9uICRvKG4sdCxlLHIsdSl7dmFyIGk9bltlXXx8KG5bZV09e2FjdGl2ZTowLGNvdW50OjB9KSxvPWlbcl07aWYoIW8pe3ZhciBhPXUudGltZTtvPWlbcl09e3R3ZWVuOm5ldyBsLHRpbWU6YSxkZWxheTp1LmRlbGF5LGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2UsaW5kZXg6dH0sdT1udWxsLCsraS5jb3VudCx0YS50aW1lcihmdW5jdGlvbih1KXtmdW5jdGlvbiBjKGUpe2lmKGkuYWN0aXZlPnIpcmV0dXJuIHMoKTt2YXIgdT1pW2kuYWN0aXZlXTt1JiYoLS1pLmNvdW50LGRlbGV0ZSBpW2kuYWN0aXZlXSx1LmV2ZW50JiZ1LmV2ZW50LmludGVycnVwdC5jYWxsKG4sbi5fX2RhdGFfXyx1LmluZGV4KSksaS5hY3RpdmU9cixvLmV2ZW50JiZvLmV2ZW50LnN0YXJ0LmNhbGwobixuLl9fZGF0YV9fLHQpLG8udHdlZW4uZm9yRWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLG4uX19kYXRhX18sdCkpJiZ2LnB1c2gocil9KSxoPW8uZWFzZSxmPW8uZHVyYXRpb24sdGEudGltZXIoZnVuY3Rpb24oKXtyZXR1cm4gcC5jPWwoZXx8MSk/TmU6bCwxfSwwLGEpfWZ1bmN0aW9uIGwoZSl7aWYoaS5hY3RpdmUhPT1yKXJldHVybiAxO2Zvcih2YXIgdT1lL2YsYT1oKHUpLGM9di5sZW5ndGg7Yz4wOyl2Wy0tY10uY2FsbChuLGEpO3JldHVybiB1Pj0xPyhvLmV2ZW50JiZvLmV2ZW50LmVuZC5jYWxsKG4sbi5fX2RhdGFfXyx0KSxzKCkpOnZvaWQgMH1mdW5jdGlvbiBzKCl7cmV0dXJuLS1pLmNvdW50P2RlbGV0ZSBpW3JdOmRlbGV0ZSBuW2VdLDF9dmFyIGYsaCxnPW8uZGVsYXkscD1lYyx2PVtdO3JldHVybiBwLnQ9ZythLHU+PWc/Yyh1LWcpOnZvaWQocC5jPWMpfSwwLGEpfX1mdW5jdGlvbiBCbyhuLHQsZSl7bi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKG4pe3ZhciByPXQobik7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShyKT9yOmUobikpKyIsMCkifSl9ZnVuY3Rpb24gV28obix0LGUpe24uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXt2YXIgcj10KG4pO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShyKT9yOmUobikpKyIpIn0pfWZ1bmN0aW9uIEpvKG4pe3JldHVybiBuLnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gR28obix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG4odCl9ZnVuY3Rpb24gdShuLGUpe3ZhciByPW5bMV0tblswXSx1PXIvZSxpPXRhLmJpc2VjdChWbCx1KTtyZXR1cm4gaT09VmwubGVuZ3RoP1t0LnllYXIsVmkobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4vMzE1MzZlNn0pLGUpWzJdXTppP3RbdS9WbFtpLTFdPFZsW2ldL3U/aS0xOmldOltCbCxWaShuLGUpWzJdXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIEtvKG4uaW52ZXJ0KHQpKX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4uZG9tYWluKHQpLHIpOm4uZG9tYWluKCkubWFwKEtvKX0sci5uaWNlPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4haXNOYU4oZSkmJiFuLnJhbmdlKGUsS28oK2UrMSksdCkubGVuZ3RofXZhciBpPXIuZG9tYWluKCksbz1QaShpKSxhPW51bGw9PW4/dShvLDEwKToibnVtYmVyIj09dHlwZW9mIG4mJnUobyxuKTtyZXR1cm4gYSYmKG49YVswXSx0PWFbMV0pLHIuZG9tYWluKEZpKGksdD4xP3tmbG9vcjpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmZsb29yKHQpKTspdD1Lbyh0LTEpO3JldHVybiB0fSxjZWlsOmZ1bmN0aW9uKHQpe2Zvcig7ZSh0PW4uY2VpbCh0KSk7KXQ9S28oK3QrMSk7cmV0dXJuIHR9fTpuKSl9LHIudGlja3M9ZnVuY3Rpb24obix0KXt2YXIgZT1QaShyLmRvbWFpbigpKSxpPW51bGw9PW4/dShlLDEwKToibnVtYmVyIj09dHlwZW9mIG4/dShlLG4pOiFuLnJhbmdlJiZbe3JhbmdlOm59LHRdO3JldHVybiBpJiYobj1pWzBdLHQ9aVsxXSksbi5yYW5nZShlWzBdLEtvKCtlWzFdKzEpLDE+dD8xOnQpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdvKG4uY29weSgpLHQsZSl9LFlpKHIsbil9ZnVuY3Rpb24gS28obil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIFFvKG4pe3JldHVybiBKU09OLnBhcnNlKG4ucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBuYShuKXt2YXIgdD11YS5jcmVhdGVSYW5nZSgpO3JldHVybiB0LnNlbGVjdE5vZGUodWEuYm9keSksdC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobi5yZXNwb25zZVRleHQpfXZhciB0YT17dmVyc2lvbjoiMy41LjUifSxlYT1bXS5zbGljZSxyYT1mdW5jdGlvbihuKXtyZXR1cm4gZWEuY2FsbChuKX0sdWE9dGhpcy5kb2N1bWVudDtpZih1YSl0cnl7cmEodWEuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMpWzBdLm5vZGVUeXBlfWNhdGNoKGlhKXtyYT1mdW5jdGlvbihuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT1uZXcgQXJyYXkodCk7dC0tOyllW3RdPW5bdF07cmV0dXJuIGV9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSx1YSl0cnl7dWEuY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKG9hKXt2YXIgYWE9dGhpcy5FbGVtZW50LnByb3RvdHlwZSxjYT1hYS5zZXRBdHRyaWJ1dGUsbGE9YWEuc2V0QXR0cmlidXRlTlMsc2E9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxmYT1zYS5zZXRQcm9wZXJ0eTthYS5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24obix0KXtjYS5jYWxsKHRoaXMsbix0KyIiKX0sYWEuc2V0QXR0cmlidXRlTlM9ZnVuY3Rpb24obix0LGUpe2xhLmNhbGwodGhpcyxuLHQsZSsiIil9LHNhLnNldFByb3BlcnR5PWZ1bmN0aW9uKG4sdCxlKXtmYS5jYWxsKHRoaXMsbix0KyIiLGUpfX10YS5hc2NlbmRpbmc9ZSx0YS5kZXNjZW5kaW5nPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4+dD8tMTp0Pm4/MTp0Pj1uPzA6MC8wfSx0YS5taW49ZnVuY3Rpb24obix0KXt2YXIgZSxyLHU9LTEsaT1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK3U8aTspaWYobnVsbCE9KHI9blt1XSkmJnI+PXIpe2U9cjticmVha31mb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmZT5yJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGk7KWlmKG51bGwhPShyPXQuY2FsbChuLG5bdV0sdSkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK3U8aTspbnVsbCE9KHI9dC5jYWxsKG4sblt1XSx1KSkmJmU+ciYmKGU9cil9cmV0dXJuIGV9LHRhLm1heD1mdW5jdGlvbihuLHQpe3ZhciBlLHIsdT0tMSxpPW4ubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrdTxpOylpZihudWxsIT0ocj1uW3VdKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7Kyt1PGk7KW51bGwhPShyPW5bdV0pJiZyPmUmJihlPXIpfWVsc2V7Zm9yKDsrK3U8aTspaWYobnVsbCE9KHI9dC5jYWxsKG4sblt1XSx1KSkmJnI+PXIpe2U9cjticmVha31mb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj5lJiYoZT1yKX1yZXR1cm4gZX0sdGEuZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8bzspaWYobnVsbCE9KHI9bltpXSkmJnI+PXIpe2U9dT1yO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShyPW5baV0pJiYoZT5yJiYoZT1yKSxyPnUmJih1PXIpKX1lbHNle2Zvcig7KytpPG87KWlmKG51bGwhPShyPXQuY2FsbChuLG5baV0saSkpJiZyPj1yKXtlPXU9cjticmVha31mb3IoOysraTxvOyludWxsIT0ocj10LmNhbGwobixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19LHRhLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCxpPW4ubGVuZ3RoLG89LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK288aTspdShlPStuW29dKSYmKHIrPWUpO2Vsc2UgZm9yKDsrK288aTspdShlPSt0LmNhbGwobixuW29dLG8pKSYmKHIrPWUpO3JldHVybiByfSx0YS5tZWFuPWZ1bmN0aW9uKG4sdCl7dmFyIGUsaT0wLG89bi5sZW5ndGgsYT0tMSxjPW87aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8bzspdShlPXIoblthXSkpP2krPWU6LS1jO2Vsc2UgZm9yKDsrK2E8bzspdShlPXIodC5jYWxsKG4sblthXSxhKSkpP2krPWU6LS1jO3JldHVybiBjP2kvYzp2b2lkIDB9LHRhLnF1YW50aWxlPWZ1bmN0aW9uKG4sdCl7dmFyIGU9KG4ubGVuZ3RoLTEpKnQrMSxyPU1hdGguZmxvb3IoZSksdT0rbltyLTFdLGk9ZS1yO3JldHVybiBpP3UraSoobltyXS11KTp1fSx0YS5tZWRpYW49ZnVuY3Rpb24obix0KXt2YXIgaSxvPVtdLGE9bi5sZW5ndGgsYz0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYzxhOyl1KGk9cihuW2NdKSkmJm8ucHVzaChpKTtlbHNlIGZvcig7KytjPGE7KXUoaT1yKHQuY2FsbChuLG5bY10sYykpKSYmby5wdXNoKGkpO3JldHVybiBvLmxlbmd0aD90YS5xdWFudGlsZShvLnNvcnQoZSksLjUpOnZvaWQgMH0sdGEudmFyaWFuY2U9ZnVuY3Rpb24obix0KXt2YXIgZSxpLG89bi5sZW5ndGgsYT0wLGM9MCxsPS0xLHM9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbDxvOyl1KGU9cihuW2xdKSkmJihpPWUtYSxhKz1pLysrcyxjKz1pKihlLWEpKTtlbHNlIGZvcig7KytsPG87KXUoZT1yKHQuY2FsbChuLG5bbF0sbCkpKSYmKGk9ZS1hLGErPWkvKytzLGMrPWkqKGUtYSkpO3JldHVybiBzPjE/Yy8ocy0xKTp2b2lkIDB9LHRhLmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBuPXRhLnZhcmlhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbj9NYXRoLnNxcnQobik6bn07dmFyIGhhPWkoZSk7dGEuYmlzZWN0TGVmdD1oYS5sZWZ0LHRhLmJpc2VjdD10YS5iaXNlY3RSaWdodD1oYS5yaWdodCx0YS5iaXNlY3Rvcj1mdW5jdGlvbihuKXtyZXR1cm4gaSgxPT09bi5sZW5ndGg/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShuKHQpLHIpfTpuKX0sdGEuc2h1ZmZsZT1mdW5jdGlvbihuLHQsZSl7KGk9YXJndW1lbnRzLmxlbmd0aCk8MyYmKGU9bi5sZW5ndGgsMj5pJiYodD0wKSk7Zm9yKHZhciByLHUsaT1lLXQ7aTspdT1NYXRoLnJhbmRvbSgpKmktLXwwLHI9bltpK3RdLG5baSt0XT1uW3UrdF0sblt1K3RdPXI7cmV0dXJuIG59LHRhLnBlcm11dGU9ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPW5bdFtlXV07cmV0dXJuIHJ9LHRhLnBhaXJzPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlPTAscj1uLmxlbmd0aC0xLHU9blswXSxpPW5ldyBBcnJheSgwPnI/MDpyKTtyPmU7KWlbZV09W3Q9dSx1PW5bKytlXV07cmV0dXJuIGl9LHRhLnppcD1mdW5jdGlvbigpe2lmKCEocj1hcmd1bWVudHMubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIG49LTEsdD10YS5taW4oYXJndW1lbnRzLG8pLGU9bmV3IEFycmF5KHQpOysrbjx0Oylmb3IodmFyIHIsdT0tMSxpPWVbbl09bmV3IEFycmF5KHIpOysrdTxyOylpW3VdPWFyZ3VtZW50c1t1XVtuXTtyZXR1cm4gZX0sdGEudHJhbnNwb3NlPWZ1bmN0aW9uKG4pe3JldHVybiB0YS56aXAuYXBwbHkodGEsbil9LHRhLmtleXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4pdC5wdXNoKGUpO3JldHVybiB0fSx0YS52YWx1ZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4pdC5wdXNoKG5bZV0pO3JldHVybiB0fSx0YS5lbnRyaWVzPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiBuKXQucHVzaCh7a2V5OmUsdmFsdWU6bltlXX0pO3JldHVybiB0fSx0YS5tZXJnZT1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHU9bi5sZW5ndGgsaT0tMSxvPTA7KytpPHU7KW8rPW5baV0ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheShvKTstLXU+PTA7KWZvcihyPW5bdV0sdD1yLmxlbmd0aDstLXQ+PTA7KWVbLS1vXT1yW3RdO3JldHVybiBlfTt2YXIgZ2E9TWF0aC5hYnM7dGEucmFuZ2U9ZnVuY3Rpb24obix0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKGU9MSxhcmd1bWVudHMubGVuZ3RoPDImJih0PW4sbj0wKSksKHQtbikvZT09PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIHIsdT1bXSxpPWEoZ2EoZSkpLG89LTE7aWYobio9aSx0Kj1pLGUqPWksMD5lKWZvcig7KHI9bitlKisrbyk+dDspdS5wdXNoKHIvaSk7ZWxzZSBmb3IoOyhyPW4rZSorK28pPHQ7KXUucHVzaChyL2kpO3JldHVybiB1fSx0YS5tYXA9ZnVuY3Rpb24obix0KXt2YXIgZT1uZXcgbDtpZihuIGluc3RhbmNlb2YgbCluLmZvckVhY2goZnVuY3Rpb24obix0KXtlLnNldChuLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgcix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK3U8aTspZS5zZXQodSxuW3VdKTtlbHNlIGZvcig7Kyt1PGk7KWUuc2V0KHQuY2FsbChuLHI9blt1XSx1KSxyKX1lbHNlIGZvcih2YXIgbyBpbiBuKWUuc2V0KG8sbltvXSk7cmV0dXJuIGV9O3ZhciBwYT0iX19wcm90b19fIix2YT0iXHgwMCI7YyhsLHtoYXM6aCxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX1tzKG4pXX0sc2V0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX1tzKG4pXT10fSxyZW1vdmU6ZyxrZXlzOnAsdmFs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment